[llvm] ce05211 - [Reduce] Argument reduction: don't try to drop terminator instructions
    Roman Lebedev via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Mon Jul 20 14:06:23 PDT 2020
    
    
  
Author: Roman Lebedev
Date: 2020-07-21T00:06:03+03:00
New Revision: ce052110ac9c03f14e16a0f46697da2eabc7ac4c
URL: https://github.com/llvm/llvm-project/commit/ce052110ac9c03f14e16a0f46697da2eabc7ac4c
DIFF: https://github.com/llvm/llvm-project/commit/ce052110ac9c03f14e16a0f46697da2eabc7ac4c.diff
LOG: [Reduce] Argument reduction: don't try to drop terminator instructions
Newly-added test previously crashed.
While it is up for debate whether or not instruction reduction
should be indiscriminate in instruction dropping (there you can
just ensure that the test case is still -verify'ies), here
if we drop terminator, CloneFunctionInto() will immediately crash.
So let's not do that :)
Added: 
    llvm/test/Reduce/remove-args-used-by-ret.ll
Modified: 
    llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp
Removed: 
    
################################################################################
diff  --git a/llvm/test/Reduce/remove-args-used-by-ret.ll b/llvm/test/Reduce/remove-args-used-by-ret.ll
new file mode 100644
index 000000000000..13b7fe58e5f0
--- /dev/null
+++ b/llvm/test/Reduce/remove-args-used-by-ret.ll
@@ -0,0 +1,14 @@
+; RUN: llvm-reduce --test FileCheck --test-arg --check-prefixes=CHECK-ALL,CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t
+; RUN: cat %t | FileCheck --check-prefixes=CHECK-ALL,CHECK-FINAL %s
+
+; We can't drop arguments if they are used by terminator instructions.
+
+define i32 @t(i32 %a0, i32 %a1, i32 %a2) {
+; CHECK-ALL-LABEL: @t
+; CHECK-FINAL-NOT: %a1
+;
+; CHECK-INTERESTINGNESS: ret i32
+; CHECK-FINAL: ret i32 undef
+
+  ret i32 %a1
+}
diff  --git a/llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp b/llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp
index 88c3e326ff97..e0e1d1c22567 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceArguments.cpp
@@ -73,7 +73,8 @@ static void extractArgumentsFromModule(std::vector<Chunk> ChunksToKeep,
         continue;
       auto *I = cast<Instruction>(V);
       I->replaceAllUsesWith(UndefValue::get(I->getType()));
-      I->eraseFromParent();
+      if (!I->isTerminator())
+        I->eraseFromParent();
     }
 
     // No arguments to reduce
        
    
    
More information about the llvm-commits
mailing list