summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-06-07 20:20:33 +0000
committerDan Gohman <gohman@apple.com>2010-06-07 20:20:33 +0000
commitfb8ed43349563fee07ddc63b263510aa7e966d12 (patch)
treeb7d16bcce5786832772357742cc630b748e8c5af /llvm
parent34a2249fde1ba2b48921079e39e82461ede25106 (diff)
downloadbcm5719-llvm-fb8ed43349563fee07ddc63b263510aa7e966d12.tar.gz
bcm5719-llvm-fb8ed43349563fee07ddc63b263510aa7e966d12.zip
Make bugpoint dead-argument-hacking actually work, and actually test it.
llvm-svn: 105551
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp7
-rw-r--r--llvm/test/BugPoint/remove_arguments_test.ll2
2 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
index 692e47da71c..475eee8b19e 100644
--- a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
+++ b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
@@ -120,9 +120,14 @@ namespace {
typedef SmallVector<RetOrArg, 5> UseVector;
+ protected:
+ // DAH uses this to specify a different ID.
+ explicit DAE(void *ID) : ModulePass(ID) {}
+
public:
static char ID; // Pass identification, replacement for typeid
DAE() : ModulePass(&ID) {}
+
bool runOnModule(Module &M);
virtual bool ShouldHackArguments() const { return false; }
@@ -155,6 +160,8 @@ namespace {
/// by bugpoint.
struct DAH : public DAE {
static char ID;
+ DAH() : DAE(&ID) {}
+
virtual bool ShouldHackArguments() const { return true; }
};
}
diff --git a/llvm/test/BugPoint/remove_arguments_test.ll b/llvm/test/BugPoint/remove_arguments_test.ll
index fb17c78a140..39a1371640f 100644
--- a/llvm/test/BugPoint/remove_arguments_test.ll
+++ b/llvm/test/BugPoint/remove_arguments_test.ll
@@ -1,10 +1,12 @@
; RUN: bugpoint %s -output-prefix %t -bugpoint-crashcalls -silence-passes
+; RUN: llvm-dis remove_arguments_test.ll.tmp-reduced-simplified.bc -o - | FileCheck %s
; Test to make sure that arguments are removed from the function if they are
; unnecessary.
declare i32 @test2()
+; CHECK: define void @test() {
define i32 @test(i32 %A, i32 %B, float %C) {
call i32 @test2()
ret i32 %1
OpenPOWER on IntegriCloud