mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[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 llvm-svn: 240683
This commit is contained in:
parent
c53c13d76f
commit
35a6e27706
@ -2646,7 +2646,8 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
|
||||
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(FCmpInst &I) {
|
||||
|
||||
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'
|
||||
|
22
test/Transforms/InstCombine/pr23809.ll
Normal file
22
test/Transforms/InstCombine/pr23809.ll
Normal file
@ -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)
|
Loading…
x
Reference in New Issue
Block a user