Skip to content

Commit d3f6a88

Browse files
[AArch64] Unify lowering logic for fixed-length vectors. (llvm#89393)
In preparation of decoupling codegen for SME from SVE, this patch does a bit of cleanup to unify the logic around calling 'addTypeForFixedLengthSVE'. We only want to call this function when: * We have access to both SVE and NEON, but we prefer to use SVE. * We have access to SVE, but there is no access to NEON. Inside 'addTypeForFixedLengthSVE', we normally use Custom lowering for all operations so they can be converted to/from scalable vector operations. However, there are some exceptions: * For 64/128bit vector loads/stores we prefer the AdvSIMD LDR/STR D/Q-reg instructions, since these are available in Streaming-SVE mode. * For some operations like gather/scatter, we can only use SVE if the full set of SVE instructions is available (as opposed to the streaming[-compatible] subset). Otherwise, these operations need to expand (scalarise)
1 parent 7c0da79 commit d3f6a88

16 files changed

+126
-216
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 109 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,39 +1603,19 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
16031603
setOperationAction(ISD::VECREDUCE_SEQ_FADD, VT, Custom);
16041604
}
16051605

1606-
if (!Subtarget->isNeonAvailable()) {
1607-
setTruncStoreAction(MVT::v2f32, MVT::v2bf16, Custom);
1608-
setTruncStoreAction(MVT::v4f32, MVT::v4bf16, Custom);
1609-
setTruncStoreAction(MVT::v8f32, MVT::v8bf16, Custom);
1610-
setTruncStoreAction(MVT::v2f64, MVT::v2bf16, Custom);
1611-
setTruncStoreAction(MVT::v4f64, MVT::v4bf16, Custom);
1612-
setTruncStoreAction(MVT::v2f32, MVT::v2f16, Custom);
1613-
setTruncStoreAction(MVT::v4f32, MVT::v4f16, Custom);
1614-
setTruncStoreAction(MVT::v8f32, MVT::v8f16, Custom);
1615-
setTruncStoreAction(MVT::v1f64, MVT::v1f16, Custom);
1616-
setTruncStoreAction(MVT::v2f64, MVT::v2f16, Custom);
1617-
setTruncStoreAction(MVT::v4f64, MVT::v4f16, Custom);
1618-
setTruncStoreAction(MVT::v1f64, MVT::v1f32, Custom);
1619-
setTruncStoreAction(MVT::v2f64, MVT::v2f32, Custom);
1620-
setTruncStoreAction(MVT::v4f64, MVT::v4f32, Custom);
1621-
for (MVT VT : {MVT::v8i8, MVT::v16i8, MVT::v4i16, MVT::v8i16, MVT::v2i32,
1622-
MVT::v4i32, MVT::v1i64, MVT::v2i64})
1623-
addTypeForFixedLengthSVE(VT, /*StreamingSVE=*/ true);
1624-
1625-
for (MVT VT :
1626-
{MVT::v4f16, MVT::v8f16, MVT::v2f32, MVT::v4f32, MVT::v2f64})
1627-
addTypeForFixedLengthSVE(VT, /*StreamingSVE=*/ true);
1628-
}
1629-
16301606
// NOTE: Currently this has to happen after computeRegisterProperties rather
16311607
// than the preferred option of combining it with the addRegisterClass call.
16321608
if (Subtarget->useSVEForFixedLengthVectors()) {
1633-
for (MVT VT : MVT::integer_fixedlen_vector_valuetypes())
1634-
if (useSVEForFixedLengthVectorVT(VT))
1635-
addTypeForFixedLengthSVE(VT, /*StreamingSVE=*/ false);
1636-
for (MVT VT : MVT::fp_fixedlen_vector_valuetypes())
1637-
if (useSVEForFixedLengthVectorVT(VT))
1638-
addTypeForFixedLengthSVE(VT, /*StreamingSVE=*/ false);
1609+
for (MVT VT : MVT::integer_fixedlen_vector_valuetypes()) {
1610+
if (useSVEForFixedLengthVectorVT(
1611+
VT, /*OverrideNEON=*/!Subtarget->isNeonAvailable()))
1612+
addTypeForFixedLengthSVE(VT);
1613+
}
1614+
for (MVT VT : MVT::fp_fixedlen_vector_valuetypes()) {
1615+
if (useSVEForFixedLengthVectorVT(
1616+
VT, /*OverrideNEON=*/!Subtarget->isNeonAvailable()))
1617+
addTypeForFixedLengthSVE(VT);
1618+
}
16391619

16401620
// 64bit results can mean a bigger than NEON input.
16411621
for (auto VT : {MVT::v8i8, MVT::v4i16})
@@ -1869,8 +1849,7 @@ bool AArch64TargetLowering::shouldExpandCttzElements(EVT VT) const {
18691849
return !Subtarget->hasSVEorSME() || VT != MVT::nxv16i1;
18701850
}
18711851

1872-
void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT,
1873-
bool StreamingSVE) {
1852+
void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT) {
18741853
assert(VT.isFixedLengthVector() && "Expected fixed length vector type!");
18751854

18761855
// By default everything must be expanded.
@@ -1889,13 +1868,17 @@ void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT,
18891868
setCondCodeAction(ISD::SETONE, VT, Expand);
18901869
}
18911870

