[InstCombine] remove unneeded one-use checks for icmp fold
This fold and several others were added in: rL125734 <https://reviews.llvm.org/rL125734> ...with no explanation for the one-use checks other than the code comments about register pressure. Given that this is IR canonicalization, we shouldn't be worried about register pressure though; the backend should be able to adjust for that as needed. This is part of solving PR43310 the theoretically right way: https://bugs.llvm.org/show_bug.cgi?id=43310 ...ie, if we don't cripple basic transforms, then we won't need to add special-case code to detect larger patterns. rL371940 is a related patch in this series. llvm-svn: 371981
This commit is contained in:
parent
72b9c4f3bc
commit
c5cd808156
|
@ -3849,10 +3849,7 @@ Instruction *InstCombiner::foldICmpBinOp(ICmpInst &I) {
|
|||
return new ICmpInst(Pred, A, C);
|
||||
|
||||
// icmp (A-B), (A-D) -> icmp D, B for equalities or if there is no overflow.
|
||||
// TODO: The one-use checks should not be necessary.
|
||||
if (A && C && A == C && NoOp0WrapProblem && NoOp1WrapProblem &&
|
||||
// Try not to increase register pressure.
|
||||
BO0->hasOneUse() && BO1->hasOneUse())
|
||||
if (A && C && A == C && NoOp0WrapProblem && NoOp1WrapProblem)
|
||||
return new ICmpInst(Pred, D, B);
|
||||
|
||||
// icmp (0-X) < cst --> x > -cst
|
||||
|
|
|
@ -734,7 +734,7 @@ define i1 @test37_extra_uses(i32 %x, i32 %y, i32 %z) {
|
|||
; CHECK-NEXT: call void @foo(i32 [[LHS]])
|
||||
; CHECK-NEXT: [[RHS:%.*]] = sub nsw i32 [[X]], [[Z:%.*]]
|
||||
; CHECK-NEXT: call void @foo(i32 [[RHS]])
|
||||
; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[LHS]], [[RHS]]
|
||||
; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[Z]], [[Y]]
|
||||
; CHECK-NEXT: ret i1 [[C]]
|
||||
;
|
||||
%lhs = sub nsw i32 %x, %y
|
||||
|
@ -763,7 +763,7 @@ define i1 @test38_extra_uses(i32 %x, i32 %y, i32 %z) {
|
|||
; CHECK-NEXT: call void @foo(i32 [[LHS]])
|
||||
; CHECK-NEXT: [[RHS:%.*]] = sub nuw i32 [[X]], [[Z:%.*]]
|
||||
; CHECK-NEXT: call void @foo(i32 [[RHS]])
|
||||
; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[LHS]], [[RHS]]
|
||||
; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[Z]], [[Y]]
|
||||
; CHECK-NEXT: ret i1 [[C]]
|
||||
;
|
||||
%lhs = sub nuw i32 %x, %y
|
||||
|
|
Loading…
Reference in New Issue