forked from OSchip/llvm-project
[llvm-reduce] Don't delete arguments of intrinsics
The argument reduction pass shouldn't remove arguments of intrinsics, because the resulting module is ill-formed, and so inherently uninteresting. Reviewed By: aeubanks Differential Revision: https://reviews.llvm.org/D103129
This commit is contained in:
parent
075f2370c7
commit
a240358833
|
@ -0,0 +1,14 @@
|
|||
; llvm-reduce shouldn't remove arguments of debug intrinsics, because the resulting module will be ill-formed.
|
||||
;
|
||||
; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=arguments --test FileCheck --test-arg --check-prefixes=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s --output %t
|
||||
; RUN: FileCheck --check-prefix=CHECK-FINAL %s < %t
|
||||
|
||||
; CHECK-INTERESTINGNESS: declare void @llvm.dbg.addr
|
||||
; CHECK-FINAL: declare void @llvm.dbg.addr(metadata, metadata, metadata)
|
||||
declare void @llvm.dbg.addr(metadata, metadata, metadata)
|
||||
; CHECK-INTERESTINGNESS: declare void @llvm.dbg.declare
|
||||
; CHECK-FINAL: declare void @llvm.dbg.declare(metadata, metadata, metadata)
|
||||
declare void @llvm.dbg.declare(metadata, metadata, metadata)
|
||||
; CHECK-INTERESTINGNESS: declare void @llvm.dbg.value
|
||||
; CHECK-FINAL: declare void @llvm.dbg.value(metadata, metadata, metadata)
|
||||
declare void @llvm.dbg.value(metadata, metadata, metadata)
|
|
@ -7,13 +7,14 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file implements a function which calls the Generic Delta pass in order
|
||||
// to reduce uninteresting Arguments from defined functions.
|
||||
// to reduce uninteresting Arguments from declared and defined functions.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "ReduceArguments.h"
|
||||
#include "Delta.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/IR/Intrinsics.h"
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
||||
|
@ -38,6 +39,14 @@ static void replaceFunctionCalls(Function &OldF, Function &NewF,
|
|||
}
|
||||
}
|
||||
|
||||
/// Returns whether or not this function should be considered a candidate for
|
||||
/// argument removal. Currently, functions with no arguments and intrinsics are
|
||||
/// not considered. Intrinsics aren't considered because their signatures are
|
||||
/// fixed.
|
||||
static bool shouldRemoveArguments(const Function &F) {
|
||||
return !F.arg_empty() && !F.isIntrinsic();
|
||||
}
|
||||
|
||||
/// Removes out-of-chunk arguments from functions, and modifies their calls
|
||||
/// accordingly. It also removes allocations of out-of-chunk arguments.
|
||||
static void extractArgumentsFromModule(std::vector<Chunk> ChunksToKeep,
|
||||
|
@ -48,7 +57,7 @@ static void extractArgumentsFromModule(std::vector<Chunk> ChunksToKeep,
|
|||
std::vector<Function *> Funcs;
|
||||
// Get inside-chunk arguments, as well as their parent function
|
||||
for (auto &F : *Program)
|
||||
if (!F.arg_empty()) {
|
||||
if (shouldRemoveArguments(F)) {
|
||||
Funcs.push_back(&F);
|
||||
for (auto &A : F.args())
|
||||
if (O.shouldKeep())
|
||||
|
@ -100,15 +109,15 @@ static void extractArgumentsFromModule(std::vector<Chunk> ChunksToKeep,
|
|||
}
|
||||
}
|
||||
|
||||
/// Counts the amount of arguments in non-declaration functions and prints their
|
||||
/// respective name, index, and parent function name
|
||||
/// Counts the amount of arguments in functions and prints their respective
|
||||
/// name, index, and parent function name
|
||||
static int countArguments(Module *Program) {
|
||||
// TODO: Silence index with --quiet flag
|
||||
outs() << "----------------------------\n";
|
||||
outs() << "Param Index Reference:\n";
|
||||
int ArgsCount = 0;
|
||||
for (auto &F : *Program)
|
||||
if (!F.arg_empty()) {
|
||||
if (shouldRemoveArguments(F)) {
|
||||
outs() << " " << F.getName() << "\n";
|
||||
for (auto &A : F.args())
|
||||
outs() << "\t" << ++ArgsCount << ": " << A.getName() << "\n";
|
||||
|
|
Loading…
Reference in New Issue