diff options
author | Mehdi Amini <mehdi.amini@apple.com> | 2017-01-06 21:06:51 +0000 |
---|---|---|
committer | Mehdi Amini <mehdi.amini@apple.com> | 2017-01-06 21:06:51 +0000 |
commit | 27d224fbbb5185bb84df5535ff8682560796ee18 (patch) | |
tree | b15f5c6dc2dd9ef0917306bf26fa019fd55532d8 /llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp | |
parent | 218ecacbf10a238ce2f71d620fa510c9aada0e73 (diff) | |
download | bcm5719-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.cpp | 4 |
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); |