Skip to content

Commit 767446a

Browse files
author
Greg Roth
committed
make a few changes to matrix tests needed for DXIL compat
Now that DXIL uses the itanium C++ ABI, it can use some of the tests that were SPIRV only before
1 parent 1e65231 commit 767446a

File tree

9 files changed

+596
-898
lines changed

9 files changed

+596
-898
lines changed

clang/test/AST/HLSL/matrix-alias.hlsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -ast-dump -o - %s | FileCheck %s
1+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -ast-dump -o - %s | FileCheck %s
22

33
// Test that matrix aliases are set up properly for HLSL
44

clang/test/CodeGenHLSL/Types/BuiltinMatrix/matrix-cast-template.hlsl

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang_cc1 -triple spirv-unknown-vulkan-compute -finclude-default-header -fnative-half-type -emit-llvm -disable-llvm-passes %s -o - -DSPIRV | FileCheck %s --check-prefixes=CHECK,SPIRV
1+
// RUN: %clang_cc1 -triple spirv-unknown-vulkan-compute -finclude-default-header -fnative-half-type -emit-llvm -disable-llvm-passes %s -o - | FileCheck %s
22
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-compute -finclude-default-header -fnative-half-type -emit-llvm -disable-llvm-passes %s -o - | FileCheck %s
33

44

@@ -324,13 +324,12 @@ class Foo {
324324
Foo(matrix_4_4<int> x);
325325
};
326326

327-
#ifdef SPIRV
328327
// These require mangling. DXIL uses MicrosoftMangle which doesn't support mangling matrices yet.
329-
// SPIRV-LABEL: define {{.*}}class_constructor_matrix_ty
328+
// CHECK-LABEL: define {{.*}}class_constructor_matrix_ty
330329
Foo class_constructor_matrix_ty(matrix_4_4<int> m) {
331-
// SPIRV: [[M:%.*]] = load <16 x i32>, ptr {{.*}}, align 4
332-
// SPIRV-NEXT: call{{.*}} void @_ZN3FooC1Eu11matrix_typeILj4ELj4EiE(ptr noundef nonnull align 4 dereferenceable(40) %agg.result, <16 x i32> noundef [[M]])
333-
// SPIRV-NEXT: ret void
330+
// CHECK: [[M:%.*]] = load <16 x i32>, ptr {{.*}}, align 4
331+
// CHECK-NEXT: call{{.*}} void @_ZN3FooC1Eu11matrix_typeIL{{[mj]}}4EL{{[mj]}}4EiE(ptr noundef nonnull align 4 dereferenceable(40) %agg.result, <16 x i32> noundef [[M]])
332+
// CHECK-NEXT: ret void
334333

335334
return Foo(m);
336335
}
@@ -340,12 +339,11 @@ struct Bar {
340339
Bar(matrix_3_3<float> x);
341340
};
342341

343-
// SPIRV-LABEL: define {{.*}}struct_constructor_matrix_ty
342+
// CHECK-LABEL: define {{.*}}struct_constructor_matrix_ty
344343
Bar struct_constructor_matrix_ty(matrix_3_3<float> m) {
345-
// SPIRV: [[M:%.*]] = load <9 x float>, ptr {{.*}}, align 4
346-
// SPIRV-NEXT: call{{.*}} void @_ZN3BarC1Eu11matrix_typeILj3ELj3EfE(ptr noundef nonnull align 4 dereferenceable(40) %agg.result, <9 x float> noundef [[M]])
347-
// SPIRV-NEXT: ret void
344+
// CHECK: [[M:%.*]] = load <9 x float>, ptr {{.*}}, align 4
345+
// CHECK-NEXT: call{{.*}} void @_ZN3BarC1Eu11matrix_typeIL{{[mj]}}3EL{{[mj]}}3EfE(ptr noundef nonnull align 4 dereferenceable(40) %agg.result, <9 x float> noundef [[M]])
346+
// CHECK-NEXT: ret void
348347

349348
return Bar(m);
350349
}
351-
#endif

