[opaque pointer type] Add textual IR support for explicit type parameter to load...
[oota-llvm.git] / test / Transforms / ArgumentPromotion / byval.ll
index 0daa033e7c86a8c42744a9d02563bd33f47402c6..b091b09a3597a41f9ede355767745946b61b2ffe 100644 (file)
@@ -1,24 +1,28 @@
-; RUN: opt %s -argpromotion -scalarrepl -S | not grep load
-; Argpromote + scalarrepl should change this to passing the two integers by value.
+; RUN: opt < %s -argpromotion -S | FileCheck %s
 
-       %struct.ss = type { i32, i64 }
+target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
+
+%struct.ss = type { i32, i64 }
 
 define internal void @f(%struct.ss* byval  %b) nounwind  {
+; CHECK-LABEL: define internal void @f(i32 %b.0, i64 %b.1)
 entry:
-       %tmp = getelementptr %struct.ss* %b, i32 0, i32 0               ; <i32*> [#uses=2]
-       %tmp1 = load i32* %tmp, align 4         ; <i32> [#uses=1]
-       %tmp2 = add i32 %tmp1, 1                ; <i32> [#uses=1]
-       store i32 %tmp2, i32* %tmp, align 4
-       ret void
+  %tmp = getelementptr %struct.ss, %struct.ss* %b, i32 0, i32 0                ; <i32*> [#uses=2]
+  %tmp1 = load i32, i32* %tmp, align 4         ; <i32> [#uses=1]
+  %tmp2 = add i32 %tmp1, 1             ; <i32> [#uses=1]
+  store i32 %tmp2, i32* %tmp, align 4
+  ret void
 }
 
 define i32 @main() nounwind  {
+; CHECK-LABEL: define i32 @main
 entry:
-       %S = alloca %struct.ss          ; <%struct.ss*> [#uses=4]
-       %tmp1 = getelementptr %struct.ss* %S, i32 0, i32 0              ; <i32*> [#uses=1]
-       store i32 1, i32* %tmp1, align 8
-       %tmp4 = getelementptr %struct.ss* %S, i32 0, i32 1              ; <i64*> [#uses=1]
-       store i64 2, i64* %tmp4, align 4
-       call void @f( %struct.ss* byval  %S ) nounwind 
-       ret i32 0
+  %S = alloca %struct.ss               ; <%struct.ss*> [#uses=4]
+  %tmp1 = getelementptr %struct.ss, %struct.ss* %S, i32 0, i32 0               ; <i32*> [#uses=1]
+  store i32 1, i32* %tmp1, align 8
+  %tmp4 = getelementptr %struct.ss, %struct.ss* %S, i32 0, i32 1               ; <i64*> [#uses=1]
+  store i64 2, i64* %tmp4, align 4
+  call void @f( %struct.ss* byval  %S ) nounwind 
+; CHECK: call void @f(i32 %{{.*}}, i64 %{{.*}})
+  ret i32 0
 }