1313 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 62// RUN: %clang_cc1 -O3 -triple powerpc64le-unknown-unknown -target-cpu pwr10 \3// RUN: -emit-llvm %s -o - | FileCheck %s4// RUN: %clang_cc1 -O3 -triple powerpc64-unknown-unknown -target-cpu pwr10 \5// RUN: -emit-llvm %s -o - | FileCheck %s6 7// CHECK-LABEL: define dso_local void @test1(8// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {9// CHECK-NEXT: [[ENTRY:.*:]]10// 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]])11// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6:![0-9]+]]12// CHECK-NEXT: ret void13//14void test1(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {15 __vector_quad vq = *((__vector_quad *)vqp);16 __vector_pair vp = *((__vector_pair *)vpp);17 __vector_quad res;18 __builtin_mma_assemble_acc(&res, vc, vc, vc, vc);19 *((__vector_quad *)resp) = res;20}21 22// CHECK-LABEL: define dso_local void @test2(23// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] {24// CHECK-NEXT: [[ENTRY:.*:]]25// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 6426// 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]])27// CHECK-NEXT: [[TMP2:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP1]], 028// CHECK-NEXT: store <16 x i8> [[TMP2]], ptr [[RESP]], align 1629// CHECK-NEXT: [[TMP3:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP1]], 130// CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw i8, ptr [[RESP]], i64 1631// CHECK-NEXT: store <16 x i8> [[TMP3]], ptr [[TMP4]], align 1632// CHECK-NEXT: [[TMP5:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP1]], 233// CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw i8, ptr [[RESP]], i64 3234// CHECK-NEXT: store <16 x i8> [[TMP5]], ptr [[TMP6]], align 1635// CHECK-NEXT: [[TMP7:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP1]], 336// CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw i8, ptr [[RESP]], i64 4837// CHECK-NEXT: store <16 x i8> [[TMP7]], ptr [[TMP8]], align 1638// CHECK-NEXT: ret void39//40void test2(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {41 __builtin_mma_disassemble_acc(resp, (__vector_quad*)vqp);42}43 44// CHECK-LABEL: define dso_local void @test3(45// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 32)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {46// CHECK-NEXT: [[ENTRY:.*:]]47// CHECK-NEXT: [[TMP0:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.assemble.pair(<16 x i8> [[VC]], <16 x i8> [[VC]])48// CHECK-NEXT: store <256 x i1> [[TMP0]], ptr [[RESP]], align 32, !tbaa [[__VECTOR_PAIR_TBAA8:![0-9]+]]49// CHECK-NEXT: ret void50//51void test3(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {52 __vector_quad vq = *((__vector_quad *)vqp);53 __vector_pair vp = *((__vector_pair *)vpp);54 __vector_pair res;55 __builtin_vsx_assemble_pair(&res, vc, vc);56 *((__vector_pair *)resp) = res;57}58 59// CHECK-LABEL: define dso_local void @test4(60// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readonly captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 32)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {61// CHECK-NEXT: [[ENTRY:.*:]]62// CHECK-NEXT: [[TMP0:%.*]] = load <256 x i1>, ptr [[VPP]], align 3263// CHECK-NEXT: [[TMP1:%.*]] = tail call { <16 x i8>, <16 x i8> } @llvm.ppc.vsx.disassemble.pair(<256 x i1> [[TMP0]])64// CHECK-NEXT: [[TMP2:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP1]], 065// CHECK-NEXT: store <16 x i8> [[TMP2]], ptr [[RESP]], align 1666// CHECK-NEXT: [[TMP3:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP1]], 167// CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw i8, ptr [[RESP]], i64 1668// CHECK-NEXT: store <16 x i8> [[TMP3]], ptr [[TMP4]], align 1669// CHECK-NEXT: ret void70//71void test4(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {72 __builtin_vsx_disassemble_pair(resp, (__vector_pair*)vpp);73}74 75// CHECK-LABEL: define dso_local void @test5(76// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {77// CHECK-NEXT: [[ENTRY:.*:]]78// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]79// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xxmtacc(<512 x i1> [[TMP0]])80// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]81// CHECK-NEXT: ret void82//83void test5(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {84 __vector_quad vq = *((__vector_quad *)vqp);85 __vector_pair vp = *((__vector_pair *)vpp);86 __builtin_mma_xxmtacc(&vq);87 *((__vector_quad *)resp) = vq;88}89 90// CHECK-LABEL: define dso_local void @test6(91// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {92// CHECK-NEXT: [[ENTRY:.*:]]93// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]94// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xxmfacc(<512 x i1> [[TMP0]])95// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]96// CHECK-NEXT: ret void97//98void test6(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {99 __vector_quad vq = *((__vector_quad *)vqp);100 __vector_pair vp = *((__vector_pair *)vpp);101 __builtin_mma_xxmfacc(&vq);102 *((__vector_quad *)resp) = vq;103}104 105// CHECK-LABEL: define dso_local void @test7(106// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {107// CHECK-NEXT: [[ENTRY:.*:]]108// CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xxsetaccz()109// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]110// CHECK-NEXT: ret void111//112void test7(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {113 __vector_quad vq = *((__vector_quad *)vqp);114 __vector_pair vp = *((__vector_pair *)vpp);115 __builtin_mma_xxsetaccz(&vq);116 *((__vector_quad *)resp) = vq;117}118 119// CHECK-LABEL: define dso_local void @test8(120// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {121// CHECK-NEXT: [[ENTRY:.*:]]122// CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi4ger8(<16 x i8> [[VC]], <16 x i8> [[VC]])123// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]124// CHECK-NEXT: ret void125//126void test8(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {127 __vector_quad vq = *((__vector_quad *)vqp);128 __vector_pair vp = *((__vector_pair *)vpp);129 __builtin_mma_xvi4ger8(&vq, vc, vc);130 *((__vector_quad *)resp) = vq;131}132 133// CHECK-LABEL: define dso_local void @test9(134// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {135// CHECK-NEXT: [[ENTRY:.*:]]136// CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi8ger4(<16 x i8> [[VC]], <16 x i8> [[VC]])137// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]138// CHECK-NEXT: ret void139//140void test9(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {141 __vector_quad vq = *((__vector_quad *)vqp);142 __vector_pair vp = *((__vector_pair *)vpp);143 __builtin_mma_xvi8ger4(&vq, vc, vc);144 *((__vector_quad *)resp) = vq;145}146 147// CHECK-LABEL: define dso_local void @test10(148// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {149// CHECK-NEXT: [[ENTRY:.*:]]150// CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi16ger2(<16 x i8> [[VC]], <16 x i8> [[VC]])151// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]152// CHECK-NEXT: ret void153//154void test10(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {155 __vector_quad vq = *((__vector_quad *)vqp);156 __vector_pair vp = *((__vector_pair *)vpp);157 __builtin_mma_xvi16ger2(&vq, vc, vc);158 *((__vector_quad *)resp) = vq;159}160 161// CHECK-LABEL: define dso_local void @test11(162// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {163// CHECK-NEXT: [[ENTRY:.*:]]164// CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi16ger2s(<16 x i8> [[VC]], <16 x i8> [[VC]])165// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]166// CHECK-NEXT: ret void167//168void test11(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {169 __vector_quad vq = *((__vector_quad *)vqp);170 __vector_pair vp = *((__vector_pair *)vpp);171 __builtin_mma_xvi16ger2s(&vq, vc, vc);172 *((__vector_quad *)resp) = vq;173}174 175// CHECK-LABEL: define dso_local void @test12(176// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {177// CHECK-NEXT: [[ENTRY:.*:]]178// CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf16ger2(<16 x i8> [[VC]], <16 x i8> [[VC]])179// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]180// CHECK-NEXT: ret void181//182void test12(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {183 __vector_quad vq = *((__vector_quad *)vqp);184 __vector_pair vp = *((__vector_pair *)vpp);185 __builtin_mma_xvf16ger2(&vq, vc, vc);186 *((__vector_quad *)resp) = vq;187}188 189// CHECK-LABEL: define dso_local void @test13(190// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {191// CHECK-NEXT: [[ENTRY:.*:]]192// CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf32ger(<16 x i8> [[VC]], <16 x i8> [[VC]])193// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]194// CHECK-NEXT: ret void195//196void test13(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {197 __vector_quad vq = *((__vector_quad *)vqp);198 __vector_pair vp = *((__vector_pair *)vpp);199 __builtin_mma_xvf32ger(&vq, vc, vc);200 *((__vector_quad *)resp) = vq;201}202 203// CHECK-LABEL: define dso_local void @test14(204// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readonly captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {205// CHECK-NEXT: [[ENTRY:.*:]]206// CHECK-NEXT: [[TMP0:%.*]] = load <256 x i1>, ptr [[VPP]], align 32, !tbaa [[__VECTOR_PAIR_TBAA8]]207// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64ger(<256 x i1> [[TMP0]], <16 x i8> [[VC]])208// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]209// CHECK-NEXT: ret void210//211void test14(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {212 __vector_quad vq = *((__vector_quad *)vqp);213 __vector_pair vp = *((__vector_pair *)vpp);214 __builtin_mma_xvf64ger(&vq, vp, vc);215 *((__vector_quad *)resp) = vq;216}217 218// CHECK-LABEL: define dso_local void @test15(219// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {220// CHECK-NEXT: [[ENTRY:.*:]]221// 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)222// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]223// CHECK-NEXT: ret void224//225void test15(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {226 __vector_quad vq = *((__vector_quad *)vqp);227 __vector_pair vp = *((__vector_pair *)vpp);228 __builtin_mma_pmxvi4ger8(&vq, vc, vc, 0, 0, 0);229 *((__vector_quad *)resp) = vq;230}231 232// CHECK-LABEL: define dso_local void @test16(233// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {234// CHECK-NEXT: [[ENTRY:.*:]]235// 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)236// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]237// CHECK-NEXT: ret void238//239void test16(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {240 __vector_quad vq = *((__vector_quad *)vqp);241 __vector_pair vp = *((__vector_pair *)vpp);242 __builtin_mma_pmxvi8ger4(&vq, vc, vc, 0, 0, 0);243 *((__vector_quad *)resp) = vq;244}245 246// CHECK-LABEL: define dso_local void @test17(247// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {248// CHECK-NEXT: [[ENTRY:.*:]]249// 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)250// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]251// CHECK-NEXT: ret void252//253void test17(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {254 __vector_quad vq = *((__vector_quad *)vqp);255 __vector_pair vp = *((__vector_pair *)vpp);256 __builtin_mma_pmxvi16ger2(&vq, vc, vc, 0, 0, 0);257 *((__vector_quad *)resp) = vq;258}259 260// CHECK-LABEL: define dso_local void @test18(261// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {262// CHECK-NEXT: [[ENTRY:.*:]]263// 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)264// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]265// CHECK-NEXT: ret void266//267void test18(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {268 __vector_quad vq = *((__vector_quad *)vqp);269 __vector_pair vp = *((__vector_pair *)vpp);270 __builtin_mma_pmxvi16ger2s(&vq, vc, vc, 0, 0, 0);271 *((__vector_quad *)resp) = vq;272}273 274// CHECK-LABEL: define dso_local void @test19(275// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {276// CHECK-NEXT: [[ENTRY:.*:]]277// 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)278// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]279// CHECK-NEXT: ret void280//281void test19(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {282 __vector_quad vq = *((__vector_quad *)vqp);283 __vector_pair vp = *((__vector_pair *)vpp);284 __builtin_mma_pmxvf16ger2(&vq, vc, vc, 0, 0, 0);285 *((__vector_quad *)resp) = vq;286}287 288// CHECK-LABEL: define dso_local void @test20(289// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {290// CHECK-NEXT: [[ENTRY:.*:]]291// CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf32ger(<16 x i8> [[VC]], <16 x i8> [[VC]], i32 0, i32 0)292// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]293// CHECK-NEXT: ret void294//295void test20(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {296 __vector_quad vq = *((__vector_quad *)vqp);297 __vector_pair vp = *((__vector_pair *)vpp);298 __builtin_mma_pmxvf32ger(&vq, vc, vc, 0, 0);299 *((__vector_quad *)resp) = vq;300}301 302// CHECK-LABEL: define dso_local void @test21(303// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readonly captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {304// CHECK-NEXT: [[ENTRY:.*:]]305// CHECK-NEXT: [[TMP0:%.*]] = load <256 x i1>, ptr [[VPP]], align 32, !tbaa [[__VECTOR_PAIR_TBAA8]]306// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.pmxvf64ger(<256 x i1> [[TMP0]], <16 x i8> [[VC]], i32 0, i32 0)307// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]308// CHECK-NEXT: ret void309//310void test21(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {311 __vector_quad vq = *((__vector_quad *)vqp);312 __vector_pair vp = *((__vector_pair *)vpp);313 __builtin_mma_pmxvf64ger(&vq, vp, vc, 0, 0);314 *((__vector_quad *)resp) = vq;315}316 317// CHECK-LABEL: define dso_local void @test22(318// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {319// CHECK-NEXT: [[ENTRY:.*:]]320// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]321// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi4ger8pp(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])322// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]323// CHECK-NEXT: ret void324//325void test22(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {326 __vector_quad vq = *((__vector_quad *)vqp);327 __vector_pair vp = *((__vector_pair *)vpp);328 __builtin_mma_xvi4ger8pp(&vq, vc, vc);329 *((__vector_quad *)resp) = vq;330}331 332// CHECK-LABEL: define dso_local void @test23(333// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {334// CHECK-NEXT: [[ENTRY:.*:]]335// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]336// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi8ger4pp(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])337// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]338// CHECK-NEXT: ret void339//340void test23(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {341 __vector_quad vq = *((__vector_quad *)vqp);342 __vector_pair vp = *((__vector_pair *)vpp);343 __builtin_mma_xvi8ger4pp(&vq, vc, vc);344 *((__vector_quad *)resp) = vq;345}346 347// CHECK-LABEL: define dso_local void @test24(348// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {349// CHECK-NEXT: [[ENTRY:.*:]]350// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]351// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi8ger4spp(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])352// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]353// CHECK-NEXT: ret void354//355void test24(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {356 __vector_quad vq = *((__vector_quad *)vqp);357 __vector_pair vp = *((__vector_pair *)vpp);358 __builtin_mma_xvi8ger4spp(&vq, vc, vc);359 *((__vector_quad *)resp) = vq;360}361 362// CHECK-LABEL: define dso_local void @test25(363// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {364// CHECK-NEXT: [[ENTRY:.*:]]365// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]366// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi16ger2pp(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])367// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]368// CHECK-NEXT: ret void369//370void test25(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {371 __vector_quad vq = *((__vector_quad *)vqp);372 __vector_pair vp = *((__vector_pair *)vpp);373 __builtin_mma_xvi16ger2pp(&vq, vc, vc);374 *((__vector_quad *)resp) = vq;375}376 377// CHECK-LABEL: define dso_local void @test26(378// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {379// CHECK-NEXT: [[ENTRY:.*:]]380// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]381// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvi16ger2spp(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])382// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]383// CHECK-NEXT: ret void384//385void test26(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {386 __vector_quad vq = *((__vector_quad *)vqp);387 __vector_pair vp = *((__vector_pair *)vpp);388 __builtin_mma_xvi16ger2spp(&vq, vc, vc);389 *((__vector_quad *)resp) = vq;390}391 392// CHECK-LABEL: define dso_local void @test27(393// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {394// CHECK-NEXT: [[ENTRY:.*:]]395// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]396// 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)397// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]398// CHECK-NEXT: ret void399//400void test27(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {401 __vector_quad vq = *((__vector_quad *)vqp);402 __vector_pair vp = *((__vector_pair *)vpp);403 __builtin_mma_pmxvi4ger8pp(&vq, vc, vc, 0, 0, 0);404 *((__vector_quad *)resp) = vq;405}406 407// CHECK-LABEL: define dso_local void @test28(408// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {409// CHECK-NEXT: [[ENTRY:.*:]]410// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]411// 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)412// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]413// CHECK-NEXT: ret void414//415void test28(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {416 __vector_quad vq = *((__vector_quad *)vqp);417 __vector_pair vp = *((__vector_pair *)vpp);418 __builtin_mma_pmxvi8ger4pp(&vq, vc, vc, 0, 0, 0);419 *((__vector_quad *)resp) = vq;420}421 422// CHECK-LABEL: define dso_local void @test29(423// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {424// CHECK-NEXT: [[ENTRY:.*:]]425// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]426// 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)427// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]428// CHECK-NEXT: ret void429//430void test29(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {431 __vector_quad vq = *((__vector_quad *)vqp);432 __vector_pair vp = *((__vector_pair *)vpp);433 __builtin_mma_pmxvi8ger4spp(&vq, vc, vc, 0, 0, 0);434 *((__vector_quad *)resp) = vq;435}436 437// CHECK-LABEL: define dso_local void @test30(438// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {439// CHECK-NEXT: [[ENTRY:.*:]]440// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]441// 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)442// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]443// CHECK-NEXT: ret void444//445void test30(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {446 __vector_quad vq = *((__vector_quad *)vqp);447 __vector_pair vp = *((__vector_pair *)vpp);448 __builtin_mma_pmxvi16ger2pp(&vq, vc, vc, 0, 0, 0);449 *((__vector_quad *)resp) = vq;450}451 452// CHECK-LABEL: define dso_local void @test31(453// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {454// CHECK-NEXT: [[ENTRY:.*:]]455// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]456// 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)457// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]458// CHECK-NEXT: ret void459//460void test31(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {461 __vector_quad vq = *((__vector_quad *)vqp);462 __vector_pair vp = *((__vector_pair *)vpp);463 __builtin_mma_pmxvi16ger2spp(&vq, vc, vc, 0, 0, 0);464 *((__vector_quad *)resp) = vq;465}466 467// CHECK-LABEL: define dso_local void @test32(468// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {469// CHECK-NEXT: [[ENTRY:.*:]]470// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]471// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf16ger2pp(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])472// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]473// CHECK-NEXT: ret void474//475void test32(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {476 __vector_quad vq = *((__vector_quad *)vqp);477 __vector_pair vp = *((__vector_pair *)vpp);478 __builtin_mma_xvf16ger2pp(&vq, vc, vc);479 *((__vector_quad *)resp) = vq;480}481 482// CHECK-LABEL: define dso_local void @test33(483// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {484// CHECK-NEXT: [[ENTRY:.*:]]485// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]486// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf16ger2pn(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])487// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]488// CHECK-NEXT: ret void489//490void test33(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {491 __vector_quad vq = *((__vector_quad *)vqp);492 __vector_pair vp = *((__vector_pair *)vpp);493 __builtin_mma_xvf16ger2pn(&vq, vc, vc);494 *((__vector_quad *)resp) = vq;495}496 497// CHECK-LABEL: define dso_local void @test34(498// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {499// CHECK-NEXT: [[ENTRY:.*:]]500// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]501// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf16ger2np(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])502// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]503// CHECK-NEXT: ret void504//505void test34(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {506 __vector_quad vq = *((__vector_quad *)vqp);507 __vector_pair vp = *((__vector_pair *)vpp);508 __builtin_mma_xvf16ger2np(&vq, vc, vc);509 *((__vector_quad *)resp) = vq;510}511 512// CHECK-LABEL: define dso_local void @test35(513// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {514// CHECK-NEXT: [[ENTRY:.*:]]515// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]516// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf16ger2nn(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])517// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]518// CHECK-NEXT: ret void519//520void test35(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {521 __vector_quad vq = *((__vector_quad *)vqp);522 __vector_pair vp = *((__vector_pair *)vpp);523 __builtin_mma_xvf16ger2nn(&vq, vc, vc);524 *((__vector_quad *)resp) = vq;525}526 527// CHECK-LABEL: define dso_local void @test36(528// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {529// CHECK-NEXT: [[ENTRY:.*:]]530// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]531// 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)532// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]533// CHECK-NEXT: ret void534//535void test36(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {536 __vector_quad vq = *((__vector_quad *)vqp);537 __vector_pair vp = *((__vector_pair *)vpp);538 __builtin_mma_pmxvf16ger2pp(&vq, vc, vc, 0, 0, 0);539 *((__vector_quad *)resp) = vq;540}541 542// CHECK-LABEL: define dso_local void @test37(543// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {544// CHECK-NEXT: [[ENTRY:.*:]]545// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]546// 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)547// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]548// CHECK-NEXT: ret void549//550void test37(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {551 __vector_quad vq = *((__vector_quad *)vqp);552 __vector_pair vp = *((__vector_pair *)vpp);553 __builtin_mma_pmxvf16ger2pn(&vq, vc, vc, 0, 0, 0);554 *((__vector_quad *)resp) = vq;555}556 557// CHECK-LABEL: define dso_local void @test38(558// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {559// CHECK-NEXT: [[ENTRY:.*:]]560// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]561// 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)562// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]563// CHECK-NEXT: ret void564//565void test38(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {566 __vector_quad vq = *((__vector_quad *)vqp);567 __vector_pair vp = *((__vector_pair *)vpp);568 __builtin_mma_pmxvf16ger2np(&vq, vc, vc, 0, 0, 0);569 *((__vector_quad *)resp) = vq;570}571 572// CHECK-LABEL: define dso_local void @test39(573// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {574// CHECK-NEXT: [[ENTRY:.*:]]575// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]576// 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)577// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]578// CHECK-NEXT: ret void579//580void test39(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {581 __vector_quad vq = *((__vector_quad *)vqp);582 __vector_pair vp = *((__vector_pair *)vpp);583 __builtin_mma_pmxvf16ger2nn(&vq, vc, vc, 0, 0, 0);584 *((__vector_quad *)resp) = vq;585}586 587// CHECK-LABEL: define dso_local void @test40(588// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {589// CHECK-NEXT: [[ENTRY:.*:]]590// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]591// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf32gerpp(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])592// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]593// CHECK-NEXT: ret void594//595void test40(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {596 __vector_quad vq = *((__vector_quad *)vqp);597 __vector_pair vp = *((__vector_pair *)vpp);598 __builtin_mma_xvf32gerpp(&vq, vc, vc);599 *((__vector_quad *)resp) = vq;600}601 602// CHECK-LABEL: define dso_local void @test41(603// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {604// CHECK-NEXT: [[ENTRY:.*:]]605// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]606// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf32gerpn(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])607// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]608// CHECK-NEXT: ret void609//610void test41(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {611 __vector_quad vq = *((__vector_quad *)vqp);612 __vector_pair vp = *((__vector_pair *)vpp);613 __builtin_mma_xvf32gerpn(&vq, vc, vc);614 *((__vector_quad *)resp) = vq;615}616 617// CHECK-LABEL: define dso_local void @test42(618// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {619// CHECK-NEXT: [[ENTRY:.*:]]620// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]621// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf32gernp(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])622// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]623// CHECK-NEXT: ret void624//625void test42(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {626 __vector_quad vq = *((__vector_quad *)vqp);627 __vector_pair vp = *((__vector_pair *)vpp);628 __builtin_mma_xvf32gernp(&vq, vc, vc);629 *((__vector_quad *)resp) = vq;630}631 632// CHECK-LABEL: define dso_local void @test43(633// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {634// CHECK-NEXT: [[ENTRY:.*:]]635// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]636// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf32gernn(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])637// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]638// CHECK-NEXT: ret void639//640void test43(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {641 __vector_quad vq = *((__vector_quad *)vqp);642 __vector_pair vp = *((__vector_pair *)vpp);643 __builtin_mma_xvf32gernn(&vq, vc, vc);644 *((__vector_quad *)resp) = vq;645}646 647// CHECK-LABEL: define dso_local void @test44(648// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {649// CHECK-NEXT: [[ENTRY:.*:]]650// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]651// 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)652// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]653// CHECK-NEXT: ret void654//655void test44(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {656 __vector_quad vq = *((__vector_quad *)vqp);657 __vector_pair vp = *((__vector_pair *)vpp);658 __builtin_mma_pmxvf32gerpp(&vq, vc, vc, 0, 0);659 *((__vector_quad *)resp) = vq;660}661 662// CHECK-LABEL: define dso_local void @test45(663// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {664// CHECK-NEXT: [[ENTRY:.*:]]665// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]666// 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)667// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]668// CHECK-NEXT: ret void669//670void test45(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {671 __vector_quad vq = *((__vector_quad *)vqp);672 __vector_pair vp = *((__vector_pair *)vpp);673 __builtin_mma_pmxvf32gerpn(&vq, vc, vc, 0, 0);674 *((__vector_quad *)resp) = vq;675}676 677// CHECK-LABEL: define dso_local void @test46(678// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {679// CHECK-NEXT: [[ENTRY:.*:]]680// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]681// 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)682// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]683// CHECK-NEXT: ret void684//685void test46(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {686 __vector_quad vq = *((__vector_quad *)vqp);687 __vector_pair vp = *((__vector_pair *)vpp);688 __builtin_mma_pmxvf32gernp(&vq, vc, vc, 0, 0);689 *((__vector_quad *)resp) = vq;690}691 692// CHECK-LABEL: define dso_local void @test47(693// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {694// CHECK-NEXT: [[ENTRY:.*:]]695// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]696// 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)697// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]698// CHECK-NEXT: ret void699//700void test47(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {701 __vector_quad vq = *((__vector_quad *)vqp);702 __vector_pair vp = *((__vector_pair *)vpp);703 __builtin_mma_pmxvf32gernn(&vq, vc, vc, 0, 0);704 *((__vector_quad *)resp) = vq;705}706 707// CHECK-LABEL: define dso_local void @test48(708// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readonly captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {709// CHECK-NEXT: [[ENTRY:.*:]]710// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]711// CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP]], align 32, !tbaa [[__VECTOR_PAIR_TBAA8]]712// CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gerpp(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC]])713// CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]714// CHECK-NEXT: ret void715//716void test48(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {717 __vector_quad vq = *((__vector_quad *)vqp);718 __vector_pair vp = *((__vector_pair *)vpp);719 __builtin_mma_xvf64gerpp(&vq, vp, vc);720 *((__vector_quad *)resp) = vq;721}722 723// CHECK-LABEL: define dso_local void @test49(724// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readonly captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {725// CHECK-NEXT: [[ENTRY:.*:]]726// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]727// CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP]], align 32, !tbaa [[__VECTOR_PAIR_TBAA8]]728// CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gerpn(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC]])729// CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]730// CHECK-NEXT: ret void731//732void test49(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {733 __vector_quad vq = *((__vector_quad *)vqp);734 __vector_pair vp = *((__vector_pair *)vpp);735 __builtin_mma_xvf64gerpn(&vq, vp, vc);736 *((__vector_quad *)resp) = vq;737}738 739// CHECK-LABEL: define dso_local void @test50(740// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readonly captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {741// CHECK-NEXT: [[ENTRY:.*:]]742// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]743// CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP]], align 32, !tbaa [[__VECTOR_PAIR_TBAA8]]744// CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gernp(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC]])745// CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]746// CHECK-NEXT: ret void747//748void test50(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {749 __vector_quad vq = *((__vector_quad *)vqp);750 __vector_pair vp = *((__vector_pair *)vpp);751 __builtin_mma_xvf64gernp(&vq, vp, vc);752 *((__vector_quad *)resp) = vq;753}754 755// CHECK-LABEL: define dso_local void @test51(756// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readonly captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {757// CHECK-NEXT: [[ENTRY:.*:]]758// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]759// CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP]], align 32, !tbaa [[__VECTOR_PAIR_TBAA8]]760// CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gernn(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC]])761// CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]762// CHECK-NEXT: ret void763//764void test51(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {765 __vector_quad vq = *((__vector_quad *)vqp);766 __vector_pair vp = *((__vector_pair *)vpp);767 __builtin_mma_xvf64gernn(&vq, vp, vc);768 *((__vector_quad *)resp) = vq;769}770 771// CHECK-LABEL: define dso_local void @test52(772// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readonly captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {773// CHECK-NEXT: [[ENTRY:.*:]]774// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]775// CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP]], align 32, !tbaa [[__VECTOR_PAIR_TBAA8]]776// 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)777// CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]778// CHECK-NEXT: ret void779//780void test52(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {781 __vector_quad vq = *((__vector_quad *)vqp);782 __vector_pair vp = *((__vector_pair *)vpp);783 __builtin_mma_pmxvf64gerpp(&vq, vp, vc, 0, 0);784 *((__vector_quad *)resp) = vq;785}786 787// CHECK-LABEL: define dso_local void @test53(788// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readonly captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {789// CHECK-NEXT: [[ENTRY:.*:]]790// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]791// CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP]], align 32, !tbaa [[__VECTOR_PAIR_TBAA8]]792// 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)793// CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]794// CHECK-NEXT: ret void795//796void test53(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {797 __vector_quad vq = *((__vector_quad *)vqp);798 __vector_pair vp = *((__vector_pair *)vpp);799 __builtin_mma_pmxvf64gerpn(&vq, vp, vc, 0, 0);800 *((__vector_quad *)resp) = vq;801}802 803// CHECK-LABEL: define dso_local void @test54(804// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readonly captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {805// CHECK-NEXT: [[ENTRY:.*:]]806// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]807// CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP]], align 32, !tbaa [[__VECTOR_PAIR_TBAA8]]808// 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)809// CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]810// CHECK-NEXT: ret void811//812void test54(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {813 __vector_quad vq = *((__vector_quad *)vqp);814 __vector_pair vp = *((__vector_pair *)vpp);815 __builtin_mma_pmxvf64gernp(&vq, vp, vc, 0, 0);816 *((__vector_quad *)resp) = vq;817}818 819// CHECK-LABEL: define dso_local void @test55(820// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readonly captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {821// CHECK-NEXT: [[ENTRY:.*:]]822// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]823// CHECK-NEXT: [[TMP1:%.*]] = load <256 x i1>, ptr [[VPP]], align 32, !tbaa [[__VECTOR_PAIR_TBAA8]]824// 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)825// CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]826// CHECK-NEXT: ret void827//828void test55(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {829 __vector_quad vq = *((__vector_quad *)vqp);830 __vector_pair vp = *((__vector_pair *)vpp);831 __builtin_mma_pmxvf64gernn(&vq, vp, vc, 0, 0);832 *((__vector_quad *)resp) = vq;833}834 835// CHECK-LABEL: define dso_local void @test56(836// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {837// CHECK-NEXT: [[ENTRY:.*:]]838// CHECK-NEXT: [[TMP0:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvbf16ger2(<16 x i8> [[VC]], <16 x i8> [[VC]])839// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]840// CHECK-NEXT: ret void841//842void test56(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {843 __vector_quad vq = *((__vector_quad *)vqp);844 __vector_pair vp = *((__vector_pair *)vpp);845 __builtin_mma_xvbf16ger2(&vq, vc, vc);846 *((__vector_quad *)resp) = vq;847}848 849// CHECK-LABEL: define dso_local void @test57(850// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {851// CHECK-NEXT: [[ENTRY:.*:]]852// 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)853// CHECK-NEXT: store <512 x i1> [[TMP0]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]854// CHECK-NEXT: ret void855//856void test57(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {857 __vector_quad vq = *((__vector_quad *)vqp);858 __vector_pair vp = *((__vector_pair *)vpp);859 __builtin_mma_pmxvbf16ger2(&vq, vc, vc, 0, 0, 0);860 *((__vector_quad *)resp) = vq;861}862 863// CHECK-LABEL: define dso_local void @test58(864// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {865// CHECK-NEXT: [[ENTRY:.*:]]866// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]867// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvbf16ger2pp(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])868// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]869// CHECK-NEXT: ret void870//871void test58(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {872 __vector_quad vq = *((__vector_quad *)vqp);873 __vector_pair vp = *((__vector_pair *)vpp);874 __builtin_mma_xvbf16ger2pp(&vq, vc, vc);875 *((__vector_quad *)resp) = vq;876}877 878// CHECK-LABEL: define dso_local void @test59(879// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {880// CHECK-NEXT: [[ENTRY:.*:]]881// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]882// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvbf16ger2pn(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])883// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]884// CHECK-NEXT: ret void885//886void test59(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {887 __vector_quad vq = *((__vector_quad *)vqp);888 __vector_pair vp = *((__vector_pair *)vpp);889 __builtin_mma_xvbf16ger2pn(&vq, vc, vc);890 *((__vector_quad *)resp) = vq;891}892 893// CHECK-LABEL: define dso_local void @test60(894// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {895// CHECK-NEXT: [[ENTRY:.*:]]896// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]897// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvbf16ger2np(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])898// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]899// CHECK-NEXT: ret void900//901void test60(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {902 __vector_quad vq = *((__vector_quad *)vqp);903 __vector_pair vp = *((__vector_pair *)vpp);904 __builtin_mma_xvbf16ger2np(&vq, vc, vc);905 *((__vector_quad *)resp) = vq;906}907 908// CHECK-LABEL: define dso_local void @test61(909// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {910// CHECK-NEXT: [[ENTRY:.*:]]911// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]912// CHECK-NEXT: [[TMP1:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvbf16ger2nn(<512 x i1> [[TMP0]], <16 x i8> [[VC]], <16 x i8> [[VC]])913// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]914// CHECK-NEXT: ret void915//916void test61(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {917 __vector_quad vq = *((__vector_quad *)vqp);918 __vector_pair vp = *((__vector_pair *)vpp);919 __builtin_mma_xvbf16ger2nn(&vq, vc, vc);920 *((__vector_quad *)resp) = vq;921}922 923// CHECK-LABEL: define dso_local void @test62(924// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {925// CHECK-NEXT: [[ENTRY:.*:]]926// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]927// 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)928// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]929// CHECK-NEXT: ret void930//931void test62(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {932 __vector_quad vq = *((__vector_quad *)vqp);933 __vector_pair vp = *((__vector_pair *)vpp);934 __builtin_mma_pmxvbf16ger2pp(&vq, vc, vc, 0, 0, 0);935 *((__vector_quad *)resp) = vq;936}937 938// CHECK-LABEL: define dso_local void @test63(939// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {940// CHECK-NEXT: [[ENTRY:.*:]]941// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]942// 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)943// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]944// CHECK-NEXT: ret void945//946void test63(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {947 __vector_quad vq = *((__vector_quad *)vqp);948 __vector_pair vp = *((__vector_pair *)vpp);949 __builtin_mma_pmxvbf16ger2pn(&vq, vc, vc, 0, 0, 0);950 *((__vector_quad *)resp) = vq;951}952 953// CHECK-LABEL: define dso_local void @test64(954// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {955// CHECK-NEXT: [[ENTRY:.*:]]956// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]957// 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)958// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]959// CHECK-NEXT: ret void960//961void test64(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {962 __vector_quad vq = *((__vector_quad *)vqp);963 __vector_pair vp = *((__vector_pair *)vpp);964 __builtin_mma_pmxvbf16ger2np(&vq, vc, vc, 0, 0, 0);965 *((__vector_quad *)resp) = vq;966}967 968// CHECK-LABEL: define dso_local void @test65(969// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {970// CHECK-NEXT: [[ENTRY:.*:]]971// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]972// 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)973// CHECK-NEXT: store <512 x i1> [[TMP1]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]974// CHECK-NEXT: ret void975//976void test65(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {977 __vector_quad vq = *((__vector_quad *)vqp);978 __vector_pair vp = *((__vector_pair *)vpp);979 __builtin_mma_pmxvbf16ger2nn(&vq, vc, vc, 0, 0, 0);980 *((__vector_quad *)resp) = vq;981}982 983// CHECK-LABEL: define dso_local void @test66(984// CHECK-SAME: ptr noundef [[VPP:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3:[0-9]+]] {985// CHECK-NEXT: [[ENTRY:.*:]]986// CHECK-NEXT: [[TMP0:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[VPP]])987// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP0]], ptr [[VP2]])988// CHECK-NEXT: ret void989//990void test66(const __vector_pair *vpp, __vector_pair *vp2) {991 __vector_pair vp = __builtin_vsx_lxvp(0L, vpp);992 __builtin_vsx_stxvp(vp, 0L, vp2);993}994 995// CHECK-LABEL: define dso_local void @test67(996// CHECK-SAME: ptr noundef [[VPP:%.*]], i64 noundef [[OFFSET:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {997// CHECK-NEXT: [[ENTRY:.*:]]998// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP]], i64 [[OFFSET]]999// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]])1000// CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2]], i64 [[OFFSET]]1001// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]])1002// CHECK-NEXT: ret void1003//1004void test67(const __vector_pair *vpp, signed long offset, __vector_pair *vp2) {1005 __vector_pair vp = __builtin_vsx_lxvp(offset, vpp);1006 __builtin_vsx_stxvp(vp, offset, vp2);1007}1008 1009// CHECK-LABEL: define dso_local void @test68(1010// CHECK-SAME: ptr noundef [[VPP:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {1011// CHECK-NEXT: [[ENTRY:.*:]]1012// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP]], i64 181013// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]])1014// CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2]], i64 181015// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]])1016// CHECK-NEXT: ret void1017//1018void test68(const __vector_pair *vpp, __vector_pair *vp2) {1019 __vector_pair vp = __builtin_vsx_lxvp(18L, vpp);1020 __builtin_vsx_stxvp(vp, 18L, vp2);1021}1022 1023// CHECK-LABEL: define dso_local void @test69(1024// CHECK-SAME: ptr noundef [[VPP:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {1025// CHECK-NEXT: [[ENTRY:.*:]]1026// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP]], i64 11027// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]])1028// CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2]], i64 11029// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]])1030// CHECK-NEXT: ret void1031//1032void test69(const __vector_pair *vpp, __vector_pair *vp2) {1033 __vector_pair vp = __builtin_vsx_lxvp(1L, vpp);1034 __builtin_vsx_stxvp(vp, 1L, vp2);1035}1036 1037// CHECK-LABEL: define dso_local void @test70(1038// CHECK-SAME: ptr noundef [[VPP:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {1039// CHECK-NEXT: [[ENTRY:.*:]]1040// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP]], i64 421041// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]])1042// CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2]], i64 421043// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]])1044// CHECK-NEXT: ret void1045//1046void test70(const __vector_pair *vpp, __vector_pair *vp2) {1047 __vector_pair vp = __builtin_vsx_lxvp(42L, vpp);1048 __builtin_vsx_stxvp(vp, 42L, vp2);1049}1050 1051// CHECK-LABEL: define dso_local void @test71(1052// CHECK-SAME: ptr noundef [[VPP:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {1053// CHECK-NEXT: [[ENTRY:.*:]]1054// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP]], i64 327681055// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]])1056// CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2]], i64 327681057// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]])1058// CHECK-NEXT: ret void1059//1060void test71(const __vector_pair *vpp, __vector_pair *vp2) {1061 __vector_pair vp = __builtin_vsx_lxvp(32768L, vpp);1062 __builtin_vsx_stxvp(vp, 32768L, vp2);1063}1064 1065// CHECK-LABEL: define dso_local void @test72(1066// CHECK-SAME: ptr noundef [[VPP:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {1067// CHECK-NEXT: [[ENTRY:.*:]]1068// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP]], i64 327991069// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]])1070// CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2]], i64 327991071// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]])1072// CHECK-NEXT: ret void1073//1074void test72(const __vector_pair *vpp, __vector_pair *vp2) {1075 __vector_pair vp = __builtin_vsx_lxvp(32799L, vpp);1076 __builtin_vsx_stxvp(vp, 32799L, vp2);1077}1078 1079// CHECK-LABEL: define dso_local void @test73(1080// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {1081// CHECK-NEXT: [[ENTRY:.*:]]1082// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]1083// CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[VPP]], i64 81084// CHECK-NEXT: [[TMP2:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP1]])1085// 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)1086// CHECK-NEXT: store <512 x i1> [[TMP3]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]1087// CHECK-NEXT: ret void1088//1089void test73(unsigned char *vqp, const __vector_pair *vpp, vector unsigned char vc, unsigned char *resp) {1090 __vector_quad vq = *((__vector_quad *)vqp);1091 __vector_pair vp = __builtin_vsx_lxvp(8L, vpp);1092 __builtin_mma_pmxvf64gernn(&vq, vp, vc, 0, 0);1093 *((__vector_quad *)resp) = vq;1094}1095 1096// CHECK-LABEL: define dso_local void @test74(1097// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {1098// CHECK-NEXT: [[ENTRY:.*:]]1099// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]1100// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[VPP]])1101// CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gernp(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC]])1102// CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]1103// CHECK-NEXT: ret void1104//1105void test74(unsigned char *vqp, const __vector_pair *vpp, vector unsigned char vc, unsigned char *resp) {1106 __vector_quad vq = *((__vector_quad *)vqp);1107 __vector_pair vp = __builtin_vsx_lxvp(0L, vpp);1108 __builtin_mma_xvf64gernp(&vq, vp, vc);1109 *((__vector_quad *)resp) = vq;1110}1111 1112// CHECK-LABEL: define dso_local void @test75(1113// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], i64 noundef [[OFFS:%.*]], ptr noundef [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {1114// CHECK-NEXT: [[ENTRY:.*:]]1115// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]1116// CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[VPP]], i64 [[OFFS]]1117// CHECK-NEXT: [[TMP2:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP1]])1118// CHECK-NEXT: [[TMP3:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gernp(<512 x i1> [[TMP0]], <256 x i1> [[TMP2]], <16 x i8> [[VC]])1119// CHECK-NEXT: store <512 x i1> [[TMP3]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]1120// CHECK-NEXT: ret void1121//1122void test75(unsigned char *vqp, signed long offs, const __vector_pair *vpp, vector unsigned char vc, unsigned char *resp) {1123 __vector_quad vq = *((__vector_quad *)vqp);1124 __vector_pair vp = __builtin_vsx_lxvp(offs, vpp);1125 __builtin_mma_xvf64gernp(&vq, vp, vc);1126 *((__vector_quad *)resp) = vq;1127}1128 1129// CHECK-LABEL: define dso_local void @test76(1130// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readnone captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 32)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR0]] {1131// CHECK-NEXT: [[ENTRY:.*:]]1132// CHECK-NEXT: [[TMP0:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.assemble.pair(<16 x i8> [[VC]], <16 x i8> [[VC]])1133// CHECK-NEXT: store <256 x i1> [[TMP0]], ptr [[RESP]], align 32, !tbaa [[__VECTOR_PAIR_TBAA8]]1134// CHECK-NEXT: ret void1135//1136void test76(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {1137 __vector_quad vq = *((__vector_quad *)vqp);1138 __vector_pair vp = *((__vector_pair *)vpp);1139 __vector_pair res;1140 __builtin_mma_assemble_pair(&res, vc, vc);1141 *((__vector_pair *)resp) = res;1142}1143 1144// CHECK-LABEL: define dso_local void @test77(1145// CHECK-SAME: ptr noundef readnone captures(none) [[VQP:%.*]], ptr noundef readonly captures(none) [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 32)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {1146// CHECK-NEXT: [[ENTRY:.*:]]1147// CHECK-NEXT: [[TMP0:%.*]] = load <256 x i1>, ptr [[VPP]], align 321148// CHECK-NEXT: [[TMP1:%.*]] = tail call { <16 x i8>, <16 x i8> } @llvm.ppc.vsx.disassemble.pair(<256 x i1> [[TMP0]])1149// CHECK-NEXT: [[TMP2:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP1]], 01150// CHECK-NEXT: store <16 x i8> [[TMP2]], ptr [[RESP]], align 161151// CHECK-NEXT: [[TMP3:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP1]], 11152// CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw i8, ptr [[RESP]], i64 161153// CHECK-NEXT: store <16 x i8> [[TMP3]], ptr [[TMP4]], align 161154// CHECK-NEXT: ret void1155//1156void test77(unsigned char *vqp, unsigned char *vpp, vector unsigned char vc, unsigned char *resp) {1157 __builtin_mma_disassemble_pair(resp, (__vector_pair*)vpp);1158}1159 1160// CHECK-LABEL: define dso_local void @test78(1161// CHECK-SAME: ptr noundef [[VPP:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {1162// CHECK-NEXT: [[ENTRY:.*:]]1163// CHECK-NEXT: [[TMP0:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[VPP]])1164// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP0]], ptr [[VP2]])1165// CHECK-NEXT: ret void1166//1167void test78(const __vector_pair *vpp, __vector_pair *vp2) {1168 __vector_pair vp = __builtin_mma_lxvp(0L, vpp);1169 __builtin_mma_stxvp(vp, 0L, vp2);1170}1171 1172// CHECK-LABEL: define dso_local void @test79(1173// CHECK-SAME: ptr noundef [[VPP:%.*]], i64 noundef [[OFFSET:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {1174// CHECK-NEXT: [[ENTRY:.*:]]1175// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP]], i64 [[OFFSET]]1176// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]])1177// CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2]], i64 [[OFFSET]]1178// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]])1179// CHECK-NEXT: ret void1180//1181void test79(const __vector_pair *vpp, signed long offset, __vector_pair *vp2) {1182 __vector_pair vp = __builtin_mma_lxvp(offset, vpp);1183 __builtin_mma_stxvp(vp, offset, vp2);1184}1185 1186// CHECK-LABEL: define dso_local void @test80(1187// CHECK-SAME: ptr noundef [[VPP:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {1188// CHECK-NEXT: [[ENTRY:.*:]]1189// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP]], i64 181190// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]])1191// CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2]], i64 181192// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]])1193// CHECK-NEXT: ret void1194//1195void test80(const __vector_pair *vpp, __vector_pair *vp2) {1196 __vector_pair vp = __builtin_mma_lxvp(18L, vpp);1197 __builtin_mma_stxvp(vp, 18L, vp2);1198}1199 1200// CHECK-LABEL: define dso_local void @test81(1201// CHECK-SAME: ptr noundef [[VPP:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {1202// CHECK-NEXT: [[ENTRY:.*:]]1203// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP]], i64 11204// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]])1205// CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2]], i64 11206// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]])1207// CHECK-NEXT: ret void1208//1209void test81(const __vector_pair *vpp, __vector_pair *vp2) {1210 __vector_pair vp = __builtin_mma_lxvp(1L, vpp);1211 __builtin_mma_stxvp(vp, 1L, vp2);1212}1213 1214// CHECK-LABEL: define dso_local void @test82(1215// CHECK-SAME: ptr noundef [[VPP:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {1216// CHECK-NEXT: [[ENTRY:.*:]]1217// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP]], i64 421218// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]])1219// CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2]], i64 421220// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]])1221// CHECK-NEXT: ret void1222//1223void test82(const __vector_pair *vpp, __vector_pair *vp2) {1224 __vector_pair vp = __builtin_mma_lxvp(42L, vpp);1225 __builtin_mma_stxvp(vp, 42L, vp2);1226}1227 1228// CHECK-LABEL: define dso_local void @test83(1229// CHECK-SAME: ptr noundef [[VPP:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {1230// CHECK-NEXT: [[ENTRY:.*:]]1231// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP]], i64 327681232// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]])1233// CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2]], i64 327681234// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]])1235// CHECK-NEXT: ret void1236//1237void test83(const __vector_pair *vpp, __vector_pair *vp2) {1238 __vector_pair vp = __builtin_mma_lxvp(32768L, vpp);1239 __builtin_mma_stxvp(vp, 32768L, vp2);1240}1241 1242// CHECK-LABEL: define dso_local void @test84(1243// CHECK-SAME: ptr noundef [[VPP:%.*]], ptr noundef [[VP2:%.*]]) local_unnamed_addr #[[ATTR3]] {1244// CHECK-NEXT: [[ENTRY:.*:]]1245// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[VPP]], i64 327991246// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP0]])1247// CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[VP2]], i64 327991248// CHECK-NEXT: tail call void @llvm.ppc.vsx.stxvp(<256 x i1> [[TMP1]], ptr [[TMP2]])1249// CHECK-NEXT: ret void1250//1251void test84(const __vector_pair *vpp, __vector_pair *vp2) {1252 __vector_pair vp = __builtin_mma_lxvp(32799L, vpp);1253 __builtin_mma_stxvp(vp, 32799L, vp2);1254}1255 1256// CHECK-LABEL: define dso_local void @test85(1257// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {1258// CHECK-NEXT: [[ENTRY:.*:]]1259// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]1260// CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[VPP]], i64 81261// CHECK-NEXT: [[TMP2:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP1]])1262// 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)1263// CHECK-NEXT: store <512 x i1> [[TMP3]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]1264// CHECK-NEXT: ret void1265//1266void test85(unsigned char *vqp, const __vector_pair *vpp, vector unsigned char vc, unsigned char *resp) {1267 __vector_quad vq = *((__vector_quad *)vqp);1268 __vector_pair vp = __builtin_mma_lxvp(8L, vpp);1269 __builtin_mma_pmxvf64gernn(&vq, vp, vc, 0, 0);1270 *((__vector_quad *)resp) = vq;1271}1272 1273// CHECK-LABEL: define dso_local void @test86(1274// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], ptr noundef [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {1275// CHECK-NEXT: [[ENTRY:.*:]]1276// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]1277// CHECK-NEXT: [[TMP1:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[VPP]])1278// CHECK-NEXT: [[TMP2:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gernp(<512 x i1> [[TMP0]], <256 x i1> [[TMP1]], <16 x i8> [[VC]])1279// CHECK-NEXT: store <512 x i1> [[TMP2]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]1280// CHECK-NEXT: ret void1281//1282void test86(unsigned char *vqp, const __vector_pair *vpp, vector unsigned char vc, unsigned char *resp) {1283 __vector_quad vq = *((__vector_quad *)vqp);1284 __vector_pair vp = __builtin_mma_lxvp(0L, vpp);1285 __builtin_mma_xvf64gernp(&vq, vp, vc);1286 *((__vector_quad *)resp) = vq;1287}1288 1289// CHECK-LABEL: define dso_local void @test87(1290// CHECK-SAME: ptr noundef readonly captures(none) [[VQP:%.*]], i64 noundef [[OFFS:%.*]], ptr noundef [[VPP:%.*]], <16 x i8> noundef [[VC:%.*]], ptr noundef writeonly captures(none) initializes((0, 64)) [[RESP:%.*]]) local_unnamed_addr #[[ATTR2]] {1291// CHECK-NEXT: [[ENTRY:.*:]]1292// CHECK-NEXT: [[TMP0:%.*]] = load <512 x i1>, ptr [[VQP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]1293// CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[VPP]], i64 [[OFFS]]1294// CHECK-NEXT: [[TMP2:%.*]] = tail call <256 x i1> @llvm.ppc.vsx.lxvp(ptr [[TMP1]])1295// CHECK-NEXT: [[TMP3:%.*]] = tail call <512 x i1> @llvm.ppc.mma.xvf64gernp(<512 x i1> [[TMP0]], <256 x i1> [[TMP2]], <16 x i8> [[VC]])1296// CHECK-NEXT: store <512 x i1> [[TMP3]], ptr [[RESP]], align 64, !tbaa [[__VECTOR_QUAD_TBAA6]]1297// CHECK-NEXT: ret void1298//1299void test87(unsigned char *vqp, signed long offs, const __vector_pair *vpp, vector unsigned char vc, unsigned char *resp) {1300 __vector_quad vq = *((__vector_quad *)vqp);1301 __vector_pair vp = __builtin_mma_lxvp(offs, vpp);1302 __builtin_mma_xvf64gernp(&vq, vp, vc);1303 *((__vector_quad *)resp) = vq;1304}1305//.1306// CHECK: [[META4:![0-9]+]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}1307// CHECK: [[META5]] = !{!"Simple C/C++ TBAA"}1308// CHECK: [[__VECTOR_QUAD_TBAA6]] = !{[[META7:![0-9]+]], [[META7]], i64 0}1309// CHECK: [[META7]] = !{!"__vector_quad", [[META4]], i64 0}1310// CHECK: [[__VECTOR_PAIR_TBAA8]] = !{[[META9:![0-9]+]], [[META9]], i64 0}1311// CHECK: [[META9]] = !{!"__vector_pair", [[META4]], i64 0}1312//.1313