@@ -342,10 +342,11 @@ func.func @iadd_poison(%arg0: i32) -> i32 {
342
342
343
343
// CHECK-LABEL: @iaddcarry_x_0
344
344
func.func @iaddcarry_x_0 (%arg0 : i32 ) -> !spirv.struct <(i32 , i32 )> {
345
+ // CHECK: %[[RET:.*]] = spirv.CompositeConstruct
345
346
%c0 = spirv.Constant 0 : i32
346
-
347
- // CHECK: spirv.CompositeConstruct
348
347
%0 = spirv.IAddCarry %arg0 , %c0 : !spirv.struct <(i32 , i32 )>
348
+
349
+ // CHECK: return %[[RET]]
349
350
return %0 : !spirv.struct <(i32 , i32 )>
350
351
}
351
352
@@ -355,15 +356,16 @@ func.func @const_fold_scalar_iaddcarry() -> (!spirv.struct<(i32, i32)>, !spirv.s
355
356
%cn5 = spirv.Constant -5 : i32
356
357
%cn8 = spirv.Constant -8 : i32
357
358
358
- // CHECK-DAG: spirv.Constant 0
359
- // CHECK-DAG: spirv.Constant -3
360
- // CHECK-DAG: spirv.CompositeConstruct
361
- // CHECK-DAG: spirv.Constant 1
362
- // CHECK-DAG: spirv.Constant -13
363
- // CHECK-DAG: spirv.CompositeConstruct
359
+ // CHECK-DAG: %[[C0:.*]] = spirv.Constant 0
360
+ // CHECK-DAG: %[[CN3:.*]] = spirv.Constant -3
361
+ // CHECK-DAG: %[[CC_CN3_C0:.*]] = spirv.CompositeConstruct %[[CN3]], %[[C0]]
362
+ // CHECK-DAG: %[[C1:.*]] = spirv.Constant 1
363
+ // CHECK-DAG: %[[CN13:.*]] = spirv.Constant -13
364
+ // CHECK-DAG: %[[CC_CN13_C1:.*]] = spirv.CompositeConstruct %[[CN13]], %[[C1]]
364
365
%0 = spirv.IAddCarry %c5 , %cn8 : !spirv.struct <(i32 , i32 )>
365
366
%1 = spirv.IAddCarry %cn5 , %cn8 : !spirv.struct <(i32 , i32 )>
366
367
368
+ // CHECK: return %[[CC_CN3_C0]], %[[CC_CN13_C1]]
367
369
return %0 , %1 : !spirv.struct <(i32 , i32 )>, !spirv.struct <(i32 , i32 )>
368
370
}
369
371
@@ -372,12 +374,13 @@ func.func @const_fold_vector_iaddcarry() -> !spirv.struct<(vector<3xi32>, vector
372
374
%v0 = spirv.Constant dense <[5 , -3 , -1 ]> : vector <3 xi32 >
373
375
%v1 = spirv.Constant dense <[-8 , -8 , 1 ]> : vector <3 xi32 >
374
376
375
- // CHECK-DAG: spirv.Constant dense<[0, 1, 1 ]>
376
- // CHECK-DAG: spirv.Constant dense<[-3, -11, 0 ]>
377
- // CHECK-DAG: spirv.CompositeConstruct
377
+ // CHECK-DAG: %[[CV1:.*]] = spirv.Constant dense<[-3, -11, 0 ]>
378
+ // CHECK-DAG: %[[CV2:.*]] = spirv.Constant dense<[0, 1, 1 ]>
379
+ // CHECK-DAG: %[[CC_CV1_CV2:.*]] = spirv.CompositeConstruct %[[CV1]], %[[CV2]]
378
380
%0 = spirv.IAddCarry %v0 , %v1 : !spirv.struct <(vector <3 xi32 >, vector <3 xi32 >)>
379
- return %0 : !spirv.struct <(vector <3 xi32 >, vector <3 xi32 >)>
380
381
382
+ // CHECK: return %[[CC_CV1_CV2]]
383
+ return %0 : !spirv.struct <(vector <3 xi32 >, vector <3 xi32 >)>
381
384
}
382
385
383
386
// -----
@@ -452,10 +455,12 @@ func.func @const_fold_vector_imul() -> vector<3xi32> {
452
455
453
456
// CHECK-LABEL: @smulextended_x_0
454
457
func.func @smulextended_x_0 (%arg0 : i32 ) -> !spirv.struct <(i32 , i32 )> {
458
+ // CHECK: %[[C0:.*]] = spirv.Constant 0
459
+ // CHECK: %[[RET:.*]] = spirv.CompositeConstruct %[[C0]], %[[C0]]
455
460
%c0 = spirv.Constant 0 : i32
456
-
457
- // CHECK: spirv.CompositeConstruct
458
461
%0 = spirv.SMulExtended %arg0 , %c0 : !spirv.struct <(i32 , i32 )>
462
+
463
+ // CHECK: return %[[RET]]
459
464
return %0 : !spirv.struct <(i32 , i32 )>
460
465
}
461
466
@@ -465,15 +470,16 @@ func.func @const_fold_scalar_smulextended() -> (!spirv.struct<(i32, i32)>, !spir
465
470
%cn5 = spirv.Constant -5 : i32
466
471
%cn8 = spirv.Constant -8 : i32
467
472
468
- // CHECK-DAG: spirv.Constant -40
469
- // CHECK-DAG: spirv.Constant -1
470
- // CHECK-DAG: spirv.CompositeConstruct
471
- // CHECK-DAG: spirv.Constant 40
472
- // CHECK-DAG: spirv.Constant 0
473
- // CHECK-DAG: spirv.CompositeConstruct
473
+ // CHECK-DAG: %[[CN40:.*]] = spirv.Constant -40
474
+ // CHECK-DAG: %[[CN1:.*]] = spirv.Constant -1
475
+ // CHECK-DAG: %[[CC_CN40_CN1:.*]] = spirv.CompositeConstruct %[[CN40]], %[[CN1]]
476
+ // CHECK-DAG: %[[C40:.*]] = spirv.Constant 40
477
+ // CHECK-DAG: %[[C0:.*]] = spirv.Constant 0
478
+ // CHECK-DAG: %[[CC_C40_C0:.*]] = spirv.CompositeConstruct %[[C40]], %[[C0]]
474
479
%0 = spirv.SMulExtended %c5 , %cn8 : !spirv.struct <(i32 , i32 )>
475
480
%1 = spirv.SMulExtended %cn5 , %cn8 : !spirv.struct <(i32 , i32 )>
476
481
482
+ // CHECK: return %[[CC_CN40_CN1]], %[[CC_C40_C0]]
477
483
return %0 , %1 : !spirv.struct <(i32 , i32 )>, !spirv.struct <(i32 , i32 )>
478
484
}
479
485
@@ -482,10 +488,12 @@ func.func @const_fold_vector_smulextended() -> !spirv.struct<(vector<3xi32>, vec
482
488
%v0 = spirv.Constant dense <[2147483647 , -5 , -1 ]> : vector <3 xi32 >
483
489
%v1 = spirv.Constant dense <[5 , -8 , 1 ]> : vector <3 xi32 >
484
490
485
- // CHECK: spirv.Constant dense<[2147483643, 40, -1]>
486
- // CHECK-NEXT: spirv.Constant dense<[2, 0, -1]>
487
- // CHECK-NEXT: spirv.CompositeConstruct
491
+ // CHECK-DAG: %[[CV1:.*]] = spirv.Constant dense<[2147483643, 40, -1]>
492
+ // CHECK-DAG: %[[CV2:.*]] = spirv.Constant dense<[2, 0, -1]>
493
+ // CHECK-DAG: %[[CC_CV1_CV2:.*]] = spirv.CompositeConstruct %[[CV1]], %[[CV2]]
488
494
%0 = spirv.SMulExtended %v0 , %v1 : !spirv.struct <(vector <3 xi32 >, vector <3 xi32 >)>
495
+
496
+ // CHECK: return %[[CC_CV1_CV2]]
489
497
return %0 : !spirv.struct <(vector <3 xi32 >, vector <3 xi32 >)>
490
498
491
499
}
@@ -498,19 +506,24 @@ func.func @const_fold_vector_smulextended() -> !spirv.struct<(vector<3xi32>, vec
498
506
499
507
// CHECK-LABEL: @umulextended_x_0
500
508
func.func @umulextended_x_0 (%arg0 : i32 ) -> !spirv.struct <(i32 , i32 )> {
509
+ // CHECK: %[[C0:.*]] = spirv.Constant 0
510
+ // CHECK: %[[RET:.*]] = spirv.CompositeConstruct %[[C0]], %[[C0]]
501
511
%c0 = spirv.Constant 0 : i32
502
-
503
- // CHECK: spirv.CompositeConstruct
504
512
%0 = spirv.UMulExtended %arg0 , %c0 : !spirv.struct <(i32 , i32 )>
513
+
514
+ // CHECK: return %[[RET]]
505
515
return %0 : !spirv.struct <(i32 , i32 )>
506
516
}
507
517
508
518
// CHECK-LABEL: @umulextended_x_1
519
+ // CHECK-SAME: (%[[ARG:.*]]: i32)
509
520
func.func @umulextended_x_1 (%arg0 : i32 ) -> !spirv.struct <(i32 , i32 )> {
521
+ // CHECK: %[[C0:.*]] = spirv.Constant 0
522
+ // CHECK: %[[RET:.*]] = spirv.CompositeConstruct %[[ARG]], %[[C0]]
510
523
%c0 = spirv.Constant 1 : i32
511
-
512
- // CHECK: spirv.CompositeConstruct
513
524
%0 = spirv.UMulExtended %arg0 , %c0 : !spirv.struct <(i32 , i32 )>
525
+
526
+ // CHECK: return %[[RET]]
514
527
return %0 : !spirv.struct <(i32 , i32 )>
515
528
}
516
529
@@ -520,15 +533,16 @@ func.func @const_fold_scalar_umulextended() -> (!spirv.struct<(i32, i32)>, !spir
520
533
%cn5 = spirv.Constant -5 : i32
521
534
%cn8 = spirv.Constant -8 : i32
522
535
523
- // CHECK-DAG: spirv.Constant 40
524
- // CHECK-DAG: spirv.Constant -13
525
- // CHECK-DAG: spirv.CompositeConstruct
526
- // CHECK-DAG: spirv.Constant -40
527
- // CHECK-DAG: spirv.Constant 4
528
- // CHECK-DAG: spirv.CompositeConstruct
536
+ // CHECK-DAG: %[[C40:.*]] = spirv.Constant 40
537
+ // CHECK-DAG: %[[CN13:.*]] = spirv.Constant -13
538
+ // CHECK-DAG: %[[CC_C40_CN13:.*]] = spirv.CompositeConstruct %[[C40]], %[[CN13]]
539
+ // CHECK-DAG: %[[CN40:.*]] = spirv.Constant -40
540
+ // CHECK-DAG: %[[C4:.*]] = spirv.Constant 4
541
+ // CHECK-DAG: %[[CC_CN40_C4:.*]] = spirv.CompositeConstruct %[[CN40]], %[[C4]]
529
542
%0 = spirv.UMulExtended %c5 , %cn8 : !spirv.struct <(i32 , i32 )>
530
543
%1 = spirv.UMulExtended %cn5 , %cn8 : !spirv.struct <(i32 , i32 )>
531
544
545
+ // CHECK: return %[[CC_CN40_C4]], %[[CC_C40_CN13]]
532
546
return %0 , %1 : !spirv.struct <(i32 , i32 )>, !spirv.struct <(i32 , i32 )>
533
547
}
534
548
@@ -537,12 +551,13 @@ func.func @const_fold_vector_umulextended() -> !spirv.struct<(vector<3xi32>, vec
537
551
%v0 = spirv.Constant dense <[2147483647 , -5 , -1 ]> : vector <3 xi32 >
538
552
%v1 = spirv.Constant dense <[5 , -8 , 1 ]> : vector <3 xi32 >
539
553
540
- // CHECK: spirv.Constant dense<[2147483643, 40, -1]>
541
- // CHECK-NEXT: spirv.Constant dense<[2, -13, 0]>
542
- // CHECK-NEXT: spirv.CompositeConstruct
554
+ // CHECK-DAG: %[[CV1:.*]] = spirv.Constant dense<[2147483643, 40, -1]>
555
+ // CHECK-DAG: %[[CV2:.*]] = spirv.Constant dense<[2, -13, 0]>
556
+ // CHECK-DAG: %[[CC_CV1_CV2:.*]] = spirv.CompositeConstruct %[[CV1]], %[[CV2]]
543
557
%0 = spirv.UMulExtended %v0 , %v1 : !spirv.struct <(vector <3 xi32 >, vector <3 xi32 >)>
544
- return %0 : !spirv.struct <(vector <3 xi32 >, vector <3 xi32 >)>
545
558
559
+ // CHECK: return %[[CC_CV1_CV2]]
560
+ return %0 : !spirv.struct <(vector <3 xi32 >, vector <3 xi32 >)>
546
561
}
547
562
548
563
// -----
0 commit comments