New testcase
[oota-llvm.git] / test / Transforms / InstCombine / getelementptr.ll
1 ; The %A getelementptr instruction should be eliminated here
2
3 ; RUN: if as < %s | opt -instcombine -die | dis | grep getelementptr | grep '%A '
4 ; RUN: then exit 1
5 ; RUN: else exit 0
6 ; RUN: fi
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, ubyte 0
30         ret int* %B
31 }
32
33 sbyte * %foo5() {
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         ret sbyte* %A
37 }
38
39 int* %foo6() {
40         %M = malloc [4 x int]
41         %A = getelementptr [4 x int]* %M, long 0, long 0
42         %B = getelementptr int* %A, long 2
43         ret int* %B
44 }
45
46 int* %foo7(int* %I, long %C, long %D) {
47         %A = getelementptr int* %I, long %C
48         %B = getelementptr int* %A, long %D
49         ret int* %B
50 }