106 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s --mattr=+complxnum,+sve,+fullfp16 -o - | FileCheck %s3 4target triple = "aarch64"5 6define <vscale x 4 x double> @simple_symmetric_muladd2(<vscale x 4 x double> %a, <vscale x 4 x double> %b) {7; CHECK-LABEL: simple_symmetric_muladd2:8; CHECK: // %bb.0: // %entry9; CHECK-NEXT: ptrue p0.d10; CHECK-NEXT: adrp x8, .LCPI0_011; CHECK-NEXT: add x8, x8, :lo12:.LCPI0_012; CHECK-NEXT: ld1rd { z4.d }, p0/z, [x8]13; CHECK-NEXT: fmad z0.d, p0/m, z4.d, z2.d14; CHECK-NEXT: fmad z1.d, p0/m, z4.d, z3.d15; CHECK-NEXT: ret16entry:17 %strided.vec = tail call { <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave2.nxv4f64(<vscale x 4 x double> %a)18 %ext00 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 019 %ext01 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 120 %fmul0 = fmul fast <vscale x 2 x double> %ext00, splat (double 3.200000e+00)21 %strided.vec44 = tail call { <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave2.nxv4f64(<vscale x 4 x double> %b)22 %ext10 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec44, 023 %ext11 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec44, 124 %fadd0 = fadd fast <vscale x 2 x double> %ext10, %fmul025 %fmul1 = fmul fast <vscale x 2 x double> %ext01, splat (double 3.200000e+00)26 %fadd1 = fadd fast <vscale x 2 x double> %ext11, %fmul127 %interleaved.vec = tail call <vscale x 4 x double> @llvm.vector.interleave2.nxv4f64(<vscale x 2 x double> %fadd0, <vscale x 2 x double> %fadd1)28 ret <vscale x 4 x double> %interleaved.vec29}30 31define <vscale x 4 x double> @simple_symmetric_unary2(<vscale x 4 x double> %a) {32; CHECK-LABEL: simple_symmetric_unary2:33; CHECK: // %bb.0: // %entry34; CHECK-NEXT: ptrue p0.d35; CHECK-NEXT: fneg z0.d, p0/m, z0.d36; CHECK-NEXT: fneg z1.d, p0/m, z1.d37; CHECK-NEXT: ret38entry:39 %strided.vec = tail call { <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave2.nxv4f64(<vscale x 4 x double> %a)40 %ext00 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 041 %ext01 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 142 %fneg0 = fneg fast <vscale x 2 x double> %ext0043 %fneg1 = fneg fast <vscale x 2 x double> %ext0144 %interleaved.vec = tail call <vscale x 4 x double> @llvm.vector.interleave2.nxv4f64(<vscale x 2 x double> %fneg0, <vscale x 2 x double> %fneg1)45 ret <vscale x 4 x double> %interleaved.vec46}47 48define <vscale x 8 x double> @simple_symmetric_muladd4(<vscale x 8 x double> %a, <vscale x 8 x double> %b) {49; CHECK-LABEL: simple_symmetric_muladd4:50; CHECK: // %bb.0: // %entry51; CHECK-NEXT: ptrue p0.d52; CHECK-NEXT: adrp x8, .LCPI2_053; CHECK-NEXT: add x8, x8, :lo12:.LCPI2_054; CHECK-NEXT: ld1rd { z24.d }, p0/z, [x8]55; CHECK-NEXT: fmad z0.d, p0/m, z24.d, z4.d56; CHECK-NEXT: fmad z1.d, p0/m, z24.d, z5.d57; CHECK-NEXT: fmad z2.d, p0/m, z24.d, z6.d58; CHECK-NEXT: fmad z3.d, p0/m, z24.d, z7.d59; CHECK-NEXT: ret60entry:61 %strided.vec = tail call { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave4.nxv8f64(<vscale x 8 x double> %a)62 %ext00 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 063 %ext01 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 164 %ext02 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 265 %ext03 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 366 %fmul0 = fmul fast <vscale x 2 x double> %ext00, splat (double 3.200000e+00)67 %strided.vec44 = tail call { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave4.nxv8f64(<vscale x 8 x double> %b)68 %ext10 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec44, 069 %ext11 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec44, 170 %ext12 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec44, 271 %ext13 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec44, 372 %fadd0 = fadd fast <vscale x 2 x double> %ext10, %fmul073 %fmul1 = fmul fast <vscale x 2 x double> %ext01, splat (double 3.200000e+00)74 %fadd1 = fadd fast <vscale x 2 x double> %ext11, %fmul175 %fmul2 = fmul fast <vscale x 2 x double> %ext02, splat (double 3.200000e+00)76 %fadd2 = fadd fast <vscale x 2 x double> %ext12, %fmul277 %fmul3 = fmul fast <vscale x 2 x double> %ext03, splat (double 3.200000e+00)78 %fadd3 = fadd fast <vscale x 2 x double> %ext13, %fmul379 %interleaved.vec = tail call <vscale x 8 x double> @llvm.vector.interleave4.nxv8f64(<vscale x 2 x double> %fadd0, <vscale x 2 x double> %fadd1, <vscale x 2 x double> %fadd2, <vscale x 2 x double> %fadd3)80 ret <vscale x 8 x double> %interleaved.vec81}82 83 84define <vscale x 8 x double> @simple_symmetric_unary4(<vscale x 8 x double> %a) {85; CHECK-LABEL: simple_symmetric_unary4:86; CHECK: // %bb.0: // %entry87; CHECK-NEXT: ptrue p0.d88; CHECK-NEXT: fneg z0.d, p0/m, z0.d89; CHECK-NEXT: fneg z1.d, p0/m, z1.d90; CHECK-NEXT: fneg z2.d, p0/m, z2.d91; CHECK-NEXT: fneg z3.d, p0/m, z3.d92; CHECK-NEXT: ret93entry:94 %strided.vec = tail call { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave4.nxv8f64(<vscale x 8 x double> %a)95 %ext00 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 096 %ext01 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 197 %ext02 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 298 %ext03 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 399 %fneg0 = fneg fast <vscale x 2 x double> %ext00100 %fneg1 = fneg fast <vscale x 2 x double> %ext01101 %fneg2 = fneg fast <vscale x 2 x double> %ext02102 %fneg3 = fneg fast <vscale x 2 x double> %ext03103 %interleaved.vec = tail call <vscale x 8 x double> @llvm.vector.interleave4.nxv8f64(<vscale x 2 x double> %fneg0, <vscale x 2 x double> %fneg1, <vscale x 2 x double> %fneg2, <vscale x 2 x double> %fneg3)104 ret <vscale x 8 x double> %interleaved.vec105}106