1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ 3; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names \ 4; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s 5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ 6; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names \ 7; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s --check-prefix=CHECK-BE 8 9declare <512 x i1> @llvm.ppc.mma.xvf16ger2pp(<512 x i1>, <16 x i8>, <16 x i8>) 10declare <512 x i1> @llvm.ppc.mma.assemble.acc(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>) 11declare void @foo() 12define void @intrinsics1(<16 x i8> %vc1, <16 x i8> %vc2, <16 x i8> %vc3, <16 x i8> %vc4, i8* %ptr) { 13; CHECK-LABEL: intrinsics1: 14; CHECK: .localentry intrinsics1, 1 15; CHECK-NEXT: # %bb.0: 16; CHECK-NEXT: mflr r0 17; CHECK-NEXT: .cfi_def_cfa_offset 176 18; CHECK-NEXT: .cfi_offset lr, 16 19; CHECK-NEXT: .cfi_offset r30, -16 20; CHECK-NEXT: std r30, -16(r1) # 8-byte Folded Spill 21; CHECK-NEXT: std r0, 16(r1) 22; CHECK-NEXT: stdu r1, -176(r1) 23; CHECK-NEXT: li r3, 128 24; CHECK-NEXT: # kill: def $v5 killed $v5 killed $vsrp18 def $vsrp18 25; CHECK-NEXT: # kill: def $v4 killed $v4 killed $vsrp18 def $vsrp18 26; CHECK-NEXT: # kill: def $v3 killed $v3 killed $vsrp17 def $vsrp17 27; CHECK-NEXT: # kill: def $v2 killed $v2 killed $vsrp17 def $vsrp17 28; CHECK-NEXT: xxlor vs0, v2, v2 29; CHECK-NEXT: xxlor vs1, v3, v3 30; CHECK-NEXT: ld r30, 272(r1) 31; CHECK-NEXT: stxvp vsp34, r1(r3) # 32-byte Folded Spill 32; CHECK-NEXT: li r3, 96 33; CHECK-NEXT: xxlor vs2, v4, v4 34; CHECK-NEXT: xxlor vs3, v5, v5 35; CHECK-NEXT: stxvp vsp36, r1(r3) # 32-byte Folded Spill 36; CHECK-NEXT: xxmtacc acc0 37; CHECK-NEXT: li r3, 64 38; CHECK-NEXT: xvf16ger2pp acc0, v2, v4 39; CHECK-NEXT: xxmfacc acc0 40; CHECK-NEXT: stxvp vsp0, r1(r3) 41; CHECK-NEXT: li r3, 32 42; CHECK-NEXT: stxvp vsp2, r1(r3) 43; CHECK-NEXT: bl foo@notoc 44; CHECK-NEXT: li r3, 64 45; CHECK-NEXT: lxvp vsp0, r1(r3) 46; CHECK-NEXT: li r3, 32 47; CHECK-NEXT: lxvp vsp2, r1(r3) 48; CHECK-NEXT: li r3, 128 49; CHECK-NEXT: lxvp vsp34, r1(r3) # 32-byte Folded Reload 50; CHECK-NEXT: li r3, 96 51; CHECK-NEXT: lxvp vsp36, r1(r3) # 32-byte Folded Reload 52; CHECK-NEXT: xxmtacc acc0 53; CHECK-NEXT: xvf16ger2pp acc0, v2, v4 54; CHECK-NEXT: xxmfacc acc0 55; CHECK-NEXT: stxv vs0, 48(r30) 56; CHECK-NEXT: stxv vs1, 32(r30) 57; CHECK-NEXT: stxv vs2, 16(r30) 58; CHECK-NEXT: stxvx vs3, 0, r30 59; CHECK-NEXT: addi r1, r1, 176 60; CHECK-NEXT: ld r0, 16(r1) 61; CHECK-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 62; CHECK-NEXT: mtlr r0 63; CHECK-NEXT: blr 64; 65; CHECK-BE-LABEL: intrinsics1: 66; CHECK-BE: # %bb.0: 67; CHECK-BE-NEXT: mflr r0 68; CHECK-BE-NEXT: std r0, 16(r1) 69; CHECK-BE-NEXT: stdu r1, -256(r1) 70; CHECK-BE-NEXT: .cfi_def_cfa_offset 256 71; CHECK-BE-NEXT: .cfi_offset lr, 16 72; CHECK-BE-NEXT: .cfi_offset r30, -16 73; CHECK-BE-NEXT: li r3, 208 74; CHECK-BE-NEXT: std r30, 240(r1) # 8-byte Folded Spill 75; CHECK-BE-NEXT: # kill: def $v5 killed $v5 killed $vsrp18 def $vsrp18 76; CHECK-BE-NEXT: # kill: def $v4 killed $v4 killed $vsrp18 def $vsrp18 77; CHECK-BE-NEXT: # kill: def $v3 killed $v3 killed $vsrp17 def $vsrp17 78; CHECK-BE-NEXT: # kill: def $v2 killed $v2 killed $vsrp17 def $vsrp17 79; CHECK-BE-NEXT: xxlor vs0, v2, v2 80; CHECK-BE-NEXT: ld r30, 368(r1) 81; CHECK-BE-NEXT: stxvp vsp34, r1(r3) # 32-byte Folded Spill 82; CHECK-BE-NEXT: xxlor vs1, v3, v3 83; CHECK-BE-NEXT: li r3, 176 84; CHECK-BE-NEXT: xxlor vs2, v4, v4 85; CHECK-BE-NEXT: xxlor vs3, v5, v5 86; CHECK-BE-NEXT: stxvp vsp36, r1(r3) # 32-byte Folded Spill 87; CHECK-BE-NEXT: xxmtacc acc0 88; CHECK-BE-NEXT: li r3, 112 89; CHECK-BE-NEXT: xvf16ger2pp acc0, v2, v4 90; CHECK-BE-NEXT: xxmfacc acc0 91; CHECK-BE-NEXT: stxvp vsp0, r1(r3) 92; CHECK-BE-NEXT: li r3, 144 93; CHECK-BE-NEXT: stxvp vsp2, r1(r3) 94; CHECK-BE-NEXT: bl foo 95; CHECK-BE-NEXT: nop 96; CHECK-BE-NEXT: li r3, 112 97; CHECK-BE-NEXT: lxvp vsp0, r1(r3) 98; CHECK-BE-NEXT: li r3, 144 99; CHECK-BE-NEXT: lxvp vsp2, r1(r3) 100; CHECK-BE-NEXT: li r3, 208 101; CHECK-BE-NEXT: lxvp vsp34, r1(r3) # 32-byte Folded Reload 102; CHECK-BE-NEXT: li r3, 176 103; CHECK-BE-NEXT: lxvp vsp36, r1(r3) # 32-byte Folded Reload 104; CHECK-BE-NEXT: xxmtacc acc0 105; CHECK-BE-NEXT: xvf16ger2pp acc0, v2, v4 106; CHECK-BE-NEXT: xxmfacc acc0 107; CHECK-BE-NEXT: stxv vs1, 16(r30) 108; CHECK-BE-NEXT: stxvx vs0, 0, r30 109; CHECK-BE-NEXT: stxv vs3, 48(r30) 110; CHECK-BE-NEXT: stxv vs2, 32(r30) 111; CHECK-BE-NEXT: ld r30, 240(r1) # 8-byte Folded Reload 112; CHECK-BE-NEXT: addi r1, r1, 256 113; CHECK-BE-NEXT: ld r0, 16(r1) 114; CHECK-BE-NEXT: mtlr r0 115; CHECK-BE-NEXT: blr 116 %1 = tail call <512 x i1> @llvm.ppc.mma.assemble.acc(<16 x i8> %vc1, <16 x i8> %vc2, <16 x i8> %vc3, <16 x i8> %vc4) 117 %2 = tail call <512 x i1> @llvm.ppc.mma.xvf16ger2pp(<512 x i1> %1, <16 x i8> %vc1, <16 x i8> %vc3) 118 tail call void @foo() 119 %3 = tail call <512 x i1> @llvm.ppc.mma.xvf16ger2pp(<512 x i1> %2, <16 x i8> %vc1, <16 x i8> %vc3) 120 %4 = bitcast i8* %ptr to <512 x i1>* 121 store <512 x i1> %3, <512 x i1>* %4, align 64 122 ret void 123} 124