summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp
diff options
context:
space:
mode:
authorMehdi Amini <mehdi.amini@apple.com>2017-01-06 21:06:51 +0000
committerMehdi Amini <mehdi.amini@apple.com>2017-01-06 21:06:51 +0000
commit27d224fbbb5185bb84df5535ff8682560796ee18 (patch)
treeb15f5c6dc2dd9ef0917306bf26fa019fd55532d8 /llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp
parent218ecacbf10a238ce2f71d620fa510c9aada0e73 (diff)
downloadbcm5719-llvm-27d224fbbb5185bb84df5535ff8682560796ee18.tar.gz
bcm5719-llvm-27d224fbbb5185bb84df5535ff8682560796ee18.zip
Fix LoopLoadElimination to keep original alignment on the inital hoisted store
This is fixing a bug where Loop Vectorization is widening a load but with a lower alignment. Hoisting the load without propagating the alignment will allow inst-combine to later deduce a higher alignment that what the pointer actually is. Differential Revision: https://reviews.llvm.org/D28408 llvm-svn: 291281
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp b/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp
index 08e7acdaaf7..8fb580183e3 100644
--- a/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp
@@ -415,7 +415,9 @@ public:
Value *InitialPtr = SEE.expandCodeFor(PtrSCEV->getStart(), Ptr->getType(),
PH->getTerminator());
Value *Initial =
- new LoadInst(InitialPtr, "load_initial", PH->getTerminator());
+ new LoadInst(InitialPtr, "load_initial", /* isVolatile */ false,
+ Cand.Load->getAlignment(), PH->getTerminator());
+
PHINode *PHI = PHINode::Create(Initial->getType(), 2, "store_forwarded",
&L->getHeader()->front());
PHI->addIncoming(Initial, PH);
OpenPOWER on IntegriCloud