@@ -163,6 +163,56 @@ define i8 @shl_trunc_smaller_lshr(i32 %x) {
163
163
ret i8 %lt
164
164
}
165
165
166
+ define i24 @shl_trunc_bigger_ashr (i32 %x ) {
167
+ ; CHECK-LABEL: @shl_trunc_bigger_ashr(
168
+ ; CHECK-NEXT: [[TMP1:%.*]] = ashr i32 [[X:%.*]], 9
169
+ ; CHECK-NEXT: [[TMP2:%.*]] = trunc i32 [[TMP1]] to i24
170
+ ; CHECK-NEXT: [[LT:%.*]] = and i24 [[TMP2]], -8
171
+ ; CHECK-NEXT: ret i24 [[LT]]
172
+ ;
173
+ %rt = ashr i32 %x , 12
174
+ %tr = trunc i32 %rt to i24
175
+ %lt = shl i24 %tr , 3
176
+ ret i24 %lt
177
+ }
178
+
179
+ define i24 @shl_trunc_smaller_ashr (i32 %x ) {
180
+ ; CHECK-LABEL: @shl_trunc_smaller_ashr(
181
+ ; CHECK-NEXT: [[X_TR:%.*]] = trunc i32 [[X:%.*]] to i24
182
+ ; CHECK-NEXT: [[TMP1:%.*]] = shl i24 [[X_TR]], 3
183
+ ; CHECK-NEXT: [[LT:%.*]] = and i24 [[TMP1]], -8192
184
+ ; CHECK-NEXT: ret i24 [[LT]]
185
+ ;
186
+ %rt = ashr i32 %x , 10
187
+ %tr = trunc i32 %rt to i24
188
+ %lt = shl i24 %tr , 13
189
+ ret i24 %lt
190
+ }
191
+
192
+ define i8 @shl_trunc_bigger_shl (i32 %x ) {
193
+ ; CHECK-LABEL: @shl_trunc_bigger_shl(
194
+ ; CHECK-NEXT: [[X_TR:%.*]] = trunc i32 [[X:%.*]] to i8
195
+ ; CHECK-NEXT: [[TR:%.*]] = shl i8 [[X_TR]], 6
196
+ ; CHECK-NEXT: ret i8 [[TR]]
197
+ ;
198
+ %rt = shl i32 %x , 4
199
+ %tr = trunc i32 %rt to i8
200
+ %lt = shl i8 %tr , 2
201
+ ret i8 %lt
202
+ }
203
+
204
+ define i8 @shl_trunc_smaller_shl (i32 %x ) {
205
+ ; CHECK-LABEL: @shl_trunc_smaller_shl(
206
+ ; CHECK-NEXT: [[X_TR:%.*]] = trunc i32 [[X:%.*]] to i8
207
+ ; CHECK-NEXT: [[TR:%.*]] = shl i8 [[X_TR]], 6
208
+ ; CHECK-NEXT: ret i8 [[TR]]
209
+ ;
210
+ %rt = shl i32 %x , 2
211
+ %tr = trunc i32 %rt to i8
212
+ %lt = shl i8 %tr , 4
213
+ ret i8 %lt
214
+ }
215
+
166
216
define i8 @shl_trunc_bigger_lshr_use1 (i32 %x ) {
167
217
; CHECK-LABEL: @shl_trunc_bigger_lshr_use1(
168
218
; CHECK-NEXT: [[RT:%.*]] = lshr i32 [[X:%.*]], 5
0 commit comments