diff options
| author | Matthijs Kooijman <matthijs@stdin.nl> | 2008-08-07 15:55:18 +0000 |
|---|---|---|
| committer | Matthijs Kooijman <matthijs@stdin.nl> | 2008-08-07 15:55:18 +0000 |
| commit | d705b2be1f5a9256be919783e8981c41ade4a97e (patch) | |
| tree | 146ee7b913ec45df2f347319b3c0d37737fb3bd0 | |
| parent | 0620096c185a9688e852ca564b980cc4ea9d270a (diff) | |
| download | bcm5719-llvm-d705b2be1f5a9256be919783e8981c41ade4a97e.tar.gz bcm5719-llvm-d705b2be1f5a9256be919783e8981c41ade4a97e.zip | |
Add a basic test for the SRETPromotion pass.
llvm-svn: 54466
| -rw-r--r-- | llvm/test/Transforms/SRETPromotion/basictest.ll | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SRETPromotion/basictest.ll b/llvm/test/Transforms/SRETPromotion/basictest.ll new file mode 100644 index 00000000000..4146cce46ed --- /dev/null +++ b/llvm/test/Transforms/SRETPromotion/basictest.ll @@ -0,0 +1,33 @@ +; RUN: llvm-as < %s | opt -sretpromotion | llvm-dis > %t +; RUN: cat %t | grep sret | count 1 + +; This function is promotable +define internal void @promotable({i32, i32}* sret %s) { + %A = getelementptr {i32, i32}* %s, i32 0, i32 0 + store i32 0, i32* %A + %B = getelementptr {i32, i32}* %s, i32 0, i32 0 + store i32 1, i32* %B + ret void +} + +; This function is not promotable (due to it's use below) +define internal void @notpromotable({i32, i32}* sret %s) { + %A = getelementptr {i32, i32}* %s, i32 0, i32 0 + store i32 0, i32* %A + %B = getelementptr {i32, i32}* %s, i32 0, i32 0 + store i32 1, i32* %B + ret void +} + +define void @caller({i32, i32}* %t) { + %s = alloca {i32, i32} + call void @promotable({i32, i32}* %s) + %A = getelementptr {i32, i32}* %s, i32 0, i32 0 + %a = load i32* %A + %B = getelementptr {i32, i32}* %s, i32 0, i32 0 + %b = load i32* %B + ; This passes in something that's not an alloca, which makes the argument not + ; promotable + call void @notpromotable({i32, i32}* %t) + ret void +} |

