@@ -18,8 +18,8 @@ define i32 @a(i1 zeroext %x, i1 zeroext %y) {
18
18
ret i32 %add
19
19
}
20
20
21
- define i32 @PR30273 (i1 %a , i1 %b ) {
22
- ; CHECK-LABEL: @PR30273 (
21
+ define i32 @PR30273_select (i1 %a , i1 %b ) {
22
+ ; CHECK-LABEL: @PR30273_select (
23
23
; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 %a to i32
24
24
; CHECK-NEXT: [[SEL1:%.*]] = select i1 %a, i32 2, i32 1
25
25
; CHECK-NEXT: [[SEL2:%.*]] = select i1 %b, i32 [[SEL1]], i32 [[ZEXT]]
@@ -31,3 +31,33 @@ define i32 @PR30273(i1 %a, i1 %b) {
31
31
ret i32 %sel2
32
32
}
33
33
34
+ define i32 @PR30273_zext_add (i1 %a , i1 %b ) {
35
+ ; CHECK-LABEL: @PR30273_zext_add(
36
+ ; CHECK-NEXT: [[CONV:%.*]] = zext i1 %a to i32
37
+ ; CHECK-NEXT: [[CONV3:%.*]] = zext i1 %b to i32
38
+ ; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i32 [[CONV3]], [[CONV]]
39
+ ; CHECK-NEXT: ret i32 [[ADD]]
40
+ ;
41
+ %conv = zext i1 %a to i32
42
+ %conv3 = zext i1 %b to i32
43
+ %add = add nuw nsw i32 %conv3 , %conv
44
+ ret i32 %add
45
+ }
46
+
47
+ define i32 @PR30273_three_bools (i1 %x , i1 %y , i1 %z ) {
48
+ ; CHECK-LABEL: @PR30273_three_bools(
49
+ ; CHECK-NEXT: [[FROMBOOL:%.*]] = zext i1 %x to i32
50
+ ; CHECK-NEXT: [[ADD1:%.*]] = select i1 %x, i32 2, i32 1
51
+ ; CHECK-NEXT: [[SEL1:%.*]] = select i1 %y, i32 [[ADD1]], i32 [[FROMBOOL]]
52
+ ; CHECK-NEXT: [[ADD2:%.*]] = zext i1 %z to i32
53
+ ; CHECK-NEXT: [[SEL2:%.*]] = add nuw nsw i32 [[SEL1]], [[ADD2]]
54
+ ; CHECK-NEXT: ret i32 [[SEL2]]
55
+ ;
56
+ %frombool = zext i1 %x to i32
57
+ %add1 = add nsw i32 %frombool , 1
58
+ %sel1 = select i1 %y , i32 %add1 , i32 %frombool
59
+ %add2 = add nsw i32 %sel1 , 1
60
+ %sel2 = select i1 %z , i32 %add2 , i32 %sel1
61
+ ret i32 %sel2
62
+ }
63
+
0 commit comments