180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; "PLAIN" - No optimizations. This tests the target-independent
280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; constant folder.
380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; RUN: opt -S -o - %s | FileCheck --check-prefix=PLAIN %s
480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaulttarget 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"
680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; The automatic constant folder in opt does not have targetdata access, so
880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; it can't fold gep arithmetic, in general. However, the constant folder run
980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; from instcombine and global opt can use targetdata.
1080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: @G8 = global i8 addrspace(1)* getelementptr (i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -1)
1180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@G8 = global i8 addrspace(1)* getelementptr (i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -1)
1280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: @G1 = global i1 addrspace(2)* getelementptr (i1 addrspace(2)* inttoptr (i8 1 to i1 addrspace(2)*), i8 -1)
1380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@G1 = global i1 addrspace(2)* getelementptr (i1 addrspace(2)* inttoptr (i8 1 to i1 addrspace(2)*), i8 -1)
1480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: @F8 = global i8 addrspace(1)* getelementptr (i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -2)
1580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@F8 = global i8 addrspace(1)* getelementptr (i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -2)
1680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: @F1 = global i1 addrspace(2)* getelementptr (i1 addrspace(2)* inttoptr (i8 1 to i1 addrspace(2)*), i8 -2)
1780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@F1 = global i1 addrspace(2)* getelementptr (i1 addrspace(2)* inttoptr (i8 1 to i1 addrspace(2)*), i8 -2)
1880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: @H8 = global i8 addrspace(1)* getelementptr (i8 addrspace(1)* null, i32 -1)
1980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@H8 = global i8 addrspace(1)* getelementptr (i8 addrspace(1)* inttoptr (i32 0 to i8 addrspace(1)*), i32 -1)
2080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: @H1 = global i1 addrspace(2)* getelementptr (i1 addrspace(2)* null, i8 -1)
2180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@H1 = global i1 addrspace(2)* getelementptr (i1 addrspace(2)* inttoptr (i8 0 to i1 addrspace(2)*), i8 -1)
2280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
2380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
2480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; The target-independent folder should be able to do some clever
2580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; simplifications on sizeof, alignof, and offsetof expressions. The
2680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; target-dependent folder should fold these down to constants.
2780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: @a = constant i64 mul (i64 ptrtoint (double addrspace(4)* getelementptr (double addrspace(4)* null, i32 1) to i64), i64 2310)
2880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@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]} addrspace(4)* null, i64 11) to i64), i64 5))
2980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
3080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: @b = constant i64 ptrtoint (double addrspace(4)* getelementptr ({ i1, double }* null, i64 0, i32 1) to i64)
3180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@b = constant i64 ptrtoint ([13 x double] addrspace(4)* getelementptr ({i1, [13 x double]} addrspace(4)* null, i64 0, i32 1) to i64)
3280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
3380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: @c = constant i64 mul nuw (i64 ptrtoint (double addrspace(4)* getelementptr (double addrspace(4)* null, i32 1) to i64), i64 2)
3480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@c = constant i64 ptrtoint (double addrspace(4)* getelementptr ({double, double, double, double} addrspace(4)* null, i64 0, i32 2) to i64)
3580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
3680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: @d = constant i64 mul nuw (i64 ptrtoint (double addrspace(4)* getelementptr (double addrspace(4)* null, i32 1) to i64), i64 11)
3780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@d = constant i64 ptrtoint (double addrspace(4)* getelementptr ([13 x double] addrspace(4)* null, i64 0, i32 11) to i64)
3880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
3980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: @e = constant i64 ptrtoint (double addrspace(4)* getelementptr ({ double, float, double, double }* null, i64 0, i32 2) to i64)
4080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@e = constant i64 ptrtoint (double addrspace(4)* getelementptr ({double, float, double, double} addrspace(4)* null, i64 0, i32 2) to i64)
4180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
4280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: @f = constant i64 1
4380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@f = constant i64 ptrtoint (<{ i16, i128 }> addrspace(4)* getelementptr ({i1, <{ i16, i128 }>} addrspace(4)* null, i64 0, i32 1) to i64)
4480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
4580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: @g = constant i64 ptrtoint (double addrspace(4)* getelementptr ({ i1, double }* null, i64 0, i32 1) to i64)
4680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@g = constant i64 ptrtoint ({double, double} addrspace(4)* getelementptr ({i1, {double, double}} addrspace(4)* null, i64 0, i32 1) to i64)
4780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
4880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: @h = constant i64 ptrtoint (i1 addrspace(2)* getelementptr (i1 addrspace(2)* null, i32 1) to i64)
4980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@h = constant i64 ptrtoint (double addrspace(4)* getelementptr (double addrspace(4)* null, i64 1) to i64)
5080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
5180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: @i = constant i64 ptrtoint (i1 addrspace(2)* getelementptr ({ i1, i1 addrspace(2)* }* null, i64 0, i32 1) to i64)
5280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@i = constant i64 ptrtoint (double addrspace(4)* getelementptr ({i1, double} addrspace(4)* null, i64 0, i32 1) to i64)
5380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
5480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; The target-dependent folder should cast GEP indices to integer-sized pointers.
5580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
5680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: @M = constant i64 addrspace(4)* getelementptr (i64 addrspace(4)* null, i32 1)
5780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: @N = constant i64 addrspace(4)* getelementptr ({ i64, i64 } addrspace(4)* null, i32 0, i32 1)
5880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: @O = constant i64 addrspace(4)* getelementptr ([2 x i64] addrspace(4)* null, i32 0, i32 1)
5980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
6080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@M = constant i64 addrspace(4)* getelementptr (i64 addrspace(4)* null, i32 1)
6180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@N = constant i64 addrspace(4)* getelementptr ({ i64, i64 } addrspace(4)* null, i32 0, i32 1)
6280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@O = constant i64 addrspace(4)* getelementptr ([2 x i64] addrspace(4)* null, i32 0, i32 1)
6380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
6480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; Fold GEP of a GEP. Very simple cases are folded.
6580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
6680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: @Y = global [3 x { i32, i32 }]addrspace(3)* getelementptr inbounds ([3 x { i32, i32 }]addrspace(3)* @ext, i64 2)
6780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@ext = external addrspace(3) global [3 x { i32, i32 }]
6880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@Y = global [3 x { i32, i32 }]addrspace(3)* getelementptr inbounds ([3 x { i32, i32 }]addrspace(3)* getelementptr inbounds ([3 x { i32, i32 }]addrspace(3)* @ext, i64 1), i64 1)
6980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
7080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: @Z = global i32addrspace(3)* getelementptr inbounds (i32addrspace(3)* getelementptr inbounds ([3 x { i32, i32 }]addrspace(3)* @ext, i64 0, i64 1, i32 0), i64 1)
7180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@Z = global i32addrspace(3)* getelementptr inbounds (i32addrspace(3)* getelementptr inbounds ([3 x { i32, i32 }]addrspace(3)* @ext, i64 0, i64 1, i32 0), i64 1)
7280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
7380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
7480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; Duplicate all of the above as function return values rather than
7580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; global initializers.
7680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
7780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: define i8 addrspace(1)* @goo8() #0 {
7880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   %t = bitcast i8 addrspace(1)* getelementptr (i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -1) to i8 addrspace(1)*
7980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   ret i8 addrspace(1)* %t
8080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: }
8180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: define i1 addrspace(2)* @goo1() #0 {
8280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   %t = bitcast i1 addrspace(2)* getelementptr (i1 addrspace(2)* inttoptr (i32 1 to i1 addrspace(2)*), i32 -1) to i1 addrspace(2)*
8380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   ret i1 addrspace(2)* %t
8480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: }
8580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: define i8 addrspace(1)* @foo8() #0 {
8680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   %t = bitcast i8 addrspace(1)* getelementptr (i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -2) to i8 addrspace(1)*
8780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   ret i8 addrspace(1)* %t
8880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: }
8980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: define i1 addrspace(2)* @foo1() #0 {
9080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   %t = bitcast i1 addrspace(2)* getelementptr (i1 addrspace(2)* inttoptr (i32 1 to i1 addrspace(2)*), i32 -2) to i1 addrspace(2)*
9180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   ret i1 addrspace(2)* %t
9280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: }
9380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: define i8 addrspace(1)* @hoo8() #0 {
9480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   %t = bitcast i8 addrspace(1)* getelementptr (i8 addrspace(1)* null, i32 -1) to i8 addrspace(1)*
9580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   ret i8 addrspace(1)* %t
9680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: }
9780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: define i1 addrspace(2)* @hoo1() #0 {
9880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   %t = bitcast i1 addrspace(2)* getelementptr (i1 addrspace(2)* null, i32 -1) to i1 addrspace(2)*
9980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   ret i1 addrspace(2)* %t
10080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: }
10180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i8 addrspace(1)* @goo8() #0 {
10280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i8 addrspace(1)* getelementptr (i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -1) to i8 addrspace(1)*
10380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i8 addrspace(1)* %t
10480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
10580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i1 addrspace(2)* @goo1() #0 {
10680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i1 addrspace(2)* getelementptr (i1 addrspace(2)* inttoptr (i32 1 to i1 addrspace(2)*), i32 -1) to i1 addrspace(2)*
10780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i1 addrspace(2)* %t
10880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
10980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i8 addrspace(1)* @foo8() #0 {
11080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i8 addrspace(1)* getelementptr (i8 addrspace(1)* inttoptr (i32 1 to i8 addrspace(1)*), i32 -2) to i8 addrspace(1)*
11180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i8 addrspace(1)* %t
11280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
11380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i1 addrspace(2)* @foo1() #0 {
11480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i1 addrspace(2)* getelementptr (i1 addrspace(2)* inttoptr (i32 1 to i1 addrspace(2)*), i32 -2) to i1 addrspace(2)*
11580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i1 addrspace(2)* %t
11680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
11780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i8 addrspace(1)* @hoo8() #0 {
11880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i8 addrspace(1)* getelementptr (i8 addrspace(1)* inttoptr (i32 0 to i8 addrspace(1)*), i32 -1) to i8 addrspace(1)*
11980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i8 addrspace(1)* %t
12080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
12180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i1 addrspace(2)* @hoo1() #0 {
12280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i1 addrspace(2)* getelementptr (i1 addrspace(2)* inttoptr (i32 0 to i1 addrspace(2)*), i32 -1) to i1 addrspace(2)*
12380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i1 addrspace(2)* %t
12480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
12580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
12680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: define i64 @fa() #0 {
12780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   %t = bitcast i64 mul (i64 ptrtoint (double addrspace(4)* getelementptr (double addrspace(4)* null, i32 1) to i64), i64 2310) to i64
12880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   ret i64 %t
12980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: }
13080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: define i64 @fb() #0 {
13180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ({ i1, double }* null, i64 0, i32 1) to i64) to i64
13280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   ret i64 %t
13380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: }
13480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: define i64 @fc() #0 {
13580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   %t = bitcast i64 mul nuw (i64 ptrtoint (double addrspace(4)* getelementptr (double addrspace(4)* null, i32 1) to i64), i64 2) to i64
13680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   ret i64 %t
13780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: }
13880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: define i64 @fd() #0 {
13980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   %t = bitcast i64 mul nuw (i64 ptrtoint (double addrspace(4)* getelementptr (double addrspace(4)* null, i32 1) to i64), i64 11) to i64
14080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   ret i64 %t
14180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: }
14280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: define i64 @fe() #0 {
14380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ({ double, float, double, double }* null, i64 0, i32 2) to i64) to i64
14480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   ret i64 %t
14580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: }
14680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: define i64 @ff() #0 {
14780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   %t = bitcast i64 1 to i64
14880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   ret i64 %t
14980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: }
15080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: define i64 @fg() #0 {
15180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ({ i1, double }* null, i64 0, i32 1) to i64) to i64
15280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   ret i64 %t
15380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: }
15480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: define i64 @fh() #0 {
15580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   %t = bitcast i64 ptrtoint (i1 addrspace(2)* getelementptr (i1 addrspace(2)* null, i32 1) to i64) to i64
15680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   ret i64 %t
15780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: }
15880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: define i64 @fi() #0 {
15980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   %t = bitcast i64 ptrtoint (i1 addrspace(2)* getelementptr ({ i1, i1 addrspace(2)* }* null, i64 0, i32 1) to i64) to i64
16080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X:   ret i64 %t
16180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN-X: }
16280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i64 @fa() #0 {
16380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i64 mul (i64 3, i64 mul (i64 ptrtoint ({[7 x double], [7 x double]}* getelementptr ({[7 x double], [7 x double]}* null, i64 11) to i64), i64 5)) to i64
16480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i64 %t
16580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
16680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i64 @fb() #0 {
16780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i64 ptrtoint ([13 x double] addrspace(4)* getelementptr ({i1, [13 x double]} addrspace(4)* null, i64 0, i32 1) to i64) to i64
16880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i64 %t
16980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
17080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i64 @fc() #0 {
17180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ({double, double, double, double} addrspace(4)* null, i64 0, i32 2) to i64) to i64
17280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i64 %t
17380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
17480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i64 @fd() #0 {
17580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ([13 x double] addrspace(4)* null, i64 0, i32 11) to i64) to i64
17680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i64 %t
17780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
17880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i64 @fe() #0 {
17980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ({double, float, double, double} addrspace(4)* null, i64 0, i32 2) to i64) to i64
18080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i64 %t
18180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
18280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i64 @ff() #0 {
18380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i64 ptrtoint (<{ i16, i128 }> addrspace(4)* getelementptr ({i1, <{ i16, i128 }>} addrspace(4)* null, i64 0, i32 1) to i64) to i64
18480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i64 %t
18580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
18680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i64 @fg() #0 {
18780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i64 ptrtoint ({double, double} addrspace(4)* getelementptr ({i1, {double, double}} addrspace(4)* null, i64 0, i32 1) to i64) to i64
18880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i64 %t
18980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
19080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i64 @fh() #0 {
19180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr (double addrspace(4)* null, i32 1) to i64) to i64
19280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i64 %t
19380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
19480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i64 @fi() #0 {
19580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i64 ptrtoint (double addrspace(4)* getelementptr ({i1, double}addrspace(4)* null, i64 0, i32 1) to i64) to i64
19680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i64 %t
19780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
19880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
19980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: define i64* @fM() #0 {
20080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   %t = bitcast i64* getelementptr (i64* null, i32 1) to i64*
20180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   ret i64* %t
20280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: }
20380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: define i64* @fN() #0 {
20480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   %t = bitcast i64* getelementptr ({ i64, i64 }* null, i32 0, i32 1) to i64*
20580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   ret i64* %t
20680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: }
20780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: define i64* @fO() #0 {
20880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   %t = bitcast i64* getelementptr ([2 x i64]* null, i32 0, i32 1) to i64*
20980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   ret i64* %t
21080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: }
21180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
21280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i64* @fM() #0 {
21380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i64* getelementptr (i64* null, i32 1) to i64*
21480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i64* %t
21580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
21680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i64* @fN() #0 {
21780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i64* getelementptr ({ i64, i64 }* null, i32 0, i32 1) to i64*
21880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i64* %t
21980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
22080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i64* @fO() #0 {
22180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i64* getelementptr ([2 x i64]* null, i32 0, i32 1) to i64*
22280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i64* %t
22380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
22480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
22580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: define i32 addrspace(1)* @fZ() #0 {
22680f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   %t = bitcast i32 addrspace(1)* getelementptr inbounds (i32 addrspace(1)* getelementptr inbounds ([3 x { i32, i32 }] addrspace(1)* @ext2, i64 0, i64 1, i32 0), i64 1) to i32 addrspace(1)*
22780f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN:   ret i32 addrspace(1)* %t
22880f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault; PLAIN: }
22980f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault@ext2 = external addrspace(1) global [3 x { i32, i32 }]
23080f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultdefine i32 addrspace(1)* @fZ() #0 {
23180f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  %t = bitcast i32 addrspace(1)* getelementptr inbounds (i32 addrspace(1)* getelementptr inbounds ([3 x { i32, i32 }] addrspace(1)* @ext2, i64 0, i64 1, i32 0), i64 1) to i32 addrspace(1)*
23280f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault  ret i32 addrspace(1)* %t
23380f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault}
23480f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenault
23580f495aab0b1103b880196191af56f1d1c473ea1Matt Arsenaultattributes #0 = { nounwind }
236