diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-02-06 15:37:09 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-02-06 15:37:09 +0000 |
| commit | 9e369f2a510a6f3b014fd8e6e2dd5e054f7735e9 (patch) | |
| tree | 49eaf66a18e22a5fe6fb79b944500bff1f049b95 /llvm/lib/Target | |
| parent | 11e4d1146f2f1f6698bb2c7bf726d9ddfc6aa10e (diff) | |
| download | bcm5719-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.cpp | 3 |
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); |

