diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp index fe21f300a4177..075667629c5f1 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp @@ -1058,15 +1058,16 @@ static Instruction *canonicalizeAbsNabs(SelectInst &Sel, ICmpInst &Cmp, SPF != SelectPatternFlavor::SPF_NABS) return nullptr; - bool IntMinIsPoison = match(RHS, m_NSWNeg(m_Specific(LHS))); + // Note that NSW flag can only be propagated for normal, non-negated abs! + bool IntMinIsPoison = SPF == SelectPatternFlavor::SPF_ABS && + match(RHS, m_NSWNeg(m_Specific(LHS))); Constant *IntMinIsPoisonC = ConstantInt::get(Type::getInt1Ty(Sel.getContext()), IntMinIsPoison); Instruction *Abs = IC.Builder.CreateBinaryIntrinsic(Intrinsic::abs, LHS, IntMinIsPoisonC); if (SPF == SelectPatternFlavor::SPF_NABS) - return IntMinIsPoison ? BinaryOperator::CreateNSWNeg(Abs) - : BinaryOperator::CreateNeg(Abs); + return BinaryOperator::CreateNeg(Abs); // Always without NSW flag! return IC.replaceInstUsesWith(Sel, Abs); } diff --git a/llvm/test/Transforms/InstCombine/abs-1.ll b/llvm/test/Transforms/InstCombine/abs-1.ll index fbc0fc1a835c3..7e5eadf5b25e4 100644 --- a/llvm/test/Transforms/InstCombine/abs-1.ll +++ b/llvm/test/Transforms/InstCombine/abs-1.ll @@ -226,8 +226,8 @@ define <2 x i8> @nabs_canonical_2_vec_undef_elts(<2 x i8> %x) { define i8 @nabs_canonical_3(i8 %x) { ; CHECK-LABEL: @nabs_canonical_3( -; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.abs.i8(i8 [[X:%.*]], i1 true) -; CHECK-NEXT: [[ABS:%.*]] = sub nsw i8 0, [[TMP1]] +; CHECK-NEXT: [[TMP1:%.*]] = call i8 @llvm.abs.i8(i8 [[X:%.*]], i1 false) +; CHECK-NEXT: [[ABS:%.*]] = sub i8 0, [[TMP1]] ; CHECK-NEXT: ret i8 [[ABS]] ; %cmp = icmp slt i8 %x, 0 @@ -251,7 +251,7 @@ define i8 @nabs_canonical_4(i8 %x) { define i32 @nabs_canonical_5(i8 %x) { ; CHECK-LABEL: @nabs_canonical_5( ; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[X:%.*]] to i32 -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[CONV]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[CONV]], i1 false) ; CHECK-NEXT: [[ABS:%.*]] = sub nsw i32 0, [[TMP1]] ; CHECK-NEXT: ret i32 [[ABS]] ; diff --git a/llvm/test/Transforms/InstCombine/abs_abs.ll b/llvm/test/Transforms/InstCombine/abs_abs.ll index f2faf35a25155..cb0118261bb62 100644 --- a/llvm/test/Transforms/InstCombine/abs_abs.ll +++ b/llvm/test/Transforms/InstCombine/abs_abs.ll @@ -319,9 +319,9 @@ define <2 x i32> @abs_abs_x03_vec(<2 x i32> %x, <2 x i32> %y) { define i32 @nabs_nabs_x01(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x01( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp sgt i32 %x, -1 %sub = sub nsw i32 0, %x @@ -334,9 +334,9 @@ define i32 @nabs_nabs_x01(i32 %x) { define i32 @nabs_nabs_x02(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x02( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp sgt i32 %x, 0 %sub = sub nsw i32 0, %x @@ -349,9 +349,9 @@ define i32 @nabs_nabs_x02(i32 %x) { define i32 @nabs_nabs_x03(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x03( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp slt i32 %x, 0 %sub = sub nsw i32 0, %x @@ -364,9 +364,9 @@ define i32 @nabs_nabs_x03(i32 %x) { define i32 @nabs_nabs_x04(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x04( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp slt i32 %x, 1 %sub = sub nsw i32 0, %x @@ -379,9 +379,9 @@ define i32 @nabs_nabs_x04(i32 %x) { define i32 @nabs_nabs_x05(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x05( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp sgt i32 %x, -1 %sub = sub nsw i32 0, %x @@ -394,9 +394,9 @@ define i32 @nabs_nabs_x05(i32 %x) { define i32 @nabs_nabs_x06(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x06( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp sgt i32 %x, 0 %sub = sub nsw i32 0, %x @@ -409,9 +409,9 @@ define i32 @nabs_nabs_x06(i32 %x) { define i32 @nabs_nabs_x07(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x07( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp slt i32 %x, 0 %sub = sub nsw i32 0, %x @@ -424,9 +424,9 @@ define i32 @nabs_nabs_x07(i32 %x) { define i32 @nabs_nabs_x08(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x08( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp slt i32 %x, 1 %sub = sub nsw i32 0, %x @@ -439,9 +439,9 @@ define i32 @nabs_nabs_x08(i32 %x) { define i32 @nabs_nabs_x09(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x09( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp sgt i32 %x, -1 %sub = sub nsw i32 0, %x @@ -454,9 +454,9 @@ define i32 @nabs_nabs_x09(i32 %x) { define i32 @nabs_nabs_x10(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x10( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp sgt i32 %x, 0 %sub = sub nsw i32 0, %x @@ -469,9 +469,9 @@ define i32 @nabs_nabs_x10(i32 %x) { define i32 @nabs_nabs_x11(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x11( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp slt i32 %x, 0 %sub = sub nsw i32 0, %x @@ -484,9 +484,9 @@ define i32 @nabs_nabs_x11(i32 %x) { define i32 @nabs_nabs_x12(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x12( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp slt i32 %x, 1 %sub = sub nsw i32 0, %x @@ -499,9 +499,9 @@ define i32 @nabs_nabs_x12(i32 %x) { define i32 @nabs_nabs_x13(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x13( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp sgt i32 %x, -1 %sub = sub nsw i32 0, %x @@ -514,9 +514,9 @@ define i32 @nabs_nabs_x13(i32 %x) { define i32 @nabs_nabs_x14(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x14( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp sgt i32 %x, 0 %sub = sub nsw i32 0, %x @@ -529,9 +529,9 @@ define i32 @nabs_nabs_x14(i32 %x) { define i32 @nabs_nabs_x15(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x15( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp slt i32 %x, 0 %sub = sub nsw i32 0, %x @@ -544,9 +544,9 @@ define i32 @nabs_nabs_x15(i32 %x) { define i32 @nabs_nabs_x16(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x16( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %cmp = icmp slt i32 %x, 1 %sub = sub nsw i32 0, %x @@ -560,9 +560,9 @@ define i32 @nabs_nabs_x16(i32 %x) { ; nabs(nabs(-x)) -> nabs(-x) -> nabs(x) define i32 @nabs_nabs_x17(i32 %x) { ; CHECK-LABEL: @nabs_nabs_x17( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw i32 0, [[TMP1]] -; CHECK-NEXT: ret i32 [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] +; CHECK-NEXT: ret i32 [[COND18]] ; %sub = sub nsw i32 0, %x %cmp = icmp sgt i32 %sub, -1 @@ -594,9 +594,9 @@ define i32 @nabs_nabs_x18(i32 %x, i32 %y) { ; nabs(nabs(-x)) -> nabs(-x) -> nabs(x) define <2 x i32> @nabs_nabs_x01_vec(<2 x i32> %x) { ; CHECK-LABEL: @nabs_nabs_x01_vec( -; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[X:%.*]], i1 true) -; CHECK-NEXT: [[COND:%.*]] = sub nsw <2 x i32> zeroinitializer, [[TMP1]] -; CHECK-NEXT: ret <2 x i32> [[COND]] +; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[X:%.*]], i1 false) +; CHECK-NEXT: [[COND18:%.*]] = sub <2 x i32> zeroinitializer, [[TMP1]] +; CHECK-NEXT: ret <2 x i32> [[COND18]] ; %sub = sub nsw <2 x i32> zeroinitializer, %x %cmp = icmp sgt <2 x i32> %sub, @@ -627,7 +627,7 @@ define <2 x i32> @nabs_nabs_x02_vec(<2 x i32> %x, <2 x i32> %y) { define i32 @abs_nabs_x01(i32 %x) { ; CHECK-LABEL: @abs_nabs_x01( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp sgt i32 %x, -1 @@ -641,7 +641,7 @@ define i32 @abs_nabs_x01(i32 %x) { define i32 @abs_nabs_x02(i32 %x) { ; CHECK-LABEL: @abs_nabs_x02( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp sgt i32 %x, 0 @@ -655,7 +655,7 @@ define i32 @abs_nabs_x02(i32 %x) { define i32 @abs_nabs_x03(i32 %x) { ; CHECK-LABEL: @abs_nabs_x03( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp slt i32 %x, 0 @@ -669,7 +669,7 @@ define i32 @abs_nabs_x03(i32 %x) { define i32 @abs_nabs_x04(i32 %x) { ; CHECK-LABEL: @abs_nabs_x04( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp slt i32 %x, 1 @@ -683,7 +683,7 @@ define i32 @abs_nabs_x04(i32 %x) { define i32 @abs_nabs_x05(i32 %x) { ; CHECK-LABEL: @abs_nabs_x05( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp sgt i32 %x, -1 @@ -697,7 +697,7 @@ define i32 @abs_nabs_x05(i32 %x) { define i32 @abs_nabs_x06(i32 %x) { ; CHECK-LABEL: @abs_nabs_x06( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp sgt i32 %x, 0 @@ -711,7 +711,7 @@ define i32 @abs_nabs_x06(i32 %x) { define i32 @abs_nabs_x07(i32 %x) { ; CHECK-LABEL: @abs_nabs_x07( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp slt i32 %x, 0 @@ -725,7 +725,7 @@ define i32 @abs_nabs_x07(i32 %x) { define i32 @abs_nabs_x08(i32 %x) { ; CHECK-LABEL: @abs_nabs_x08( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp slt i32 %x, 1 @@ -739,7 +739,7 @@ define i32 @abs_nabs_x08(i32 %x) { define i32 @abs_nabs_x09(i32 %x) { ; CHECK-LABEL: @abs_nabs_x09( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp sgt i32 %x, -1 @@ -753,7 +753,7 @@ define i32 @abs_nabs_x09(i32 %x) { define i32 @abs_nabs_x10(i32 %x) { ; CHECK-LABEL: @abs_nabs_x10( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp sgt i32 %x, 0 @@ -767,7 +767,7 @@ define i32 @abs_nabs_x10(i32 %x) { define i32 @abs_nabs_x11(i32 %x) { ; CHECK-LABEL: @abs_nabs_x11( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp slt i32 %x, 0 @@ -781,7 +781,7 @@ define i32 @abs_nabs_x11(i32 %x) { define i32 @abs_nabs_x12(i32 %x) { ; CHECK-LABEL: @abs_nabs_x12( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp slt i32 %x, 1 @@ -795,7 +795,7 @@ define i32 @abs_nabs_x12(i32 %x) { define i32 @abs_nabs_x13(i32 %x) { ; CHECK-LABEL: @abs_nabs_x13( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp sgt i32 %x, -1 @@ -809,7 +809,7 @@ define i32 @abs_nabs_x13(i32 %x) { define i32 @abs_nabs_x14(i32 %x) { ; CHECK-LABEL: @abs_nabs_x14( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp sgt i32 %x, 0 @@ -823,7 +823,7 @@ define i32 @abs_nabs_x14(i32 %x) { define i32 @abs_nabs_x15(i32 %x) { ; CHECK-LABEL: @abs_nabs_x15( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp slt i32 %x, 0 @@ -837,7 +837,7 @@ define i32 @abs_nabs_x15(i32 %x) { define i32 @abs_nabs_x16(i32 %x) { ; CHECK-LABEL: @abs_nabs_x16( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp slt i32 %x, 1 @@ -852,7 +852,7 @@ define i32 @abs_nabs_x16(i32 %x) { ; abs(nabs(-x)) -> abs(-x) -> abs(x) define i32 @abs_nabs_x17(i32 %x) { ; CHECK-LABEL: @abs_nabs_x17( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %sub = sub nsw i32 0, %x @@ -884,7 +884,7 @@ define i32 @abs_nabs_x18(i32 %x, i32 %y) { ; abs(nabs(-x)) -> abs(-x) -> abs(x) define <2 x i32> @abs_nabs_x01_vec(<2 x i32> %x) { ; CHECK-LABEL: @abs_nabs_x01_vec( -; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[X:%.*]], i1 false) ; CHECK-NEXT: ret <2 x i32> [[TMP1]] ; %sub = sub nsw <2 x i32> zeroinitializer, %x @@ -1174,7 +1174,7 @@ define i32 @nabs_abs_x18(i32 %x, i32 %y) { ; CHECK-LABEL: @nabs_abs_x18( ; CHECK-NEXT: [[A:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]] ; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[A]], i1 false) -; CHECK-NEXT: [[COND18:%.*]] = sub nsw i32 0, [[TMP1]] +; CHECK-NEXT: [[COND18:%.*]] = sub i32 0, [[TMP1]] ; CHECK-NEXT: ret i32 [[COND18]] ; %a = sub nsw i32 %x, %y @@ -1208,7 +1208,7 @@ define <2 x i32> @nabs_abs_x02_vec(<2 x i32> %x, <2 x i32> %y) { ; CHECK-LABEL: @nabs_abs_x02_vec( ; CHECK-NEXT: [[A:%.*]] = sub nsw <2 x i32> [[X:%.*]], [[Y:%.*]] ; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[A]], i1 false) -; CHECK-NEXT: [[COND18:%.*]] = sub nsw <2 x i32> zeroinitializer, [[TMP1]] +; CHECK-NEXT: [[COND18:%.*]] = sub <2 x i32> zeroinitializer, [[TMP1]] ; CHECK-NEXT: ret <2 x i32> [[COND18]] ; %a = sub nsw <2 x i32> %x, %y diff --git a/llvm/test/Transforms/InstCombine/select_meta.ll b/llvm/test/Transforms/InstCombine/select_meta.ll index be9d8be857d86..66aece44c199c 100644 --- a/llvm/test/Transforms/InstCombine/select_meta.ll +++ b/llvm/test/Transforms/InstCombine/select_meta.ll @@ -104,7 +104,7 @@ define i16 @t7(i32 %a) { define i32 @abs_nabs_x01(i32 %x) { ; CHECK-LABEL: @abs_nabs_x01( -; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false) ; CHECK-NEXT: ret i32 [[TMP1]] ; %cmp = icmp sgt i32 %x, -1 @@ -120,7 +120,7 @@ define i32 @abs_nabs_x01(i32 %x) { define <2 x i32> @abs_nabs_x01_vec(<2 x i32> %x) { ; CHECK-LABEL: @abs_nabs_x01_vec( -; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[X:%.*]], i1 true) +; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[X:%.*]], i1 false) ; CHECK-NEXT: ret <2 x i32> [[TMP1]] ; %cmp = icmp sgt <2 x i32> %x,