blob: 29d052a25bb338a8981e8444c95d7ca3eb2f78e5 [file] [log] [blame]
Chris Lattner82ad3522009-10-20 20:39:43 +00001; RUN: opt < %s -ipsccp -S | FileCheck %s
Dan Gohmanf17a25c2007-07-18 16:29:46 +00002
Chris Lattner82ad3522009-10-20 20:39:43 +00003;;======================== test1
4
5define internal i32 @test1a(i32 %A) {
6 %X = add i32 1, 2
Tanya Lattnerba93e2d2008-03-19 04:14:49 +00007 ret i32 %A
Dan Gohmanf17a25c2007-07-18 16:29:46 +00008}
Chris Lattner82ad3522009-10-20 20:39:43 +00009; CHECK: define internal i32 @test1a
10; CHECK: ret i32 undef
Dan Gohmanf17a25c2007-07-18 16:29:46 +000011
Chris Lattner82ad3522009-10-20 20:39:43 +000012define i32 @test1b() {
13 %X = call i32 @test1a( i32 17 )
Tanya Lattnerba93e2d2008-03-19 04:14:49 +000014 ret i32 %X
Chris Lattner82ad3522009-10-20 20:39:43 +000015
16; CHECK: define i32 @test1b
17; CHECK: ret i32 17
Dan Gohmanf17a25c2007-07-18 16:29:46 +000018}
Tanya Lattnerba93e2d2008-03-19 04:14:49 +000019
Chris Lattner82ad3522009-10-20 20:39:43 +000020
21
22;;======================== test2
23
24define internal i32 @test2a(i32 %A) {
25 %C = icmp eq i32 %A, 0
26 br i1 %C, label %T, label %F
27T:
28 %B = call i32 @test2a( i32 0 )
29 ret i32 0
30F:
31 %C.upgrd.1 = call i32 @test2a(i32 1)
32 ret i32 %C.upgrd.1
33}
34; CHECK: define internal i32 @test2a
35; CHECK-NEXT: br label %T
36; CHECK: ret i32 undef
37
38
39define i32 @test2b() {
40 %X = call i32 @test2a(i32 0)
41 ret i32 %X
42}
43; CHECK: define i32 @test2b
44; CHECK-NEXT: %X = call i32 @test2a(i32 0)
45; CHECK-NEXT: ret i32 0
46
47
48;;======================== test3
49
50@G = internal global i32 undef
51
52define void @test3a() {
53 %X = load i32* @G
54 store i32 %X, i32* @G
55 ret void
56}
57; CHECK: define void @test3a
58; CHECK-NEXT: ret void
59
60
61define i32 @test3b() {
62 %V = load i32* @G
63 %C = icmp eq i32 %V, 17
64 br i1 %C, label %T, label %F
65T:
66 store i32 17, i32* @G
67 ret i32 %V
68F:
69 store i32 123, i32* @G
70 ret i32 0
71}
72; CHECK: define i32 @test3b
73; CHECK-NOT: store
74; CHECK: ret i32 0