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