From f7333bf4a2c3d833a971b2dc3015aa5304fb4f0d Mon Sep 17 00:00:00 2001 From: Nate Begeman Date: Wed, 28 May 2008 00:24:25 +0000 Subject: [PATCH] Don't attempt to create VZEXT_LOAD out of an extload. This an issue where the code generator would do something like this: f64 = load f32 , f32mem v2f64 = insertelt undef, %0, 0 v2f64 = insertelt %1, 0.0, 1 into v2f64 = vzext_load f32mem which on x86 is movsd, when you really wanted a cvtss2sd/movsd pair. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51624 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86ISelLowering.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 2a9cef1223f..5343971d34b 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -6324,6 +6324,11 @@ static SDOperand PerformBuildVectorCombine(SDNode *N, SelectionDAG &DAG, // Transform it into VZEXT_LOAD addr. LoadSDNode *LD = cast(Base); + + // Load must not be an extload. + if (LD->getExtensionType() != ISD::NON_EXTLOAD) + return SDOperand(); + return DAG.getNode(X86ISD::VZEXT_LOAD, VT, LD->getChain(), LD->getBasePtr()); } -- 2.34.1