clang/test/CodeGenHLSL/Types/BuiltinMatrix/matrix-cast.hlsl

Lines changed: 14 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
1-
// RUN: %clang_cc1 -triple spirv-unknown-vulkan-compute -finclude-default-header -fnative-half-type -emit-llvm -disable-llvm-passes %s -o - -DSPIRV | FileCheck %s
1+
// RUN: %clang_cc1 -triple spirv-unknown-vulkan-compute -finclude-default-header -fnative-half-type -emit-llvm -disable-llvm-passes %s -o - | FileCheck %s
22
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-compute -finclude-default-header -fnative-half-type -emit-llvm -disable-llvm-passes %s -o - | FileCheck %s
33

44
// Test explicit matrix casts.
55
// This is adapted to HLSL from CodeGen/matrix-cast.c.
66

77
// CHECK-LABEL: define {{.*}}cast_int16_matrix_to_int
8-
void cast_int16_matrix_to_int() {
9-
int16_t4x4 c;
10-
int4x4 i;
11-
8+
void cast_int16_matrix_to_int( int16_t4x4 c, int4x4 i) {
129
// CHECK: [[C:%.*]] = load <16 x i16>, ptr {{.*}}, align 2
1310
// CHECK-NEXT: [[CONV:%.*]] = sext <16 x i16> [[C]] to <16 x i32>
1411
// CHECK-NEXT: store <16 x i32> [[CONV]], ptr {{.*}}, align 4
@@ -18,9 +15,7 @@ void cast_int16_matrix_to_int() {
1815
}
1916

2017
// CHECK-LABEL: define {{.*}}cast_int16_matrix_to_uint
21-
void cast_int16_matrix_to_uint() {
22-
int16_t4x4 c;
23-
uint4x4 u;
18+
void cast_int16_matrix_to_uint( int16_t4x4 c, uint4x4 u) {
2419
// CHECK: [[C:%.*]] = load <16 x i16>, ptr {{.*}}, align 2
2520
// CHECK-NEXT: [[CONV:%.*]] = sext <16 x i16> [[C]] to <16 x i32>
2621
// CHECK-NEXT: store <16 x i32> [[CONV]], ptr {{.*}}, align 4
@@ -30,9 +25,7 @@ void cast_int16_matrix_to_uint() {
3025
}
3126

3227
// CHECK-LABEL: define {{.*}}cast_uint64_matrix_to_int16
33-
void cast_uint64_matrix_to_int16() {
34-
uint64_t4x4 u;
35-
int16_t4x4 s;
28+
void cast_uint64_matrix_to_int16( uint64_t4x4 u, int16_t4x4 s) {
3629
// CHECK: [[U:%.*]] = load <16 x i64>, ptr {{.*}}, align 8
3730
// CHECK-NEXT: [[CONV:%.*]] = trunc <16 x i64> [[U]] to <16 x i16>
3831
// CHECK-NEXT: store <16 x i16> [[CONV]], ptr {{.*}}, align 2
@@ -42,9 +35,7 @@ void cast_uint64_matrix_to_int16() {
4235
}
4336

4437
// CHECK-LABEL: define {{.*}}cast_int_matrix_to_int16
45-
void cast_int_matrix_to_int16() {
46-
int4x4 i;
47-
int16_t4x4 s;
38+
void cast_int_matrix_to_int16( int4x4 i, int16_t4x4 s) {
4839
// CHECK: [[I:%.*]] = load <16 x i32>, ptr {{.*}}, align 4
4940
// CHECK-NEXT: [[CONV:%.*]] = trunc <16 x i32> [[I]] to <16 x i16>
5041
// CHECK-NEXT: store <16 x i16> [[CONV]], ptr {{.*}}, align 2
@@ -54,9 +45,7 @@ void cast_int_matrix_to_int16() {
5445
}
5546

5647
// CHECK-LABEL: define {{.*}}cast_int_matrix_to_float
57-
void cast_int_matrix_to_float() {
58-
int4x4 i;
59-
float4x4 f;
48+
void cast_int_matrix_to_float( int4x4 i, float4x4 f) {
6049
// CHECK: [[I:%.*]] = load <16 x i32>, ptr {{.*}}, align 4
6150
// CHECK-NEXT: [[CONV:%.*]] = sitofp <16 x i32> [[I]] to <16 x float>
6251
// CHECK-NEXT: store <16 x float> [[CONV]], ptr {{.*}}, align 4
@@ -66,9 +55,7 @@ void cast_int_matrix_to_float() {
6655
}
6756

6857
// CHECK-LABEL: define {{.*}}cast_uint_matrix_to_float
69-
void cast_uint_matrix_to_float() {
70-
uint16_t4x4 u;
71-
float4x4 f;
58+
void cast_uint_matrix_to_float( uint16_t4x4 u, float4x4 f) {
7259
// CHECK: [[U:%.*]] = load <16 x i16>, ptr {{.*}}, align 2
7360
// CHECK-NEXT: [[CONV:%.*]] = uitofp <16 x i16> [[U]] to <16 x float>
7461
// CHECK-NEXT: store <16 x float> [[CONV]], ptr {{.*}}, align 4
@@ -78,9 +65,7 @@ void cast_uint_matrix_to_float() {
7865
}
7966

8067
// CHECK-LABEL: define {{.*}}cast_double_matrix_to_int
81-
void cast_double_matrix_to_int() {
82-
double4x4 d;
83-
int4x4 i;
68+
void cast_double_matrix_to_int( double4x4 d, int4x4 i) {
8469
// CHECK: [[D:%.*]] = load <16 x double>, ptr {{.*}}, align 8
8570
// CHECK-NEXT: [[CONV:%.*]] = fptosi <16 x double> [[D]] to <16 x i32>
8671
// CHECK-NEXT: store <16 x i32> [[CONV]], ptr {{.*}}, align 4
@@ -90,9 +75,7 @@ void cast_double_matrix_to_int() {
9075
}
9176

9277
// CHECK-LABEL: define {{.*}}cast_float_matrix_to_uint16
93-
void cast_float_matrix_to_uint16() {
94-
float4x4 f;
95-
uint16_t4x4 i;
78+
void cast_float_matrix_to_uint16( float4x4 f, uint16_t4x4 i) {
9679
// CHECK: [[F:%.*]] = load <16 x float>, ptr {{.*}}, align 4
9780
// CHECK-NEXT: [[CONV:%.*]] = fptoui <16 x float> [[F]] to <16 x i16>
9881
// CHECK-NEXT: store <16 x i16> [[CONV]], ptr {{.*}}, align 2
@@ -102,9 +85,7 @@ void cast_float_matrix_to_uint16() {
10285
}
10386

10487
// CHECK-LABEL: define {{.*}}cast_double_matrix_to_float
105-
void cast_double_matrix_to_float() {
106-
double4x4 d;
107-
float4x4 f;
88+
void cast_double_matrix_to_float( double4x4 d, float4x4 f) {
10889
// CHECK: [[D:%.*]] = load <16 x double>, ptr {{.*}}, align 8
10990
// CHECK-NEXT: [[CONV:%.*]] = fptrunc <16 x double> [[D]] to <16 x float>
11091
// CHECK-NEXT: store <16 x float> [[CONV]], ptr {{.*}}, align 4
@@ -114,9 +95,7 @@ void cast_double_matrix_to_float() {
11495
}
11596

11697
// CHECK-LABEL: define {{.*}}cast_uint16_to_uint
117-
void cast_uint16_to_uint() {
118-
uint16_t4x4 s;
119-
uint4x4 i;
98+
void cast_uint16_to_uint( uint16_t4x4 s, uint4x4 i) {
12099
// CHECK: [[S:%.*]] = load <16 x i16>, ptr {{.*}}, align 2
121100
// CHECK-NEXT: [[CONV:%.*]] = zext <16 x i16> [[S]] to <16 x i32>
122101
// CHECK-NEXT: store <16 x i32> [[CONV]], ptr {{.*}}, align 4
@@ -126,9 +105,7 @@ void cast_uint16_to_uint() {
126105
}
127106

128107
// CHECK-LABEL: define {{.*}}cast_uint64_to_uint16
129-
void cast_uint64_to_uint16() {
130-
uint64_t4x4 l;
131-
uint16_t4x4 s;
108+
void cast_uint64_to_uint16( uint64_t4x4 l, uint16_t4x4 s) {
132109
// CHECK: [[L:%.*]] = load <16 x i64>, ptr {{.*}}, align 8
133110
// CHECK-NEXT: [[CONV:%.*]] = trunc <16 x i64> [[L]] to <16 x i16>
134111
// CHECK-NEXT: store <16 x i16> [[CONV]], ptr {{.*}}, align 2
@@ -138,9 +115,7 @@ void cast_uint64_to_uint16() {
138115
}
139116

140117
// CHECK-LABEL: define {{.*}}cast_uint16_to_int
141-
void cast_uint16_to_int() {
142-
uint16_t4x4 u;
143-
int4x4 i;
118+
void cast_uint16_to_int( uint16_t4x4 u, int4x4 i) {
144119
// CHECK: [[U:%.*]] = load <16 x i16>, ptr {{.*}}, align 2
145120
// CHECK-NEXT: [[CONV:%.*]] = zext <16 x i16> [[U]] to <16 x i32>
146121
// CHECK-NEXT: store <16 x i32> [[CONV]], ptr {{.*}}, align 4
@@ -150,9 +125,7 @@ void cast_uint16_to_int() {
150125
}
151126

152127
// CHECK-LABEL: define {{.*}}cast_int_to_uint64
153-
void cast_int_to_uint64() {
154-
int4x4 i;
155-
uint64_t4x4 u;
128+
void cast_int_to_uint64( int4x4 i, uint64_t4x4 u) {
156129
// CHECK: [[I:%.*]] = load <16 x i32>, ptr {{.*}}, align 4
157130
// CHECK-NEXT: [[CONV:%.*]] = sext <16 x i32> [[I]] to <16 x i64>
158131
// CHECK-NEXT: store <16 x i64> [[CONV]], ptr {{.*}}, align 8

clang/test/CodeGenHLSL/Types/BuiltinMatrix/matrix-transpose-template.hlsl

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// RUN: %clang_cc1 -no-enable-noundef-analysis -triple spirv-unknown-vulkan-compute -finclude-default-header %s -emit-llvm -disable-llvm-passes -o - | FileCheck %s
2+
// RUN: %clang_cc1 -no-enable-noundef-analysis -triple dxil-pc-shadermodel6.3-compute -finclude-default-header %s -emit-llvm -disable-llvm-passes -o - | FileCheck %s
23

34
// Test the matrix type transpose builtin.
4-
// Since all these cases require mangling, DXIL is not tested for now.
55

66
template <typename EltTy, unsigned Rows, unsigned Columns>
77
using matrix_t = matrix<EltTy, Rows, Columns>;
@@ -19,54 +19,52 @@ MyMatrix<T, C, R> transpose(const MyMatrix<T, R, C> M) {
1919
return Res;
2020
}
2121

22+
// CHECK-LABEL: define{{.*}} void @_Z24test_transpose_template1v()
2223
void test_transpose_template1() {
23-
// SPIRV-LABEL: define{{.*}} void @_Z24test_transpose_template1v()
24-
// SPIRV: call{{.*}} void @_Z9transposeIiLj3ELj4EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(ptr dead_on_unwind writable sret(%struct.MyMatrix.0) align 4 %M1_t, ptr byval(%struct.MyMatrix) align 4 %agg.tmp)
25-
// SPIRV-LABEL: define{{.*}} void @_Z9transposeIiLj3ELj4EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(
26-
// SPIRV: [[M:%.*]] = load <12 x i32>, ptr {{.*}}, align 4
27-
// SPIRV-NEXT: [[M_T:%.*]] = call <12 x i32> @llvm.matrix.transpose.v12i32(<12 x i32> [[M]], i32 3, i32 4)
24+
// CHECK: call{{.*}} void @_Z9transposeIiLj3ELj4EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(ptr dead_on_unwind writable sret(%struct.MyMatrix.0) align 4 %M1_t, ptr byval(%struct.MyMatrix) align 4 %agg.tmp)
25+
// CHECK-LABEL: define{{.*}} void @_Z9transposeIiLj3ELj4EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(
26+
// CHECK: [[M:%.*]] = load <12 x i32>, ptr {{.*}}, align 4
27+
// CHECK-NEXT: [[M_T:%.*]] = call <12 x i32> @llvm.matrix.transpose.v12i32(<12 x i32> [[M]], i32 3, i32 4)
2828

2929
MyMatrix<int, 3, 4> M1;
3030
MyMatrix<int, 4, 3> M1_t = transpose(M1);
3131
}
3232

33+
// CHECK-LABEL: define{{.*}} void @_Z24test_transpose_template2
3334
void test_transpose_template2(inout MyMatrix<double, 3, 2> M) {
34-
// SPIRV-LABEL: define{{.*}} void @_Z24test_transpose_template2R8MyMatrixIdLj3ELj2EE(
35-
// SPIRV: call{{.*}} void @_Z9transposeIdLj3ELj2EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(ptr dead_on_unwind writable sret(%struct.MyMatrix.1) align 8 %agg.tmp1, ptr byval(%struct.MyMatrix.2) align 8 %agg.tmp2)
36-
// SPIRV-NEXT: call{{.*}} void @_Z9transposeIdLj2ELj3EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(ptr dead_on_unwind writable sret(%struct.MyMatrix.2) align 8 %agg.tmp, ptr byval(%struct.MyMatrix.1) align 8 %agg.tmp1)
37-
// SPIRV-NEXT: call{{.*}} void @_Z9transposeIdLj3ELj2EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(ptr dead_on_unwind writable sret(%struct.MyMatrix.1) align 8 %M2_t, ptr byval(%struct.MyMatrix.2) align 8 %agg.tmp)
35+
// CHECK: call{{.*}} void @_Z9transposeIdLj3ELj2EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(ptr dead_on_unwind writable sret(%struct.MyMatrix.1) align 8 %agg.tmp1, ptr byval(%struct.MyMatrix.2) align 8 %agg.tmp2)
36+
// CHECK-NEXT: call{{.*}} void @_Z9transposeIdLj2ELj3EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(ptr dead_on_unwind writable sret(%struct.MyMatrix.2) align 8 %agg.tmp, ptr byval(%struct.MyMatrix.1) align 8 %agg.tmp1)
37+
// CHECK-NEXT: call{{.*}} void @_Z9transposeIdLj3ELj2EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(ptr dead_on_unwind writable sret(%struct.MyMatrix.1) align 8 %M2_t, ptr byval(%struct.MyMatrix.2) align 8 %agg.tmp)
3838

39-
// SPIRV-LABEL: define{{.*}} void @_Z9transposeIdLj3ELj2EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(
40-
// SPIRV: [[M:%.*]] = load <6 x double>, ptr {{.*}}, align 8
41-
// SPIRV-NEXT: [[M_T:%.*]] = call <6 x double> @llvm.matrix.transpose.v6f64(<6 x double> [[M]], i32 3, i32 2)
42-
// SPIRV-NEXT: [[RES_ADDR:%.*]] = getelementptr inbounds nuw %struct.MyMatrix.1, ptr %agg.result, i32 0, i32 0
43-
// SPIRV-NEXT: store <6 x double> [[M_T]], ptr [[RES_ADDR]], align 8
39+
// CHECK-LABEL: define{{.*}} void @_Z9transposeIdLj3ELj2EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(
40+
// CHECK: [[M:%.*]] = load <6 x double>, ptr {{.*}}, align 8
41+
// CHECK-NEXT: [[M_T:%.*]] = call <6 x double> @llvm.matrix.transpose.v6f64(<6 x double> [[M]], i32 3, i32 2)
42+
// CHECK-NEXT: [[RES_ADDR:%.*]] = getelementptr inbounds nuw %struct.MyMatrix.1, ptr %agg.result, i32 0, i32 0
43+
// CHECK-NEXT: store <6 x double> [[M_T]], ptr [[RES_ADDR]], align 8
4444

45-
// SPIRV-LABEL: define{{.*}} void @_Z9transposeIdLj2ELj3EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(
46-
// SPIRV: [[M:%.*]] = load <6 x double>, ptr {{.*}}, align 8
47-
// SPIRV-NEXT: [[M_T:%.*]] = call <6 x double> @llvm.matrix.transpose.v6f64(<6 x double> [[M]], i32 2, i32 3)
48-
// SPIRV-NEXT: [[RES_ADDR:%.*]] = getelementptr inbounds nuw %struct.MyMatrix.2, ptr %agg.result, i32 0, i32 0
49-
// SPIRV-NEXT: store <6 x double> [[M_T]], ptr [[RES_ADDR]], align 8
45+
// CHECK-LABEL: define{{.*}} void @_Z9transposeIdLj2ELj3EE8MyMatrixIT_XT1_EXT0_EES0_IS1_XT0_EXT1_EE(
46+
// CHECK: [[M:%.*]] = load <6 x double>, ptr {{.*}}, align 8
47+
// CHECK-NEXT: [[M_T:%.*]] = call <6 x double> @llvm.matrix.transpose.v6f64(<6 x double> [[M]], i32 2, i32 3)
48+
// CHECK-NEXT: [[RES_ADDR:%.*]] = getelementptr inbounds nuw %struct.MyMatrix.2, ptr %agg.result, i32 0, i32 0
49+
// CHECK-NEXT: store <6 x double> [[M_T]], ptr [[RES_ADDR]], align 8
5050

5151
MyMatrix<double, 2, 3> M2_t = transpose(transpose(transpose(M)));
5252
}
5353

5454
matrix_t<float, 3, 3> get_matrix();
5555

56+
// CHECK-LABEL: define{{.*}} void @_Z21test_transpose_rvaluev()
5657
void test_transpose_rvalue() {
57-
// CHECK-LABEL: define{{.*}} void @_Z21test_transpose_rvaluev()
58-
// CHECK-NEXT: entry:
59-
// CHECK-NEXT: %0 = call token @llvm.experimental.convergence.entry()
60-
// CHECK-NEXT: [[M_T_ADDR:%.*]] = alloca [9 x float], align 4
58+
// CHECK: [[M_T_ADDR:%.*]] = alloca [9 x float], align 4
6159
// CHECK-NEXT: [[CALL_RES:%.*]] = call{{.*}} <9 x float> @_Z10get_matrixv()
6260
// CHECK-NEXT: [[ADD:%.*]] = fadd <9 x float> [[CALL_RES]], <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
6361
// CHECK-NEXT: [[M_T:%.*]] = call <9 x float> @llvm.matrix.transpose.v9f32(<9 x float> [[ADD]], i32 3, i32 3)
6462
// CHECK-NEXT: store <9 x float> [[M_T]], ptr [[M_T_ADDR]], align 4
6563
matrix_t<float, 3, 3> m_t = __builtin_matrix_transpose(get_matrix() + 2.0);
6664
}
6765

66+
// CHECK-LABEL: define{{.*}} void @_Z20test_transpose_const
6867
void test_transpose_const(const matrix_t<float, 3, 3> m) {
69-
// CHECK-LABEL: define{{.*}} void @_Z20test_transpose_constu11matrix_typeILj3ELj3EfE(
7068
// CHECK: [[MATRIX:%.*]] = load <9 x float>, ptr {{.*}}, align 4
7169
// CHECK-NEXT: [[M_T:%.*]] = call <9 x float> @llvm.matrix.transpose.v9f32(<9 x float> [[MATRIX]], i32 3, i32 3)
7270
// CHECK-NEXT: store <9 x float> [[M_T]], ptr %m_t, align 4

0 commit comments

Comments
 (0)