1871+
TargetLoweringBase::LegalizeAction Default =
1872+
VT == MVT::v1f64 ? Expand : Custom;
1873+
18921874
// Mark integer truncating stores/extending loads as having custom lowering
18931875
if (VT.isInteger()) {
18941876
MVT InnerVT = VT.changeVectorElementType(MVT::i8);
18951877
while (InnerVT != VT) {
1896-
setTruncStoreAction(VT, InnerVT, Custom);
1897-
setLoadExtAction(ISD::ZEXTLOAD, VT, InnerVT, Custom);
1898-
setLoadExtAction(ISD::SEXTLOAD, VT, InnerVT, Custom);
1878+
setTruncStoreAction(VT, InnerVT, Default);
1879+
setLoadExtAction(ISD::ZEXTLOAD, VT, InnerVT, Default);
1880+
setLoadExtAction(ISD::SEXTLOAD, VT, InnerVT, Default);
1881+
setLoadExtAction(ISD::EXTLOAD, VT, InnerVT, Default);
18991882
InnerVT = InnerVT.changeVectorElementType(
19001883
MVT::getIntegerVT(2 * InnerVT.getScalarSizeInBits()));
19011884
}
@@ -1907,101 +1890,103 @@ void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT,
19071890
MVT InnerVT = VT.changeVectorElementType(MVT::f16);
19081891
while (InnerVT != VT) {
19091892
setTruncStoreAction(VT, InnerVT, Custom);
1910-
setLoadExtAction(ISD::EXTLOAD, VT, InnerVT, Custom);
1893+
setLoadExtAction(ISD::EXTLOAD, VT, InnerVT, Default);
19111894
InnerVT = InnerVT.changeVectorElementType(
19121895
MVT::getFloatingPointVT(2 * InnerVT.getScalarSizeInBits()));
19131896
}
19141897
}
19151898

