1 ; RUN: opt < %s -ipsccp -S | FileCheck %s
3 ;;======================== test1
5 define internal i32 @test1a(i32 %A) {
9 ; CHECK-LABEL: define internal i32 @test1a(
10 ; CHECK: ret i32 undef
12 define i32 @test1b() {
13 %X = call i32 @test1a( i32 17 )
16 ; CHECK-LABEL: define i32 @test1b(
22 ;;======================== test2
24 define internal i32 @test2a(i32 %A) {
25 %C = icmp eq i32 %A, 0
26 br i1 %C, label %T, label %F
28 %B = call i32 @test2a( i32 0 )
31 %C.upgrd.1 = call i32 @test2a(i32 1)
34 ; CHECK-LABEL: define internal i32 @test2a(
35 ; CHECK-NEXT: br label %T
36 ; CHECK: ret i32 undef
39 define i32 @test2b() {
40 %X = call i32 @test2a(i32 0)
43 ; CHECK-LABEL: define i32 @test2b(
44 ; CHECK-NEXT: %X = call i32 @test2a(i32 0)
45 ; CHECK-NEXT: ret i32 0
48 ;;======================== test3
50 @G = internal global i32 undef
52 define void @test3a() {
57 ; CHECK-LABEL: define void @test3a(
58 ; CHECK-NEXT: ret void
61 define i32 @test3b() {
63 %C = icmp eq i32 %V, 17
64 br i1 %C, label %T, label %F
69 store i32 123, i32* @G
72 ; CHECK-LABEL: define i32 @test3b(
77 ;;======================== test4
79 define internal {i64,i64} @test4a() {
80 %a = insertvalue {i64,i64} undef, i64 4, 1
81 %b = insertvalue {i64,i64} %a, i64 5, 0
85 define i64 @test4b() {
86 %a = invoke {i64,i64} @test4a()
87 to label %A unwind label %B
89 %b = extractvalue {i64,i64} %a, 0
90 %c = call i64 @test4c(i64 %b)
93 %val = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
97 ; CHECK: define i64 @test4b()
98 ; CHECK: %c = call i64 @test4c(i64 5)
99 ; CHECK-NEXT: ret i64 5
102 define internal i64 @test4c(i64 %a) {
105 ; CHECK-LABEL: define internal i64 @test4c(
106 ; CHECK: ret i64 undef
110 ;;======================== test5
113 define internal {i64,i64} @test5a() {
114 %a = insertvalue {i64,i64} undef, i64 4, 1
115 %b = insertvalue {i64,i64} %a, i64 5, 0
119 define i64 @test5b() {
120 %a = invoke {i64,i64} @test5a()
121 to label %A unwind label %B
123 %c = call i64 @test5c({i64,i64} %a)
126 %val = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
131 ; CHECK: define i64 @test5b()
133 ; CHECK-NEXT: %c = call i64 @test5c({ i64, i64 } %a)
134 ; CHECK-NEXT: ret i64 5
136 define internal i64 @test5c({i64,i64} %a) {
137 %b = extractvalue {i64,i64} %a, 0
142 ;;======================== test6
144 define i64 @test6a() {
148 define i64 @test6b() {
149 %a = call i64 @test6a()
152 ; CHECK-LABEL: define i64 @test6b(
155 ;;======================== test7
160 define internal %T @test7a(i32 %A) {
162 %mrv0 = insertvalue %T undef, i32 %X, 0
163 %mrv1 = insertvalue %T %mrv0, i32 %A, 1
165 ; CHECK-LABEL: @test7a(
166 ; CHECK-NEXT: %mrv0 = insertvalue %T undef, i32 18, 0
167 ; CHECK-NEXT: %mrv1 = insertvalue %T %mrv0, i32 17, 1
170 define i32 @test7b() {
171 %X = call %T @test7a(i32 17)
172 %Y = extractvalue %T %X, 0
175 ; CHECK-LABEL: define i32 @test7b(
176 ; CHECK-NEXT: call %T @test7a(i32 17)
177 ; CHECK-NEXT: ret i32 36
180 ;;======================== test8
183 define internal {} @test8a(i32 %A, i32* %P) {
184 store i32 %A, i32* %P
186 ; CHECK-LABEL: @test8a(
187 ; CHECK-NEXT: store i32 5,
191 define void @test8b(i32* %P) {
192 %X = call {} @test8a(i32 5, i32* %P)
194 ; CHECK-LABEL: define void @test8b(
195 ; CHECK-NEXT: call {} @test8a
196 ; CHECK-NEXT: ret void
199 ;;======================== test9
201 @test9g = internal global { } zeroinitializer
203 define void @test9() {
205 %local_foo = alloca { }
207 store { } %0, { }* %local_foo
211 declare i32 @__gxx_personality_v0(...)
213 ;;======================== test10
215 define i32 @test10a() nounwind {
217 %call = call i32 @test10b(i32 undef)
219 ; CHECK-LABEL: define i32 @test10a(
223 define internal i32 @test10b(i32 %x) nounwind {
227 ; CHECK-LABEL: define internal i32 @test10b(
228 ; CHECK: ret i32 undef