Run dead type elimination after dead argument elimination.
authorDan Gohman <gohman@apple.com>
Mon, 7 Jun 2010 20:28:37 +0000 (20:28 +0000)
committerDan Gohman <gohman@apple.com>
Mon, 7 Jun 2010 20:28:37 +0000 (20:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105552 91177308-0d34-0410-b5e6-96231b3b80d8

test/BugPoint/remove_arguments_test.ll
tools/bugpoint/ExtractFunction.cpp

index 39a1371640f60c30d67539d53a84208ea7ffb1e9..cf574d363a8f7a52edc492b16832909a2c74b18d 100644 (file)
@@ -2,12 +2,16 @@
 ; 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.
+; unnecessary. And clean up any types that that frees up too.
+
+; CHECK: target triple
+; CHECK-NOT: struct.anon
+%struct.anon = type { i32 }
 
 declare i32 @test2()
 
 ; CHECK: define void @test() {
-define i32 @test(i32 %A, i32 %B, float %C) {
+define i32 @test(i32 %A, %struct.anon* %B, float %C) {
        call i32 @test2()
        ret i32 %1
 }
index 82f787454644a953b262ab7853967c3554092bbc..c5aa6b43530534ec8fde4e3778ba536302f9c02a 100644 (file)
@@ -116,13 +116,14 @@ Module *BugDriver::performFinalCleanups(Module *M, bool MayModifySemantics) {
 
   std::vector<const PassInfo*> CleanupPasses;
   CleanupPasses.push_back(getPI(createGlobalDCEPass()));
-  CleanupPasses.push_back(getPI(createDeadTypeEliminationPass()));
 
   if (MayModifySemantics)
     CleanupPasses.push_back(getPI(createDeadArgHackingPass()));
   else
     CleanupPasses.push_back(getPI(createDeadArgEliminationPass()));
 
+  CleanupPasses.push_back(getPI(createDeadTypeEliminationPass()));
+
   Module *New = runPassesOn(M, CleanupPasses);
   if (New == 0) {
     errs() << "Final cleanups failed.  Sorry. :(  Please report a bug!\n";