1899+
bool PreferNEON = VT.is64BitVector() || VT.is128BitVector();
1900+
bool PreferSVE = !PreferNEON && Subtarget->isSVEAvailable();
1901+
19161902
// Lower fixed length vector operations to scalable equivalents.
1917-
setOperationAction(ISD::ABS, VT, Custom);
1918-
setOperationAction(ISD::ADD, VT, Custom);
1919-
setOperationAction(ISD::AND, VT, Custom);
1920-
setOperationAction(ISD::ANY_EXTEND, VT, Custom);
1921-
setOperationAction(ISD::BITCAST, VT, StreamingSVE ? Legal : Custom);
1922-
setOperationAction(ISD::BITREVERSE, VT, Custom);
1923-
setOperationAction(ISD::BSWAP, VT, Custom);
1924-
setOperationAction(ISD::BUILD_VECTOR, VT, Custom);
1925-
setOperationAction(ISD::CONCAT_VECTORS, VT, Custom);
1926-
setOperationAction(ISD::CTLZ, VT, Custom);
1927-
setOperationAction(ISD::CTPOP, VT, Custom);
1928-
setOperationAction(ISD::CTTZ, VT, Custom);
1929-
setOperationAction(ISD::EXTRACT_SUBVECTOR, VT, Custom);
1930-
setOperationAction(ISD::EXTRACT_VECTOR_ELT, VT, Custom);
1931-
setOperationAction(ISD::FABS, VT, Custom);
1932-
setOperationAction(ISD::FADD, VT, Custom);
1933-
setOperationAction(ISD::FCEIL, VT, Custom);
1934-
setOperationAction(ISD::FCOPYSIGN, VT, Custom);
1935-
setOperationAction(ISD::FDIV, VT, Custom);
1936-
setOperationAction(ISD::FFLOOR, VT, Custom);
1937-
setOperationAction(ISD::FMA, VT, Custom);
1938-
setOperationAction(ISD::FMAXIMUM, VT, Custom);
1939-
setOperationAction(ISD::FMAXNUM, VT, Custom);
1940-
setOperationAction(ISD::FMINIMUM, VT, Custom);
1941-
setOperationAction(ISD::FMINNUM, VT, Custom);
1942-
setOperationAction(ISD::FMUL, VT, Custom);
1943-
setOperationAction(ISD::FNEARBYINT, VT, Custom);
1944-
setOperationAction(ISD::FNEG, VT, Custom);
1945-
setOperationAction(ISD::FP_EXTEND, VT, Custom);
1946-
setOperationAction(ISD::FP_ROUND, VT, Custom);
1947-
setOperationAction(ISD::FP_TO_SINT, VT, Custom);
1948-
setOperationAction(ISD::FP_TO_UINT, VT, Custom);
1949-
setOperationAction(ISD::FRINT, VT, Custom);
1950-
setOperationAction(ISD::FROUND, VT, Custom);
1951-
setOperationAction(ISD::FROUNDEVEN, VT, Custom);
1952-
setOperationAction(ISD::FSQRT, VT, Custom);
1953-
setOperationAction(ISD::FSUB, VT, Custom);
1954-
setOperationAction(ISD::FTRUNC, VT, Custom);
1955-
setOperationAction(ISD::INSERT_VECTOR_ELT, VT, Custom);
1956-
setOperationAction(ISD::LOAD, VT, StreamingSVE ? Legal : Custom);
1957-
setOperationAction(ISD::MGATHER, VT, StreamingSVE ? Expand : Custom);
1958-
setOperationAction(ISD::MLOAD, VT, Custom);
1959-
setOperationAction(ISD::MSCATTER, VT, StreamingSVE ? Expand : Custom);
1960-
setOperationAction(ISD::MSTORE, VT, Custom);
1961-
setOperationAction(ISD::MUL, VT, Custom);
1962-
setOperationAction(ISD::MULHS, VT, Custom);
1963-
setOperationAction(ISD::MULHU, VT, Custom);
1964-
setOperationAction(ISD::OR, VT, Custom);
1965-
setOperationAction(ISD::SCALAR_TO_VECTOR, VT, StreamingSVE ? Legal : Expand);
1966-
setOperationAction(ISD::SDIV, VT, Custom);
1967-
setOperationAction(ISD::SELECT, VT, Custom);
1968-
setOperationAction(ISD::SETCC, VT, Custom);
1969-
setOperationAction(ISD::SHL, VT, Custom);
1970-
setOperationAction(ISD::SIGN_EXTEND, VT, Custom);
1971-
setOperationAction(ISD::SIGN_EXTEND_INREG, VT, Custom);
1972-
setOperationAction(ISD::SINT_TO_FP, VT, Custom);
1973-
setOperationAction(ISD::SMAX, VT, Custom);
1974-
setOperationAction(ISD::SMIN, VT, Custom);
1975-
setOperationAction(ISD::SPLAT_VECTOR, VT, Custom);
1976-
setOperationAction(ISD::SRA, VT, Custom);
1977-
setOperationAction(ISD::SRL, VT, Custom);
1978-
setOperationAction(ISD::STORE, VT, StreamingSVE ? Legal : Custom);
1979-
setOperationAction(ISD::SUB, VT, Custom);
1980-
setOperationAction(ISD::TRUNCATE, VT, Custom);
1981-
setOperationAction(ISD::UDIV, VT, Custom);
1982-
setOperationAction(ISD::UINT_TO_FP, VT, Custom);
1983-
setOperationAction(ISD::UMAX, VT, Custom);
1984-
setOperationAction(ISD::UMIN, VT, Custom);
1985-
setOperationAction(ISD::VECREDUCE_ADD, VT, Custom);
1986-
setOperationAction(ISD::VECREDUCE_AND, VT, Custom);
1987-
setOperationAction(ISD::VECREDUCE_FADD, VT, Custom);
1988-
setOperationAction(ISD::VECREDUCE_FMAX, VT, Custom);
1989-
setOperationAction(ISD::VECREDUCE_FMIN, VT, Custom);
1990-
setOperationAction(ISD::VECREDUCE_FMAXIMUM, VT, Custom);
1991-
setOperationAction(ISD::VECREDUCE_FMINIMUM, VT, Custom);
1992-
setOperationAction(ISD::VECREDUCE_OR, VT, Custom);
1993-
setOperationAction(ISD::VECREDUCE_SEQ_FADD, VT,
1994-
StreamingSVE ? Expand : Custom);
1995-
setOperationAction(ISD::VECREDUCE_SMAX, VT, Custom);
1996-
setOperationAction(ISD::VECREDUCE_SMIN, VT, Custom);
1997-
setOperationAction(ISD::VECREDUCE_UMAX, VT, Custom);
1998-
setOperationAction(ISD::VECREDUCE_UMIN, VT, Custom);
1999-
setOperationAction(ISD::VECREDUCE_XOR, VT, Custom);
2000-
setOperationAction(ISD::VECTOR_SHUFFLE, VT, Custom);
2001-
setOperationAction(ISD::VECTOR_SPLICE, VT, Custom);
2002-
setOperationAction(ISD::VSELECT, VT, Custom);
2003-
setOperationAction(ISD::XOR, VT, Custom);
2004-
setOperationAction(ISD::ZERO_EXTEND, VT, Custom);
1903+
setOperationAction(ISD::ABS, VT, Default);
1904+
setOperationAction(ISD::ADD, VT, Default);
1905+
setOperationAction(ISD::AND, VT, Default);
1906+
setOperationAction(ISD::ANY_EXTEND, VT, Default);
1907+
setOperationAction(ISD::BITCAST, VT, PreferNEON ? Legal : Default);
1908+
setOperationAction(ISD::BITREVERSE, VT, Default);
1909+
setOperationAction(ISD::BSWAP, VT, Default);
1910+
setOperationAction(ISD::BUILD_VECTOR, VT, Default);
1911+
setOperationAction(ISD::CONCAT_VECTORS, VT, Default);
1912+
setOperationAction(ISD::CTLZ, VT, Default);
1913+
setOperationAction(ISD::CTPOP, VT, Default);
1914+
setOperationAction(ISD::CTTZ, VT, Default);
1915+
setOperationAction(ISD::EXTRACT_SUBVECTOR, VT, Default);
1916+
setOperationAction(ISD::EXTRACT_VECTOR_ELT, VT, Default);
1917+
setOperationAction(ISD::FABS, VT, Default);
1918+
setOperationAction(ISD::FADD, VT, Default);
1919+
setOperationAction(ISD::FCEIL, VT, Default);
1920+
setOperationAction(ISD::FCOPYSIGN, VT, Default);
1921+
setOperationAction(ISD::FDIV, VT, Default);
1922+
setOperationAction(ISD::FFLOOR, VT, Default);
1923+
setOperationAction(ISD::FMA, VT, Default);
1924+
setOperationAction(ISD::FMAXIMUM, VT, Default);
1925+
setOperationAction(ISD::FMAXNUM, VT, Default);
1926+
setOperationAction(ISD::FMINIMUM, VT, Default);
1927+
setOperationAction(ISD::FMINNUM, VT, Default);
1928+
setOperationAction(ISD::FMUL, VT, Default);
1929+
setOperationAction(ISD::FNEARBYINT, VT, Default);
1930+
setOperationAction(ISD::FNEG, VT, Default);
1931+
setOperationAction(ISD::FP_EXTEND, VT, Default);
1932+
setOperationAction(ISD::FP_ROUND, VT, Default);
1933+
setOperationAction(ISD::FP_TO_SINT, VT, Default);
1934+
setOperationAction(ISD::FP_TO_UINT, VT, Default);
1935+
setOperationAction(ISD::FRINT, VT, Default);
1936+
setOperationAction(ISD::FROUND, VT, Default);
1937+
setOperationAction(ISD::FROUNDEVEN, VT, Default);
1938+
setOperationAction(ISD::FSQRT, VT, Default);
1939+
setOperationAction(ISD::FSUB, VT, Default);
1940+
setOperationAction(ISD::FTRUNC, VT, Default);
1941+
setOperationAction(ISD::INSERT_VECTOR_ELT, VT, Default);
1942+
setOperationAction(ISD::LOAD, VT, PreferNEON ? Legal : Default);
1943+
setOperationAction(ISD::MGATHER, VT, PreferSVE ? Default : Expand);
1944+
setOperationAction(ISD::MLOAD, VT, Default);
1945+
setOperationAction(ISD::MSCATTER, VT, PreferSVE ? Default : Expand);
1946+
setOperationAction(ISD::MSTORE, VT, Default);
1947+
setOperationAction(ISD::MUL, VT, Default);
1948+
setOperationAction(ISD::MULHS, VT, Default);
1949+
setOperationAction(ISD::MULHU, VT, Default);
1950+
setOperationAction(ISD::OR, VT, Default);
1951+
setOperationAction(ISD::SCALAR_TO_VECTOR, VT, PreferNEON ? Legal : Expand);
1952+
setOperationAction(ISD::SDIV, VT, Default);
1953+
setOperationAction(ISD::SELECT, VT, Default);
1954+
setOperationAction(ISD::SETCC, VT, Default);
1955+
setOperationAction(ISD::SHL, VT, Default);
1956+
setOperationAction(ISD::SIGN_EXTEND, VT, Default);
1957+
setOperationAction(ISD::SIGN_EXTEND_INREG, VT, Default);
1958+
setOperationAction(ISD::SINT_TO_FP, VT, Default);
1959+
setOperationAction(ISD::SMAX, VT, Default);
1960+
setOperationAction(ISD::SMIN, VT, Default);
1961+
setOperationAction(ISD::SPLAT_VECTOR, VT, Default);
1962+
setOperationAction(ISD::SRA, VT, Default);
1963+
setOperationAction(ISD::SRL, VT, Default);
1964+
setOperationAction(ISD::STORE, VT, PreferNEON ? Legal : Default);
1965+
setOperationAction(ISD::SUB, VT, Default);
1966+
setOperationAction(ISD::TRUNCATE, VT, Default);
1967+
setOperationAction(ISD::UDIV, VT, Default);
1968+
setOperationAction(ISD::UINT_TO_FP, VT, Default);
1969+
setOperationAction(ISD::UMAX, VT, Default);
1970+
setOperationAction(ISD::UMIN, VT, Default);
1971+
setOperationAction(ISD::VECREDUCE_ADD, VT, Default);
1972+
setOperationAction(ISD::VECREDUCE_AND, VT, Default);
1973+
setOperationAction(ISD::VECREDUCE_FADD, VT, Default);
1974+
setOperationAction(ISD::VECREDUCE_FMAX, VT, Default);
1975+
setOperationAction(ISD::VECREDUCE_FMIN, VT, Default);
1976+
setOperationAction(ISD::VECREDUCE_FMAXIMUM, VT, Default);
1977+
setOperationAction(ISD::VECREDUCE_FMINIMUM, VT, Default);
1978+
setOperationAction(ISD::VECREDUCE_OR, VT, Default);
1979+
setOperationAction(ISD::VECREDUCE_SEQ_FADD, VT, PreferSVE ? Default : Expand);
1980+
setOperationAction(ISD::VECREDUCE_SMAX, VT, Default);
1981+
setOperationAction(ISD::VECREDUCE_SMIN, VT, Default);
1982+
setOperationAction(ISD::VECREDUCE_UMAX, VT, Default);
1983+
setOperationAction(ISD::VECREDUCE_UMIN, VT, Default);
1984+
setOperationAction(ISD::VECREDUCE_XOR, VT, Default);
1985+
setOperationAction(ISD::VECTOR_SHUFFLE, VT, Default);
1986+
setOperationAction(ISD::VECTOR_SPLICE, VT, Default);
1987+
setOperationAction(ISD::VSELECT, VT, Default);
1988+
setOperationAction(ISD::XOR, VT, Default);
1989+
setOperationAction(ISD::ZERO_EXTEND, VT, Default);
20051990
}
20061991

