xref: /aosp_15_r20/external/llvm/test/Other/constant-fold-gep-address-spaces.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; "PLAIN" - No optimizations. This tests the target-independent
2*9880d681SAndroid Build Coastguard Worker; constant folder.
3*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -o - %s | FileCheck --check-prefix=PLAIN %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:128:128:128-p1:32:32:32-p2:8:8:8-p3:16:16:16-p4:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:32"
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; The automatic constant folder in opt does not have targetdata access, so
8*9880d681SAndroid Build Coastguard Worker; it can't fold gep arithmetic, in general. However, the constant folder run
9*9880d681SAndroid Build Coastguard Worker; from instcombine and global opt can use targetdata.
10*9880d681SAndroid Build Coastguard Worker; PLAIN: @G8 = global i8 addrspace(1)* getelementptr (i8, i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -1)
11*9880d681SAndroid Build Coastguard Worker@G8 = global i8 addrspace(1)* getelementptr (i8, i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -1)
12*9880d681SAndroid Build Coastguard Worker; PLAIN: @G1 = global i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* inttoptr (i8 1 to i1 addrspace(2)*), i8 -1)
13*9880d681SAndroid Build Coastguard Worker@G1 = global i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* inttoptr (i8 1 to i1 addrspace(2)*), i8 -1)
14*9880d681SAndroid Build Coastguard Worker; PLAIN: @F8 = global i8 addrspace(1)* getelementptr (i8, i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -2)
15*9880d681SAndroid Build Coastguard Worker@F8 = global i8 addrspace(1)* getelementptr (i8, i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -2)
16*9880d681SAndroid Build Coastguard Worker; PLAIN: @F1 = global i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* inttoptr (i8 1 to i1 addrspace(2)*), i8 -2)
17*9880d681SAndroid Build Coastguard Worker@F1 = global i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* inttoptr (i8 1 to i1 addrspace(2)*), i8 -2)
18*9880d681SAndroid Build Coastguard Worker; PLAIN: @H8 = global i8 addrspace(1)* getelementptr (i8, i8 addrspace(1)* null, i32 -1)
19*9880d681SAndroid Build Coastguard Worker@H8 = global i8 addrspace(1)* getelementptr (i8, i8 addrspace(1)* inttoptr (i32 0 to i8 addrspace(1)*), i32 -1)
20*9880d681SAndroid Build Coastguard Worker; PLAIN: @H1 = global i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* null, i8 -1)
21*9880d681SAndroid Build Coastguard Worker@H1 = global i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* inttoptr (i8 0 to i1 addrspace(2)*), i8 -1)
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker; The target-independent folder should be able to do some clever
25*9880d681SAndroid Build Coastguard Worker; simplifications on sizeof, alignof, and offsetof expressions. The
26*9880d681SAndroid Build Coastguard Worker; target-dependent folder should fold these down to constants.
27*9880d681SAndroid Build Coastguard Worker; PLAIN-X: @a = constant i64 mul (i64 ptrtoint (double addrspace(4)* getelementptr (double, double addrspace(4)* null, i32 1) to i64), i64 2310)
28*9880d681SAndroid Build Coastguard Worker@a = constant i64 mul (i64 3, i64 mul (i64 ptrtoint ({[7 x double], [7 x double]} addrspace(4)* getelementptr ({[7 x double], [7 x double]}, {[7 x double], [7 x double]} addrspace(4)* null, i64 11) to i64), i64 5))
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker; PLAIN-X: @b = constant i64 ptrtoint (double addrspace(4)* getelementptr ({ i1, double }, { i1, double }* null, i64 0, i32 1) to i64)
31*9880d681SAndroid Build Coastguard Worker@b = constant i64 ptrtoint ([13 x double] addrspace(4)* getelementptr ({i1, [13 x double]}, {i1, [13 x double]} addrspace(4)* null, i64 0, i32 1) to i64)
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker; PLAIN-X: @c = constant i64 mul nuw (i64 ptrtoint (double addrspace(4)* getelementptr (double, double addrspace(4)* null, i32 1) to i64), i64 2)
34*9880d681SAndroid Build Coastguard Worker@c = constant i64 ptrtoint (double addrspace(4)* getelementptr ({double, double, double, double}, {double, double, double, double} addrspace(4)* null, i64 0, i32 2) to i64)
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker; PLAIN-X: @d = constant i64 mul nuw (i64 ptrtoint (double addrspace(4)* getelementptr (double, double addrspace(4)* null, i32 1) to i64), i64 11)
37*9880d681SAndroid Build Coastguard Worker@d = constant i64 ptrtoint (double addrspace(4)* getelementptr ([13 x double], [13 x double] addrspace(4)* null, i64 0, i32 11) to i64)
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker; PLAIN-X: @e = constant i64 ptrtoint (double addrspace(4)* getelementptr ({ double, float, double, double }, { double, float, double, double }* null, i64 0, i32 2) to i64)
40*9880d681SAndroid Build Coastguard Worker@e = constant i64 ptrtoint (double addrspace(4)* getelementptr ({double, float, double, double}, {double, float, double, double} addrspace(4)* null, i64 0, i32 2) to i64)
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker; PLAIN-X: @f = constant i64 1
43*9880d681SAndroid Build Coastguard Worker@f = constant i64 ptrtoint (<{ i16, i128 }> addrspace(4)* getelementptr ({i1, <{ i16, i128 }>}, {i1, <{ i16, i128 }>} addrspace(4)* null, i64 0, i32 1) to i64)
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker; PLAIN-X: @g = constant i64 ptrtoint (double addrspace(4)* getelementptr ({ i1, double }, { i1, double }* null, i64 0, i32 1) to i64)
46*9880d681SAndroid Build Coastguard Worker@g = constant i64 ptrtoint ({double, double} addrspace(4)* getelementptr ({i1, {double, double}}, {i1, {double, double}} addrspace(4)* null, i64 0, i32 1) to i64)
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker; PLAIN-X: @h = constant i64 ptrtoint (i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* null, i32 1) to i64)
49*9880d681SAndroid Build Coastguard Worker@h = constant i64 ptrtoint (double addrspace(4)* getelementptr (double, double addrspace(4)* null, i64 1) to i64)
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker; PLAIN-X: @i = constant i64 ptrtoint (i1 addrspace(2)* getelementptr ({ i1, i1 addrspace(2)* }, { i1, i1 addrspace(2)* }* null, i64 0, i32 1) to i64)
52*9880d681SAndroid Build Coastguard Worker@i = constant i64 ptrtoint (double addrspace(4)* getelementptr ({i1, double}, {i1, double} addrspace(4)* null, i64 0, i32 1) to i64)
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker; The target-dependent folder should cast GEP indices to integer-sized pointers.
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker; PLAIN: @M = constant i64 addrspace(4)* getelementptr (i64, i64 addrspace(4)* null, i32 1)
57*9880d681SAndroid Build Coastguard Worker; PLAIN: @N = constant i64 addrspace(4)* getelementptr ({ i64, i64 }, { i64, i64 } addrspace(4)* null, i32 0, i32 1)
58*9880d681SAndroid Build Coastguard Worker; PLAIN: @O = constant i64 addrspace(4)* getelementptr ([2 x i64], [2 x i64] addrspace(4)* null, i32 0, i32 1)
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker@M = constant i64 addrspace(4)* getelementptr (i64, i64 addrspace(4)* null, i32 1)
61*9880d681SAndroid Build Coastguard Worker@N = constant i64 addrspace(4)* getelementptr ({ i64, i64 }, { i64, i64 } addrspace(4)* null, i32 0, i32 1)
62*9880d681SAndroid Build Coastguard Worker@O = constant i64 addrspace(4)* getelementptr ([2 x i64], [2 x i64] addrspace(4)* null, i32 0, i32 1)
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker; Fold GEP of a GEP. Very simple cases are folded.
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker; PLAIN-X: @Y = global [3 x { i32, i32 }]addrspace(3)* getelementptr inbounds ([3 x { i32, i32 }], [3 x { i32, i32 }]addrspace(3)* @ext, i64 2)
67*9880d681SAndroid Build Coastguard Worker@ext = external addrspace(3) global [3 x { i32, i32 }]
68*9880d681SAndroid Build Coastguard Worker@Y = global [3 x { i32, i32 }]addrspace(3)* getelementptr inbounds ([3 x { i32, i32 }], [3 x { i32, i32 }]addrspace(3)* getelementptr inbounds ([3 x { i32, i32 }], [3 x { i32, i32 }]addrspace(3)* @ext, i64 1), i64 1)
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; PLAIN-X: @Z = global i32addrspace(3)* getelementptr inbounds (i32, i32addrspace(3)* getelementptr inbounds ([3 x { i32, i32 }], [3 x { i32, i32 }]addrspace(3)* @ext, i64 0, i64 1, i32 0), i64 1)
71*9880d681SAndroid Build Coastguard Worker@Z = global i32addrspace(3)* getelementptr inbounds (i32, i32addrspace(3)* getelementptr inbounds ([3 x { i32, i32 }], [3 x { i32, i32 }]addrspace(3)* @ext, i64 0, i64 1, i32 0), i64 1)
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Worker; Duplicate all of the above as function return values rather than
75*9880d681SAndroid Build Coastguard Worker; global initializers.
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; PLAIN: define i8 addrspace(1)* @goo8() #0 {
78*9880d681SAndroid Build Coastguard Worker; PLAIN:   %t = bitcast i8 addrspace(1)* getelementptr (i8, i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -1) to i8 addrspace(1)*
79*9880d681SAndroid Build Coastguard Worker; PLAIN:   ret i8 addrspace(1)* %t
80*9880d681SAndroid Build Coastguard Worker; PLAIN: }
81*9880d681SAndroid Build Coastguard Worker; PLAIN: define i1 addrspace(2)* @goo1() #0 {
82*9880d681SAndroid Build Coastguard Worker; PLAIN:   %t = bitcast i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* inttoptr (i32 1 to i1 addrspace(2)*), i32 -1) to i1 addrspace(2)*
83*9880d681SAndroid Build Coastguard Worker; PLAIN:   ret i1 addrspace(2)* %t
84*9880d681SAndroid Build Coastguard Worker; PLAIN: }
85*9880d681SAndroid Build Coastguard Worker; PLAIN: define i8 addrspace(1)* @foo8() #0 {
86*9880d681SAndroid Build Coastguard Worker; PLAIN:   %t = bitcast i8 addrspace(1)* getelementptr (i8, i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -2) to i8 addrspace(1)*
87*9880d681SAndroid Build Coastguard Worker; PLAIN:   ret i8 addrspace(1)* %t
88*9880d681SAndroid Build Coastguard Worker; PLAIN: }
89*9880d681SAndroid Build Coastguard Worker; PLAIN: define i1 addrspace(2)* @foo1() #0 {
90*9880d681SAndroid Build Coastguard Worker; PLAIN:   %t = bitcast i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* inttoptr (i32 1 to i1 addrspace(2)*), i32 -2) to i1 addrspace(2)*
91*9880d681SAndroid Build Coastguard Worker; PLAIN:   ret i1 addrspace(2)* %t
92*9880d681SAndroid Build Coastguard Worker; PLAIN: }
93*9880d681SAndroid Build Coastguard Worker; PLAIN: define i8 addrspace(1)* @hoo8() #0 {
94*9880d681SAndroid Build Coastguard Worker; PLAIN:   %t = bitcast i8 addrspace(1)* getelementptr (i8, i8 addrspace(1)* null, i32 -1) to i8 addrspace(1)*
95*9880d681SAndroid Build Coastguard Worker; PLAIN:   ret i8 addrspace(1)* %t
96*9880d681SAndroid Build Coastguard Worker; PLAIN: }
97*9880d681SAndroid Build Coastguard Worker; PLAIN: define i1 addrspace(2)* @hoo1() #0 {
98*9880d681SAndroid Build Coastguard Worker; PLAIN:   %t = bitcast i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* null, i32 -1) to i1 addrspace(2)*
99*9880d681SAndroid Build Coastguard Worker; PLAIN:   ret i1 addrspace(2)* %t
100*9880d681SAndroid Build Coastguard Worker; PLAIN: }
101*9880d681SAndroid Build Coastguard Workerdefine i8 addrspace(1)* @goo8() #0 {
102*9880d681SAndroid Build Coastguard Worker  %t = bitcast i8 addrspace(1)* getelementptr (i8, i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -1) to i8 addrspace(1)*
103*9880d681SAndroid Build Coastguard Worker  ret i8 addrspace(1)* %t
104*9880d681SAndroid Build Coastguard Worker}
105*9880d681SAndroid Build Coastguard Workerdefine i1 addrspace(2)* @goo1() #0 {
106*9880d681SAndroid Build Coastguard Worker  %t = bitcast i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* inttoptr (i32 1 to i1 addrspace(2)*), i32 -1) to i1 addrspace(2)*
107*9880d681SAndroid Build Coastguard Worker  ret i1 addrspace(2)* %t
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Workerdefine i8 addrspace(1)* @foo8() #0 {
110*9880d681SAndroid Build Coastguard Worker  %t = bitcast i8 addrspace(1)* getelementptr (i8, i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -2) to i8 addrspace(1)*
111*9880d681SAndroid Build Coastguard Worker  ret i8 addrspace(1)* %t
112*9880d681SAndroid Build Coastguard Worker}
113*9880d681SAndroid Build Coastguard Workerdefine i1 addrspace(2)* @foo1() #0 {
114*9880d681SAndroid Build Coastguard Worker  %t = bitcast i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* inttoptr (i32 1 to i1 addrspace(2)*), i32 -2) to i1 addrspace(2)*
115*9880d681SAndroid Build Coastguard Worker  ret i1 addrspace(2)* %t
116*9880d681SAndroid Build Coastguard Worker}
117*9880d681SAndroid Build Coastguard Workerdefine i8 addrspace(1)* @hoo8() #0 {
118*9880d681SAndroid Build Coastguard Worker  %t = bitcast i8 addrspace(1)* getelementptr (i8, i8 addrspace(1)* inttoptr (i32 0 to i8 addrspace(1)*), i32 -1) to i8 addrspace(1)*
119*9880d681SAndroid Build Coastguard Worker  ret i8 addrspace(1)* %t
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Workerdefine i1 addrspace(2)* @hoo1() #0 {
122*9880d681SAndroid Build Coastguard Worker  %t = bitcast i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* inttoptr (i32 0 to i1 addrspace(2)*), i32 -1) to i1 addrspace(2)*
123*9880d681SAndroid Build Coastguard Worker  ret i1 addrspace(2)* %t
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Worker; PLAIN-X: define i64 @fa() #0 {
127*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   %t = bitcast i64 mul (i64 ptrtoint (double addrspace(4)* getelementptr (double, double addrspace(4)* null, i32 1) to i64), i64 2310) to i64
128*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   ret i64 %t
129*9880d681SAndroid Build Coastguard Worker; PLAIN-X: }
130*9880d681SAndroid Build Coastguard Worker; PLAIN-X: define i64 @fb() #0 {
131*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ({ i1, double }, { i1, double }* null, i64 0, i32 1) to i64) to i64
132*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   ret i64 %t
133*9880d681SAndroid Build Coastguard Worker; PLAIN-X: }
134*9880d681SAndroid Build Coastguard Worker; PLAIN-X: define i64 @fc() #0 {
135*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   %t = bitcast i64 mul nuw (i64 ptrtoint (double addrspace(4)* getelementptr (double, double addrspace(4)* null, i32 1) to i64), i64 2) to i64
136*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   ret i64 %t
137*9880d681SAndroid Build Coastguard Worker; PLAIN-X: }
138*9880d681SAndroid Build Coastguard Worker; PLAIN-X: define i64 @fd() #0 {
139*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   %t = bitcast i64 mul nuw (i64 ptrtoint (double addrspace(4)* getelementptr (double, double addrspace(4)* null, i32 1) to i64), i64 11) to i64
140*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   ret i64 %t
141*9880d681SAndroid Build Coastguard Worker; PLAIN-X: }
142*9880d681SAndroid Build Coastguard Worker; PLAIN-X: define i64 @fe() #0 {
143*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ({ double, float, double, double }, { double, float, double, double }* null, i64 0, i32 2) to i64) to i64
144*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   ret i64 %t
145*9880d681SAndroid Build Coastguard Worker; PLAIN-X: }
146*9880d681SAndroid Build Coastguard Worker; PLAIN-X: define i64 @ff() #0 {
147*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   %t = bitcast i64 1 to i64
148*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   ret i64 %t
149*9880d681SAndroid Build Coastguard Worker; PLAIN-X: }
150*9880d681SAndroid Build Coastguard Worker; PLAIN-X: define i64 @fg() #0 {
151*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ({ i1, double }, { i1, double }* null, i64 0, i32 1) to i64) to i64
152*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   ret i64 %t
153*9880d681SAndroid Build Coastguard Worker; PLAIN-X: }
154*9880d681SAndroid Build Coastguard Worker; PLAIN-X: define i64 @fh() #0 {
155*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   %t = bitcast i64 ptrtoint (i1 addrspace(2)* getelementptr (i1, i1 addrspace(2)* null, i32 1) to i64) to i64
156*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   ret i64 %t
157*9880d681SAndroid Build Coastguard Worker; PLAIN-X: }
158*9880d681SAndroid Build Coastguard Worker; PLAIN-X: define i64 @fi() #0 {
159*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   %t = bitcast i64 ptrtoint (i1 addrspace(2)* getelementptr ({ i1, i1 addrspace(2)* }, { i1, i1 addrspace(2)* }* null, i64 0, i32 1) to i64) to i64
160*9880d681SAndroid Build Coastguard Worker; PLAIN-X:   ret i64 %t
161*9880d681SAndroid Build Coastguard Worker; PLAIN-X: }
162*9880d681SAndroid Build Coastguard Workerdefine i64 @fa() #0 {
163*9880d681SAndroid Build Coastguard Worker  %t = bitcast i64 mul (i64 3, i64 mul (i64 ptrtoint ({[7 x double], [7 x double]}* getelementptr ({[7 x double], [7 x double]}, {[7 x double], [7 x double]}* null, i64 11) to i64), i64 5)) to i64
164*9880d681SAndroid Build Coastguard Worker  ret i64 %t
165*9880d681SAndroid Build Coastguard Worker}
166*9880d681SAndroid Build Coastguard Workerdefine i64 @fb() #0 {
167*9880d681SAndroid Build Coastguard Worker  %t = bitcast i64 ptrtoint ([13 x double] addrspace(4)* getelementptr ({i1, [13 x double]}, {i1, [13 x double]} addrspace(4)* null, i64 0, i32 1) to i64) to i64
168*9880d681SAndroid Build Coastguard Worker  ret i64 %t
169*9880d681SAndroid Build Coastguard Worker}
170*9880d681SAndroid Build Coastguard Workerdefine i64 @fc() #0 {
171*9880d681SAndroid Build Coastguard Worker  %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ({double, double, double, double}, {double, double, double, double} addrspace(4)* null, i64 0, i32 2) to i64) to i64
172*9880d681SAndroid Build Coastguard Worker  ret i64 %t
173*9880d681SAndroid Build Coastguard Worker}
174*9880d681SAndroid Build Coastguard Workerdefine i64 @fd() #0 {
175*9880d681SAndroid Build Coastguard Worker  %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ([13 x double], [13 x double] addrspace(4)* null, i64 0, i32 11) to i64) to i64
176*9880d681SAndroid Build Coastguard Worker  ret i64 %t
177*9880d681SAndroid Build Coastguard Worker}
178*9880d681SAndroid Build Coastguard Workerdefine i64 @fe() #0 {
179*9880d681SAndroid Build Coastguard Worker  %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ({double, float, double, double}, {double, float, double, double} addrspace(4)* null, i64 0, i32 2) to i64) to i64
180*9880d681SAndroid Build Coastguard Worker  ret i64 %t
181*9880d681SAndroid Build Coastguard Worker}
182*9880d681SAndroid Build Coastguard Workerdefine i64 @ff() #0 {
183*9880d681SAndroid Build Coastguard Worker  %t = bitcast i64 ptrtoint (<{ i16, i128 }> addrspace(4)* getelementptr ({i1, <{ i16, i128 }>}, {i1, <{ i16, i128 }>} addrspace(4)* null, i64 0, i32 1) to i64) to i64
184*9880d681SAndroid Build Coastguard Worker  ret i64 %t
185*9880d681SAndroid Build Coastguard Worker}
186*9880d681SAndroid Build Coastguard Workerdefine i64 @fg() #0 {
187*9880d681SAndroid Build Coastguard Worker  %t = bitcast i64 ptrtoint ({double, double} addrspace(4)* getelementptr ({i1, {double, double}}, {i1, {double, double}} addrspace(4)* null, i64 0, i32 1) to i64) to i64
188*9880d681SAndroid Build Coastguard Worker  ret i64 %t
189*9880d681SAndroid Build Coastguard Worker}
190*9880d681SAndroid Build Coastguard Workerdefine i64 @fh() #0 {
191*9880d681SAndroid Build Coastguard Worker  %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr (double, double addrspace(4)* null, i32 1) to i64) to i64
192*9880d681SAndroid Build Coastguard Worker  ret i64 %t
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Workerdefine i64 @fi() #0 {
195*9880d681SAndroid Build Coastguard Worker  %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ({i1, double}, {i1, double}addrspace(4)* null, i64 0, i32 1) to i64) to i64
196*9880d681SAndroid Build Coastguard Worker  ret i64 %t
197*9880d681SAndroid Build Coastguard Worker}
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Worker; PLAIN: define i64* @fM() #0 {
200*9880d681SAndroid Build Coastguard Worker; PLAIN:   %t = bitcast i64* getelementptr (i64, i64* null, i32 1) to i64*
201*9880d681SAndroid Build Coastguard Worker; PLAIN:   ret i64* %t
202*9880d681SAndroid Build Coastguard Worker; PLAIN: }
203*9880d681SAndroid Build Coastguard Worker; PLAIN: define i64* @fN() #0 {
204*9880d681SAndroid Build Coastguard Worker; PLAIN:   %t = bitcast i64* getelementptr ({ i64, i64 }, { i64, i64 }* null, i32 0, i32 1) to i64*
205*9880d681SAndroid Build Coastguard Worker; PLAIN:   ret i64* %t
206*9880d681SAndroid Build Coastguard Worker; PLAIN: }
207*9880d681SAndroid Build Coastguard Worker; PLAIN: define i64* @fO() #0 {
208*9880d681SAndroid Build Coastguard Worker; PLAIN:   %t = bitcast i64* getelementptr ([2 x i64], [2 x i64]* null, i32 0, i32 1) to i64*
209*9880d681SAndroid Build Coastguard Worker; PLAIN:   ret i64* %t
210*9880d681SAndroid Build Coastguard Worker; PLAIN: }
211*9880d681SAndroid Build Coastguard Worker
212*9880d681SAndroid Build Coastguard Workerdefine i64* @fM() #0 {
213*9880d681SAndroid Build Coastguard Worker  %t = bitcast i64* getelementptr (i64, i64* null, i32 1) to i64*
214*9880d681SAndroid Build Coastguard Worker  ret i64* %t
215*9880d681SAndroid Build Coastguard Worker}
216*9880d681SAndroid Build Coastguard Workerdefine i64* @fN() #0 {
217*9880d681SAndroid Build Coastguard Worker  %t = bitcast i64* getelementptr ({ i64, i64 }, { i64, i64 }* null, i32 0, i32 1) to i64*
218*9880d681SAndroid Build Coastguard Worker  ret i64* %t
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Workerdefine i64* @fO() #0 {
221*9880d681SAndroid Build Coastguard Worker  %t = bitcast i64* getelementptr ([2 x i64], [2 x i64]* null, i32 0, i32 1) to i64*
222*9880d681SAndroid Build Coastguard Worker  ret i64* %t
223*9880d681SAndroid Build Coastguard Worker}
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Worker; PLAIN: define i32 addrspace(1)* @fZ() #0 {
226*9880d681SAndroid Build Coastguard Worker; PLAIN:   %t = bitcast i32 addrspace(1)* getelementptr inbounds (i32, i32 addrspace(1)* getelementptr inbounds ([3 x { i32, i32 }], [3 x { i32, i32 }] addrspace(1)* @ext2, i64 0, i64 1, i32 0), i64 1) to i32 addrspace(1)*
227*9880d681SAndroid Build Coastguard Worker; PLAIN:   ret i32 addrspace(1)* %t
228*9880d681SAndroid Build Coastguard Worker; PLAIN: }
229*9880d681SAndroid Build Coastguard Worker@ext2 = external addrspace(1) global [3 x { i32, i32 }]
230*9880d681SAndroid Build Coastguard Workerdefine i32 addrspace(1)* @fZ() #0 {
231*9880d681SAndroid Build Coastguard Worker  %t = bitcast i32 addrspace(1)* getelementptr inbounds (i32, i32 addrspace(1)* getelementptr inbounds ([3 x { i32, i32 }], [3 x { i32, i32 }] addrspace(1)* @ext2, i64 0, i64 1, i32 0), i64 1) to i32 addrspace(1)*
232*9880d681SAndroid Build Coastguard Worker  ret i32 addrspace(1)* %t
233*9880d681SAndroid Build Coastguard Worker}
234*9880d681SAndroid Build Coastguard Worker
235*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind }
236