[llvm-commits] [llvm] r54466 - /llvm/trunk/test/Transforms/SRETPromotion/basictest.ll
Matthijs Kooijman
matthijs at stdin.nl
Thu Aug 7 08:55:21 PDT 2008
Author: matthijs
Date: Thu Aug 7 10:55:18 2008
New Revision: 54466
URL: http://llvm.org/viewvc/llvm-project?rev=54466&view=rev
Log:
Add a basic test for the SRETPromotion pass.
Added:
llvm/trunk/test/Transforms/SRETPromotion/basictest.ll
Added: llvm/trunk/test/Transforms/SRETPromotion/basictest.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SRETPromotion/basictest.ll?rev=54466&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/SRETPromotion/basictest.ll (added)
+++ llvm/trunk/test/Transforms/SRETPromotion/basictest.ll Thu Aug 7 10:55:18 2008
@@ -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
+}
More information about the llvm-commits
mailing list