blob: 00542e3ec2445637808bbff713a92d59e654dbd9 [file] [log] [blame]
Reid Klecknercdb4e642014-06-30 20:44:28 +00001; RUN: opt < %s -argpromotion -S | FileCheck %s
Chandler Carruthaddcda42017-02-09 23:46:27 +00002; RUN: opt < %s -passes=argpromotion -S | FileCheck %s
Chris Lattnerb5bd9242008-01-11 22:31:41 +00003
Reid Klecknercdb4e642014-06-30 20:44:28 +00004target 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"
5
6%struct.ss = type { i32, i64 }
Chris Lattnerb5bd9242008-01-11 22:31:41 +00007
8define internal void @f(%struct.ss* byval %b) nounwind {
9entry:
Reid Klecknerda748f12017-08-04 17:09:11 +000010 %tmp = getelementptr %struct.ss, %struct.ss* %b, i32 0, i32 0
11 %tmp1 = load i32, i32* %tmp, align 4
12 %tmp2 = add i32 %tmp1, 1
Reid Klecknercdb4e642014-06-30 20:44:28 +000013 store i32 %tmp2, i32* %tmp, align 4
14 ret void
Chris Lattnerb5bd9242008-01-11 22:31:41 +000015}
16
Reid Klecknerda748f12017-08-04 17:09:11 +000017; CHECK-LABEL: define internal void @f(i32 %b.0, i64 %b.1)
18; CHECK: alloca %struct.ss{{$}}
19; CHECK: store i32 %b.0
20; CHECK: store i64 %b.1
21
22define internal void @g(%struct.ss* byval align 32 %b) nounwind {
Chris Lattnerb5bd9242008-01-11 22:31:41 +000023entry:
Reid Klecknerda748f12017-08-04 17:09:11 +000024 %tmp = getelementptr %struct.ss, %struct.ss* %b, i32 0, i32 0
25 %tmp1 = load i32, i32* %tmp, align 4
26 %tmp2 = add i32 %tmp1, 1
27 store i32 %tmp2, i32* %tmp, align 4
28 ret void
29}
30
31; CHECK-LABEL: define internal void @g(i32 %b.0, i64 %b.1)
32; CHECK: alloca %struct.ss, align 32
33; CHECK: store i32 %b.0
34; CHECK: store i64 %b.1
35
36define i32 @main() nounwind {
37entry:
38 %S = alloca %struct.ss
39 %tmp1 = getelementptr %struct.ss, %struct.ss* %S, i32 0, i32 0
Reid Klecknercdb4e642014-06-30 20:44:28 +000040 store i32 1, i32* %tmp1, align 8
Reid Klecknerda748f12017-08-04 17:09:11 +000041 %tmp4 = getelementptr %struct.ss, %struct.ss* %S, i32 0, i32 1
Reid Klecknercdb4e642014-06-30 20:44:28 +000042 store i64 2, i64* %tmp4, align 4
Reid Klecknerda748f12017-08-04 17:09:11 +000043 call void @f(%struct.ss* byval %S) nounwind
44 call void @g(%struct.ss* byval %S) nounwind
Reid Klecknercdb4e642014-06-30 20:44:28 +000045 ret i32 0
Chris Lattnerb5bd9242008-01-11 22:31:41 +000046}
Reid Klecknerda748f12017-08-04 17:09:11 +000047
48; CHECK-LABEL: define i32 @main
49; CHECK: call void @f(i32 %{{.*}}, i64 %{{.*}})
50; CHECK: call void @g(i32 %{{.*}}, i64 %{{.*}})