@@ -42,3 +42,69 @@ define float @t3(float %x, float %y) {
42
42
%t3 = fadd fast float %t2 , 1 .0
43
43
ret float %t3
44
44
}
45
+
46
+ define i8 @ashr_exact_poison_constant_fold (i1 %b , i8 %x ) {
47
+ ; CHECK-LABEL: @ashr_exact_poison_constant_fold(
48
+ ; CHECK-NEXT: [[X_OP:%.*]] = ashr i8 [[X:%.*]], 3
49
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[B:%.*]], i8 [[X_OP]], i8 5
50
+ ; CHECK-NEXT: ret i8 [[R]]
51
+ ;
52
+ %s = select i1 %b , i8 %x , i8 42
53
+ %r = ashr exact i8 %s , 3
54
+ ret i8 %r
55
+ }
56
+
57
+ define i8 @ashr_exact (i1 %b , i8 %x ) {
58
+ ; CHECK-LABEL: @ashr_exact(
59
+ ; CHECK-NEXT: [[X_OP:%.*]] = ashr i8 [[X:%.*]], 3
60
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[B:%.*]], i8 [[X_OP]], i8 2
61
+ ; CHECK-NEXT: ret i8 [[R]]
62
+ ;
63
+ %s = select i1 %b , i8 %x , i8 16
64
+ %r = ashr exact i8 %s , 3
65
+ ret i8 %r
66
+ }
67
+
68
+ define i8 @shl_nsw_nuw_poison_constant_fold (i1 %b , i8 %x ) {
69
+ ; CHECK-LABEL: @shl_nsw_nuw_poison_constant_fold(
70
+ ; CHECK-NEXT: [[X_OP:%.*]] = shl i8 16, [[X:%.*]]
71
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[B:%.*]], i8 -128, i8 [[X_OP]]
72
+ ; CHECK-NEXT: ret i8 [[R]]
73
+ ;
74
+ %s = select i1 %b , i8 3 , i8 %x
75
+ %r = shl nsw nuw i8 16 , %s
76
+ ret i8 %r
77
+ }
78
+
79
+ define i8 @shl_nsw_nuw (i1 %b , i8 %x ) {
80
+ ; CHECK-LABEL: @shl_nsw_nuw(
81
+ ; CHECK-NEXT: [[X_OP:%.*]] = shl i8 7, [[X:%.*]]
82
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[B:%.*]], i8 56, i8 [[X_OP]]
83
+ ; CHECK-NEXT: ret i8 [[R]]
84
+ ;
85
+ %s = select i1 %b , i8 3 , i8 %x
86
+ %r = shl nsw nuw i8 7 , %s
87
+ ret i8 %r
88
+ }
89
+
90
+ define i8 @add_nsw_poison_constant_fold (i1 %b , i8 %x ) {
91
+ ; CHECK-LABEL: @add_nsw_poison_constant_fold(
92
+ ; CHECK-NEXT: [[X_OP:%.*]] = add i8 [[X:%.*]], 64
93
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[B:%.*]], i8 [[X_OP]], i8 -127
94
+ ; CHECK-NEXT: ret i8 [[R]]
95
+ ;
96
+ %s = select i1 %b , i8 %x , i8 65
97
+ %r = add nsw i8 %s , 64
98
+ ret i8 %r
99
+ }
100
+
101
+ define i8 @add_nsw (i1 %b , i8 %x ) {
102
+ ; CHECK-LABEL: @add_nsw(
103
+ ; CHECK-NEXT: [[X_OP:%.*]] = add i8 [[X:%.*]], 64
104
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[B:%.*]], i8 [[X_OP]], i8 71
105
+ ; CHECK-NEXT: ret i8 [[R]]
106
+ ;
107
+ %s = select i1 %b , i8 %x , i8 7
108
+ %r = add nsw i8 %s , 64
109
+ ret i8 %r
110
+ }
0 commit comments