diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -22981,9 +22981,8 @@ EVT ContainerDstVT = getContainerForFixedLengthVector(DAG, VT); EVT ContainerSrcVT = getContainerForFixedLengthVector(DAG, SrcVT); - if (ContainerSrcVT.getVectorElementType().getSizeInBits() <= - ContainerDstVT.getVectorElementType().getSizeInBits()) { - SDValue Pg = getPredicateForVector(DAG, DL, VT); + if (VT.bitsGE(SrcVT)) { + SDValue Pg = getPredicateForFixedLengthVector(DAG, DL, VT); Val = DAG.getNode(IsSigned ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND, DL, VT.changeTypeToInteger(), Val); @@ -22998,7 +22997,7 @@ } else { EVT CvtVT = ContainerSrcVT.changeVectorElementType( ContainerDstVT.getVectorElementType()); - SDValue Pg = getPredicateForVector(DAG, DL, CvtVT); + SDValue Pg = getPredicateForFixedLengthVector(DAG, DL, SrcVT); Val = convertToScalableVector(DAG, ContainerSrcVT, Val); Val = DAG.getNode(Opcode, DL, CvtVT, Pg, Val, DAG.getUNDEF(CvtVT)); @@ -23026,11 +23025,10 @@ EVT ContainerDstVT = getContainerForFixedLengthVector(DAG, VT); EVT ContainerSrcVT = getContainerForFixedLengthVector(DAG, SrcVT); - if (ContainerSrcVT.getVectorElementType().getSizeInBits() <= - ContainerDstVT.getVectorElementType().getSizeInBits()) { + if (VT.bitsGT(SrcVT)) { EVT CvtVT = ContainerDstVT.changeVectorElementType( ContainerSrcVT.getVectorElementType()); - SDValue Pg = getPredicateForVector(DAG, DL, VT); + SDValue Pg = getPredicateForFixedLengthVector(DAG, DL, VT); Val = DAG.getNode(ISD::BITCAST, DL, SrcVT.changeTypeToInteger(), Val); Val = DAG.getNode(ISD::ANY_EXTEND, DL, VT, Val); @@ -23042,7 +23040,7 @@ return convertFromScalableVector(DAG, VT, Val); } else { EVT CvtVT = ContainerSrcVT.changeTypeToInteger(); - SDValue Pg = getPredicateForVector(DAG, DL, CvtVT); + SDValue Pg = getPredicateForFixedLengthVector(DAG, DL, SrcVT); // Safe to use a larger than specified result since an fp_to_int where the // result doesn't fit into the destination is undefined. diff --git a/llvm/test/CodeGen/AArch64/sve-fixed-length-fp-to-int.ll b/llvm/test/CodeGen/AArch64/sve-fixed-length-fp-to-int.ll --- a/llvm/test/CodeGen/AArch64/sve-fixed-length-fp-to-int.ll +++ b/llvm/test/CodeGen/AArch64/sve-fixed-length-fp-to-int.ll @@ -343,7 +343,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s, vl8 ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 @@ -360,7 +359,6 @@ ; VBITS_GE_256-NEXT: ptrue p0.s, vl8 ; VBITS_GE_256-NEXT: ld1w { z0.s }, p0/z, [x0, x8, lsl #2] ; VBITS_GE_256-NEXT: ld1w { z1.s }, p0/z, [x0] -; VBITS_GE_256-NEXT: ptrue p0.s ; VBITS_GE_256-NEXT: fcvtzu z0.s, p0/m, z0.s ; VBITS_GE_256-NEXT: fcvtzu z1.s, p0/m, z1.s ; VBITS_GE_256-NEXT: uzp1 z0.h, z0.h, z0.h @@ -374,9 +372,8 @@ ; VBITS_GE_512-LABEL: fcvtzu_v16f32_v16i16: ; VBITS_GE_512: // %bb.0: ; VBITS_GE_512-NEXT: ptrue p0.s, vl16 -; VBITS_GE_512-NEXT: ptrue p1.s ; VBITS_GE_512-NEXT: ld1w { z0.s }, p0/z, [x0] -; VBITS_GE_512-NEXT: fcvtzu z0.s, p1/m, z0.s +; VBITS_GE_512-NEXT: fcvtzu z0.s, p0/m, z0.s ; VBITS_GE_512-NEXT: st1h { z0.s }, p0, [x1] ; VBITS_GE_512-NEXT: ret %op1 = load <16 x float>, ptr %a @@ -389,9 +386,8 @@ ; CHECK-LABEL: fcvtzu_v32f32_v32i16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s, vl32 -; CHECK-NEXT: ptrue p1.s ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] -; CHECK-NEXT: fcvtzu z0.s, p1/m, z0.s +; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s ; CHECK-NEXT: st1h { z0.s }, p0, [x1] ; CHECK-NEXT: ret %op1 = load <32 x float>, ptr %a @@ -404,9 +400,8 @@ ; CHECK-LABEL: fcvtzu_v64f32_v64i16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s, vl64 -; CHECK-NEXT: ptrue p1.s ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] -; CHECK-NEXT: fcvtzu z0.s, p1/m, z0.s +; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s ; CHECK-NEXT: st1h { z0.s }, p0, [x1] ; CHECK-NEXT: ret %op1 = load <64 x float>, ptr %a @@ -616,7 +611,7 @@ ; CHECK-LABEL: fcvtzu_v1f64_v1i16: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 -; CHECK-NEXT: ptrue p0.d +; CHECK-NEXT: ptrue p0.d, vl4 ; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h @@ -642,7 +637,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl4 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h @@ -660,7 +654,6 @@ ; VBITS_GE_256-NEXT: ptrue p0.d, vl4 ; VBITS_GE_256-NEXT: ld1d { z0.d }, p0/z, [x0, x8, lsl #3] ; VBITS_GE_256-NEXT: ld1d { z1.d }, p0/z, [x0] -; VBITS_GE_256-NEXT: ptrue p0.d ; VBITS_GE_256-NEXT: fcvtzu z0.d, p0/m, z0.d ; VBITS_GE_256-NEXT: fcvtzu z1.d, p0/m, z1.d ; VBITS_GE_256-NEXT: uzp1 z0.s, z0.s, z0.s @@ -675,7 +668,6 @@ ; VBITS_GE_512: // %bb.0: ; VBITS_GE_512-NEXT: ptrue p0.d, vl8 ; VBITS_GE_512-NEXT: ld1d { z0.d }, p0/z, [x0] -; VBITS_GE_512-NEXT: ptrue p0.d ; VBITS_GE_512-NEXT: fcvtzu z0.d, p0/m, z0.d ; VBITS_GE_512-NEXT: uzp1 z0.s, z0.s, z0.s ; VBITS_GE_512-NEXT: uzp1 z0.h, z0.h, z0.h @@ -690,9 +682,8 @@ ; CHECK-LABEL: fcvtzu_v16f64_v16i16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl16 -; CHECK-NEXT: ptrue p1.d ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: fcvtzu z0.d, p1/m, z0.d +; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d ; CHECK-NEXT: st1h { z0.d }, p0, [x1] ; CHECK-NEXT: ret %op1 = load <16 x double>, ptr %a @@ -705,9 +696,8 @@ ; CHECK-LABEL: fcvtzu_v32f64_v32i16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl32 -; CHECK-NEXT: ptrue p1.d ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: fcvtzu z0.d, p1/m, z0.d +; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d ; CHECK-NEXT: st1h { z0.d }, p0, [x1] ; CHECK-NEXT: ret %op1 = load <32 x double>, ptr %a @@ -748,7 +738,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl4 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 @@ -765,7 +754,6 @@ ; VBITS_GE_256-NEXT: ptrue p0.d, vl4 ; VBITS_GE_256-NEXT: ld1d { z0.d }, p0/z, [x0, x8, lsl #3] ; VBITS_GE_256-NEXT: ld1d { z1.d }, p0/z, [x0] -; VBITS_GE_256-NEXT: ptrue p0.d ; VBITS_GE_256-NEXT: fcvtzu z0.d, p0/m, z0.d ; VBITS_GE_256-NEXT: fcvtzu z1.d, p0/m, z1.d ; VBITS_GE_256-NEXT: uzp1 z0.s, z0.s, z0.s @@ -779,9 +767,8 @@ ; VBITS_GE_512-LABEL: fcvtzu_v8f64_v8i32: ; VBITS_GE_512: // %bb.0: ; VBITS_GE_512-NEXT: ptrue p0.d, vl8 -; VBITS_GE_512-NEXT: ptrue p1.d ; VBITS_GE_512-NEXT: ld1d { z0.d }, p0/z, [x0] -; VBITS_GE_512-NEXT: fcvtzu z0.d, p1/m, z0.d +; VBITS_GE_512-NEXT: fcvtzu z0.d, p0/m, z0.d ; VBITS_GE_512-NEXT: st1w { z0.d }, p0, [x1] ; VBITS_GE_512-NEXT: ret %op1 = load <8 x double>, ptr %a @@ -794,9 +781,8 @@ ; CHECK-LABEL: fcvtzu_v16f64_v16i32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl16 -; CHECK-NEXT: ptrue p1.d ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: fcvtzu z0.d, p1/m, z0.d +; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d ; CHECK-NEXT: st1w { z0.d }, p0, [x1] ; CHECK-NEXT: ret %op1 = load <16 x double>, ptr %a @@ -809,9 +795,8 @@ ; CHECK-LABEL: fcvtzu_v32f64_v32i32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl32 -; CHECK-NEXT: ptrue p1.d ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: fcvtzu z0.d, p1/m, z0.d +; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d ; CHECK-NEXT: st1w { z0.d }, p0, [x1] ; CHECK-NEXT: ret %op1 = load <32 x double>, ptr %a @@ -1251,7 +1236,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s, vl8 ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 @@ -1268,7 +1252,6 @@ ; VBITS_GE_256-NEXT: ptrue p0.s, vl8 ; VBITS_GE_256-NEXT: ld1w { z0.s }, p0/z, [x0, x8, lsl #2] ; VBITS_GE_256-NEXT: ld1w { z1.s }, p0/z, [x0] -; VBITS_GE_256-NEXT: ptrue p0.s ; VBITS_GE_256-NEXT: fcvtzs z0.s, p0/m, z0.s ; VBITS_GE_256-NEXT: fcvtzs z1.s, p0/m, z1.s ; VBITS_GE_256-NEXT: uzp1 z0.h, z0.h, z0.h @@ -1282,9 +1265,8 @@ ; VBITS_GE_512-LABEL: fcvtzs_v16f32_v16i16: ; VBITS_GE_512: // %bb.0: ; VBITS_GE_512-NEXT: ptrue p0.s, vl16 -; VBITS_GE_512-NEXT: ptrue p1.s ; VBITS_GE_512-NEXT: ld1w { z0.s }, p0/z, [x0] -; VBITS_GE_512-NEXT: fcvtzs z0.s, p1/m, z0.s +; VBITS_GE_512-NEXT: fcvtzs z0.s, p0/m, z0.s ; VBITS_GE_512-NEXT: st1h { z0.s }, p0, [x1] ; VBITS_GE_512-NEXT: ret %op1 = load <16 x float>, ptr %a @@ -1297,9 +1279,8 @@ ; CHECK-LABEL: fcvtzs_v32f32_v32i16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s, vl32 -; CHECK-NEXT: ptrue p1.s ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] -; CHECK-NEXT: fcvtzs z0.s, p1/m, z0.s +; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s ; CHECK-NEXT: st1h { z0.s }, p0, [x1] ; CHECK-NEXT: ret %op1 = load <32 x float>, ptr %a @@ -1312,9 +1293,8 @@ ; CHECK-LABEL: fcvtzs_v64f32_v64i16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s, vl64 -; CHECK-NEXT: ptrue p1.s ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] -; CHECK-NEXT: fcvtzs z0.s, p1/m, z0.s +; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s ; CHECK-NEXT: st1h { z0.s }, p0, [x1] ; CHECK-NEXT: ret %op1 = load <64 x float>, ptr %a @@ -1524,7 +1504,7 @@ ; CHECK-LABEL: fcvtzs_v1f64_v1i16: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 -; CHECK-NEXT: ptrue p0.d +; CHECK-NEXT: ptrue p0.d, vl4 ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h @@ -1550,7 +1530,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl4 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h @@ -1568,7 +1547,6 @@ ; VBITS_GE_256-NEXT: ptrue p0.d, vl4 ; VBITS_GE_256-NEXT: ld1d { z0.d }, p0/z, [x0, x8, lsl #3] ; VBITS_GE_256-NEXT: ld1d { z1.d }, p0/z, [x0] -; VBITS_GE_256-NEXT: ptrue p0.d ; VBITS_GE_256-NEXT: fcvtzs z0.d, p0/m, z0.d ; VBITS_GE_256-NEXT: fcvtzs z1.d, p0/m, z1.d ; VBITS_GE_256-NEXT: uzp1 z0.s, z0.s, z0.s @@ -1583,7 +1561,6 @@ ; VBITS_GE_512: // %bb.0: ; VBITS_GE_512-NEXT: ptrue p0.d, vl8 ; VBITS_GE_512-NEXT: ld1d { z0.d }, p0/z, [x0] -; VBITS_GE_512-NEXT: ptrue p0.d ; VBITS_GE_512-NEXT: fcvtzs z0.d, p0/m, z0.d ; VBITS_GE_512-NEXT: uzp1 z0.s, z0.s, z0.s ; VBITS_GE_512-NEXT: uzp1 z0.h, z0.h, z0.h @@ -1598,9 +1575,8 @@ ; CHECK-LABEL: fcvtzs_v16f64_v16i16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl16 -; CHECK-NEXT: ptrue p1.d ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: fcvtzs z0.d, p1/m, z0.d +; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d ; CHECK-NEXT: st1h { z0.d }, p0, [x1] ; CHECK-NEXT: ret %op1 = load <16 x double>, ptr %a @@ -1613,9 +1589,8 @@ ; CHECK-LABEL: fcvtzs_v32f64_v32i16: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl32 -; CHECK-NEXT: ptrue p1.d ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: fcvtzs z0.d, p1/m, z0.d +; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d ; CHECK-NEXT: st1h { z0.d }, p0, [x1] ; CHECK-NEXT: ret %op1 = load <32 x double>, ptr %a @@ -1656,7 +1631,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl4 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 @@ -1673,7 +1647,6 @@ ; VBITS_GE_256-NEXT: ptrue p0.d, vl4 ; VBITS_GE_256-NEXT: ld1d { z0.d }, p0/z, [x0, x8, lsl #3] ; VBITS_GE_256-NEXT: ld1d { z1.d }, p0/z, [x0] -; VBITS_GE_256-NEXT: ptrue p0.d ; VBITS_GE_256-NEXT: fcvtzs z0.d, p0/m, z0.d ; VBITS_GE_256-NEXT: fcvtzs z1.d, p0/m, z1.d ; VBITS_GE_256-NEXT: uzp1 z0.s, z0.s, z0.s @@ -1687,9 +1660,8 @@ ; VBITS_GE_512-LABEL: fcvtzs_v8f64_v8i32: ; VBITS_GE_512: // %bb.0: ; VBITS_GE_512-NEXT: ptrue p0.d, vl8 -; VBITS_GE_512-NEXT: ptrue p1.d ; VBITS_GE_512-NEXT: ld1d { z0.d }, p0/z, [x0] -; VBITS_GE_512-NEXT: fcvtzs z0.d, p1/m, z0.d +; VBITS_GE_512-NEXT: fcvtzs z0.d, p0/m, z0.d ; VBITS_GE_512-NEXT: st1w { z0.d }, p0, [x1] ; VBITS_GE_512-NEXT: ret %op1 = load <8 x double>, ptr %a @@ -1702,9 +1674,8 @@ ; CHECK-LABEL: fcvtzs_v16f64_v16i32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl16 -; CHECK-NEXT: ptrue p1.d ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: fcvtzs z0.d, p1/m, z0.d +; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d ; CHECK-NEXT: st1w { z0.d }, p0, [x1] ; CHECK-NEXT: ret %op1 = load <16 x double>, ptr %a @@ -1717,9 +1688,8 @@ ; CHECK-LABEL: fcvtzs_v32f64_v32i32: ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl32 -; CHECK-NEXT: ptrue p1.d ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: fcvtzs z0.d, p1/m, z0.d +; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d ; CHECK-NEXT: st1w { z0.d }, p0, [x1] ; CHECK-NEXT: ret %op1 = load <32 x double>, ptr %a diff --git a/llvm/test/CodeGen/AArch64/sve-fixed-length-int-to-fp.ll b/llvm/test/CodeGen/AArch64/sve-fixed-length-int-to-fp.ll --- a/llvm/test/CodeGen/AArch64/sve-fixed-length-int-to-fp.ll +++ b/llvm/test/CodeGen/AArch64/sve-fixed-length-int-to-fp.ll @@ -340,7 +340,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s, vl8 ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 @@ -357,7 +356,6 @@ ; VBITS_GE_256-NEXT: ptrue p0.s, vl8 ; VBITS_GE_256-NEXT: ld1w { z0.s }, p0/z, [x0, x8, lsl #2] ; VBITS_GE_256-NEXT: ld1w { z1.s }, p0/z, [x0] -; VBITS_GE_256-NEXT: ptrue p0.s ; VBITS_GE_256-NEXT: ucvtf z0.h, p0/m, z0.s ; VBITS_GE_256-NEXT: ucvtf z1.h, p0/m, z1.s ; VBITS_GE_256-NEXT: uzp1 z0.h, z0.h, z0.h @@ -372,7 +370,6 @@ ; VBITS_GE_512: // %bb.0: ; VBITS_GE_512-NEXT: ptrue p0.s, vl16 ; VBITS_GE_512-NEXT: ld1w { z0.s }, p0/z, [x0] -; VBITS_GE_512-NEXT: ptrue p0.s ; VBITS_GE_512-NEXT: ucvtf z0.h, p0/m, z0.s ; VBITS_GE_512-NEXT: ptrue p0.h, vl16 ; VBITS_GE_512-NEXT: uzp1 z0.h, z0.h, z0.h @@ -389,7 +386,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s, vl32 ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s ; CHECK-NEXT: ptrue p0.h, vl32 ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h @@ -406,7 +402,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s, vl64 ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s ; CHECK-NEXT: ptrue p0.h, vl64 ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h @@ -630,7 +625,7 @@ ; CHECK-LABEL: ucvtf_v2i64_v2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 -; CHECK-NEXT: ptrue p0.d +; CHECK-NEXT: ptrue p0.d, vl4 ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.d ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h @@ -645,7 +640,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl4 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.d ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h @@ -663,7 +657,6 @@ ; VBITS_GE_256-NEXT: ptrue p0.d, vl4 ; VBITS_GE_256-NEXT: ld1d { z0.d }, p0/z, [x0, x8, lsl #3] ; VBITS_GE_256-NEXT: ld1d { z1.d }, p0/z, [x0] -; VBITS_GE_256-NEXT: ptrue p0.d ; VBITS_GE_256-NEXT: ucvtf z0.h, p0/m, z0.d ; VBITS_GE_256-NEXT: ucvtf z1.h, p0/m, z1.d ; VBITS_GE_256-NEXT: uzp1 z0.s, z0.s, z0.s @@ -678,7 +671,6 @@ ; VBITS_GE_512: // %bb.0: ; VBITS_GE_512-NEXT: ptrue p0.d, vl8 ; VBITS_GE_512-NEXT: ld1d { z0.d }, p0/z, [x0] -; VBITS_GE_512-NEXT: ptrue p0.d ; VBITS_GE_512-NEXT: ucvtf z0.h, p0/m, z0.d ; VBITS_GE_512-NEXT: uzp1 z0.s, z0.s, z0.s ; VBITS_GE_512-NEXT: uzp1 z0.h, z0.h, z0.h @@ -694,7 +686,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl16 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.d ; CHECK-NEXT: ptrue p0.s, vl16 ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s @@ -711,7 +702,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl32 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: ucvtf z0.h, p0/m, z0.d ; CHECK-NEXT: ptrue p0.s, vl32 ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s @@ -755,7 +745,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl4 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 @@ -772,7 +761,6 @@ ; VBITS_GE_256-NEXT: ptrue p0.d, vl4 ; VBITS_GE_256-NEXT: ld1d { z0.d }, p0/z, [x0, x8, lsl #3] ; VBITS_GE_256-NEXT: ld1d { z1.d }, p0/z, [x0] -; VBITS_GE_256-NEXT: ptrue p0.d ; VBITS_GE_256-NEXT: ucvtf z0.s, p0/m, z0.d ; VBITS_GE_256-NEXT: ucvtf z1.s, p0/m, z1.d ; VBITS_GE_256-NEXT: uzp1 z0.s, z0.s, z0.s @@ -787,7 +775,6 @@ ; VBITS_GE_512: // %bb.0: ; VBITS_GE_512-NEXT: ptrue p0.d, vl8 ; VBITS_GE_512-NEXT: ld1d { z0.d }, p0/z, [x0] -; VBITS_GE_512-NEXT: ptrue p0.d ; VBITS_GE_512-NEXT: ucvtf z0.s, p0/m, z0.d ; VBITS_GE_512-NEXT: ptrue p0.s, vl8 ; VBITS_GE_512-NEXT: uzp1 z0.s, z0.s, z0.s @@ -804,7 +791,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl16 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d ; CHECK-NEXT: ptrue p0.s, vl16 ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s @@ -821,7 +807,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl32 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d ; CHECK-NEXT: ptrue p0.s, vl32 ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s @@ -1274,7 +1259,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s, vl8 ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: scvtf z0.h, p0/m, z0.s ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 @@ -1291,7 +1275,6 @@ ; VBITS_GE_256-NEXT: ptrue p0.s, vl8 ; VBITS_GE_256-NEXT: ld1w { z0.s }, p0/z, [x0, x8, lsl #2] ; VBITS_GE_256-NEXT: ld1w { z1.s }, p0/z, [x0] -; VBITS_GE_256-NEXT: ptrue p0.s ; VBITS_GE_256-NEXT: scvtf z0.h, p0/m, z0.s ; VBITS_GE_256-NEXT: scvtf z1.h, p0/m, z1.s ; VBITS_GE_256-NEXT: uzp1 z0.h, z0.h, z0.h @@ -1306,7 +1289,6 @@ ; VBITS_GE_512: // %bb.0: ; VBITS_GE_512-NEXT: ptrue p0.s, vl16 ; VBITS_GE_512-NEXT: ld1w { z0.s }, p0/z, [x0] -; VBITS_GE_512-NEXT: ptrue p0.s ; VBITS_GE_512-NEXT: scvtf z0.h, p0/m, z0.s ; VBITS_GE_512-NEXT: ptrue p0.h, vl16 ; VBITS_GE_512-NEXT: uzp1 z0.h, z0.h, z0.h @@ -1323,7 +1305,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s, vl32 ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: scvtf z0.h, p0/m, z0.s ; CHECK-NEXT: ptrue p0.h, vl32 ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h @@ -1340,7 +1321,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.s, vl64 ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.s ; CHECK-NEXT: scvtf z0.h, p0/m, z0.s ; CHECK-NEXT: ptrue p0.h, vl64 ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h @@ -1570,7 +1550,7 @@ ; CHECK-LABEL: scvtf_v2i64_v2f16: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 -; CHECK-NEXT: ptrue p0.d +; CHECK-NEXT: ptrue p0.d, vl4 ; CHECK-NEXT: scvtf z0.h, p0/m, z0.d ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h @@ -1585,7 +1565,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl4 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: scvtf z0.h, p0/m, z0.d ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: uzp1 z0.h, z0.h, z0.h @@ -1603,7 +1582,6 @@ ; VBITS_GE_256-NEXT: ptrue p0.d, vl4 ; VBITS_GE_256-NEXT: ld1d { z0.d }, p0/z, [x0, x8, lsl #3] ; VBITS_GE_256-NEXT: ld1d { z1.d }, p0/z, [x0] -; VBITS_GE_256-NEXT: ptrue p0.d ; VBITS_GE_256-NEXT: scvtf z0.h, p0/m, z0.d ; VBITS_GE_256-NEXT: scvtf z1.h, p0/m, z1.d ; VBITS_GE_256-NEXT: uzp1 z0.s, z0.s, z0.s @@ -1618,7 +1596,6 @@ ; VBITS_GE_512: // %bb.0: ; VBITS_GE_512-NEXT: ptrue p0.d, vl8 ; VBITS_GE_512-NEXT: ld1d { z0.d }, p0/z, [x0] -; VBITS_GE_512-NEXT: ptrue p0.d ; VBITS_GE_512-NEXT: scvtf z0.h, p0/m, z0.d ; VBITS_GE_512-NEXT: uzp1 z0.s, z0.s, z0.s ; VBITS_GE_512-NEXT: uzp1 z0.h, z0.h, z0.h @@ -1634,7 +1611,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl16 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: scvtf z0.h, p0/m, z0.d ; CHECK-NEXT: ptrue p0.s, vl16 ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s @@ -1651,7 +1627,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl32 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: scvtf z0.h, p0/m, z0.d ; CHECK-NEXT: ptrue p0.s, vl32 ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s @@ -1695,7 +1670,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl4 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: scvtf z0.s, p0/m, z0.d ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 @@ -1712,7 +1686,6 @@ ; VBITS_GE_256-NEXT: ptrue p0.d, vl4 ; VBITS_GE_256-NEXT: ld1d { z0.d }, p0/z, [x0, x8, lsl #3] ; VBITS_GE_256-NEXT: ld1d { z1.d }, p0/z, [x0] -; VBITS_GE_256-NEXT: ptrue p0.d ; VBITS_GE_256-NEXT: scvtf z0.s, p0/m, z0.d ; VBITS_GE_256-NEXT: scvtf z1.s, p0/m, z1.d ; VBITS_GE_256-NEXT: uzp1 z0.s, z0.s, z0.s @@ -1727,7 +1700,6 @@ ; VBITS_GE_512: // %bb.0: ; VBITS_GE_512-NEXT: ptrue p0.d, vl8 ; VBITS_GE_512-NEXT: ld1d { z0.d }, p0/z, [x0] -; VBITS_GE_512-NEXT: ptrue p0.d ; VBITS_GE_512-NEXT: scvtf z0.s, p0/m, z0.d ; VBITS_GE_512-NEXT: ptrue p0.s, vl8 ; VBITS_GE_512-NEXT: uzp1 z0.s, z0.s, z0.s @@ -1744,7 +1716,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl16 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: scvtf z0.s, p0/m, z0.d ; CHECK-NEXT: ptrue p0.s, vl16 ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s @@ -1761,7 +1732,6 @@ ; CHECK: // %bb.0: ; CHECK-NEXT: ptrue p0.d, vl32 ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] -; CHECK-NEXT: ptrue p0.d ; CHECK-NEXT: scvtf z0.s, p0/m, z0.d ; CHECK-NEXT: ptrue p0.s, vl32 ; CHECK-NEXT: uzp1 z0.s, z0.s, z0.s