diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp index aa762753130b0..3c6d5affd6b36 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp @@ -1786,11 +1786,8 @@ Instruction *InstCombinerImpl::foldICmpAndConstConst(ICmpInst &Cmp, const APInt &C1) { bool isICMP_NE = Cmp.getPredicate() == ICmpInst::ICMP_NE; - // For vectors: icmp ne (and X, 1), 0 --> trunc X to N x i1 - // TODO: We canonicalize to the longer form for scalars because we have - // better analysis/folds for icmp, and codegen may be better with icmp. - if (isICMP_NE && Cmp.getType()->isVectorTy() && C1.isZero() && - match(And->getOperand(1), m_One())) + // icmp ne (and X, 1), 0 --> trunc X to i1 + if (isICMP_NE && C1.isZero() && match(And->getOperand(1), m_One())) return new TruncInst(And->getOperand(0), Cmp.getType()); const APInt *C2; diff --git a/llvm/test/Analysis/ValueTracking/knownbits-bmi-pattern.ll b/llvm/test/Analysis/ValueTracking/knownbits-bmi-pattern.ll index 663de281f19ba..868e340c266ad 100644 --- a/llvm/test/Analysis/ValueTracking/knownbits-bmi-pattern.ll +++ b/llvm/test/Analysis/ValueTracking/knownbits-bmi-pattern.ll @@ -221,8 +221,7 @@ define i1 @blsmsk_gt_is_false_assume(i32 %x) { define i32 @blsmsk_add_eval_assume(i32 %x) { ; CHECK-LABEL: @blsmsk_add_eval_assume( -; CHECK-NEXT: [[LB:%.*]] = and i32 [[X:%.*]], 1 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[LB]], 0 +; CHECK-NEXT: [[CMP:%.*]] = trunc i32 [[X:%.*]] to i1 ; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]]) ; CHECK-NEXT: ret i32 33 ; @@ -261,8 +260,7 @@ define <2 x i32> @blsmsk_add_eval_assume_vec(<2 x i32> %x) { define i32 @blsmsk_sub_eval_assume(i32 %x) { ; CHECK-LABEL: @blsmsk_sub_eval_assume( -; CHECK-NEXT: [[LB:%.*]] = and i32 [[X:%.*]], 1 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[LB]], 0 +; CHECK-NEXT: [[CMP:%.*]] = trunc i32 [[X:%.*]] to i1 ; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]]) ; CHECK-NEXT: ret i32 -31 ; @@ -277,8 +275,7 @@ define i32 @blsmsk_sub_eval_assume(i32 %x) { define i32 @blsmsk_or_eval_assume(i32 %x) { ; CHECK-LABEL: @blsmsk_or_eval_assume( -; CHECK-NEXT: [[LB:%.*]] = and i32 [[X:%.*]], 1 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[LB]], 0 +; CHECK-NEXT: [[CMP:%.*]] = trunc i32 [[X:%.*]] to i1 ; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]]) ; CHECK-NEXT: ret i32 33 ; @@ -545,8 +542,7 @@ define <2 x i1> @blsi_cmp_eq_diff_bits_vec(<2 x i32> %x) { define i32 @blsi_xor_eval_assume(i32 %x) { ; CHECK-LABEL: @blsi_xor_eval_assume( -; CHECK-NEXT: [[LB:%.*]] = and i32 [[X:%.*]], 1 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[LB]], 0 +; CHECK-NEXT: [[CMP:%.*]] = trunc i32 [[X:%.*]] to i1 ; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]]) ; CHECK-NEXT: ret i32 33 ; diff --git a/llvm/test/Transforms/InstCombine/and-or-icmps.ll b/llvm/test/Transforms/InstCombine/and-or-icmps.ll index 975d3a072bcd3..4cd089ca524c2 100644 --- a/llvm/test/Transforms/InstCombine/and-or-icmps.ll +++ b/llvm/test/Transforms/InstCombine/and-or-icmps.ll @@ -1418,7 +1418,7 @@ define i1 @bitwise_and_bitwise_and_icmps_comm2(i8 %x, i8 %y, i8 %z) { ; CHECK-NEXT: [[TMP1:%.*]] = or i8 [[Z_SHIFT]], 1 ; CHECK-NEXT: [[TMP2:%.*]] = and i8 [[X:%.*]], [[TMP1]] ; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i8 [[TMP2]], [[TMP1]] -; CHECK-NEXT: [[AND2:%.*]] = and i1 [[TMP3]], [[C1]] +; CHECK-NEXT: [[AND2:%.*]] = and i1 [[C1]], [[TMP3]] ; CHECK-NEXT: ret i1 [[AND2]] ; %c1 = icmp eq i8 %y, 42 @@ -1439,7 +1439,7 @@ define i1 @bitwise_and_bitwise_and_icmps_comm3(i8 %x, i8 %y, i8 %z) { ; CHECK-NEXT: [[TMP1:%.*]] = or i8 [[Z_SHIFT]], 1 ; CHECK-NEXT: [[TMP2:%.*]] = and i8 [[X:%.*]], [[TMP1]] ; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i8 [[TMP2]], [[TMP1]] -; CHECK-NEXT: [[AND2:%.*]] = and i1 [[TMP3]], [[C1]] +; CHECK-NEXT: [[AND2:%.*]] = and i1 [[C1]], [[TMP3]] ; CHECK-NEXT: ret i1 [[AND2]] ; %c1 = icmp eq i8 %y, 42 @@ -1540,10 +1540,9 @@ define i1 @bitwise_and_logical_and_icmps_comm3(i8 %x, i8 %y, i8 %z) { define i1 @logical_and_bitwise_and_icmps(i8 %x, i8 %y, i8 %z) { ; CHECK-LABEL: @logical_and_bitwise_and_icmps( ; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42 -; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1 ; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl nuw i8 1, [[Z:%.*]] -; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X]], [[Z_SHIFT]] -; CHECK-NEXT: [[C2:%.*]] = icmp ne i8 [[X_M1]], 0 +; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X:%.*]], [[Z_SHIFT]] +; CHECK-NEXT: [[C2:%.*]] = trunc i8 [[X]] to i1 ; CHECK-NEXT: [[C3:%.*]] = icmp ne i8 [[X_M2]], 0 ; CHECK-NEXT: [[AND1:%.*]] = and i1 [[C1]], [[C2]] ; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 [[C3]], i1 false @@ -1563,10 +1562,9 @@ define i1 @logical_and_bitwise_and_icmps(i8 %x, i8 %y, i8 %z) { define i1 @logical_and_bitwise_and_icmps_comm1(i8 %x, i8 %y, i8 %z) { ; CHECK-LABEL: @logical_and_bitwise_and_icmps_comm1( ; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42 -; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1 ; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl nuw i8 1, [[Z:%.*]] -; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X]], [[Z_SHIFT]] -; CHECK-NEXT: [[C2:%.*]] = icmp ne i8 [[X_M1]], 0 +; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X:%.*]], [[Z_SHIFT]] +; CHECK-NEXT: [[C2:%.*]] = trunc i8 [[X]] to i1 ; CHECK-NEXT: [[C3:%.*]] = icmp ne i8 [[X_M2]], 0 ; CHECK-NEXT: [[AND1:%.*]] = and i1 [[C1]], [[C2]] ; CHECK-NEXT: [[AND2:%.*]] = select i1 [[C3]], i1 [[AND1]], i1 false @@ -1586,12 +1584,11 @@ define i1 @logical_and_bitwise_and_icmps_comm1(i8 %x, i8 %y, i8 %z) { define i1 @logical_and_bitwise_and_icmps_comm2(i8 %x, i8 %y, i8 %z) { ; CHECK-LABEL: @logical_and_bitwise_and_icmps_comm2( ; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42 -; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1 ; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl nuw i8 1, [[Z:%.*]] -; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X]], [[Z_SHIFT]] -; CHECK-NEXT: [[C2:%.*]] = icmp ne i8 [[X_M1]], 0 +; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X:%.*]], [[Z_SHIFT]] +; CHECK-NEXT: [[C2:%.*]] = trunc i8 [[X]] to i1 ; CHECK-NEXT: [[C3:%.*]] = icmp ne i8 [[X_M2]], 0 -; CHECK-NEXT: [[AND1:%.*]] = and i1 [[C2]], [[C1]] +; CHECK-NEXT: [[AND1:%.*]] = and i1 [[C1]], [[C2]] ; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 [[C3]], i1 false ; CHECK-NEXT: ret i1 [[AND2]] ; @@ -1609,12 +1606,11 @@ define i1 @logical_and_bitwise_and_icmps_comm2(i8 %x, i8 %y, i8 %z) { define i1 @logical_and_bitwise_and_icmps_comm3(i8 %x, i8 %y, i8 %z) { ; CHECK-LABEL: @logical_and_bitwise_and_icmps_comm3( ; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42 -; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1 ; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl nuw i8 1, [[Z:%.*]] -; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X]], [[Z_SHIFT]] -; CHECK-NEXT: [[C2:%.*]] = icmp ne i8 [[X_M1]], 0 +; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X:%.*]], [[Z_SHIFT]] +; CHECK-NEXT: [[C2:%.*]] = trunc i8 [[X]] to i1 ; CHECK-NEXT: [[C3:%.*]] = icmp ne i8 [[X_M2]], 0 -; CHECK-NEXT: [[AND1:%.*]] = and i1 [[C2]], [[C1]] +; CHECK-NEXT: [[AND1:%.*]] = and i1 [[C1]], [[C2]] ; CHECK-NEXT: [[AND2:%.*]] = select i1 [[C3]], i1 [[AND1]], i1 false ; CHECK-NEXT: ret i1 [[AND2]] ; @@ -1632,10 +1628,9 @@ define i1 @logical_and_bitwise_and_icmps_comm3(i8 %x, i8 %y, i8 %z) { define i1 @logical_and_logical_and_icmps(i8 %x, i8 %y, i8 %z) { ; CHECK-LABEL: @logical_and_logical_and_icmps( ; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42 -; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1 ; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl nuw i8 1, [[Z:%.*]] -; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X]], [[Z_SHIFT]] -; CHECK-NEXT: [[C2:%.*]] = icmp ne i8 [[X_M1]], 0 +; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X:%.*]], [[Z_SHIFT]] +; CHECK-NEXT: [[C2:%.*]] = trunc i8 [[X]] to i1 ; CHECK-NEXT: [[C3:%.*]] = icmp ne i8 [[X_M2]], 0 ; CHECK-NEXT: [[AND1:%.*]] = select i1 [[C1]], i1 [[C2]], i1 false ; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 [[C3]], i1 false @@ -1655,10 +1650,9 @@ define i1 @logical_and_logical_and_icmps(i8 %x, i8 %y, i8 %z) { define i1 @logical_and_logical_and_icmps_comm1(i8 %x, i8 %y, i8 %z) { ; CHECK-LABEL: @logical_and_logical_and_icmps_comm1( ; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42 -; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1 ; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl nuw i8 1, [[Z:%.*]] -; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X]], [[Z_SHIFT]] -; CHECK-NEXT: [[C2:%.*]] = icmp ne i8 [[X_M1]], 0 +; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X:%.*]], [[Z_SHIFT]] +; CHECK-NEXT: [[C2:%.*]] = trunc i8 [[X]] to i1 ; CHECK-NEXT: [[C3:%.*]] = icmp ne i8 [[X_M2]], 0 ; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[C3]], i1 [[C1]], i1 false ; CHECK-NEXT: [[AND2:%.*]] = select i1 [[TMP1]], i1 [[C2]], i1 false @@ -1678,10 +1672,9 @@ define i1 @logical_and_logical_and_icmps_comm1(i8 %x, i8 %y, i8 %z) { define i1 @logical_and_logical_and_icmps_comm2(i8 %x, i8 %y, i8 %z) { ; CHECK-LABEL: @logical_and_logical_and_icmps_comm2( ; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[Y:%.*]], 42 -; CHECK-NEXT: [[X_M1:%.*]] = and i8 [[X:%.*]], 1 ; CHECK-NEXT: [[Z_SHIFT:%.*]] = shl nuw i8 1, [[Z:%.*]] -; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X]], [[Z_SHIFT]] -; CHECK-NEXT: [[C2:%.*]] = icmp ne i8 [[X_M1]], 0 +; CHECK-NEXT: [[X_M2:%.*]] = and i8 [[X:%.*]], [[Z_SHIFT]] +; CHECK-NEXT: [[C2:%.*]] = trunc i8 [[X]] to i1 ; CHECK-NEXT: [[C3:%.*]] = icmp ne i8 [[X_M2]], 0 ; CHECK-NEXT: [[AND1:%.*]] = select i1 [[C2]], i1 [[C1]], i1 false ; CHECK-NEXT: [[AND2:%.*]] = select i1 [[AND1]], i1 [[C3]], i1 false diff --git a/llvm/test/Transforms/InstCombine/canonicalize-selects-icmp-condition-bittest.ll b/llvm/test/Transforms/InstCombine/canonicalize-selects-icmp-condition-bittest.ll index 5883c089119c4..f8db9e3b7f0d1 100644 --- a/llvm/test/Transforms/InstCombine/canonicalize-selects-icmp-condition-bittest.ll +++ b/llvm/test/Transforms/InstCombine/canonicalize-selects-icmp-condition-bittest.ll @@ -7,24 +7,24 @@ declare void @use1(i1) ; Basic case - all good. define i8 @p0(i8 %x, i8 %v0, i8 %v1) { ; CHECK-LABEL: @p0( -; CHECK-NEXT: [[T0:%.*]] = and i8 [[X:%.*]], 1 +; CHECK-NEXT: [[T0:%.*]] = and i8 [[X:%.*]], 2 ; CHECK-NEXT: [[T1_NOT:%.*]] = icmp eq i8 [[T0]], 0 ; CHECK-NEXT: [[R:%.*]] = select i1 [[T1_NOT]], i8 [[V1:%.*]], i8 [[V0:%.*]], !prof [[PROF0:![0-9]+]] ; CHECK-NEXT: ret i8 [[R]] ; - %t0 = and i8 %x, 1 - %t1 = icmp eq i8 %t0, 1 + %t0 = and i8 %x, 2 + %t1 = icmp eq i8 %t0, 2 %r = select i1 %t1, i8 %v0, i8 %v1, !prof !0 ret i8 %r } define i8 @p1(i8 %x, i8 %v0, i8 %v1) { ; CHECK-LABEL: @p1( -; CHECK-NEXT: [[T0:%.*]] = and i8 [[X:%.*]], 1 +; CHECK-NEXT: [[T0:%.*]] = and i8 [[X:%.*]], 2 ; CHECK-NEXT: [[T1_NOT:%.*]] = icmp eq i8 [[T0]], 0 ; CHECK-NEXT: [[R:%.*]] = select i1 [[T1_NOT]], i8 [[V1:%.*]], i8 [[V0:%.*]] ; CHECK-NEXT: ret i8 [[R]] ; - %t0 = and i8 %x, 1 + %t0 = and i8 %x, 2 %t1 = icmp ne i8 %t0, 0 %r = select i1 %t1, i8 %v0, i8 %v1 ret i8 %r @@ -33,14 +33,14 @@ define i8 @p1(i8 %x, i8 %v0, i8 %v1) { ; Can't invert all users of original condition define i8 @n2(i8 %x, i8 %v0, i8 %v1) { ; CHECK-LABEL: @n2( -; CHECK-NEXT: [[T0:%.*]] = and i8 [[X:%.*]], 1 +; CHECK-NEXT: [[T0:%.*]] = and i8 [[X:%.*]], 2 ; CHECK-NEXT: [[T1:%.*]] = icmp ne i8 [[T0]], 0 ; CHECK-NEXT: call void @use1(i1 [[T1]]) ; CHECK-NEXT: [[R:%.*]] = select i1 [[T1]], i8 [[V0:%.*]], i8 [[V1:%.*]] ; CHECK-NEXT: ret i8 [[R]] ; - %t0 = and i8 %x, 1 - %t1 = icmp eq i8 %t0, 1 + %t0 = and i8 %x, 2 + %t1 = icmp eq i8 %t0, 2 call void @use1(i1 %t1) ; condition has un-invertable use %r = select i1 %t1, i8 %v0, i8 %v1 ret i8 %r @@ -50,7 +50,7 @@ define i8 @n2(i8 %x, i8 %v0, i8 %v1) { define i8 @t3(i8 %x, i8 %v0, i8 %v1, i8 %v2, i8 %v3, ptr %out, i1 %c) { ; CHECK-LABEL: @t3( ; CHECK-NEXT: bb0: -; CHECK-NEXT: [[T0:%.*]] = and i8 [[X:%.*]], 1 +; CHECK-NEXT: [[T0:%.*]] = and i8 [[X:%.*]], 2 ; CHECK-NEXT: [[T1_NOT:%.*]] = icmp eq i8 [[T0]], 0 ; CHECK-NEXT: br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] ; CHECK: bb1: @@ -62,8 +62,8 @@ define i8 @t3(i8 %x, i8 %v0, i8 %v1, i8 %v2, i8 %v3, ptr %out, i1 %c) { ; CHECK-NEXT: ret i8 [[R1]] ; bb0: - %t0 = and i8 %x, 1 - %t1 = icmp eq i8 %t0, 1 + %t0 = and i8 %x, 2 + %t1 = icmp eq i8 %t0, 2 br i1 %c, label %bb1, label %bb2 bb1: %r0 = select i1 %t1, i8 %v0, i8 %v1 @@ -75,14 +75,14 @@ bb2: } define i8 @t4(i8 %x, i8 %v0, i8 %v1, i8 %v2, i8 %v3, ptr %out) { ; CHECK-LABEL: @t4( -; CHECK-NEXT: [[T0:%.*]] = and i8 [[X:%.*]], 1 +; CHECK-NEXT: [[T0:%.*]] = and i8 [[X:%.*]], 2 ; CHECK-NEXT: [[T1_NOT:%.*]] = icmp eq i8 [[T0]], 0 ; CHECK-NEXT: [[R0:%.*]] = select i1 [[T1_NOT]], i8 [[V1:%.*]], i8 [[V0:%.*]] ; CHECK-NEXT: store i8 [[R0]], ptr [[OUT:%.*]], align 1 ; CHECK-NEXT: [[R1:%.*]] = select i1 [[T1_NOT]], i8 [[V3:%.*]], i8 [[V2:%.*]] ; CHECK-NEXT: ret i8 [[R1]] ; - %t0 = and i8 %x, 1 + %t0 = and i8 %x, 2 %t1 = icmp ne i8 %t0, 0 %r0 = select i1 %t1, i8 %v0, i8 %v1 store i8 %r0, ptr %out @@ -111,13 +111,13 @@ define i8 @n6(i8 %x, i8 %v0, i8 %v1) { } define i8 @n7(i8 %x, i8 %v0, i8 %v1) { ; CHECK-LABEL: @n7( -; CHECK-NEXT: [[T0:%.*]] = and i8 [[X:%.*]], 1 +; CHECK-NEXT: [[T0:%.*]] = and i8 [[X:%.*]], 2 ; CHECK-NEXT: [[T1_NOT_NOT:%.*]] = icmp eq i8 [[T0]], 0 ; CHECK-NEXT: [[R:%.*]] = select i1 [[T1_NOT_NOT]], i8 [[V0:%.*]], i8 [[V1:%.*]] ; CHECK-NEXT: ret i8 [[R]] ; - %t0 = and i8 %x, 1 - %t1 = icmp ne i8 %t0, 1 ; not checking that it's zero + %t0 = and i8 %x, 2 + %t1 = icmp ne i8 %t0, 2 ; not checking that it's zero %r = select i1 %t1, i8 %v0, i8 %v1 ret i8 %r } diff --git a/llvm/test/Transforms/InstCombine/cmp-intrinsic.ll b/llvm/test/Transforms/InstCombine/cmp-intrinsic.ll index 19c4cc979d4ba..12c18e2ec0302 100644 --- a/llvm/test/Transforms/InstCombine/cmp-intrinsic.ll +++ b/llvm/test/Transforms/InstCombine/cmp-intrinsic.ll @@ -274,8 +274,7 @@ define <2 x i1> @cttz_eq_bitwidth_v2i32(<2 x i32> %a) { define i1 @cttz_eq_zero_i33(i33 %x) { ; CHECK-LABEL: @cttz_eq_zero_i33( -; CHECK-NEXT: [[TMP1:%.*]] = and i33 [[X:%.*]], 1 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i33 [[TMP1]], 0 +; CHECK-NEXT: [[CMP:%.*]] = trunc i33 [[X:%.*]] to i1 ; CHECK-NEXT: ret i1 [[CMP]] ; %tz = tail call i33 @llvm.cttz.i33(i33 %x, i1 false) diff --git a/llvm/test/Transforms/InstCombine/exact.ll b/llvm/test/Transforms/InstCombine/exact.ll index 819e8fbb89b5f..d8bbcaa949660 100644 --- a/llvm/test/Transforms/InstCombine/exact.ll +++ b/llvm/test/Transforms/InstCombine/exact.ll @@ -150,8 +150,7 @@ define <2 x i1> @ashr_icmp2_vec(<2 x i64> %X) { ; Make sure we don't transform the ashr here into an sdiv define i1 @pr9998(i32 %V) { ; CHECK-LABEL: @pr9998( -; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[V:%.*]], 1 -; CHECK-NEXT: [[Z:%.*]] = icmp ne i32 [[TMP1]], 0 +; CHECK-NEXT: [[Z:%.*]] = trunc i32 [[V:%.*]] to i1 ; CHECK-NEXT: ret i1 [[Z]] ; %W = shl i32 %V, 31 diff --git a/llvm/test/Transforms/InstCombine/icmp-and-shift.ll b/llvm/test/Transforms/InstCombine/icmp-and-shift.ll index 78f1bc7d7379d..2973bb979181d 100644 --- a/llvm/test/Transforms/InstCombine/icmp-and-shift.ll +++ b/llvm/test/Transforms/InstCombine/icmp-and-shift.ll @@ -608,9 +608,8 @@ define i1 @fold_ne_rhs_fail_shift_not_1s(i8 %x, i8 %yy) { define i1 @test_shr_and_1_ne_0(i32 %a, i32 %b) { ; CHECK-LABEL: @test_shr_and_1_ne_0( -; CHECK-NEXT: [[TMP1:%.*]] = shl nuw i32 1, [[B:%.*]] -; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[A:%.*]], [[TMP1]] -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP2]], 0 +; CHECK-NEXT: [[SHR:%.*]] = lshr i32 [[A:%.*]], [[B:%.*]] +; CHECK-NEXT: [[CMP:%.*]] = trunc i32 [[SHR]] to i1 ; CHECK-NEXT: ret i1 [[CMP]] ; %shr = lshr i32 %a, %b @@ -621,9 +620,8 @@ define i1 @test_shr_and_1_ne_0(i32 %a, i32 %b) { define i1 @test_shr_and_1_ne_0_samesign(i32 %a, i32 %b) { ; CHECK-LABEL: @test_shr_and_1_ne_0_samesign( -; CHECK-NEXT: [[TMP1:%.*]] = shl nuw i32 1, [[B:%.*]] -; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[A:%.*]], [[TMP1]] -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP2]], 0 +; CHECK-NEXT: [[SHR:%.*]] = lshr i32 [[A:%.*]], [[B:%.*]] +; CHECK-NEXT: [[CMP:%.*]] = trunc i32 [[SHR]] to i1 ; CHECK-NEXT: ret i1 [[CMP]] ; %shr = lshr i32 %a, %b @@ -634,9 +632,8 @@ define i1 @test_shr_and_1_ne_0_samesign(i32 %a, i32 %b) { define i1 @test_const_shr_and_1_ne_0(i32 %b) { ; CHECK-LABEL: @test_const_shr_and_1_ne_0( -; CHECK-NEXT: [[TMP1:%.*]] = shl nuw i32 1, [[B:%.*]] -; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], 42 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP2]], 0 +; CHECK-NEXT: [[SHR:%.*]] = lshr i32 42, [[B:%.*]] +; CHECK-NEXT: [[CMP:%.*]] = trunc i32 [[SHR]] to i1 ; CHECK-NEXT: ret i1 [[CMP]] ; %shr = lshr i32 42, %b @@ -660,9 +657,8 @@ define i1 @test_not_const_shr_and_1_ne_0(i32 %b) { define i1 @test_const_shr_exact_and_1_ne_0(i32 %b) { ; CHECK-LABEL: @test_const_shr_exact_and_1_ne_0( -; CHECK-NEXT: [[TMP1:%.*]] = shl nuw i32 1, [[B:%.*]] -; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], 42 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP2]], 0 +; CHECK-NEXT: [[SHR:%.*]] = lshr exact i32 42, [[B:%.*]] +; CHECK-NEXT: [[CMP:%.*]] = trunc i32 [[SHR]] to i1 ; CHECK-NEXT: ret i1 [[CMP]] ; %shr = lshr exact i32 42, %b @@ -721,10 +717,9 @@ define i1 @test_const_shr_and_1_ne_0_i1_negative(i1 %b) { define i1 @test_const_shr_and_1_ne_0_multi_use_lshr_negative(i32 %b) { ; CHECK-LABEL: @test_const_shr_and_1_ne_0_multi_use_lshr_negative( ; CHECK-NEXT: [[SHR:%.*]] = lshr i32 42, [[B:%.*]] -; CHECK-NEXT: [[AND:%.*]] = and i32 [[SHR]], 1 -; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[AND]], 0 +; CHECK-NEXT: [[CMP1:%.*]] = trunc i32 [[SHR]] to i1 ; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i32 [[B]], [[SHR]] -; CHECK-NEXT: [[RET:%.*]] = and i1 [[CMP1]], [[CMP2]] +; CHECK-NEXT: [[RET:%.*]] = and i1 [[CMP2]], [[CMP1]] ; CHECK-NEXT: ret i1 [[RET]] ; %shr = lshr i32 42, %b @@ -739,9 +734,9 @@ define i1 @test_const_shr_and_1_ne_0_multi_use_and_negative(i32 %b) { ; CHECK-LABEL: @test_const_shr_and_1_ne_0_multi_use_and_negative( ; CHECK-NEXT: [[SHR:%.*]] = lshr i32 42, [[B:%.*]] ; CHECK-NEXT: [[AND:%.*]] = and i32 [[SHR]], 1 -; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[AND]], 0 +; CHECK-NEXT: [[CMP1:%.*]] = trunc i32 [[SHR]] to i1 ; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i32 [[B]], [[AND]] -; CHECK-NEXT: [[RET:%.*]] = and i1 [[CMP1]], [[CMP2]] +; CHECK-NEXT: [[RET:%.*]] = and i1 [[CMP2]], [[CMP1]] ; CHECK-NEXT: ret i1 [[RET]] ; %shr = lshr i32 42, %b diff --git a/llvm/test/Transforms/InstCombine/icmp-binop.ll b/llvm/test/Transforms/InstCombine/icmp-binop.ll index 3b4eca3ba69b3..4c7eccbde9f2f 100644 --- a/llvm/test/Transforms/InstCombine/icmp-binop.ll +++ b/llvm/test/Transforms/InstCombine/icmp-binop.ll @@ -36,11 +36,9 @@ define <2 x i1> @mul_unkV_oddC_ne_vec(<2 x i64> %v) { define i1 @mul_assumeoddV_asumeoddV_eq(i16 %v, i16 %v2) { ; CHECK-LABEL: @mul_assumeoddV_asumeoddV_eq( -; CHECK-NEXT: [[LB:%.*]] = and i16 [[V:%.*]], 1 -; CHECK-NEXT: [[ODD:%.*]] = icmp ne i16 [[LB]], 0 +; CHECK-NEXT: [[ODD:%.*]] = trunc i16 [[V:%.*]] to i1 ; CHECK-NEXT: call void @llvm.assume(i1 [[ODD]]) -; CHECK-NEXT: [[LB2:%.*]] = and i16 [[V2:%.*]], 1 -; CHECK-NEXT: [[ODD2:%.*]] = icmp ne i16 [[LB2]], 0 +; CHECK-NEXT: [[ODD2:%.*]] = trunc i16 [[V2:%.*]] to i1 ; CHECK-NEXT: call void @llvm.assume(i1 [[ODD2]]) ; CHECK-NEXT: ret i1 true ; @@ -81,8 +79,7 @@ define i1 @mul_reused_unkV_oddC_ne(i64 %v) { define i1 @mul_assumeoddV_unkV_eq(i16 %v, i16 %v2) { ; CHECK-LABEL: @mul_assumeoddV_unkV_eq( -; CHECK-NEXT: [[LB:%.*]] = and i16 [[V2:%.*]], 1 -; CHECK-NEXT: [[ODD:%.*]] = icmp ne i16 [[LB]], 0 +; CHECK-NEXT: [[ODD:%.*]] = trunc i16 [[V2:%.*]] to i1 ; CHECK-NEXT: call void @llvm.assume(i1 [[ODD]]) ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i16 [[V:%.*]], 0 ; CHECK-NEXT: ret i1 [[CMP]] @@ -97,8 +94,7 @@ define i1 @mul_assumeoddV_unkV_eq(i16 %v, i16 %v2) { define i1 @mul_reusedassumeoddV_unkV_ne(i64 %v, i64 %v2) { ; CHECK-LABEL: @mul_reusedassumeoddV_unkV_ne( -; CHECK-NEXT: [[LB:%.*]] = and i64 [[V:%.*]], 1 -; CHECK-NEXT: [[ODD:%.*]] = icmp ne i64 [[LB]], 0 +; CHECK-NEXT: [[ODD:%.*]] = trunc i64 [[V:%.*]] to i1 ; CHECK-NEXT: call void @llvm.assume(i1 [[ODD]]) ; CHECK-NEXT: [[MUL:%.*]] = mul i64 [[V]], [[V2:%.*]] ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[V2]], 0 diff --git a/llvm/test/Transforms/InstCombine/icmp-mul-and.ll b/llvm/test/Transforms/InstCombine/icmp-mul-and.ll index 7fa75184c1cf3..62d139c81ea0f 100644 --- a/llvm/test/Transforms/InstCombine/icmp-mul-and.ll +++ b/llvm/test/Transforms/InstCombine/icmp-mul-and.ll @@ -54,8 +54,7 @@ define i1 @mul_mask_pow2_ne0_use2(i8 %x) { define i1 @mul_mask_pow2_sgt0(i8 %x) { ; CHECK-LABEL: @mul_mask_pow2_sgt0( -; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[X:%.*]], 1 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[TMP1]], 0 +; CHECK-NEXT: [[CMP:%.*]] = trunc i8 [[X:%.*]] to i1 ; CHECK-NEXT: ret i1 [[CMP]] ; %mul = mul i8 %x, 44 @@ -68,8 +67,7 @@ define i1 @mul_mask_pow2_sgt0(i8 %x) { define i1 @mul_mask_fakepow2_ne0(i8 %x) { ; CHECK-LABEL: @mul_mask_fakepow2_ne0( -; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[X:%.*]], 1 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[TMP1]], 0 +; CHECK-NEXT: [[CMP:%.*]] = trunc i8 [[X:%.*]] to i1 ; CHECK-NEXT: ret i1 [[CMP]] ; %mul = mul i8 %x, 44 @@ -82,8 +80,7 @@ define i1 @mul_mask_fakepow2_ne0(i8 %x) { define i1 @mul_mask_pow2_eq4(i8 %x) { ; CHECK-LABEL: @mul_mask_pow2_eq4( -; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[X:%.*]], 1 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[TMP1]], 0 +; CHECK-NEXT: [[CMP:%.*]] = trunc i8 [[X:%.*]] to i1 ; CHECK-NEXT: ret i1 [[CMP]] ; %mul = mul i8 %x, 44 diff --git a/llvm/test/Transforms/InstCombine/icmp-mul.ll b/llvm/test/Transforms/InstCombine/icmp-mul.ll index 49e1e11fe6c36..1e4876d5cd569 100644 --- a/llvm/test/Transforms/InstCombine/icmp-mul.ll +++ b/llvm/test/Transforms/InstCombine/icmp-mul.ll @@ -1093,8 +1093,7 @@ define i1 @mul_xy_z_assumenozero_ne(i8 %x, i8 %y, i8 %z) { define i1 @mul_xy_z_assumeodd_eq(i8 %x, i8 %y, i8 %z) { ; CHECK-LABEL: @mul_xy_z_assumeodd_eq( -; CHECK-NEXT: [[LB:%.*]] = and i8 [[Z:%.*]], 1 -; CHECK-NEXT: [[NZ:%.*]] = icmp ne i8 [[LB]], 0 +; CHECK-NEXT: [[NZ:%.*]] = trunc i8 [[Z:%.*]] to i1 ; CHECK-NEXT: call void @llvm.assume(i1 [[NZ]]) ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[X:%.*]], [[Y:%.*]] ; CHECK-NEXT: ret i1 [[CMP]] diff --git a/llvm/test/Transforms/InstCombine/icmp-ne-pow2.ll b/llvm/test/Transforms/InstCombine/icmp-ne-pow2.ll index b19909a234481..4be85be543760 100644 --- a/llvm/test/Transforms/InstCombine/icmp-ne-pow2.ll +++ b/llvm/test/Transforms/InstCombine/icmp-ne-pow2.ll @@ -35,10 +35,9 @@ define i32 @not_pow2_32_assume(i32 %x) { define i64 @pow2_64_assume(i64 %x) { ; CHECK-LABEL: @pow2_64_assume( -; CHECK-NEXT: [[AND:%.*]] = and i64 [[X:%.*]], 1 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[AND]], 0 +; CHECK-NEXT: [[CMP:%.*]] = trunc i64 [[X1:%.*]] to i1 ; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]]) -; CHECK-NEXT: ret i64 [[X]] +; CHECK-NEXT: ret i64 [[X1]] ; %and = and i64 %x, 1 %cmp = icmp ne i64 %and, 0 diff --git a/llvm/test/Transforms/InstCombine/icmp.ll b/llvm/test/Transforms/InstCombine/icmp.ll index 696208b903798..42a09420769f4 100644 --- a/llvm/test/Transforms/InstCombine/icmp.ll +++ b/llvm/test/Transforms/InstCombine/icmp.ll @@ -3665,10 +3665,9 @@ define i1 @icmp_neg_cst_slt(i32 %a) { define i1 @icmp_and_or_lshr(i32 %x, i32 %y) { ; CHECK-LABEL: define i1 @icmp_and_or_lshr( ; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) { -; CHECK-NEXT: [[SHF1:%.*]] = shl nuw i32 1, [[Y]] -; CHECK-NEXT: [[OR2:%.*]] = or i32 [[SHF1]], 1 -; CHECK-NEXT: [[AND3:%.*]] = and i32 [[X]], [[OR2]] -; CHECK-NEXT: [[RET:%.*]] = icmp ne i32 [[AND3]], 0 +; CHECK-NEXT: [[SHF:%.*]] = lshr i32 [[X]], [[Y]] +; CHECK-NEXT: [[OR:%.*]] = or i32 [[SHF]], [[X]] +; CHECK-NEXT: [[RET:%.*]] = trunc i32 [[OR]] to i1 ; CHECK-NEXT: ret i1 [[RET]] ; %shf = lshr i32 %x, %y @@ -3681,10 +3680,9 @@ define i1 @icmp_and_or_lshr(i32 %x, i32 %y) { define i1 @icmp_and_or_lshr_samesign(i32 %x, i32 %y) { ; CHECK-LABEL: define i1 @icmp_and_or_lshr_samesign( ; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) { -; CHECK-NEXT: [[SHF1:%.*]] = shl nuw i32 1, [[Y]] -; CHECK-NEXT: [[OR2:%.*]] = or i32 [[SHF1]], 1 -; CHECK-NEXT: [[AND3:%.*]] = and i32 [[X]], [[OR2]] -; CHECK-NEXT: [[RET:%.*]] = icmp ne i32 [[AND3]], 0 +; CHECK-NEXT: [[SHF:%.*]] = lshr i32 [[X]], [[Y]] +; CHECK-NEXT: [[OR:%.*]] = or i32 [[SHF]], [[X]] +; CHECK-NEXT: [[RET:%.*]] = trunc i32 [[OR]] to i1 ; CHECK-NEXT: ret i1 [[RET]] ; %shf = lshr i32 %x, %y @@ -5217,8 +5215,7 @@ define <2 x i1> @zext_bool_and_eq0_commute(<2 x i1> %x, <2 x i8> %p) { define i1 @zext_bool_and_ne0(i1 %x, i8 %y) { ; CHECK-LABEL: define i1 @zext_bool_and_ne0( ; CHECK-SAME: i1 [[X:%.*]], i8 [[Y:%.*]]) { -; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[Y]], 1 -; CHECK-NEXT: [[R1:%.*]] = icmp ne i8 [[TMP1]], 0 +; CHECK-NEXT: [[R1:%.*]] = trunc i8 [[Y]] to i1 ; CHECK-NEXT: [[R:%.*]] = select i1 [[X]], i1 [[R1]], i1 false ; CHECK-NEXT: ret i1 [[R]] ; diff --git a/llvm/test/Transforms/InstCombine/load-cmp.ll b/llvm/test/Transforms/InstCombine/load-cmp.ll index 10fe07295eed6..a5a0681ac3af3 100644 --- a/llvm/test/Transforms/InstCombine/load-cmp.ll +++ b/llvm/test/Transforms/InstCombine/load-cmp.ll @@ -128,9 +128,8 @@ define i1 @test3_noarrayty(i32 %X) { define i1 @test4(i32 %X) { ; CHECK-LABEL: @test4( -; CHECK-NEXT: [[TMP1:%.*]] = shl nuw i32 1, [[X:%.*]] -; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1]], 933 -; CHECK-NEXT: [[R:%.*]] = icmp ne i32 [[TMP2]], 0 +; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 933, [[X:%.*]] +; CHECK-NEXT: [[R:%.*]] = trunc i32 [[TMP1]] to i1 ; CHECK-NEXT: ret i1 [[R]] ; %P = getelementptr inbounds [10 x i16], ptr @G16, i32 0, i32 %X @@ -142,9 +141,8 @@ define i1 @test4(i32 %X) { define i1 @test4_i16(i16 %X) { ; CHECK-LABEL: @test4_i16( ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i16 [[X:%.*]] to i32 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw i32 1, [[TMP1]] -; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[TMP2]], 933 -; CHECK-NEXT: [[R:%.*]] = icmp ne i32 [[TMP3]], 0 +; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 933, [[TMP1]] +; CHECK-NEXT: [[R:%.*]] = trunc i32 [[TMP2]] to i1 ; CHECK-NEXT: ret i1 [[R]] ; %P = getelementptr inbounds [10 x i16], ptr @G16, i32 0, i16 %X @@ -377,9 +375,8 @@ define i1 @pr93017(i64 %idx) { ; Mask is 0b10101010 define i1 @load_vs_array_type_mismatch1(i32 %idx) { ; CHECK-LABEL: @load_vs_array_type_mismatch1( -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw i32 1, [[TMP1:%.*]] -; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[TMP2]], 170 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP3]], 0 +; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 170, [[IDX:%.*]] +; CHECK-NEXT: [[CMP:%.*]] = trunc i32 [[TMP1]] to i1 ; CHECK-NEXT: ret i1 [[CMP]] ; %gep = getelementptr inbounds i16, ptr @g_i32_lo, i32 %idx @@ -393,9 +390,8 @@ define i1 @load_vs_array_type_mismatch1(i32 %idx) { ; Mask is 0b01010101 define i1 @load_vs_array_type_mismatch2(i32 %idx) { ; CHECK-LABEL: @load_vs_array_type_mismatch2( -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw i32 1, [[TMP1:%.*]] -; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[TMP2]], 85 -; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[TMP3]], 0 +; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 85, [[IDX:%.*]] +; CHECK-NEXT: [[CMP:%.*]] = trunc i32 [[TMP1]] to i1 ; CHECK-NEXT: ret i1 [[CMP]] ; %gep = getelementptr inbounds i16, ptr @g_i32_hi, i32 %idx @@ -492,9 +488,8 @@ define i1 @cmp_load_constant_array_messy(i32 %x){ ; CHECK-LABEL: @cmp_load_constant_array_messy( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[TMP0:%.*]], 1073741823 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw i32 1, [[TMP1]] -; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[TMP2]], 373 -; CHECK-NEXT: [[COND:%.*]] = icmp ne i32 [[TMP3]], 0 +; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 373, [[TMP1]] +; CHECK-NEXT: [[COND:%.*]] = trunc i32 [[TMP2]] to i1 ; CHECK-NEXT: ret i1 [[COND]] ; @@ -508,9 +503,8 @@ entry: define i1 @cmp_diff_load_constant_array_messy0(i32 %x){ ; CHECK-LABEL: @cmp_diff_load_constant_array_messy0( ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[TMP1:%.*]], 1073741823 -; CHECK-NEXT: [[TMP3:%.*]] = shl nuw i32 1, [[TMP2]] -; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[TMP3]], 373 -; CHECK-NEXT: [[COND:%.*]] = icmp ne i32 [[TMP4]], 0 +; CHECK-NEXT: [[TMP3:%.*]] = lshr i32 373, [[TMP2]] +; CHECK-NEXT: [[COND:%.*]] = trunc i32 [[TMP3]] to i1 ; CHECK-NEXT: ret i1 [[COND]] ; %isOK_ptr = getelementptr i32, ptr @CG_MESSY, i32 %x diff --git a/llvm/test/Transforms/InstCombine/or.ll b/llvm/test/Transforms/InstCombine/or.ll index f61a1970d3aa4..64797d4d111a1 100644 --- a/llvm/test/Transforms/InstCombine/or.ll +++ b/llvm/test/Transforms/InstCombine/or.ll @@ -2038,8 +2038,7 @@ define i32 @or_xor_and_commuted3(i32 %x, i32 %y, i32 %z) { define i1 @or_truncs(i8 %x) { ; CHECK-LABEL: @or_truncs( -; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[X:%.*]], 1 -; CHECK-NEXT: [[OR1:%.*]] = icmp ne i8 [[TMP1]], 0 +; CHECK-NEXT: [[OR1:%.*]] = trunc i8 [[X:%.*]] to i1 ; CHECK-NEXT: ret i1 [[OR1]] ; %trunc1 = trunc i8 %x to i1 diff --git a/llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest-with-truncation-lshr.ll b/llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest-with-truncation-lshr.ll index c134833630338..006b06cfc7669 100644 --- a/llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest-with-truncation-lshr.ll +++ b/llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest-with-truncation-lshr.ll @@ -100,8 +100,7 @@ define i1 @n2(i64 %y, i32 %len) { ; New shift amount would be 16, %y has 47 leading zeros - can fold. define i1 @t3(i32 %x, i32 %len) { ; CHECK-LABEL: @t3( -; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[X:%.*]], 1 -; CHECK-NEXT: [[T5:%.*]] = icmp ne i32 [[TMP1]], 0 +; CHECK-NEXT: [[T5:%.*]] = trunc i32 [[X:%.*]] to i1 ; CHECK-NEXT: ret i1 [[T5]] ; %t0 = sub i32 32, %len @@ -117,8 +116,7 @@ define i1 @t3(i32 %x, i32 %len) { ; Note that we indeed look at leading zeros! define i1 @t3_singlebit(i32 %x, i32 %len) { ; CHECK-LABEL: @t3_singlebit( -; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[X:%.*]], 1 -; CHECK-NEXT: [[T5:%.*]] = icmp ne i32 [[TMP1]], 0 +; CHECK-NEXT: [[T5:%.*]] = trunc i32 [[X:%.*]] to i1 ; CHECK-NEXT: ret i1 [[T5]] ; %t0 = sub i32 32, %len diff --git a/llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest-with-truncation-shl.ll b/llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest-with-truncation-shl.ll index 6f4e78e9f91a0..2c508c0c47472 100644 --- a/llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest-with-truncation-shl.ll +++ b/llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest-with-truncation-shl.ll @@ -278,8 +278,7 @@ define i1 @t8_oneuse5(i32 %x, i64 %y, i32 %len) { ; CHECK-NEXT: call void @use64(i64 [[T3]]) ; CHECK-NEXT: [[T3_TRUNC:%.*]] = trunc i64 [[T3]] to i32 ; CHECK-NEXT: call void @use32(i32 [[T3_TRUNC]]) -; CHECK-NEXT: [[TMP1:%.*]] = and i64 [[Y]], 1 -; CHECK-NEXT: [[T5:%.*]] = icmp ne i64 [[TMP1]], 0 +; CHECK-NEXT: [[T5:%.*]] = trunc i64 [[Y]] to i1 ; CHECK-NEXT: ret i1 [[T5]] ; %t0 = sub i32 32, %len diff --git a/llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest.ll b/llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest.ll index e95955da1b872..64ef1936fc2c1 100644 --- a/llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest.ll +++ b/llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest.ll @@ -534,8 +534,7 @@ define i1 @t32_shift_of_const_oneuse0(i32 %x, i32 %y, i32 %len) { ; CHECK-NEXT: call void @use32(i32 [[T2]]) ; CHECK-NEXT: [[T3:%.*]] = shl i32 [[Y:%.*]], [[T2]] ; CHECK-NEXT: call void @use32(i32 [[T3]]) -; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[Y]], 1 -; CHECK-NEXT: [[T5:%.*]] = icmp ne i32 [[TMP1]], 0 +; CHECK-NEXT: [[T5:%.*]] = trunc i32 [[Y]] to i1 ; CHECK-NEXT: ret i1 [[T5]] ; %t0 = sub i32 32, %len @@ -674,12 +673,11 @@ define i1 @constantexpr() { ; CHECK-LABEL: @constantexpr( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP0:%.*]] = load i16, ptr @f.a, align 2 -; CHECK-NEXT: [[SHR:%.*]] = lshr i16 [[TMP0]], 1 +; CHECK-NEXT: [[SHR:%.*]] = ashr i16 [[TMP0]], 1 ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i16 ptrtoint (ptr @f.a to i16), 1 ; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 [[CMP]] to i16 -; CHECK-NEXT: [[TMP1:%.*]] = shl nuw nsw i16 1, [[ZEXT]] -; CHECK-NEXT: [[TMP2:%.*]] = and i16 [[SHR]], [[TMP1]] -; CHECK-NEXT: [[TOBOOL:%.*]] = icmp ne i16 [[TMP2]], 0 +; CHECK-NEXT: [[SHR11:%.*]] = lshr i16 [[SHR]], [[ZEXT]] +; CHECK-NEXT: [[TOBOOL:%.*]] = trunc i16 [[SHR11]] to i1 ; CHECK-NEXT: ret i1 [[TOBOOL]] ; entry: diff --git a/llvm/test/Transforms/LoopUnroll/WebAssembly/basic-unrolling.ll b/llvm/test/Transforms/LoopUnroll/WebAssembly/basic-unrolling.ll index b456ad8224638..5e0fc75a6bbb2 100644 --- a/llvm/test/Transforms/LoopUnroll/WebAssembly/basic-unrolling.ll +++ b/llvm/test/Transforms/LoopUnroll/WebAssembly/basic-unrolling.ll @@ -133,7 +133,7 @@ define hidden void @runtime(ptr nocapture %a, ptr nocapture readonly %b, ptr noc ; CHECK-NEXT: br i1 [[LCMP_MOD_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY_EPIL_PREHEADER]] ; CHECK: for.body.epil.preheader: ; CHECK-NEXT: [[I_09_UNR:%.*]] = phi i32 [ 0, [[FOR_BODY_PREHEADER]] ], [ [[INC_1:%.*]], [[FOR_COND_CLEANUP_LOOPEXIT_UNR_LCSSA:%.*]] ] -; CHECK-NEXT: [[LCMP_MOD1:%.*]] = icmp ne i32 [[XTRAITER]], 0 +; CHECK-NEXT: [[LCMP_MOD1:%.*]] = trunc i32 [[N]] to i1 ; CHECK-NEXT: call void @llvm.assume(i1 [[LCMP_MOD1]]) ; CHECK-NEXT: [[ARRAYIDX_EPIL:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i32 [[I_09_UNR]] ; CHECK-NEXT: [[I_EPIL:%.*]] = load i32, ptr [[ARRAYIDX_EPIL]], align 4 diff --git a/llvm/test/Transforms/PGOProfile/chr.ll b/llvm/test/Transforms/PGOProfile/chr.ll index 258af5c488997..b7f35ba025657 100644 --- a/llvm/test/Transforms/PGOProfile/chr.ll +++ b/llvm/test/Transforms/PGOProfile/chr.ll @@ -35,16 +35,15 @@ define void @test_chr_1(ptr %i) !prof !14 { ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3:%.*]] ; CHECK: entry.split.nonchr: -; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[DOTFR1]], 1 -; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP3]], 0 -; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB1_NONCHR:%.*]], label [[BB0_NONCHR:%.*]], !prof [[PROF16:![0-9]+]] +; CHECK-NEXT: [[TMP3:%.*]] = trunc i32 [[DOTFR1]] to i1 +; CHECK-NEXT: br i1 [[TMP3]], label [[BB0_NONCHR:%.*]], label [[BB1_NONCHR:%.*]], !prof [[PROF16:![0-9]+]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1_NONCHR]] ; CHECK: bb1.nonchr: ; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[DOTFR1]], 2 ; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP4]], 0 -; CHECK-NEXT: br i1 [[TMP5]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP5]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF17:![0-9]+]] ; CHECK: bb2.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3]] @@ -109,23 +108,22 @@ define void @test_chr_1_1(ptr %i) !prof !14 { ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB5:%.*]] ; CHECK: entry.split.nonchr: -; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[DOTFR1]], 1 -; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP3]], 0 -; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB1_NONCHR:%.*]], label [[BB0_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: [[TMP3:%.*]] = trunc i32 [[DOTFR1]] to i1 +; CHECK-NEXT: br i1 [[TMP3]], label [[BB0_NONCHR:%.*]], label [[BB1_NONCHR:%.*]], !prof [[PROF16]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1_NONCHR]] ; CHECK: bb1.nonchr: ; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[DOTFR1]], 2 ; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP4]], 0 -; CHECK-NEXT: br i1 [[TMP5]], label [[BB2_NONCHR:%.*]], label [[BB3_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP5]], label [[BB2_NONCHR:%.*]], label [[BB3_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb2.nonchr: ; CHECK-NEXT: call void @bar() ; CHECK-NEXT: br label [[BB3_NONCHR]] ; CHECK: bb3.nonchr: ; CHECK-NEXT: [[TMP6:%.*]] = and i32 [[DOTFR1]], 4 ; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i32 [[TMP6]], 0 -; CHECK-NEXT: br i1 [[TMP7]], label [[BB5]], label [[BB4_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP7]], label [[BB5]], label [[BB4_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb4.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB5]] @@ -198,15 +196,15 @@ define void @test_chr_2(ptr %i) !prof !14 { ; CHECK: entry.split.nonchr: ; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[DOTFR1]], 255 ; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP3]], 0 -; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB4]], label [[BB0_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB4]], label [[BB0_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[DOTFR1]], 1 ; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP4]], 0 -; CHECK-NEXT: br i1 [[TMP5]], label [[BB2_NONCHR:%.*]], label [[BB1_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP5]], label [[BB2_NONCHR:%.*]], label [[BB1_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb2.nonchr: ; CHECK-NEXT: [[TMP6:%.*]] = and i32 [[DOTFR1]], 2 ; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i32 [[TMP6]], 0 -; CHECK-NEXT: br i1 [[TMP7]], label [[BB4]], label [[BB3_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP7]], label [[BB4]], label [[BB3_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb3.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB4]] @@ -290,16 +288,15 @@ define void @test_chr_3(ptr %i) !prof !14 { ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3:%.*]] ; CHECK: entry.split.nonchr: -; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[DOTFR1]], 1 -; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP3]], 0 -; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB1_NONCHR:%.*]], label [[BB0_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: [[TMP3:%.*]] = trunc i32 [[DOTFR1]] to i1 +; CHECK-NEXT: br i1 [[TMP3]], label [[BB0_NONCHR:%.*]], label [[BB1_NONCHR:%.*]], !prof [[PROF16]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1_NONCHR]] ; CHECK: bb1.nonchr: ; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[DOTFR1]], 2 ; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP4]], 0 -; CHECK-NEXT: br i1 [[TMP5]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP5]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb2.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3]] @@ -316,14 +313,14 @@ define void @test_chr_3(ptr %i) !prof !14 { ; CHECK: bb3.split.nonchr: ; CHECK-NEXT: [[TMP9:%.*]] = and i32 [[DOTFR2]], 4 ; CHECK-NEXT: [[DOTNOT3:%.*]] = icmp eq i32 [[TMP9]], 0 -; CHECK-NEXT: br i1 [[DOTNOT3]], label [[BB5_NONCHR:%.*]], label [[BB4_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[DOTNOT3]], label [[BB5_NONCHR:%.*]], label [[BB4_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb4.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB5_NONCHR]] ; CHECK: bb5.nonchr: ; CHECK-NEXT: [[TMP10:%.*]] = and i32 [[DOTFR2]], 8 ; CHECK-NEXT: [[TMP11:%.*]] = icmp eq i32 [[TMP10]], 0 -; CHECK-NEXT: br i1 [[TMP11]], label [[BB7]], label [[BB6_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP11]], label [[BB7]], label [[BB6_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb6.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB7]] @@ -403,13 +400,12 @@ define i32 @test_chr_4(ptr %i, i32 %sum0) !prof !14 { ; CHECK-NEXT: br label [[COMMON_RET:%.*]] ; CHECK: entry.split.nonchr: ; CHECK-NEXT: [[TMP4:%.*]] = add i32 [[SUM0]], 42 -; CHECK-NEXT: [[TMP5:%.*]] = and i32 [[DOTFR1]], 1 -; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP5]], 0 -; CHECK-NEXT: [[SUM1_NONCHR:%.*]] = select i1 [[DOTNOT]], i32 [[SUM0]], i32 [[TMP4]], !prof [[PROF16]] +; CHECK-NEXT: [[TMP5:%.*]] = trunc i32 [[DOTFR1]] to i1 +; CHECK-NEXT: [[SUM1_NONCHR:%.*]] = select i1 [[TMP5]], i32 [[TMP4]], i32 [[SUM0]], !prof [[PROF16]] ; CHECK-NEXT: [[TMP6:%.*]] = and i32 [[DOTFR1]], 2 ; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i32 [[TMP6]], 0 ; CHECK-NEXT: [[TMP8:%.*]] = add i32 [[SUM1_NONCHR]], 43 -; CHECK-NEXT: [[SUM2_NONCHR]] = select i1 [[TMP7]], i32 [[SUM1_NONCHR]], i32 [[TMP8]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM2_NONCHR]] = select i1 [[TMP7]], i32 [[SUM1_NONCHR]], i32 [[TMP8]], !prof [[PROF17]] ; CHECK-NEXT: br label [[COMMON_RET]] ; entry: @@ -464,23 +460,23 @@ define i32 @test_chr_5(ptr %i, i32 %sum0) !prof !14 { ; CHECK: entry.split.nonchr: ; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[DOTFR1]], 255 ; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP4]], 0 -; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB3]], label [[BB0_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB3]], label [[BB0_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: [[TMP5:%.*]] = and i32 [[DOTFR1]], 1 ; CHECK-NEXT: [[TMP6:%.*]] = icmp eq i32 [[TMP5]], 0 ; CHECK-NEXT: [[TMP7:%.*]] = add i32 [[SUM0]], 42 -; CHECK-NEXT: [[SUM1_NONCHR:%.*]] = select i1 [[TMP6]], i32 [[SUM0]], i32 [[TMP7]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM1_NONCHR:%.*]] = select i1 [[TMP6]], i32 [[SUM0]], i32 [[TMP7]], !prof [[PROF17]] ; CHECK-NEXT: [[TMP8:%.*]] = and i32 [[DOTFR1]], 2 ; CHECK-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], 0 ; CHECK-NEXT: [[TMP10:%.*]] = add i32 [[SUM1_NONCHR]], 43 -; CHECK-NEXT: [[SUM2_NONCHR:%.*]] = select i1 [[TMP9]], i32 [[SUM1_NONCHR]], i32 [[TMP10]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM2_NONCHR:%.*]] = select i1 [[TMP9]], i32 [[SUM1_NONCHR]], i32 [[TMP10]], !prof [[PROF17]] ; CHECK-NEXT: [[TMP11:%.*]] = and i32 [[DOTFR1]], 4 ; CHECK-NEXT: [[TMP12:%.*]] = icmp eq i32 [[TMP11]], 0 ; CHECK-NEXT: [[TMP13:%.*]] = and i32 [[DOTFR1]], 8 ; CHECK-NEXT: [[TMP14:%.*]] = icmp eq i32 [[TMP13]], 0 -; CHECK-NEXT: [[SUM4_NONCHR_V:%.*]] = select i1 [[TMP14]], i32 44, i32 88 +; CHECK-NEXT: [[SUM4_NONCHR_V:%.*]] = select i1 [[TMP14]], i32 44, i32 88, !prof [[PROF17]] ; CHECK-NEXT: [[SUM4_NONCHR:%.*]] = add i32 [[SUM2_NONCHR]], [[SUM4_NONCHR_V]] -; CHECK-NEXT: [[SUM5_NONCHR:%.*]] = select i1 [[TMP12]], i32 [[SUM2_NONCHR]], i32 [[SUM4_NONCHR]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM5_NONCHR:%.*]] = select i1 [[TMP12]], i32 [[SUM2_NONCHR]], i32 [[SUM4_NONCHR]], !prof [[PROF17]] ; CHECK-NEXT: br label [[BB3]] ; CHECK: bb3: ; CHECK-NEXT: [[SUM6:%.*]] = phi i32 [ [[SUM5_NONCHR]], [[BB0_NONCHR]] ], [ [[TMP3]], [[BB1]] ], [ [[SUM0]], [[ENTRY_SPLIT_NONCHR]] ] @@ -557,7 +553,7 @@ define i32 @test_chr_5_1(ptr %i, i32 %sum0) !prof !14 { ; CHECK-NEXT: [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0 ; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[DOTFR1]], 11 ; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i32 [[TMP3]], 11 -; CHECK-NEXT: [[TMP5:%.*]] = and i1 [[TMP4]], [[TMP2]] +; CHECK-NEXT: [[TMP5:%.*]] = and i1 [[TMP2]], [[TMP4]] ; CHECK-NEXT: br i1 [[TMP5]], label [[BB1:%.*]], label [[ENTRY_SPLIT_NONCHR:%.*]], !prof [[PROF15]] ; CHECK: bb1: ; CHECK-NEXT: [[TMP6:%.*]] = add i32 [[SUM0_FR]], 173 @@ -565,23 +561,23 @@ define i32 @test_chr_5_1(ptr %i, i32 %sum0) !prof !14 { ; CHECK: entry.split.nonchr: ; CHECK-NEXT: [[TMP7:%.*]] = and i32 [[DOTFR1]], 255 ; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP7]], 0 -; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB3]], label [[BB0_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB3]], label [[BB0_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: [[TMP8:%.*]] = and i32 [[DOTFR1]], 1 ; CHECK-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], 0 ; CHECK-NEXT: [[TMP10:%.*]] = add i32 [[SUM0_FR]], 42 -; CHECK-NEXT: [[SUM1_NONCHR:%.*]] = select i1 [[TMP9]], i32 [[SUM0_FR]], i32 [[TMP10]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM1_NONCHR:%.*]] = select i1 [[TMP9]], i32 [[SUM0_FR]], i32 [[TMP10]], !prof [[PROF17]] ; CHECK-NEXT: [[TMP11:%.*]] = and i32 [[DOTFR1]], 2 ; CHECK-NEXT: [[TMP12:%.*]] = icmp eq i32 [[TMP11]], 0 ; CHECK-NEXT: [[TMP13:%.*]] = add i32 [[SUM1_NONCHR]], 43 -; CHECK-NEXT: [[SUM2_NONCHR:%.*]] = select i1 [[TMP12]], i32 [[SUM1_NONCHR]], i32 [[TMP13]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM2_NONCHR:%.*]] = select i1 [[TMP12]], i32 [[SUM1_NONCHR]], i32 [[TMP13]], !prof [[PROF17]] ; CHECK-NEXT: [[TMP14:%.*]] = and i32 [[SUM0_FR]], 4 ; CHECK-NEXT: [[TMP15:%.*]] = icmp eq i32 [[TMP14]], 0 ; CHECK-NEXT: [[TMP16:%.*]] = and i32 [[DOTFR1]], 8 ; CHECK-NEXT: [[TMP17:%.*]] = icmp eq i32 [[TMP16]], 0 -; CHECK-NEXT: [[SUM4_NONCHR_V:%.*]] = select i1 [[TMP17]], i32 44, i32 88 +; CHECK-NEXT: [[SUM4_NONCHR_V:%.*]] = select i1 [[TMP17]], i32 44, i32 88, !prof [[PROF17]] ; CHECK-NEXT: [[SUM4_NONCHR:%.*]] = add i32 [[SUM2_NONCHR]], [[SUM4_NONCHR_V]] -; CHECK-NEXT: [[SUM5_NONCHR:%.*]] = select i1 [[TMP15]], i32 [[SUM2_NONCHR]], i32 [[SUM4_NONCHR]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM5_NONCHR:%.*]] = select i1 [[TMP15]], i32 [[SUM2_NONCHR]], i32 [[SUM4_NONCHR]], !prof [[PROF17]] ; CHECK-NEXT: br label [[BB3]] ; CHECK: bb3: ; CHECK-NEXT: [[SUM6:%.*]] = phi i32 [ [[SUM5_NONCHR]], [[BB0_NONCHR]] ], [ [[TMP6]], [[BB1]] ], [ [[SUM0_FR]], [[ENTRY_SPLIT_NONCHR]] ] @@ -667,19 +663,19 @@ define i32 @test_chr_6(ptr %i, ptr %j, i32 %sum0) !prof !14 { ; CHECK: entry.split.nonchr: ; CHECK-NEXT: [[V1:%.*]] = and i32 [[I0_FR]], 255 ; CHECK-NEXT: [[V2_NOT:%.*]] = icmp eq i32 [[V1]], 0 -; CHECK-NEXT: br i1 [[V2_NOT]], label [[BB3]], label [[BB0_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[V2_NOT]], label [[BB3]], label [[BB0_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: [[V3_NONCHR:%.*]] = and i32 [[I0_FR]], 2 ; CHECK-NEXT: [[V4_NONCHR:%.*]] = icmp eq i32 [[V3_NONCHR]], 0 ; CHECK-NEXT: [[V8_NONCHR:%.*]] = add i32 [[SUM0]], 43 -; CHECK-NEXT: [[SUM2_NONCHR:%.*]] = select i1 [[V4_NONCHR]], i32 [[SUM0]], i32 [[V8_NONCHR]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM2_NONCHR:%.*]] = select i1 [[V4_NONCHR]], i32 [[SUM0]], i32 [[V8_NONCHR]], !prof [[PROF17]] ; CHECK-NEXT: [[V9_NONCHR:%.*]] = and i32 [[J0_FR]], 4 ; CHECK-NEXT: [[V10_NONCHR:%.*]] = icmp eq i32 [[V9_NONCHR]], 0 ; CHECK-NEXT: [[V11_NONCHR:%.*]] = and i32 [[I0_FR]], 8 ; CHECK-NEXT: [[V12_NONCHR:%.*]] = icmp eq i32 [[V11_NONCHR]], 0 -; CHECK-NEXT: [[SUM4_NONCHR_V:%.*]] = select i1 [[V12_NONCHR]], i32 44, i32 88 +; CHECK-NEXT: [[SUM4_NONCHR_V:%.*]] = select i1 [[V12_NONCHR]], i32 44, i32 88, !prof [[PROF17]] ; CHECK-NEXT: [[SUM4_NONCHR:%.*]] = add i32 [[SUM2_NONCHR]], [[SUM4_NONCHR_V]] -; CHECK-NEXT: [[SUM5_NONCHR:%.*]] = select i1 [[V10_NONCHR]], i32 [[SUM2_NONCHR]], i32 [[SUM4_NONCHR]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM5_NONCHR:%.*]] = select i1 [[V10_NONCHR]], i32 [[SUM2_NONCHR]], i32 [[SUM4_NONCHR]], !prof [[PROF17]] ; CHECK-NEXT: br label [[BB3]] ; CHECK: bb3: ; CHECK-NEXT: [[SUM6:%.*]] = phi i32 [ [[SUM5_NONCHR]], [[BB0_NONCHR]] ], [ [[V13]], [[BB1]] ], [ [[SUM0]], [[ENTRY_SPLIT_NONCHR]] ] @@ -739,12 +735,12 @@ define i32 @test_chr_7(ptr %i, ptr %j, i32 %sum0) !prof !14 { ; CHECK-NEXT: [[V3:%.*]] = and i32 [[I0]], 2 ; CHECK-NEXT: [[V4:%.*]] = icmp eq i32 [[V3]], 0 ; CHECK-NEXT: [[V8:%.*]] = add i32 [[SUM0:%.*]], 43 -; CHECK-NEXT: [[SUM2:%.*]] = select i1 [[V4]], i32 [[SUM0]], i32 [[V8]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM2:%.*]] = select i1 [[V4]], i32 [[SUM0]], i32 [[V8]], !prof [[PROF17]] ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: [[J0:%.*]] = load i32, ptr [[J:%.*]], align 4 ; CHECK-NEXT: [[V9:%.*]] = and i32 [[J0]], 4 ; CHECK-NEXT: [[V10:%.*]] = icmp eq i32 [[V9]], 0 -; CHECK-NEXT: br i1 [[V10]], label [[BB2:%.*]], label [[BB1:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[V10]], label [[BB2:%.*]], label [[BB1:%.*]], !prof [[PROF17]] ; CHECK: bb1: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: [[SUM4:%.*]] = add i32 [[SUM2]], 44 @@ -819,14 +815,14 @@ define i32 @test_chr_7_1(ptr %i, ptr %j, i32 %sum0) !prof !14 { ; CHECK: entry.split.nonchr: ; CHECK-NEXT: [[V9:%.*]] = and i32 [[J0_FR]], 4 ; CHECK-NEXT: [[V10_NOT:%.*]] = icmp eq i32 [[V9]], 0 -; CHECK-NEXT: br i1 [[V10_NOT]], label [[BB1_NONCHR:%.*]], label [[BB0_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[V10_NOT]], label [[BB1_NONCHR:%.*]], label [[BB0_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1_NONCHR]] ; CHECK: bb1.nonchr: ; CHECK-NEXT: [[V11_NONCHR:%.*]] = and i32 [[J0_FR]], 8 ; CHECK-NEXT: [[V12_NONCHR:%.*]] = icmp eq i32 [[V11_NONCHR]], 0 -; CHECK-NEXT: br i1 [[V12_NONCHR]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[V12_NONCHR]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb2.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3]] @@ -834,7 +830,7 @@ define i32 @test_chr_7_1(ptr %i, ptr %j, i32 %sum0) !prof !14 { ; CHECK-NEXT: [[V3:%.*]] = and i32 [[I0]], 2 ; CHECK-NEXT: [[V4:%.*]] = icmp eq i32 [[V3]], 0 ; CHECK-NEXT: [[V8:%.*]] = add i32 [[SUM0:%.*]], 43 -; CHECK-NEXT: [[SUM2:%.*]] = select i1 [[V4]], i32 [[SUM0]], i32 [[V8]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM2:%.*]] = select i1 [[V4]], i32 [[SUM0]], i32 [[V8]], !prof [[PROF17]] ; CHECK-NEXT: ret i32 [[SUM2]] ; entry: @@ -881,14 +877,14 @@ define void @test_chr_8(ptr %i) !prof !14 { ; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[I:%.*]], align 4 ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[TMP0]], 1 ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 0 -; CHECK-NEXT: br i1 [[TMP2]], label [[BB1:%.*]], label [[BB0:%.*]], !prof [[PROF17:![0-9]+]] +; CHECK-NEXT: br i1 [[TMP2]], label [[BB1:%.*]], label [[BB0:%.*]], !prof [[PROF18:![0-9]+]] ; CHECK: bb0: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1]] ; CHECK: bb1: ; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[TMP0]], 2 ; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i32 [[TMP3]], 0 -; CHECK-NEXT: br i1 [[TMP4]], label [[BB3:%.*]], label [[BB2:%.*]], !prof [[PROF17]] +; CHECK-NEXT: br i1 [[TMP4]], label [[BB3:%.*]], label [[BB2:%.*]], !prof [[PROF18]] ; CHECK: bb2: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3]] @@ -959,16 +955,15 @@ define i32 @test_chr_9(ptr %i, ptr %j) !prof !14 { ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3:%.*]] ; CHECK: entry.split.nonchr: -; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[DOTFR1]], 1 -; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP4]], 0 -; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB1_NONCHR:%.*]], label [[BB0_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: [[TMP4:%.*]] = trunc i32 [[DOTFR1]] to i1 +; CHECK-NEXT: br i1 [[TMP4]], label [[BB0_NONCHR:%.*]], label [[BB1_NONCHR:%.*]], !prof [[PROF16]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1_NONCHR]] ; CHECK: bb1.nonchr: ; CHECK-NEXT: [[TMP5:%.*]] = and i32 [[DOTFR1]], 2 ; CHECK-NEXT: [[TMP6:%.*]] = icmp eq i32 [[TMP5]], 0 -; CHECK-NEXT: br i1 [[TMP6]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP6]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb2.nonchr: ; CHECK-NEXT: [[TMP7:%.*]] = load i32, ptr [[J]], align 4 ; CHECK-NEXT: call void @foo() @@ -1041,9 +1036,8 @@ define i32 @test_chr_10(ptr %i, ptr %j) !prof !14 { ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3:%.*]] ; CHECK: entry.split.nonchr: -; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[DOTFR1]], 1 -; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP4]], 0 -; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB1_NONCHR:%.*]], label [[BB0_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: [[TMP4:%.*]] = trunc i32 [[DOTFR1]] to i1 +; CHECK-NEXT: br i1 [[TMP4]], label [[BB0_NONCHR:%.*]], label [[BB1_NONCHR:%.*]], !prof [[PROF16]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1_NONCHR]] @@ -1051,7 +1045,7 @@ define i32 @test_chr_10(ptr %i, ptr %j) !prof !14 { ; CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr [[J]], align 4 ; CHECK-NEXT: [[TMP6:%.*]] = and i32 [[DOTFR1]], 2 ; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i32 [[TMP6]], 0 -; CHECK-NEXT: br i1 [[TMP7]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP7]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb2.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3]] @@ -1123,22 +1117,21 @@ define void @test_chr_11(ptr %i, i32 %x) !prof !14 { ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[I:%.*]], align 4 ; CHECK-NEXT: [[DOTFR1:%.*]] = freeze i32 [[TMP0]] -; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[DOTFR1]], 1 -; CHECK-NEXT: [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0 +; CHECK-NEXT: [[TMP1:%.*]] = trunc i32 [[DOTFR1]] to i1 ; CHECK-NEXT: [[CONV:%.*]] = sitofp i32 [[DOTFR1]] to double ; CHECK-NEXT: [[DIV:%.*]] = fdiv double 1.000000e+00, [[CONV]] ; CHECK-NEXT: [[MUL16:%.*]] = fmul double [[DIV]], [[CONV]] ; CHECK-NEXT: [[CONV717:%.*]] = fptosi double [[MUL16]] to i32 ; CHECK-NEXT: [[CONV717_FR:%.*]] = freeze i32 [[CONV717]] ; CHECK-NEXT: [[CMP18:%.*]] = icmp sgt i32 [[CONV717_FR]], 0 -; CHECK-NEXT: [[TMP3:%.*]] = and i1 [[TMP2]], [[CMP18]] -; CHECK-NEXT: br i1 [[TMP3]], label [[BB0:%.*]], label [[ENTRY_SPLIT_NONCHR:%.*]], !prof [[PROF15]] +; CHECK-NEXT: [[TMP2:%.*]] = and i1 [[CMP18]], [[TMP1]] +; CHECK-NEXT: br i1 [[TMP2]], label [[BB0:%.*]], label [[ENTRY_SPLIT_NONCHR:%.*]], !prof [[PROF15]] ; CHECK: bb0: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3:%.*]] ; CHECK: entry.split.nonchr: -; CHECK-NEXT: br i1 [[TMP2]], label [[BB0_NONCHR:%.*]], label [[BB1_NONCHR:%.*]], !prof [[PROF18:![0-9]+]] +; CHECK-NEXT: br i1 [[TMP1]], label [[BB0_NONCHR:%.*]], label [[BB1_NONCHR:%.*]], !prof [[PROF16]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1_NONCHR]] @@ -1148,7 +1141,7 @@ define void @test_chr_11(ptr %i, i32 %x) !prof !14 { ; CHECK-NEXT: [[MUL16_NONCHR:%.*]] = fmul double [[DIV_NONCHR]], [[CONV_NONCHR]] ; CHECK-NEXT: [[CONV717_NONCHR:%.*]] = fptosi double [[MUL16_NONCHR]] to i32 ; CHECK-NEXT: [[CMP18_NONCHR:%.*]] = icmp slt i32 [[CONV717_NONCHR]], 1 -; CHECK-NEXT: br i1 [[CMP18_NONCHR]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[CMP18_NONCHR]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb2.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3]] @@ -1189,16 +1182,16 @@ define i32 @test_chr_12(ptr %i, i32 %sum0) !prof !14 { ; CHECK-NEXT: [[DOTFR2:%.*]] = freeze i32 [[TMP0]] ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[DOTFR2]], 255 ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 0 -; CHECK-NEXT: br i1 [[TMP2]], label [[BB3:%.*]], label [[BB0:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP2]], label [[BB3:%.*]], label [[BB0:%.*]], !prof [[PROF17]] ; CHECK: bb0: ; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[DOTFR2]], 1 ; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i32 [[TMP3]], 0 ; CHECK-NEXT: [[TMP5:%.*]] = add i32 [[SUM0:%.*]], 42 -; CHECK-NEXT: [[SUM1:%.*]] = select i1 [[TMP4]], i32 [[SUM0]], i32 [[TMP5]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM1:%.*]] = select i1 [[TMP4]], i32 [[SUM0]], i32 [[TMP5]], !prof [[PROF17]] ; CHECK-NEXT: [[TMP6:%.*]] = and i32 [[DOTFR2]], 2 ; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i32 [[TMP6]], 0 ; CHECK-NEXT: [[TMP8:%.*]] = add i32 [[SUM1]], 43 -; CHECK-NEXT: [[SUM2:%.*]] = select i1 [[TMP7]], i32 [[SUM1]], i32 [[TMP8]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM2:%.*]] = select i1 [[TMP7]], i32 [[SUM1]], i32 [[TMP8]], !prof [[PROF17]] ; CHECK-NEXT: [[TMP9:%.*]] = load i32, ptr [[I]], align 4 ; CHECK-NEXT: [[DOTFR:%.*]] = freeze i32 [[TMP9]] ; CHECK-NEXT: [[TMP10:%.*]] = icmp ne i32 [[DOTFR]], 0 @@ -1210,11 +1203,11 @@ define i32 @test_chr_12(ptr %i, i32 %sum0) !prof !14 { ; CHECK-NEXT: [[TMP14:%.*]] = add i32 [[SUM2]], 88 ; CHECK-NEXT: br label [[BB3]] ; CHECK: bb0.split.nonchr: -; CHECK-NEXT: br i1 [[TMP10]], label [[BB1_NONCHR:%.*]], label [[BB3]], !prof [[PROF18]] +; CHECK-NEXT: br i1 [[TMP10]], label [[BB1_NONCHR:%.*]], label [[BB3]], !prof [[PROF16]] ; CHECK: bb1.nonchr: ; CHECK-NEXT: [[TMP15:%.*]] = and i32 [[DOTFR2]], 8 ; CHECK-NEXT: [[TMP16:%.*]] = icmp eq i32 [[TMP15]], 0 -; CHECK-NEXT: [[SUM4_NONCHR_V:%.*]] = select i1 [[TMP16]], i32 44, i32 88, !prof [[PROF16]] +; CHECK-NEXT: [[SUM4_NONCHR_V:%.*]] = select i1 [[TMP16]], i32 44, i32 88, !prof [[PROF17]] ; CHECK-NEXT: [[SUM4_NONCHR:%.*]] = add i32 [[SUM2]], [[SUM4_NONCHR_V]] ; CHECK-NEXT: br label [[BB3]] ; CHECK: bb3: @@ -1302,7 +1295,7 @@ define i32 @test_chr_14(ptr %i, ptr %j, i32 %sum0, i1 %pred, i32 %z) !prof !14 { ; CHECK-NEXT: [[PRED_FR:%.*]] = freeze i1 [[PRED:%.*]] ; CHECK-NEXT: [[V0:%.*]] = icmp eq i32 [[Z_FR]], 0 ; CHECK-NEXT: [[V3_NONCHR:%.*]] = and i1 [[V0]], [[PRED_FR]] -; CHECK-NEXT: br i1 [[V3_NONCHR]], label [[BB0_NONCHR:%.*]], label [[BB1]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[V3_NONCHR]], label [[BB0_NONCHR:%.*]], label [[BB1]], !prof [[PROF17]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1]] @@ -1325,7 +1318,7 @@ define i32 @test_chr_14(ptr %i, ptr %j, i32 %sum0, i1 %pred, i32 %z) !prof !14 { ; CHECK-NEXT: br label [[BB3]] ; CHECK: bb1.split.nonchr: ; CHECK-NEXT: [[V5_NONCHR:%.*]] = icmp eq i32 [[I0_FR]], [[J0_FR]] -; CHECK-NEXT: [[SUM3_NONCHR:%.*]] = select i1 [[V5_NONCHR]], i32 [[SUM0]], i32 [[V8]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM3_NONCHR:%.*]] = select i1 [[V5_NONCHR]], i32 [[SUM0]], i32 [[V8]], !prof [[PROF17]] ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: [[V9_NONCHR:%.*]] = and i32 [[I0_FR]], 4 ; CHECK-NEXT: [[V10_NONCHR:%.*]] = icmp eq i32 [[V9_NONCHR]], 0 @@ -1392,8 +1385,8 @@ define i32 @test_chr_15(ptr %i, ptr %j, i32 %sum0, i1 %pred, i32 %z) !prof !14 { ; CHECK-NEXT: entry: ; CHECK-NEXT: [[I0:%.*]] = load i32, ptr [[I:%.*]], align 4 ; CHECK-NEXT: [[V0:%.*]] = icmp eq i32 [[Z:%.*]], 0 -; CHECK-NEXT: [[V3:%.*]] = select i1 [[V0]], i1 [[PRED:%.*]], i1 false -; CHECK-NEXT: br i1 [[V3]], label [[BB0:%.*]], label [[BB1:%.*]], !prof [[PROF16]] +; CHECK-NEXT: [[V3:%.*]] = select i1 [[V0]], i1 [[PRED:%.*]], i1 false, !prof [[PROF19:![0-9]+]] +; CHECK-NEXT: br i1 [[V3]], label [[BB0:%.*]], label [[BB1:%.*]], !prof [[PROF17]] ; CHECK: bb0: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1]] @@ -1410,9 +1403,9 @@ define i32 @test_chr_15(ptr %i, ptr %j, i32 %sum0, i1 %pred, i32 %z) !prof !14 { ; CHECK-NEXT: [[V6:%.*]] = and i32 [[I0]], 2 ; CHECK-NEXT: [[V4:%.*]] = icmp eq i32 [[V6]], [[J0]] ; CHECK-NEXT: [[V8:%.*]] = add i32 [[SUM0:%.*]], 43 -; CHECK-NEXT: [[SUM2:%.*]] = select i1 [[V4]], i32 [[SUM0]], i32 [[V8]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM2:%.*]] = select i1 [[V4]], i32 [[SUM0]], i32 [[V8]], !prof [[PROF17]] ; CHECK-NEXT: [[V5:%.*]] = icmp eq i32 [[I0]], [[SUM2]] -; CHECK-NEXT: [[SUM3:%.*]] = select i1 [[V5]], i32 [[SUM2]], i32 [[V8]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM3:%.*]] = select i1 [[V5]], i32 [[SUM2]], i32 [[V8]], !prof [[PROF17]] ; CHECK-NEXT: [[V11:%.*]] = add i32 [[I0]], [[SUM3]] ; CHECK-NEXT: ret i32 [[V11]] ; @@ -1498,9 +1491,8 @@ define i32 @test_chr_16(ptr %i) !prof !14 { ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3:%.*]] ; CHECK: entry.split.nonchr: -; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[DOTFR1]], 1 -; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP3]], 0 -; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB1_NONCHR:%.*]], label [[BB0_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: [[TMP3:%.*]] = trunc i32 [[DOTFR1]] to i1 +; CHECK-NEXT: br i1 [[TMP3]], label [[BB0_NONCHR:%.*]], label [[BB1_NONCHR:%.*]], !prof [[PROF16]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1_NONCHR]] @@ -1508,7 +1500,7 @@ define i32 @test_chr_16(ptr %i) !prof !14 { ; CHECK-NEXT: [[V40_NONCHR:%.*]] = add i32 [[DOTFR1]], 44 ; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[DOTFR1]], 2 ; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP4]], 0 -; CHECK-NEXT: br i1 [[TMP5]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP5]], label [[BB3]], label [[BB2_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb2.nonchr: ; CHECK-NEXT: [[V41_NONCHR:%.*]] = add i32 [[DOTFR1]], 99 ; CHECK-NEXT: call void @foo() @@ -1578,7 +1570,7 @@ define i32 @test_chr_17(i32 %i, i1 %j) !prof !14 { ; CHECK: bbe: ; CHECK-NEXT: [[TMP0:%.*]] = and i32 [[I]], 1 ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[TMP0]], 0 -; CHECK-NEXT: br i1 [[TMP1]], label [[BB1]], label [[BB0:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP1]], label [[BB1]], label [[BB0:%.*]], !prof [[PROF17]] ; CHECK: bb0: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: [[S:%.*]] = add nuw nsw i32 [[TMP0]], [[I]] @@ -1587,7 +1579,7 @@ define i32 @test_chr_17(i32 %i, i1 %j) !prof !14 { ; CHECK-NEXT: [[P:%.*]] = phi i32 [ [[I]], [[BBQ]] ], [ [[TMP0]], [[BBE]] ], [ [[S]], [[BB0]] ] ; CHECK-NEXT: [[TMP2:%.*]] = and i32 [[I]], 2 ; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 0 -; CHECK-NEXT: br i1 [[TMP3]], label [[BB3]], label [[BB2:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP3]], label [[BB3]], label [[BB2:%.*]], !prof [[PROF17]] ; CHECK: bb2: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: [[Q:%.*]] = add i32 [[P]], [[TMP2]] @@ -1682,18 +1674,17 @@ define i32 @test_chr_18(ptr %i, i32 %sum0) !prof !14 { ; CHECK-NEXT: [[A4_NONCHR:%.*]] = and i32 [[LI_FR]], 4 ; CHECK-NEXT: [[CMP4_NONCHR:%.*]] = icmp eq i32 [[A4_NONCHR]], 0 ; CHECK-NEXT: [[INC2_NONCHR:%.*]] = add i32 [[INC1]], 1 -; CHECK-NEXT: br i1 [[CMP4_NONCHR]], label [[BB2]], label [[BB1_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[CMP4_NONCHR]], label [[BB2]], label [[BB1_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb1.nonchr: -; CHECK-NEXT: [[A1:%.*]] = and i32 [[LI_FR]], 1 -; CHECK-NEXT: [[CMP1_NOT:%.*]] = icmp eq i32 [[A1]], 0 -; CHECK-NEXT: [[SUM2_NONCHR:%.*]] = select i1 [[CMP1_NOT]], i32 [[SUM0]], i32 [[SUM1]], !prof [[PROF16]] +; CHECK-NEXT: [[CMP1:%.*]] = trunc i32 [[LI_FR]] to i1 +; CHECK-NEXT: [[SUM2_NONCHR:%.*]] = select i1 [[CMP1]], i32 [[SUM1]], i32 [[SUM0]], !prof [[PROF16]] ; CHECK-NEXT: [[SUM3_NONCHR:%.*]] = add i32 [[SUM2_NONCHR]], 44 ; CHECK-NEXT: br label [[BB2]] ; CHECK: bb2: ; CHECK-NEXT: [[TMP2]] = phi i32 [ [[INC2]], [[BB1]] ], [ [[INC2_NONCHR]], [[BB0_SPLIT_NONCHR]] ], [ [[INC2_NONCHR]], [[BB1_NONCHR]] ] ; CHECK-NEXT: [[SUM4:%.*]] = phi i32 [ [[SUM3]], [[BB1]] ], [ [[SUM1]], [[BB0_SPLIT_NONCHR]] ], [ [[SUM3_NONCHR]], [[BB1_NONCHR]] ] ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP2]], 100 -; CHECK-NEXT: br i1 [[CMP]], label [[BB3:%.*]], label [[BB0]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[CMP]], label [[BB3:%.*]], label [[BB0]], !prof [[PROF17]] ; CHECK: bb3: ; CHECK-NEXT: ret i32 [[SUM4]] ; @@ -1769,17 +1760,17 @@ define i32 @test_chr_19(ptr %i, i32 %sum0) !prof !14 { ; CHECK: entry.split.nonchr: ; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[DOTFR1]], 255 ; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP4]], 0 -; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB3]], label [[BB0_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB3]], label [[BB0_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: [[TMP5:%.*]] = and i32 [[DOTFR1]], 1 ; CHECK-NEXT: [[TMP6:%.*]] = icmp eq i32 [[TMP5]], 0 ; CHECK-NEXT: [[TMP7:%.*]] = add i32 [[SUM0]], 85 -; CHECK-NEXT: [[SUM2_NONCHR:%.*]] = select i1 [[TMP6]], i32 [[SUM0]], i32 [[TMP7]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM2_NONCHR:%.*]] = select i1 [[TMP6]], i32 [[SUM0]], i32 [[TMP7]], !prof [[PROF17]] ; CHECK-NEXT: [[TMP8:%.*]] = and i32 [[DOTFR1]], 8 ; CHECK-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], 0 -; CHECK-NEXT: [[SUM4_NONCHR_V:%.*]] = select i1 [[TMP9]], i32 44, i32 88 +; CHECK-NEXT: [[SUM4_NONCHR_V:%.*]] = select i1 [[TMP9]], i32 44, i32 88, !prof [[PROF17]] ; CHECK-NEXT: [[SUM4_NONCHR:%.*]] = add i32 [[SUM2_NONCHR]], [[SUM4_NONCHR_V]] -; CHECK-NEXT: [[SUM5_NONCHR:%.*]] = select i1 [[TMP6]], i32 [[SUM2_NONCHR]], i32 [[SUM4_NONCHR]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM5_NONCHR:%.*]] = select i1 [[TMP6]], i32 [[SUM2_NONCHR]], i32 [[SUM4_NONCHR]], !prof [[PROF17]] ; CHECK-NEXT: br label [[BB3]] ; CHECK: bb3: ; CHECK-NEXT: [[SUM6:%.*]] = phi i32 [ [[SUM5_NONCHR]], [[BB0_NONCHR]] ], [ [[TMP3]], [[BB1]] ], [ [[SUM0]], [[ENTRY_SPLIT_NONCHR]] ] @@ -1868,11 +1859,11 @@ define i32 @test_chr_20(ptr %i, i32 %sum0, i1 %j) !prof !14 { ; CHECK-NEXT: [[V8:%.*]] = add i32 [[SUM0]], 43 ; CHECK-NEXT: [[V3:%.*]] = and i32 [[I0_FR]], 2 ; CHECK-NEXT: [[V4_NOT:%.*]] = icmp eq i32 [[V3]], 0 -; CHECK-NEXT: [[SUM2_NONCHR:%.*]] = select i1 [[V4_NOT]], i32 [[SUM0]], i32 [[V8]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM2_NONCHR:%.*]] = select i1 [[V4_NOT]], i32 [[SUM0]], i32 [[V8]], !prof [[PROF17]] ; CHECK-NEXT: [[V6_NONCHR:%.*]] = and i32 [[I0_FR]], 4 ; CHECK-NEXT: [[V5_NONCHR:%.*]] = icmp eq i32 [[V6_NONCHR]], 0 ; CHECK-NEXT: [[V9_NONCHR:%.*]] = add i32 [[SUM2_NONCHR]], 44 -; CHECK-NEXT: [[SUM3_NONCHR:%.*]] = select i1 [[V5_NONCHR]], i32 [[SUM2_NONCHR]], i32 [[V9_NONCHR]], !prof [[PROF16]] +; CHECK-NEXT: [[SUM3_NONCHR:%.*]] = select i1 [[V5_NONCHR]], i32 [[SUM2_NONCHR]], i32 [[V9_NONCHR]], !prof [[PROF17]] ; CHECK-NEXT: br i1 [[J]], label [[BB1_NONCHR:%.*]], label [[BB4]] ; CHECK: bb1.nonchr: ; CHECK-NEXT: call void @foo() @@ -1881,7 +1872,7 @@ define i32 @test_chr_20(ptr %i, i32 %sum0, i1 %j) !prof !14 { ; CHECK-NEXT: [[TMP2:%.*]] = phi i32 [ [[V9]], [[BB1]] ], [ [[V9]], [[ENTRY_SPLIT]] ], [ [[SUM3_NONCHR]], [[BB1_NONCHR]] ], [ [[SUM3_NONCHR]], [[ENTRY_SPLIT_NONCHR]] ] ; CHECK-NEXT: [[I5:%.*]] = load i32, ptr [[I]], align 4 ; CHECK-NEXT: [[V12:%.*]] = icmp eq i32 [[I5]], 44 -; CHECK-NEXT: [[V13:%.*]] = select i1 [[V12]], i32 44, i32 [[TMP2]], !prof [[PROF16]] +; CHECK-NEXT: [[V13:%.*]] = select i1 [[V12]], i32 44, i32 [[TMP2]], !prof [[PROF17]] ; CHECK-NEXT: ret i32 [[V13]] ; entry: @@ -1945,7 +1936,7 @@ define i32 @test_chr_21(i64 %i, i64 %k, i64 %j) "instcombine-no-verify-fixpoint" ; CHECK-NEXT: switch i64 [[I_FR]], label [[BB2:%.*]] [ ; CHECK-NEXT: i64 2, label [[BB3_NONCHR2:%.*]] ; CHECK-NEXT: i64 86, label [[BB2_NONCHR1:%.*]] -; CHECK-NEXT: ], !prof [[PROF19:![0-9]+]] +; CHECK-NEXT: ], !prof [[PROF20:![0-9]+]] ; CHECK: bb2: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: call void @foo() @@ -1954,7 +1945,7 @@ define i32 @test_chr_21(i64 %i, i64 %k, i64 %j) "instcombine-no-verify-fixpoint" ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3_NONCHR2]] ; CHECK: bb3.nonchr2: -; CHECK-NEXT: br i1 [[CMP_I]], label [[BB4_NONCHR3:%.*]], label [[BB7]], !prof [[PROF18]] +; CHECK-NEXT: br i1 [[CMP_I]], label [[BB4_NONCHR3:%.*]], label [[BB7]], !prof [[PROF16]] ; CHECK: bb4.nonchr3: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB7]] @@ -1963,18 +1954,18 @@ define i32 @test_chr_21(i64 %i, i64 %k, i64 %j) "instcombine-no-verify-fixpoint" ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB10:%.*]] ; CHECK: entry.split.nonchr: -; CHECK-NEXT: br i1 [[CMP0]], label [[BB1_NONCHR:%.*]], label [[BB10]], !prof [[PROF18]] +; CHECK-NEXT: br i1 [[CMP0]], label [[BB1_NONCHR:%.*]], label [[BB10]], !prof [[PROF16]] ; CHECK: bb1.nonchr: ; CHECK-NEXT: [[CMP2_NONCHR:%.*]] = icmp eq i64 [[I_FR]], 2 -; CHECK-NEXT: br i1 [[CMP2_NONCHR]], label [[BB3_NONCHR:%.*]], label [[BB2_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[CMP2_NONCHR]], label [[BB3_NONCHR:%.*]], label [[BB2_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb3.nonchr: ; CHECK-NEXT: [[CMP_I_NONCHR:%.*]] = icmp eq i64 [[I_FR]], 86 -; CHECK-NEXT: br i1 [[CMP_I_NONCHR]], label [[BB6_NONCHR:%.*]], label [[BB4_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[CMP_I_NONCHR]], label [[BB6_NONCHR:%.*]], label [[BB4_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb6.nonchr: ; CHECK-NEXT: [[CMP3_NONCHR:%.*]] = icmp eq i64 [[J]], [[I_FR]] -; CHECK-NEXT: br i1 [[CMP3_NONCHR]], label [[BB8_NONCHR:%.*]], label [[BB7_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[CMP3_NONCHR]], label [[BB8_NONCHR:%.*]], label [[BB7_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb8.nonchr: -; CHECK-NEXT: br i1 [[CMP_I_NONCHR]], label [[BB10]], label [[BB9_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[CMP_I_NONCHR]], label [[BB10]], label [[BB9_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb9.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB10]] @@ -2527,14 +2518,14 @@ define void @test_chr_24(ptr %i) !prof !14 { ; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[I:%.*]], align 4 ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[TMP0]], 1 ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 0 -; CHECK-NEXT: br i1 [[TMP2]], label [[BB1:%.*]], label [[BB0:%.*]], !prof [[PROF20:![0-9]+]] +; CHECK-NEXT: br i1 [[TMP2]], label [[BB1:%.*]], label [[BB0:%.*]], !prof [[PROF21:![0-9]+]] ; CHECK: bb0: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1]] ; CHECK: bb1: ; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[TMP0]], 2 ; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i32 [[TMP3]], 0 -; CHECK-NEXT: br i1 [[TMP4]], label [[BB3:%.*]], label [[BB2:%.*]], !prof [[PROF20]] +; CHECK-NEXT: br i1 [[TMP4]], label [[BB3:%.*]], label [[BB2:%.*]], !prof [[PROF21]] ; CHECK: bb2: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB3]] @@ -2572,14 +2563,14 @@ define void @test_chr_with_bbs_address_taken1(ptr %i) !prof !14 { ; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[I:%.*]], align 4 ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[TMP0]], 1 ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 0 -; CHECK-NEXT: br i1 [[TMP2]], label [[BB1:%.*]], label [[BB0:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP2]], label [[BB1:%.*]], label [[BB0:%.*]], !prof [[PROF17]] ; CHECK: bb0: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1]] ; CHECK: bb1: ; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[TMP0]], 2 ; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i32 [[TMP3]], 0 -; CHECK-NEXT: br i1 [[TMP4]], label [[BB4:%.*]], label [[BB2:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP4]], label [[BB4:%.*]], label [[BB2:%.*]], !prof [[PROF17]] ; CHECK: bb2: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB4]] @@ -2628,16 +2619,15 @@ define void @test_chr_with_bbs_address_taken2(ptr %i) !prof !14 { ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB6:%.*]] ; CHECK: entry.split.nonchr: -; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[DOTFR1]], 1 -; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP3]], 0 -; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB1_NONCHR:%.*]], label [[BB0_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: [[TMP3:%.*]] = trunc i32 [[DOTFR1]] to i1 +; CHECK-NEXT: br i1 [[TMP3]], label [[BB0_NONCHR:%.*]], label [[BB1_NONCHR:%.*]], !prof [[PROF16]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1_NONCHR]] ; CHECK: bb1.nonchr: ; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[DOTFR1]], 2 ; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP4]], 0 -; CHECK-NEXT: br i1 [[TMP5]], label [[BB6]], label [[BB2_NONCHR:%.*]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP5]], label [[BB6]], label [[BB2_NONCHR:%.*]], !prof [[PROF17]] ; CHECK: bb2.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB6]] @@ -2700,6 +2690,9 @@ bb6: !16 = !{!"branch_weights", i32 1, i32 1} !17 = !{!"branch_weights", i32 0, i32 0} ; CHECK: !15 = !{!"branch_weights", i32 1000, i32 0} -; CHECK: !16 = !{!"branch_weights", i32 0, i32 1} -; CHECK: !17 = !{!"branch_weights", i32 1, i32 1} -; CHECK: !18 = !{!"branch_weights", i32 1, i32 0} +; CHECK: !16 = !{!"branch_weights", i32 1, i32 0} +; CHECK: !17 = !{!"branch_weights", i32 0, i32 1} +; CHECK: !18 = !{!"branch_weights", i32 1, i32 1} +; CHECK: !19 = !{!"unknown", !"instcombine"} +; CHECK: !20 = !{!"branch_weights", i32 1000, i32 0, i32 0} +; CHECK: !21 = !{!"branch_weights", i32 0, i32 0} diff --git a/llvm/test/Transforms/PGOProfile/chr_coro.ll b/llvm/test/Transforms/PGOProfile/chr_coro.ll index 12654eccd5689..501713da17491 100644 --- a/llvm/test/Transforms/PGOProfile/chr_coro.ll +++ b/llvm/test/Transforms/PGOProfile/chr_coro.ll @@ -13,20 +13,32 @@ declare noalias ptr @malloc(i32) ; resume part of the coroutine define fastcc void @f.resume(ptr noalias nonnull align 8 dereferenceable(24) %FramePtr) { - tail call void @bar() - ret void +; CHECK-LABEL: @f.resume( +; CHECK-NEXT: tail call void @bar() +; CHECK-NEXT: ret void +; + tail call void @bar() + ret void } ; destroy part of the coroutine define fastcc void @f.destroy(ptr noalias nonnull align 8 dereferenceable(24) %FramePtr) { - tail call void @bar() - ret void +; CHECK-LABEL: @f.destroy( +; CHECK-NEXT: tail call void @bar() +; CHECK-NEXT: ret void +; + tail call void @bar() + ret void } ; cleanup part of the coroutine define fastcc void @f.cleanup(ptr noalias nonnull align 8 dereferenceable(24) %FramePtr) { - tail call void @bar() - ret void +; CHECK-LABEL: @f.cleanup( +; CHECK-NEXT: tail call void @bar() +; CHECK-NEXT: ret void +; + tail call void @bar() + ret void } @f.resumers = private constant [3 x ptr] [ptr @f.resume, ptr @f.destroy, ptr @f.cleanup] @@ -44,16 +56,15 @@ define ptr @test_chr_with_coro_id(ptr %i) !prof !14 { ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB_CORO_ID:%.*]] ; CHECK: entry.split.nonchr: -; CHECK-NEXT: [[TMP3:%.*]] = and i32 [[DOTFR1]], 1 -; CHECK-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP3]], 0 -; CHECK-NEXT: br i1 [[DOTNOT]], label [[BB1_NONCHR:%.*]], label [[BB0_NONCHR:%.*]], !prof [[PROF16:![0-9]+]] +; CHECK-NEXT: [[TMP3:%.*]] = trunc i32 [[DOTFR1]] to i1 +; CHECK-NEXT: br i1 [[TMP3]], label [[BB0_NONCHR:%.*]], label [[BB1_NONCHR:%.*]], !prof [[PROF16:![0-9]+]] ; CHECK: bb0.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB1_NONCHR]] ; CHECK: bb1.nonchr: ; CHECK-NEXT: [[TMP4:%.*]] = and i32 [[DOTFR1]], 2 ; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP4]], 0 -; CHECK-NEXT: br i1 [[TMP5]], label [[BB2_NONCHR:%.*]], label [[BB_CORO_ID]], !prof [[PROF16]] +; CHECK-NEXT: br i1 [[TMP5]], label [[BB2_NONCHR:%.*]], label [[BB_CORO_ID]], !prof [[PROF17:![0-9]+]] ; CHECK: bb2.nonchr: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[BB_CORO_ID]] @@ -124,4 +135,5 @@ bb.coro.begin: !16 = !{!"branch_weights", i32 1, i32 1} !17 = !{!"branch_weights", i32 0, i32 0} ; CHECK: !15 = !{!"branch_weights", i32 1000, i32 0} -; CHECK: !16 = !{!"branch_weights", i32 0, i32 1} +; CHECK: !16 = !{!"branch_weights", i32 1, i32 0} +; CHECK: !17 = !{!"branch_weights", i32 0, i32 1} diff --git a/llvm/test/Transforms/PhaseOrdering/AArch64/extra-unroll-simplifications.ll b/llvm/test/Transforms/PhaseOrdering/AArch64/extra-unroll-simplifications.ll index 57dacd455482e..5e1066ee626fa 100644 --- a/llvm/test/Transforms/PhaseOrdering/AArch64/extra-unroll-simplifications.ll +++ b/llvm/test/Transforms/PhaseOrdering/AArch64/extra-unroll-simplifications.ll @@ -41,7 +41,7 @@ define void @partial_unroll_forced(i32 %N, ptr %src, ptr noalias %dst) { ; CHECK-NEXT: br i1 [[LCMP_MOD_NOT]], label [[EXIT]], label [[LOOP_LATCH_EPIL_PREHEADER]] ; CHECK: loop.latch.epil.preheader: ; CHECK-NEXT: [[INDVARS_IV_UNR:%.*]] = phi i64 [ 0, [[LOOP_LATCH_PREHEADER]] ], [ [[INDVARS_IV_NEXT_1]], [[EXIT_LOOPEXIT_UNR_LCSSA]] ] -; CHECK-NEXT: [[LCMP_MOD4:%.*]] = icmp ne i64 [[XTRAITER]], 0 +; CHECK-NEXT: [[LCMP_MOD4:%.*]] = trunc i32 [[N]] to i1 ; CHECK-NEXT: tail call void @llvm.assume(i1 [[LCMP_MOD4]]) ; CHECK-NEXT: [[SRC_IDX_EPIL:%.*]] = getelementptr <8 x half>, ptr [[SRC]], i64 [[INDVARS_IV_UNR]] ; CHECK-NEXT: [[L_EPIL:%.*]] = load <8 x half>, ptr [[SRC_IDX_EPIL]], align 16 @@ -115,7 +115,7 @@ define void @cse_matching_load_from_previous_unrolled_iteration(i32 %N, ptr %src ; CHECK-NEXT: br i1 [[LCMP_MOD_NOT]], label [[EXIT]], label [[LOOP_LATCH_EPIL_PREHEADER]] ; CHECK: loop.latch.epil.preheader: ; CHECK-NEXT: [[INDVARS_IV_UNR:%.*]] = phi i64 [ 0, [[LOOP_LATCH_PREHEADER]] ], [ [[INDVARS_IV_NEXT_1]], [[EXIT_LOOPEXIT_UNR_LCSSA]] ] -; CHECK-NEXT: [[LCMP_MOD4:%.*]] = icmp ne i64 [[XTRAITER]], 0 +; CHECK-NEXT: [[LCMP_MOD4:%.*]] = trunc i32 [[N]] to i1 ; CHECK-NEXT: tail call void @llvm.assume(i1 [[LCMP_MOD4]]) ; CHECK-NEXT: [[GEP_SRC_12_EPIL:%.*]] = getelementptr <2 x i32>, ptr [[SRC_12]], i64 [[INDVARS_IV_UNR]] ; CHECK-NEXT: [[L_12_EPIL:%.*]] = load <2 x i32>, ptr [[GEP_SRC_12_EPIL]], align 8