summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2016-02-06 15:37:09 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2016-02-06 15:37:09 +0000
commit9e369f2a510a6f3b014fd8e6e2dd5e054f7735e9 (patch)
tree49eaf66a18e22a5fe6fb79b944500bff1f049b95 /llvm/lib/Target
parent11e4d1146f2f1f6698bb2c7bf726d9ddfc6aa10e (diff)
downloadbcm5719-llvm-9e369f2a510a6f3b014fd8e6e2dd5e054f7735e9.tar.gz
bcm5719-llvm-9e369f2a510a6f3b014fd8e6e2dd5e054f7735e9.zip
[X86][SSE] Don't replace an existing 32-bit load with its duplicate
If we are already loading a single 32-bit float/integer then just reuse it. Fix for regression in D16729 llvm-svn: 259991
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 873d1429352..31be8e3e5f3 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -5677,7 +5677,8 @@ static SDValue EltsFromConsecutiveLoads(EVT VT, ArrayRef<SDValue> Elts,
MVT VecSVT = VT.isFloatingPoint() ? MVT::f32 : MVT::i32;
MVT VecVT = MVT::getVectorVT(VecSVT, VT.getSizeInBits() / 32);
if (TLI.isTypeLegal(VecVT)) {
- SDValue V = CreateLoad(VecSVT, LDBase);
+ SDValue V = LastLoadedElt != 0 ? CreateLoad(VecSVT, LDBase)
+ : DAG.getBitcast(VecSVT, EltBase);
V = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, VecVT, V);
V = DAG.getNode(X86ISD::VZEXT_MOVL, DL, VecVT, V);
return DAG.getBitcast(VT, V);
OpenPOWER on IntegriCloud