Remove llvm-upgrade and update test cases.
[oota-llvm.git] / test / Transforms / InstCombine / getelementptr.ll
1 ; The %A getelementptr instruction should be eliminated here
2
3 ; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \
4 ; RUN:    grep -v %B | not grep getelementptr
5 ; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | grep foo1
6 ; END.
7
8 %Global = constant [10 x sbyte] c"helloworld"
9
10 implementation
11
12 int *%foo1(int* %I) { ; Test noop elimination
13         %A = getelementptr int* %I, long 0
14         ret int * %A
15 }
16
17 int* %foo2(int* %I) {  ; Test noop elimination
18         %A = getelementptr int* %I
19         ret int* %A
20 }
21 int* %foo3(int * %I) { ; Test that two array indexing geps fold
22         %A = getelementptr int* %I, long 17
23         %B = getelementptr int* %A, long 4
24         ret int* %B
25 }
26
27 int* %foo4({int} *%I) { ; Test that two getelementptr insts fold
28         %A = getelementptr {int}* %I, long 1
29         %B = getelementptr {int}* %A, long 0, uint 0
30         ret int* %B
31 }
32
33 void %foo5(sbyte %B) {
34         ; This should be turned into a constexpr instead of being an instruction
35         %A = getelementptr [10 x sbyte]* %Global, long 0, long 4
36         store sbyte %B, sbyte* %A
37         ret void
38 }
39
40 int* %foo6() {
41         %M = malloc [4 x int]
42         %A = getelementptr [4 x int]* %M, long 0, long 0
43         %B = getelementptr int* %A, long 2
44         ret int* %B
45 }
46
47 int* %foo7(int* %I, long %C, long %D) {
48         %A = getelementptr int* %I, long %C
49         %B = getelementptr int* %A, long %D
50         ret int* %B
51 }
52
53 sbyte* %foo8([10 x int]* %X) {
54         %A = getelementptr [10 x int]* %X, long 0, long 0   ;; Fold into the cast.
55         %B = cast int* %A to sbyte*
56         ret sbyte * %B
57 }
58
59 int %test9() {
60         %A = getelementptr {int, double}* null, int 0, uint 1
61         %B = cast double* %A to int
62         ret int %B
63 }
64
65 bool %test10({int, int} * %x, {int, int} * %y) {
66         %tmp.1 = getelementptr {int,int}* %x, int 0, uint 1
67         %tmp.3 = getelementptr {int,int}* %y, int 0, uint 1
68         %tmp.4 = seteq int* %tmp.1, %tmp.3    ;; seteq x, y
69         ret bool %tmp.4
70 }
71
72 bool %test11({int,int} *%X) {
73         %P = getelementptr {int,int}* %X, int 0, uint 0
74         %Q = seteq int* %P, null
75         ret bool %Q
76 }