@@ -120,3 +120,49 @@ define <4 x i32> @lshr_C1_add_A_C2_v4i32_splat(i16 %I) {
120
120
%E = lshr <4 x i32 > <i32 6 , i32 2 , i32 1 , i32 -7 >, %D
121
121
ret <4 x i32 > %E
122
122
}
123
+
124
+ define i32 @shl_add_nuw (i32 %x ) {
125
+ ; CHECK-LABEL: @shl_add_nuw(
126
+ ; CHECK-NEXT: [[A:%.*]] = add nuw i32 [[X:%.*]], 5
127
+ ; CHECK-NEXT: [[R:%.*]] = shl i32 6, [[A]]
128
+ ; CHECK-NEXT: ret i32 [[R]]
129
+ ;
130
+ %a = add nuw i32 %x , 5
131
+ %r = shl i32 6 , %a
132
+ ret i32 %r
133
+ }
134
+
135
+ define <2 x i12 > @lshr_add_nuw (<2 x i12 > %x ) {
136
+ ; CHECK-LABEL: @lshr_add_nuw(
137
+ ; CHECK-NEXT: [[A:%.*]] = add nuw <2 x i12> [[X:%.*]], <i12 5, i12 1>
138
+ ; CHECK-NEXT: [[R:%.*]] = lshr <2 x i12> <i12 6, i12 42>, [[A]]
139
+ ; CHECK-NEXT: ret <2 x i12> [[R]]
140
+ ;
141
+ %a = add nuw <2 x i12 > %x , <i12 5 , i12 1 >
142
+ %r = lshr <2 x i12 > <i12 6 , i12 42 >, %a
143
+ ret <2 x i12 > %r
144
+ }
145
+
146
+ define i32 @ashr_add_nuw (i32 %x , i32* %p ) {
147
+ ; CHECK-LABEL: @ashr_add_nuw(
148
+ ; CHECK-NEXT: [[A:%.*]] = add nuw i32 [[X:%.*]], 5
149
+ ; CHECK-NEXT: store i32 [[A]], i32* [[P:%.*]], align 4
150
+ ; CHECK-NEXT: [[R:%.*]] = ashr i32 -6, [[A]]
151
+ ; CHECK-NEXT: ret i32 [[R]]
152
+ ;
153
+ %a = add nuw i32 %x , 5
154
+ store i32 %a , i32* %p
155
+ %r = ashr i32 -6 , %a
156
+ ret i32 %r
157
+ }
158
+
159
+ define i32 @shl_add_nsw (i32 %x ) {
160
+ ; CHECK-LABEL: @shl_add_nsw(
161
+ ; CHECK-NEXT: [[A:%.*]] = add nsw i32 [[X:%.*]], 5
162
+ ; CHECK-NEXT: [[R:%.*]] = shl i32 6, [[A]]
163
+ ; CHECK-NEXT: ret i32 [[R]]
164
+ ;
165
+ %a = add nsw i32 %x , 5
166
+ %r = shl i32 6 , %a
167
+ ret i32 %r
168
+ }
0 commit comments