From 0fe64812d86ca387115d5b25eb24bfb2287c3b8a Mon Sep 17 00:00:00 2001 From: David Green Date: Sun, 28 Feb 2021 11:13:49 +0000 Subject: [PATCH] [ARM] VECTOR_REG_CAST undef -> undef Propagate undef through VECTOR_REG_CAST nodes, allowing extra simplification in some patterns. --- llvm/lib/Target/ARM/ARMISelLowering.cpp | 4 ++++ llvm/test/CodeGen/Thumb2/mve-be.ll | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index cc326b9..4fca4f5 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -14020,6 +14020,10 @@ PerformVECTOR_REG_CASTCombine(SDNode *N, TargetLowering::DAGCombinerInfo &DCI, if (ST->isLittle()) return DCI.DAG.getNode(ISD::BITCAST, dl, VT, Op); + // VECTOR_REG_CAST undef -> undef + if (Op.isUndef()) + return DCI.DAG.getUNDEF(VT); + // VECTOR_REG_CAST(VECTOR_REG_CAST(x)) == VECTOR_REG_CAST(x) if (Op->getOpcode() == ARMISD::VECTOR_REG_CAST) { // If the valuetypes are the same, we can remove the cast entirely. diff --git a/llvm/test/CodeGen/Thumb2/mve-be.ll b/llvm/test/CodeGen/Thumb2/mve-be.ll index 049f77e..d941036 100644 --- a/llvm/test/CodeGen/Thumb2/mve-be.ll +++ b/llvm/test/CodeGen/Thumb2/mve-be.ll @@ -355,4 +355,13 @@ entry: ret void } +define arm_aapcs_vfpcc <8 x half> @undef_one() { +; CHECK-LABEL: undef_one: +; CHECK: @ %bb.0: +; CHECK-NEXT: bx lr + %c = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v4f32(<4 x float> undef) + ret <8 x half> %c +} + +declare <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v4f32(<4 x float>) declare <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32>) -- 2.7.4