[LLVMbugs] [Bug 1097] NEW: Strength reduction misses IV reuse opportunities on 64-bit targets
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Mon Jan 8 08:04:12 PST 2007
http://llvm.org/bugs/show_bug.cgi?id=1097
Summary: Strength reduction misses IV reuse opportunities on 64-
bit targets
Product: libraries
Version: trunk
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: Loop Optimizer
AssignedTo: unassignedbugs at nondot.org
ReportedBy: djg at cray.com
The strength reduction pass is causing the code generator to miss opportunities
for using complex addressing modes.
For this test case:
define void %foo(double* %y) {
entry:
br label %bb
bb:
%i = phi i64 [ 0, %entry ], [ %k, %bb ]
%j = getelementptr double* %y, i64 %i
store double 0.000000e+00, double* %j
%k = add i64 %i, 1
%n = icmp eq i64 %k, 0
br bool %n, label %return, label %bb
return:
ret void
}
The strength reduction pass changes the output on x86-64 to have two induction
variables:
%iv..inc = add i64 %iv., 1
...
%iv.1.inc = add i64 %iv.1, 8
which causes the codegen to produce this:
.LBB1_1: #bb
movq $0, (%rdi)
addq $8, %rdi
incq %rax
cmpq $0, %rax
jne .LBB1_1 #bb
instead of this:
.LBB1_1: #bb
movq $0, (%rdi,%rax,8)
incq %rax
cmpq $0, %rax
jne .LBB1_1 #bb
Here's a patch that fixes this.
Index: LoopStrengthReduce.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp,v
retrieving revision 1.104
diff -u -r1.104 LoopStrengthReduce.cpp
--- LoopStrengthReduce.cpp
+++ LoopStrengthReduce.cpp
@@ -893,7 +893,7 @@
if (unsigned(abs(SInt)) < Scale || (SInt % Scale) != 0)
continue;
std::map<SCEVHandle, IVsOfOneStride>::iterator SI =
- IVsByStride.find(SCEVUnknown::getIntegerSCEV(SInt/Scale, Type::Int32Ty));
+ IVsByStride.find(SCEVUnknown::getIntegerSCEV(SInt/Scale, UIntPtrTy));
if (SI == IVsByStride.end())
continue;
for (std::vector<IVExpr>::iterator II = SI->second.IVs.begin(),
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
More information about the llvm-bugs
mailing list