Vendor import of llvm release_39 branch r279689:
https://llvm.org/svn/llvm-project/llvm/branches/release_39@279689
This commit is contained in:
parent
887f197370
commit
60a9e02f55
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/llvm/dist/; revision=304897 svn path=/vendor/llvm/llvm-release_390-r280324/; revision=305291; tag=vendor/llvm/llvm-release_390-r280324
@ -1538,17 +1538,6 @@ static bool tryToReplaceWithConstant(SCCPSolver &Solver, Value *V) {
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool tryToReplaceInstWithConstant(SCCPSolver &Solver, Instruction *Inst,
|
||||
bool shouldEraseFromParent) {
|
||||
if (!tryToReplaceWithConstant(Solver, Inst))
|
||||
return false;
|
||||
|
||||
// Delete the instruction.
|
||||
if (shouldEraseFromParent)
|
||||
Inst->eraseFromParent();
|
||||
return true;
|
||||
}
|
||||
|
||||
// runSCCP() - Run the Sparse Conditional Constant Propagation algorithm,
|
||||
// and return true if the function was modified.
|
||||
//
|
||||
@ -1597,8 +1586,9 @@ static bool runSCCP(Function &F, const DataLayout &DL,
|
||||
if (Inst->getType()->isVoidTy() || isa<TerminatorInst>(Inst))
|
||||
continue;
|
||||
|
||||
if (tryToReplaceInstWithConstant(Solver, Inst,
|
||||
true /* shouldEraseFromParent */)) {
|
||||
if (tryToReplaceWithConstant(Solver, Inst)) {
|
||||
if (isInstructionTriviallyDead(Inst))
|
||||
Inst->eraseFromParent();
|
||||
// Hey, we just changed something!
|
||||
MadeChanges = true;
|
||||
++NumInstRemoved;
|
||||
@ -1789,10 +1779,9 @@ static bool runIPSCCP(Module &M, const DataLayout &DL,
|
||||
Instruction *Inst = &*BI++;
|
||||
if (Inst->getType()->isVoidTy())
|
||||
continue;
|
||||
if (tryToReplaceInstWithConstant(
|
||||
Solver, Inst,
|
||||
!isa<CallInst>(Inst) &&
|
||||
!isa<TerminatorInst>(Inst) /* shouldEraseFromParent */)) {
|
||||
if (tryToReplaceWithConstant(Solver, Inst)) {
|
||||
if (!isa<CallInst>(Inst) && !isa<TerminatorInst>(Inst))
|
||||
Inst->eraseFromParent();
|
||||
// Hey, we just changed something!
|
||||
MadeChanges = true;
|
||||
++IPNumInstRemoved;
|
||||
|
@ -1,12 +1,16 @@
|
||||
; RUN: opt < %s -sccp -loop-deletion -simplifycfg -S | not grep br
|
||||
; RUN: opt < %s -sccp -loop-deletion -simplifycfg -S | FileCheck %s
|
||||
|
||||
declare double @sqrt(double) readnone nounwind
|
||||
%empty = type {}
|
||||
declare %empty @has_side_effects()
|
||||
|
||||
define double @test_0(i32 %param) {
|
||||
; CHECK-LABEL: @test_0(
|
||||
; CHECK-NOT: br
|
||||
entry:
|
||||
; No matter how hard you try, sqrt(1.0) is always 1.0. This allows the
|
||||
; optimizer to delete this loop.
|
||||
|
||||
declare double @sqrt(double)
|
||||
|
||||
define double @test(i32 %param) {
|
||||
entry:
|
||||
br label %Loop
|
||||
Loop: ; preds = %Loop, %entry
|
||||
%I2 = phi i32 [ 0, %entry ], [ %I3, %Loop ] ; <i32> [#uses=1]
|
||||
@ -19,3 +23,9 @@ Exit: ; preds = %Loop
|
||||
ret double %V
|
||||
}
|
||||
|
||||
define i32 @test_1() {
|
||||
; CHECK-LABEL: @test_1(
|
||||
; CHECK: call %empty @has_side_effects()
|
||||
%1 = call %empty @has_side_effects()
|
||||
ret i32 0
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user