blob: f015834f87cb462283b39ef2ce7bf07985c6fe8d [file] [log] [blame]
Chris Lattner82ad3522009-10-20 20:39:43 +00001; RUN: opt < %s -ipsccp -S | FileCheck %s
Chris Lattner3e5b0302009-11-02 18:22:51 +00002; XFAIL: *
Dan Gohmanf17a25c2007-07-18 16:29:46 +00003
Chris Lattner82ad3522009-10-20 20:39:43 +00004;;======================== test1
5
6define internal i32 @test1a(i32 %A) {
7 %X = add i32 1, 2
Tanya Lattnerba93e2d2008-03-19 04:14:49 +00008 ret i32 %A
Dan Gohmanf17a25c2007-07-18 16:29:46 +00009}
Chris Lattner82ad3522009-10-20 20:39:43 +000010; CHECK: define internal i32 @test1a
11; CHECK: ret i32 undef
Dan Gohmanf17a25c2007-07-18 16:29:46 +000012
Chris Lattner82ad3522009-10-20 20:39:43 +000013define i32 @test1b() {
14 %X = call i32 @test1a( i32 17 )
Tanya Lattnerba93e2d2008-03-19 04:14:49 +000015 ret i32 %X
Chris Lattner82ad3522009-10-20 20:39:43 +000016
17; CHECK: define i32 @test1b
18; CHECK: ret i32 17
Dan Gohmanf17a25c2007-07-18 16:29:46 +000019}
Tanya Lattnerba93e2d2008-03-19 04:14:49 +000020
Chris Lattner82ad3522009-10-20 20:39:43 +000021
22
23;;======================== test2
24
25define internal i32 @test2a(i32 %A) {
26 %C = icmp eq i32 %A, 0
27 br i1 %C, label %T, label %F
28T:
29 %B = call i32 @test2a( i32 0 )
30 ret i32 0
31F:
32 %C.upgrd.1 = call i32 @test2a(i32 1)
33 ret i32 %C.upgrd.1
34}
35; CHECK: define internal i32 @test2a
36; CHECK-NEXT: br label %T
37; CHECK: ret i32 undef
38
39
40define i32 @test2b() {
41 %X = call i32 @test2a(i32 0)
42 ret i32 %X
43}
44; CHECK: define i32 @test2b
45; CHECK-NEXT: %X = call i32 @test2a(i32 0)
46; CHECK-NEXT: ret i32 0
47
48
49;;======================== test3
50
51@G = internal global i32 undef
52
53define void @test3a() {
54 %X = load i32* @G
55 store i32 %X, i32* @G
56 ret void
57}
58; CHECK: define void @test3a
59; CHECK-NEXT: ret void
60
61
62define i32 @test3b() {
63 %V = load i32* @G
64 %C = icmp eq i32 %V, 17
65 br i1 %C, label %T, label %F
66T:
67 store i32 17, i32* @G
68 ret i32 %V
69F:
70 store i32 123, i32* @G
71 ret i32 0
72}
73; CHECK: define i32 @test3b
74; CHECK-NOT: store
75; CHECK: ret i32 0
Chris Lattnerf3eec132009-10-20 21:00:47 +000076
77
78;;======================== test4
79
80define internal {i64,i64} @test4a() {
81 %a = insertvalue {i64,i64} undef, i64 4, 1
82 %b = insertvalue {i64,i64} %a, i64 5, 0
83 ret {i64,i64} %b
84}
85
86define i64 @test4b() {
87 %a = invoke {i64,i64} @test4a()
88 to label %A unwind label %B
89A:
90 %b = extractvalue {i64,i64} %a, 0
91 %c = call i64 @test4c(i64 %b)
92 ret i64 %c
93B:
94 ret i64 0
95}
96; CHECK: define i64 @test4b()
97; CHECK: %c = call i64 @test4c(i64 5)
98; CHECK-NEXT: ret i64 5
99
100
101define internal i64 @test4c(i64 %a) {
102 ret i64 %a
103}
104; CHECK: define internal i64 @test4c
105; CHECK: ret i64 undef
Chris Lattner7d7f7fb2009-10-20 21:04:26 +0000106
107
108
109;;======================== test5
110
111; PR4313
112define internal {i64,i64} @test5a() {
113 %a = insertvalue {i64,i64} undef, i64 4, 1
114 %b = insertvalue {i64,i64} %a, i64 5, 0
115 ret {i64,i64} %b
116}
117
118define i64 @test5b() {
119 %a = invoke {i64,i64} @test5a()
120 to label %A unwind label %B
121A:
122 %c = call i64 @test5c({i64,i64} %a)
123 ret i64 %c
124B:
125 ret i64 0
126}
127
128; CHECK: define i64 @test5b()
129; CHECK: A:
130; CHECK-NEXT: %c = call i64 @test5c(%0 %a)
131; CHECK-NEXT: ret i64 %c
132
133define internal i64 @test5c({i64,i64} %a) {
134 %b = extractvalue {i64,i64} %a, 0
135 ret i64 %b
136}
137
Chris Lattner29cc27a2009-11-02 07:33:59 +0000138
139;;======================== test6
140
141define i64 @test6a() {
142 ret i64 0
143}
144
145define i64 @test6b() {
146 %a = call i64 @test6a()
147 ret i64 %a
148}
149; CHECK: define i64 @test6b
150; CHECK: ret i64 0
151