20071992
void AArch64TargetLowering::addDRTypeForNEON(MVT VT) {

llvm/lib/Target/AArch64/AArch64ISelLowering.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1013,7 +1013,7 @@ class AArch64TargetLowering : public TargetLowering {
10131013
bool isExtFreeImpl(const Instruction *Ext) const override;
10141014

10151015
void addTypeForNEON(MVT VT);
1016-
void addTypeForFixedLengthSVE(MVT VT, bool StreamingSVE);
1016+
void addTypeForFixedLengthSVE(MVT VT);
10171017
void addDRTypeForNEON(MVT VT);
10181018
void addQRTypeForNEON(MVT VT);
10191019

llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-bitcast.ll

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,8 @@ define void @bitcast_v2i16(ptr %a, ptr %b) {
6060
; CHECK: // %bb.0:
6161
; CHECK-NEXT: sub sp, sp, #16
6262
; CHECK-NEXT: .cfi_def_cfa_offset 16
63-
; CHECK-NEXT: ldrh w8, [x0, #2]
64-
; CHECK-NEXT: str w8, [sp, #4]
65-
; CHECK-NEXT: ldrh w8, [x0]
66-
; CHECK-NEXT: str w8, [sp]
67-
; CHECK-NEXT: ldr d0, [sp]
63+
; CHECK-NEXT: ptrue p0.s, vl2
64+
; CHECK-NEXT: ld1h { z0.s }, p0/z, [x0]
6865
; CHECK-NEXT: mov z1.s, z0.s[1]
6966
; CHECK-NEXT: fmov w8, s0
7067
; CHECK-NEXT: strh w8, [sp, #8]

llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-extract-vector-elt.ll

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,6 @@ define float @extractelement_v8f32(ptr %a) {
9090
define double @extractelement_v1f64(<1 x double> %op1) {
9191
; CHECK-LABEL: extractelement_v1f64:
9292
; CHECK: // %bb.0:
93-
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
94-
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
9593
; CHECK-NEXT: ret
9694
%r = extractelement <1 x double> %op1, i64 0
9795
ret double %r

llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-fp-compares.ll

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,9 @@ define void @fcmp_oeq_v8f32(ptr %a, ptr %b, ptr %c) {
127127
define <1 x i64> @fcmp_oeq_v1f64(<1 x double> %op1, <1 x double> %op2) {
128128
; CHECK-LABEL: fcmp_oeq_v1f64:
129129
; CHECK: // %bb.0:
130-
; CHECK-NEXT: ptrue p0.d, vl1
131-
; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
132-
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
133-
; CHECK-NEXT: fcmeq p0.d, p0/z, z0.d, z1.d
134-
; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff
130+
; CHECK-NEXT: fcmp d0, d1
131+
; CHECK-NEXT: csetm x8, eq
132+
; CHECK-NEXT: mov z0.d, x8
135133
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
136134
; CHECK-NEXT: ret
137135
%cmp = fcmp oeq <1 x double> %op1, %op2

llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-fp-fma.ll

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,6 @@ define void @fma_v8f32(ptr %a, ptr %b, ptr %c) {
112112
define <1 x double> @fma_v1f64(<1 x double> %op1, <1 x double> %op2, <1 x double> %op3) {
113113
; CHECK-LABEL: fma_v1f64:
114114
; CHECK: // %bb.0:
115-
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
116-
; CHECK-NEXT: // kill: def $d2 killed $d2 def $z2
117-
; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
118115
; CHECK-NEXT: fmadd d0, d0, d1, d2
119116
; CHECK-NEXT: ret
120117
%mul = fmul contract <1 x double> %op1, %op2

llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-fp-minmax.ll

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,6 @@ define void @fmaxnm_v8f32(ptr %a, ptr %b) {
9999
define <1 x double> @fmaxnm_v1f64(<1 x double> %op1, <1 x double> %op2) {
100100
; CHECK-LABEL: fmaxnm_v1f64:
101101
; CHECK: // %bb.0:
102-
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
103-
; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
104102
; CHECK-NEXT: fmaxnm d0, d0, d1
105103
; CHECK-NEXT: ret
106104
%res = call <1 x double> @llvm.maxnum.v1f64(<1 x double> %op1, <1 x double> %op2)
@@ -233,8 +231,6 @@ define void @fminnm_v8f32(ptr %a, ptr %b) {
233231
define <1 x double> @fminnm_v1f64(<1 x double> %op1, <1 x double> %op2) {
234232
; CHECK-LABEL: fminnm_v1f64:
235233
; CHECK: // %bb.0:
236-
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
237-
; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
238234
; CHECK-NEXT: fminnm d0, d0, d1
239235
; CHECK-NEXT: ret
240236
%res = call <1 x double> @llvm.minnum.v1f64(<1 x double> %op1, <1 x double> %op2)
@@ -367,8 +363,6 @@ define void @fmax_v8f32(ptr %a, ptr %b) {
367363
define <1 x double> @fmax_v1f64(<1 x double> %op1, <1 x double> %op2) {
368364
; CHECK-LABEL: fmax_v1f64:
369365
; CHECK: // %bb.0:
370-
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
371-
; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
372366
; CHECK-NEXT: fmax d0, d0, d1
373367
; CHECK-NEXT: ret
374368
%res = call <1 x double> @llvm.maximum.v1f64(<1 x double> %op1, <1 x double> %op2)
@@ -501,8 +495,6 @@ define void @fmin_v8f32(ptr %a, ptr %b) {
501495
define <1 x double> @fmin_v1f64(<1 x double> %op1, <1 x double> %op2) {
502496
; CHECK-LABEL: fmin_v1f64:
503497
; CHECK: // %bb.0:
504-
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
505-
; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
506498
; CHECK-NEXT: fmin d0, d0, d1
507499
; CHECK-NEXT: ret
508500
%res = call <1 x double> @llvm.minimum.v1f64(<1 x double> %op1, <1 x double> %op2)

0 commit comments

Comments
 (0)