In Thumb2, direct branches can be encoded as either a "short" conditional branch...
[oota-llvm.git] / test / Transforms / ConstProp / extractvalue.ll
1 ; RUN: opt < %s -constprop -S | FileCheck %s
2
3 %struct = type { i32, [4 x i8] }
4 %array = type [3 x %struct]
5
6 define i32 @test1() {
7   %A = extractvalue %struct { i32 2, [4 x i8] c"foo\00" }, 0
8   ret i32 %A
9 ; CHECK: @test1
10 ; CHECK: ret i32 2
11 }
12
13 define i8 @test2() {
14   %A = extractvalue %struct { i32 2, [4 x i8] c"foo\00" }, 1, 2
15   ret i8 %A
16 ; CHECK: @test2
17 ; CHECK: ret i8 111
18 }
19
20 define i32 @test3() {
21   %A = extractvalue %array [ %struct { i32 0, [4 x i8] c"aaaa" }, %struct { i32 1, [4 x i8] c"bbbb" }, %struct { i32 2, [4 x i8] c"cccc" } ], 1, 0
22   ret i32 %A
23 ; CHECK: @test3
24 ; CHECK: ret i32 1
25 }
26
27 define i32 @zeroinitializer-test1() {
28   %A = extractvalue %struct zeroinitializer, 0
29   ret i32 %A
30 ; CHECK: @zeroinitializer-test1
31 ; CHECK: ret i32 0
32 }
33
34 define i8 @zeroinitializer-test2() {
35   %A = extractvalue %struct zeroinitializer, 1, 2
36   ret i8 %A
37 ; CHECK: @zeroinitializer-test2
38 ; CHECK: ret i8 0
39 }
40
41 define i32 @zeroinitializer-test3() {
42   %A = extractvalue %array zeroinitializer, 1, 0
43   ret i32 %A
44 ; CHECK: @zeroinitializer-test3
45 ; CHECK: ret i32 0
46 }
47
48 define i32 @undef-test1() {
49   %A = extractvalue %struct undef, 0
50   ret i32 %A
51 ; CHECK: @undef-test1
52 ; CHECK: ret i32 undef
53 }
54
55 define i8 @undef-test2() {
56   %A = extractvalue %struct undef, 1, 2
57   ret i8 %A
58 ; CHECK: @undef-test2
59 ; CHECK: ret i8 undef
60 }
61
62 define i32 @undef-test3() {
63   %A = extractvalue %array undef, 1, 0
64   ret i32 %A
65 ; CHECK: @undef-test3
66 ; CHECK: ret i32 undef
67 }
68