From effab8fa2413e96b6a2ce2bbeefe35fe478ee028 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Fri, 9 Dec 2011 23:54:42 +0000 Subject: [PATCH] Splats can contain undef's; make sure to handle them correctly. PR11526. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146299 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMISelLowering.cpp | 3 +-- test/CodeGen/ARM/vmov.ll | 10 ++++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/Target/ARM/ARMISelLowering.cpp b/lib/Target/ARM/ARMISelLowering.cpp index f09a1c7e4f7..2045073fb6c 100644 --- a/lib/Target/ARM/ARMISelLowering.cpp +++ b/lib/Target/ARM/ARMISelLowering.cpp @@ -3984,8 +3984,7 @@ SDValue ARMTargetLowering::LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG, // Use vmov.f32 to materialize other v2f32 and v4f32 splats. if (VT == MVT::v2f32 || VT == MVT::v4f32) { - ConstantFPSDNode *C = cast(Op.getOperand(0)); - int ImmVal = ARM_AM::getFP32Imm(C->getValueAPF()); + int ImmVal = ARM_AM::getFP32Imm(SplatBits); if (ImmVal != -1) { SDValue Val = DAG.getTargetConstant(ImmVal, MVT::i32); return DAG.getNode(ARMISD::VMOVFPIMM, dl, VT, Val); diff --git a/test/CodeGen/ARM/vmov.ll b/test/CodeGen/ARM/vmov.ll index 0396a41a35e..be95657915c 100644 --- a/test/CodeGen/ARM/vmov.ll +++ b/test/CodeGen/ARM/vmov.ll @@ -371,3 +371,13 @@ entry: store <4 x float> , <4 x float>* %p, align 4 ret void } + +define void @v_mov_v4f32_undef(<4 x float> * nocapture %p) nounwind { +entry: +;CHECK: v_mov_v4f32_undef: +;CHECK: vmov.f32 q{{.*}}, #1.000000e+00 + %a = load <4 x float> *%p + %b = fadd <4 x float> %a, + store <4 x float> %b, <4 x float> *%p + ret void +}