Teach instcombine's visitLoad to scan back several instructions

to find opportunities for store-to-load forwarding or load CSE,
in the same way that visitStore scans back to do DSE. Also, define
a new helper function for testing whether the addresses of two
memory accesses are known to have the same value, and use it in
both visitStore and visitLoad.

These two changes allow instcombine to eliminate loads in code
produced by front-ends that frequently emit obviously redundant
addressing for memory references.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57608 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman
2008-10-15 23:19:35 +00:00
parent 95c2cc51eb
commit 2276a7bc8e
3 changed files with 68 additions and 10 deletions

View File

@@ -68,3 +68,11 @@ C: ; preds = %F, %T
%V = load i32* %P ; <i32> [#uses=1]
ret i32 %V
}
define double @test11(double* %p) {
%t0 = getelementptr double* %p, i32 1
store double 2.0, double* %t0
%t1 = getelementptr double* %p, i32 1
%x = load double* %t1
ret double %x
}