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