@@ -46,9 +46,48 @@ define i32 @NegBin(i1 %C) !prof !0 {
4646 ret i32 %V
4747}
4848
49+ define i32 @select_C_minus_1_or_C_from_bool (i1 %x ) {
50+ ; CHECK-LABEL: define i32 @select_C_minus_1_or_C_from_bool(
51+ ; CHECK-SAME: i1 [[X:%.*]]) {
52+ ; CHECK-NEXT: [[ADD:%.*]] = select i1 [[X]], i32 41, i32 42, !prof [[PROF2:![0-9]+]]
53+ ; CHECK-NEXT: ret i32 [[ADD]]
54+ ;
55+ %ext = sext i1 %x to i32
56+ %add = add i32 %ext , 42
57+ ret i32 %add
58+ }
59+
60+ define i5 @and_add (i1 %x , i1 %y ) {
61+ ; CHECK-LABEL: define i5 @and_add(
62+ ; CHECK-SAME: i1 [[X:%.*]], i1 [[Y:%.*]]) {
63+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i1 [[X]], true
64+ ; CHECK-NEXT: [[TMP2:%.*]] = and i1 [[Y]], [[TMP1]]
65+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[TMP2]], i5 -2, i5 0, !prof [[PROF2]]
66+ ; CHECK-NEXT: ret i5 [[R]]
67+ ;
68+ %xz = zext i1 %x to i5
69+ %ys = sext i1 %y to i5
70+ %sub = add i5 %xz , %ys
71+ %r = and i5 %sub , 30
72+ ret i5 %r
73+ }
74+
75+ define i32 @add_zext_zext_i1 (i1 %a ) {
76+ ; CHECK-LABEL: define i32 @add_zext_zext_i1(
77+ ; CHECK-SAME: i1 [[A:%.*]]) {
78+ ; CHECK-NEXT: [[ADD:%.*]] = select i1 [[A]], i32 2, i32 0, !prof [[PROF2]]
79+ ; CHECK-NEXT: ret i32 [[ADD]]
80+ ;
81+ %zext = zext i1 %a to i32
82+ %add = add i32 %zext , %zext
83+ ret i32 %add
84+ }
85+
86+
4987!0 = !{!"function_entry_count" , i64 1000 }
5088!1 = !{!"branch_weights" , i32 2 , i32 3 }
5189;.
5290; CHECK: [[PROF0]] = !{!"function_entry_count", i64 1000}
5391; CHECK: [[PROF1]] = !{!"branch_weights", i32 2, i32 3}
92+ ; CHECK: [[PROF2]] = !{!"unknown", !"instcombine"}
5493;.
0 commit comments