1 ; The %A getelementptr instruction should be eliminated here
3 ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep -v '%B' | not grep getelementptr
5 %Global = constant [10 x sbyte] c"helloworld"
9 int *%foo1(int* %I) { ; Test noop elimination
10 %A = getelementptr int* %I, long 0
14 int* %foo2(int* %I) { ; Test noop elimination
15 %A = getelementptr int* %I
18 int* %foo3(int * %I) { ; Test that two array indexing geps fold
19 %A = getelementptr int* %I, long 17
20 %B = getelementptr int* %A, long 4
24 int* %foo4({int} *%I) { ; Test that two getelementptr insts fold
25 %A = getelementptr {int}* %I, long 1
26 %B = getelementptr {int}* %A, long 0, ubyte 0
30 void %foo5(sbyte %B) {
31 ; This should be turned into a constexpr instead of being an instruction
32 %A = getelementptr [10 x sbyte]* %Global, long 0, long 4
33 store sbyte %B, sbyte* %A
39 %A = getelementptr [4 x int]* %M, long 0, long 0
40 %B = getelementptr int* %A, long 2
44 int* %foo7(int* %I, long %C, long %D) {
45 %A = getelementptr int* %I, long %C
46 %B = getelementptr int* %A, long %D
50 sbyte* %foo8([10 x int]* %X) {
51 %A = getelementptr [10 x int]* %X, long 0, long 0 ;; Fold into the cast.
52 %B = cast int* %A to sbyte*
57 %A = getelementptr {int, double}* null, int 0, uint 1
58 %B = cast double* %A to int