diff options
author | Chris Lattner <sabre@nondot.org> | 2008-12-10 01:04:47 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-12-10 01:04:47 +0000 |
commit | b957bda0bcb81c88ed4464d07100c349af76890f (patch) | |
tree | 6f070c3d4306f96d673ec5b9632d83ec7f434f45 /test/Analysis/BasicAA | |
parent | 2ce4e5caddeacac0bde7933ce586a794bac2019b (diff) | |
download | external_llvm-b957bda0bcb81c88ed4464d07100c349af76890f.zip external_llvm-b957bda0bcb81c88ed4464d07100c349af76890f.tar.gz external_llvm-b957bda0bcb81c88ed4464d07100c349af76890f.tar.bz2 |
Allow basicaa to walk through geps with identical indices in
parallel, allowing it to decide that P/Q must alias if A/B
must alias in things like:
P = gep A, 0, i, 1
Q = gep B, 0, i, 1
This allows GVN to delete 62 more instructions out of 403.gcc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60820 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis/BasicAA')
-rw-r--r-- | test/Analysis/BasicAA/2008-12-09-GEP-IndicesAlias.ll | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/Analysis/BasicAA/2008-12-09-GEP-IndicesAlias.ll b/test/Analysis/BasicAA/2008-12-09-GEP-IndicesAlias.ll new file mode 100644 index 0000000..967a36e --- /dev/null +++ b/test/Analysis/BasicAA/2008-12-09-GEP-IndicesAlias.ll @@ -0,0 +1,16 @@ +; RUN: llvm-as < %s | opt -aa-eval -print-all-alias-modref-info -disable-output |& grep {MustAlias:.*%R,.*%r} +; Make sure that basicaa thinks R and r are must aliases. + +define i32 @test(i8 * %P) { +entry: + %Q = bitcast i8* %P to {i32, i32}* + %R = getelementptr {i32, i32}* %Q, i32 0, i32 1 + %S = load i32* %R + + %q = bitcast i8* %P to {i32, i32}* + %r = getelementptr {i32, i32}* %q, i32 0, i32 1 + %s = load i32* %r + + %t = sub i32 %S, %s + ret i32 %t +} |