| // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py |
| // RUN: %clang_cc1 -O3 -triple powerpc64le-unknown-unknown -target-cpu pwr10 \ |
| // RUN: -emit-llvm %s -o - | FileCheck %s |
| // RUN: %clang_cc1 -O3 -triple powerpc64-unknown-unknown -target-cpu pwr10 \ |
| // RUN: -emit-llvm %s -o - | FileCheck %s |
| |
| // CHECK-LABEL: define {{[^@]+}}@test1( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.assemble.acc(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]], <16 x i8> [[VC]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2:![0-9]+]] |
| // CHECK-NEXT: ret void |
| // |
| void test1(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __vector_quad res; |
| __builtin_mma_assemble_acc(&res, vc, vc, vc, vc); |
| *((__vector_quad *)resp) = res; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test2( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.ppc.mma.disassemble.acc(<512 x i1> [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP1]], 0 |
| // CHECK-NEXT: store <16 x i8> [[TMP2]], ptr [[RESP:%.*]], align 16 |
| // CHECK-NEXT: [[TMP3:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP1]], 1 |
| // CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds <16 x i8>, ptr [[RESP]], i64 1 |
| // CHECK-NEXT: store <16 x i8> [[TMP3]], ptr [[TMP4]], align 16 |
| // CHECK-NEXT: [[TMP5:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP1]], 2 |
| // CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds <16 x i8>, ptr [[RESP]], i64 2 |
| // CHECK-NEXT: store <16 x i8> [[TMP5]], ptr [[TMP6]], align 16 |
| // CHECK-NEXT: [[TMP7:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP1]], 3 |
| // CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds <16 x i8>, ptr [[RESP]], i64 3 |
| // CHECK-NEXT: store <16 x i8> [[TMP7]], ptr [[TMP8]], align 16 |
| // CHECK-NEXT: ret void |
| // |
| void test2(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __builtin_mma_disassemble_acc(resp, (__vector_quad*)vqp); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test3( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.assemble.pair(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <256 x i1> [[TMP0]], ptr [[RESP:%.*]], align 32, !tbaa [[TBAA6:![0-9]+]] |
| // CHECK-NEXT: ret void |
| // |
| void test3(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __vector_pair res; |
| __builtin_vsx_assemble_pair(&res, vc, vc); |
| *((__vector_pair *)resp) = res; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test4( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call { <16 x i8>, <16 x i8> } @llvm.ppc.vsx.disassemble.pair(<256 x i1> [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP1]], 0 |
| // CHECK-NEXT: store <16 x i8> [[TMP2]], ptr [[RESP:%.*]], align 16 |
| // CHECK-NEXT: [[TMP3:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP1]], 1 |
| // CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds <16 x i8>, ptr [[RESP]], i64 1 |
| // CHECK-NEXT: store <16 x i8> [[TMP3]], ptr [[TMP4]], align 16 |
| // CHECK-NEXT: ret void |
| // |
| void test4(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __builtin_vsx_disassemble_pair(resp, (__vector_pair*)vpp); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test5( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xxmtacc(<512 x i1> [[TMP0]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test5(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xxmtacc(&vq); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test6( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xxmfacc(<512 x i1> [[TMP0]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test6(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xxmfacc(&vq); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test7( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xxsetaccz() |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test7(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xxsetaccz(&vq); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test8( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi4ger8(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test8(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvi4ger8(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test9( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi8ger4(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test9(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvi8ger4(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test10( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi16ger2(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test10(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvi16ger2(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test11( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi16ger2s(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test11(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvi16ger2s(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test12( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf16ger2(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test12(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf16ger2(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test13( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf32ger(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test13(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf32ger(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test14( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32, !tbaa [[TBAA6]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64ger(<256 x i1> [[TMP0]], <16 x i8> [[VC:%.*]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test14(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf64ger(&vq, vp, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test15( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvi4ger8(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test15(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvi4ger8(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test16( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvi8ger4(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test16(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvi8ger4(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test17( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvi16ger2(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test17(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvi16ger2(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test18( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvi16ger2s(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test18(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvi16ger2s(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test19( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf16ger2(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test19(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf16ger2(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test20( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf32ger(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test20(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf32ger(&vq, vc, vc, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test21( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32, !tbaa [[TBAA6]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf64ger(<256 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test21(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf64ger(&vq, vp, vc, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test22( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi4ger8pp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test22(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvi4ger8pp(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test23( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi8ger4pp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test23(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvi8ger4pp(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test24( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi8ger4spp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test24(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvi8ger4spp(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test25( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi16ger2pp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test25(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvi16ger2pp(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test26( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi16ger2spp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test26(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvi16ger2spp(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test27( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvi4ger8pp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test27(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvi4ger8pp(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test28( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvi8ger4pp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test28(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvi8ger4pp(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test29( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvi8ger4spp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test29(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvi8ger4spp(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test30( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvi16ger2pp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test30(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvi16ger2pp(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test31( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvi16ger2spp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test31(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvi16ger2spp(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test32( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf16ger2pp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test32(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf16ger2pp(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test33( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf16ger2pn(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test33(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf16ger2pn(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test34( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf16ger2np(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test34(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf16ger2np(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test35( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf16ger2nn(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test35(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf16ger2nn(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test36( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf16ger2pp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test36(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf16ger2pp(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test37( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf16ger2pn(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test37(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf16ger2pn(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test38( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf16ger2np(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test38(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf16ger2np(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test39( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf16ger2nn(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test39(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf16ger2nn(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test40( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf32gerpp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test40(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf32gerpp(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test41( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf32gerpn(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test41(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf32gerpn(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test42( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf32gernp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test42(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf32gernp(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test43( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf32gernn(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test43(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf32gernn(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test44( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf32gerpp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test44(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf32gerpp(&vq, vc, vc, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test45( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf32gerpn(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test45(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf32gerpn(&vq, vc, vc, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test46( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf32gernp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test46(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf32gernp(&vq, vc, vc, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test47( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf32gernn(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test47(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf32gernn(&vq, vc, vc, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test48( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32, !tbaa [[TBAA6]] |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gerpp(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC:%.*]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test48(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf64gerpp(&vq, vp, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test49( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32, !tbaa [[TBAA6]] |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gerpn(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC:%.*]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test49(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf64gerpn(&vq, vp, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test50( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32, !tbaa [[TBAA6]] |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gernp(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC:%.*]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test50(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf64gernp(&vq, vp, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test51( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32, !tbaa [[TBAA6]] |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gernn(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC:%.*]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test51(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvf64gernn(&vq, vp, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test52( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32, !tbaa [[TBAA6]] |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf64gerpp(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC:%.*]], i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test52(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf64gerpp(&vq, vp, vc, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test53( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32, !tbaa [[TBAA6]] |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf64gerpn(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC:%.*]], i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test53(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf64gerpn(&vq, vp, vc, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test54( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32, !tbaa [[TBAA6]] |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf64gernp(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC:%.*]], i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test54(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf64gernp(&vq, vp, vc, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test55( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32, !tbaa [[TBAA6]] |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf64gernn(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC:%.*]], i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test55(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvf64gernn(&vq, vp, vc, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test56( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvbf16ger2(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test56(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvbf16ger2(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test57( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvbf16ger2(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test57(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvbf16ger2(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test58( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvbf16ger2pp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test58(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvbf16ger2pp(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test59( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvbf16ger2pn(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test59(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvbf16ger2pn(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test60( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvbf16ger2np(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test60(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvbf16ger2np(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test61( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvbf16ger2nn(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test61(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_xvbf16ger2nn(&vq, vc, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test62( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvbf16ger2pp(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test62(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvbf16ger2pp(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test63( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvbf16ger2pn(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test63(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvbf16ger2pn(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test64( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvbf16ger2np(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test64(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvbf16ger2np(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test65( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvbf16ger2nn(<512 x i1> [[TMP0]], <16 x i8> [[VC:%.*]], <16 x i8> [[VC]], i32 0, i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test65(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __builtin_mma_pmxvbf16ger2nn(&vq, vc, vc, 0, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test66( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[VPP:%.*]]) |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP0]], ptr [[VP2:%.*]]) |
| // CHECK-NEXT: ret void |
| // |
| void test66(const __vector_pair *vpp, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_vsx_lxvp(0L, vpp); |
| __builtin_vsx_stxvp(vp, 0L, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test67( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 [[OFFSET:%.*]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2:%.*]], i64 [[OFFSET]] |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]]) |
| // CHECK-NEXT: ret void |
| // |
| void test67(const __vector_pair *vpp, signed long offset, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_vsx_lxvp(offset, vpp); |
| __builtin_vsx_stxvp(vp, offset, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test68( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 18 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2:%.*]], i64 18 |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]]) |
| // CHECK-NEXT: ret void |
| // |
| void test68(const __vector_pair *vpp, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_vsx_lxvp(18L, vpp); |
| __builtin_vsx_stxvp(vp, 18L, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test69( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 1 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2:%.*]], i64 1 |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]]) |
| // CHECK-NEXT: ret void |
| // |
| void test69(const __vector_pair *vpp, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_vsx_lxvp(1L, vpp); |
| __builtin_vsx_stxvp(vp, 1L, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test70( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 42 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2:%.*]], i64 42 |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]]) |
| // CHECK-NEXT: ret void |
| // |
| void test70(const __vector_pair *vpp, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_vsx_lxvp(42L, vpp); |
| __builtin_vsx_stxvp(vp, 42L, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test71( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 32768 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2:%.*]], i64 32768 |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]]) |
| // CHECK-NEXT: ret void |
| // |
| void test71(const __vector_pair *vpp, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_vsx_lxvp(32768L, vpp); |
| __builtin_vsx_stxvp(vp, 32768L, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test72( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 32799 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2:%.*]], i64 32799 |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]]) |
| // CHECK-NEXT: ret void |
| // |
| void test72(const __vector_pair *vpp, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_vsx_lxvp(32799L, vpp); |
| __builtin_vsx_stxvp(vp, 32799L, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test73( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 8 |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP1]]) |
| // CHECK-NEXT: [[TMP3:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf64gernn(<512 x i1> [[TMP0]], <256 x i1> [[TMP2]], <16 x i8> [[VC:%.*]], i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP3]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test73(unsigned char *vqp, const __vector_pair *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = __builtin_vsx_lxvp(8L, vpp); |
| __builtin_mma_pmxvf64gernn(&vq, vp, vc, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test74( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[VPP:%.*]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gernp(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC:%.*]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test74(unsigned char *vqp, const __vector_pair *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = __builtin_vsx_lxvp(0L, vpp); |
| __builtin_mma_xvf64gernp(&vq, vp, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test75( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 [[OFFS:%.*]] |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP1]]) |
| // CHECK-NEXT: [[TMP3:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gernp(<512 x i1> [[TMP0]], <256 x i1> [[TMP2]], <16 x i8> [[VC:%.*]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP3]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test75(unsigned char *vqp, signed long offs, const __vector_pair *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = __builtin_vsx_lxvp(offs, vpp); |
| __builtin_mma_xvf64gernp(&vq, vp, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test76( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.assemble.pair(<16 x i8> [[VC:%.*]], <16 x i8> [[VC]]) |
| // CHECK-NEXT: store <256 x i1> [[TMP0]], ptr [[RESP:%.*]], align 32, !tbaa [[TBAA6]] |
| // CHECK-NEXT: ret void |
| // |
| void test76(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = *((__vector_pair *)vpp); |
| __vector_pair res; |
| __builtin_mma_assemble_pair(&res, vc, vc); |
| *((__vector_pair *)resp) = res; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test77( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <256 x i1>, ptr [[VPP:%.*]], align 32 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call { <16 x i8>, <16 x i8> } @llvm.ppc.vsx.disassemble.pair(<256 x i1> [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP1]], 0 |
| // CHECK-NEXT: store <16 x i8> [[TMP2]], ptr [[RESP:%.*]], align 16 |
| // CHECK-NEXT: [[TMP3:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP1]], 1 |
| // CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds <16 x i8>, ptr [[RESP]], i64 1 |
| // CHECK-NEXT: store <16 x i8> [[TMP3]], ptr [[TMP4]], align 16 |
| // CHECK-NEXT: ret void |
| // |
| void test77(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) { |
| __builtin_mma_disassemble_pair(resp, (__vector_pair*)vpp); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test78( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[VPP:%.*]]) |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP0]], ptr [[VP2:%.*]]) |
| // CHECK-NEXT: ret void |
| // |
| void test78(const __vector_pair *vpp, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_mma_lxvp(0L, vpp); |
| __builtin_mma_stxvp(vp, 0L, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test79( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 [[OFFSET:%.*]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2:%.*]], i64 [[OFFSET]] |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]]) |
| // CHECK-NEXT: ret void |
| // |
| void test79(const __vector_pair *vpp, signed long offset, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_mma_lxvp(offset, vpp); |
| __builtin_mma_stxvp(vp, offset, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test80( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 18 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2:%.*]], i64 18 |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]]) |
| // CHECK-NEXT: ret void |
| // |
| void test80(const __vector_pair *vpp, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_mma_lxvp(18L, vpp); |
| __builtin_mma_stxvp(vp, 18L, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test81( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 1 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2:%.*]], i64 1 |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]]) |
| // CHECK-NEXT: ret void |
| // |
| void test81(const __vector_pair *vpp, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_mma_lxvp(1L, vpp); |
| __builtin_mma_stxvp(vp, 1L, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test82( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 42 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2:%.*]], i64 42 |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]]) |
| // CHECK-NEXT: ret void |
| // |
| void test82(const __vector_pair *vpp, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_mma_lxvp(42L, vpp); |
| __builtin_mma_stxvp(vp, 42L, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test83( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 32768 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2:%.*]], i64 32768 |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]]) |
| // CHECK-NEXT: ret void |
| // |
| void test83(const __vector_pair *vpp, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_mma_lxvp(32768L, vpp); |
| __builtin_mma_stxvp(vp, 32768L, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test84( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 32799 |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2:%.*]], i64 32799 |
| // CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]]) |
| // CHECK-NEXT: ret void |
| // |
| void test84(const __vector_pair *vpp, __vector_pair *vp2) { |
| __vector_pair vp = __builtin_mma_lxvp(32799L, vpp); |
| __builtin_mma_stxvp(vp, 32799L, vp2); |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test85( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 8 |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP1]]) |
| // CHECK-NEXT: [[TMP3:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf64gernn(<512 x i1> [[TMP0]], <256 x i1> [[TMP2]], <16 x i8> [[VC:%.*]], i32 0, i32 0) |
| // CHECK-NEXT: store <512 x i1> [[TMP3]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test85(unsigned char *vqp, const __vector_pair *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = __builtin_mma_lxvp(8L, vpp); |
| __builtin_mma_pmxvf64gernn(&vq, vp, vc, 0, 0); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test86( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[VPP:%.*]]) |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gernp(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC:%.*]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test86(unsigned char *vqp, const __vector_pair *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = __builtin_mma_lxvp(0L, vpp); |
| __builtin_mma_xvf64gernp(&vq, vp, vc); |
| *((__vector_quad *)resp) = vq; |
| } |
| |
| // CHECK-LABEL: define {{[^@]+}}@test87( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[VPP:%.*]], i64 [[OFFS:%.*]] |
| // CHECK-NEXT: [[TMP2:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP1]]) |
| // CHECK-NEXT: [[TMP3:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gernp(<512 x i1> [[TMP0]], <256 x i1> [[TMP2]], <16 x i8> [[VC:%.*]]) |
| // CHECK-NEXT: store <512 x i1> [[TMP3]], ptr [[RESP:%.*]], align 64, !tbaa [[TBAA2]] |
| // CHECK-NEXT: ret void |
| // |
| void test87(unsigned char *vqp, signed long offs, const __vector_pair *vpp, vector unsigned char vc, unsigned char *resp) { |
| __vector_quad vq = *((__vector_quad *)vqp); |
| __vector_pair vp = __builtin_mma_lxvp(offs, vpp); |
| __builtin_mma_xvf64gernp(&vq, vp, vc); |
| *((__vector_quad *)resp) = vq; |
| } |