[llvm] r240683 - [InstCombine] call SimplifyICmpInst with correct context
Jingyue Wu
jingyue at google.com
Thu Jun 25 13:14:47 PDT 2015
Author: jingyue
Date: Thu Jun 25 15:14:47 2015
New Revision: 240683
URL: http://llvm.org/viewvc/llvm-project?rev=240683&view=rev
Log:
[InstCombine] call SimplifyICmpInst with correct context
Summary:
Fixes PR23809. Without passing the context to SimplifyICmpInst, we would
use the assume to prove that the condition feeding the assume is
trivially true (see isValidAssumeForContext in ValueTracking.cpp),
causing the removal of the assume which may be useful for later
optimizations.
Test Plan: pr23800.ll
Reviewers: hfinkel, majnemer
Reviewed By: hfinkel
Subscribers: henryhu, llvm-commits, wengxt, broune, meheff, eliben
Differential Revision: http://reviews.llvm.org/D10695
Added:
llvm/trunk/test/Transforms/InstCombine/pr23809.ll
Modified:
llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp?rev=240683&r1=240682&r2=240683&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp Thu Jun 25 15:14:47 2015
@@ -2646,7 +2646,8 @@ Instruction *InstCombiner::visitICmpInst
Changed = true;
}
- if (Value *V = SimplifyICmpInst(I.getPredicate(), Op0, Op1, DL, TLI, DT, AC))
+ if (Value *V =
+ SimplifyICmpInst(I.getPredicate(), Op0, Op1, DL, TLI, DT, AC, &I))
return ReplaceInstUsesWith(I, V);
// comparing -val or val with non-zero is the same as just comparing val
@@ -3927,7 +3928,8 @@ Instruction *InstCombiner::visitFCmpInst
Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1);
- if (Value *V = SimplifyFCmpInst(I.getPredicate(), Op0, Op1, DL, TLI, DT, AC))
+ if (Value *V =
+ SimplifyFCmpInst(I.getPredicate(), Op0, Op1, DL, TLI, DT, AC, &I))
return ReplaceInstUsesWith(I, V);
// Simplify 'fcmp pred X, X'
Added: llvm/trunk/test/Transforms/InstCombine/pr23809.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/pr23809.ll?rev=240683&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/pr23809.ll (added)
+++ llvm/trunk/test/Transforms/InstCombine/pr23809.ll Thu Jun 25 15:14:47 2015
@@ -0,0 +1,22 @@
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
+; InstCombine should preserve the call to @llvm.assume.
+define i32 @icmp(i32 %a, i32 %b) {
+; CHECK-LABEL: @icmp(
+ %sum = add i32 %a, %b
+ %1 = icmp sge i32 %sum, 0
+ call void @llvm.assume(i1 %1)
+; CHECK: call void @llvm.assume
+ ret i32 %sum
+}
+
+define float @fcmp(float %a, float %b) {
+; CHECK-LABEL: @fcmp(
+ %sum = fadd float %a, %b
+ %1 = fcmp oge float %sum, 0.0
+ call void @llvm.assume(i1 %1)
+; CHECK: call void @llvm.assume
+ ret float %sum
+}
+
+declare void @llvm.assume(i1)
More information about the llvm-commits
mailing list