diff options
author | Chris Lattner <sabre@nondot.org> | 2002-08-22 20:22:55 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-08-22 20:22:55 +0000 |
commit | 8673e44639a77fae31e3f208ddbae507267d3267 (patch) | |
tree | 0facb0e32c29b4bb8438f3659555beef78961a61 /test | |
parent | c20e24524f6dcfb423b9c6d9d223ec11f13d3c84 (diff) |
Add a testcase that checks to make sure LICM uses basicaa correctly.
Add another gcse testcase.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3471 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/Analysis/BasicAA/gcsetest.ll | 16 | ||||
-rw-r--r-- | test/Analysis/BasicAA/licmtest.ll | 31 | ||||
-rw-r--r-- | test/Transforms/BasicAA/gcsetest.ll | 16 | ||||
-rw-r--r-- | test/Transforms/BasicAA/licmtest.ll | 31 |
4 files changed, 94 insertions, 0 deletions
diff --git a/test/Analysis/BasicAA/gcsetest.ll b/test/Analysis/BasicAA/gcsetest.ll index f6f7db933d..a49f3130bb 100644 --- a/test/Analysis/BasicAA/gcsetest.ll +++ b/test/Analysis/BasicAA/gcsetest.ll @@ -21,3 +21,19 @@ int %test() { ret int %X } +int %test2() { + %A1 = load int* %A + br label %Loop +Loop: + %AP = phi int [0, %0], [%X, %Loop] + store int %AP, int* %B ; Store cannot alias %A + + %A2 = load int* %A + %X = sub int %A1, %A2 + %c = seteq int %X, 0 + br bool %c, label %out, label %Loop + +out: + ret int %X +} + diff --git a/test/Analysis/BasicAA/licmtest.ll b/test/Analysis/BasicAA/licmtest.ll new file mode 100644 index 0000000000..92f58e8b33 --- /dev/null +++ b/test/Analysis/BasicAA/licmtest.ll @@ -0,0 +1,31 @@ +; Test that LICM uses basicaa to do alias analysis, which is capable of +; disambiguating some obvious cases. The ToRemove load should be eliminated +; in this testcase. This testcase was carefully contrived so that GCSE would +; not be able to eliminate the load itself, without licm's help. This is +; because, for GCSE, the load is killed by the dummy basic block. + +; RUN: if as < %s | opt -basicaa -licm -gcse -simplifycfg -instcombine | dis | grep ToRemove +; RUN: then exit 1 +; RUN: else exit 0 +; RUN: fi + +%A = global int 7 +%B = global int 8 +implementation + +int %test(bool %c) { + %Atmp = load int* %A + br label %Loop +Loop: + %ToRemove = load int* %A + store int %ToRemove, int* %B ; Store cannot alias %A + + br bool %c, label %Out, label %Loop +Out: + ret int 7 + +Dummy: + store int 7, int* %A + br label %Loop +} + diff --git a/test/Transforms/BasicAA/gcsetest.ll b/test/Transforms/BasicAA/gcsetest.ll index f6f7db933d..a49f3130bb 100644 --- a/test/Transforms/BasicAA/gcsetest.ll +++ b/test/Transforms/BasicAA/gcsetest.ll @@ -21,3 +21,19 @@ int %test() { ret int %X } +int %test2() { + %A1 = load int* %A + br label %Loop +Loop: + %AP = phi int [0, %0], [%X, %Loop] + store int %AP, int* %B ; Store cannot alias %A + + %A2 = load int* %A + %X = sub int %A1, %A2 + %c = seteq int %X, 0 + br bool %c, label %out, label %Loop + +out: + ret int %X +} + diff --git a/test/Transforms/BasicAA/licmtest.ll b/test/Transforms/BasicAA/licmtest.ll new file mode 100644 index 0000000000..92f58e8b33 --- /dev/null +++ b/test/Transforms/BasicAA/licmtest.ll @@ -0,0 +1,31 @@ +; Test that LICM uses basicaa to do alias analysis, which is capable of +; disambiguating some obvious cases. The ToRemove load should be eliminated +; in this testcase. This testcase was carefully contrived so that GCSE would +; not be able to eliminate the load itself, without licm's help. This is +; because, for GCSE, the load is killed by the dummy basic block. + +; RUN: if as < %s | opt -basicaa -licm -gcse -simplifycfg -instcombine | dis | grep ToRemove +; RUN: then exit 1 +; RUN: else exit 0 +; RUN: fi + +%A = global int 7 +%B = global int 8 +implementation + +int %test(bool %c) { + %Atmp = load int* %A + br label %Loop +Loop: + %ToRemove = load int* %A + store int %ToRemove, int* %B ; Store cannot alias %A + + br bool %c, label %Out, label %Loop +Out: + ret int 7 + +Dummy: + store int 7, int* %A + br label %Loop +} + |