@@ -260,6 +260,31 @@ define i64 @PR39793_bswap_u64_as_u32(i64 %0) {
260
260
ret i64 %12
261
261
}
262
262
263
+ define i16 @PR39793_bswap_u64_as_u32_trunc (i64 %0 ) {
264
+ ; CHECK-LABEL: @PR39793_bswap_u64_as_u32_trunc(
265
+ ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP0:%.*]], 24
266
+ ; CHECK-NEXT: [[TMP3:%.*]] = and i64 [[TMP2]], 255
267
+ ; CHECK-NEXT: [[TMP4:%.*]] = lshr i64 [[TMP0]], 8
268
+ ; CHECK-NEXT: [[TMP5:%.*]] = and i64 [[TMP4]], 65280
269
+ ; CHECK-NEXT: [[TMP6:%.*]] = or i64 [[TMP3]], [[TMP5]]
270
+ ; CHECK-NEXT: [[TMP7:%.*]] = trunc i64 [[TMP6]] to i16
271
+ ; CHECK-NEXT: ret i16 [[TMP7]]
272
+ ;
273
+ %2 = lshr i64 %0 , 24
274
+ %3 = and i64 %2 , 255
275
+ %4 = lshr i64 %0 , 8
276
+ %5 = and i64 %4 , 65280
277
+ %6 = or i64 %3 , %5
278
+ %7 = shl i64 %0 , 8
279
+ %8 = and i64 %7 , 16711680
280
+ %9 = or i64 %6 , %8
281
+ %10 = shl i64 %0 , 24
282
+ %11 = and i64 %10 , 4278190080
283
+ %12 = or i64 %9 , %11
284
+ %13 = trunc i64 %12 to i16
285
+ ret i16 %13
286
+ }
287
+
263
288
define i64 @PR39793_bswap_u64_as_u16 (i64 %0 ) {
264
289
; CHECK-LABEL: @PR39793_bswap_u64_as_u16(
265
290
; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP0:%.*]], 8
@@ -277,6 +302,21 @@ define i64 @PR39793_bswap_u64_as_u16(i64 %0) {
277
302
ret i64 %6
278
303
}
279
304
305
+ define i8 @PR39793_bswap_u64_as_u16_trunc (i64 %0 ) {
306
+ ; CHECK-LABEL: @PR39793_bswap_u64_as_u16_trunc(
307
+ ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP0:%.*]], 8
308
+ ; CHECK-NEXT: [[TMP3:%.*]] = trunc i64 [[TMP2]] to i8
309
+ ; CHECK-NEXT: ret i8 [[TMP3]]
310
+ ;
311
+ %2 = lshr i64 %0 , 8
312
+ %3 = and i64 %2 , 255
313
+ %4 = shl i64 %0 , 8
314
+ %5 = and i64 %4 , 65280
315
+ %6 = or i64 %3 , %5
316
+ %7 = trunc i64 %6 to i8
317
+ ret i8 %7
318
+ }
319
+
280
320
define i32 @PR39793_bswap_u32_as_u16 (i32 %0 ) {
281
321
; CHECK-LABEL: @PR39793_bswap_u32_as_u16(
282
322
; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP0:%.*]], 8
@@ -294,6 +334,21 @@ define i32 @PR39793_bswap_u32_as_u16(i32 %0) {
294
334
ret i32 %6
295
335
}
296
336
337
+ define i8 @PR39793_bswap_u32_as_u16_trunc (i32 %0 ) {
338
+ ; CHECK-LABEL: @PR39793_bswap_u32_as_u16_trunc(
339
+ ; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP0:%.*]], 8
340
+ ; CHECK-NEXT: [[TMP3:%.*]] = trunc i32 [[TMP2]] to i8
341
+ ; CHECK-NEXT: ret i8 [[TMP3]]
342
+ ;
343
+ %2 = lshr i32 %0 , 8
344
+ %3 = and i32 %2 , 255
345
+ %4 = shl i32 %0 , 8
346
+ %5 = and i32 %4 , 65280
347
+ %6 = or i32 %3 , %5
348
+ %7 = trunc i32 %6 to i8
349
+ ret i8 %7
350
+ }
351
+
297
352
define i32 @shuf_4bytes (<4 x i8 > %x ) {
298
353
; CHECK-LABEL: @shuf_4bytes(
299
354
; CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i8> [[X:%.*]] to i32
0 commit comments