1
0
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:
Jingyue Wu 2015-06-25 20:14:47 +00:00
parent c53c13d76f
commit 35a6e27706
2 changed files with 26 additions and 2 deletions

View File

@ -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'

View 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)