From 8673e44639a77fae31e3f208ddbae507267d3267 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 22 Aug 2002 20:22:55 +0000 Subject: [PATCH] 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 --- test/Analysis/BasicAA/gcsetest.ll | 16 +++++++++++++++ test/Analysis/BasicAA/licmtest.ll | 31 +++++++++++++++++++++++++++++ test/Transforms/BasicAA/gcsetest.ll | 16 +++++++++++++++ test/Transforms/BasicAA/licmtest.ll | 31 +++++++++++++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 test/Analysis/BasicAA/licmtest.ll create mode 100644 test/Transforms/BasicAA/licmtest.ll diff --git a/test/Analysis/BasicAA/gcsetest.ll b/test/Analysis/BasicAA/gcsetest.ll index f6f7db933d3..a49f3130bb0 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 00000000000..92f58e8b33f --- /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 f6f7db933d3..a49f3130bb0 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 00000000000..92f58e8b33f --- /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 +} +