149331ab0SShilei Tian // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 26e58e99aSSirraide // RUN: %clang_cc1 -fenable-matrix %s -emit-llvm -triple x86_64-unknown-linux -disable-llvm-passes -o - -std=c++11 | FileCheck %s 36e58e99aSSirraide 46e58e99aSSirraide using i8x3 = _BitInt(8) __attribute__((ext_vector_type(3))); 56e58e99aSSirraide using i8x3x3 = _BitInt(8) __attribute__((matrix_type(3, 3))); 66e58e99aSSirraide using i32x3 = _BitInt(32) __attribute__((ext_vector_type(3))); 76e58e99aSSirraide using i32x3x3 = _BitInt(32) __attribute__((matrix_type(3, 3))); 86e58e99aSSirraide using i512x3 = _BitInt(512) __attribute__((ext_vector_type(3))); 96e58e99aSSirraide using i512x3x3 = _BitInt(512) __attribute__((matrix_type(3, 3))); 106e58e99aSSirraide 1149331ab0SShilei Tian // CHECK-LABEL: define dso_local i32 @_Z2v1Dv3_DB8_( 1249331ab0SShilei Tian // CHECK-SAME: i32 [[A_COERCE:%.*]]) #[[ATTR0:[0-9]+]] { 1349331ab0SShilei Tian // CHECK-NEXT: [[ENTRY:.*:]] 1449331ab0SShilei Tian // CHECK-NEXT: [[RETVAL:%.*]] = alloca <3 x i8>, align 4 1549331ab0SShilei Tian // CHECK-NEXT: [[A:%.*]] = alloca <3 x i8>, align 4 1649331ab0SShilei Tian // CHECK-NEXT: [[A_ADDR:%.*]] = alloca <3 x i8>, align 4 1749331ab0SShilei Tian // CHECK-NEXT: store i32 [[A_COERCE]], ptr [[A]], align 4 18*03744d2aSShilei Tian // CHECK-NEXT: [[LOADVECN:%.*]] = load <4 x i8>, ptr [[A]], align 4 19*03744d2aSShilei Tian // CHECK-NEXT: [[A1:%.*]] = shufflevector <4 x i8> [[LOADVECN]], <4 x i8> poison, <3 x i32> <i32 0, i32 1, i32 2> 2049331ab0SShilei Tian // CHECK-NEXT: [[EXTRACTVEC:%.*]] = shufflevector <3 x i8> [[A1]], <3 x i8> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison> 2149331ab0SShilei Tian // CHECK-NEXT: store <4 x i8> [[EXTRACTVEC]], ptr [[A_ADDR]], align 4 22*03744d2aSShilei Tian // CHECK-NEXT: [[LOADVECN2:%.*]] = load <4 x i8>, ptr [[A_ADDR]], align 4 23*03744d2aSShilei Tian // CHECK-NEXT: [[EXTRACTVEC3:%.*]] = shufflevector <4 x i8> [[LOADVECN2]], <4 x i8> poison, <3 x i32> <i32 0, i32 1, i32 2> 24*03744d2aSShilei Tian // CHECK-NEXT: [[LOADVECN4:%.*]] = load <4 x i8>, ptr [[A_ADDR]], align 4 25*03744d2aSShilei Tian // CHECK-NEXT: [[EXTRACTVEC5:%.*]] = shufflevector <4 x i8> [[LOADVECN4]], <4 x i8> poison, <3 x i32> <i32 0, i32 1, i32 2> 2649331ab0SShilei Tian // CHECK-NEXT: [[ADD:%.*]] = add <3 x i8> [[EXTRACTVEC3]], [[EXTRACTVEC5]] 2749331ab0SShilei Tian // CHECK-NEXT: store <3 x i8> [[ADD]], ptr [[RETVAL]], align 4 2849331ab0SShilei Tian // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[RETVAL]], align 4 2949331ab0SShilei Tian // CHECK-NEXT: ret i32 [[TMP0]] 3049331ab0SShilei Tian // 316e58e99aSSirraide i8x3 v1(i8x3 a) { 326e58e99aSSirraide return a + a; 336e58e99aSSirraide } 346e58e99aSSirraide 3549331ab0SShilei Tian // CHECK-LABEL: define dso_local noundef <3 x i32> @_Z2v2Dv3_DB32_( 3649331ab0SShilei Tian // CHECK-SAME: <3 x i32> noundef [[A:%.*]]) #[[ATTR1:[0-9]+]] { 3749331ab0SShilei Tian // CHECK-NEXT: [[ENTRY:.*:]] 3849331ab0SShilei Tian // CHECK-NEXT: [[A_ADDR:%.*]] = alloca <3 x i32>, align 16 3949331ab0SShilei Tian // CHECK-NEXT: [[EXTRACTVEC:%.*]] = shufflevector <3 x i32> [[A]], <3 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison> 4049331ab0SShilei Tian // CHECK-NEXT: store <4 x i32> [[EXTRACTVEC]], ptr [[A_ADDR]], align 16 41*03744d2aSShilei Tian // CHECK-NEXT: [[LOADVECN:%.*]] = load <4 x i32>, ptr [[A_ADDR]], align 16 42*03744d2aSShilei Tian // CHECK-NEXT: [[EXTRACTVEC1:%.*]] = shufflevector <4 x i32> [[LOADVECN]], <4 x i32> poison, <3 x i32> <i32 0, i32 1, i32 2> 43*03744d2aSShilei Tian // CHECK-NEXT: [[LOADVECN2:%.*]] = load <4 x i32>, ptr [[A_ADDR]], align 16 44*03744d2aSShilei Tian // CHECK-NEXT: [[EXTRACTVEC3:%.*]] = shufflevector <4 x i32> [[LOADVECN2]], <4 x i32> poison, <3 x i32> <i32 0, i32 1, i32 2> 4549331ab0SShilei Tian // CHECK-NEXT: [[ADD:%.*]] = add <3 x i32> [[EXTRACTVEC1]], [[EXTRACTVEC3]] 4649331ab0SShilei Tian // CHECK-NEXT: ret <3 x i32> [[ADD]] 4749331ab0SShilei Tian // 486e58e99aSSirraide i32x3 v2(i32x3 a) { 496e58e99aSSirraide return a + a; 506e58e99aSSirraide } 516e58e99aSSirraide 5249331ab0SShilei Tian // CHECK-LABEL: define dso_local noundef <3 x i512> @_Z2v3Dv3_DB512_( 5349331ab0SShilei Tian // CHECK-SAME: ptr noundef byval(<3 x i512>) align 256 [[TMP0:%.*]]) #[[ATTR2:[0-9]+]] { 5449331ab0SShilei Tian // CHECK-NEXT: [[ENTRY:.*:]] 5549331ab0SShilei Tian // CHECK-NEXT: [[A_ADDR:%.*]] = alloca <3 x i512>, align 256 56*03744d2aSShilei Tian // CHECK-NEXT: [[LOADVECN:%.*]] = load <4 x i512>, ptr [[TMP0]], align 256 57*03744d2aSShilei Tian // CHECK-NEXT: [[A:%.*]] = shufflevector <4 x i512> [[LOADVECN]], <4 x i512> poison, <3 x i32> <i32 0, i32 1, i32 2> 5849331ab0SShilei Tian // CHECK-NEXT: [[EXTRACTVEC:%.*]] = shufflevector <3 x i512> [[A]], <3 x i512> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison> 5949331ab0SShilei Tian // CHECK-NEXT: store <4 x i512> [[EXTRACTVEC]], ptr [[A_ADDR]], align 256 60*03744d2aSShilei Tian // CHECK-NEXT: [[LOADVECN1:%.*]] = load <4 x i512>, ptr [[A_ADDR]], align 256 61*03744d2aSShilei Tian // CHECK-NEXT: [[EXTRACTVEC2:%.*]] = shufflevector <4 x i512> [[LOADVECN1]], <4 x i512> poison, <3 x i32> <i32 0, i32 1, i32 2> 62*03744d2aSShilei Tian // CHECK-NEXT: [[LOADVECN3:%.*]] = load <4 x i512>, ptr [[A_ADDR]], align 256 63*03744d2aSShilei Tian // CHECK-NEXT: [[EXTRACTVEC4:%.*]] = shufflevector <4 x i512> [[LOADVECN3]], <4 x i512> poison, <3 x i32> <i32 0, i32 1, i32 2> 6449331ab0SShilei Tian // CHECK-NEXT: [[ADD:%.*]] = add <3 x i512> [[EXTRACTVEC2]], [[EXTRACTVEC4]] 6549331ab0SShilei Tian // CHECK-NEXT: ret <3 x i512> [[ADD]] 6649331ab0SShilei Tian // 676e58e99aSSirraide i512x3 v3(i512x3 a) { 686e58e99aSSirraide return a + a; 696e58e99aSSirraide } 706e58e99aSSirraide 7149331ab0SShilei Tian // CHECK-LABEL: define dso_local noundef <9 x i8> @_Z2m1u11matrix_typeILm3ELm3EDB8_E( 7249331ab0SShilei Tian // CHECK-SAME: <9 x i8> noundef [[A:%.*]]) #[[ATTR3:[0-9]+]] { 7349331ab0SShilei Tian // CHECK-NEXT: [[ENTRY:.*:]] 7449331ab0SShilei Tian // CHECK-NEXT: [[A_ADDR:%.*]] = alloca [9 x i8], align 1 7549331ab0SShilei Tian // CHECK-NEXT: store <9 x i8> [[A]], ptr [[A_ADDR]], align 1 7649331ab0SShilei Tian // CHECK-NEXT: [[TMP0:%.*]] = load <9 x i8>, ptr [[A_ADDR]], align 1 7749331ab0SShilei Tian // CHECK-NEXT: [[TMP1:%.*]] = load <9 x i8>, ptr [[A_ADDR]], align 1 7849331ab0SShilei Tian // CHECK-NEXT: [[TMP2:%.*]] = add <9 x i8> [[TMP0]], [[TMP1]] 7949331ab0SShilei Tian // CHECK-NEXT: ret <9 x i8> [[TMP2]] 8049331ab0SShilei Tian // 816e58e99aSSirraide i8x3x3 m1(i8x3x3 a) { 826e58e99aSSirraide return a + a; 836e58e99aSSirraide } 846e58e99aSSirraide 8549331ab0SShilei Tian // CHECK-LABEL: define dso_local noundef <9 x i32> @_Z2m2u11matrix_typeILm3ELm3EDB32_E( 8649331ab0SShilei Tian // CHECK-SAME: <9 x i32> noundef [[A:%.*]]) #[[ATTR4:[0-9]+]] { 8749331ab0SShilei Tian // CHECK-NEXT: [[ENTRY:.*:]] 8849331ab0SShilei Tian // CHECK-NEXT: [[A_ADDR:%.*]] = alloca [9 x i32], align 4 8949331ab0SShilei Tian // CHECK-NEXT: store <9 x i32> [[A]], ptr [[A_ADDR]], align 4 9049331ab0SShilei Tian // CHECK-NEXT: [[TMP0:%.*]] = load <9 x i32>, ptr [[A_ADDR]], align 4 9149331ab0SShilei Tian // CHECK-NEXT: [[TMP1:%.*]] = load <9 x i32>, ptr [[A_ADDR]], align 4 9249331ab0SShilei Tian // CHECK-NEXT: [[TMP2:%.*]] = add <9 x i32> [[TMP0]], [[TMP1]] 9349331ab0SShilei Tian // CHECK-NEXT: ret <9 x i32> [[TMP2]] 9449331ab0SShilei Tian // 956e58e99aSSirraide i32x3x3 m2(i32x3x3 a) { 966e58e99aSSirraide return a + a; 976e58e99aSSirraide } 986e58e99aSSirraide 9949331ab0SShilei Tian // CHECK-LABEL: define dso_local noundef <9 x i512> @_Z2m3u11matrix_typeILm3ELm3EDB512_E( 10049331ab0SShilei Tian // CHECK-SAME: <9 x i512> noundef [[A:%.*]]) #[[ATTR5:[0-9]+]] { 10149331ab0SShilei Tian // CHECK-NEXT: [[ENTRY:.*:]] 10249331ab0SShilei Tian // CHECK-NEXT: [[A_ADDR:%.*]] = alloca [9 x i512], align 8 10349331ab0SShilei Tian // CHECK-NEXT: store <9 x i512> [[A]], ptr [[A_ADDR]], align 8 10449331ab0SShilei Tian // CHECK-NEXT: [[TMP0:%.*]] = load <9 x i512>, ptr [[A_ADDR]], align 8 10549331ab0SShilei Tian // CHECK-NEXT: [[TMP1:%.*]] = load <9 x i512>, ptr [[A_ADDR]], align 8 10649331ab0SShilei Tian // CHECK-NEXT: [[TMP2:%.*]] = add <9 x i512> [[TMP0]], [[TMP1]] 10749331ab0SShilei Tian // CHECK-NEXT: ret <9 x i512> [[TMP2]] 10849331ab0SShilei Tian // 1096e58e99aSSirraide i512x3x3 m3(i512x3x3 a) { 1106e58e99aSSirraide return a + a; 1116e58e99aSSirraide } 112