46 lines
1.8 KiB
Diff
46 lines
1.8 KiB
Diff
commit ab60b05a472e8651cbe53c19513b7e62b9ff32df
|
|
Author: Mikael Holmen <mikael.holmen@ericsson.com>
|
|
Date: Thu Feb 1 06:38:34 2018 +0000
|
|
|
|
[LSR] Don't force bases of foldable formulae to the final type.
|
|
|
|
Summary:
|
|
Before emitting code for scaled registers, we prevent
|
|
SCEVExpander from hoisting any scaled addressing mode
|
|
by emitting all the bases first. However, these bases
|
|
are being forced to the final type, resulting in some
|
|
odd code.
|
|
|
|
For example, if the type of the base is an integer and
|
|
the final type is a pointer, we will emit an inttoptr
|
|
for the base, a ptrtoint for the scale, and then a
|
|
'reverse' GEP where the GEP pointer is actually the base
|
|
integer and the index is the pointer. It's more intuitive
|
|
to use the pointer as a pointer and the integer as index.
|
|
|
|
Patch by: Bevin Hansson
|
|
|
|
Reviewers: atrick, qcolombet, sanjoy
|
|
|
|
Reviewed By: qcolombet
|
|
|
|
Subscribers: llvm-commits
|
|
|
|
Differential Revision: https://reviews.llvm.org/D42103
|
|
|
|
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@323946 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
|
|
diff --git a/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/lib/Transforms/Scalar/LoopStrengthReduce.cpp
|
|
index 332c074a1df..4b8e2286ed9 100644
|
|
--- a/lib/Transforms/Scalar/LoopStrengthReduce.cpp
|
|
+++ b/lib/Transforms/Scalar/LoopStrengthReduce.cpp
|
|
@@ -4993,7 +4993,7 @@ Value *LSRInstance::Expand(const LSRUse &LU, const LSRFixup &LF,
|
|
// Unless the addressing mode will not be folded.
|
|
if (!Ops.empty() && LU.Kind == LSRUse::Address &&
|
|
isAMCompletelyFolded(TTI, LU, F)) {
|
|
- Value *FullV = Rewriter.expandCodeFor(SE.getAddExpr(Ops), Ty);
|
|
+ Value *FullV = Rewriter.expandCodeFor(SE.getAddExpr(Ops), nullptr);
|
|
Ops.clear();
|
|
Ops.push_back(SE.getUnknown(FullV));
|
|
}
|