Skip to content

Commit b3a5672

Browse files
committed
[InstCombine] Add one-use check when folding fabs over selects
1 parent 93fa070 commit b3a5672

File tree

2 files changed

+2
-3
lines changed

2 files changed

+2
-3
lines changed

llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2709,7 +2709,7 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst &CI) {
27092709

27102710
if (match(Arg, m_Select(m_Value(Cond), m_Value(TVal), m_Value(FVal)))) {
27112711
// fabs (select Cond, TrueC, FalseC) --> select Cond, AbsT, AbsF
2712-
if (isa<Constant>(TVal) || isa<Constant>(FVal)) {
2712+
if (Arg->hasOneUse() && (isa<Constant>(TVal) || isa<Constant>(FVal))) {
27132713
CallInst *AbsT = Builder.CreateCall(II->getCalledFunction(), {TVal});
27142714
CallInst *AbsF = Builder.CreateCall(II->getCalledFunction(), {FVal});
27152715
SelectInst *SI = SelectInst::Create(Cond, AbsT, AbsF);

llvm/test/Transforms/InstCombine/intrinsic-select.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -350,8 +350,7 @@ define float @test_fabs_select_multiuse(i1 %cond, float %x) {
350350
; CHECK-LABEL: @test_fabs_select_multiuse(
351351
; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND:%.*]], float [[X:%.*]], float 0x7FF0000000000000
352352
; CHECK-NEXT: call void @usef32(float [[SELECT]])
353-
; CHECK-NEXT: [[TMP1:%.*]] = call float @llvm.fabs.f32(float [[X]])
354-
; CHECK-NEXT: [[FABS:%.*]] = select i1 [[COND]], float [[TMP1]], float 0x7FF0000000000000
353+
; CHECK-NEXT: [[FABS:%.*]] = call float @llvm.fabs.f32(float [[SELECT]])
355354
; CHECK-NEXT: ret float [[FABS]]
356355
;
357356
%select = select i1 %cond, float %x, float 0x7FF0000000000000

0 commit comments

Comments
 (0)