@@ -286,12 +286,11 @@ define <2 x i64> @test8_vec(<2 x i32> %A, <2 x i32> %B) {
286
286
287
287
define <2 x i64 > @test8_vec_nonuniform (<2 x i32 > %A , <2 x i32 > %B ) {
288
288
; CHECK-LABEL: @test8_vec_nonuniform(
289
- ; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i128>
290
- ; CHECK-NEXT: [[D:%.*]] = zext <2 x i32> [[B:%.*]] to <2 x i128>
291
- ; CHECK-NEXT: [[E:%.*]] = shl <2 x i128> [[D]], <i128 32, i128 48>
292
- ; CHECK-NEXT: [[F:%.*]] = or <2 x i128> [[E]], [[C]]
293
- ; CHECK-NEXT: [[G:%.*]] = trunc <2 x i128> [[F]] to <2 x i64>
294
- ; CHECK-NEXT: ret <2 x i64> [[G]]
289
+ ; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i64>
290
+ ; CHECK-NEXT: [[D:%.*]] = zext <2 x i32> [[B:%.*]] to <2 x i64>
291
+ ; CHECK-NEXT: [[E:%.*]] = shl <2 x i64> [[D]], <i64 32, i64 48>
292
+ ; CHECK-NEXT: [[F:%.*]] = or <2 x i64> [[E]], [[C]]
293
+ ; CHECK-NEXT: ret <2 x i64> [[F]]
295
294
;
296
295
%C = zext <2 x i32 > %A to <2 x i128 >
297
296
%D = zext <2 x i32 > %B to <2 x i128 >
@@ -343,12 +342,11 @@ define i8 @test10(i32 %X) {
343
342
344
343
define i64 @test11 (i32 %A , i32 %B ) {
345
344
; CHECK-LABEL: @test11(
346
- ; CHECK-NEXT: [[C:%.*]] = zext i32 [[A:%.*]] to i128
345
+ ; CHECK-NEXT: [[C:%.*]] = zext i32 [[A:%.*]] to i64
347
346
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[B:%.*]], 31
348
- ; CHECK-NEXT: [[E:%.*]] = zext i32 [[TMP1]] to i128
349
- ; CHECK-NEXT: [[F:%.*]] = shl i128 [[C]], [[E]]
350
- ; CHECK-NEXT: [[G:%.*]] = trunc i128 [[F]] to i64
351
- ; CHECK-NEXT: ret i64 [[G]]
347
+ ; CHECK-NEXT: [[E:%.*]] = zext i32 [[TMP1]] to i64
348
+ ; CHECK-NEXT: [[F:%.*]] = shl i64 [[C]], [[E]]
349
+ ; CHECK-NEXT: ret i64 [[F]]
352
350
;
353
351
%C = zext i32 %A to i128
354
352
%D = zext i32 %B to i128
@@ -360,12 +358,11 @@ define i64 @test11(i32 %A, i32 %B) {
360
358
361
359
define <2 x i64 > @test11_vec (<2 x i32 > %A , <2 x i32 > %B ) {
362
360
; CHECK-LABEL: @test11_vec(
363
- ; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i128 >
361
+ ; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i64 >
364
362
; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i32> [[B:%.*]], <i32 31, i32 31>
365
- ; CHECK-NEXT: [[E:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i128>
366
- ; CHECK-NEXT: [[F:%.*]] = shl <2 x i128> [[C]], [[E]]
367
- ; CHECK-NEXT: [[G:%.*]] = trunc <2 x i128> [[F]] to <2 x i64>
368
- ; CHECK-NEXT: ret <2 x i64> [[G]]
363
+ ; CHECK-NEXT: [[E:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
364
+ ; CHECK-NEXT: [[F:%.*]] = shl <2 x i64> [[C]], [[E]]
365
+ ; CHECK-NEXT: ret <2 x i64> [[F]]
369
366
;
370
367
%C = zext <2 x i32 > %A to <2 x i128 >
371
368
%D = zext <2 x i32 > %B to <2 x i128 >
@@ -377,12 +374,11 @@ define <2 x i64> @test11_vec(<2 x i32> %A, <2 x i32> %B) {
377
374
378
375
define <2 x i64 > @test11_vec_nonuniform (<2 x i32 > %A , <2 x i32 > %B ) {
379
376
; CHECK-LABEL: @test11_vec_nonuniform(
380
- ; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i128 >
377
+ ; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i64 >
381
378
; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i32> [[B:%.*]], <i32 31, i32 15>
382
- ; CHECK-NEXT: [[E:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i128>
383
- ; CHECK-NEXT: [[F:%.*]] = shl <2 x i128> [[C]], [[E]]
384
- ; CHECK-NEXT: [[G:%.*]] = trunc <2 x i128> [[F]] to <2 x i64>
385
- ; CHECK-NEXT: ret <2 x i64> [[G]]
379
+ ; CHECK-NEXT: [[E:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
380
+ ; CHECK-NEXT: [[F:%.*]] = shl <2 x i64> [[C]], [[E]]
381
+ ; CHECK-NEXT: ret <2 x i64> [[F]]
386
382
;
387
383
%C = zext <2 x i32 > %A to <2 x i128 >
388
384
%D = zext <2 x i32 > %B to <2 x i128 >
@@ -411,12 +407,11 @@ define <2 x i64> @test11_vec_undef(<2 x i32> %A, <2 x i32> %B) {
411
407
412
408
define i64 @test12 (i32 %A , i32 %B ) {
413
409
; CHECK-LABEL: @test12(
414
- ; CHECK-NEXT: [[C:%.*]] = zext i32 [[A:%.*]] to i128
410
+ ; CHECK-NEXT: [[C:%.*]] = zext i32 [[A:%.*]] to i64
415
411
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[B:%.*]], 31
416
- ; CHECK-NEXT: [[E:%.*]] = zext i32 [[TMP1]] to i128
417
- ; CHECK-NEXT: [[F:%.*]] = lshr i128 [[C]], [[E]]
418
- ; CHECK-NEXT: [[G:%.*]] = trunc i128 [[F]] to i64
419
- ; CHECK-NEXT: ret i64 [[G]]
412
+ ; CHECK-NEXT: [[E:%.*]] = zext i32 [[TMP1]] to i64
413
+ ; CHECK-NEXT: [[F:%.*]] = lshr i64 [[C]], [[E]]
414
+ ; CHECK-NEXT: ret i64 [[F]]
420
415
;
421
416
%C = zext i32 %A to i128
422
417
%D = zext i32 %B to i128
@@ -428,12 +423,11 @@ define i64 @test12(i32 %A, i32 %B) {
428
423
429
424
define <2 x i64 > @test12_vec (<2 x i32 > %A , <2 x i32 > %B ) {
430
425
; CHECK-LABEL: @test12_vec(
431
- ; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i128 >
426
+ ; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i64 >
432
427
; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i32> [[B:%.*]], <i32 31, i32 31>
433
- ; CHECK-NEXT: [[E:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i128>
434
- ; CHECK-NEXT: [[F:%.*]] = lshr <2 x i128> [[C]], [[E]]
435
- ; CHECK-NEXT: [[G:%.*]] = trunc <2 x i128> [[F]] to <2 x i64>
436
- ; CHECK-NEXT: ret <2 x i64> [[G]]
428
+ ; CHECK-NEXT: [[E:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
429
+ ; CHECK-NEXT: [[F:%.*]] = lshr <2 x i64> [[C]], [[E]]
430
+ ; CHECK-NEXT: ret <2 x i64> [[F]]
437
431
;
438
432
%C = zext <2 x i32 > %A to <2 x i128 >
439
433
%D = zext <2 x i32 > %B to <2 x i128 >
@@ -445,12 +439,11 @@ define <2 x i64> @test12_vec(<2 x i32> %A, <2 x i32> %B) {
445
439
446
440
define <2 x i64 > @test12_vec_nonuniform (<2 x i32 > %A , <2 x i32 > %B ) {
447
441
; CHECK-LABEL: @test12_vec_nonuniform(
448
- ; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i128 >
442
+ ; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i64 >
449
443
; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i32> [[B:%.*]], <i32 31, i32 15>
450
- ; CHECK-NEXT: [[E:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i128>
451
- ; CHECK-NEXT: [[F:%.*]] = lshr <2 x i128> [[C]], [[E]]
452
- ; CHECK-NEXT: [[G:%.*]] = trunc <2 x i128> [[F]] to <2 x i64>
453
- ; CHECK-NEXT: ret <2 x i64> [[G]]
444
+ ; CHECK-NEXT: [[E:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
445
+ ; CHECK-NEXT: [[F:%.*]] = lshr <2 x i64> [[C]], [[E]]
446
+ ; CHECK-NEXT: ret <2 x i64> [[F]]
454
447
;
455
448
%C = zext <2 x i32 > %A to <2 x i128 >
456
449
%D = zext <2 x i32 > %B to <2 x i128 >
@@ -479,12 +472,11 @@ define <2 x i64> @test12_vec_undef(<2 x i32> %A, <2 x i32> %B) {
479
472
480
473
define i64 @test13 (i32 %A , i32 %B ) {
481
474
; CHECK-LABEL: @test13(
482
- ; CHECK-NEXT: [[C:%.*]] = sext i32 [[A:%.*]] to i128
475
+ ; CHECK-NEXT: [[C:%.*]] = sext i32 [[A:%.*]] to i64
483
476
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[B:%.*]], 31
484
- ; CHECK-NEXT: [[E:%.*]] = zext i32 [[TMP1]] to i128
485
- ; CHECK-NEXT: [[F:%.*]] = ashr i128 [[C]], [[E]]
486
- ; CHECK-NEXT: [[G:%.*]] = trunc i128 [[F]] to i64
487
- ; CHECK-NEXT: ret i64 [[G]]
477
+ ; CHECK-NEXT: [[E:%.*]] = zext i32 [[TMP1]] to i64
478
+ ; CHECK-NEXT: [[F:%.*]] = ashr i64 [[C]], [[E]]
479
+ ; CHECK-NEXT: ret i64 [[F]]
488
480
;
489
481
%C = sext i32 %A to i128
490
482
%D = zext i32 %B to i128
@@ -496,12 +488,11 @@ define i64 @test13(i32 %A, i32 %B) {
496
488
497
489
define <2 x i64 > @test13_vec (<2 x i32 > %A , <2 x i32 > %B ) {
498
490
; CHECK-LABEL: @test13_vec(
499
- ; CHECK-NEXT: [[C:%.*]] = sext <2 x i32> [[A:%.*]] to <2 x i128 >
491
+ ; CHECK-NEXT: [[C:%.*]] = sext <2 x i32> [[A:%.*]] to <2 x i64 >
500
492
; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i32> [[B:%.*]], <i32 31, i32 31>
501
- ; CHECK-NEXT: [[E:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i128>
502
- ; CHECK-NEXT: [[F:%.*]] = ashr <2 x i128> [[C]], [[E]]
503
- ; CHECK-NEXT: [[G:%.*]] = trunc <2 x i128> [[F]] to <2 x i64>
504
- ; CHECK-NEXT: ret <2 x i64> [[G]]
493
+ ; CHECK-NEXT: [[E:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
494
+ ; CHECK-NEXT: [[F:%.*]] = ashr <2 x i64> [[C]], [[E]]
495
+ ; CHECK-NEXT: ret <2 x i64> [[F]]
505
496
;
506
497
%C = sext <2 x i32 > %A to <2 x i128 >
507
498
%D = zext <2 x i32 > %B to <2 x i128 >
@@ -513,12 +504,11 @@ define <2 x i64> @test13_vec(<2 x i32> %A, <2 x i32> %B) {
513
504
514
505
define <2 x i64 > @test13_vec_nonuniform (<2 x i32 > %A , <2 x i32 > %B ) {
515
506
; CHECK-LABEL: @test13_vec_nonuniform(
516
- ; CHECK-NEXT: [[C:%.*]] = sext <2 x i32> [[A:%.*]] to <2 x i128 >
507
+ ; CHECK-NEXT: [[C:%.*]] = sext <2 x i32> [[A:%.*]] to <2 x i64 >
517
508
; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i32> [[B:%.*]], <i32 31, i32 15>
518
- ; CHECK-NEXT: [[E:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i128>
519
- ; CHECK-NEXT: [[F:%.*]] = ashr <2 x i128> [[C]], [[E]]
520
- ; CHECK-NEXT: [[G:%.*]] = trunc <2 x i128> [[F]] to <2 x i64>
521
- ; CHECK-NEXT: ret <2 x i64> [[G]]
509
+ ; CHECK-NEXT: [[E:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
510
+ ; CHECK-NEXT: [[F:%.*]] = ashr <2 x i64> [[C]], [[E]]
511
+ ; CHECK-NEXT: ret <2 x i64> [[F]]
522
512
;
523
513
%C = sext <2 x i32 > %A to <2 x i128 >
524
514
%D = zext <2 x i32 > %B to <2 x i128 >
0 commit comments