@@ -577,12 +577,26 @@ func.func @cmpi_2dvector(%arg0 : vector<4x3xi32>, %arg1 : vector<4x3xi32>) {
577
577
// -----
578
578
579
579
// CHECK-LABEL: @select
580
+ // CHECK-SAME: (%[[ARG0:.*]]: i1, %[[ARG1:.*]]: i32, %[[ARG2:.*]]: i32)
580
581
func.func @select (%arg0 : i1 , %arg1 : i32 , %arg2 : i32 ) -> i32 {
581
- // CHECK: = llvm.select %arg0, %arg1, %arg2 : i1, i32
582
+ // CHECK: %[[RES:.*]] = llvm.select %[[ARG0]], %[[ARG1]], %[[ARG2]] : i1, i32
583
+ // CHECK: return %[[RES]]
582
584
%0 = arith.select %arg0 , %arg1 , %arg2 : i32
583
585
return %0 : i32
584
586
}
585
587
588
+ // CHECK-LABEL: @select_complex
589
+ // CHECK-SAME: (%[[ARG0:.*]]: i1, %[[ARG1:.*]]: complex<f32>, %[[ARG2:.*]]: complex<f32>)
590
+ func.func @select_complex (%arg0 : i1 , %arg1 : complex <f32 >, %arg2 : complex <f32 >) -> complex <f32 > {
591
+ // CHECK-DAG: %[[ARGC1:.*]] = builtin.unrealized_conversion_cast %[[ARG1]] : complex<f32> to !llvm.struct<(f32, f32)>
592
+ // CHECK-DAG: %[[ARGC2:.*]] = builtin.unrealized_conversion_cast %[[ARG2]] : complex<f32> to !llvm.struct<(f32, f32)>
593
+ // CHECK: %[[RES:.*]] = llvm.select %[[ARG0]], %[[ARGC1]], %[[ARGC2]] : i1, !llvm.struct<(f32, f32)>
594
+ // CHECK: %[[RESC:.*]] = builtin.unrealized_conversion_cast %[[RES]] : !llvm.struct<(f32, f32)> to complex<f32>
595
+ // CHECK: return %[[RESC]]
596
+ %0 = arith.select %arg0 , %arg1 , %arg2 : complex <f32 >
597
+ return %0 : complex <f32 >
598
+ }
599
+
586
600
// -----
587
601
588
602
// CHECK-LABEL: @ceildivsi
@@ -727,3 +741,15 @@ func.func @ops_supporting_overflow(%arg0: i64, %arg1: i64) {
727
741
%3 = arith.shli %arg0 , %arg1 overflow <nsw , nuw > : i64
728
742
return
729
743
}
744
+
745
+ // -----
746
+
747
+ // CHECK-LABEL: func @memref_bitcast
748
+ // CHECK-SAME: (%[[ARG:.*]]: memref<?xi16>)
749
+ // CHECK: %[[V1:.*]] = builtin.unrealized_conversion_cast %[[ARG]] : memref<?xi16> to !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
750
+ // CHECK: %[[V2:.*]] = builtin.unrealized_conversion_cast %[[V1]] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> to memref<?xbf16>
751
+ // CHECK: return %[[V2]]
752
+ func.func @memref_bitcast (%1: memref <?xi16 >) -> memref <?xbf16 > {
753
+ %2 = arith.bitcast %1 : memref <?xi16 > to memref <?xbf16 >
754
+ func.return %2 : memref <?xbf16 >
755
+ }
0 commit comments