1 ; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-32-STATIC 2 ; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-32-PIC 3 4 ; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-64-STATIC 5 ; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=LINUX-64-PIC 6 7 ; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-apple-darwin -march=x86 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=DARWIN-32-STATIC 8 ; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-apple-darwin -march=x86 -relocation-model=dynamic-no-pic -code-model=small | FileCheck %s -check-prefix=DARWIN-32-DYNAMIC 9 ; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-apple-darwin -march=x86 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=DARWIN-32-PIC 10 11 ; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=DARWIN-64-STATIC 12 ; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=dynamic-no-pic -code-model=small | FileCheck %s -check-prefix=DARWIN-64-DYNAMIC 13 ; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=pic -code-model=small | FileCheck %s -check-prefix=DARWIN-64-PIC 14 15 @src = external global [131072 x i32] 16 @dst = external global [131072 x i32] 17 @xsrc = external global [32 x i32] 18 @xdst = external global [32 x i32] 19 @ptr = external global i32* 20 @dsrc = global [131072 x i32] zeroinitializer, align 32 21 @ddst = global [131072 x i32] zeroinitializer, align 32 22 @dptr = global i32* null 23 @lsrc = internal global [131072 x i32] zeroinitializer 24 @ldst = internal global [131072 x i32] zeroinitializer 25 @lptr = internal global i32* null 26 @ifunc = external global void ()* 27 @difunc = global void ()* null 28 @lifunc = internal global void ()* null 29 @lxsrc = internal global [32 x i32] zeroinitializer, align 32 30 @lxdst = internal global [32 x i32] zeroinitializer, align 32 31 @dxsrc = global [32 x i32] zeroinitializer, align 32 32 @dxdst = global [32 x i32] zeroinitializer, align 32 33 34 define void @foo00() nounwind { 35 entry: 36 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4 37 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 0), align 4 38 ret void 39 40 ; LINUX-64-STATIC: foo00: 41 ; LINUX-64-STATIC: movl src(%rip), [[EAX:%e.x]] 42 ; LINUX-64-STATIC: movl [[EAX]], dst 43 ; LINUX-64-STATIC: ret 44 45 ; LINUX-32-STATIC: foo00: 46 ; LINUX-32-STATIC: movl src, [[EAX:%e.x]] 47 ; LINUX-32-STATIC-NEXT: movl [[EAX]], dst 48 ; LINUX-32-STATIC-NEXT: ret 49 50 ; LINUX-32-PIC: foo00: 51 ; LINUX-32-PIC: movl src, [[EAX:%e.x]] 52 ; LINUX-32-PIC-NEXT: movl [[EAX]], dst 53 ; LINUX-32-PIC-NEXT: ret 54 55 ; LINUX-64-PIC: foo00: 56 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r..]] 57 ; LINUX-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e..]] 58 ; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), [[RCX:%r..]] 59 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 60 ; LINUX-64-PIC-NEXT: ret 61 62 ; DARWIN-32-STATIC: _foo00: 63 ; DARWIN-32-STATIC: movl _src, [[EAX:%e.x]] 64 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dst 65 ; DARWIN-32-STATIC-NEXT: ret 66 67 ; DARWIN-32-DYNAMIC: _foo00: 68 ; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, [[EAX:%e..]] 69 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e..]] 70 ; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e..]] 71 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 72 ; DARWIN-32-DYNAMIC-NEXT: ret 73 74 ; DARWIN-32-PIC: _foo00: 75 ; DARWIN-32-PIC: calll L0$pb 76 ; DARWIN-32-PIC-NEXT: L0$pb: 77 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e..]] 78 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L0$pb([[EAX]]), [[ECX:%e..]] 79 ; DARWIN-32-PIC-NEXT: movl ([[ECX]]), [[ECX:%e..]] 80 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L0$pb([[EAX]]), [[EAX:%e..]] 81 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 82 ; DARWIN-32-PIC-NEXT: ret 83 84 ; DARWIN-64-STATIC: _foo00: 85 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r..]] 86 ; DARWIN-64-STATIC-NEXT: movl ([[RAX]]), [[EAX:%e..]] 87 ; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r..]] 88 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]]) 89 ; DARWIN-64-STATIC-NEXT: ret 90 91 ; DARWIN-64-DYNAMIC: _foo00: 92 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r..]] 93 ; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]]), [[EAX:%e..]] 94 ; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r..]] 95 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]]) 96 ; DARWIN-64-DYNAMIC-NEXT: ret 97 98 ; DARWIN-64-PIC: _foo00: 99 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r..]] 100 ; DARWIN-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e..]] 101 ; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r..]] 102 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 103 ; DARWIN-64-PIC-NEXT: ret 104 } 105 106 define void @fxo00() nounwind { 107 entry: 108 %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4 109 store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 0), align 4 110 ret void 111 112 ; LINUX-64-STATIC: fxo00: 113 ; LINUX-64-STATIC: movl xsrc(%rip), [[EAX:%e.x]] 114 ; LINUX-64-STATIC: movl [[EAX]], xdst 115 ; LINUX-64-STATIC: ret 116 117 ; LINUX-32-STATIC: fxo00: 118 ; LINUX-32-STATIC: movl xsrc, [[EAX:%e.x]] 119 ; LINUX-32-STATIC-NEXT: movl [[EAX]], xdst 120 ; LINUX-32-STATIC-NEXT: ret 121 122 ; LINUX-32-PIC: fxo00: 123 ; LINUX-32-PIC: movl xsrc, [[EAX:%e.x]] 124 ; LINUX-32-PIC-NEXT: movl [[EAX]], xdst 125 ; LINUX-32-PIC-NEXT: ret 126 127 ; LINUX-64-PIC: fxo00: 128 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 129 ; LINUX-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 130 ; LINUX-64-PIC-NEXT: movq xdst@GOTPCREL(%rip), [[RCX:%r.x]] 131 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 132 ; LINUX-64-PIC-NEXT: ret 133 134 ; DARWIN-32-STATIC: _fxo00: 135 ; DARWIN-32-STATIC: movl _xsrc, [[EAX:%e.x]] 136 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _xdst 137 ; DARWIN-32-STATIC-NEXT: ret 138 139 ; DARWIN-32-DYNAMIC: _fxo00: 140 ; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, [[EAX:%e.x]] 141 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 142 ; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[ECX:%e.x]] 143 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 144 ; DARWIN-32-DYNAMIC-NEXT: ret 145 146 ; DARWIN-32-PIC: _fxo00: 147 ; DARWIN-32-PIC: calll L1$pb 148 ; DARWIN-32-PIC-NEXT: L1$pb: 149 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 150 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L1$pb([[EAX]]), [[ECX:%e.x]] 151 ; DARWIN-32-PIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]] 152 ; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L1$pb([[EAX]]), [[EAX:%e.x]] 153 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 154 ; DARWIN-32-PIC-NEXT: ret 155 156 ; DARWIN-64-STATIC: _fxo00: 157 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 158 ; DARWIN-64-STATIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 159 ; DARWIN-64-STATIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]] 160 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]]) 161 ; DARWIN-64-STATIC-NEXT: ret 162 163 ; DARWIN-64-DYNAMIC: _fxo00: 164 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 165 ; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 166 ; DARWIN-64-DYNAMIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]] 167 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]]) 168 ; DARWIN-64-DYNAMIC-NEXT: ret 169 170 ; DARWIN-64-PIC: _fxo00: 171 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 172 ; DARWIN-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 173 ; DARWIN-64-PIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]] 174 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 175 ; DARWIN-64-PIC-NEXT: ret 176 } 177 178 define void @foo01() nounwind { 179 entry: 180 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8 181 ret void 182 ; LINUX-64-STATIC: foo01: 183 ; LINUX-64-STATIC: movq $dst, ptr 184 ; LINUX-64-STATIC: ret 185 186 ; LINUX-32-STATIC: foo01: 187 ; LINUX-32-STATIC: movl $dst, ptr 188 ; LINUX-32-STATIC-NEXT: ret 189 190 ; LINUX-32-PIC: foo01: 191 ; LINUX-32-PIC: movl $dst, ptr 192 ; LINUX-32-PIC-NEXT: ret 193 194 ; LINUX-64-PIC: foo01: 195 ; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]] 196 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 197 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 198 ; LINUX-64-PIC-NEXT: ret 199 200 ; DARWIN-32-STATIC: _foo01: 201 ; DARWIN-32-STATIC: movl $_dst, _ptr 202 ; DARWIN-32-STATIC-NEXT: ret 203 204 ; DARWIN-32-DYNAMIC: _foo01: 205 ; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, [[EAX:%e.x]] 206 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 207 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 208 ; DARWIN-32-DYNAMIC-NEXT: ret 209 210 ; DARWIN-32-PIC: _foo01: 211 ; DARWIN-32-PIC: calll L2$pb 212 ; DARWIN-32-PIC-NEXT: L2$pb: 213 ; DARWIN-32-PIC-NEXT: popl 214 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L2$pb( 215 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L2$pb( 216 ; DARWIN-32-PIC-NEXT: movl 217 ; DARWIN-32-PIC-NEXT: ret 218 219 ; DARWIN-64-STATIC: _foo01: 220 ; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 221 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 222 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]]) 223 ; DARWIN-64-STATIC-NEXT: ret 224 225 ; DARWIN-64-DYNAMIC: _foo01: 226 ; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 227 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 228 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]]) 229 ; DARWIN-64-DYNAMIC-NEXT: ret 230 231 ; DARWIN-64-PIC: _foo01: 232 ; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 233 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 234 ; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 235 ; DARWIN-64-PIC-NEXT: ret 236 } 237 238 define void @fxo01() nounwind { 239 entry: 240 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8 241 ret void 242 ; LINUX-64-STATIC: fxo01: 243 ; LINUX-64-STATIC: movq $xdst, ptr 244 ; LINUX-64-STATIC: ret 245 246 ; LINUX-32-STATIC: fxo01: 247 ; LINUX-32-STATIC: movl $xdst, ptr 248 ; LINUX-32-STATIC-NEXT: ret 249 250 ; LINUX-32-PIC: fxo01: 251 ; LINUX-32-PIC: movl $xdst, ptr 252 ; LINUX-32-PIC-NEXT: ret 253 254 ; LINUX-64-PIC: fxo01: 255 ; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), [[RAX:%r.x]] 256 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 257 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 258 ; LINUX-64-PIC-NEXT: ret 259 260 ; DARWIN-32-STATIC: _fxo01: 261 ; DARWIN-32-STATIC: movl $_xdst, _ptr 262 ; DARWIN-32-STATIC-NEXT: ret 263 264 ; DARWIN-32-DYNAMIC: _fxo01: 265 ; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, [[EAX:%e.x]] 266 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 267 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 268 ; DARWIN-32-DYNAMIC-NEXT: ret 269 270 ; DARWIN-32-PIC: _fxo01: 271 ; DARWIN-32-PIC: calll L3$pb 272 ; DARWIN-32-PIC-NEXT: L3$pb: 273 ; DARWIN-32-PIC-NEXT: popl [[R0:%e..]] 274 ; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L3$pb([[R0]]), [[R1:%e..]] 275 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L3$pb([[R0]]), [[R2:%e..]] 276 ; DARWIN-32-PIC-NEXT: movl [[R1:%e..]], ([[R2]]) 277 ; DARWIN-32-PIC-NEXT: ret 278 279 ; DARWIN-64-STATIC: _fxo01: 280 ; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 281 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 282 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]]) 283 ; DARWIN-64-STATIC-NEXT: ret 284 285 ; DARWIN-64-DYNAMIC: _fxo01: 286 ; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 287 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 288 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]]) 289 ; DARWIN-64-DYNAMIC-NEXT: ret 290 291 ; DARWIN-64-PIC: _fxo01: 292 ; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 293 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 294 ; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 295 ; DARWIN-64-PIC-NEXT: ret 296 } 297 298 define void @foo02() nounwind { 299 entry: 300 %0 = load i32** @ptr, align 8 301 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4 302 store i32 %1, i32* %0, align 4 303 ret void 304 ; LINUX-64-STATIC: foo02: 305 ; LINUX-64-STATIC: movl src(%rip), % 306 ; LINUX-64-STATIC: movq ptr(%rip), % 307 ; LINUX-64-STATIC: movl 308 ; LINUX-64-STATIC: ret 309 310 ; LINUX-32-STATIC: foo02: 311 ; LINUX-32-STATIC: movl src, [[EAX:%e.x]] 312 ; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]] 313 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ([[ECX]]) 314 ; LINUX-32-STATIC-NEXT: ret 315 316 ; LINUX-32-PIC: foo02: 317 ; LINUX-32-PIC: movl src, [[EAX:%e.x]] 318 ; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]] 319 ; LINUX-32-PIC-NEXT: movl [[EAX]], ([[ECX]]) 320 ; LINUX-32-PIC-NEXT: ret 321 322 ; LINUX-64-PIC: foo02: 323 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 324 ; LINUX-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 325 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 326 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 327 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 328 ; LINUX-64-PIC-NEXT: ret 329 330 ; DARWIN-32-STATIC: _foo02: 331 ; DARWIN-32-STATIC: movl _src, [[EAX:%e.x]] 332 ; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]] 333 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], ([[ECX]]) 334 ; DARWIN-32-STATIC-NEXT: ret 335 336 ; DARWIN-32-DYNAMIC: _foo02: 337 ; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, [[EAX:%e.x]] 338 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 339 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 340 ; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]] 341 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 342 ; DARWIN-32-DYNAMIC-NEXT: ret 343 344 ; DARWIN-32-PIC: _foo02: 345 ; DARWIN-32-PIC: calll L4$pb 346 ; DARWIN-32-PIC-NEXT: L4$pb: 347 ; DARWIN-32-PIC-NEXT: popl [[R0:%e..]] 348 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L4$pb([[R0]]), [[R1:%e..]] 349 ; DARWIN-32-PIC-NEXT: movl ([[R1]]), [[R2:%e..]] 350 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L4$pb([[R0]]), [[R3:%e..]] 351 ; DARWIN-32-PIC-NEXT: movl ([[R3]]), [[R4:%e..]] 352 ; DARWIN-32-PIC-NEXT: movl [[R2]], ([[R4]]) 353 ; DARWIN-32-PIC-NEXT: ret 354 355 ; DARWIN-64-STATIC: _foo02: 356 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 357 ; DARWIN-64-STATIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 358 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 359 ; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 360 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]]) 361 ; DARWIN-64-STATIC-NEXT: ret 362 363 ; DARWIN-64-DYNAMIC: _foo02: 364 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 365 ; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 366 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 367 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 368 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]]) 369 ; DARWIN-64-DYNAMIC-NEXT: ret 370 371 ; DARWIN-64-PIC: _foo02: 372 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 373 ; DARWIN-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 374 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 375 ; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 376 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 377 ; DARWIN-64-PIC-NEXT: ret 378 } 379 380 define void @fxo02() nounwind { 381 entry: 382 %0 = load i32** @ptr, align 8 383 %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4 384 store i32 %1, i32* %0, align 4 385 ; LINUX-64-STATIC: fxo02: 386 ; LINUX-64-STATIC: movl xsrc(%rip), % 387 ; LINUX-64-STATIC: movq ptr(%rip), % 388 ; LINUX-64-STATIC: movl 389 ; LINUX-64-STATIC: ret 390 391 ; LINUX-32-STATIC: fxo02: 392 ; LINUX-32-STATIC: movl xsrc, [[EAX:%e.x]] 393 ; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]] 394 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ([[ECX]]) 395 ; LINUX-32-STATIC-NEXT: ret 396 ret void 397 398 ; LINUX-32-PIC: fxo02: 399 ; LINUX-32-PIC: movl xsrc, [[EAX:%e.x]] 400 ; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]] 401 ; LINUX-32-PIC-NEXT: movl [[EAX]], ([[ECX]]) 402 ; LINUX-32-PIC-NEXT: ret 403 404 ; LINUX-64-PIC: fxo02: 405 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 406 ; LINUX-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 407 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 408 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 409 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 410 ; LINUX-64-PIC-NEXT: ret 411 412 ; DARWIN-32-STATIC: _fxo02: 413 ; DARWIN-32-STATIC: movl _xsrc, [[EAX:%e.x]] 414 ; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]] 415 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], ([[ECX]]) 416 ; DARWIN-32-STATIC-NEXT: ret 417 418 ; DARWIN-32-DYNAMIC: _fxo02: 419 ; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, [[EAX:%e.x]] 420 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 421 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 422 ; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]] 423 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 424 ; DARWIN-32-DYNAMIC-NEXT: ret 425 426 ; DARWIN-32-PIC: _fxo02: 427 ; DARWIN-32-PIC: calll L5$pb 428 ; DARWIN-32-PIC-NEXT: L5$pb: 429 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 430 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L5$pb([[EAX]]), [[ECX:%e.x]] 431 ; DARWIN-32-PIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]] 432 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L5$pb([[EAX]]), [[EAX:%e.x]] 433 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 434 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 435 ; DARWIN-32-PIC-NEXT: ret 436 437 ; DARWIN-64-STATIC: _fxo02: 438 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 439 ; DARWIN-64-STATIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 440 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 441 ; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 442 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]]) 443 ; DARWIN-64-STATIC-NEXT: ret 444 445 ; DARWIN-64-DYNAMIC: _fxo02: 446 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 447 ; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 448 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 449 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 450 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]]) 451 ; DARWIN-64-DYNAMIC-NEXT: ret 452 453 ; DARWIN-64-PIC: _fxo02: 454 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 455 ; DARWIN-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 456 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 457 ; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 458 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 459 ; DARWIN-64-PIC-NEXT: ret 460 } 461 462 define void @foo03() nounwind { 463 entry: 464 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32 465 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 0), align 32 466 ret void 467 ; LINUX-64-STATIC: foo03: 468 ; LINUX-64-STATIC: movl dsrc(%rip), [[EAX:%e.x]] 469 ; LINUX-64-STATIC: movl [[EAX]], ddst 470 ; LINUX-64-STATIC: ret 471 472 ; LINUX-32-STATIC: foo03: 473 ; LINUX-32-STATIC: movl dsrc, [[EAX:%e.x]] 474 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ddst 475 ; LINUX-32-STATIC-NEXT: ret 476 477 ; LINUX-32-PIC: foo03: 478 ; LINUX-32-PIC: movl dsrc, [[EAX:%e.x]] 479 ; LINUX-32-PIC-NEXT: movl [[EAX]], ddst 480 ; LINUX-32-PIC-NEXT: ret 481 482 ; LINUX-64-PIC: foo03: 483 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 484 ; LINUX-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 485 ; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), [[RCX:%r.x]] 486 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 487 ; LINUX-64-PIC-NEXT: ret 488 489 ; DARWIN-32-STATIC: _foo03: 490 ; DARWIN-32-STATIC: movl _dsrc, [[EAX:%e.x]] 491 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ddst 492 ; DARWIN-32-STATIC-NEXT: ret 493 494 ; DARWIN-32-DYNAMIC: _foo03: 495 ; DARWIN-32-DYNAMIC: movl _dsrc, [[EAX:%e.x]] 496 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ddst 497 ; DARWIN-32-DYNAMIC-NEXT: ret 498 499 ; DARWIN-32-PIC: _foo03: 500 ; DARWIN-32-PIC: calll L6$pb 501 ; DARWIN-32-PIC-NEXT: L6$pb: 502 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 503 ; DARWIN-32-PIC-NEXT: movl _dsrc-L6$pb([[EAX]]), [[ECX:%e.x]] 504 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _ddst-L6$pb([[EAX]]) 505 ; DARWIN-32-PIC-NEXT: ret 506 507 ; DARWIN-64-STATIC: _foo03: 508 ; DARWIN-64-STATIC: movl _dsrc(%rip), [[EAX:%e.x]] 509 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ddst(%rip) 510 ; DARWIN-64-STATIC-NEXT: ret 511 512 ; DARWIN-64-DYNAMIC: _foo03: 513 ; DARWIN-64-DYNAMIC: movl _dsrc(%rip), [[EAX:%e.x]] 514 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ddst(%rip) 515 ; DARWIN-64-DYNAMIC-NEXT: ret 516 517 ; DARWIN-64-PIC: _foo03: 518 ; DARWIN-64-PIC: movl _dsrc(%rip), [[EAX:%e.x]] 519 ; DARWIN-64-PIC-NEXT: movl [[EAX]], _ddst(%rip) 520 ; DARWIN-64-PIC-NEXT: ret 521 } 522 523 define void @foo04() nounwind { 524 entry: 525 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8 526 ret void 527 ; LINUX-64-STATIC: foo04: 528 ; LINUX-64-STATIC: movq $ddst, dptr 529 ; LINUX-64-STATIC: ret 530 531 ; LINUX-32-STATIC: foo04: 532 ; LINUX-32-STATIC: movl $ddst, dptr 533 ; LINUX-32-STATIC-NEXT: ret 534 535 ; LINUX-32-PIC: foo04: 536 ; LINUX-32-PIC: movl $ddst, dptr 537 ; LINUX-32-PIC-NEXT: ret 538 539 ; LINUX-64-PIC: foo04: 540 ; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]] 541 ; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 542 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 543 ; LINUX-64-PIC-NEXT: ret 544 545 ; DARWIN-32-STATIC: _foo04: 546 ; DARWIN-32-STATIC: movl $_ddst, _dptr 547 ; DARWIN-32-STATIC-NEXT: ret 548 549 ; DARWIN-32-DYNAMIC: _foo04: 550 ; DARWIN-32-DYNAMIC: movl $_ddst, _dptr 551 ; DARWIN-32-DYNAMIC-NEXT: ret 552 553 ; DARWIN-32-PIC: _foo04: 554 ; DARWIN-32-PIC: calll L7$pb 555 ; DARWIN-32-PIC-NEXT: L7$pb: 556 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 557 ; DARWIN-32-PIC-NEXT: leal _ddst-L7$pb([[EAX]]), [[ECX:%e.x]] 558 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _dptr-L7$pb([[EAX]]) 559 ; DARWIN-32-PIC-NEXT: ret 560 561 ; DARWIN-64-STATIC: _foo04: 562 ; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]] 563 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip) 564 ; DARWIN-64-STATIC-NEXT: ret 565 566 ; DARWIN-64-DYNAMIC: _foo04: 567 ; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]] 568 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip) 569 ; DARWIN-64-DYNAMIC-NEXT: ret 570 571 ; DARWIN-64-PIC: _foo04: 572 ; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]] 573 ; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip) 574 ; DARWIN-64-PIC-NEXT: ret 575 } 576 577 define void @foo05() nounwind { 578 entry: 579 %0 = load i32** @dptr, align 8 580 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32 581 store i32 %1, i32* %0, align 4 582 ret void 583 ; LINUX-64-STATIC: foo05: 584 ; LINUX-64-STATIC: movl dsrc(%rip), % 585 ; LINUX-64-STATIC: movq dptr(%rip), % 586 ; LINUX-64-STATIC: movl 587 ; LINUX-64-STATIC: ret 588 589 ; LINUX-32-STATIC: foo05: 590 ; LINUX-32-STATIC: movl dsrc, [[EAX:%e.x]] 591 ; LINUX-32-STATIC-NEXT: movl dptr, [[ECX:%e.x]] 592 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ([[ECX]]) 593 ; LINUX-32-STATIC-NEXT: ret 594 595 ; LINUX-32-PIC: foo05: 596 ; LINUX-32-PIC: movl dsrc, [[EAX:%e.x]] 597 ; LINUX-32-PIC-NEXT: movl dptr, [[ECX:%e.x]] 598 ; LINUX-32-PIC-NEXT: movl [[EAX]], ([[ECX]]) 599 ; LINUX-32-PIC-NEXT: ret 600 601 ; LINUX-64-PIC: foo05: 602 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 603 ; LINUX-64-PIC-NEXT: movl ([[RAX]]), [[EAX:%e.x]] 604 ; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 605 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 606 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 607 ; LINUX-64-PIC-NEXT: ret 608 609 ; DARWIN-32-STATIC: _foo05: 610 ; DARWIN-32-STATIC: movl _dsrc, [[EAX:%e.x]] 611 ; DARWIN-32-STATIC-NEXT: movl _dptr, [[ECX:%e.x]] 612 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], ([[ECX]]) 613 ; DARWIN-32-STATIC-NEXT: ret 614 615 ; DARWIN-32-DYNAMIC: _foo05: 616 ; DARWIN-32-DYNAMIC: movl _dsrc, [[EAX:%e.x]] 617 ; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[ECX:%e.x]] 618 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 619 ; DARWIN-32-DYNAMIC-NEXT: ret 620 621 ; DARWIN-32-PIC: _foo05: 622 ; DARWIN-32-PIC: calll L8$pb 623 ; DARWIN-32-PIC-NEXT: L8$pb: 624 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 625 ; DARWIN-32-PIC-NEXT: movl _dsrc-L8$pb([[EAX]]), [[ECX:%e.x]] 626 ; DARWIN-32-PIC-NEXT: movl _dptr-L8$pb([[EAX]]), [[EAX:%e.x]] 627 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 628 ; DARWIN-32-PIC-NEXT: ret 629 630 ; DARWIN-64-STATIC: _foo05: 631 ; DARWIN-64-STATIC: movl _dsrc(%rip), [[EAX:%e.x]] 632 ; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 633 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]]) 634 ; DARWIN-64-STATIC-NEXT: ret 635 636 ; DARWIN-64-DYNAMIC: _foo05: 637 ; DARWIN-64-DYNAMIC: movl _dsrc(%rip), [[EAX:%e.x]] 638 ; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 639 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]]) 640 ; DARWIN-64-DYNAMIC-NEXT: ret 641 642 ; DARWIN-64-PIC: _foo05: 643 ; DARWIN-64-PIC: movl _dsrc(%rip), [[EAX:%e.x]] 644 ; DARWIN-64-PIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 645 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 646 ; DARWIN-64-PIC-NEXT: ret 647 } 648 649 define void @foo06() nounwind { 650 entry: 651 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4 652 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 0), align 4 653 ret void 654 ; LINUX-64-STATIC: foo06: 655 ; LINUX-64-STATIC: movl lsrc(%rip), [[EAX:%e.x]] 656 ; LINUX-64-STATIC: movl [[EAX]], ldst(%rip) 657 ; LINUX-64-STATIC: ret 658 659 ; LINUX-32-STATIC: foo06: 660 ; LINUX-32-STATIC: movl lsrc, [[EAX:%e.x]] 661 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ldst 662 ; LINUX-32-STATIC-NEXT: ret 663 664 ; LINUX-32-PIC: foo06: 665 ; LINUX-32-PIC: movl lsrc, [[EAX:%e.x]] 666 ; LINUX-32-PIC-NEXT: movl [[EAX]], ldst 667 ; LINUX-32-PIC-NEXT: ret 668 669 ; LINUX-64-PIC: foo06: 670 ; LINUX-64-PIC: movl lsrc(%rip), [[EAX:%e.x]] 671 ; LINUX-64-PIC-NEXT: movl [[EAX]], ldst(%rip) 672 ; LINUX-64-PIC-NEXT: ret 673 674 ; DARWIN-32-STATIC: _foo06: 675 ; DARWIN-32-STATIC: movl _lsrc, [[EAX:%e.x]] 676 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ldst 677 ; DARWIN-32-STATIC-NEXT: ret 678 679 ; DARWIN-32-DYNAMIC: _foo06: 680 ; DARWIN-32-DYNAMIC: movl _lsrc, [[EAX:%e.x]] 681 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ldst 682 ; DARWIN-32-DYNAMIC-NEXT: ret 683 684 ; DARWIN-32-PIC: _foo06: 685 ; DARWIN-32-PIC: calll L9$pb 686 ; DARWIN-32-PIC-NEXT: L9$pb: 687 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 688 ; DARWIN-32-PIC-NEXT: movl _lsrc-L9$pb([[EAX]]), [[ECX:%e.x]] 689 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _ldst-L9$pb([[EAX]]) 690 ; DARWIN-32-PIC-NEXT: ret 691 692 ; DARWIN-64-STATIC: _foo06: 693 ; DARWIN-64-STATIC: movl _lsrc(%rip), [[EAX:%e.x]] 694 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ldst(%rip) 695 ; DARWIN-64-STATIC-NEXT: ret 696 697 ; DARWIN-64-DYNAMIC: _foo06: 698 ; DARWIN-64-DYNAMIC: movl _lsrc(%rip), [[EAX:%e.x]] 699 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ldst(%rip) 700 ; DARWIN-64-DYNAMIC-NEXT: ret 701 702 ; DARWIN-64-PIC: _foo06: 703 ; DARWIN-64-PIC: movl _lsrc(%rip), [[EAX:%e.x]] 704 ; DARWIN-64-PIC-NEXT: movl [[EAX]], _ldst(%rip) 705 ; DARWIN-64-PIC-NEXT: ret 706 } 707 708 define void @foo07() nounwind { 709 entry: 710 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8 711 ret void 712 ; LINUX-64-STATIC: foo07: 713 ; LINUX-64-STATIC: movq $ldst, lptr 714 ; LINUX-64-STATIC: ret 715 716 ; LINUX-32-STATIC: foo07: 717 ; LINUX-32-STATIC: movl $ldst, lptr 718 ; LINUX-32-STATIC-NEXT: ret 719 720 ; LINUX-32-PIC: foo07: 721 ; LINUX-32-PIC: movl $ldst, lptr 722 ; LINUX-32-PIC-NEXT: ret 723 724 ; LINUX-64-PIC: foo07: 725 ; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]] 726 ; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip) 727 ; LINUX-64-PIC-NEXT: ret 728 729 ; DARWIN-32-STATIC: _foo07: 730 ; DARWIN-32-STATIC: movl $_ldst, _lptr 731 ; DARWIN-32-STATIC-NEXT: ret 732 733 ; DARWIN-32-DYNAMIC: _foo07: 734 ; DARWIN-32-DYNAMIC: movl $_ldst, _lptr 735 ; DARWIN-32-DYNAMIC-NEXT: ret 736 737 ; DARWIN-32-PIC: _foo07: 738 ; DARWIN-32-PIC: calll L10$pb 739 ; DARWIN-32-PIC-NEXT: L10$pb: 740 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 741 ; DARWIN-32-PIC-NEXT: leal _ldst-L10$pb([[EAX]]), [[ECX:%e.x]] 742 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _lptr-L10$pb([[EAX]]) 743 ; DARWIN-32-PIC-NEXT: ret 744 745 ; DARWIN-64-STATIC: _foo07: 746 ; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]] 747 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip) 748 ; DARWIN-64-STATIC-NEXT: ret 749 750 ; DARWIN-64-DYNAMIC: _foo07: 751 ; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]] 752 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip) 753 ; DARWIN-64-DYNAMIC-NEXT: ret 754 755 ; DARWIN-64-PIC: _foo07: 756 ; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]] 757 ; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip) 758 ; DARWIN-64-PIC-NEXT: ret 759 } 760 761 define void @foo08() nounwind { 762 entry: 763 %0 = load i32** @lptr, align 8 764 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4 765 store i32 %1, i32* %0, align 4 766 ret void 767 ; LINUX-64-STATIC: foo08: 768 ; LINUX-64-STATIC: movl lsrc(%rip), % 769 ; LINUX-64-STATIC: movq lptr(%rip), % 770 ; LINUX-64-STATIC: movl 771 ; LINUX-64-STATIC: ret 772 773 ; LINUX-32-STATIC: foo08: 774 ; LINUX-32-STATIC: movl lsrc, [[EAX:%e.x]] 775 ; LINUX-32-STATIC-NEXT: movl lptr, [[ECX:%e.x]] 776 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ([[ECX]]) 777 ; LINUX-32-STATIC-NEXT: ret 778 779 ; LINUX-32-PIC: foo08: 780 ; LINUX-32-PIC: movl lsrc, [[EAX:%e.x]] 781 ; LINUX-32-PIC-NEXT: movl lptr, [[ECX:%e.x]] 782 ; LINUX-32-PIC-NEXT: movl [[EAX]], ([[ECX]]) 783 ; LINUX-32-PIC-NEXT: ret 784 785 ; LINUX-64-PIC: foo08: 786 ; LINUX-64-PIC: movl lsrc(%rip), [[EAX:%e.x]] 787 ; LINUX-64-PIC-NEXT: movq lptr(%rip), [[RCX:%r.x]] 788 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 789 ; LINUX-64-PIC-NEXT: ret 790 791 ; DARWIN-32-STATIC: _foo08: 792 ; DARWIN-32-STATIC: movl _lsrc, [[EAX:%e.x]] 793 ; DARWIN-32-STATIC-NEXT: movl _lptr, [[ECX:%e.x]] 794 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], ([[ECX]]) 795 ; DARWIN-32-STATIC-NEXT: ret 796 797 ; DARWIN-32-DYNAMIC: _foo08: 798 ; DARWIN-32-DYNAMIC: movl _lsrc, [[EAX:%e.x]] 799 ; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[ECX:%e.x]] 800 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 801 ; DARWIN-32-DYNAMIC-NEXT: ret 802 803 ; DARWIN-32-PIC: _foo08: 804 ; DARWIN-32-PIC: calll L11$pb 805 ; DARWIN-32-PIC-NEXT: L11$pb: 806 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 807 ; DARWIN-32-PIC-NEXT: movl _lsrc-L11$pb([[EAX]]), [[ECX:%e.x]] 808 ; DARWIN-32-PIC-NEXT: movl _lptr-L11$pb([[EAX]]), [[EAX:%e.x]] 809 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 810 ; DARWIN-32-PIC-NEXT: ret 811 812 ; DARWIN-64-STATIC: _foo08: 813 ; DARWIN-64-STATIC: movl _lsrc(%rip), [[EAX:%e.x]] 814 ; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 815 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]]) 816 ; DARWIN-64-STATIC-NEXT: ret 817 818 ; DARWIN-64-DYNAMIC: _foo08: 819 ; DARWIN-64-DYNAMIC: movl _lsrc(%rip), [[EAX:%e.x]] 820 ; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 821 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]]) 822 ; DARWIN-64-DYNAMIC-NEXT: ret 823 824 ; DARWIN-64-PIC: _foo08: 825 ; DARWIN-64-PIC: movl _lsrc(%rip), [[EAX:%e.x]] 826 ; DARWIN-64-PIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 827 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]]) 828 ; DARWIN-64-PIC-NEXT: ret 829 } 830 831 define void @qux00() nounwind { 832 entry: 833 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4 834 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), align 4 835 ret void 836 ; LINUX-64-STATIC: qux00: 837 ; LINUX-64-STATIC: movl src+64(%rip), [[EAX:%e.x]] 838 ; LINUX-64-STATIC: movl [[EAX]], dst+64(%rip) 839 ; LINUX-64-STATIC: ret 840 841 ; LINUX-32-STATIC: qux00: 842 ; LINUX-32-STATIC: movl src+64, [[EAX:%e.x]] 843 ; LINUX-32-STATIC-NEXT: movl [[EAX]], dst+64 844 ; LINUX-32-STATIC-NEXT: ret 845 846 ; LINUX-32-PIC: qux00: 847 ; LINUX-32-PIC: movl src+64, [[EAX:%e.x]] 848 ; LINUX-32-PIC-NEXT: movl [[EAX]], dst+64 849 ; LINUX-32-PIC-NEXT: ret 850 851 ; LINUX-64-PIC: qux00: 852 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 853 ; LINUX-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 854 ; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), [[RCX:%r.x]] 855 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 856 ; LINUX-64-PIC-NEXT: ret 857 858 ; DARWIN-32-STATIC: _qux00: 859 ; DARWIN-32-STATIC: movl _src+64, [[EAX:%e.x]] 860 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dst+64 861 ; DARWIN-32-STATIC-NEXT: ret 862 863 ; DARWIN-32-DYNAMIC: _qux00: 864 ; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, [[EAX:%e.x]] 865 ; DARWIN-32-DYNAMIC-NEXT: movl 64([[EAX]]), [[EAX:%e.x]] 866 ; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e.x]] 867 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 64([[ECX]]) 868 ; DARWIN-32-DYNAMIC-NEXT: ret 869 870 ; DARWIN-32-PIC: _qux00: 871 ; DARWIN-32-PIC: calll L12$pb 872 ; DARWIN-32-PIC-NEXT: L12$pb: 873 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 874 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L12$pb([[EAX]]), [[ECX:%e.x]] 875 ; DARWIN-32-PIC-NEXT: movl 64([[ECX]]), [[ECX:%e.x]] 876 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L12$pb([[EAX]]), [[EAX:%e.x]] 877 ; DARWIN-32-PIC-NEXT: movl [[ECX]], 64([[EAX]]) 878 ; DARWIN-32-PIC-NEXT: ret 879 880 ; DARWIN-64-STATIC: _qux00: 881 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 882 ; DARWIN-64-STATIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 883 ; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 884 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]]) 885 ; DARWIN-64-STATIC-NEXT: ret 886 887 ; DARWIN-64-DYNAMIC: _qux00: 888 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 889 ; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 890 ; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 891 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]]) 892 ; DARWIN-64-DYNAMIC-NEXT: ret 893 894 ; DARWIN-64-PIC: _qux00: 895 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 896 ; DARWIN-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 897 ; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 898 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 899 ; DARWIN-64-PIC-NEXT: ret 900 } 901 902 define void @qxx00() nounwind { 903 entry: 904 %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4 905 store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), align 4 906 ret void 907 ; LINUX-64-STATIC: qxx00: 908 ; LINUX-64-STATIC: movl xsrc+64(%rip), [[EAX:%e.x]] 909 ; LINUX-64-STATIC: movl [[EAX]], xdst+64(%rip) 910 ; LINUX-64-STATIC: ret 911 912 ; LINUX-32-STATIC: qxx00: 913 ; LINUX-32-STATIC: movl xsrc+64, [[EAX:%e.x]] 914 ; LINUX-32-STATIC-NEXT: movl [[EAX]], xdst+64 915 ; LINUX-32-STATIC-NEXT: ret 916 917 ; LINUX-32-PIC: qxx00: 918 ; LINUX-32-PIC: movl xsrc+64, [[EAX:%e.x]] 919 ; LINUX-32-PIC-NEXT: movl [[EAX]], xdst+64 920 ; LINUX-32-PIC-NEXT: ret 921 922 ; LINUX-64-PIC: qxx00: 923 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 924 ; LINUX-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 925 ; LINUX-64-PIC-NEXT: movq xdst@GOTPCREL(%rip), [[RCX:%r.x]] 926 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 927 ; LINUX-64-PIC-NEXT: ret 928 929 ; DARWIN-32-STATIC: _qxx00: 930 ; DARWIN-32-STATIC: movl _xsrc+64, [[EAX:%e.x]] 931 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _xdst+64 932 ; DARWIN-32-STATIC-NEXT: ret 933 934 ; DARWIN-32-DYNAMIC: _qxx00: 935 ; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, [[EAX:%e.x]] 936 ; DARWIN-32-DYNAMIC-NEXT: movl 64([[EAX]]), [[EAX:%e.x]] 937 ; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[ECX:%e.x]] 938 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 64([[ECX]]) 939 ; DARWIN-32-DYNAMIC-NEXT: ret 940 941 ; DARWIN-32-PIC: _qxx00: 942 ; DARWIN-32-PIC: calll L13$pb 943 ; DARWIN-32-PIC-NEXT: L13$pb: 944 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 945 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L13$pb([[EAX]]), [[ECX:%e.x]] 946 ; DARWIN-32-PIC-NEXT: movl 64([[ECX]]), [[ECX:%e.x]] 947 ; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L13$pb([[EAX]]), [[EAX:%e.x]] 948 ; DARWIN-32-PIC-NEXT: movl [[ECX]], 64([[EAX]]) 949 ; DARWIN-32-PIC-NEXT: ret 950 951 ; DARWIN-64-STATIC: _qxx00: 952 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 953 ; DARWIN-64-STATIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 954 ; DARWIN-64-STATIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]] 955 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]]) 956 ; DARWIN-64-STATIC-NEXT: ret 957 958 ; DARWIN-64-DYNAMIC: _qxx00: 959 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 960 ; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 961 ; DARWIN-64-DYNAMIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]] 962 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]]) 963 ; DARWIN-64-DYNAMIC-NEXT: ret 964 965 ; DARWIN-64-PIC: _qxx00: 966 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 967 ; DARWIN-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 968 ; DARWIN-64-PIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]] 969 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 970 ; DARWIN-64-PIC-NEXT: ret 971 } 972 973 define void @qux01() nounwind { 974 entry: 975 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8 976 ret void 977 ; LINUX-64-STATIC: qux01: 978 ; LINUX-64-STATIC: movq $dst+64, ptr 979 ; LINUX-64-STATIC: ret 980 981 ; LINUX-32-STATIC: qux01: 982 ; LINUX-32-STATIC: movl $dst+64, ptr 983 ; LINUX-32-STATIC-NEXT: ret 984 985 ; LINUX-32-PIC: qux01: 986 ; LINUX-32-PIC: movl $dst+64, ptr 987 ; LINUX-32-PIC-NEXT: ret 988 989 ; LINUX-64-PIC: qux01: 990 ; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]] 991 ; LINUX-64-PIC-NEXT: addq $64, [[RAX:%r.x]] 992 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 993 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 994 ; LINUX-64-PIC-NEXT: ret 995 996 ; DARWIN-32-STATIC: _qux01: 997 ; DARWIN-32-STATIC: movl $_dst+64, _ptr 998 ; DARWIN-32-STATIC-NEXT: ret 999 1000 ; DARWIN-32-DYNAMIC: _qux01: 1001 ; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, [[EAX:%e.x]] 1002 ; DARWIN-32-DYNAMIC-NEXT: addl $64, [[EAX:%e.x]] 1003 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 1004 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 1005 ; DARWIN-32-DYNAMIC-NEXT: ret 1006 1007 ; DARWIN-32-PIC: _qux01: 1008 ; DARWIN-32-PIC: calll L14$pb 1009 ; DARWIN-32-PIC-NEXT: L14$pb: 1010 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1011 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L14$pb([[EAX]]), [[ECX:%e.x]] 1012 ; DARWIN-32-PIC-NEXT: addl $64, [[ECX:%e.x]] 1013 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L14$pb([[EAX]]), [[EAX:%e.x]] 1014 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 1015 ; DARWIN-32-PIC-NEXT: ret 1016 1017 ; DARWIN-64-STATIC: _qux01: 1018 ; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 1019 ; DARWIN-64-STATIC-NEXT: addq $64, [[RAX:%r.x]] 1020 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1021 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]]) 1022 ; DARWIN-64-STATIC-NEXT: ret 1023 1024 ; DARWIN-64-DYNAMIC: _qux01: 1025 ; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 1026 ; DARWIN-64-DYNAMIC-NEXT: addq $64, [[RAX:%r.x]] 1027 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1028 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]]) 1029 ; DARWIN-64-DYNAMIC-NEXT: ret 1030 1031 ; DARWIN-64-PIC: _qux01: 1032 ; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 1033 ; DARWIN-64-PIC-NEXT: addq $64, [[RAX:%r.x]] 1034 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1035 ; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 1036 ; DARWIN-64-PIC-NEXT: ret 1037 } 1038 1039 define void @qxx01() nounwind { 1040 entry: 1041 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8 1042 ret void 1043 ; LINUX-64-STATIC: qxx01: 1044 ; LINUX-64-STATIC: movq $xdst+64, ptr 1045 ; LINUX-64-STATIC: ret 1046 1047 ; LINUX-32-STATIC: qxx01: 1048 ; LINUX-32-STATIC: movl $xdst+64, ptr 1049 ; LINUX-32-STATIC-NEXT: ret 1050 1051 ; LINUX-32-PIC: qxx01: 1052 ; LINUX-32-PIC: movl $xdst+64, ptr 1053 ; LINUX-32-PIC-NEXT: ret 1054 1055 ; LINUX-64-PIC: qxx01: 1056 ; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), [[RAX:%r.x]] 1057 ; LINUX-64-PIC-NEXT: addq $64, [[RAX:%r.x]] 1058 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1059 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 1060 ; LINUX-64-PIC-NEXT: ret 1061 1062 ; DARWIN-32-STATIC: _qxx01: 1063 ; DARWIN-32-STATIC: movl $_xdst+64, _ptr 1064 ; DARWIN-32-STATIC-NEXT: ret 1065 1066 ; DARWIN-32-DYNAMIC: _qxx01: 1067 ; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, [[EAX:%e.x]] 1068 ; DARWIN-32-DYNAMIC-NEXT: addl $64, [[EAX:%e.x]] 1069 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 1070 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 1071 ; DARWIN-32-DYNAMIC-NEXT: ret 1072 1073 ; DARWIN-32-PIC: _qxx01: 1074 ; DARWIN-32-PIC: calll L15$pb 1075 ; DARWIN-32-PIC-NEXT: L15$pb: 1076 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1077 ; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L15$pb([[EAX]]), [[ECX:%e.x]] 1078 ; DARWIN-32-PIC-NEXT: addl $64, [[ECX:%e.x]] 1079 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L15$pb([[EAX]]), [[EAX:%e.x]] 1080 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 1081 ; DARWIN-32-PIC-NEXT: ret 1082 1083 ; DARWIN-64-STATIC: _qxx01: 1084 ; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 1085 ; DARWIN-64-STATIC-NEXT: addq $64, [[RAX:%r.x]] 1086 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1087 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]]) 1088 ; DARWIN-64-STATIC-NEXT: ret 1089 1090 ; DARWIN-64-DYNAMIC: _qxx01: 1091 ; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 1092 ; DARWIN-64-DYNAMIC-NEXT: addq $64, [[RAX:%r.x]] 1093 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1094 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]]) 1095 ; DARWIN-64-DYNAMIC-NEXT: ret 1096 1097 ; DARWIN-64-PIC: _qxx01: 1098 ; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 1099 ; DARWIN-64-PIC-NEXT: addq $64, [[RAX:%r.x]] 1100 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1101 ; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 1102 ; DARWIN-64-PIC-NEXT: ret 1103 } 1104 1105 define void @qux02() nounwind { 1106 entry: 1107 %0 = load i32** @ptr, align 8 1108 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4 1109 %2 = getelementptr i32* %0, i64 16 1110 store i32 %1, i32* %2, align 4 1111 ; LINUX-64-STATIC: qux02: 1112 ; LINUX-64-STATIC: movl src+64(%rip), [[EAX:%e.x]] 1113 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 1114 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]]) 1115 ; LINUX-64-STATIC: ret 1116 1117 ; LINUX-32-STATIC: qux02: 1118 ; LINUX-32-STATIC: movl src+64, [[EAX:%e.x]] 1119 ; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]] 1120 ; LINUX-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]]) 1121 ; LINUX-32-STATIC-NEXT: ret 1122 ret void 1123 1124 ; LINUX-32-PIC: qux02: 1125 ; LINUX-32-PIC: movl src+64, [[EAX:%e.x]] 1126 ; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]] 1127 ; LINUX-32-PIC-NEXT: movl [[EAX]], 64([[ECX]]) 1128 ; LINUX-32-PIC-NEXT: ret 1129 1130 ; LINUX-64-PIC: qux02: 1131 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 1132 ; LINUX-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 1133 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1134 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 1135 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 1136 ; LINUX-64-PIC-NEXT: ret 1137 1138 ; DARWIN-32-STATIC: _qux02: 1139 ; DARWIN-32-STATIC: movl _src+64, [[EAX:%e.x]] 1140 ; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]] 1141 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]]) 1142 ; DARWIN-32-STATIC-NEXT: ret 1143 1144 ; DARWIN-32-DYNAMIC: _qux02: 1145 ; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, [[EAX:%e.x]] 1146 ; DARWIN-32-DYNAMIC-NEXT: movl 64([[EAX]]), [[EAX:%e.x]] 1147 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 1148 ; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]] 1149 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 64([[ECX]]) 1150 ; DARWIN-32-DYNAMIC-NEXT: ret 1151 1152 ; DARWIN-32-PIC: _qux02: 1153 ; DARWIN-32-PIC: calll L16$pb 1154 ; DARWIN-32-PIC-NEXT: L16$pb: 1155 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1156 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L16$pb([[EAX]]), [[ECX:%e.x]] 1157 ; DARWIN-32-PIC-NEXT: movl 64([[ECX]]), [[ECX:%e.x]] 1158 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L16$pb([[EAX]]), [[EAX:%e.x]] 1159 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 1160 ; DARWIN-32-PIC-NEXT: movl [[ECX]], 64([[EAX]]) 1161 ; DARWIN-32-PIC-NEXT: ret 1162 1163 ; DARWIN-64-STATIC: _qux02: 1164 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 1165 ; DARWIN-64-STATIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 1166 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1167 ; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 1168 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]]) 1169 ; DARWIN-64-STATIC-NEXT: ret 1170 1171 ; DARWIN-64-DYNAMIC: _qux02: 1172 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 1173 ; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 1174 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1175 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 1176 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]]) 1177 ; DARWIN-64-DYNAMIC-NEXT: ret 1178 1179 ; DARWIN-64-PIC: _qux02: 1180 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 1181 ; DARWIN-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 1182 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1183 ; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 1184 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 1185 ; DARWIN-64-PIC-NEXT: ret 1186 } 1187 1188 define void @qxx02() nounwind { 1189 entry: 1190 %0 = load i32** @ptr, align 8 1191 %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4 1192 %2 = getelementptr i32* %0, i64 16 1193 store i32 %1, i32* %2, align 4 1194 ; LINUX-64-STATIC: qxx02: 1195 ; LINUX-64-STATIC: movl xsrc+64(%rip), [[EAX:%e.x]] 1196 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 1197 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]]) 1198 ; LINUX-64-STATIC: ret 1199 1200 ; LINUX-32-STATIC: qxx02: 1201 ; LINUX-32-STATIC: movl xsrc+64, [[EAX:%e.x]] 1202 ; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]] 1203 ; LINUX-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]]) 1204 ; LINUX-32-STATIC-NEXT: ret 1205 ret void 1206 1207 ; LINUX-32-PIC: qxx02: 1208 ; LINUX-32-PIC: movl xsrc+64, [[EAX:%e.x]] 1209 ; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]] 1210 ; LINUX-32-PIC-NEXT: movl [[EAX]], 64([[ECX]]) 1211 ; LINUX-32-PIC-NEXT: ret 1212 1213 ; LINUX-64-PIC: qxx02: 1214 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 1215 ; LINUX-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 1216 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1217 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 1218 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 1219 ; LINUX-64-PIC-NEXT: ret 1220 1221 ; DARWIN-32-STATIC: _qxx02: 1222 ; DARWIN-32-STATIC: movl _xsrc+64, [[EAX:%e.x]] 1223 ; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]] 1224 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]]) 1225 ; DARWIN-32-STATIC-NEXT: ret 1226 1227 ; DARWIN-32-DYNAMIC: _qxx02: 1228 ; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, [[EAX:%e.x]] 1229 ; DARWIN-32-DYNAMIC-NEXT: movl 64([[EAX]]), [[EAX:%e.x]] 1230 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 1231 ; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]] 1232 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 64([[ECX]]) 1233 ; DARWIN-32-DYNAMIC-NEXT: ret 1234 1235 ; DARWIN-32-PIC: _qxx02: 1236 ; DARWIN-32-PIC: calll L17$pb 1237 ; DARWIN-32-PIC-NEXT: L17$pb: 1238 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1239 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L17$pb([[EAX]]), [[ECX:%e.x]] 1240 ; DARWIN-32-PIC-NEXT: movl 64([[ECX]]), [[ECX:%e.x]] 1241 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L17$pb([[EAX]]), [[EAX:%e.x]] 1242 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 1243 ; DARWIN-32-PIC-NEXT: movl [[ECX]], 64([[EAX]]) 1244 ; DARWIN-32-PIC-NEXT: ret 1245 1246 ; DARWIN-64-STATIC: _qxx02: 1247 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 1248 ; DARWIN-64-STATIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 1249 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1250 ; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 1251 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]]) 1252 ; DARWIN-64-STATIC-NEXT: ret 1253 1254 ; DARWIN-64-DYNAMIC: _qxx02: 1255 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 1256 ; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 1257 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1258 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 1259 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]]) 1260 ; DARWIN-64-DYNAMIC-NEXT: ret 1261 1262 ; DARWIN-64-PIC: _qxx02: 1263 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 1264 ; DARWIN-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 1265 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1266 ; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 1267 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 1268 ; DARWIN-64-PIC-NEXT: ret 1269 } 1270 1271 define void @qux03() nounwind { 1272 entry: 1273 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32 1274 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), align 32 1275 ret void 1276 ; LINUX-64-STATIC: qux03: 1277 ; LINUX-64-STATIC: movl dsrc+64(%rip), [[EAX:%e.x]] 1278 ; LINUX-64-STATIC: movl [[EAX]], ddst+64(%rip) 1279 ; LINUX-64-STATIC: ret 1280 1281 ; LINUX-32-STATIC: qux03: 1282 ; LINUX-32-STATIC: movl dsrc+64, [[EAX:%e.x]] 1283 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ddst+64 1284 ; LINUX-32-STATIC-NEXT: ret 1285 1286 ; LINUX-32-PIC: qux03: 1287 ; LINUX-32-PIC: movl dsrc+64, [[EAX:%e.x]] 1288 ; LINUX-32-PIC-NEXT: movl [[EAX]], ddst+64 1289 ; LINUX-32-PIC-NEXT: ret 1290 1291 ; LINUX-64-PIC: qux03: 1292 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 1293 ; LINUX-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 1294 ; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), [[RCX:%r.x]] 1295 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 1296 ; LINUX-64-PIC-NEXT: ret 1297 1298 ; DARWIN-32-STATIC: _qux03: 1299 ; DARWIN-32-STATIC: movl _dsrc+64, [[EAX:%e.x]] 1300 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ddst+64 1301 ; DARWIN-32-STATIC-NEXT: ret 1302 1303 ; DARWIN-32-DYNAMIC: _qux03: 1304 ; DARWIN-32-DYNAMIC: movl _dsrc+64, [[EAX:%e.x]] 1305 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ddst+64 1306 ; DARWIN-32-DYNAMIC-NEXT: ret 1307 1308 ; DARWIN-32-PIC: _qux03: 1309 ; DARWIN-32-PIC: calll L18$pb 1310 ; DARWIN-32-PIC-NEXT: L18$pb: 1311 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1312 ; DARWIN-32-PIC-NEXT: movl (_dsrc-L18$pb)+64([[EAX]]), [[ECX:%e.x]] 1313 ; DARWIN-32-PIC-NEXT: movl [[ECX]], (_ddst-L18$pb)+64([[EAX]]) 1314 ; DARWIN-32-PIC-NEXT: ret 1315 1316 ; DARWIN-64-STATIC: _qux03: 1317 ; DARWIN-64-STATIC: movl _dsrc+64(%rip), [[EAX:%e.x]] 1318 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ddst+64(%rip) 1319 ; DARWIN-64-STATIC-NEXT: ret 1320 1321 ; DARWIN-64-DYNAMIC: _qux03: 1322 ; DARWIN-64-DYNAMIC: movl _dsrc+64(%rip), [[EAX:%e.x]] 1323 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ddst+64(%rip) 1324 ; DARWIN-64-DYNAMIC-NEXT: ret 1325 1326 ; DARWIN-64-PIC: _qux03: 1327 ; DARWIN-64-PIC: movl _dsrc+64(%rip), [[EAX:%e.x]] 1328 ; DARWIN-64-PIC-NEXT: movl [[EAX]], _ddst+64(%rip) 1329 ; DARWIN-64-PIC-NEXT: ret 1330 } 1331 1332 define void @qux04() nounwind { 1333 entry: 1334 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8 1335 ret void 1336 ; LINUX-64-STATIC: qux04: 1337 ; LINUX-64-STATIC: movq $ddst+64, dptr(%rip) 1338 ; LINUX-64-STATIC: ret 1339 1340 ; LINUX-32-STATIC: qux04: 1341 ; LINUX-32-STATIC: movl $ddst+64, dptr 1342 ; LINUX-32-STATIC-NEXT: ret 1343 1344 ; LINUX-32-PIC: qux04: 1345 ; LINUX-32-PIC: movl $ddst+64, dptr 1346 ; LINUX-32-PIC-NEXT: ret 1347 1348 ; LINUX-64-PIC: qux04: 1349 ; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]] 1350 ; LINUX-64-PIC-NEXT: addq $64, [[RAX:%r.x]] 1351 ; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 1352 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 1353 ; LINUX-64-PIC-NEXT: ret 1354 1355 ; DARWIN-32-STATIC: _qux04: 1356 ; DARWIN-32-STATIC: movl $_ddst+64, _dptr 1357 ; DARWIN-32-STATIC-NEXT: ret 1358 1359 ; DARWIN-32-DYNAMIC: _qux04: 1360 ; DARWIN-32-DYNAMIC: movl $_ddst+64, _dptr 1361 ; DARWIN-32-DYNAMIC-NEXT: ret 1362 1363 ; DARWIN-32-PIC: _qux04: 1364 ; DARWIN-32-PIC: calll L19$pb 1365 ; DARWIN-32-PIC-NEXT: L19$pb: 1366 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1367 ; DARWIN-32-PIC-NEXT: leal (_ddst-L19$pb)+64([[EAX]]), [[ECX:%e.x]] 1368 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _dptr-L19$pb([[EAX]]) 1369 ; DARWIN-32-PIC-NEXT: ret 1370 1371 ; DARWIN-64-STATIC: _qux04: 1372 ; DARWIN-64-STATIC: leaq _ddst+64(%rip), [[RAX:%r.x]] 1373 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip) 1374 ; DARWIN-64-STATIC-NEXT: ret 1375 1376 ; DARWIN-64-DYNAMIC: _qux04: 1377 ; DARWIN-64-DYNAMIC: leaq _ddst+64(%rip), [[RAX:%r.x]] 1378 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip) 1379 ; DARWIN-64-DYNAMIC-NEXT: ret 1380 1381 ; DARWIN-64-PIC: _qux04: 1382 ; DARWIN-64-PIC: leaq _ddst+64(%rip), [[RAX:%r.x]] 1383 ; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip) 1384 ; DARWIN-64-PIC-NEXT: ret 1385 } 1386 1387 define void @qux05() nounwind { 1388 entry: 1389 %0 = load i32** @dptr, align 8 1390 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32 1391 %2 = getelementptr i32* %0, i64 16 1392 store i32 %1, i32* %2, align 4 1393 ; LINUX-64-STATIC: qux05: 1394 ; LINUX-64-STATIC: movl dsrc+64(%rip), [[EAX:%e.x]] 1395 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]] 1396 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]]) 1397 ; LINUX-64-STATIC: ret 1398 1399 ; LINUX-32-STATIC: qux05: 1400 ; LINUX-32-STATIC: movl dsrc+64, [[EAX:%e.x]] 1401 ; LINUX-32-STATIC-NEXT: movl dptr, [[ECX:%e.x]] 1402 ; LINUX-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]]) 1403 ; LINUX-32-STATIC-NEXT: ret 1404 ret void 1405 1406 ; LINUX-32-PIC: qux05: 1407 ; LINUX-32-PIC: movl dsrc+64, [[EAX:%e.x]] 1408 ; LINUX-32-PIC-NEXT: movl dptr, [[ECX:%e.x]] 1409 ; LINUX-32-PIC-NEXT: movl [[EAX]], 64([[ECX]]) 1410 ; LINUX-32-PIC-NEXT: ret 1411 1412 ; LINUX-64-PIC: qux05: 1413 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 1414 ; LINUX-64-PIC-NEXT: movl 64([[RAX]]), [[EAX:%e.x]] 1415 ; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 1416 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 1417 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 1418 ; LINUX-64-PIC-NEXT: ret 1419 1420 ; DARWIN-32-STATIC: _qux05: 1421 ; DARWIN-32-STATIC: movl _dsrc+64, [[EAX:%e.x]] 1422 ; DARWIN-32-STATIC-NEXT: movl _dptr, [[ECX:%e.x]] 1423 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]]) 1424 ; DARWIN-32-STATIC-NEXT: ret 1425 1426 ; DARWIN-32-DYNAMIC: _qux05: 1427 ; DARWIN-32-DYNAMIC: movl _dsrc+64, [[EAX:%e.x]] 1428 ; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[ECX:%e.x]] 1429 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 64([[ECX]]) 1430 ; DARWIN-32-DYNAMIC-NEXT: ret 1431 1432 ; DARWIN-32-PIC: _qux05: 1433 ; DARWIN-32-PIC: calll L20$pb 1434 ; DARWIN-32-PIC-NEXT: L20$pb: 1435 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1436 ; DARWIN-32-PIC-NEXT: movl (_dsrc-L20$pb)+64([[EAX]]), [[ECX:%e.x]] 1437 ; DARWIN-32-PIC-NEXT: movl _dptr-L20$pb([[EAX]]), [[EAX:%e.x]] 1438 ; DARWIN-32-PIC-NEXT: movl [[ECX]], 64([[EAX]]) 1439 ; DARWIN-32-PIC-NEXT: ret 1440 1441 ; DARWIN-64-STATIC: _qux05: 1442 ; DARWIN-64-STATIC: movl _dsrc+64(%rip), [[EAX:%e.x]] 1443 ; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 1444 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]]) 1445 ; DARWIN-64-STATIC-NEXT: ret 1446 1447 ; DARWIN-64-DYNAMIC: _qux05: 1448 ; DARWIN-64-DYNAMIC: movl _dsrc+64(%rip), [[EAX:%e.x]] 1449 ; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 1450 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]]) 1451 ; DARWIN-64-DYNAMIC-NEXT: ret 1452 1453 ; DARWIN-64-PIC: _qux05: 1454 ; DARWIN-64-PIC: movl _dsrc+64(%rip), [[EAX:%e.x]] 1455 ; DARWIN-64-PIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 1456 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 1457 ; DARWIN-64-PIC-NEXT: ret 1458 } 1459 1460 define void @qux06() nounwind { 1461 entry: 1462 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4 1463 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), align 4 1464 ret void 1465 ; LINUX-64-STATIC: qux06: 1466 ; LINUX-64-STATIC: movl lsrc+64(%rip), [[EAX:%e.x]] 1467 ; LINUX-64-STATIC: movl [[EAX]], ldst+64 1468 ; LINUX-64-STATIC: ret 1469 1470 ; LINUX-32-STATIC: qux06: 1471 ; LINUX-32-STATIC: movl lsrc+64, [[EAX:%e.x]] 1472 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ldst+64 1473 ; LINUX-32-STATIC-NEXT: ret 1474 1475 ; LINUX-32-PIC: qux06: 1476 ; LINUX-32-PIC: movl lsrc+64, [[EAX:%e.x]] 1477 ; LINUX-32-PIC-NEXT: movl [[EAX]], ldst+64 1478 ; LINUX-32-PIC-NEXT: ret 1479 1480 ; LINUX-64-PIC: qux06: 1481 ; LINUX-64-PIC: movl lsrc+64(%rip), [[EAX:%e.x]] 1482 ; LINUX-64-PIC-NEXT: movl [[EAX]], ldst+64(%rip) 1483 ; LINUX-64-PIC-NEXT: ret 1484 1485 ; DARWIN-32-STATIC: _qux06: 1486 ; DARWIN-32-STATIC: movl _lsrc+64, [[EAX:%e.x]] 1487 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ldst+64 1488 ; DARWIN-32-STATIC-NEXT: ret 1489 1490 ; DARWIN-32-DYNAMIC: _qux06: 1491 ; DARWIN-32-DYNAMIC: movl _lsrc+64, [[EAX:%e.x]] 1492 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ldst+64 1493 ; DARWIN-32-DYNAMIC-NEXT: ret 1494 1495 ; DARWIN-32-PIC: _qux06: 1496 ; DARWIN-32-PIC: calll L21$pb 1497 ; DARWIN-32-PIC-NEXT: L21$pb: 1498 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1499 ; DARWIN-32-PIC-NEXT: movl (_lsrc-L21$pb)+64([[EAX]]), [[ECX:%e.x]] 1500 ; DARWIN-32-PIC-NEXT: movl [[ECX]], (_ldst-L21$pb)+64([[EAX]]) 1501 ; DARWIN-32-PIC-NEXT: ret 1502 1503 ; DARWIN-64-STATIC: _qux06: 1504 ; DARWIN-64-STATIC: movl _lsrc+64(%rip), [[EAX:%e.x]] 1505 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ldst+64(%rip) 1506 ; DARWIN-64-STATIC-NEXT: ret 1507 1508 ; DARWIN-64-DYNAMIC: _qux06: 1509 ; DARWIN-64-DYNAMIC: movl _lsrc+64(%rip), [[EAX:%e.x]] 1510 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ldst+64(%rip) 1511 ; DARWIN-64-DYNAMIC-NEXT: ret 1512 1513 ; DARWIN-64-PIC: _qux06: 1514 ; DARWIN-64-PIC: movl _lsrc+64(%rip), [[EAX:%e.x]] 1515 ; DARWIN-64-PIC-NEXT: movl [[EAX]], _ldst+64(%rip) 1516 ; DARWIN-64-PIC-NEXT: ret 1517 } 1518 1519 define void @qux07() nounwind { 1520 entry: 1521 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8 1522 ret void 1523 ; LINUX-64-STATIC: qux07: 1524 ; LINUX-64-STATIC: movq $ldst+64, lptr 1525 ; LINUX-64-STATIC: ret 1526 1527 ; LINUX-32-STATIC: qux07: 1528 ; LINUX-32-STATIC: movl $ldst+64, lptr 1529 ; LINUX-32-STATIC-NEXT: ret 1530 1531 ; LINUX-32-PIC: qux07: 1532 ; LINUX-32-PIC: movl $ldst+64, lptr 1533 ; LINUX-32-PIC-NEXT: ret 1534 1535 ; LINUX-64-PIC: qux07: 1536 ; LINUX-64-PIC: leaq ldst+64(%rip), [[RAX:%r.x]] 1537 ; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip) 1538 ; LINUX-64-PIC-NEXT: ret 1539 1540 ; DARWIN-32-STATIC: _qux07: 1541 ; DARWIN-32-STATIC: movl $_ldst+64, _lptr 1542 ; DARWIN-32-STATIC-NEXT: ret 1543 1544 ; DARWIN-32-DYNAMIC: _qux07: 1545 ; DARWIN-32-DYNAMIC: movl $_ldst+64, _lptr 1546 ; DARWIN-32-DYNAMIC-NEXT: ret 1547 1548 ; DARWIN-32-PIC: _qux07: 1549 ; DARWIN-32-PIC: calll L22$pb 1550 ; DARWIN-32-PIC-NEXT: L22$pb: 1551 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1552 ; DARWIN-32-PIC-NEXT: leal (_ldst-L22$pb)+64([[EAX]]), [[ECX:%e.x]] 1553 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _lptr-L22$pb([[EAX]]) 1554 ; DARWIN-32-PIC-NEXT: ret 1555 1556 ; DARWIN-64-STATIC: _qux07: 1557 ; DARWIN-64-STATIC: leaq _ldst+64(%rip), [[RAX:%r.x]] 1558 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip) 1559 ; DARWIN-64-STATIC-NEXT: ret 1560 1561 ; DARWIN-64-DYNAMIC: _qux07: 1562 ; DARWIN-64-DYNAMIC: leaq _ldst+64(%rip), [[RAX:%r.x]] 1563 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip) 1564 ; DARWIN-64-DYNAMIC-NEXT: ret 1565 1566 ; DARWIN-64-PIC: _qux07: 1567 ; DARWIN-64-PIC: leaq _ldst+64(%rip), [[RAX:%r.x]] 1568 ; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip) 1569 ; DARWIN-64-PIC-NEXT: ret 1570 } 1571 1572 define void @qux08() nounwind { 1573 entry: 1574 %0 = load i32** @lptr, align 8 1575 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4 1576 %2 = getelementptr i32* %0, i64 16 1577 store i32 %1, i32* %2, align 4 1578 ; LINUX-64-STATIC: qux08: 1579 ; LINUX-64-STATIC: movl lsrc+64(%rip), [[EAX:%e.x]] 1580 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]] 1581 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]]) 1582 ; LINUX-64-STATIC: ret 1583 1584 ; LINUX-32-STATIC: qux08: 1585 ; LINUX-32-STATIC: movl lsrc+64, [[EAX:%e.x]] 1586 ; LINUX-32-STATIC-NEXT: movl lptr, [[ECX:%e.x]] 1587 ; LINUX-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]]) 1588 ; LINUX-32-STATIC-NEXT: ret 1589 ret void 1590 1591 ; LINUX-32-PIC: qux08: 1592 ; LINUX-32-PIC: movl lsrc+64, [[EAX:%e.x]] 1593 ; LINUX-32-PIC-NEXT: movl lptr, [[ECX:%e.x]] 1594 ; LINUX-32-PIC-NEXT: movl [[EAX]], 64([[ECX]]) 1595 ; LINUX-32-PIC-NEXT: ret 1596 1597 ; LINUX-64-PIC: qux08: 1598 ; LINUX-64-PIC: movl lsrc+64(%rip), [[EAX:%e.x]] 1599 ; LINUX-64-PIC-NEXT: movq lptr(%rip), [[RCX:%r.x]] 1600 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 1601 ; LINUX-64-PIC-NEXT: ret 1602 1603 ; DARWIN-32-STATIC: _qux08: 1604 ; DARWIN-32-STATIC: movl _lsrc+64, [[EAX:%e.x]] 1605 ; DARWIN-32-STATIC-NEXT: movl _lptr, [[ECX:%e.x]] 1606 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], 64([[ECX]]) 1607 ; DARWIN-32-STATIC-NEXT: ret 1608 1609 ; DARWIN-32-DYNAMIC: _qux08: 1610 ; DARWIN-32-DYNAMIC: movl _lsrc+64, [[EAX:%e.x]] 1611 ; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[ECX:%e.x]] 1612 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 64([[ECX]]) 1613 ; DARWIN-32-DYNAMIC-NEXT: ret 1614 1615 ; DARWIN-32-PIC: _qux08: 1616 ; DARWIN-32-PIC: calll L23$pb 1617 ; DARWIN-32-PIC-NEXT: L23$pb: 1618 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1619 ; DARWIN-32-PIC-NEXT: movl (_lsrc-L23$pb)+64([[EAX]]), [[ECX:%e.x]] 1620 ; DARWIN-32-PIC-NEXT: movl _lptr-L23$pb([[EAX]]), [[EAX:%e.x]] 1621 ; DARWIN-32-PIC-NEXT: movl [[ECX]], 64([[EAX]]) 1622 ; DARWIN-32-PIC-NEXT: ret 1623 1624 ; DARWIN-64-STATIC: _qux08: 1625 ; DARWIN-64-STATIC: movl _lsrc+64(%rip), [[EAX:%e.x]] 1626 ; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 1627 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]]) 1628 ; DARWIN-64-STATIC-NEXT: ret 1629 1630 ; DARWIN-64-DYNAMIC: _qux08: 1631 ; DARWIN-64-DYNAMIC: movl _lsrc+64(%rip), [[EAX:%e.x]] 1632 ; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 1633 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]]) 1634 ; DARWIN-64-DYNAMIC-NEXT: ret 1635 1636 ; DARWIN-64-PIC: _qux08: 1637 ; DARWIN-64-PIC: movl _lsrc+64(%rip), [[EAX:%e.x]] 1638 ; DARWIN-64-PIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 1639 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]]) 1640 ; DARWIN-64-PIC-NEXT: ret 1641 } 1642 1643 define void @ind00(i64 %i) nounwind { 1644 entry: 1645 %0 = getelementptr [131072 x i32]* @src, i64 0, i64 %i 1646 %1 = load i32* %0, align 4 1647 %2 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i 1648 store i32 %1, i32* %2, align 4 1649 ret void 1650 ; LINUX-64-STATIC: ind00: 1651 ; LINUX-64-STATIC: movl src(,%rdi,4), [[EAX:%e.x]] 1652 ; LINUX-64-STATIC: movl [[EAX]], dst(,%rdi,4) 1653 ; LINUX-64-STATIC: ret 1654 1655 ; LINUX-32-STATIC: ind00: 1656 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 1657 ; LINUX-32-STATIC-NEXT: movl src(,[[EAX]],4), [[ECX:%e.x]] 1658 ; LINUX-32-STATIC-NEXT: movl [[ECX]], dst(,[[EAX]],4) 1659 ; LINUX-32-STATIC-NEXT: ret 1660 1661 ; LINUX-32-PIC: ind00: 1662 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 1663 ; LINUX-32-PIC-NEXT: movl src(,[[EAX]],4), [[ECX:%e.x]] 1664 ; LINUX-32-PIC-NEXT: movl [[ECX]], dst(,[[EAX]],4) 1665 ; LINUX-32-PIC-NEXT: ret 1666 1667 ; LINUX-64-PIC: ind00: 1668 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 1669 ; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 1670 ; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), [[RCX:%r.x]] 1671 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 1672 ; LINUX-64-PIC-NEXT: ret 1673 1674 ; DARWIN-32-STATIC: _ind00: 1675 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 1676 ; DARWIN-32-STATIC-NEXT: movl _src(,[[EAX]],4), [[ECX:%e.x]] 1677 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], _dst(,[[EAX]],4) 1678 ; DARWIN-32-STATIC-NEXT: ret 1679 1680 ; DARWIN-32-DYNAMIC: _ind00: 1681 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 1682 ; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]] 1683 ; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]],[[EAX]],4), [[ECX:%e.x]] 1684 ; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[EDX:%e.x]] 1685 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 1686 ; DARWIN-32-DYNAMIC-NEXT: ret 1687 1688 ; DARWIN-32-PIC: _ind00: 1689 ; DARWIN-32-PIC: calll L24$pb 1690 ; DARWIN-32-PIC-NEXT: L24$pb: 1691 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1692 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 1693 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L24$pb([[EAX]]), [[EDX:%e.x]] 1694 ; DARWIN-32-PIC-NEXT: movl ([[EDX]],[[ECX]],4), [[EDX:%e.x]] 1695 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L24$pb([[EAX]]), [[EAX:%e.x]] 1696 ; DARWIN-32-PIC-NEXT: movl [[EDX]], ([[EAX]],[[ECX]],4) 1697 ; DARWIN-32-PIC-NEXT: ret 1698 1699 ; DARWIN-64-STATIC: _ind00: 1700 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 1701 ; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 1702 ; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 1703 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 1704 ; DARWIN-64-STATIC-NEXT: ret 1705 1706 ; DARWIN-64-DYNAMIC: _ind00: 1707 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 1708 ; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 1709 ; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 1710 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 1711 ; DARWIN-64-DYNAMIC-NEXT: ret 1712 1713 ; DARWIN-64-PIC: _ind00: 1714 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 1715 ; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 1716 ; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 1717 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 1718 ; DARWIN-64-PIC-NEXT: ret 1719 } 1720 1721 define void @ixd00(i64 %i) nounwind { 1722 entry: 1723 %0 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i 1724 %1 = load i32* %0, align 4 1725 %2 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i 1726 store i32 %1, i32* %2, align 4 1727 ret void 1728 ; LINUX-64-STATIC: ixd00: 1729 ; LINUX-64-STATIC: movl xsrc(,%rdi,4), [[EAX:%e.x]] 1730 ; LINUX-64-STATIC: movl [[EAX]], xdst(,%rdi,4) 1731 ; LINUX-64-STATIC: ret 1732 1733 ; LINUX-32-STATIC: ixd00: 1734 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 1735 ; LINUX-32-STATIC-NEXT: movl xsrc(,[[EAX]],4), [[ECX:%e.x]] 1736 ; LINUX-32-STATIC-NEXT: movl [[ECX]], xdst(,[[EAX]],4) 1737 ; LINUX-32-STATIC-NEXT: ret 1738 1739 ; LINUX-32-PIC: ixd00: 1740 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 1741 ; LINUX-32-PIC-NEXT: movl xsrc(,[[EAX]],4), [[ECX:%e.x]] 1742 ; LINUX-32-PIC-NEXT: movl [[ECX]], xdst(,[[EAX]],4) 1743 ; LINUX-32-PIC-NEXT: ret 1744 1745 ; LINUX-64-PIC: ixd00: 1746 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 1747 ; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 1748 ; LINUX-64-PIC-NEXT: movq xdst@GOTPCREL(%rip), [[RCX:%r.x]] 1749 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 1750 ; LINUX-64-PIC-NEXT: ret 1751 1752 ; DARWIN-32-STATIC: _ixd00: 1753 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 1754 ; DARWIN-32-STATIC-NEXT: movl _xsrc(,[[EAX]],4), [[ECX:%e.x]] 1755 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], _xdst(,[[EAX]],4) 1756 ; DARWIN-32-STATIC-NEXT: ret 1757 1758 ; DARWIN-32-DYNAMIC: _ixd00: 1759 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 1760 ; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, [[ECX:%e.x]] 1761 ; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]],[[EAX]],4), [[ECX:%e.x]] 1762 ; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[EDX:%e.x]] 1763 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 1764 ; DARWIN-32-DYNAMIC-NEXT: ret 1765 1766 ; DARWIN-32-PIC: _ixd00: 1767 ; DARWIN-32-PIC: calll L25$pb 1768 ; DARWIN-32-PIC-NEXT: L25$pb: 1769 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1770 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 1771 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L25$pb([[EAX]]), [[EDX:%e.x]] 1772 ; DARWIN-32-PIC-NEXT: movl ([[EDX]],[[ECX]],4), [[EDX:%e.x]] 1773 ; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L25$pb([[EAX]]), [[EAX:%e.x]] 1774 ; DARWIN-32-PIC-NEXT: movl [[EDX]], ([[EAX]],[[ECX]],4) 1775 ; DARWIN-32-PIC-NEXT: ret 1776 1777 ; DARWIN-64-STATIC: _ixd00: 1778 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 1779 ; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 1780 ; DARWIN-64-STATIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]] 1781 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 1782 ; DARWIN-64-STATIC-NEXT: ret 1783 1784 ; DARWIN-64-DYNAMIC: _ixd00: 1785 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 1786 ; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 1787 ; DARWIN-64-DYNAMIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]] 1788 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 1789 ; DARWIN-64-DYNAMIC-NEXT: ret 1790 1791 ; DARWIN-64-PIC: _ixd00: 1792 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 1793 ; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 1794 ; DARWIN-64-PIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]] 1795 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 1796 ; DARWIN-64-PIC-NEXT: ret 1797 } 1798 1799 define void @ind01(i64 %i) nounwind { 1800 entry: 1801 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i 1802 store i32* %0, i32** @ptr, align 8 1803 ret void 1804 ; LINUX-64-STATIC: ind01: 1805 ; LINUX-64-STATIC: leaq dst(,%rdi,4), [[RAX:%r.x]] 1806 ; LINUX-64-STATIC: movq [[RAX]], ptr 1807 ; LINUX-64-STATIC: ret 1808 1809 ; LINUX-32-STATIC: ind01: 1810 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 1811 ; LINUX-32-STATIC-NEXT: leal dst(,[[EAX]],4), [[EAX:%e.x]] 1812 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ptr 1813 ; LINUX-32-STATIC-NEXT: ret 1814 1815 ; LINUX-32-PIC: ind01: 1816 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 1817 ; LINUX-32-PIC-NEXT: leal dst(,[[EAX]],4), [[EAX:%e.x]] 1818 ; LINUX-32-PIC-NEXT: movl [[EAX]], ptr 1819 ; LINUX-32-PIC-NEXT: ret 1820 1821 ; LINUX-64-PIC: ind01: 1822 ; LINUX-64-PIC: shlq $2, %rdi 1823 ; LINUX-64-PIC-NEXT: addq dst@GOTPCREL(%rip), %rdi 1824 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]] 1825 ; LINUX-64-PIC-NEXT: movq %rdi, ([[RAX]]) 1826 ; LINUX-64-PIC-NEXT: ret 1827 1828 ; DARWIN-32-STATIC: _ind01: 1829 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 1830 ; DARWIN-32-STATIC-NEXT: leal _dst(,[[EAX]],4), [[EAX:%e.x]] 1831 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ptr 1832 ; DARWIN-32-STATIC-NEXT: ret 1833 1834 ; DARWIN-32-DYNAMIC: _ind01: 1835 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 1836 ; DARWIN-32-DYNAMIC-NEXT: shll $2, [[EAX:%e.x]] 1837 ; DARWIN-32-DYNAMIC-NEXT: addl L_dst$non_lazy_ptr, [[EAX:%e.x]] 1838 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 1839 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 1840 ; DARWIN-32-DYNAMIC-NEXT: ret 1841 1842 ; DARWIN-32-PIC: _ind01: 1843 ; DARWIN-32-PIC: calll L26$pb 1844 ; DARWIN-32-PIC-NEXT: L26$pb: 1845 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1846 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 1847 ; DARWIN-32-PIC-NEXT: shll $2, [[ECX:%e.x]] 1848 ; DARWIN-32-PIC-NEXT: addl L_dst$non_lazy_ptr-L26$pb([[EAX]]), [[ECX:%e.x]] 1849 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L26$pb([[EAX]]), [[EAX:%e.x]] 1850 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 1851 ; DARWIN-32-PIC-NEXT: ret 1852 1853 ; DARWIN-64-STATIC: _ind01: 1854 ; DARWIN-64-STATIC: shlq $2, %rdi 1855 ; DARWIN-64-STATIC-NEXT: addq _dst@GOTPCREL(%rip), %rdi 1856 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 1857 ; DARWIN-64-STATIC-NEXT: movq %rdi, ([[RAX]]) 1858 ; DARWIN-64-STATIC-NEXT: ret 1859 1860 ; DARWIN-64-DYNAMIC: _ind01: 1861 ; DARWIN-64-DYNAMIC: shlq $2, %rdi 1862 ; DARWIN-64-DYNAMIC-NEXT: addq _dst@GOTPCREL(%rip), %rdi 1863 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 1864 ; DARWIN-64-DYNAMIC-NEXT: movq %rdi, ([[RAX]]) 1865 ; DARWIN-64-DYNAMIC-NEXT: ret 1866 1867 ; DARWIN-64-PIC: _ind01: 1868 ; DARWIN-64-PIC: shlq $2, %rdi 1869 ; DARWIN-64-PIC-NEXT: addq _dst@GOTPCREL(%rip), %rdi 1870 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 1871 ; DARWIN-64-PIC-NEXT: movq %rdi, ([[RAX]]) 1872 ; DARWIN-64-PIC-NEXT: ret 1873 } 1874 1875 define void @ixd01(i64 %i) nounwind { 1876 entry: 1877 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i 1878 store i32* %0, i32** @ptr, align 8 1879 ret void 1880 ; LINUX-64-STATIC: ixd01: 1881 ; LINUX-64-STATIC: leaq xdst(,%rdi,4), [[RAX:%r.x]] 1882 ; LINUX-64-STATIC: movq [[RAX]], ptr 1883 ; LINUX-64-STATIC: ret 1884 1885 ; LINUX-32-STATIC: ixd01: 1886 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 1887 ; LINUX-32-STATIC-NEXT: leal xdst(,[[EAX]],4), [[EAX:%e.x]] 1888 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ptr 1889 ; LINUX-32-STATIC-NEXT: ret 1890 1891 ; LINUX-32-PIC: ixd01: 1892 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 1893 ; LINUX-32-PIC-NEXT: leal xdst(,[[EAX]],4), [[EAX:%e.x]] 1894 ; LINUX-32-PIC-NEXT: movl [[EAX]], ptr 1895 ; LINUX-32-PIC-NEXT: ret 1896 1897 ; LINUX-64-PIC: ixd01: 1898 ; LINUX-64-PIC: shlq $2, %rdi 1899 ; LINUX-64-PIC-NEXT: addq xdst@GOTPCREL(%rip), %rdi 1900 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]] 1901 ; LINUX-64-PIC-NEXT: movq %rdi, ([[RAX]]) 1902 ; LINUX-64-PIC-NEXT: ret 1903 1904 ; DARWIN-32-STATIC: _ixd01: 1905 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 1906 ; DARWIN-32-STATIC-NEXT: leal _xdst(,[[EAX]],4), [[EAX:%e.x]] 1907 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ptr 1908 ; DARWIN-32-STATIC-NEXT: ret 1909 1910 ; DARWIN-32-DYNAMIC: _ixd01: 1911 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 1912 ; DARWIN-32-DYNAMIC-NEXT: shll $2, [[EAX:%e.x]] 1913 ; DARWIN-32-DYNAMIC-NEXT: addl L_xdst$non_lazy_ptr, [[EAX:%e.x]] 1914 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 1915 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 1916 ; DARWIN-32-DYNAMIC-NEXT: ret 1917 1918 ; DARWIN-32-PIC: _ixd01: 1919 ; DARWIN-32-PIC: calll L27$pb 1920 ; DARWIN-32-PIC-NEXT: L27$pb: 1921 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 1922 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 1923 ; DARWIN-32-PIC-NEXT: shll $2, [[ECX:%e.x]] 1924 ; DARWIN-32-PIC-NEXT: addl L_xdst$non_lazy_ptr-L27$pb([[EAX]]), [[ECX:%e.x]] 1925 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L27$pb([[EAX]]), [[EAX:%e.x]] 1926 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 1927 ; DARWIN-32-PIC-NEXT: ret 1928 1929 ; DARWIN-64-STATIC: _ixd01: 1930 ; DARWIN-64-STATIC: shlq $2, %rdi 1931 ; DARWIN-64-STATIC-NEXT: addq _xdst@GOTPCREL(%rip), %rdi 1932 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 1933 ; DARWIN-64-STATIC-NEXT: movq %rdi, ([[RAX]]) 1934 ; DARWIN-64-STATIC-NEXT: ret 1935 1936 ; DARWIN-64-DYNAMIC: _ixd01: 1937 ; DARWIN-64-DYNAMIC: shlq $2, %rdi 1938 ; DARWIN-64-DYNAMIC-NEXT: addq _xdst@GOTPCREL(%rip), %rdi 1939 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 1940 ; DARWIN-64-DYNAMIC-NEXT: movq %rdi, ([[RAX]]) 1941 ; DARWIN-64-DYNAMIC-NEXT: ret 1942 1943 ; DARWIN-64-PIC: _ixd01: 1944 ; DARWIN-64-PIC: shlq $2, %rdi 1945 ; DARWIN-64-PIC-NEXT: addq _xdst@GOTPCREL(%rip), %rdi 1946 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 1947 ; DARWIN-64-PIC-NEXT: movq %rdi, ([[RAX]]) 1948 ; DARWIN-64-PIC-NEXT: ret 1949 } 1950 1951 define void @ind02(i64 %i) nounwind { 1952 entry: 1953 %0 = load i32** @ptr, align 8 1954 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %i 1955 %2 = load i32* %1, align 4 1956 %3 = getelementptr i32* %0, i64 %i 1957 store i32 %2, i32* %3, align 4 1958 ret void 1959 ; LINUX-64-STATIC: ind02: 1960 ; LINUX-64-STATIC: movl src(,%rdi,4), [[EAX:%e.x]] 1961 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 1962 ; LINUX-64-STATIC: movl [[EAX]], ([[RCX]],%rdi,4) 1963 ; LINUX-64-STATIC: ret 1964 1965 ; LINUX-32-STATIC: ind02: 1966 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 1967 ; LINUX-32-STATIC-NEXT: movl src(,[[EAX]],4), [[ECX:%e.x]] 1968 ; LINUX-32-STATIC-NEXT: movl ptr, [[EDX:%e.x]] 1969 ; LINUX-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 1970 ; LINUX-32-STATIC-NEXT: ret 1971 1972 ; LINUX-32-PIC: ind02: 1973 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 1974 ; LINUX-32-PIC-NEXT: movl src(,[[EAX]],4), [[ECX:%e.x]] 1975 ; LINUX-32-PIC-NEXT: movl ptr, [[EDX:%e.x]] 1976 ; LINUX-32-PIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 1977 ; LINUX-32-PIC-NEXT: ret 1978 1979 ; LINUX-64-PIC: ind02: 1980 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 1981 ; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 1982 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 1983 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 1984 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 1985 ; LINUX-64-PIC-NEXT: ret 1986 1987 ; DARWIN-32-STATIC: _ind02: 1988 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 1989 ; DARWIN-32-STATIC-NEXT: movl _src(,[[EAX]],4), [[ECX:%e.x]] 1990 ; DARWIN-32-STATIC-NEXT: movl _ptr, [[EDX:%e.x]] 1991 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 1992 ; DARWIN-32-STATIC-NEXT: ret 1993 1994 ; DARWIN-32-DYNAMIC: _ind02: 1995 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 1996 ; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]] 1997 ; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]],[[EAX]],4), [[ECX:%e.x]] 1998 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[EDX:%e.x]] 1999 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EDX]]), [[EDX:%e.x]] 2000 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2001 ; DARWIN-32-DYNAMIC-NEXT: ret 2002 2003 ; DARWIN-32-PIC: _ind02: 2004 ; DARWIN-32-PIC: calll L28$pb 2005 ; DARWIN-32-PIC-NEXT: L28$pb: 2006 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2007 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2008 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L28$pb([[EAX]]), [[EDX:%e.x]] 2009 ; DARWIN-32-PIC-NEXT: movl ([[EDX]],[[ECX]],4), [[EDX:%e.x]] 2010 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L28$pb([[EAX]]), [[EAX:%e.x]] 2011 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 2012 ; DARWIN-32-PIC-NEXT: movl [[EDX]], ([[EAX]],[[ECX]],4) 2013 ; DARWIN-32-PIC-NEXT: ret 2014 2015 ; DARWIN-64-STATIC: _ind02: 2016 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 2017 ; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2018 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2019 ; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 2020 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2021 ; DARWIN-64-STATIC-NEXT: ret 2022 2023 ; DARWIN-64-DYNAMIC: _ind02: 2024 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 2025 ; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2026 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2027 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 2028 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2029 ; DARWIN-64-DYNAMIC-NEXT: ret 2030 2031 ; DARWIN-64-PIC: _ind02: 2032 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 2033 ; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2034 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2035 ; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 2036 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2037 ; DARWIN-64-PIC-NEXT: ret 2038 } 2039 2040 define void @ixd02(i64 %i) nounwind { 2041 entry: 2042 %0 = load i32** @ptr, align 8 2043 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i 2044 %2 = load i32* %1, align 4 2045 %3 = getelementptr i32* %0, i64 %i 2046 store i32 %2, i32* %3, align 4 2047 ret void 2048 ; LINUX-64-STATIC: ixd02: 2049 ; LINUX-64-STATIC: movl xsrc(,%rdi,4), [[EAX:%e.x]] 2050 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 2051 ; LINUX-64-STATIC: movl [[EAX]], ([[RCX]],%rdi,4) 2052 ; LINUX-64-STATIC: ret 2053 2054 ; LINUX-32-STATIC: ixd02: 2055 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2056 ; LINUX-32-STATIC-NEXT: movl xsrc(,[[EAX]],4), [[ECX:%e.x]] 2057 ; LINUX-32-STATIC-NEXT: movl ptr, [[EDX:%e.x]] 2058 ; LINUX-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2059 ; LINUX-32-STATIC-NEXT: ret 2060 2061 ; LINUX-32-PIC: ixd02: 2062 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 2063 ; LINUX-32-PIC-NEXT: movl xsrc(,[[EAX]],4), [[ECX:%e.x]] 2064 ; LINUX-32-PIC-NEXT: movl ptr, [[EDX:%e.x]] 2065 ; LINUX-32-PIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2066 ; LINUX-32-PIC-NEXT: ret 2067 2068 ; LINUX-64-PIC: ixd02: 2069 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 2070 ; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2071 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2072 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 2073 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2074 ; LINUX-64-PIC-NEXT: ret 2075 2076 ; DARWIN-32-STATIC: _ixd02: 2077 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2078 ; DARWIN-32-STATIC-NEXT: movl _xsrc(,[[EAX]],4), [[ECX:%e.x]] 2079 ; DARWIN-32-STATIC-NEXT: movl _ptr, [[EDX:%e.x]] 2080 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2081 ; DARWIN-32-STATIC-NEXT: ret 2082 2083 ; DARWIN-32-DYNAMIC: _ixd02: 2084 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 2085 ; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, [[ECX:%e.x]] 2086 ; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]],[[EAX]],4), [[ECX:%e.x]] 2087 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[EDX:%e.x]] 2088 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EDX]]), [[EDX:%e.x]] 2089 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2090 ; DARWIN-32-DYNAMIC-NEXT: ret 2091 2092 ; DARWIN-32-PIC: _ixd02: 2093 ; DARWIN-32-PIC: calll L29$pb 2094 ; DARWIN-32-PIC-NEXT: L29$pb: 2095 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2096 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2097 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L29$pb([[EAX]]), [[EDX:%e.x]] 2098 ; DARWIN-32-PIC-NEXT: movl ([[EDX]],[[ECX]],4), [[EDX:%e.x]] 2099 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L29$pb([[EAX]]), [[EAX:%e.x]] 2100 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 2101 ; DARWIN-32-PIC-NEXT: movl [[EDX]], ([[EAX]],[[ECX]],4) 2102 ; DARWIN-32-PIC-NEXT: ret 2103 2104 ; DARWIN-64-STATIC: _ixd02: 2105 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 2106 ; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2107 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2108 ; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 2109 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2110 ; DARWIN-64-STATIC-NEXT: ret 2111 2112 ; DARWIN-64-DYNAMIC: _ixd02: 2113 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 2114 ; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2115 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2116 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 2117 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2118 ; DARWIN-64-DYNAMIC-NEXT: ret 2119 2120 ; DARWIN-64-PIC: _ixd02: 2121 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 2122 ; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2123 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2124 ; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 2125 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2126 ; DARWIN-64-PIC-NEXT: ret 2127 } 2128 2129 define void @ind03(i64 %i) nounwind { 2130 entry: 2131 %0 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i 2132 %1 = load i32* %0, align 4 2133 %2 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i 2134 store i32 %1, i32* %2, align 4 2135 ret void 2136 ; LINUX-64-STATIC: ind03: 2137 ; LINUX-64-STATIC: movl dsrc(,%rdi,4), [[EAX:%e.x]] 2138 ; LINUX-64-STATIC: movl [[EAX]], ddst(,%rdi,4) 2139 ; LINUX-64-STATIC: ret 2140 2141 ; LINUX-32-STATIC: ind03: 2142 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2143 ; LINUX-32-STATIC-NEXT: movl dsrc(,[[EAX]],4), [[ECX:%e.x]] 2144 ; LINUX-32-STATIC-NEXT: movl [[ECX]], ddst(,[[EAX]],4) 2145 ; LINUX-32-STATIC-NEXT: ret 2146 2147 ; LINUX-32-PIC: ind03: 2148 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 2149 ; LINUX-32-PIC-NEXT: movl dsrc(,[[EAX]],4), [[ECX:%e.x]] 2150 ; LINUX-32-PIC-NEXT: movl [[ECX]], ddst(,[[EAX]],4) 2151 ; LINUX-32-PIC-NEXT: ret 2152 2153 ; LINUX-64-PIC: ind03: 2154 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 2155 ; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2156 ; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), [[RCX:%r.x]] 2157 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2158 ; LINUX-64-PIC-NEXT: ret 2159 2160 ; DARWIN-32-STATIC: _ind03: 2161 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2162 ; DARWIN-32-STATIC-NEXT: movl _dsrc(,[[EAX]],4), [[ECX:%e.x]] 2163 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], _ddst(,[[EAX]],4) 2164 ; DARWIN-32-STATIC-NEXT: ret 2165 2166 ; DARWIN-32-DYNAMIC: _ind03: 2167 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 2168 ; DARWIN-32-DYNAMIC-NEXT: movl _dsrc(,[[EAX]],4), [[ECX:%e.x]] 2169 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], _ddst(,[[EAX]],4) 2170 ; DARWIN-32-DYNAMIC-NEXT: ret 2171 2172 ; DARWIN-32-PIC: _ind03: 2173 ; DARWIN-32-PIC: calll L30$pb 2174 ; DARWIN-32-PIC-NEXT: L30$pb: 2175 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2176 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2177 ; DARWIN-32-PIC-NEXT: movl _dsrc-L30$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]] 2178 ; DARWIN-32-PIC-NEXT: movl [[EDX]], _ddst-L30$pb([[EAX]],[[ECX]],4) 2179 ; DARWIN-32-PIC-NEXT: ret 2180 2181 ; DARWIN-64-STATIC: _ind03: 2182 ; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]] 2183 ; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2184 ; DARWIN-64-STATIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]] 2185 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2186 ; DARWIN-64-STATIC-NEXT: ret 2187 2188 ; DARWIN-64-DYNAMIC: _ind03: 2189 ; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]] 2190 ; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2191 ; DARWIN-64-DYNAMIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]] 2192 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2193 ; DARWIN-64-DYNAMIC-NEXT: ret 2194 2195 ; DARWIN-64-PIC: _ind03: 2196 ; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]] 2197 ; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2198 ; DARWIN-64-PIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]] 2199 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2200 ; DARWIN-64-PIC-NEXT: ret 2201 } 2202 2203 define void @ind04(i64 %i) nounwind { 2204 entry: 2205 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i 2206 store i32* %0, i32** @dptr, align 8 2207 ret void 2208 ; LINUX-64-STATIC: ind04: 2209 ; LINUX-64-STATIC: leaq ddst(,%rdi,4), [[RAX:%r.x]] 2210 ; LINUX-64-STATIC: movq [[RAX]], dptr 2211 ; LINUX-64-STATIC: ret 2212 2213 ; LINUX-32-STATIC: ind04: 2214 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2215 ; LINUX-32-STATIC-NEXT: leal ddst(,[[EAX]],4), [[EAX:%e.x]] 2216 ; LINUX-32-STATIC-NEXT: movl [[EAX]], dptr 2217 ; LINUX-32-STATIC-NEXT: ret 2218 2219 ; LINUX-32-PIC: ind04: 2220 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 2221 ; LINUX-32-PIC-NEXT: leal ddst(,[[EAX]],4), [[EAX:%e.x]] 2222 ; LINUX-32-PIC-NEXT: movl [[EAX]], dptr 2223 ; LINUX-32-PIC-NEXT: ret 2224 2225 ; LINUX-64-PIC: ind04: 2226 ; LINUX-64-PIC: shlq $2, %rdi 2227 ; LINUX-64-PIC-NEXT: addq ddst@GOTPCREL(%rip), %rdi 2228 ; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]] 2229 ; LINUX-64-PIC-NEXT: movq %rdi, ([[RAX]]) 2230 ; LINUX-64-PIC-NEXT: ret 2231 2232 ; DARWIN-32-STATIC: _ind04: 2233 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2234 ; DARWIN-32-STATIC-NEXT: leal _ddst(,[[EAX]],4), [[EAX:%e.x]] 2235 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dptr 2236 ; DARWIN-32-STATIC-NEXT: ret 2237 2238 ; DARWIN-32-DYNAMIC: _ind04: 2239 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 2240 ; DARWIN-32-DYNAMIC-NEXT: leal _ddst(,[[EAX]],4), [[EAX:%e.x]] 2241 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _dptr 2242 ; DARWIN-32-DYNAMIC-NEXT: ret 2243 2244 ; DARWIN-32-PIC: _ind04: 2245 ; DARWIN-32-PIC: calll L31$pb 2246 ; DARWIN-32-PIC-NEXT: L31$pb: 2247 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2248 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2249 ; DARWIN-32-PIC-NEXT: leal _ddst-L31$pb([[EAX]],[[ECX]],4), [[ECX:%e.x]] 2250 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _dptr-L31$pb([[EAX]]) 2251 ; DARWIN-32-PIC-NEXT: ret 2252 2253 ; DARWIN-64-STATIC: _ind04: 2254 ; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]] 2255 ; DARWIN-64-STATIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]] 2256 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip) 2257 ; DARWIN-64-STATIC-NEXT: ret 2258 2259 ; DARWIN-64-DYNAMIC: _ind04: 2260 ; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]] 2261 ; DARWIN-64-DYNAMIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]] 2262 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip) 2263 ; DARWIN-64-DYNAMIC-NEXT: ret 2264 2265 ; DARWIN-64-PIC: _ind04: 2266 ; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]] 2267 ; DARWIN-64-PIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]] 2268 ; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip) 2269 ; DARWIN-64-PIC-NEXT: ret 2270 } 2271 2272 define void @ind05(i64 %i) nounwind { 2273 entry: 2274 %0 = load i32** @dptr, align 8 2275 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i 2276 %2 = load i32* %1, align 4 2277 %3 = getelementptr i32* %0, i64 %i 2278 store i32 %2, i32* %3, align 4 2279 ret void 2280 ; LINUX-64-STATIC: ind05: 2281 ; LINUX-64-STATIC: movl dsrc(,%rdi,4), [[EAX:%e.x]] 2282 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]] 2283 ; LINUX-64-STATIC: movl [[EAX]], ([[RCX]],%rdi,4) 2284 ; LINUX-64-STATIC: ret 2285 2286 ; LINUX-32-STATIC: ind05: 2287 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2288 ; LINUX-32-STATIC-NEXT: movl dsrc(,[[EAX]],4), [[ECX:%e.x]] 2289 ; LINUX-32-STATIC-NEXT: movl dptr, [[EDX:%e.x]] 2290 ; LINUX-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2291 ; LINUX-32-STATIC-NEXT: ret 2292 2293 ; LINUX-32-PIC: ind05: 2294 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 2295 ; LINUX-32-PIC-NEXT: movl dsrc(,[[EAX]],4), [[ECX:%e.x]] 2296 ; LINUX-32-PIC-NEXT: movl dptr, [[EDX:%e.x]] 2297 ; LINUX-32-PIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2298 ; LINUX-32-PIC-NEXT: ret 2299 2300 ; LINUX-64-PIC: ind05: 2301 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 2302 ; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2303 ; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 2304 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 2305 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2306 ; LINUX-64-PIC-NEXT: ret 2307 2308 ; DARWIN-32-STATIC: _ind05: 2309 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2310 ; DARWIN-32-STATIC-NEXT: movl _dsrc(,[[EAX]],4), [[ECX:%e.x]] 2311 ; DARWIN-32-STATIC-NEXT: movl _dptr, [[EDX:%e.x]] 2312 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2313 ; DARWIN-32-STATIC-NEXT: ret 2314 2315 ; DARWIN-32-DYNAMIC: _ind05: 2316 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 2317 ; DARWIN-32-DYNAMIC-NEXT: movl _dsrc(,[[EAX]],4), [[ECX:%e.x]] 2318 ; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[EDX:%e.x]] 2319 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2320 ; DARWIN-32-DYNAMIC-NEXT: ret 2321 2322 ; DARWIN-32-PIC: _ind05: 2323 ; DARWIN-32-PIC: calll L32$pb 2324 ; DARWIN-32-PIC-NEXT: L32$pb: 2325 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2326 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2327 ; DARWIN-32-PIC-NEXT: movl _dsrc-L32$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]] 2328 ; DARWIN-32-PIC-NEXT: movl _dptr-L32$pb([[EAX]]), [[EAX:%e.x]] 2329 ; DARWIN-32-PIC-NEXT: movl [[EDX]], ([[EAX]],[[ECX]],4) 2330 ; DARWIN-32-PIC-NEXT: ret 2331 2332 ; DARWIN-64-STATIC: _ind05: 2333 ; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]] 2334 ; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2335 ; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 2336 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2337 ; DARWIN-64-STATIC-NEXT: ret 2338 2339 ; DARWIN-64-DYNAMIC: _ind05: 2340 ; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]] 2341 ; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2342 ; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 2343 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2344 ; DARWIN-64-DYNAMIC-NEXT: ret 2345 2346 ; DARWIN-64-PIC: _ind05: 2347 ; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]] 2348 ; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2349 ; DARWIN-64-PIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 2350 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2351 ; DARWIN-64-PIC-NEXT: ret 2352 } 2353 2354 define void @ind06(i64 %i) nounwind { 2355 entry: 2356 %0 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i 2357 %1 = load i32* %0, align 4 2358 %2 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i 2359 store i32 %1, i32* %2, align 4 2360 ret void 2361 ; LINUX-64-STATIC: ind06: 2362 ; LINUX-64-STATIC: movl lsrc(,%rdi,4), [[EAX:%e.x]] 2363 ; LINUX-64-STATIC: movl [[EAX]], ldst(,%rdi,4) 2364 ; LINUX-64-STATIC: ret 2365 2366 ; LINUX-32-STATIC: ind06: 2367 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2368 ; LINUX-32-STATIC-NEXT: movl lsrc(,[[EAX]],4), [[ECX:%e.x]] 2369 ; LINUX-32-STATIC-NEXT: movl [[ECX]], ldst(,[[EAX]],4) 2370 ; LINUX-32-STATIC-NEXT: ret 2371 2372 ; LINUX-32-PIC: ind06: 2373 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 2374 ; LINUX-32-PIC-NEXT: movl lsrc(,[[EAX]],4), [[ECX:%e.x]] 2375 ; LINUX-32-PIC-NEXT: movl [[ECX]], ldst(,[[EAX]],4) 2376 ; LINUX-32-PIC-NEXT: ret 2377 2378 ; LINUX-64-PIC: ind06: 2379 ; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]] 2380 ; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2381 ; LINUX-64-PIC-NEXT: leaq ldst(%rip), [[RCX:%r.x]] 2382 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2383 ; LINUX-64-PIC-NEXT: ret 2384 2385 ; DARWIN-32-STATIC: _ind06: 2386 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2387 ; DARWIN-32-STATIC-NEXT: movl _lsrc(,[[EAX]],4), [[ECX:%e.x]] 2388 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], _ldst(,[[EAX]],4) 2389 ; DARWIN-32-STATIC-NEXT: ret 2390 2391 ; DARWIN-32-DYNAMIC: _ind06: 2392 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 2393 ; DARWIN-32-DYNAMIC-NEXT: movl _lsrc(,[[EAX]],4), [[ECX:%e.x]] 2394 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], _ldst(,[[EAX]],4) 2395 ; DARWIN-32-DYNAMIC-NEXT: ret 2396 2397 ; DARWIN-32-PIC: _ind06: 2398 ; DARWIN-32-PIC: calll L33$pb 2399 ; DARWIN-32-PIC-NEXT: L33$pb: 2400 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2401 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2402 ; DARWIN-32-PIC-NEXT: movl _lsrc-L33$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]] 2403 ; DARWIN-32-PIC-NEXT: movl [[EDX]], _ldst-L33$pb([[EAX]],[[ECX]],4) 2404 ; DARWIN-32-PIC-NEXT: ret 2405 2406 ; DARWIN-64-STATIC: _ind06: 2407 ; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]] 2408 ; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2409 ; DARWIN-64-STATIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]] 2410 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2411 ; DARWIN-64-STATIC-NEXT: ret 2412 2413 ; DARWIN-64-DYNAMIC: _ind06: 2414 ; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]] 2415 ; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2416 ; DARWIN-64-DYNAMIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]] 2417 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2418 ; DARWIN-64-DYNAMIC-NEXT: ret 2419 2420 ; DARWIN-64-PIC: _ind06: 2421 ; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]] 2422 ; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2423 ; DARWIN-64-PIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]] 2424 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2425 ; DARWIN-64-PIC-NEXT: ret 2426 } 2427 2428 define void @ind07(i64 %i) nounwind { 2429 entry: 2430 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i 2431 store i32* %0, i32** @lptr, align 8 2432 ret void 2433 ; LINUX-64-STATIC: ind07: 2434 ; LINUX-64-STATIC: leaq ldst(,%rdi,4), [[RAX:%r.x]] 2435 ; LINUX-64-STATIC: movq [[RAX]], lptr 2436 ; LINUX-64-STATIC: ret 2437 2438 ; LINUX-32-STATIC: ind07: 2439 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2440 ; LINUX-32-STATIC-NEXT: leal ldst(,[[EAX]],4), [[EAX:%e.x]] 2441 ; LINUX-32-STATIC-NEXT: movl [[EAX]], lptr 2442 ; LINUX-32-STATIC-NEXT: ret 2443 2444 ; LINUX-32-PIC: ind07: 2445 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 2446 ; LINUX-32-PIC-NEXT: leal ldst(,[[EAX]],4), [[EAX:%e.x]] 2447 ; LINUX-32-PIC-NEXT: movl [[EAX]], lptr 2448 ; LINUX-32-PIC-NEXT: ret 2449 2450 ; LINUX-64-PIC: ind07: 2451 ; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]] 2452 ; LINUX-64-PIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]] 2453 ; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip) 2454 ; LINUX-64-PIC-NEXT: ret 2455 2456 ; DARWIN-32-STATIC: _ind07: 2457 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2458 ; DARWIN-32-STATIC-NEXT: leal _ldst(,[[EAX]],4), [[EAX:%e.x]] 2459 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _lptr 2460 ; DARWIN-32-STATIC-NEXT: ret 2461 2462 ; DARWIN-32-DYNAMIC: _ind07: 2463 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 2464 ; DARWIN-32-DYNAMIC-NEXT: leal _ldst(,[[EAX]],4), [[EAX:%e.x]] 2465 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _lptr 2466 ; DARWIN-32-DYNAMIC-NEXT: ret 2467 2468 ; DARWIN-32-PIC: _ind07: 2469 ; DARWIN-32-PIC: calll L34$pb 2470 ; DARWIN-32-PIC-NEXT: L34$pb: 2471 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2472 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2473 ; DARWIN-32-PIC-NEXT: leal _ldst-L34$pb([[EAX]],[[ECX]],4), [[ECX:%e.x]] 2474 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _lptr-L34$pb([[EAX]]) 2475 ; DARWIN-32-PIC-NEXT: ret 2476 2477 ; DARWIN-64-STATIC: _ind07: 2478 ; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]] 2479 ; DARWIN-64-STATIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]] 2480 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip) 2481 ; DARWIN-64-STATIC-NEXT: ret 2482 2483 ; DARWIN-64-DYNAMIC: _ind07: 2484 ; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]] 2485 ; DARWIN-64-DYNAMIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]] 2486 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip) 2487 ; DARWIN-64-DYNAMIC-NEXT: ret 2488 2489 ; DARWIN-64-PIC: _ind07: 2490 ; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]] 2491 ; DARWIN-64-PIC-NEXT: leaq ([[RAX]],%rdi,4), [[RAX:%r.x]] 2492 ; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip) 2493 ; DARWIN-64-PIC-NEXT: ret 2494 } 2495 2496 define void @ind08(i64 %i) nounwind { 2497 entry: 2498 %0 = load i32** @lptr, align 8 2499 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i 2500 %2 = load i32* %1, align 4 2501 %3 = getelementptr i32* %0, i64 %i 2502 store i32 %2, i32* %3, align 4 2503 ret void 2504 ; LINUX-64-STATIC: ind08: 2505 ; LINUX-64-STATIC: movl lsrc(,%rdi,4), [[EAX:%e.x]] 2506 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]] 2507 ; LINUX-64-STATIC: movl [[EAX]], ([[RCX]],%rdi,4) 2508 ; LINUX-64-STATIC: ret 2509 2510 ; LINUX-32-STATIC: ind08: 2511 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2512 ; LINUX-32-STATIC-NEXT: movl lsrc(,[[EAX]],4), [[ECX:%e.x]] 2513 ; LINUX-32-STATIC-NEXT: movl lptr, [[EDX:%e.x]] 2514 ; LINUX-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2515 ; LINUX-32-STATIC-NEXT: ret 2516 2517 ; LINUX-32-PIC: ind08: 2518 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 2519 ; LINUX-32-PIC-NEXT: movl lsrc(,[[EAX]],4), [[ECX:%e.x]] 2520 ; LINUX-32-PIC-NEXT: movl lptr, [[EDX:%e.x]] 2521 ; LINUX-32-PIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2522 ; LINUX-32-PIC-NEXT: ret 2523 2524 ; LINUX-64-PIC: ind08: 2525 ; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]] 2526 ; LINUX-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2527 ; LINUX-64-PIC-NEXT: movq lptr(%rip), [[RCX:%r.x]] 2528 ; LINUX-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2529 ; LINUX-64-PIC-NEXT: ret 2530 2531 ; DARWIN-32-STATIC: _ind08: 2532 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2533 ; DARWIN-32-STATIC-NEXT: movl _lsrc(,[[EAX]],4), [[ECX:%e.x]] 2534 ; DARWIN-32-STATIC-NEXT: movl _lptr, [[EDX:%e.x]] 2535 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2536 ; DARWIN-32-STATIC-NEXT: ret 2537 2538 ; DARWIN-32-DYNAMIC: _ind08: 2539 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 2540 ; DARWIN-32-DYNAMIC-NEXT: movl _lsrc(,[[EAX]],4), [[ECX:%e.x]] 2541 ; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[EDX:%e.x]] 2542 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], ([[EDX]],[[EAX]],4) 2543 ; DARWIN-32-DYNAMIC-NEXT: ret 2544 2545 ; DARWIN-32-PIC: _ind08: 2546 ; DARWIN-32-PIC: calll L35$pb 2547 ; DARWIN-32-PIC-NEXT: L35$pb: 2548 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2549 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2550 ; DARWIN-32-PIC-NEXT: movl _lsrc-L35$pb([[EAX]],[[ECX]],4), [[EDX:%e.x]] 2551 ; DARWIN-32-PIC-NEXT: movl _lptr-L35$pb([[EAX]]), [[EAX:%e.x]] 2552 ; DARWIN-32-PIC-NEXT: movl [[EDX]], ([[EAX]],[[ECX]],4) 2553 ; DARWIN-32-PIC-NEXT: ret 2554 2555 ; DARWIN-64-STATIC: _ind08: 2556 ; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]] 2557 ; DARWIN-64-STATIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2558 ; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 2559 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2560 ; DARWIN-64-STATIC-NEXT: ret 2561 2562 ; DARWIN-64-DYNAMIC: _ind08: 2563 ; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]] 2564 ; DARWIN-64-DYNAMIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2565 ; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 2566 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2567 ; DARWIN-64-DYNAMIC-NEXT: ret 2568 2569 ; DARWIN-64-PIC: _ind08: 2570 ; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]] 2571 ; DARWIN-64-PIC-NEXT: movl ([[RAX]],%rdi,4), [[EAX:%e.x]] 2572 ; DARWIN-64-PIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 2573 ; DARWIN-64-PIC-NEXT: movl [[EAX]], ([[RCX]],%rdi,4) 2574 ; DARWIN-64-PIC-NEXT: ret 2575 } 2576 2577 define void @off00(i64 %i) nounwind { 2578 entry: 2579 %0 = add i64 %i, 16 2580 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0 2581 %2 = load i32* %1, align 4 2582 %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0 2583 store i32 %2, i32* %3, align 4 2584 ret void 2585 ; LINUX-64-STATIC: off00: 2586 ; LINUX-64-STATIC: movl src+64(,%rdi,4), [[EAX:%e.x]] 2587 ; LINUX-64-STATIC: movl [[EAX]], dst+64(,%rdi,4) 2588 ; LINUX-64-STATIC: ret 2589 2590 ; LINUX-32-STATIC: off00: 2591 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2592 ; LINUX-32-STATIC-NEXT: movl src+64(,[[EAX]],4), [[ECX:%e.x]] 2593 ; LINUX-32-STATIC-NEXT: movl [[ECX]], dst+64(,[[EAX]],4) 2594 ; LINUX-32-STATIC-NEXT: ret 2595 2596 ; LINUX-32-PIC: off00: 2597 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 2598 ; LINUX-32-PIC-NEXT: movl src+64(,[[EAX]],4), [[ECX:%e.x]] 2599 ; LINUX-32-PIC-NEXT: movl [[ECX]], dst+64(,[[EAX]],4) 2600 ; LINUX-32-PIC-NEXT: ret 2601 2602 ; LINUX-64-PIC: off00: 2603 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 2604 ; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 2605 ; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), [[RCX:%r.x]] 2606 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 2607 ; LINUX-64-PIC-NEXT: ret 2608 2609 ; DARWIN-32-STATIC: _off00: 2610 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2611 ; DARWIN-32-STATIC-NEXT: movl _src+64(,[[EAX]],4), [[ECX:%e.x]] 2612 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], _dst+64(,[[EAX]],4) 2613 ; DARWIN-32-STATIC-NEXT: ret 2614 2615 ; DARWIN-32-DYNAMIC: _off00: 2616 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 2617 ; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]] 2618 ; DARWIN-32-DYNAMIC-NEXT: movl 64([[ECX]],[[EAX]],4), [[ECX:%e.x]] 2619 ; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[EDX:%e.x]] 2620 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 2621 ; DARWIN-32-DYNAMIC-NEXT: ret 2622 2623 ; DARWIN-32-PIC: _off00: 2624 ; DARWIN-32-PIC: calll L36$pb 2625 ; DARWIN-32-PIC-NEXT: L36$pb: 2626 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2627 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2628 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L36$pb([[EAX]]), [[EDX:%e.x]] 2629 ; DARWIN-32-PIC-NEXT: movl 64([[EDX]],[[ECX]],4), [[EDX:%e.x]] 2630 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L36$pb([[EAX]]), [[EAX:%e.x]] 2631 ; DARWIN-32-PIC-NEXT: movl [[EDX]], 64([[EAX]],[[ECX]],4) 2632 ; DARWIN-32-PIC-NEXT: ret 2633 2634 ; DARWIN-64-STATIC: _off00: 2635 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 2636 ; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 2637 ; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 2638 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 2639 ; DARWIN-64-STATIC-NEXT: ret 2640 2641 ; DARWIN-64-DYNAMIC: _off00: 2642 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 2643 ; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 2644 ; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 2645 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 2646 ; DARWIN-64-DYNAMIC-NEXT: ret 2647 2648 ; DARWIN-64-PIC: _off00: 2649 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 2650 ; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 2651 ; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 2652 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 2653 ; DARWIN-64-PIC-NEXT: ret 2654 } 2655 2656 define void @oxf00(i64 %i) nounwind { 2657 entry: 2658 %0 = add i64 %i, 16 2659 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0 2660 %2 = load i32* %1, align 4 2661 %3 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0 2662 store i32 %2, i32* %3, align 4 2663 ret void 2664 ; LINUX-64-STATIC: oxf00: 2665 ; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), [[EAX:%e.x]] 2666 ; LINUX-64-STATIC: movl [[EAX]], xdst+64(,%rdi,4) 2667 ; LINUX-64-STATIC: ret 2668 2669 ; LINUX-32-STATIC: oxf00: 2670 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2671 ; LINUX-32-STATIC-NEXT: movl xsrc+64(,[[EAX]],4), [[ECX:%e.x]] 2672 ; LINUX-32-STATIC-NEXT: movl [[ECX]], xdst+64(,[[EAX]],4) 2673 ; LINUX-32-STATIC-NEXT: ret 2674 2675 ; LINUX-32-PIC: oxf00: 2676 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 2677 ; LINUX-32-PIC-NEXT: movl xsrc+64(,[[EAX]],4), [[ECX:%e.x]] 2678 ; LINUX-32-PIC-NEXT: movl [[ECX]], xdst+64(,[[EAX]],4) 2679 ; LINUX-32-PIC-NEXT: ret 2680 2681 ; LINUX-64-PIC: oxf00: 2682 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 2683 ; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 2684 ; LINUX-64-PIC-NEXT: movq xdst@GOTPCREL(%rip), [[RCX:%r.x]] 2685 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 2686 ; LINUX-64-PIC-NEXT: ret 2687 2688 ; DARWIN-32-STATIC: _oxf00: 2689 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2690 ; DARWIN-32-STATIC-NEXT: movl _xsrc+64(,[[EAX]],4), [[ECX:%e.x]] 2691 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], _xdst+64(,[[EAX]],4) 2692 ; DARWIN-32-STATIC-NEXT: ret 2693 2694 ; DARWIN-32-DYNAMIC: _oxf00: 2695 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 2696 ; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, [[ECX:%e.x]] 2697 ; DARWIN-32-DYNAMIC-NEXT: movl 64([[ECX]],[[EAX]],4), [[ECX:%e.x]] 2698 ; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[EDX:%e.x]] 2699 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 2700 ; DARWIN-32-DYNAMIC-NEXT: ret 2701 2702 ; DARWIN-32-PIC: _oxf00: 2703 ; DARWIN-32-PIC: calll L37$pb 2704 ; DARWIN-32-PIC-NEXT: L37$pb: 2705 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2706 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2707 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L37$pb([[EAX]]), [[EDX:%e.x]] 2708 ; DARWIN-32-PIC-NEXT: movl 64([[EDX]],[[ECX]],4), [[EDX:%e.x]] 2709 ; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L37$pb([[EAX]]), [[EAX:%e.x]] 2710 ; DARWIN-32-PIC-NEXT: movl [[EDX]], 64([[EAX]],[[ECX]],4) 2711 ; DARWIN-32-PIC-NEXT: ret 2712 2713 ; DARWIN-64-STATIC: _oxf00: 2714 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 2715 ; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 2716 ; DARWIN-64-STATIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]] 2717 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 2718 ; DARWIN-64-STATIC-NEXT: ret 2719 2720 ; DARWIN-64-DYNAMIC: _oxf00: 2721 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 2722 ; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 2723 ; DARWIN-64-DYNAMIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]] 2724 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 2725 ; DARWIN-64-DYNAMIC-NEXT: ret 2726 2727 ; DARWIN-64-PIC: _oxf00: 2728 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 2729 ; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 2730 ; DARWIN-64-PIC-NEXT: movq _xdst@GOTPCREL(%rip), [[RCX:%r.x]] 2731 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 2732 ; DARWIN-64-PIC-NEXT: ret 2733 } 2734 2735 define void @off01(i64 %i) nounwind { 2736 entry: 2737 %.sum = add i64 %i, 16 2738 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum 2739 store i32* %0, i32** @ptr, align 8 2740 ret void 2741 ; LINUX-64-STATIC: off01: 2742 ; LINUX-64-STATIC: leaq dst+64(,%rdi,4), [[RAX:%r.x]] 2743 ; LINUX-64-STATIC: movq [[RAX]], ptr 2744 ; LINUX-64-STATIC: ret 2745 2746 ; LINUX-32-STATIC: off01: 2747 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2748 ; LINUX-32-STATIC-NEXT: leal dst+64(,[[EAX]],4), [[EAX:%e.x]] 2749 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ptr 2750 ; LINUX-32-STATIC-NEXT: ret 2751 2752 ; LINUX-32-PIC: off01: 2753 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 2754 ; LINUX-32-PIC-NEXT: leal dst+64(,[[EAX]],4), [[EAX:%e.x]] 2755 ; LINUX-32-PIC-NEXT: movl [[EAX]], ptr 2756 ; LINUX-32-PIC-NEXT: ret 2757 2758 ; LINUX-64-PIC: off01: 2759 ; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]] 2760 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 2761 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2762 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 2763 ; LINUX-64-PIC-NEXT: ret 2764 2765 ; DARWIN-32-STATIC: _off01: 2766 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2767 ; DARWIN-32-STATIC-NEXT: leal _dst+64(,[[EAX]],4), [[EAX:%e.x]] 2768 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ptr 2769 ; DARWIN-32-STATIC-NEXT: ret 2770 2771 ; DARWIN-32-DYNAMIC: _off01: 2772 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 2773 ; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e.x]] 2774 ; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), [[EAX:%e.x]] 2775 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 2776 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 2777 ; DARWIN-32-DYNAMIC-NEXT: ret 2778 2779 ; DARWIN-32-PIC: _off01: 2780 ; DARWIN-32-PIC: calll L38$pb 2781 ; DARWIN-32-PIC-NEXT: L38$pb: 2782 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2783 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2784 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L38$pb([[EAX]]), [[EDX:%e.x]] 2785 ; DARWIN-32-PIC-NEXT: leal 64([[EDX]],[[ECX]],4), [[ECX:%e.x]] 2786 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L38$pb([[EAX]]), [[EAX:%e.x]] 2787 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 2788 ; DARWIN-32-PIC-NEXT: ret 2789 2790 ; DARWIN-64-STATIC: _off01: 2791 ; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 2792 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 2793 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2794 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]]) 2795 ; DARWIN-64-STATIC-NEXT: ret 2796 2797 ; DARWIN-64-DYNAMIC: _off01: 2798 ; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 2799 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 2800 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2801 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]]) 2802 ; DARWIN-64-DYNAMIC-NEXT: ret 2803 2804 ; DARWIN-64-PIC: _off01: 2805 ; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 2806 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 2807 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2808 ; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 2809 ; DARWIN-64-PIC-NEXT: ret 2810 } 2811 2812 define void @oxf01(i64 %i) nounwind { 2813 entry: 2814 %.sum = add i64 %i, 16 2815 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %.sum 2816 store i32* %0, i32** @ptr, align 8 2817 ret void 2818 ; LINUX-64-STATIC: oxf01: 2819 ; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), [[RAX:%r.x]] 2820 ; LINUX-64-STATIC: movq [[RAX]], ptr 2821 ; LINUX-64-STATIC: ret 2822 2823 ; LINUX-32-STATIC: oxf01: 2824 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2825 ; LINUX-32-STATIC-NEXT: leal xdst+64(,[[EAX]],4), [[EAX:%e.x]] 2826 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ptr 2827 ; LINUX-32-STATIC-NEXT: ret 2828 2829 ; LINUX-32-PIC: oxf01: 2830 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 2831 ; LINUX-32-PIC-NEXT: leal xdst+64(,[[EAX]],4), [[EAX:%e.x]] 2832 ; LINUX-32-PIC-NEXT: movl [[EAX]], ptr 2833 ; LINUX-32-PIC-NEXT: ret 2834 2835 ; LINUX-64-PIC: oxf01: 2836 ; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), [[RAX:%r.x]] 2837 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 2838 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2839 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 2840 ; LINUX-64-PIC-NEXT: ret 2841 2842 ; DARWIN-32-STATIC: _oxf01: 2843 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2844 ; DARWIN-32-STATIC-NEXT: leal _xdst+64(,[[EAX]],4), [[EAX:%e.x]] 2845 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ptr 2846 ; DARWIN-32-STATIC-NEXT: ret 2847 2848 ; DARWIN-32-DYNAMIC: _oxf01: 2849 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 2850 ; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[ECX:%e.x]] 2851 ; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), [[EAX:%e.x]] 2852 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 2853 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 2854 ; DARWIN-32-DYNAMIC-NEXT: ret 2855 2856 ; DARWIN-32-PIC: _oxf01: 2857 ; DARWIN-32-PIC: calll L39$pb 2858 ; DARWIN-32-PIC-NEXT: L39$pb: 2859 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2860 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2861 ; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L39$pb([[EAX]]), [[EDX:%e.x]] 2862 ; DARWIN-32-PIC-NEXT: leal 64([[EDX]],[[ECX]],4), [[ECX:%e.x]] 2863 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L39$pb([[EAX]]), [[EAX:%e.x]] 2864 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 2865 ; DARWIN-32-PIC-NEXT: ret 2866 2867 ; DARWIN-64-STATIC: _oxf01: 2868 ; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 2869 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 2870 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2871 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]]) 2872 ; DARWIN-64-STATIC-NEXT: ret 2873 2874 ; DARWIN-64-DYNAMIC: _oxf01: 2875 ; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 2876 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 2877 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2878 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]]) 2879 ; DARWIN-64-DYNAMIC-NEXT: ret 2880 2881 ; DARWIN-64-PIC: _oxf01: 2882 ; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 2883 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 2884 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2885 ; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 2886 ; DARWIN-64-PIC-NEXT: ret 2887 } 2888 2889 define void @off02(i64 %i) nounwind { 2890 entry: 2891 %0 = load i32** @ptr, align 8 2892 %1 = add i64 %i, 16 2893 %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1 2894 %3 = load i32* %2, align 4 2895 %4 = getelementptr i32* %0, i64 %1 2896 store i32 %3, i32* %4, align 4 2897 ret void 2898 ; LINUX-64-STATIC: off02: 2899 ; LINUX-64-STATIC: movl src+64(,%rdi,4), [[EAX:%e.x]] 2900 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 2901 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]],%rdi,4) 2902 ; LINUX-64-STATIC: ret 2903 2904 ; LINUX-32-STATIC: off02: 2905 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2906 ; LINUX-32-STATIC-NEXT: movl src+64(,[[EAX]],4), [[ECX:%e.x]] 2907 ; LINUX-32-STATIC-NEXT: movl ptr, [[EDX:%e.x]] 2908 ; LINUX-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 2909 ; LINUX-32-STATIC-NEXT: ret 2910 2911 ; LINUX-32-PIC: off02: 2912 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 2913 ; LINUX-32-PIC-NEXT: movl src+64(,[[EAX]],4), [[ECX:%e.x]] 2914 ; LINUX-32-PIC-NEXT: movl ptr, [[EDX:%e.x]] 2915 ; LINUX-32-PIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 2916 ; LINUX-32-PIC-NEXT: ret 2917 2918 ; LINUX-64-PIC: off02: 2919 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 2920 ; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 2921 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2922 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 2923 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 2924 ; LINUX-64-PIC-NEXT: ret 2925 2926 ; DARWIN-32-STATIC: _off02: 2927 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2928 ; DARWIN-32-STATIC-NEXT: movl _src+64(,[[EAX]],4), [[ECX:%e.x]] 2929 ; DARWIN-32-STATIC-NEXT: movl _ptr, [[EDX:%e.x]] 2930 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 2931 ; DARWIN-32-STATIC-NEXT: ret 2932 2933 ; DARWIN-32-DYNAMIC: _off02: 2934 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 2935 ; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]] 2936 ; DARWIN-32-DYNAMIC-NEXT: movl 64([[ECX]],[[EAX]],4), [[ECX:%e.x]] 2937 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[EDX:%e.x]] 2938 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EDX]]), [[EDX:%e.x]] 2939 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 2940 ; DARWIN-32-DYNAMIC-NEXT: ret 2941 2942 ; DARWIN-32-PIC: _off02: 2943 ; DARWIN-32-PIC: calll L40$pb 2944 ; DARWIN-32-PIC-NEXT: L40$pb: 2945 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 2946 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 2947 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L40$pb([[EAX]]), [[EDX:%e.x]] 2948 ; DARWIN-32-PIC-NEXT: movl 64([[EDX]],[[ECX]],4), [[EDX:%e.x]] 2949 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L40$pb([[EAX]]), [[EAX:%e.x]] 2950 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 2951 ; DARWIN-32-PIC-NEXT: movl [[EDX]], 64([[EAX]],[[ECX]],4) 2952 ; DARWIN-32-PIC-NEXT: ret 2953 2954 ; DARWIN-64-STATIC: _off02: 2955 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 2956 ; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 2957 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2958 ; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 2959 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 2960 ; DARWIN-64-STATIC-NEXT: ret 2961 2962 ; DARWIN-64-DYNAMIC: _off02: 2963 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 2964 ; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 2965 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2966 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 2967 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 2968 ; DARWIN-64-DYNAMIC-NEXT: ret 2969 2970 ; DARWIN-64-PIC: _off02: 2971 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 2972 ; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 2973 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 2974 ; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 2975 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 2976 ; DARWIN-64-PIC-NEXT: ret 2977 } 2978 2979 define void @oxf02(i64 %i) nounwind { 2980 entry: 2981 %0 = load i32** @ptr, align 8 2982 %1 = add i64 %i, 16 2983 %2 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %1 2984 %3 = load i32* %2, align 4 2985 %4 = getelementptr i32* %0, i64 %1 2986 store i32 %3, i32* %4, align 4 2987 ret void 2988 ; LINUX-64-STATIC: oxf02: 2989 ; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), [[EAX:%e.x]] 2990 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 2991 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]],%rdi,4) 2992 ; LINUX-64-STATIC: ret 2993 2994 ; LINUX-32-STATIC: oxf02: 2995 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 2996 ; LINUX-32-STATIC-NEXT: movl xsrc+64(,[[EAX]],4), [[ECX:%e.x]] 2997 ; LINUX-32-STATIC-NEXT: movl ptr, [[EDX:%e.x]] 2998 ; LINUX-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 2999 ; LINUX-32-STATIC-NEXT: ret 3000 3001 ; LINUX-32-PIC: oxf02: 3002 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 3003 ; LINUX-32-PIC-NEXT: movl xsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3004 ; LINUX-32-PIC-NEXT: movl ptr, [[EDX:%e.x]] 3005 ; LINUX-32-PIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 3006 ; LINUX-32-PIC-NEXT: ret 3007 3008 ; LINUX-64-PIC: oxf02: 3009 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 3010 ; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3011 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 3012 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 3013 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3014 ; LINUX-64-PIC-NEXT: ret 3015 3016 ; DARWIN-32-STATIC: _oxf02: 3017 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3018 ; DARWIN-32-STATIC-NEXT: movl _xsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3019 ; DARWIN-32-STATIC-NEXT: movl _ptr, [[EDX:%e.x]] 3020 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 3021 ; DARWIN-32-STATIC-NEXT: ret 3022 3023 ; DARWIN-32-DYNAMIC: _oxf02: 3024 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 3025 ; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, [[ECX:%e.x]] 3026 ; DARWIN-32-DYNAMIC-NEXT: movl 64([[ECX]],[[EAX]],4), [[ECX:%e.x]] 3027 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[EDX:%e.x]] 3028 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EDX]]), [[EDX:%e.x]] 3029 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 3030 ; DARWIN-32-DYNAMIC-NEXT: ret 3031 3032 ; DARWIN-32-PIC: _oxf02: 3033 ; DARWIN-32-PIC: calll L41$pb 3034 ; DARWIN-32-PIC-NEXT: L41$pb: 3035 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3036 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 3037 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L41$pb([[EAX]]), [[EDX:%e.x]] 3038 ; DARWIN-32-PIC-NEXT: movl 64([[EDX]],[[ECX]],4), [[EDX:%e.x]] 3039 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L41$pb([[EAX]]), [[EAX:%e.x]] 3040 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 3041 ; DARWIN-32-PIC-NEXT: movl [[EDX]], 64([[EAX]],[[ECX]],4) 3042 ; DARWIN-32-PIC-NEXT: ret 3043 3044 ; DARWIN-64-STATIC: _oxf02: 3045 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 3046 ; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3047 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 3048 ; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 3049 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3050 ; DARWIN-64-STATIC-NEXT: ret 3051 3052 ; DARWIN-64-DYNAMIC: _oxf02: 3053 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 3054 ; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3055 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 3056 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 3057 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3058 ; DARWIN-64-DYNAMIC-NEXT: ret 3059 3060 ; DARWIN-64-PIC: _oxf02: 3061 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 3062 ; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3063 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 3064 ; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 3065 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3066 ; DARWIN-64-PIC-NEXT: ret 3067 } 3068 3069 define void @off03(i64 %i) nounwind { 3070 entry: 3071 %0 = add i64 %i, 16 3072 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0 3073 %2 = load i32* %1, align 4 3074 %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0 3075 store i32 %2, i32* %3, align 4 3076 ret void 3077 ; LINUX-64-STATIC: off03: 3078 ; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), [[EAX:%e.x]] 3079 ; LINUX-64-STATIC: movl [[EAX]], ddst+64(,%rdi,4) 3080 ; LINUX-64-STATIC: ret 3081 3082 ; LINUX-32-STATIC: off03: 3083 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3084 ; LINUX-32-STATIC-NEXT: movl dsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3085 ; LINUX-32-STATIC-NEXT: movl [[ECX]], ddst+64(,[[EAX]],4) 3086 ; LINUX-32-STATIC-NEXT: ret 3087 3088 ; LINUX-32-PIC: off03: 3089 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 3090 ; LINUX-32-PIC-NEXT: movl dsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3091 ; LINUX-32-PIC-NEXT: movl [[ECX]], ddst+64(,[[EAX]],4) 3092 ; LINUX-32-PIC-NEXT: ret 3093 3094 ; LINUX-64-PIC: off03: 3095 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 3096 ; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3097 ; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), [[RCX:%r.x]] 3098 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3099 ; LINUX-64-PIC-NEXT: ret 3100 3101 ; DARWIN-32-STATIC: _off03: 3102 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3103 ; DARWIN-32-STATIC-NEXT: movl _dsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3104 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], _ddst+64(,[[EAX]],4) 3105 ; DARWIN-32-STATIC-NEXT: ret 3106 3107 ; DARWIN-32-DYNAMIC: _off03: 3108 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 3109 ; DARWIN-32-DYNAMIC-NEXT: movl _dsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3110 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], _ddst+64(,[[EAX]],4) 3111 ; DARWIN-32-DYNAMIC-NEXT: ret 3112 3113 ; DARWIN-32-PIC: _off03: 3114 ; DARWIN-32-PIC: calll L42$pb 3115 ; DARWIN-32-PIC-NEXT: L42$pb: 3116 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3117 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 3118 ; DARWIN-32-PIC-NEXT: movl (_dsrc-L42$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]] 3119 ; DARWIN-32-PIC-NEXT: movl [[EDX]], (_ddst-L42$pb)+64([[EAX]],[[ECX]],4) 3120 ; DARWIN-32-PIC-NEXT: ret 3121 3122 ; DARWIN-64-STATIC: _off03: 3123 ; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]] 3124 ; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3125 ; DARWIN-64-STATIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]] 3126 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3127 ; DARWIN-64-STATIC-NEXT: ret 3128 3129 ; DARWIN-64-DYNAMIC: _off03: 3130 ; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]] 3131 ; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3132 ; DARWIN-64-DYNAMIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]] 3133 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3134 ; DARWIN-64-DYNAMIC-NEXT: ret 3135 3136 ; DARWIN-64-PIC: _off03: 3137 ; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]] 3138 ; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3139 ; DARWIN-64-PIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]] 3140 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3141 ; DARWIN-64-PIC-NEXT: ret 3142 } 3143 3144 define void @off04(i64 %i) nounwind { 3145 entry: 3146 %.sum = add i64 %i, 16 3147 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum 3148 store i32* %0, i32** @dptr, align 8 3149 ret void 3150 ; LINUX-64-STATIC: off04: 3151 ; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), [[RAX:%r.x]] 3152 ; LINUX-64-STATIC: movq [[RAX]], dptr 3153 ; LINUX-64-STATIC: ret 3154 3155 ; LINUX-32-STATIC: off04: 3156 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3157 ; LINUX-32-STATIC-NEXT: leal ddst+64(,[[EAX]],4), [[EAX:%e.x]] 3158 ; LINUX-32-STATIC-NEXT: movl [[EAX]], dptr 3159 ; LINUX-32-STATIC-NEXT: ret 3160 3161 ; LINUX-32-PIC: off04: 3162 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 3163 ; LINUX-32-PIC-NEXT: leal ddst+64(,[[EAX]],4), [[EAX:%e.x]] 3164 ; LINUX-32-PIC-NEXT: movl [[EAX]], dptr 3165 ; LINUX-32-PIC-NEXT: ret 3166 3167 ; LINUX-64-PIC: off04: 3168 ; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]] 3169 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 3170 ; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 3171 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 3172 ; LINUX-64-PIC-NEXT: ret 3173 3174 ; DARWIN-32-STATIC: _off04: 3175 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3176 ; DARWIN-32-STATIC-NEXT: leal _ddst+64(,[[EAX]],4), [[EAX:%e.x]] 3177 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dptr 3178 ; DARWIN-32-STATIC-NEXT: ret 3179 3180 ; DARWIN-32-DYNAMIC: _off04: 3181 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 3182 ; DARWIN-32-DYNAMIC-NEXT: leal _ddst+64(,[[EAX]],4), [[EAX:%e.x]] 3183 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _dptr 3184 ; DARWIN-32-DYNAMIC-NEXT: ret 3185 3186 ; DARWIN-32-PIC: _off04: 3187 ; DARWIN-32-PIC: calll L43$pb 3188 ; DARWIN-32-PIC-NEXT: L43$pb: 3189 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3190 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 3191 ; DARWIN-32-PIC-NEXT: leal (_ddst-L43$pb)+64([[EAX]],[[ECX]],4), [[ECX:%e.x]] 3192 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _dptr-L43$pb([[EAX]]) 3193 ; DARWIN-32-PIC-NEXT: ret 3194 3195 ; DARWIN-64-STATIC: _off04: 3196 ; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]] 3197 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 3198 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip) 3199 ; DARWIN-64-STATIC-NEXT: ret 3200 3201 ; DARWIN-64-DYNAMIC: _off04: 3202 ; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]] 3203 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 3204 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip) 3205 ; DARWIN-64-DYNAMIC-NEXT: ret 3206 3207 ; DARWIN-64-PIC: _off04: 3208 ; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]] 3209 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 3210 ; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip) 3211 ; DARWIN-64-PIC-NEXT: ret 3212 } 3213 3214 define void @off05(i64 %i) nounwind { 3215 entry: 3216 %0 = load i32** @dptr, align 8 3217 %1 = add i64 %i, 16 3218 %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1 3219 %3 = load i32* %2, align 4 3220 %4 = getelementptr i32* %0, i64 %1 3221 store i32 %3, i32* %4, align 4 3222 ret void 3223 ; LINUX-64-STATIC: off05: 3224 ; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), [[EAX:%e.x]] 3225 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]] 3226 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]],%rdi,4) 3227 ; LINUX-64-STATIC: ret 3228 3229 ; LINUX-32-STATIC: off05: 3230 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3231 ; LINUX-32-STATIC-NEXT: movl dsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3232 ; LINUX-32-STATIC-NEXT: movl dptr, [[EDX:%e.x]] 3233 ; LINUX-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 3234 ; LINUX-32-STATIC-NEXT: ret 3235 3236 ; LINUX-32-PIC: off05: 3237 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 3238 ; LINUX-32-PIC-NEXT: movl dsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3239 ; LINUX-32-PIC-NEXT: movl dptr, [[EDX:%e.x]] 3240 ; LINUX-32-PIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 3241 ; LINUX-32-PIC-NEXT: ret 3242 3243 ; LINUX-64-PIC: off05: 3244 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 3245 ; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3246 ; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 3247 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 3248 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3249 ; LINUX-64-PIC-NEXT: ret 3250 3251 ; DARWIN-32-STATIC: _off05: 3252 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3253 ; DARWIN-32-STATIC-NEXT: movl _dsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3254 ; DARWIN-32-STATIC-NEXT: movl _dptr, [[EDX:%e.x]] 3255 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 3256 ; DARWIN-32-STATIC-NEXT: ret 3257 3258 ; DARWIN-32-DYNAMIC: _off05: 3259 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 3260 ; DARWIN-32-DYNAMIC-NEXT: movl _dsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3261 ; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[EDX:%e.x]] 3262 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 3263 ; DARWIN-32-DYNAMIC-NEXT: ret 3264 3265 ; DARWIN-32-PIC: _off05: 3266 ; DARWIN-32-PIC: calll L44$pb 3267 ; DARWIN-32-PIC-NEXT: L44$pb: 3268 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3269 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 3270 ; DARWIN-32-PIC-NEXT: movl (_dsrc-L44$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]] 3271 ; DARWIN-32-PIC-NEXT: movl _dptr-L44$pb([[EAX]]), [[EAX:%e.x]] 3272 ; DARWIN-32-PIC-NEXT: movl [[EDX]], 64([[EAX]],[[ECX]],4) 3273 ; DARWIN-32-PIC-NEXT: ret 3274 3275 ; DARWIN-64-STATIC: _off05: 3276 ; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]] 3277 ; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3278 ; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 3279 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3280 ; DARWIN-64-STATIC-NEXT: ret 3281 3282 ; DARWIN-64-DYNAMIC: _off05: 3283 ; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]] 3284 ; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3285 ; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 3286 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3287 ; DARWIN-64-DYNAMIC-NEXT: ret 3288 3289 ; DARWIN-64-PIC: _off05: 3290 ; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]] 3291 ; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3292 ; DARWIN-64-PIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 3293 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3294 ; DARWIN-64-PIC-NEXT: ret 3295 } 3296 3297 define void @off06(i64 %i) nounwind { 3298 entry: 3299 %0 = add i64 %i, 16 3300 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0 3301 %2 = load i32* %1, align 4 3302 %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0 3303 store i32 %2, i32* %3, align 4 3304 ret void 3305 ; LINUX-64-STATIC: off06: 3306 ; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), [[EAX:%e.x]] 3307 ; LINUX-64-STATIC: movl [[EAX]], ldst+64(,%rdi,4) 3308 ; LINUX-64-STATIC: ret 3309 3310 ; LINUX-32-STATIC: off06: 3311 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3312 ; LINUX-32-STATIC-NEXT: movl lsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3313 ; LINUX-32-STATIC-NEXT: movl [[ECX]], ldst+64(,[[EAX]],4) 3314 ; LINUX-32-STATIC-NEXT: ret 3315 3316 ; LINUX-32-PIC: off06: 3317 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 3318 ; LINUX-32-PIC-NEXT: movl lsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3319 ; LINUX-32-PIC-NEXT: movl [[ECX]], ldst+64(,[[EAX]],4) 3320 ; LINUX-32-PIC-NEXT: ret 3321 3322 ; LINUX-64-PIC: off06: 3323 ; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]] 3324 ; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3325 ; LINUX-64-PIC-NEXT: leaq ldst(%rip), [[RCX:%r.x]] 3326 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3327 ; LINUX-64-PIC-NEXT: ret 3328 3329 ; DARWIN-32-STATIC: _off06: 3330 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3331 ; DARWIN-32-STATIC-NEXT: movl _lsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3332 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], _ldst+64(,[[EAX]],4) 3333 ; DARWIN-32-STATIC-NEXT: ret 3334 3335 ; DARWIN-32-DYNAMIC: _off06: 3336 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 3337 ; DARWIN-32-DYNAMIC-NEXT: movl _lsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3338 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], _ldst+64(,[[EAX]],4) 3339 ; DARWIN-32-DYNAMIC-NEXT: ret 3340 3341 ; DARWIN-32-PIC: _off06: 3342 ; DARWIN-32-PIC: calll L45$pb 3343 ; DARWIN-32-PIC-NEXT: L45$pb: 3344 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3345 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 3346 ; DARWIN-32-PIC-NEXT: movl (_lsrc-L45$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]] 3347 ; DARWIN-32-PIC-NEXT: movl [[EDX]], (_ldst-L45$pb)+64([[EAX]],[[ECX]],4) 3348 ; DARWIN-32-PIC-NEXT: ret 3349 3350 ; DARWIN-64-STATIC: _off06: 3351 ; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]] 3352 ; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3353 ; DARWIN-64-STATIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]] 3354 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3355 ; DARWIN-64-STATIC-NEXT: ret 3356 3357 ; DARWIN-64-DYNAMIC: _off06: 3358 ; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]] 3359 ; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3360 ; DARWIN-64-DYNAMIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]] 3361 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3362 ; DARWIN-64-DYNAMIC-NEXT: ret 3363 3364 ; DARWIN-64-PIC: _off06: 3365 ; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]] 3366 ; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3367 ; DARWIN-64-PIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]] 3368 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3369 ; DARWIN-64-PIC-NEXT: ret 3370 } 3371 3372 define void @off07(i64 %i) nounwind { 3373 entry: 3374 %.sum = add i64 %i, 16 3375 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum 3376 store i32* %0, i32** @lptr, align 8 3377 ret void 3378 ; LINUX-64-STATIC: off07: 3379 ; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), [[RAX:%r.x]] 3380 ; LINUX-64-STATIC: movq [[RAX]], lptr 3381 ; LINUX-64-STATIC: ret 3382 3383 ; LINUX-32-STATIC: off07: 3384 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3385 ; LINUX-32-STATIC-NEXT: leal ldst+64(,[[EAX]],4), [[EAX:%e.x]] 3386 ; LINUX-32-STATIC-NEXT: movl [[EAX]], lptr 3387 ; LINUX-32-STATIC-NEXT: ret 3388 3389 ; LINUX-32-PIC: off07: 3390 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 3391 ; LINUX-32-PIC-NEXT: leal ldst+64(,[[EAX]],4), [[EAX:%e.x]] 3392 ; LINUX-32-PIC-NEXT: movl [[EAX]], lptr 3393 ; LINUX-32-PIC-NEXT: ret 3394 3395 ; LINUX-64-PIC: off07: 3396 ; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]] 3397 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 3398 ; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip) 3399 ; LINUX-64-PIC-NEXT: ret 3400 3401 ; DARWIN-32-STATIC: _off07: 3402 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3403 ; DARWIN-32-STATIC-NEXT: leal _ldst+64(,[[EAX]],4), [[EAX:%e.x]] 3404 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _lptr 3405 ; DARWIN-32-STATIC-NEXT: ret 3406 3407 ; DARWIN-32-DYNAMIC: _off07: 3408 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 3409 ; DARWIN-32-DYNAMIC-NEXT: leal _ldst+64(,[[EAX]],4), [[EAX:%e.x]] 3410 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _lptr 3411 ; DARWIN-32-DYNAMIC-NEXT: ret 3412 3413 ; DARWIN-32-PIC: _off07: 3414 ; DARWIN-32-PIC: calll L46$pb 3415 ; DARWIN-32-PIC-NEXT: L46$pb: 3416 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3417 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 3418 ; DARWIN-32-PIC-NEXT: leal (_ldst-L46$pb)+64([[EAX]],[[ECX]],4), [[ECX:%e.x]] 3419 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _lptr-L46$pb([[EAX]]) 3420 ; DARWIN-32-PIC-NEXT: ret 3421 3422 ; DARWIN-64-STATIC: _off07: 3423 ; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]] 3424 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 3425 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip) 3426 ; DARWIN-64-STATIC-NEXT: ret 3427 3428 ; DARWIN-64-DYNAMIC: _off07: 3429 ; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]] 3430 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 3431 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip) 3432 ; DARWIN-64-DYNAMIC-NEXT: ret 3433 3434 ; DARWIN-64-PIC: _off07: 3435 ; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]] 3436 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), [[RAX:%r.x]] 3437 ; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip) 3438 ; DARWIN-64-PIC-NEXT: ret 3439 } 3440 3441 define void @off08(i64 %i) nounwind { 3442 entry: 3443 %0 = load i32** @lptr, align 8 3444 %1 = add i64 %i, 16 3445 %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1 3446 %3 = load i32* %2, align 4 3447 %4 = getelementptr i32* %0, i64 %1 3448 store i32 %3, i32* %4, align 4 3449 ret void 3450 ; LINUX-64-STATIC: off08: 3451 ; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), [[EAX:%e.x]] 3452 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]] 3453 ; LINUX-64-STATIC: movl [[EAX]], 64([[RCX]],%rdi,4) 3454 ; LINUX-64-STATIC: ret 3455 3456 ; LINUX-32-STATIC: off08: 3457 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3458 ; LINUX-32-STATIC-NEXT: movl lsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3459 ; LINUX-32-STATIC-NEXT: movl lptr, [[EDX:%e.x]] 3460 ; LINUX-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 3461 ; LINUX-32-STATIC-NEXT: ret 3462 3463 ; LINUX-32-PIC: off08: 3464 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 3465 ; LINUX-32-PIC-NEXT: movl lsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3466 ; LINUX-32-PIC-NEXT: movl lptr, [[EDX:%e.x]] 3467 ; LINUX-32-PIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 3468 ; LINUX-32-PIC-NEXT: ret 3469 3470 ; LINUX-64-PIC: off08: 3471 ; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]] 3472 ; LINUX-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3473 ; LINUX-64-PIC-NEXT: movq lptr(%rip), [[RCX:%r.x]] 3474 ; LINUX-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3475 ; LINUX-64-PIC-NEXT: ret 3476 3477 ; DARWIN-32-STATIC: _off08: 3478 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 3479 ; DARWIN-32-STATIC-NEXT: movl _lsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3480 ; DARWIN-32-STATIC-NEXT: movl _lptr, [[EDX:%e.x]] 3481 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 3482 ; DARWIN-32-STATIC-NEXT: ret 3483 3484 ; DARWIN-32-DYNAMIC: _off08: 3485 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 3486 ; DARWIN-32-DYNAMIC-NEXT: movl _lsrc+64(,[[EAX]],4), [[ECX:%e.x]] 3487 ; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[EDX:%e.x]] 3488 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 64([[EDX]],[[EAX]],4) 3489 ; DARWIN-32-DYNAMIC-NEXT: ret 3490 3491 ; DARWIN-32-PIC: _off08: 3492 ; DARWIN-32-PIC: calll L47$pb 3493 ; DARWIN-32-PIC-NEXT: L47$pb: 3494 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3495 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 3496 ; DARWIN-32-PIC-NEXT: movl (_lsrc-L47$pb)+64([[EAX]],[[ECX]],4), [[EDX:%e.x]] 3497 ; DARWIN-32-PIC-NEXT: movl _lptr-L47$pb([[EAX]]), [[EAX:%e.x]] 3498 ; DARWIN-32-PIC-NEXT: movl [[EDX]], 64([[EAX]],[[ECX]],4) 3499 ; DARWIN-32-PIC-NEXT: ret 3500 3501 ; DARWIN-64-STATIC: _off08: 3502 ; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]] 3503 ; DARWIN-64-STATIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3504 ; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 3505 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3506 ; DARWIN-64-STATIC-NEXT: ret 3507 3508 ; DARWIN-64-DYNAMIC: _off08: 3509 ; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]] 3510 ; DARWIN-64-DYNAMIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3511 ; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 3512 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3513 ; DARWIN-64-DYNAMIC-NEXT: ret 3514 3515 ; DARWIN-64-PIC: _off08: 3516 ; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]] 3517 ; DARWIN-64-PIC-NEXT: movl 64([[RAX]],%rdi,4), [[EAX:%e.x]] 3518 ; DARWIN-64-PIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 3519 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 64([[RCX]],%rdi,4) 3520 ; DARWIN-64-PIC-NEXT: ret 3521 } 3522 3523 define void @moo00(i64 %i) nounwind { 3524 entry: 3525 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4 3526 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), align 4 3527 ret void 3528 ; LINUX-64-STATIC: moo00: 3529 ; LINUX-64-STATIC: movl src+262144(%rip), [[EAX:%e.x]] 3530 ; LINUX-64-STATIC: movl [[EAX]], dst+262144(%rip) 3531 ; LINUX-64-STATIC: ret 3532 3533 ; LINUX-32-STATIC: moo00: 3534 ; LINUX-32-STATIC: movl src+262144, [[EAX:%e.x]] 3535 ; LINUX-32-STATIC-NEXT: movl [[EAX]], dst+262144 3536 ; LINUX-32-STATIC-NEXT: ret 3537 3538 ; LINUX-32-PIC: moo00: 3539 ; LINUX-32-PIC: movl src+262144, [[EAX:%e.x]] 3540 ; LINUX-32-PIC-NEXT: movl [[EAX]], dst+262144 3541 ; LINUX-32-PIC-NEXT: ret 3542 3543 ; LINUX-64-PIC: moo00: 3544 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 3545 ; LINUX-64-PIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]] 3546 ; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), [[RCX:%r.x]] 3547 ; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3548 ; LINUX-64-PIC-NEXT: ret 3549 3550 ; DARWIN-32-STATIC: _moo00: 3551 ; DARWIN-32-STATIC: movl _src+262144, [[EAX:%e.x]] 3552 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dst+262144 3553 ; DARWIN-32-STATIC-NEXT: ret 3554 3555 ; DARWIN-32-DYNAMIC: _moo00: 3556 ; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, [[EAX:%e.x]] 3557 ; DARWIN-32-DYNAMIC-NEXT: movl 262144([[EAX]]), [[EAX:%e.x]] 3558 ; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e.x]] 3559 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 262144([[ECX]]) 3560 ; DARWIN-32-DYNAMIC-NEXT: ret 3561 3562 ; DARWIN-32-PIC: _moo00: 3563 ; DARWIN-32-PIC: calll L48$pb 3564 ; DARWIN-32-PIC-NEXT: L48$pb: 3565 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3566 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L48$pb([[EAX]]), [[ECX:%e.x]] 3567 ; DARWIN-32-PIC-NEXT: movl 262144([[ECX]]), [[ECX:%e.x]] 3568 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L48$pb([[EAX]]), [[EAX:%e.x]] 3569 ; DARWIN-32-PIC-NEXT: movl [[ECX]], 262144([[EAX]]) 3570 ; DARWIN-32-PIC-NEXT: ret 3571 3572 ; DARWIN-64-STATIC: _moo00: 3573 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 3574 ; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]] 3575 ; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 3576 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3577 ; DARWIN-64-STATIC-NEXT: ret 3578 3579 ; DARWIN-64-DYNAMIC: _moo00: 3580 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 3581 ; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]] 3582 ; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 3583 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3584 ; DARWIN-64-DYNAMIC-NEXT: ret 3585 3586 ; DARWIN-64-PIC: _moo00: 3587 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 3588 ; DARWIN-64-PIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]] 3589 ; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 3590 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3591 ; DARWIN-64-PIC-NEXT: ret 3592 } 3593 3594 define void @moo01(i64 %i) nounwind { 3595 entry: 3596 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8 3597 ret void 3598 ; LINUX-64-STATIC: moo01: 3599 ; LINUX-64-STATIC: movq $dst+262144, ptr(%rip) 3600 ; LINUX-64-STATIC: ret 3601 3602 ; LINUX-32-STATIC: moo01: 3603 ; LINUX-32-STATIC: movl $dst+262144, ptr 3604 ; LINUX-32-STATIC-NEXT: ret 3605 3606 ; LINUX-32-PIC: moo01: 3607 ; LINUX-32-PIC: movl $dst+262144, ptr 3608 ; LINUX-32-PIC-NEXT: ret 3609 3610 ; LINUX-64-PIC: moo01: 3611 ; LINUX-64-PIC: movl $262144, [[EAX:%e.x]] 3612 ; LINUX-64-PIC-NEXT: addq dst@GOTPCREL(%rip), [[RAX:%r.x]] 3613 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 3614 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 3615 ; LINUX-64-PIC-NEXT: ret 3616 3617 ; DARWIN-32-STATIC: _moo01: 3618 ; DARWIN-32-STATIC: movl $_dst+262144, _ptr 3619 ; DARWIN-32-STATIC-NEXT: ret 3620 3621 ; DARWIN-32-DYNAMIC: _moo01: 3622 ; DARWIN-32-DYNAMIC: movl $262144, [[EAX:%e.x]] 3623 ; DARWIN-32-DYNAMIC-NEXT: addl L_dst$non_lazy_ptr, [[EAX:%e.x]] 3624 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 3625 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 3626 ; DARWIN-32-DYNAMIC-NEXT: ret 3627 3628 ; DARWIN-32-PIC: _moo01: 3629 ; DARWIN-32-PIC: calll L49$pb 3630 ; DARWIN-32-PIC-NEXT: L49$pb: 3631 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3632 ; DARWIN-32-PIC-NEXT: movl $262144, [[ECX:%e.x]] 3633 ; DARWIN-32-PIC-NEXT: addl L_dst$non_lazy_ptr-L49$pb([[EAX]]), [[ECX:%e.x]] 3634 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L49$pb([[EAX]]), [[EAX:%e.x]] 3635 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 3636 ; DARWIN-32-PIC-NEXT: ret 3637 3638 ; DARWIN-64-STATIC: _moo01: 3639 ; DARWIN-64-STATIC: movl $262144, [[EAX:%e.x]] 3640 ; DARWIN-64-STATIC-NEXT: addq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 3641 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 3642 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]]) 3643 ; DARWIN-64-STATIC-NEXT: ret 3644 3645 ; DARWIN-64-DYNAMIC: _moo01: 3646 ; DARWIN-64-DYNAMIC: movl $262144, [[EAX:%e.x]] 3647 ; DARWIN-64-DYNAMIC-NEXT: addq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 3648 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 3649 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]]) 3650 ; DARWIN-64-DYNAMIC-NEXT: ret 3651 3652 ; DARWIN-64-PIC: _moo01: 3653 ; DARWIN-64-PIC: movl $262144, [[EAX:%e.x]] 3654 ; DARWIN-64-PIC-NEXT: addq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 3655 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 3656 ; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 3657 ; DARWIN-64-PIC-NEXT: ret 3658 } 3659 3660 define void @moo02(i64 %i) nounwind { 3661 entry: 3662 %0 = load i32** @ptr, align 8 3663 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4 3664 %2 = getelementptr i32* %0, i64 65536 3665 store i32 %1, i32* %2, align 4 3666 ret void 3667 ; LINUX-64-STATIC: moo02: 3668 ; LINUX-64-STATIC: movl src+262144(%rip), [[EAX:%e.x]] 3669 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 3670 ; LINUX-64-STATIC: movl [[EAX]], 262144([[RCX]]) 3671 ; LINUX-64-STATIC: ret 3672 3673 ; LINUX-32-STATIC: moo02: 3674 ; LINUX-32-STATIC: movl src+262144, [[EAX:%e.x]] 3675 ; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]] 3676 ; LINUX-32-STATIC-NEXT: movl [[EAX]], 262144([[ECX]]) 3677 ; LINUX-32-STATIC-NEXT: ret 3678 3679 ; LINUX-32-PIC: moo02: 3680 ; LINUX-32-PIC: movl src+262144, [[EAX:%e.x]] 3681 ; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]] 3682 ; LINUX-32-PIC-NEXT: movl [[EAX]], 262144([[ECX]]) 3683 ; LINUX-32-PIC-NEXT: ret 3684 3685 ; LINUX-64-PIC: moo02: 3686 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 3687 ; LINUX-64-PIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]] 3688 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 3689 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 3690 ; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3691 ; LINUX-64-PIC-NEXT: ret 3692 3693 ; DARWIN-32-STATIC: _moo02: 3694 ; DARWIN-32-STATIC: movl _src+262144, [[EAX:%e.x]] 3695 ; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]] 3696 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], 262144([[ECX]]) 3697 ; DARWIN-32-STATIC-NEXT: ret 3698 3699 ; DARWIN-32-DYNAMIC: _moo02: 3700 ; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, [[EAX:%e.x]] 3701 ; DARWIN-32-DYNAMIC-NEXT: movl 262144([[EAX]]), [[EAX:%e.x]] 3702 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 3703 ; DARWIN-32-DYNAMIC-NEXT: movl ([[ECX]]), [[ECX:%e.x]] 3704 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 262144([[ECX]]) 3705 ; DARWIN-32-DYNAMIC-NEXT: ret 3706 3707 ; DARWIN-32-PIC: _moo02: 3708 ; DARWIN-32-PIC: calll L50$pb 3709 ; DARWIN-32-PIC-NEXT: L50$pb: 3710 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3711 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L50$pb([[EAX]]), [[ECX:%e.x]] 3712 ; DARWIN-32-PIC-NEXT: movl 262144([[ECX]]), [[ECX:%e.x]] 3713 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L50$pb([[EAX]]), [[EAX:%e.x]] 3714 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 3715 ; DARWIN-32-PIC-NEXT: movl [[ECX]], 262144([[EAX]]) 3716 ; DARWIN-32-PIC-NEXT: ret 3717 3718 ; DARWIN-64-STATIC: _moo02: 3719 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 3720 ; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]] 3721 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 3722 ; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 3723 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3724 ; DARWIN-64-STATIC-NEXT: ret 3725 3726 ; DARWIN-64-DYNAMIC: _moo02: 3727 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 3728 ; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]] 3729 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 3730 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 3731 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3732 ; DARWIN-64-DYNAMIC-NEXT: ret 3733 3734 ; DARWIN-64-PIC: _moo02: 3735 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 3736 ; DARWIN-64-PIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]] 3737 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 3738 ; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 3739 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3740 ; DARWIN-64-PIC-NEXT: ret 3741 } 3742 3743 define void @moo03(i64 %i) nounwind { 3744 entry: 3745 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32 3746 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), align 32 3747 ret void 3748 ; LINUX-64-STATIC: moo03: 3749 ; LINUX-64-STATIC: movl dsrc+262144(%rip), [[EAX:%e.x]] 3750 ; LINUX-64-STATIC: movl [[EAX]], ddst+262144(%rip) 3751 ; LINUX-64-STATIC: ret 3752 3753 ; LINUX-32-STATIC: moo03: 3754 ; LINUX-32-STATIC: movl dsrc+262144, [[EAX:%e.x]] 3755 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ddst+262144 3756 ; LINUX-32-STATIC-NEXT: ret 3757 3758 ; LINUX-32-PIC: moo03: 3759 ; LINUX-32-PIC: movl dsrc+262144, [[EAX:%e.x]] 3760 ; LINUX-32-PIC-NEXT: movl [[EAX]], ddst+262144 3761 ; LINUX-32-PIC-NEXT: ret 3762 3763 ; LINUX-64-PIC: moo03: 3764 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 3765 ; LINUX-64-PIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]] 3766 ; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), [[RCX:%r.x]] 3767 ; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3768 ; LINUX-64-PIC-NEXT: ret 3769 3770 ; DARWIN-32-STATIC: _moo03: 3771 ; DARWIN-32-STATIC: movl _dsrc+262144, [[EAX:%e.x]] 3772 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ddst+262144 3773 ; DARWIN-32-STATIC-NEXT: ret 3774 3775 ; DARWIN-32-DYNAMIC: _moo03: 3776 ; DARWIN-32-DYNAMIC: movl _dsrc+262144, [[EAX:%e.x]] 3777 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ddst+262144 3778 ; DARWIN-32-DYNAMIC-NEXT: ret 3779 3780 ; DARWIN-32-PIC: _moo03: 3781 ; DARWIN-32-PIC: calll L51$pb 3782 ; DARWIN-32-PIC-NEXT: L51$pb: 3783 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3784 ; DARWIN-32-PIC-NEXT: movl (_dsrc-L51$pb)+262144([[EAX]]), [[ECX:%e.x]] 3785 ; DARWIN-32-PIC-NEXT: movl [[ECX]], (_ddst-L51$pb)+262144([[EAX]]) 3786 ; DARWIN-32-PIC-NEXT: ret 3787 3788 ; DARWIN-64-STATIC: _moo03: 3789 ; DARWIN-64-STATIC: movl _dsrc+262144(%rip), [[EAX:%e.x]] 3790 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ddst+262144(%rip) 3791 ; DARWIN-64-STATIC-NEXT: ret 3792 3793 ; DARWIN-64-DYNAMIC: _moo03: 3794 ; DARWIN-64-DYNAMIC: movl _dsrc+262144(%rip), [[EAX:%e.x]] 3795 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ddst+262144(%rip) 3796 ; DARWIN-64-DYNAMIC-NEXT: ret 3797 3798 ; DARWIN-64-PIC: _moo03: 3799 ; DARWIN-64-PIC: movl _dsrc+262144(%rip), [[EAX:%e.x]] 3800 ; DARWIN-64-PIC-NEXT: movl [[EAX]], _ddst+262144(%rip) 3801 ; DARWIN-64-PIC-NEXT: ret 3802 } 3803 3804 define void @moo04(i64 %i) nounwind { 3805 entry: 3806 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8 3807 ret void 3808 ; LINUX-64-STATIC: moo04: 3809 ; LINUX-64-STATIC: movq $ddst+262144, dptr 3810 ; LINUX-64-STATIC: ret 3811 3812 ; LINUX-32-STATIC: moo04: 3813 ; LINUX-32-STATIC: movl $ddst+262144, dptr 3814 ; LINUX-32-STATIC-NEXT: ret 3815 3816 ; LINUX-32-PIC: moo04: 3817 ; LINUX-32-PIC: movl $ddst+262144, dptr 3818 ; LINUX-32-PIC-NEXT: ret 3819 3820 ; LINUX-64-PIC: moo04: 3821 ; LINUX-64-PIC: movl $262144, [[EAX:%e.x]] 3822 ; LINUX-64-PIC-NEXT: addq ddst@GOTPCREL(%rip), [[RAX:%r.x]] 3823 ; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 3824 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 3825 ; LINUX-64-PIC-NEXT: ret 3826 3827 ; DARWIN-32-STATIC: _moo04: 3828 ; DARWIN-32-STATIC: movl $_ddst+262144, _dptr 3829 ; DARWIN-32-STATIC-NEXT: ret 3830 3831 ; DARWIN-32-DYNAMIC: _moo04: 3832 ; DARWIN-32-DYNAMIC: movl $_ddst+262144, _dptr 3833 ; DARWIN-32-DYNAMIC-NEXT: ret 3834 3835 ; DARWIN-32-PIC: _moo04: 3836 ; DARWIN-32-PIC: calll L52$pb 3837 ; DARWIN-32-PIC-NEXT: L52$pb: 3838 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3839 ; DARWIN-32-PIC-NEXT: leal (_ddst-L52$pb)+262144([[EAX]]), [[ECX:%e.x]] 3840 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _dptr-L52$pb([[EAX]]) 3841 ; DARWIN-32-PIC-NEXT: ret 3842 3843 ; DARWIN-64-STATIC: _moo04: 3844 ; DARWIN-64-STATIC: leaq _ddst+262144(%rip), [[RAX:%r.x]] 3845 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip) 3846 ; DARWIN-64-STATIC-NEXT: ret 3847 3848 ; DARWIN-64-DYNAMIC: _moo04: 3849 ; DARWIN-64-DYNAMIC: leaq _ddst+262144(%rip), [[RAX:%r.x]] 3850 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip) 3851 ; DARWIN-64-DYNAMIC-NEXT: ret 3852 3853 ; DARWIN-64-PIC: _moo04: 3854 ; DARWIN-64-PIC: leaq _ddst+262144(%rip), [[RAX:%r.x]] 3855 ; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip) 3856 ; DARWIN-64-PIC-NEXT: ret 3857 } 3858 3859 define void @moo05(i64 %i) nounwind { 3860 entry: 3861 %0 = load i32** @dptr, align 8 3862 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32 3863 %2 = getelementptr i32* %0, i64 65536 3864 store i32 %1, i32* %2, align 4 3865 ret void 3866 ; LINUX-64-STATIC: moo05: 3867 ; LINUX-64-STATIC: movl dsrc+262144(%rip), [[EAX:%e.x]] 3868 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]] 3869 ; LINUX-64-STATIC: movl [[EAX]], 262144([[RCX]]) 3870 ; LINUX-64-STATIC: ret 3871 3872 ; LINUX-32-STATIC: moo05: 3873 ; LINUX-32-STATIC: movl dsrc+262144, [[EAX:%e.x]] 3874 ; LINUX-32-STATIC-NEXT: movl dptr, [[ECX:%e.x]] 3875 ; LINUX-32-STATIC-NEXT: movl [[EAX]], 262144([[ECX]]) 3876 ; LINUX-32-STATIC-NEXT: ret 3877 3878 ; LINUX-32-PIC: moo05: 3879 ; LINUX-32-PIC: movl dsrc+262144, [[EAX:%e.x]] 3880 ; LINUX-32-PIC-NEXT: movl dptr, [[ECX:%e.x]] 3881 ; LINUX-32-PIC-NEXT: movl [[EAX]], 262144([[ECX]]) 3882 ; LINUX-32-PIC-NEXT: ret 3883 3884 ; LINUX-64-PIC: moo05: 3885 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 3886 ; LINUX-64-PIC-NEXT: movl 262144([[RAX]]), [[EAX:%e.x]] 3887 ; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 3888 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 3889 ; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3890 ; LINUX-64-PIC-NEXT: ret 3891 3892 ; DARWIN-32-STATIC: _moo05: 3893 ; DARWIN-32-STATIC: movl _dsrc+262144, [[EAX:%e.x]] 3894 ; DARWIN-32-STATIC-NEXT: movl _dptr, [[ECX:%e.x]] 3895 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], 262144([[ECX]]) 3896 ; DARWIN-32-STATIC-NEXT: ret 3897 3898 ; DARWIN-32-DYNAMIC: _moo05: 3899 ; DARWIN-32-DYNAMIC: movl _dsrc+262144, [[EAX:%e.x]] 3900 ; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[ECX:%e.x]] 3901 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 262144([[ECX]]) 3902 ; DARWIN-32-DYNAMIC-NEXT: ret 3903 3904 ; DARWIN-32-PIC: _moo05: 3905 ; DARWIN-32-PIC: calll L53$pb 3906 ; DARWIN-32-PIC-NEXT: L53$pb: 3907 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3908 ; DARWIN-32-PIC-NEXT: movl (_dsrc-L53$pb)+262144([[EAX]]), [[ECX:%e.x]] 3909 ; DARWIN-32-PIC-NEXT: movl _dptr-L53$pb([[EAX]]), [[EAX:%e.x]] 3910 ; DARWIN-32-PIC-NEXT: movl [[ECX]], 262144([[EAX]]) 3911 ; DARWIN-32-PIC-NEXT: ret 3912 3913 ; DARWIN-64-STATIC: _moo05: 3914 ; DARWIN-64-STATIC: movl _dsrc+262144(%rip), [[EAX:%e.x]] 3915 ; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 3916 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3917 ; DARWIN-64-STATIC-NEXT: ret 3918 3919 ; DARWIN-64-DYNAMIC: _moo05: 3920 ; DARWIN-64-DYNAMIC: movl _dsrc+262144(%rip), [[EAX:%e.x]] 3921 ; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 3922 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3923 ; DARWIN-64-DYNAMIC-NEXT: ret 3924 3925 ; DARWIN-64-PIC: _moo05: 3926 ; DARWIN-64-PIC: movl _dsrc+262144(%rip), [[EAX:%e.x]] 3927 ; DARWIN-64-PIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 3928 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]]) 3929 ; DARWIN-64-PIC-NEXT: ret 3930 } 3931 3932 define void @moo06(i64 %i) nounwind { 3933 entry: 3934 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4 3935 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), align 4 3936 ret void 3937 ; LINUX-64-STATIC: moo06: 3938 ; LINUX-64-STATIC: movl lsrc+262144(%rip), [[EAX:%e.x]] 3939 ; LINUX-64-STATIC: movl [[EAX]], ldst+262144(%rip) 3940 ; LINUX-64-STATIC: ret 3941 3942 ; LINUX-32-STATIC: moo06: 3943 ; LINUX-32-STATIC: movl lsrc+262144, [[EAX:%e.x]] 3944 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ldst+262144 3945 ; LINUX-32-STATIC-NEXT: ret 3946 3947 ; LINUX-32-PIC: moo06: 3948 ; LINUX-32-PIC: movl lsrc+262144, [[EAX:%e.x]] 3949 ; LINUX-32-PIC-NEXT: movl [[EAX]], ldst+262144 3950 ; LINUX-32-PIC-NEXT: ret 3951 3952 ; LINUX-64-PIC: moo06: 3953 ; LINUX-64-PIC: movl lsrc+262144(%rip), [[EAX:%e.x]] 3954 ; LINUX-64-PIC-NEXT: movl [[EAX]], ldst+262144(%rip) 3955 ; LINUX-64-PIC-NEXT: ret 3956 3957 ; DARWIN-32-STATIC: _moo06: 3958 ; DARWIN-32-STATIC: movl _lsrc+262144, [[EAX:%e.x]] 3959 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ldst+262144 3960 ; DARWIN-32-STATIC-NEXT: ret 3961 3962 ; DARWIN-32-DYNAMIC: _moo06: 3963 ; DARWIN-32-DYNAMIC: movl _lsrc+262144, [[EAX:%e.x]] 3964 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _ldst+262144 3965 ; DARWIN-32-DYNAMIC-NEXT: ret 3966 3967 ; DARWIN-32-PIC: _moo06: 3968 ; DARWIN-32-PIC: calll L54$pb 3969 ; DARWIN-32-PIC-NEXT: L54$pb: 3970 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 3971 ; DARWIN-32-PIC-NEXT: movl (_lsrc-L54$pb)+262144([[EAX]]), [[ECX:%e.x]] 3972 ; DARWIN-32-PIC-NEXT: movl [[ECX]], (_ldst-L54$pb)+262144([[EAX]]) 3973 ; DARWIN-32-PIC-NEXT: ret 3974 3975 ; DARWIN-64-STATIC: _moo06: 3976 ; DARWIN-64-STATIC: movl _lsrc+262144(%rip), [[EAX:%e.x]] 3977 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], _ldst+262144(%rip) 3978 ; DARWIN-64-STATIC-NEXT: ret 3979 3980 ; DARWIN-64-DYNAMIC: _moo06: 3981 ; DARWIN-64-DYNAMIC: movl _lsrc+262144(%rip), [[EAX:%e.x]] 3982 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], _ldst+262144(%rip) 3983 ; DARWIN-64-DYNAMIC-NEXT: ret 3984 3985 ; DARWIN-64-PIC: _moo06: 3986 ; DARWIN-64-PIC: movl _lsrc+262144(%rip), [[EAX:%e.x]] 3987 ; DARWIN-64-PIC-NEXT: movl [[EAX]], _ldst+262144(%rip) 3988 ; DARWIN-64-PIC-NEXT: ret 3989 } 3990 3991 define void @moo07(i64 %i) nounwind { 3992 entry: 3993 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8 3994 ret void 3995 ; LINUX-64-STATIC: moo07: 3996 ; LINUX-64-STATIC: movq $ldst+262144, lptr 3997 ; LINUX-64-STATIC: ret 3998 3999 ; LINUX-32-STATIC: moo07: 4000 ; LINUX-32-STATIC: movl $ldst+262144, lptr 4001 ; LINUX-32-STATIC-NEXT: ret 4002 4003 ; LINUX-32-PIC: moo07: 4004 ; LINUX-32-PIC: movl $ldst+262144, lptr 4005 ; LINUX-32-PIC-NEXT: ret 4006 4007 ; LINUX-64-PIC: moo07: 4008 ; LINUX-64-PIC: leaq ldst+262144(%rip), [[RAX:%r.x]] 4009 ; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip) 4010 ; LINUX-64-PIC-NEXT: ret 4011 4012 ; DARWIN-32-STATIC: _moo07: 4013 ; DARWIN-32-STATIC: movl $_ldst+262144, _lptr 4014 ; DARWIN-32-STATIC-NEXT: ret 4015 4016 ; DARWIN-32-DYNAMIC: _moo07: 4017 ; DARWIN-32-DYNAMIC: movl $_ldst+262144, _lptr 4018 ; DARWIN-32-DYNAMIC-NEXT: ret 4019 4020 ; DARWIN-32-PIC: _moo07: 4021 ; DARWIN-32-PIC: calll L55$pb 4022 ; DARWIN-32-PIC-NEXT: L55$pb: 4023 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4024 ; DARWIN-32-PIC-NEXT: leal (_ldst-L55$pb)+262144([[EAX]]), [[ECX:%e.x]] 4025 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _lptr-L55$pb([[EAX]]) 4026 ; DARWIN-32-PIC-NEXT: ret 4027 4028 ; DARWIN-64-STATIC: _moo07: 4029 ; DARWIN-64-STATIC: leaq _ldst+262144(%rip), [[RAX:%r.x]] 4030 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip) 4031 ; DARWIN-64-STATIC-NEXT: ret 4032 4033 ; DARWIN-64-DYNAMIC: _moo07: 4034 ; DARWIN-64-DYNAMIC: leaq _ldst+262144(%rip), [[RAX:%r.x]] 4035 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip) 4036 ; DARWIN-64-DYNAMIC-NEXT: ret 4037 4038 ; DARWIN-64-PIC: _moo07: 4039 ; DARWIN-64-PIC: leaq _ldst+262144(%rip), [[RAX:%r.x]] 4040 ; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip) 4041 ; DARWIN-64-PIC-NEXT: ret 4042 } 4043 4044 define void @moo08(i64 %i) nounwind { 4045 entry: 4046 %0 = load i32** @lptr, align 8 4047 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4 4048 %2 = getelementptr i32* %0, i64 65536 4049 store i32 %1, i32* %2, align 4 4050 ret void 4051 ; LINUX-64-STATIC: moo08: 4052 ; LINUX-64-STATIC: movl lsrc+262144(%rip), [[EAX:%e.x]] 4053 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]] 4054 ; LINUX-64-STATIC: movl [[EAX]], 262144([[RCX]]) 4055 ; LINUX-64-STATIC: ret 4056 4057 ; LINUX-32-STATIC: moo08: 4058 ; LINUX-32-STATIC: movl lsrc+262144, [[EAX:%e.x]] 4059 ; LINUX-32-STATIC-NEXT: movl lptr, [[ECX:%e.x]] 4060 ; LINUX-32-STATIC-NEXT: movl [[EAX]], 262144([[ECX]]) 4061 ; LINUX-32-STATIC-NEXT: ret 4062 4063 ; LINUX-32-PIC: moo08: 4064 ; LINUX-32-PIC: movl lsrc+262144, [[EAX:%e.x]] 4065 ; LINUX-32-PIC-NEXT: movl lptr, [[ECX:%e.x]] 4066 ; LINUX-32-PIC-NEXT: movl [[EAX]], 262144([[ECX]]) 4067 ; LINUX-32-PIC-NEXT: ret 4068 4069 ; LINUX-64-PIC: moo08: 4070 ; LINUX-64-PIC: movl lsrc+262144(%rip), [[EAX:%e.x]] 4071 ; LINUX-64-PIC-NEXT: movq lptr(%rip), [[RCX:%r.x]] 4072 ; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]]) 4073 ; LINUX-64-PIC-NEXT: ret 4074 4075 ; DARWIN-32-STATIC: _moo08: 4076 ; DARWIN-32-STATIC: movl _lsrc+262144, [[EAX:%e.x]] 4077 ; DARWIN-32-STATIC-NEXT: movl _lptr, [[ECX:%e.x]] 4078 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], 262144([[ECX]]) 4079 ; DARWIN-32-STATIC-NEXT: ret 4080 4081 ; DARWIN-32-DYNAMIC: _moo08: 4082 ; DARWIN-32-DYNAMIC: movl _lsrc+262144, [[EAX:%e.x]] 4083 ; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[ECX:%e.x]] 4084 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], 262144([[ECX]]) 4085 ; DARWIN-32-DYNAMIC-NEXT: ret 4086 4087 ; DARWIN-32-PIC: _moo08: 4088 ; DARWIN-32-PIC: calll L56$pb 4089 ; DARWIN-32-PIC-NEXT: L56$pb: 4090 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4091 ; DARWIN-32-PIC-NEXT: movl (_lsrc-L56$pb)+262144([[EAX]]), [[ECX:%e.x]] 4092 ; DARWIN-32-PIC-NEXT: movl _lptr-L56$pb([[EAX]]), [[EAX:%e.x]] 4093 ; DARWIN-32-PIC-NEXT: movl [[ECX]], 262144([[EAX]]) 4094 ; DARWIN-32-PIC-NEXT: ret 4095 4096 ; DARWIN-64-STATIC: _moo08: 4097 ; DARWIN-64-STATIC: movl _lsrc+262144(%rip), [[EAX:%e.x]] 4098 ; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 4099 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]]) 4100 ; DARWIN-64-STATIC-NEXT: ret 4101 4102 ; DARWIN-64-DYNAMIC: _moo08: 4103 ; DARWIN-64-DYNAMIC: movl _lsrc+262144(%rip), [[EAX:%e.x]] 4104 ; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 4105 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]]) 4106 ; DARWIN-64-DYNAMIC-NEXT: ret 4107 4108 ; DARWIN-64-PIC: _moo08: 4109 ; DARWIN-64-PIC: movl _lsrc+262144(%rip), [[EAX:%e.x]] 4110 ; DARWIN-64-PIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 4111 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]]) 4112 ; DARWIN-64-PIC-NEXT: ret 4113 } 4114 4115 define void @big00(i64 %i) nounwind { 4116 entry: 4117 %0 = add i64 %i, 65536 4118 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0 4119 %2 = load i32* %1, align 4 4120 %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0 4121 store i32 %2, i32* %3, align 4 4122 ret void 4123 ; LINUX-64-STATIC: big00: 4124 ; LINUX-64-STATIC: movl src+262144(,%rdi,4), [[EAX:%e.x]] 4125 ; LINUX-64-STATIC: movl [[EAX]], dst+262144(,%rdi,4) 4126 ; LINUX-64-STATIC: ret 4127 4128 ; LINUX-32-STATIC: big00: 4129 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4130 ; LINUX-32-STATIC-NEXT: movl src+262144(,[[EAX]],4), [[ECX:%e.x]] 4131 ; LINUX-32-STATIC-NEXT: movl [[ECX]], dst+262144(,[[EAX]],4) 4132 ; LINUX-32-STATIC-NEXT: ret 4133 4134 ; LINUX-32-PIC: big00: 4135 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 4136 ; LINUX-32-PIC-NEXT: movl src+262144(,[[EAX]],4), [[ECX:%e.x]] 4137 ; LINUX-32-PIC-NEXT: movl [[ECX]], dst+262144(,[[EAX]],4) 4138 ; LINUX-32-PIC-NEXT: ret 4139 4140 ; LINUX-64-PIC: big00: 4141 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 4142 ; LINUX-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4143 ; LINUX-64-PIC-NEXT: movq dst@GOTPCREL(%rip), [[RCX:%r.x]] 4144 ; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4145 ; LINUX-64-PIC-NEXT: ret 4146 4147 ; DARWIN-32-STATIC: _big00: 4148 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4149 ; DARWIN-32-STATIC-NEXT: movl _src+262144(,[[EAX]],4), [[ECX:%e.x]] 4150 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], _dst+262144(,[[EAX]],4) 4151 ; DARWIN-32-STATIC-NEXT: ret 4152 4153 ; DARWIN-32-DYNAMIC: _big00: 4154 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 4155 ; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]] 4156 ; DARWIN-32-DYNAMIC-NEXT: movl 262144([[ECX]],[[EAX]],4), [[ECX:%e.x]] 4157 ; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[EDX:%e.x]] 4158 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4159 ; DARWIN-32-DYNAMIC-NEXT: ret 4160 4161 ; DARWIN-32-PIC: _big00: 4162 ; DARWIN-32-PIC: calll L57$pb 4163 ; DARWIN-32-PIC-NEXT: L57$pb: 4164 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4165 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 4166 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L57$pb([[EAX]]), [[EDX:%e.x]] 4167 ; DARWIN-32-PIC-NEXT: movl 262144([[EDX]],[[ECX]],4), [[EDX:%e.x]] 4168 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L57$pb([[EAX]]), [[EAX:%e.x]] 4169 ; DARWIN-32-PIC-NEXT: movl [[EDX]], 262144([[EAX]],[[ECX]],4) 4170 ; DARWIN-32-PIC-NEXT: ret 4171 4172 ; DARWIN-64-STATIC: _big00: 4173 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 4174 ; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4175 ; DARWIN-64-STATIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 4176 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4177 ; DARWIN-64-STATIC-NEXT: ret 4178 4179 ; DARWIN-64-DYNAMIC: _big00: 4180 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 4181 ; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4182 ; DARWIN-64-DYNAMIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 4183 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4184 ; DARWIN-64-DYNAMIC-NEXT: ret 4185 4186 ; DARWIN-64-PIC: _big00: 4187 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 4188 ; DARWIN-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4189 ; DARWIN-64-PIC-NEXT: movq _dst@GOTPCREL(%rip), [[RCX:%r.x]] 4190 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4191 ; DARWIN-64-PIC-NEXT: ret 4192 } 4193 4194 define void @big01(i64 %i) nounwind { 4195 entry: 4196 %.sum = add i64 %i, 65536 4197 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum 4198 store i32* %0, i32** @ptr, align 8 4199 ret void 4200 ; LINUX-64-STATIC: big01: 4201 ; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), [[RAX:%r.x]] 4202 ; LINUX-64-STATIC: movq [[RAX]], ptr(%rip) 4203 ; LINUX-64-STATIC: ret 4204 4205 ; LINUX-32-STATIC: big01: 4206 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4207 ; LINUX-32-STATIC-NEXT: leal dst+262144(,[[EAX]],4), [[EAX:%e.x]] 4208 ; LINUX-32-STATIC-NEXT: movl [[EAX]], ptr 4209 ; LINUX-32-STATIC-NEXT: ret 4210 4211 ; LINUX-32-PIC: big01: 4212 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 4213 ; LINUX-32-PIC-NEXT: leal dst+262144(,[[EAX]],4), [[EAX:%e.x]] 4214 ; LINUX-32-PIC-NEXT: movl [[EAX]], ptr 4215 ; LINUX-32-PIC-NEXT: ret 4216 4217 ; LINUX-64-PIC: big01: 4218 ; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]] 4219 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]] 4220 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 4221 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 4222 ; LINUX-64-PIC-NEXT: ret 4223 4224 ; DARWIN-32-STATIC: _big01: 4225 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4226 ; DARWIN-32-STATIC-NEXT: leal _dst+262144(,[[EAX]],4), [[EAX:%e.x]] 4227 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _ptr 4228 ; DARWIN-32-STATIC-NEXT: ret 4229 4230 ; DARWIN-32-DYNAMIC: _big01: 4231 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 4232 ; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e.x]] 4233 ; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), [[EAX:%e.x]] 4234 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 4235 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], ([[ECX]]) 4236 ; DARWIN-32-DYNAMIC-NEXT: ret 4237 4238 ; DARWIN-32-PIC: _big01: 4239 ; DARWIN-32-PIC: calll L58$pb 4240 ; DARWIN-32-PIC-NEXT: L58$pb: 4241 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4242 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 4243 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L58$pb([[EAX]]), [[EDX:%e.x]] 4244 ; DARWIN-32-PIC-NEXT: leal 262144([[EDX]],[[ECX]],4), [[ECX:%e.x]] 4245 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L58$pb([[EAX]]), [[EAX:%e.x]] 4246 ; DARWIN-32-PIC-NEXT: movl [[ECX]], ([[EAX]]) 4247 ; DARWIN-32-PIC-NEXT: ret 4248 4249 ; DARWIN-64-STATIC: _big01: 4250 ; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 4251 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]] 4252 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 4253 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], ([[RCX]]) 4254 ; DARWIN-64-STATIC-NEXT: ret 4255 4256 ; DARWIN-64-DYNAMIC: _big01: 4257 ; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 4258 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]] 4259 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 4260 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], ([[RCX]]) 4261 ; DARWIN-64-DYNAMIC-NEXT: ret 4262 4263 ; DARWIN-64-PIC: _big01: 4264 ; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 4265 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]] 4266 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 4267 ; DARWIN-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 4268 ; DARWIN-64-PIC-NEXT: ret 4269 } 4270 4271 define void @big02(i64 %i) nounwind { 4272 entry: 4273 %0 = load i32** @ptr, align 8 4274 %1 = add i64 %i, 65536 4275 %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1 4276 %3 = load i32* %2, align 4 4277 %4 = getelementptr i32* %0, i64 %1 4278 store i32 %3, i32* %4, align 4 4279 ret void 4280 ; LINUX-64-STATIC: big02: 4281 ; LINUX-64-STATIC: movl src+262144(,%rdi,4), [[EAX:%e.x]] 4282 ; LINUX-64-STATIC: movq ptr(%rip), [[RCX:%r.x]] 4283 ; LINUX-64-STATIC: movl [[EAX]], 262144([[RCX]],%rdi,4) 4284 ; LINUX-64-STATIC: ret 4285 4286 ; LINUX-32-STATIC: big02: 4287 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4288 ; LINUX-32-STATIC-NEXT: movl src+262144(,[[EAX]],4), [[ECX:%e.x]] 4289 ; LINUX-32-STATIC-NEXT: movl ptr, [[EDX:%e.x]] 4290 ; LINUX-32-STATIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4291 ; LINUX-32-STATIC-NEXT: ret 4292 4293 ; LINUX-32-PIC: big02: 4294 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 4295 ; LINUX-32-PIC-NEXT: movl src+262144(,[[EAX]],4), [[ECX:%e.x]] 4296 ; LINUX-32-PIC-NEXT: movl ptr, [[EDX:%e.x]] 4297 ; LINUX-32-PIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4298 ; LINUX-32-PIC-NEXT: ret 4299 4300 ; LINUX-64-PIC: big02: 4301 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 4302 ; LINUX-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4303 ; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 4304 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 4305 ; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4306 ; LINUX-64-PIC-NEXT: ret 4307 4308 ; DARWIN-32-STATIC: _big02: 4309 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4310 ; DARWIN-32-STATIC-NEXT: movl _src+262144(,[[EAX]],4), [[ECX:%e.x]] 4311 ; DARWIN-32-STATIC-NEXT: movl _ptr, [[EDX:%e.x]] 4312 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4313 ; DARWIN-32-STATIC-NEXT: ret 4314 4315 ; DARWIN-32-DYNAMIC: _big02: 4316 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 4317 ; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]] 4318 ; DARWIN-32-DYNAMIC-NEXT: movl 262144([[ECX]],[[EAX]],4), [[ECX:%e.x]] 4319 ; DARWIN-32-DYNAMIC-NEXT: movl L_ptr$non_lazy_ptr, [[EDX:%e.x]] 4320 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EDX]]), [[EDX:%e.x]] 4321 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4322 ; DARWIN-32-DYNAMIC-NEXT: ret 4323 4324 ; DARWIN-32-PIC: _big02: 4325 ; DARWIN-32-PIC: calll L59$pb 4326 ; DARWIN-32-PIC-NEXT: L59$pb: 4327 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4328 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 4329 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L59$pb([[EAX]]), [[EDX:%e.x]] 4330 ; DARWIN-32-PIC-NEXT: movl 262144([[EDX]],[[ECX]],4), [[EDX:%e.x]] 4331 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L59$pb([[EAX]]), [[EAX:%e.x]] 4332 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 4333 ; DARWIN-32-PIC-NEXT: movl [[EDX]], 262144([[EAX]],[[ECX]],4) 4334 ; DARWIN-32-PIC-NEXT: ret 4335 4336 ; DARWIN-64-STATIC: _big02: 4337 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 4338 ; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4339 ; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 4340 ; DARWIN-64-STATIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 4341 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4342 ; DARWIN-64-STATIC-NEXT: ret 4343 4344 ; DARWIN-64-DYNAMIC: _big02: 4345 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 4346 ; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4347 ; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 4348 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 4349 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4350 ; DARWIN-64-DYNAMIC-NEXT: ret 4351 4352 ; DARWIN-64-PIC: _big02: 4353 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 4354 ; DARWIN-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4355 ; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 4356 ; DARWIN-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 4357 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4358 ; DARWIN-64-PIC-NEXT: ret 4359 } 4360 4361 define void @big03(i64 %i) nounwind { 4362 entry: 4363 %0 = add i64 %i, 65536 4364 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0 4365 %2 = load i32* %1, align 4 4366 %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0 4367 store i32 %2, i32* %3, align 4 4368 ret void 4369 ; LINUX-64-STATIC: big03: 4370 ; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), [[EAX:%e.x]] 4371 ; LINUX-64-STATIC: movl [[EAX]], ddst+262144(,%rdi,4) 4372 ; LINUX-64-STATIC: ret 4373 4374 ; LINUX-32-STATIC: big03: 4375 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4376 ; LINUX-32-STATIC-NEXT: movl dsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4377 ; LINUX-32-STATIC-NEXT: movl [[ECX]], ddst+262144(,[[EAX]],4) 4378 ; LINUX-32-STATIC-NEXT: ret 4379 4380 ; LINUX-32-PIC: big03: 4381 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 4382 ; LINUX-32-PIC-NEXT: movl dsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4383 ; LINUX-32-PIC-NEXT: movl [[ECX]], ddst+262144(,[[EAX]],4) 4384 ; LINUX-32-PIC-NEXT: ret 4385 4386 ; LINUX-64-PIC: big03: 4387 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 4388 ; LINUX-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4389 ; LINUX-64-PIC-NEXT: movq ddst@GOTPCREL(%rip), [[RCX:%r.x]] 4390 ; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4391 ; LINUX-64-PIC-NEXT: ret 4392 4393 ; DARWIN-32-STATIC: _big03: 4394 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4395 ; DARWIN-32-STATIC-NEXT: movl _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4396 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], _ddst+262144(,[[EAX]],4) 4397 ; DARWIN-32-STATIC-NEXT: ret 4398 4399 ; DARWIN-32-DYNAMIC: _big03: 4400 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 4401 ; DARWIN-32-DYNAMIC-NEXT: movl _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4402 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], _ddst+262144(,[[EAX]],4) 4403 ; DARWIN-32-DYNAMIC-NEXT: ret 4404 4405 ; DARWIN-32-PIC: _big03: 4406 ; DARWIN-32-PIC: calll L60$pb 4407 ; DARWIN-32-PIC-NEXT: L60$pb: 4408 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4409 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 4410 ; DARWIN-32-PIC-NEXT: movl (_dsrc-L60$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]] 4411 ; DARWIN-32-PIC-NEXT: movl [[EDX]], (_ddst-L60$pb)+262144([[EAX]],[[ECX]],4) 4412 ; DARWIN-32-PIC-NEXT: ret 4413 4414 ; DARWIN-64-STATIC: _big03: 4415 ; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]] 4416 ; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4417 ; DARWIN-64-STATIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]] 4418 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4419 ; DARWIN-64-STATIC-NEXT: ret 4420 4421 ; DARWIN-64-DYNAMIC: _big03: 4422 ; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]] 4423 ; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4424 ; DARWIN-64-DYNAMIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]] 4425 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4426 ; DARWIN-64-DYNAMIC-NEXT: ret 4427 4428 ; DARWIN-64-PIC: _big03: 4429 ; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]] 4430 ; DARWIN-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4431 ; DARWIN-64-PIC-NEXT: leaq _ddst(%rip), [[RCX:%r.x]] 4432 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4433 ; DARWIN-64-PIC-NEXT: ret 4434 } 4435 4436 define void @big04(i64 %i) nounwind { 4437 entry: 4438 %.sum = add i64 %i, 65536 4439 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum 4440 store i32* %0, i32** @dptr, align 8 4441 ret void 4442 ; LINUX-64-STATIC: big04: 4443 ; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), [[RAX:%r.x]] 4444 ; LINUX-64-STATIC: movq [[RAX]], dptr 4445 ; LINUX-64-STATIC: ret 4446 4447 ; LINUX-32-STATIC: big04: 4448 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4449 ; LINUX-32-STATIC-NEXT: leal ddst+262144(,[[EAX]],4), [[EAX:%e.x]] 4450 ; LINUX-32-STATIC-NEXT: movl [[EAX]], dptr 4451 ; LINUX-32-STATIC-NEXT: ret 4452 4453 ; LINUX-32-PIC: big04: 4454 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 4455 ; LINUX-32-PIC-NEXT: leal ddst+262144(,[[EAX]],4), [[EAX:%e.x]] 4456 ; LINUX-32-PIC-NEXT: movl [[EAX]], dptr 4457 ; LINUX-32-PIC-NEXT: ret 4458 4459 ; LINUX-64-PIC: big04: 4460 ; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]] 4461 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]] 4462 ; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 4463 ; LINUX-64-PIC-NEXT: movq [[RAX]], ([[RCX]]) 4464 ; LINUX-64-PIC-NEXT: ret 4465 4466 ; DARWIN-32-STATIC: _big04: 4467 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4468 ; DARWIN-32-STATIC-NEXT: leal _ddst+262144(,[[EAX]],4), [[EAX:%e.x]] 4469 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _dptr 4470 ; DARWIN-32-STATIC-NEXT: ret 4471 4472 ; DARWIN-32-DYNAMIC: _big04: 4473 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 4474 ; DARWIN-32-DYNAMIC-NEXT: leal _ddst+262144(,[[EAX]],4), [[EAX:%e.x]] 4475 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _dptr 4476 ; DARWIN-32-DYNAMIC-NEXT: ret 4477 4478 ; DARWIN-32-PIC: _big04: 4479 ; DARWIN-32-PIC: calll L61$pb 4480 ; DARWIN-32-PIC-NEXT: L61$pb: 4481 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4482 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 4483 ; DARWIN-32-PIC-NEXT: leal (_ddst-L61$pb)+262144([[EAX]],[[ECX]],4), [[ECX:%e.x]] 4484 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _dptr-L61$pb([[EAX]]) 4485 ; DARWIN-32-PIC-NEXT: ret 4486 4487 ; DARWIN-64-STATIC: _big04: 4488 ; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]] 4489 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]] 4490 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], _dptr(%rip) 4491 ; DARWIN-64-STATIC-NEXT: ret 4492 4493 ; DARWIN-64-DYNAMIC: _big04: 4494 ; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]] 4495 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]] 4496 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _dptr(%rip) 4497 ; DARWIN-64-DYNAMIC-NEXT: ret 4498 4499 ; DARWIN-64-PIC: _big04: 4500 ; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]] 4501 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]] 4502 ; DARWIN-64-PIC-NEXT: movq [[RAX]], _dptr(%rip) 4503 ; DARWIN-64-PIC-NEXT: ret 4504 } 4505 4506 define void @big05(i64 %i) nounwind { 4507 entry: 4508 %0 = load i32** @dptr, align 8 4509 %1 = add i64 %i, 65536 4510 %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1 4511 %3 = load i32* %2, align 4 4512 %4 = getelementptr i32* %0, i64 %1 4513 store i32 %3, i32* %4, align 4 4514 ret void 4515 ; LINUX-64-STATIC: big05: 4516 ; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), [[EAX:%e.x]] 4517 ; LINUX-64-STATIC: movq dptr(%rip), [[RCX:%r.x]] 4518 ; LINUX-64-STATIC: movl [[EAX]], 262144([[RCX]],%rdi,4) 4519 ; LINUX-64-STATIC: ret 4520 4521 ; LINUX-32-STATIC: big05: 4522 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4523 ; LINUX-32-STATIC-NEXT: movl dsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4524 ; LINUX-32-STATIC-NEXT: movl dptr, [[EDX:%e.x]] 4525 ; LINUX-32-STATIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4526 ; LINUX-32-STATIC-NEXT: ret 4527 4528 ; LINUX-32-PIC: big05: 4529 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 4530 ; LINUX-32-PIC-NEXT: movl dsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4531 ; LINUX-32-PIC-NEXT: movl dptr, [[EDX:%e.x]] 4532 ; LINUX-32-PIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4533 ; LINUX-32-PIC-NEXT: ret 4534 4535 ; LINUX-64-PIC: big05: 4536 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 4537 ; LINUX-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4538 ; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 4539 ; LINUX-64-PIC-NEXT: movq ([[RCX]]), [[RCX:%r.x]] 4540 ; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4541 ; LINUX-64-PIC-NEXT: ret 4542 4543 ; DARWIN-32-STATIC: _big05: 4544 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4545 ; DARWIN-32-STATIC-NEXT: movl _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4546 ; DARWIN-32-STATIC-NEXT: movl _dptr, [[EDX:%e.x]] 4547 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4548 ; DARWIN-32-STATIC-NEXT: ret 4549 4550 ; DARWIN-32-DYNAMIC: _big05: 4551 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 4552 ; DARWIN-32-DYNAMIC-NEXT: movl _dsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4553 ; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[EDX:%e.x]] 4554 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4555 ; DARWIN-32-DYNAMIC-NEXT: ret 4556 4557 ; DARWIN-32-PIC: _big05: 4558 ; DARWIN-32-PIC: calll L62$pb 4559 ; DARWIN-32-PIC-NEXT: L62$pb: 4560 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4561 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 4562 ; DARWIN-32-PIC-NEXT: movl (_dsrc-L62$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]] 4563 ; DARWIN-32-PIC-NEXT: movl _dptr-L62$pb([[EAX]]), [[EAX:%e.x]] 4564 ; DARWIN-32-PIC-NEXT: movl [[EDX]], 262144([[EAX]],[[ECX]],4) 4565 ; DARWIN-32-PIC-NEXT: ret 4566 4567 ; DARWIN-64-STATIC: _big05: 4568 ; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]] 4569 ; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4570 ; DARWIN-64-STATIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 4571 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4572 ; DARWIN-64-STATIC-NEXT: ret 4573 4574 ; DARWIN-64-DYNAMIC: _big05: 4575 ; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]] 4576 ; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4577 ; DARWIN-64-DYNAMIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 4578 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4579 ; DARWIN-64-DYNAMIC-NEXT: ret 4580 4581 ; DARWIN-64-PIC: _big05: 4582 ; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]] 4583 ; DARWIN-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4584 ; DARWIN-64-PIC-NEXT: movq _dptr(%rip), [[RCX:%r.x]] 4585 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4586 ; DARWIN-64-PIC-NEXT: ret 4587 } 4588 4589 define void @big06(i64 %i) nounwind { 4590 entry: 4591 %0 = add i64 %i, 65536 4592 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0 4593 %2 = load i32* %1, align 4 4594 %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0 4595 store i32 %2, i32* %3, align 4 4596 ret void 4597 ; LINUX-64-STATIC: big06: 4598 ; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), [[EAX:%e.x]] 4599 ; LINUX-64-STATIC: movl [[EAX]], ldst+262144(,%rdi,4) 4600 ; LINUX-64-STATIC: ret 4601 4602 ; LINUX-32-STATIC: big06: 4603 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4604 ; LINUX-32-STATIC-NEXT: movl lsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4605 ; LINUX-32-STATIC-NEXT: movl [[ECX]], ldst+262144(,[[EAX]],4) 4606 ; LINUX-32-STATIC-NEXT: ret 4607 4608 ; LINUX-32-PIC: big06: 4609 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 4610 ; LINUX-32-PIC-NEXT: movl lsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4611 ; LINUX-32-PIC-NEXT: movl [[ECX]], ldst+262144(,[[EAX]],4) 4612 ; LINUX-32-PIC-NEXT: ret 4613 4614 ; LINUX-64-PIC: big06: 4615 ; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]] 4616 ; LINUX-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4617 ; LINUX-64-PIC-NEXT: leaq ldst(%rip), [[RCX:%r.x]] 4618 ; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4619 ; LINUX-64-PIC-NEXT: ret 4620 4621 ; DARWIN-32-STATIC: _big06: 4622 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4623 ; DARWIN-32-STATIC-NEXT: movl _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4624 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], _ldst+262144(,[[EAX]],4) 4625 ; DARWIN-32-STATIC-NEXT: ret 4626 4627 ; DARWIN-32-DYNAMIC: _big06: 4628 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 4629 ; DARWIN-32-DYNAMIC-NEXT: movl _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4630 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], _ldst+262144(,[[EAX]],4) 4631 ; DARWIN-32-DYNAMIC-NEXT: ret 4632 4633 ; DARWIN-32-PIC: _big06: 4634 ; DARWIN-32-PIC: calll L63$pb 4635 ; DARWIN-32-PIC-NEXT: L63$pb: 4636 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4637 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 4638 ; DARWIN-32-PIC-NEXT: movl (_lsrc-L63$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]] 4639 ; DARWIN-32-PIC-NEXT: movl [[EDX]], (_ldst-L63$pb)+262144([[EAX]],[[ECX]],4) 4640 ; DARWIN-32-PIC-NEXT: ret 4641 4642 ; DARWIN-64-STATIC: _big06: 4643 ; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]] 4644 ; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4645 ; DARWIN-64-STATIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]] 4646 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4647 ; DARWIN-64-STATIC-NEXT: ret 4648 4649 ; DARWIN-64-DYNAMIC: _big06: 4650 ; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]] 4651 ; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4652 ; DARWIN-64-DYNAMIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]] 4653 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4654 ; DARWIN-64-DYNAMIC-NEXT: ret 4655 4656 ; DARWIN-64-PIC: _big06: 4657 ; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]] 4658 ; DARWIN-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4659 ; DARWIN-64-PIC-NEXT: leaq _ldst(%rip), [[RCX:%r.x]] 4660 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4661 ; DARWIN-64-PIC-NEXT: ret 4662 } 4663 4664 define void @big07(i64 %i) nounwind { 4665 entry: 4666 %.sum = add i64 %i, 65536 4667 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum 4668 store i32* %0, i32** @lptr, align 8 4669 ret void 4670 ; LINUX-64-STATIC: big07: 4671 ; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), [[RAX:%r.x]] 4672 ; LINUX-64-STATIC: movq [[RAX]], lptr 4673 ; LINUX-64-STATIC: ret 4674 4675 ; LINUX-32-STATIC: big07: 4676 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4677 ; LINUX-32-STATIC-NEXT: leal ldst+262144(,[[EAX]],4), [[EAX:%e.x]] 4678 ; LINUX-32-STATIC-NEXT: movl [[EAX]], lptr 4679 ; LINUX-32-STATIC-NEXT: ret 4680 4681 ; LINUX-32-PIC: big07: 4682 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 4683 ; LINUX-32-PIC-NEXT: leal ldst+262144(,[[EAX]],4), [[EAX:%e.x]] 4684 ; LINUX-32-PIC-NEXT: movl [[EAX]], lptr 4685 ; LINUX-32-PIC-NEXT: ret 4686 4687 ; LINUX-64-PIC: big07: 4688 ; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]] 4689 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]] 4690 ; LINUX-64-PIC-NEXT: movq [[RAX]], lptr(%rip) 4691 ; LINUX-64-PIC-NEXT: ret 4692 4693 ; DARWIN-32-STATIC: _big07: 4694 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4695 ; DARWIN-32-STATIC-NEXT: leal _ldst+262144(,[[EAX]],4), [[EAX:%e.x]] 4696 ; DARWIN-32-STATIC-NEXT: movl [[EAX]], _lptr 4697 ; DARWIN-32-STATIC-NEXT: ret 4698 4699 ; DARWIN-32-DYNAMIC: _big07: 4700 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 4701 ; DARWIN-32-DYNAMIC-NEXT: leal _ldst+262144(,[[EAX]],4), [[EAX:%e.x]] 4702 ; DARWIN-32-DYNAMIC-NEXT: movl [[EAX]], _lptr 4703 ; DARWIN-32-DYNAMIC-NEXT: ret 4704 4705 ; DARWIN-32-PIC: _big07: 4706 ; DARWIN-32-PIC: calll L64$pb 4707 ; DARWIN-32-PIC-NEXT: L64$pb: 4708 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4709 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 4710 ; DARWIN-32-PIC-NEXT: leal (_ldst-L64$pb)+262144([[EAX]],[[ECX]],4), [[ECX:%e.x]] 4711 ; DARWIN-32-PIC-NEXT: movl [[ECX]], _lptr-L64$pb([[EAX]]) 4712 ; DARWIN-32-PIC-NEXT: ret 4713 4714 ; DARWIN-64-STATIC: _big07: 4715 ; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]] 4716 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]] 4717 ; DARWIN-64-STATIC-NEXT: movq [[RAX]], _lptr(%rip) 4718 ; DARWIN-64-STATIC-NEXT: ret 4719 4720 ; DARWIN-64-DYNAMIC: _big07: 4721 ; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]] 4722 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]] 4723 ; DARWIN-64-DYNAMIC-NEXT: movq [[RAX]], _lptr(%rip) 4724 ; DARWIN-64-DYNAMIC-NEXT: ret 4725 4726 ; DARWIN-64-PIC: _big07: 4727 ; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]] 4728 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), [[RAX:%r.x]] 4729 ; DARWIN-64-PIC-NEXT: movq [[RAX]], _lptr(%rip) 4730 ; DARWIN-64-PIC-NEXT: ret 4731 } 4732 4733 define void @big08(i64 %i) nounwind { 4734 entry: 4735 %0 = load i32** @lptr, align 8 4736 %1 = add i64 %i, 65536 4737 %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1 4738 %3 = load i32* %2, align 4 4739 %4 = getelementptr i32* %0, i64 %1 4740 store i32 %3, i32* %4, align 4 4741 ret void 4742 ; LINUX-64-STATIC: big08: 4743 ; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), [[EAX:%e.x]] 4744 ; LINUX-64-STATIC: movq lptr(%rip), [[RCX:%r.x]] 4745 ; LINUX-64-STATIC: movl [[EAX]], 262144([[RCX]],%rdi,4) 4746 ; LINUX-64-STATIC: ret 4747 4748 ; LINUX-32-STATIC: big08: 4749 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4750 ; LINUX-32-STATIC-NEXT: movl lsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4751 ; LINUX-32-STATIC-NEXT: movl lptr, [[EDX:%e.x]] 4752 ; LINUX-32-STATIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4753 ; LINUX-32-STATIC-NEXT: ret 4754 4755 ; LINUX-32-PIC: big08: 4756 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 4757 ; LINUX-32-PIC-NEXT: movl lsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4758 ; LINUX-32-PIC-NEXT: movl lptr, [[EDX:%e.x]] 4759 ; LINUX-32-PIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4760 ; LINUX-32-PIC-NEXT: ret 4761 4762 ; LINUX-64-PIC: big08: 4763 ; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]] 4764 ; LINUX-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4765 ; LINUX-64-PIC-NEXT: movq lptr(%rip), [[RCX:%r.x]] 4766 ; LINUX-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4767 ; LINUX-64-PIC-NEXT: ret 4768 4769 ; DARWIN-32-STATIC: _big08: 4770 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 4771 ; DARWIN-32-STATIC-NEXT: movl _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4772 ; DARWIN-32-STATIC-NEXT: movl _lptr, [[EDX:%e.x]] 4773 ; DARWIN-32-STATIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4774 ; DARWIN-32-STATIC-NEXT: ret 4775 4776 ; DARWIN-32-DYNAMIC: _big08: 4777 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 4778 ; DARWIN-32-DYNAMIC-NEXT: movl _lsrc+262144(,[[EAX]],4), [[ECX:%e.x]] 4779 ; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[EDX:%e.x]] 4780 ; DARWIN-32-DYNAMIC-NEXT: movl [[ECX]], 262144([[EDX]],[[EAX]],4) 4781 ; DARWIN-32-DYNAMIC-NEXT: ret 4782 4783 ; DARWIN-32-PIC: _big08: 4784 ; DARWIN-32-PIC: calll L65$pb 4785 ; DARWIN-32-PIC-NEXT: L65$pb: 4786 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4787 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 4788 ; DARWIN-32-PIC-NEXT: movl (_lsrc-L65$pb)+262144([[EAX]],[[ECX]],4), [[EDX:%e.x]] 4789 ; DARWIN-32-PIC-NEXT: movl _lptr-L65$pb([[EAX]]), [[EAX:%e.x]] 4790 ; DARWIN-32-PIC-NEXT: movl [[EDX]], 262144([[EAX]],[[ECX]],4) 4791 ; DARWIN-32-PIC-NEXT: ret 4792 4793 ; DARWIN-64-STATIC: _big08: 4794 ; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]] 4795 ; DARWIN-64-STATIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4796 ; DARWIN-64-STATIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 4797 ; DARWIN-64-STATIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4798 ; DARWIN-64-STATIC-NEXT: ret 4799 4800 ; DARWIN-64-DYNAMIC: _big08: 4801 ; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]] 4802 ; DARWIN-64-DYNAMIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4803 ; DARWIN-64-DYNAMIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 4804 ; DARWIN-64-DYNAMIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4805 ; DARWIN-64-DYNAMIC-NEXT: ret 4806 4807 ; DARWIN-64-PIC: _big08: 4808 ; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]] 4809 ; DARWIN-64-PIC-NEXT: movl 262144([[RAX]],%rdi,4), [[EAX:%e.x]] 4810 ; DARWIN-64-PIC-NEXT: movq _lptr(%rip), [[RCX:%r.x]] 4811 ; DARWIN-64-PIC-NEXT: movl [[EAX]], 262144([[RCX]],%rdi,4) 4812 ; DARWIN-64-PIC-NEXT: ret 4813 } 4814 4815 define i8* @bar00() nounwind { 4816 entry: 4817 ret i8* bitcast ([131072 x i32]* @src to i8*) 4818 ; LINUX-64-STATIC: bar00: 4819 ; LINUX-64-STATIC: movl $src, %eax 4820 ; LINUX-64-STATIC: ret 4821 4822 ; LINUX-32-STATIC: bar00: 4823 ; LINUX-32-STATIC: movl $src, %eax 4824 ; LINUX-32-STATIC-NEXT: ret 4825 4826 ; LINUX-32-PIC: bar00: 4827 ; LINUX-32-PIC: movl $src, %eax 4828 ; LINUX-32-PIC-NEXT: ret 4829 4830 ; LINUX-64-PIC: bar00: 4831 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax 4832 ; LINUX-64-PIC-NEXT: ret 4833 4834 ; DARWIN-32-STATIC: _bar00: 4835 ; DARWIN-32-STATIC: movl $_src, %eax 4836 ; DARWIN-32-STATIC-NEXT: ret 4837 4838 ; DARWIN-32-DYNAMIC: _bar00: 4839 ; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax 4840 ; DARWIN-32-DYNAMIC-NEXT: ret 4841 4842 ; DARWIN-32-PIC: _bar00: 4843 ; DARWIN-32-PIC: calll L66$pb 4844 ; DARWIN-32-PIC-NEXT: L66$pb: 4845 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4846 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L66$pb([[EAX]]), %eax 4847 ; DARWIN-32-PIC-NEXT: ret 4848 4849 ; DARWIN-64-STATIC: _bar00: 4850 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax 4851 ; DARWIN-64-STATIC-NEXT: ret 4852 4853 ; DARWIN-64-DYNAMIC: _bar00: 4854 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax 4855 ; DARWIN-64-DYNAMIC-NEXT: ret 4856 4857 ; DARWIN-64-PIC: _bar00: 4858 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax 4859 ; DARWIN-64-PIC-NEXT: ret 4860 } 4861 4862 define i8* @bxr00() nounwind { 4863 entry: 4864 ret i8* bitcast ([32 x i32]* @xsrc to i8*) 4865 ; LINUX-64-STATIC: bxr00: 4866 ; LINUX-64-STATIC: movl $xsrc, %eax 4867 ; LINUX-64-STATIC: ret 4868 4869 ; LINUX-32-STATIC: bxr00: 4870 ; LINUX-32-STATIC: movl $xsrc, %eax 4871 ; LINUX-32-STATIC-NEXT: ret 4872 4873 ; LINUX-32-PIC: bxr00: 4874 ; LINUX-32-PIC: movl $xsrc, %eax 4875 ; LINUX-32-PIC-NEXT: ret 4876 4877 ; LINUX-64-PIC: bxr00: 4878 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax 4879 ; LINUX-64-PIC-NEXT: ret 4880 4881 ; DARWIN-32-STATIC: _bxr00: 4882 ; DARWIN-32-STATIC: movl $_xsrc, %eax 4883 ; DARWIN-32-STATIC-NEXT: ret 4884 4885 ; DARWIN-32-DYNAMIC: _bxr00: 4886 ; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax 4887 ; DARWIN-32-DYNAMIC-NEXT: ret 4888 4889 ; DARWIN-32-PIC: _bxr00: 4890 ; DARWIN-32-PIC: calll L67$pb 4891 ; DARWIN-32-PIC-NEXT: L67$pb: 4892 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4893 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L67$pb([[EAX]]), %eax 4894 ; DARWIN-32-PIC-NEXT: ret 4895 4896 ; DARWIN-64-STATIC: _bxr00: 4897 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax 4898 ; DARWIN-64-STATIC-NEXT: ret 4899 4900 ; DARWIN-64-DYNAMIC: _bxr00: 4901 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax 4902 ; DARWIN-64-DYNAMIC-NEXT: ret 4903 4904 ; DARWIN-64-PIC: _bxr00: 4905 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax 4906 ; DARWIN-64-PIC-NEXT: ret 4907 } 4908 4909 define i8* @bar01() nounwind { 4910 entry: 4911 ret i8* bitcast ([131072 x i32]* @dst to i8*) 4912 ; LINUX-64-STATIC: bar01: 4913 ; LINUX-64-STATIC: movl $dst, %eax 4914 ; LINUX-64-STATIC: ret 4915 4916 ; LINUX-32-STATIC: bar01: 4917 ; LINUX-32-STATIC: movl $dst, %eax 4918 ; LINUX-32-STATIC-NEXT: ret 4919 4920 ; LINUX-32-PIC: bar01: 4921 ; LINUX-32-PIC: movl $dst, %eax 4922 ; LINUX-32-PIC-NEXT: ret 4923 4924 ; LINUX-64-PIC: bar01: 4925 ; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax 4926 ; LINUX-64-PIC-NEXT: ret 4927 4928 ; DARWIN-32-STATIC: _bar01: 4929 ; DARWIN-32-STATIC: movl $_dst, %eax 4930 ; DARWIN-32-STATIC-NEXT: ret 4931 4932 ; DARWIN-32-DYNAMIC: _bar01: 4933 ; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, %eax 4934 ; DARWIN-32-DYNAMIC-NEXT: ret 4935 4936 ; DARWIN-32-PIC: _bar01: 4937 ; DARWIN-32-PIC: calll L68$pb 4938 ; DARWIN-32-PIC-NEXT: L68$pb: 4939 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4940 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L68$pb([[EAX]]), %eax 4941 ; DARWIN-32-PIC-NEXT: ret 4942 4943 ; DARWIN-64-STATIC: _bar01: 4944 ; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax 4945 ; DARWIN-64-STATIC-NEXT: ret 4946 4947 ; DARWIN-64-DYNAMIC: _bar01: 4948 ; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax 4949 ; DARWIN-64-DYNAMIC-NEXT: ret 4950 4951 ; DARWIN-64-PIC: _bar01: 4952 ; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax 4953 ; DARWIN-64-PIC-NEXT: ret 4954 } 4955 4956 define i8* @bxr01() nounwind { 4957 entry: 4958 ret i8* bitcast ([32 x i32]* @xdst to i8*) 4959 ; LINUX-64-STATIC: bxr01: 4960 ; LINUX-64-STATIC: movl $xdst, %eax 4961 ; LINUX-64-STATIC: ret 4962 4963 ; LINUX-32-STATIC: bxr01: 4964 ; LINUX-32-STATIC: movl $xdst, %eax 4965 ; LINUX-32-STATIC-NEXT: ret 4966 4967 ; LINUX-32-PIC: bxr01: 4968 ; LINUX-32-PIC: movl $xdst, %eax 4969 ; LINUX-32-PIC-NEXT: ret 4970 4971 ; LINUX-64-PIC: bxr01: 4972 ; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax 4973 ; LINUX-64-PIC-NEXT: ret 4974 4975 ; DARWIN-32-STATIC: _bxr01: 4976 ; DARWIN-32-STATIC: movl $_xdst, %eax 4977 ; DARWIN-32-STATIC-NEXT: ret 4978 4979 ; DARWIN-32-DYNAMIC: _bxr01: 4980 ; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, %eax 4981 ; DARWIN-32-DYNAMIC-NEXT: ret 4982 4983 ; DARWIN-32-PIC: _bxr01: 4984 ; DARWIN-32-PIC: calll L69$pb 4985 ; DARWIN-32-PIC-NEXT: L69$pb: 4986 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 4987 ; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L69$pb([[EAX]]), %eax 4988 ; DARWIN-32-PIC-NEXT: ret 4989 4990 ; DARWIN-64-STATIC: _bxr01: 4991 ; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax 4992 ; DARWIN-64-STATIC-NEXT: ret 4993 4994 ; DARWIN-64-DYNAMIC: _bxr01: 4995 ; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax 4996 ; DARWIN-64-DYNAMIC-NEXT: ret 4997 4998 ; DARWIN-64-PIC: _bxr01: 4999 ; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax 5000 ; DARWIN-64-PIC-NEXT: ret 5001 } 5002 5003 define i8* @bar02() nounwind { 5004 entry: 5005 ret i8* bitcast (i32** @ptr to i8*) 5006 ; LINUX-64-STATIC: bar02: 5007 ; LINUX-64-STATIC: movl $ptr, %eax 5008 ; LINUX-64-STATIC: ret 5009 5010 ; LINUX-32-STATIC: bar02: 5011 ; LINUX-32-STATIC: movl $ptr, %eax 5012 ; LINUX-32-STATIC-NEXT: ret 5013 5014 ; LINUX-32-PIC: bar02: 5015 ; LINUX-32-PIC: movl $ptr, %eax 5016 ; LINUX-32-PIC-NEXT: ret 5017 5018 ; LINUX-64-PIC: bar02: 5019 ; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), %rax 5020 ; LINUX-64-PIC-NEXT: ret 5021 5022 ; DARWIN-32-STATIC: _bar02: 5023 ; DARWIN-32-STATIC: movl $_ptr, %eax 5024 ; DARWIN-32-STATIC-NEXT: ret 5025 5026 ; DARWIN-32-DYNAMIC: _bar02: 5027 ; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, %eax 5028 ; DARWIN-32-DYNAMIC-NEXT: ret 5029 5030 ; DARWIN-32-PIC: _bar02: 5031 ; DARWIN-32-PIC: calll L70$pb 5032 ; DARWIN-32-PIC-NEXT: L70$pb: 5033 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5034 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L70$pb([[EAX]]), %eax 5035 ; DARWIN-32-PIC-NEXT: ret 5036 5037 ; DARWIN-64-STATIC: _bar02: 5038 ; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), %rax 5039 ; DARWIN-64-STATIC-NEXT: ret 5040 5041 ; DARWIN-64-DYNAMIC: _bar02: 5042 ; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), %rax 5043 ; DARWIN-64-DYNAMIC-NEXT: ret 5044 5045 ; DARWIN-64-PIC: _bar02: 5046 ; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), %rax 5047 ; DARWIN-64-PIC-NEXT: ret 5048 } 5049 5050 define i8* @bar03() nounwind { 5051 entry: 5052 ret i8* bitcast ([131072 x i32]* @dsrc to i8*) 5053 ; LINUX-64-STATIC: bar03: 5054 ; LINUX-64-STATIC: movl $dsrc, %eax 5055 ; LINUX-64-STATIC: ret 5056 5057 ; LINUX-32-STATIC: bar03: 5058 ; LINUX-32-STATIC: movl $dsrc, %eax 5059 ; LINUX-32-STATIC-NEXT: ret 5060 5061 ; LINUX-32-PIC: bar03: 5062 ; LINUX-32-PIC: movl $dsrc, %eax 5063 ; LINUX-32-PIC-NEXT: ret 5064 5065 ; LINUX-64-PIC: bar03: 5066 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax 5067 ; LINUX-64-PIC-NEXT: ret 5068 5069 ; DARWIN-32-STATIC: _bar03: 5070 ; DARWIN-32-STATIC: movl $_dsrc, %eax 5071 ; DARWIN-32-STATIC-NEXT: ret 5072 5073 ; DARWIN-32-DYNAMIC: _bar03: 5074 ; DARWIN-32-DYNAMIC: movl $_dsrc, %eax 5075 ; DARWIN-32-DYNAMIC-NEXT: ret 5076 5077 ; DARWIN-32-PIC: _bar03: 5078 ; DARWIN-32-PIC: calll L71$pb 5079 ; DARWIN-32-PIC-NEXT: L71$pb: 5080 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5081 ; DARWIN-32-PIC-NEXT: leal _dsrc-L71$pb([[EAX]]), %eax 5082 ; DARWIN-32-PIC-NEXT: ret 5083 5084 ; DARWIN-64-STATIC: _bar03: 5085 ; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax 5086 ; DARWIN-64-STATIC-NEXT: ret 5087 5088 ; DARWIN-64-DYNAMIC: _bar03: 5089 ; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax 5090 ; DARWIN-64-DYNAMIC-NEXT: ret 5091 5092 ; DARWIN-64-PIC: _bar03: 5093 ; DARWIN-64-PIC: leaq _dsrc(%rip), %rax 5094 ; DARWIN-64-PIC-NEXT: ret 5095 } 5096 5097 define i8* @bar04() nounwind { 5098 entry: 5099 ret i8* bitcast ([131072 x i32]* @ddst to i8*) 5100 ; LINUX-64-STATIC: bar04: 5101 ; LINUX-64-STATIC: movl $ddst, %eax 5102 ; LINUX-64-STATIC: ret 5103 5104 ; LINUX-32-STATIC: bar04: 5105 ; LINUX-32-STATIC: movl $ddst, %eax 5106 ; LINUX-32-STATIC-NEXT: ret 5107 5108 ; LINUX-32-PIC: bar04: 5109 ; LINUX-32-PIC: movl $ddst, %eax 5110 ; LINUX-32-PIC-NEXT: ret 5111 5112 ; LINUX-64-PIC: bar04: 5113 ; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax 5114 ; LINUX-64-PIC-NEXT: ret 5115 5116 ; DARWIN-32-STATIC: _bar04: 5117 ; DARWIN-32-STATIC: movl $_ddst, %eax 5118 ; DARWIN-32-STATIC-NEXT: ret 5119 5120 ; DARWIN-32-DYNAMIC: _bar04: 5121 ; DARWIN-32-DYNAMIC: movl $_ddst, %eax 5122 ; DARWIN-32-DYNAMIC-NEXT: ret 5123 5124 ; DARWIN-32-PIC: _bar04: 5125 ; DARWIN-32-PIC: calll L72$pb 5126 ; DARWIN-32-PIC-NEXT: L72$pb: 5127 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5128 ; DARWIN-32-PIC-NEXT: leal _ddst-L72$pb([[EAX]]), %eax 5129 ; DARWIN-32-PIC-NEXT: ret 5130 5131 ; DARWIN-64-STATIC: _bar04: 5132 ; DARWIN-64-STATIC: leaq _ddst(%rip), %rax 5133 ; DARWIN-64-STATIC-NEXT: ret 5134 5135 ; DARWIN-64-DYNAMIC: _bar04: 5136 ; DARWIN-64-DYNAMIC: leaq _ddst(%rip), %rax 5137 ; DARWIN-64-DYNAMIC-NEXT: ret 5138 5139 ; DARWIN-64-PIC: _bar04: 5140 ; DARWIN-64-PIC: leaq _ddst(%rip), %rax 5141 ; DARWIN-64-PIC-NEXT: ret 5142 } 5143 5144 define i8* @bar05() nounwind { 5145 entry: 5146 ret i8* bitcast (i32** @dptr to i8*) 5147 ; LINUX-64-STATIC: bar05: 5148 ; LINUX-64-STATIC: movl $dptr, %eax 5149 ; LINUX-64-STATIC: ret 5150 5151 ; LINUX-32-STATIC: bar05: 5152 ; LINUX-32-STATIC: movl $dptr, %eax 5153 ; LINUX-32-STATIC-NEXT: ret 5154 5155 ; LINUX-32-PIC: bar05: 5156 ; LINUX-32-PIC: movl $dptr, %eax 5157 ; LINUX-32-PIC-NEXT: ret 5158 5159 ; LINUX-64-PIC: bar05: 5160 ; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), %rax 5161 ; LINUX-64-PIC-NEXT: ret 5162 5163 ; DARWIN-32-STATIC: _bar05: 5164 ; DARWIN-32-STATIC: movl $_dptr, %eax 5165 ; DARWIN-32-STATIC-NEXT: ret 5166 5167 ; DARWIN-32-DYNAMIC: _bar05: 5168 ; DARWIN-32-DYNAMIC: movl $_dptr, %eax 5169 ; DARWIN-32-DYNAMIC-NEXT: ret 5170 5171 ; DARWIN-32-PIC: _bar05: 5172 ; DARWIN-32-PIC: calll L73$pb 5173 ; DARWIN-32-PIC-NEXT: L73$pb: 5174 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5175 ; DARWIN-32-PIC-NEXT: leal _dptr-L73$pb([[EAX]]), %eax 5176 ; DARWIN-32-PIC-NEXT: ret 5177 5178 ; DARWIN-64-STATIC: _bar05: 5179 ; DARWIN-64-STATIC: leaq _dptr(%rip), %rax 5180 ; DARWIN-64-STATIC-NEXT: ret 5181 5182 ; DARWIN-64-DYNAMIC: _bar05: 5183 ; DARWIN-64-DYNAMIC: leaq _dptr(%rip), %rax 5184 ; DARWIN-64-DYNAMIC-NEXT: ret 5185 5186 ; DARWIN-64-PIC: _bar05: 5187 ; DARWIN-64-PIC: leaq _dptr(%rip), %rax 5188 ; DARWIN-64-PIC-NEXT: ret 5189 } 5190 5191 define i8* @bar06() nounwind { 5192 entry: 5193 ret i8* bitcast ([131072 x i32]* @lsrc to i8*) 5194 ; LINUX-64-STATIC: bar06: 5195 ; LINUX-64-STATIC: movl $lsrc, %eax 5196 ; LINUX-64-STATIC: ret 5197 5198 ; LINUX-32-STATIC: bar06: 5199 ; LINUX-32-STATIC: movl $lsrc, %eax 5200 ; LINUX-32-STATIC-NEXT: ret 5201 5202 ; LINUX-32-PIC: bar06: 5203 ; LINUX-32-PIC: movl $lsrc, %eax 5204 ; LINUX-32-PIC-NEXT: ret 5205 5206 ; LINUX-64-PIC: bar06: 5207 ; LINUX-64-PIC: leaq lsrc(%rip), %rax 5208 ; LINUX-64-PIC-NEXT: ret 5209 5210 ; DARWIN-32-STATIC: _bar06: 5211 ; DARWIN-32-STATIC: movl $_lsrc, %eax 5212 ; DARWIN-32-STATIC-NEXT: ret 5213 5214 ; DARWIN-32-DYNAMIC: _bar06: 5215 ; DARWIN-32-DYNAMIC: movl $_lsrc, %eax 5216 ; DARWIN-32-DYNAMIC-NEXT: ret 5217 5218 ; DARWIN-32-PIC: _bar06: 5219 ; DARWIN-32-PIC: calll L74$pb 5220 ; DARWIN-32-PIC-NEXT: L74$pb: 5221 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5222 ; DARWIN-32-PIC-NEXT: leal _lsrc-L74$pb([[EAX]]), %eax 5223 ; DARWIN-32-PIC-NEXT: ret 5224 5225 ; DARWIN-64-STATIC: _bar06: 5226 ; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax 5227 ; DARWIN-64-STATIC-NEXT: ret 5228 5229 ; DARWIN-64-DYNAMIC: _bar06: 5230 ; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax 5231 ; DARWIN-64-DYNAMIC-NEXT: ret 5232 5233 ; DARWIN-64-PIC: _bar06: 5234 ; DARWIN-64-PIC: leaq _lsrc(%rip), %rax 5235 ; DARWIN-64-PIC-NEXT: ret 5236 } 5237 5238 define i8* @bar07() nounwind { 5239 entry: 5240 ret i8* bitcast ([131072 x i32]* @ldst to i8*) 5241 ; LINUX-64-STATIC: bar07: 5242 ; LINUX-64-STATIC: movl $ldst, %eax 5243 ; LINUX-64-STATIC: ret 5244 5245 ; LINUX-32-STATIC: bar07: 5246 ; LINUX-32-STATIC: movl $ldst, %eax 5247 ; LINUX-32-STATIC-NEXT: ret 5248 5249 ; LINUX-32-PIC: bar07: 5250 ; LINUX-32-PIC: movl $ldst, %eax 5251 ; LINUX-32-PIC-NEXT: ret 5252 5253 ; LINUX-64-PIC: bar07: 5254 ; LINUX-64-PIC: leaq ldst(%rip), %rax 5255 ; LINUX-64-PIC-NEXT: ret 5256 5257 ; DARWIN-32-STATIC: _bar07: 5258 ; DARWIN-32-STATIC: movl $_ldst, %eax 5259 ; DARWIN-32-STATIC-NEXT: ret 5260 5261 ; DARWIN-32-DYNAMIC: _bar07: 5262 ; DARWIN-32-DYNAMIC: movl $_ldst, %eax 5263 ; DARWIN-32-DYNAMIC-NEXT: ret 5264 5265 ; DARWIN-32-PIC: _bar07: 5266 ; DARWIN-32-PIC: calll L75$pb 5267 ; DARWIN-32-PIC-NEXT: L75$pb: 5268 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5269 ; DARWIN-32-PIC-NEXT: leal _ldst-L75$pb([[EAX]]), %eax 5270 ; DARWIN-32-PIC-NEXT: ret 5271 5272 ; DARWIN-64-STATIC: _bar07: 5273 ; DARWIN-64-STATIC: leaq _ldst(%rip), %rax 5274 ; DARWIN-64-STATIC-NEXT: ret 5275 5276 ; DARWIN-64-DYNAMIC: _bar07: 5277 ; DARWIN-64-DYNAMIC: leaq _ldst(%rip), %rax 5278 ; DARWIN-64-DYNAMIC-NEXT: ret 5279 5280 ; DARWIN-64-PIC: _bar07: 5281 ; DARWIN-64-PIC: leaq _ldst(%rip), %rax 5282 ; DARWIN-64-PIC-NEXT: ret 5283 } 5284 5285 define i8* @bar08() nounwind { 5286 entry: 5287 ret i8* bitcast (i32** @lptr to i8*) 5288 ; LINUX-64-STATIC: bar08: 5289 ; LINUX-64-STATIC: movl $lptr, %eax 5290 ; LINUX-64-STATIC: ret 5291 5292 ; LINUX-32-STATIC: bar08: 5293 ; LINUX-32-STATIC: movl $lptr, %eax 5294 ; LINUX-32-STATIC-NEXT: ret 5295 5296 ; LINUX-32-PIC: bar08: 5297 ; LINUX-32-PIC: movl $lptr, %eax 5298 ; LINUX-32-PIC-NEXT: ret 5299 5300 ; LINUX-64-PIC: bar08: 5301 ; LINUX-64-PIC: leaq lptr(%rip), %rax 5302 ; LINUX-64-PIC-NEXT: ret 5303 5304 ; DARWIN-32-STATIC: _bar08: 5305 ; DARWIN-32-STATIC: movl $_lptr, %eax 5306 ; DARWIN-32-STATIC-NEXT: ret 5307 5308 ; DARWIN-32-DYNAMIC: _bar08: 5309 ; DARWIN-32-DYNAMIC: movl $_lptr, %eax 5310 ; DARWIN-32-DYNAMIC-NEXT: ret 5311 5312 ; DARWIN-32-PIC: _bar08: 5313 ; DARWIN-32-PIC: calll L76$pb 5314 ; DARWIN-32-PIC-NEXT: L76$pb: 5315 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5316 ; DARWIN-32-PIC-NEXT: leal _lptr-L76$pb([[EAX]]), %eax 5317 ; DARWIN-32-PIC-NEXT: ret 5318 5319 ; DARWIN-64-STATIC: _bar08: 5320 ; DARWIN-64-STATIC: leaq _lptr(%rip), %rax 5321 ; DARWIN-64-STATIC-NEXT: ret 5322 5323 ; DARWIN-64-DYNAMIC: _bar08: 5324 ; DARWIN-64-DYNAMIC: leaq _lptr(%rip), %rax 5325 ; DARWIN-64-DYNAMIC-NEXT: ret 5326 5327 ; DARWIN-64-PIC: _bar08: 5328 ; DARWIN-64-PIC: leaq _lptr(%rip), %rax 5329 ; DARWIN-64-PIC-NEXT: ret 5330 } 5331 5332 define i8* @har00() nounwind { 5333 entry: 5334 ret i8* bitcast ([131072 x i32]* @src to i8*) 5335 ; LINUX-64-STATIC: har00: 5336 ; LINUX-64-STATIC: movl $src, %eax 5337 ; LINUX-64-STATIC: ret 5338 5339 ; LINUX-32-STATIC: har00: 5340 ; LINUX-32-STATIC: movl $src, %eax 5341 ; LINUX-32-STATIC-NEXT: ret 5342 5343 ; LINUX-32-PIC: har00: 5344 ; LINUX-32-PIC: movl $src, %eax 5345 ; LINUX-32-PIC-NEXT: ret 5346 5347 ; LINUX-64-PIC: har00: 5348 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax 5349 ; LINUX-64-PIC-NEXT: ret 5350 5351 ; DARWIN-32-STATIC: _har00: 5352 ; DARWIN-32-STATIC: movl $_src, %eax 5353 ; DARWIN-32-STATIC-NEXT: ret 5354 5355 ; DARWIN-32-DYNAMIC: _har00: 5356 ; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax 5357 ; DARWIN-32-DYNAMIC-NEXT: ret 5358 5359 ; DARWIN-32-PIC: _har00: 5360 ; DARWIN-32-PIC: calll L77$pb 5361 ; DARWIN-32-PIC-NEXT: L77$pb: 5362 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5363 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L77$pb([[EAX]]), %eax 5364 ; DARWIN-32-PIC-NEXT: ret 5365 5366 ; DARWIN-64-STATIC: _har00: 5367 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax 5368 ; DARWIN-64-STATIC-NEXT: ret 5369 5370 ; DARWIN-64-DYNAMIC: _har00: 5371 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax 5372 ; DARWIN-64-DYNAMIC-NEXT: ret 5373 5374 ; DARWIN-64-PIC: _har00: 5375 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax 5376 ; DARWIN-64-PIC-NEXT: ret 5377 } 5378 5379 define i8* @hxr00() nounwind { 5380 entry: 5381 ret i8* bitcast ([32 x i32]* @xsrc to i8*) 5382 ; LINUX-64-STATIC: hxr00: 5383 ; LINUX-64-STATIC: movl $xsrc, %eax 5384 ; LINUX-64-STATIC: ret 5385 5386 ; LINUX-32-STATIC: hxr00: 5387 ; LINUX-32-STATIC: movl $xsrc, %eax 5388 ; LINUX-32-STATIC-NEXT: ret 5389 5390 ; LINUX-32-PIC: hxr00: 5391 ; LINUX-32-PIC: movl $xsrc, %eax 5392 ; LINUX-32-PIC-NEXT: ret 5393 5394 ; LINUX-64-PIC: hxr00: 5395 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax 5396 ; LINUX-64-PIC-NEXT: ret 5397 5398 ; DARWIN-32-STATIC: _hxr00: 5399 ; DARWIN-32-STATIC: movl $_xsrc, %eax 5400 ; DARWIN-32-STATIC-NEXT: ret 5401 5402 ; DARWIN-32-DYNAMIC: _hxr00: 5403 ; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax 5404 ; DARWIN-32-DYNAMIC-NEXT: ret 5405 5406 ; DARWIN-32-PIC: _hxr00: 5407 ; DARWIN-32-PIC: calll L78$pb 5408 ; DARWIN-32-PIC-NEXT: L78$pb: 5409 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5410 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L78$pb([[EAX]]), %eax 5411 ; DARWIN-32-PIC-NEXT: ret 5412 5413 ; DARWIN-64-STATIC: _hxr00: 5414 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax 5415 ; DARWIN-64-STATIC-NEXT: ret 5416 5417 ; DARWIN-64-DYNAMIC: _hxr00: 5418 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax 5419 ; DARWIN-64-DYNAMIC-NEXT: ret 5420 5421 ; DARWIN-64-PIC: _hxr00: 5422 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax 5423 ; DARWIN-64-PIC-NEXT: ret 5424 } 5425 5426 define i8* @har01() nounwind { 5427 entry: 5428 ret i8* bitcast ([131072 x i32]* @dst to i8*) 5429 ; LINUX-64-STATIC: har01: 5430 ; LINUX-64-STATIC: movl $dst, %eax 5431 ; LINUX-64-STATIC: ret 5432 5433 ; LINUX-32-STATIC: har01: 5434 ; LINUX-32-STATIC: movl $dst, %eax 5435 ; LINUX-32-STATIC-NEXT: ret 5436 5437 ; LINUX-32-PIC: har01: 5438 ; LINUX-32-PIC: movl $dst, %eax 5439 ; LINUX-32-PIC-NEXT: ret 5440 5441 ; LINUX-64-PIC: har01: 5442 ; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax 5443 ; LINUX-64-PIC-NEXT: ret 5444 5445 ; DARWIN-32-STATIC: _har01: 5446 ; DARWIN-32-STATIC: movl $_dst, %eax 5447 ; DARWIN-32-STATIC-NEXT: ret 5448 5449 ; DARWIN-32-DYNAMIC: _har01: 5450 ; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, %eax 5451 ; DARWIN-32-DYNAMIC-NEXT: ret 5452 5453 ; DARWIN-32-PIC: _har01: 5454 ; DARWIN-32-PIC: calll L79$pb 5455 ; DARWIN-32-PIC-NEXT: L79$pb: 5456 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5457 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L79$pb([[EAX]]), %eax 5458 ; DARWIN-32-PIC-NEXT: ret 5459 5460 ; DARWIN-64-STATIC: _har01: 5461 ; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax 5462 ; DARWIN-64-STATIC-NEXT: ret 5463 5464 ; DARWIN-64-DYNAMIC: _har01: 5465 ; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax 5466 ; DARWIN-64-DYNAMIC-NEXT: ret 5467 5468 ; DARWIN-64-PIC: _har01: 5469 ; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax 5470 ; DARWIN-64-PIC-NEXT: ret 5471 } 5472 5473 define i8* @hxr01() nounwind { 5474 entry: 5475 ret i8* bitcast ([32 x i32]* @xdst to i8*) 5476 ; LINUX-64-STATIC: hxr01: 5477 ; LINUX-64-STATIC: movl $xdst, %eax 5478 ; LINUX-64-STATIC: ret 5479 5480 ; LINUX-32-STATIC: hxr01: 5481 ; LINUX-32-STATIC: movl $xdst, %eax 5482 ; LINUX-32-STATIC-NEXT: ret 5483 5484 ; LINUX-32-PIC: hxr01: 5485 ; LINUX-32-PIC: movl $xdst, %eax 5486 ; LINUX-32-PIC-NEXT: ret 5487 5488 ; LINUX-64-PIC: hxr01: 5489 ; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax 5490 ; LINUX-64-PIC-NEXT: ret 5491 5492 ; DARWIN-32-STATIC: _hxr01: 5493 ; DARWIN-32-STATIC: movl $_xdst, %eax 5494 ; DARWIN-32-STATIC-NEXT: ret 5495 5496 ; DARWIN-32-DYNAMIC: _hxr01: 5497 ; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, %eax 5498 ; DARWIN-32-DYNAMIC-NEXT: ret 5499 5500 ; DARWIN-32-PIC: _hxr01: 5501 ; DARWIN-32-PIC: calll L80$pb 5502 ; DARWIN-32-PIC-NEXT: L80$pb: 5503 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5504 ; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L80$pb([[EAX]]), %eax 5505 ; DARWIN-32-PIC-NEXT: ret 5506 5507 ; DARWIN-64-STATIC: _hxr01: 5508 ; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax 5509 ; DARWIN-64-STATIC-NEXT: ret 5510 5511 ; DARWIN-64-DYNAMIC: _hxr01: 5512 ; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax 5513 ; DARWIN-64-DYNAMIC-NEXT: ret 5514 5515 ; DARWIN-64-PIC: _hxr01: 5516 ; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax 5517 ; DARWIN-64-PIC-NEXT: ret 5518 } 5519 5520 define i8* @har02() nounwind { 5521 entry: 5522 %0 = load i32** @ptr, align 8 5523 %1 = bitcast i32* %0 to i8* 5524 ret i8* %1 5525 ; LINUX-64-STATIC: har02: 5526 ; LINUX-64-STATIC: movq ptr(%rip), %rax 5527 ; LINUX-64-STATIC: ret 5528 5529 ; LINUX-32-STATIC: har02: 5530 ; LINUX-32-STATIC: movl ptr, %eax 5531 ; LINUX-32-STATIC-NEXT: ret 5532 5533 ; LINUX-32-PIC: har02: 5534 ; LINUX-32-PIC: movl ptr, %eax 5535 ; LINUX-32-PIC-NEXT: ret 5536 5537 ; LINUX-64-PIC: har02: 5538 ; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]] 5539 ; LINUX-64-PIC-NEXT: movq ([[RAX]]), %rax 5540 ; LINUX-64-PIC-NEXT: ret 5541 5542 ; DARWIN-32-STATIC: _har02: 5543 ; DARWIN-32-STATIC: movl _ptr, %eax 5544 ; DARWIN-32-STATIC-NEXT: ret 5545 5546 ; DARWIN-32-DYNAMIC: _har02: 5547 ; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[EAX:%e.x]] 5548 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), %eax 5549 ; DARWIN-32-DYNAMIC-NEXT: ret 5550 5551 ; DARWIN-32-PIC: _har02: 5552 ; DARWIN-32-PIC: calll L81$pb 5553 ; DARWIN-32-PIC-NEXT: L81$pb: 5554 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5555 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L81$pb([[EAX]]), [[EAX:%e.x]] 5556 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), %eax 5557 ; DARWIN-32-PIC-NEXT: ret 5558 5559 ; DARWIN-64-STATIC: _har02: 5560 ; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 5561 ; DARWIN-64-STATIC-NEXT: movq ([[RAX]]), %rax 5562 ; DARWIN-64-STATIC-NEXT: ret 5563 5564 ; DARWIN-64-DYNAMIC: _har02: 5565 ; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 5566 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RAX]]), %rax 5567 ; DARWIN-64-DYNAMIC-NEXT: ret 5568 5569 ; DARWIN-64-PIC: _har02: 5570 ; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 5571 ; DARWIN-64-PIC-NEXT: movq ([[RAX]]), %rax 5572 ; DARWIN-64-PIC-NEXT: ret 5573 } 5574 5575 define i8* @har03() nounwind { 5576 entry: 5577 ret i8* bitcast ([131072 x i32]* @dsrc to i8*) 5578 ; LINUX-64-STATIC: har03: 5579 ; LINUX-64-STATIC: movl $dsrc, %eax 5580 ; LINUX-64-STATIC: ret 5581 5582 ; LINUX-32-STATIC: har03: 5583 ; LINUX-32-STATIC: movl $dsrc, %eax 5584 ; LINUX-32-STATIC-NEXT: ret 5585 5586 ; LINUX-32-PIC: har03: 5587 ; LINUX-32-PIC: movl $dsrc, %eax 5588 ; LINUX-32-PIC-NEXT: ret 5589 5590 ; LINUX-64-PIC: har03: 5591 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax 5592 ; LINUX-64-PIC-NEXT: ret 5593 5594 ; DARWIN-32-STATIC: _har03: 5595 ; DARWIN-32-STATIC: movl $_dsrc, %eax 5596 ; DARWIN-32-STATIC-NEXT: ret 5597 5598 ; DARWIN-32-DYNAMIC: _har03: 5599 ; DARWIN-32-DYNAMIC: movl $_dsrc, %eax 5600 ; DARWIN-32-DYNAMIC-NEXT: ret 5601 5602 ; DARWIN-32-PIC: _har03: 5603 ; DARWIN-32-PIC: calll L82$pb 5604 ; DARWIN-32-PIC-NEXT: L82$pb: 5605 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5606 ; DARWIN-32-PIC-NEXT: leal _dsrc-L82$pb([[EAX]]), %eax 5607 ; DARWIN-32-PIC-NEXT: ret 5608 5609 ; DARWIN-64-STATIC: _har03: 5610 ; DARWIN-64-STATIC: leaq _dsrc(%rip), %rax 5611 ; DARWIN-64-STATIC-NEXT: ret 5612 5613 ; DARWIN-64-DYNAMIC: _har03: 5614 ; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), %rax 5615 ; DARWIN-64-DYNAMIC-NEXT: ret 5616 5617 ; DARWIN-64-PIC: _har03: 5618 ; DARWIN-64-PIC: leaq _dsrc(%rip), %rax 5619 ; DARWIN-64-PIC-NEXT: ret 5620 } 5621 5622 define i8* @har04() nounwind { 5623 entry: 5624 ret i8* bitcast ([131072 x i32]* @ddst to i8*) 5625 ; LINUX-64-STATIC: har04: 5626 ; LINUX-64-STATIC: movl $ddst, %eax 5627 ; LINUX-64-STATIC: ret 5628 5629 ; LINUX-32-STATIC: har04: 5630 ; LINUX-32-STATIC: movl $ddst, %eax 5631 ; LINUX-32-STATIC-NEXT: ret 5632 5633 ; LINUX-32-PIC: har04: 5634 ; LINUX-32-PIC: movl $ddst, %eax 5635 ; LINUX-32-PIC-NEXT: ret 5636 5637 ; LINUX-64-PIC: har04: 5638 ; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax 5639 ; LINUX-64-PIC-NEXT: ret 5640 5641 ; DARWIN-32-STATIC: _har04: 5642 ; DARWIN-32-STATIC: movl $_ddst, %eax 5643 ; DARWIN-32-STATIC-NEXT: ret 5644 5645 ; DARWIN-32-DYNAMIC: _har04: 5646 ; DARWIN-32-DYNAMIC: movl $_ddst, %eax 5647 ; DARWIN-32-DYNAMIC-NEXT: ret 5648 5649 ; DARWIN-32-PIC: _har04: 5650 ; DARWIN-32-PIC: calll L83$pb 5651 ; DARWIN-32-PIC-NEXT: L83$pb: 5652 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5653 ; DARWIN-32-PIC-NEXT: leal _ddst-L83$pb([[EAX]]), %eax 5654 ; DARWIN-32-PIC-NEXT: ret 5655 5656 ; DARWIN-64-STATIC: _har04: 5657 ; DARWIN-64-STATIC: leaq _ddst(%rip), %rax 5658 ; DARWIN-64-STATIC-NEXT: ret 5659 5660 ; DARWIN-64-DYNAMIC: _har04: 5661 ; DARWIN-64-DYNAMIC: leaq _ddst(%rip), %rax 5662 ; DARWIN-64-DYNAMIC-NEXT: ret 5663 5664 ; DARWIN-64-PIC: _har04: 5665 ; DARWIN-64-PIC: leaq _ddst(%rip), %rax 5666 ; DARWIN-64-PIC-NEXT: ret 5667 } 5668 5669 define i8* @har05() nounwind { 5670 entry: 5671 %0 = load i32** @dptr, align 8 5672 %1 = bitcast i32* %0 to i8* 5673 ret i8* %1 5674 ; LINUX-64-STATIC: har05: 5675 ; LINUX-64-STATIC: movq dptr(%rip), %rax 5676 ; LINUX-64-STATIC: ret 5677 5678 ; LINUX-32-STATIC: har05: 5679 ; LINUX-32-STATIC: movl dptr, %eax 5680 ; LINUX-32-STATIC-NEXT: ret 5681 5682 ; LINUX-32-PIC: har05: 5683 ; LINUX-32-PIC: movl dptr, %eax 5684 ; LINUX-32-PIC-NEXT: ret 5685 5686 ; LINUX-64-PIC: har05: 5687 ; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]] 5688 ; LINUX-64-PIC-NEXT: movq ([[RAX]]), %rax 5689 ; LINUX-64-PIC-NEXT: ret 5690 5691 ; DARWIN-32-STATIC: _har05: 5692 ; DARWIN-32-STATIC: movl _dptr, %eax 5693 ; DARWIN-32-STATIC-NEXT: ret 5694 5695 ; DARWIN-32-DYNAMIC: _har05: 5696 ; DARWIN-32-DYNAMIC: movl _dptr, %eax 5697 ; DARWIN-32-DYNAMIC-NEXT: ret 5698 5699 ; DARWIN-32-PIC: _har05: 5700 ; DARWIN-32-PIC: calll L84$pb 5701 ; DARWIN-32-PIC-NEXT: L84$pb: 5702 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5703 ; DARWIN-32-PIC-NEXT: movl _dptr-L84$pb([[EAX]]), %eax 5704 ; DARWIN-32-PIC-NEXT: ret 5705 5706 ; DARWIN-64-STATIC: _har05: 5707 ; DARWIN-64-STATIC: movq _dptr(%rip), %rax 5708 ; DARWIN-64-STATIC-NEXT: ret 5709 5710 ; DARWIN-64-DYNAMIC: _har05: 5711 ; DARWIN-64-DYNAMIC: movq _dptr(%rip), %rax 5712 ; DARWIN-64-DYNAMIC-NEXT: ret 5713 5714 ; DARWIN-64-PIC: _har05: 5715 ; DARWIN-64-PIC: movq _dptr(%rip), %rax 5716 ; DARWIN-64-PIC-NEXT: ret 5717 } 5718 5719 define i8* @har06() nounwind { 5720 entry: 5721 ret i8* bitcast ([131072 x i32]* @lsrc to i8*) 5722 ; LINUX-64-STATIC: har06: 5723 ; LINUX-64-STATIC: movl $lsrc, %eax 5724 ; LINUX-64-STATIC: ret 5725 5726 ; LINUX-32-STATIC: har06: 5727 ; LINUX-32-STATIC: movl $lsrc, %eax 5728 ; LINUX-32-STATIC-NEXT: ret 5729 5730 ; LINUX-32-PIC: har06: 5731 ; LINUX-32-PIC: movl $lsrc, %eax 5732 ; LINUX-32-PIC-NEXT: ret 5733 5734 ; LINUX-64-PIC: har06: 5735 ; LINUX-64-PIC: leaq lsrc(%rip), %rax 5736 ; LINUX-64-PIC-NEXT: ret 5737 5738 ; DARWIN-32-STATIC: _har06: 5739 ; DARWIN-32-STATIC: movl $_lsrc, %eax 5740 ; DARWIN-32-STATIC-NEXT: ret 5741 5742 ; DARWIN-32-DYNAMIC: _har06: 5743 ; DARWIN-32-DYNAMIC: movl $_lsrc, %eax 5744 ; DARWIN-32-DYNAMIC-NEXT: ret 5745 5746 ; DARWIN-32-PIC: _har06: 5747 ; DARWIN-32-PIC: calll L85$pb 5748 ; DARWIN-32-PIC-NEXT: L85$pb: 5749 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5750 ; DARWIN-32-PIC-NEXT: leal _lsrc-L85$pb([[EAX]]), %eax 5751 ; DARWIN-32-PIC-NEXT: ret 5752 5753 ; DARWIN-64-STATIC: _har06: 5754 ; DARWIN-64-STATIC: leaq _lsrc(%rip), %rax 5755 ; DARWIN-64-STATIC-NEXT: ret 5756 5757 ; DARWIN-64-DYNAMIC: _har06: 5758 ; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), %rax 5759 ; DARWIN-64-DYNAMIC-NEXT: ret 5760 5761 ; DARWIN-64-PIC: _har06: 5762 ; DARWIN-64-PIC: leaq _lsrc(%rip), %rax 5763 ; DARWIN-64-PIC-NEXT: ret 5764 } 5765 5766 define i8* @har07() nounwind { 5767 entry: 5768 ret i8* bitcast ([131072 x i32]* @ldst to i8*) 5769 ; LINUX-64-STATIC: har07: 5770 ; LINUX-64-STATIC: movl $ldst, %eax 5771 ; LINUX-64-STATIC: ret 5772 5773 ; LINUX-32-STATIC: har07: 5774 ; LINUX-32-STATIC: movl $ldst, %eax 5775 ; LINUX-32-STATIC-NEXT: ret 5776 5777 ; LINUX-32-PIC: har07: 5778 ; LINUX-32-PIC: movl $ldst, %eax 5779 ; LINUX-32-PIC-NEXT: ret 5780 5781 ; LINUX-64-PIC: har07: 5782 ; LINUX-64-PIC: leaq ldst(%rip), %rax 5783 ; LINUX-64-PIC-NEXT: ret 5784 5785 ; DARWIN-32-STATIC: _har07: 5786 ; DARWIN-32-STATIC: movl $_ldst, %eax 5787 ; DARWIN-32-STATIC-NEXT: ret 5788 5789 ; DARWIN-32-DYNAMIC: _har07: 5790 ; DARWIN-32-DYNAMIC: movl $_ldst, %eax 5791 ; DARWIN-32-DYNAMIC-NEXT: ret 5792 5793 ; DARWIN-32-PIC: _har07: 5794 ; DARWIN-32-PIC: calll L86$pb 5795 ; DARWIN-32-PIC-NEXT: L86$pb: 5796 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5797 ; DARWIN-32-PIC-NEXT: leal _ldst-L86$pb([[EAX]]), %eax 5798 ; DARWIN-32-PIC-NEXT: ret 5799 5800 ; DARWIN-64-STATIC: _har07: 5801 ; DARWIN-64-STATIC: leaq _ldst(%rip), %rax 5802 ; DARWIN-64-STATIC-NEXT: ret 5803 5804 ; DARWIN-64-DYNAMIC: _har07: 5805 ; DARWIN-64-DYNAMIC: leaq _ldst(%rip), %rax 5806 ; DARWIN-64-DYNAMIC-NEXT: ret 5807 5808 ; DARWIN-64-PIC: _har07: 5809 ; DARWIN-64-PIC: leaq _ldst(%rip), %rax 5810 ; DARWIN-64-PIC-NEXT: ret 5811 } 5812 5813 define i8* @har08() nounwind { 5814 entry: 5815 %0 = load i32** @lptr, align 8 5816 %1 = bitcast i32* %0 to i8* 5817 ret i8* %1 5818 ; LINUX-64-STATIC: har08: 5819 ; LINUX-64-STATIC: movq lptr(%rip), %rax 5820 ; LINUX-64-STATIC: ret 5821 5822 ; LINUX-32-STATIC: har08: 5823 ; LINUX-32-STATIC: movl lptr, %eax 5824 ; LINUX-32-STATIC-NEXT: ret 5825 5826 ; LINUX-32-PIC: har08: 5827 ; LINUX-32-PIC: movl lptr, %eax 5828 ; LINUX-32-PIC-NEXT: ret 5829 5830 ; LINUX-64-PIC: har08: 5831 ; LINUX-64-PIC: movq lptr(%rip), %rax 5832 ; LINUX-64-PIC-NEXT: ret 5833 5834 ; DARWIN-32-STATIC: _har08: 5835 ; DARWIN-32-STATIC: movl _lptr, %eax 5836 ; DARWIN-32-STATIC-NEXT: ret 5837 5838 ; DARWIN-32-DYNAMIC: _har08: 5839 ; DARWIN-32-DYNAMIC: movl _lptr, %eax 5840 ; DARWIN-32-DYNAMIC-NEXT: ret 5841 5842 ; DARWIN-32-PIC: _har08: 5843 ; DARWIN-32-PIC: calll L87$pb 5844 ; DARWIN-32-PIC-NEXT: L87$pb: 5845 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5846 ; DARWIN-32-PIC-NEXT: movl _lptr-L87$pb([[EAX]]), %eax 5847 ; DARWIN-32-PIC-NEXT: ret 5848 5849 ; DARWIN-64-STATIC: _har08: 5850 ; DARWIN-64-STATIC: movq _lptr(%rip), %rax 5851 ; DARWIN-64-STATIC-NEXT: ret 5852 5853 ; DARWIN-64-DYNAMIC: _har08: 5854 ; DARWIN-64-DYNAMIC: movq _lptr(%rip), %rax 5855 ; DARWIN-64-DYNAMIC-NEXT: ret 5856 5857 ; DARWIN-64-PIC: _har08: 5858 ; DARWIN-64-PIC: movq _lptr(%rip), %rax 5859 ; DARWIN-64-PIC-NEXT: ret 5860 } 5861 5862 define i8* @bat00() nounwind { 5863 entry: 5864 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16) to i8*) 5865 ; LINUX-64-STATIC: bat00: 5866 ; LINUX-64-STATIC: movl $src+64, %eax 5867 ; LINUX-64-STATIC: ret 5868 5869 ; LINUX-32-STATIC: bat00: 5870 ; LINUX-32-STATIC: movl $src+64, %eax 5871 ; LINUX-32-STATIC-NEXT: ret 5872 5873 ; LINUX-32-PIC: bat00: 5874 ; LINUX-32-PIC: movl $src+64, %eax 5875 ; LINUX-32-PIC-NEXT: ret 5876 5877 ; LINUX-64-PIC: bat00: 5878 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), %rax 5879 ; LINUX-64-PIC-NEXT: addq $64, %rax 5880 ; LINUX-64-PIC-NEXT: ret 5881 5882 ; DARWIN-32-STATIC: _bat00: 5883 ; DARWIN-32-STATIC: movl $_src+64, %eax 5884 ; DARWIN-32-STATIC-NEXT: ret 5885 5886 ; DARWIN-32-DYNAMIC: _bat00: 5887 ; DARWIN-32-DYNAMIC: movl L_src$non_lazy_ptr, %eax 5888 ; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax 5889 ; DARWIN-32-DYNAMIC-NEXT: ret 5890 5891 ; DARWIN-32-PIC: _bat00: 5892 ; DARWIN-32-PIC: calll L88$pb 5893 ; DARWIN-32-PIC-NEXT: L88$pb: 5894 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5895 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L88$pb([[EAX]]), %eax 5896 ; DARWIN-32-PIC-NEXT: addl $64, %eax 5897 ; DARWIN-32-PIC-NEXT: ret 5898 5899 ; DARWIN-64-STATIC: _bat00: 5900 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), %rax 5901 ; DARWIN-64-STATIC-NEXT: addq $64, %rax 5902 ; DARWIN-64-STATIC-NEXT: ret 5903 5904 ; DARWIN-64-DYNAMIC: _bat00: 5905 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), %rax 5906 ; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax 5907 ; DARWIN-64-DYNAMIC-NEXT: ret 5908 5909 ; DARWIN-64-PIC: _bat00: 5910 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), %rax 5911 ; DARWIN-64-PIC-NEXT: addq $64, %rax 5912 ; DARWIN-64-PIC-NEXT: ret 5913 } 5914 5915 define i8* @bxt00() nounwind { 5916 entry: 5917 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16) to i8*) 5918 ; LINUX-64-STATIC: bxt00: 5919 ; LINUX-64-STATIC: movl $xsrc+64, %eax 5920 ; LINUX-64-STATIC: ret 5921 5922 ; LINUX-32-STATIC: bxt00: 5923 ; LINUX-32-STATIC: movl $xsrc+64, %eax 5924 ; LINUX-32-STATIC-NEXT: ret 5925 5926 ; LINUX-32-PIC: bxt00: 5927 ; LINUX-32-PIC: movl $xsrc+64, %eax 5928 ; LINUX-32-PIC-NEXT: ret 5929 5930 ; LINUX-64-PIC: bxt00: 5931 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), %rax 5932 ; LINUX-64-PIC-NEXT: addq $64, %rax 5933 ; LINUX-64-PIC-NEXT: ret 5934 5935 ; DARWIN-32-STATIC: _bxt00: 5936 ; DARWIN-32-STATIC: movl $_xsrc+64, %eax 5937 ; DARWIN-32-STATIC-NEXT: ret 5938 5939 ; DARWIN-32-DYNAMIC: _bxt00: 5940 ; DARWIN-32-DYNAMIC: movl L_xsrc$non_lazy_ptr, %eax 5941 ; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax 5942 ; DARWIN-32-DYNAMIC-NEXT: ret 5943 5944 ; DARWIN-32-PIC: _bxt00: 5945 ; DARWIN-32-PIC: calll L89$pb 5946 ; DARWIN-32-PIC-NEXT: L89$pb: 5947 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 5948 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L89$pb([[EAX]]), %eax 5949 ; DARWIN-32-PIC-NEXT: addl $64, %eax 5950 ; DARWIN-32-PIC-NEXT: ret 5951 5952 ; DARWIN-64-STATIC: _bxt00: 5953 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), %rax 5954 ; DARWIN-64-STATIC-NEXT: addq $64, %rax 5955 ; DARWIN-64-STATIC-NEXT: ret 5956 5957 ; DARWIN-64-DYNAMIC: _bxt00: 5958 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), %rax 5959 ; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax 5960 ; DARWIN-64-DYNAMIC-NEXT: ret 5961 5962 ; DARWIN-64-PIC: _bxt00: 5963 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), %rax 5964 ; DARWIN-64-PIC-NEXT: addq $64, %rax 5965 ; DARWIN-64-PIC-NEXT: ret 5966 } 5967 5968 define i8* @bat01() nounwind { 5969 entry: 5970 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16) to i8*) 5971 ; LINUX-64-STATIC: bat01: 5972 ; LINUX-64-STATIC: movl $dst+64, %eax 5973 ; LINUX-64-STATIC: ret 5974 5975 ; LINUX-32-STATIC: bat01: 5976 ; LINUX-32-STATIC: movl $dst+64, %eax 5977 ; LINUX-32-STATIC-NEXT: ret 5978 5979 ; LINUX-32-PIC: bat01: 5980 ; LINUX-32-PIC: movl $dst+64, %eax 5981 ; LINUX-32-PIC-NEXT: ret 5982 5983 ; LINUX-64-PIC: bat01: 5984 ; LINUX-64-PIC: movq dst@GOTPCREL(%rip), %rax 5985 ; LINUX-64-PIC-NEXT: addq $64, %rax 5986 ; LINUX-64-PIC-NEXT: ret 5987 5988 ; DARWIN-32-STATIC: _bat01: 5989 ; DARWIN-32-STATIC: movl $_dst+64, %eax 5990 ; DARWIN-32-STATIC-NEXT: ret 5991 5992 ; DARWIN-32-DYNAMIC: _bat01: 5993 ; DARWIN-32-DYNAMIC: movl L_dst$non_lazy_ptr, %eax 5994 ; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax 5995 ; DARWIN-32-DYNAMIC-NEXT: ret 5996 5997 ; DARWIN-32-PIC: _bat01: 5998 ; DARWIN-32-PIC: calll L90$pb 5999 ; DARWIN-32-PIC-NEXT: L90$pb: 6000 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6001 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L90$pb([[EAX]]), %eax 6002 ; DARWIN-32-PIC-NEXT: addl $64, %eax 6003 ; DARWIN-32-PIC-NEXT: ret 6004 6005 ; DARWIN-64-STATIC: _bat01: 6006 ; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), %rax 6007 ; DARWIN-64-STATIC-NEXT: addq $64, %rax 6008 ; DARWIN-64-STATIC-NEXT: ret 6009 6010 ; DARWIN-64-DYNAMIC: _bat01: 6011 ; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), %rax 6012 ; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax 6013 ; DARWIN-64-DYNAMIC-NEXT: ret 6014 6015 ; DARWIN-64-PIC: _bat01: 6016 ; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), %rax 6017 ; DARWIN-64-PIC-NEXT: addq $64, %rax 6018 ; DARWIN-64-PIC-NEXT: ret 6019 } 6020 6021 define i8* @bxt01() nounwind { 6022 entry: 6023 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16) to i8*) 6024 ; LINUX-64-STATIC: bxt01: 6025 ; LINUX-64-STATIC: movl $xdst+64, %eax 6026 ; LINUX-64-STATIC: ret 6027 6028 ; LINUX-32-STATIC: bxt01: 6029 ; LINUX-32-STATIC: movl $xdst+64, %eax 6030 ; LINUX-32-STATIC-NEXT: ret 6031 6032 ; LINUX-32-PIC: bxt01: 6033 ; LINUX-32-PIC: movl $xdst+64, %eax 6034 ; LINUX-32-PIC-NEXT: ret 6035 6036 ; LINUX-64-PIC: bxt01: 6037 ; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), %rax 6038 ; LINUX-64-PIC-NEXT: addq $64, %rax 6039 ; LINUX-64-PIC-NEXT: ret 6040 6041 ; DARWIN-32-STATIC: _bxt01: 6042 ; DARWIN-32-STATIC: movl $_xdst+64, %eax 6043 ; DARWIN-32-STATIC-NEXT: ret 6044 6045 ; DARWIN-32-DYNAMIC: _bxt01: 6046 ; DARWIN-32-DYNAMIC: movl L_xdst$non_lazy_ptr, %eax 6047 ; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax 6048 ; DARWIN-32-DYNAMIC-NEXT: ret 6049 6050 ; DARWIN-32-PIC: _bxt01: 6051 ; DARWIN-32-PIC: calll L91$pb 6052 ; DARWIN-32-PIC-NEXT: L91$pb: 6053 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6054 ; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L91$pb([[EAX]]), %eax 6055 ; DARWIN-32-PIC-NEXT: addl $64, %eax 6056 ; DARWIN-32-PIC-NEXT: ret 6057 6058 ; DARWIN-64-STATIC: _bxt01: 6059 ; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), %rax 6060 ; DARWIN-64-STATIC-NEXT: addq $64, %rax 6061 ; DARWIN-64-STATIC-NEXT: ret 6062 6063 ; DARWIN-64-DYNAMIC: _bxt01: 6064 ; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), %rax 6065 ; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax 6066 ; DARWIN-64-DYNAMIC-NEXT: ret 6067 6068 ; DARWIN-64-PIC: _bxt01: 6069 ; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), %rax 6070 ; DARWIN-64-PIC-NEXT: addq $64, %rax 6071 ; DARWIN-64-PIC-NEXT: ret 6072 } 6073 6074 define i8* @bat02() nounwind { 6075 entry: 6076 %0 = load i32** @ptr, align 8 6077 %1 = getelementptr i32* %0, i64 16 6078 %2 = bitcast i32* %1 to i8* 6079 ret i8* %2 6080 ; LINUX-64-STATIC: bat02: 6081 ; LINUX-64-STATIC: movq ptr(%rip), %rax 6082 ; LINUX-64-STATIC: addq $64, %rax 6083 ; LINUX-64-STATIC: ret 6084 6085 ; LINUX-32-STATIC: bat02: 6086 ; LINUX-32-STATIC: movl ptr, %eax 6087 ; LINUX-32-STATIC-NEXT: addl $64, %eax 6088 ; LINUX-32-STATIC-NEXT: ret 6089 6090 ; LINUX-32-PIC: bat02: 6091 ; LINUX-32-PIC: movl ptr, %eax 6092 ; LINUX-32-PIC-NEXT: addl $64, %eax 6093 ; LINUX-32-PIC-NEXT: ret 6094 6095 ; LINUX-64-PIC: bat02: 6096 ; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]] 6097 ; LINUX-64-PIC-NEXT: movq ([[RAX]]), %rax 6098 ; LINUX-64-PIC-NEXT: addq $64, %rax 6099 ; LINUX-64-PIC-NEXT: ret 6100 6101 ; DARWIN-32-STATIC: _bat02: 6102 ; DARWIN-32-STATIC: movl _ptr, %eax 6103 ; DARWIN-32-STATIC-NEXT: addl $64, %eax 6104 ; DARWIN-32-STATIC-NEXT: ret 6105 6106 ; DARWIN-32-DYNAMIC: _bat02: 6107 ; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[EAX:%e.x]] 6108 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 6109 ; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax 6110 ; DARWIN-32-DYNAMIC-NEXT: ret 6111 6112 ; DARWIN-32-PIC: _bat02: 6113 ; DARWIN-32-PIC: calll L92$pb 6114 ; DARWIN-32-PIC-NEXT: L92$pb: 6115 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6116 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L92$pb([[EAX]]), [[EAX:%e.x]] 6117 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), %eax 6118 ; DARWIN-32-PIC-NEXT: addl $64, %eax 6119 ; DARWIN-32-PIC-NEXT: ret 6120 6121 ; DARWIN-64-STATIC: _bat02: 6122 ; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 6123 ; DARWIN-64-STATIC-NEXT: movq ([[RAX]]), %rax 6124 ; DARWIN-64-STATIC-NEXT: addq $64, %rax 6125 ; DARWIN-64-STATIC-NEXT: ret 6126 6127 ; DARWIN-64-DYNAMIC: _bat02: 6128 ; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 6129 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]] 6130 ; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax 6131 ; DARWIN-64-DYNAMIC-NEXT: ret 6132 6133 ; DARWIN-64-PIC: _bat02: 6134 ; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 6135 ; DARWIN-64-PIC-NEXT: movq ([[RAX]]), %rax 6136 ; DARWIN-64-PIC-NEXT: addq $64, %rax 6137 ; DARWIN-64-PIC-NEXT: ret 6138 } 6139 6140 define i8* @bat03() nounwind { 6141 entry: 6142 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16) to i8*) 6143 ; LINUX-64-STATIC: bat03: 6144 ; LINUX-64-STATIC: movl $dsrc+64, %eax 6145 ; LINUX-64-STATIC: ret 6146 6147 ; LINUX-32-STATIC: bat03: 6148 ; LINUX-32-STATIC: movl $dsrc+64, %eax 6149 ; LINUX-32-STATIC-NEXT: ret 6150 6151 ; LINUX-32-PIC: bat03: 6152 ; LINUX-32-PIC: movl $dsrc+64, %eax 6153 ; LINUX-32-PIC-NEXT: ret 6154 6155 ; LINUX-64-PIC: bat03: 6156 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), %rax 6157 ; LINUX-64-PIC-NEXT: addq $64, %rax 6158 ; LINUX-64-PIC-NEXT: ret 6159 6160 ; DARWIN-32-STATIC: _bat03: 6161 ; DARWIN-32-STATIC: movl $_dsrc+64, %eax 6162 ; DARWIN-32-STATIC-NEXT: ret 6163 6164 ; DARWIN-32-DYNAMIC: _bat03: 6165 ; DARWIN-32-DYNAMIC: movl $_dsrc+64, %eax 6166 ; DARWIN-32-DYNAMIC-NEXT: ret 6167 6168 ; DARWIN-32-PIC: _bat03: 6169 ; DARWIN-32-PIC: calll L93$pb 6170 ; DARWIN-32-PIC-NEXT: L93$pb: 6171 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6172 ; DARWIN-32-PIC-NEXT: leal (_dsrc-L93$pb)+64([[EAX]]), %eax 6173 ; DARWIN-32-PIC-NEXT: ret 6174 6175 ; DARWIN-64-STATIC: _bat03: 6176 ; DARWIN-64-STATIC: leaq _dsrc+64(%rip), %rax 6177 ; DARWIN-64-STATIC-NEXT: ret 6178 6179 ; DARWIN-64-DYNAMIC: _bat03: 6180 ; DARWIN-64-DYNAMIC: leaq _dsrc+64(%rip), %rax 6181 ; DARWIN-64-DYNAMIC-NEXT: ret 6182 6183 ; DARWIN-64-PIC: _bat03: 6184 ; DARWIN-64-PIC: leaq _dsrc+64(%rip), %rax 6185 ; DARWIN-64-PIC-NEXT: ret 6186 } 6187 6188 define i8* @bat04() nounwind { 6189 entry: 6190 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16) to i8*) 6191 ; LINUX-64-STATIC: bat04: 6192 ; LINUX-64-STATIC: movl $ddst+64, %eax 6193 ; LINUX-64-STATIC: ret 6194 6195 ; LINUX-32-STATIC: bat04: 6196 ; LINUX-32-STATIC: movl $ddst+64, %eax 6197 ; LINUX-32-STATIC-NEXT: ret 6198 6199 ; LINUX-32-PIC: bat04: 6200 ; LINUX-32-PIC: movl $ddst+64, %eax 6201 ; LINUX-32-PIC-NEXT: ret 6202 6203 ; LINUX-64-PIC: bat04: 6204 ; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), %rax 6205 ; LINUX-64-PIC-NEXT: addq $64, %rax 6206 ; LINUX-64-PIC-NEXT: ret 6207 6208 ; DARWIN-32-STATIC: _bat04: 6209 ; DARWIN-32-STATIC: movl $_ddst+64, %eax 6210 ; DARWIN-32-STATIC-NEXT: ret 6211 6212 ; DARWIN-32-DYNAMIC: _bat04: 6213 ; DARWIN-32-DYNAMIC: movl $_ddst+64, %eax 6214 ; DARWIN-32-DYNAMIC-NEXT: ret 6215 6216 ; DARWIN-32-PIC: _bat04: 6217 ; DARWIN-32-PIC: calll L94$pb 6218 ; DARWIN-32-PIC-NEXT: L94$pb: 6219 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6220 ; DARWIN-32-PIC-NEXT: leal (_ddst-L94$pb)+64([[EAX]]), %eax 6221 ; DARWIN-32-PIC-NEXT: ret 6222 6223 ; DARWIN-64-STATIC: _bat04: 6224 ; DARWIN-64-STATIC: leaq _ddst+64(%rip), %rax 6225 ; DARWIN-64-STATIC-NEXT: ret 6226 6227 ; DARWIN-64-DYNAMIC: _bat04: 6228 ; DARWIN-64-DYNAMIC: leaq _ddst+64(%rip), %rax 6229 ; DARWIN-64-DYNAMIC-NEXT: ret 6230 6231 ; DARWIN-64-PIC: _bat04: 6232 ; DARWIN-64-PIC: leaq _ddst+64(%rip), %rax 6233 ; DARWIN-64-PIC-NEXT: ret 6234 } 6235 6236 define i8* @bat05() nounwind { 6237 entry: 6238 %0 = load i32** @dptr, align 8 6239 %1 = getelementptr i32* %0, i64 16 6240 %2 = bitcast i32* %1 to i8* 6241 ret i8* %2 6242 ; LINUX-64-STATIC: bat05: 6243 ; LINUX-64-STATIC: movq dptr(%rip), %rax 6244 ; LINUX-64-STATIC: addq $64, %rax 6245 ; LINUX-64-STATIC: ret 6246 6247 ; LINUX-32-STATIC: bat05: 6248 ; LINUX-32-STATIC: movl dptr, %eax 6249 ; LINUX-32-STATIC-NEXT: addl $64, %eax 6250 ; LINUX-32-STATIC-NEXT: ret 6251 6252 ; LINUX-32-PIC: bat05: 6253 ; LINUX-32-PIC: movl dptr, %eax 6254 ; LINUX-32-PIC-NEXT: addl $64, %eax 6255 ; LINUX-32-PIC-NEXT: ret 6256 6257 ; LINUX-64-PIC: bat05: 6258 ; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]] 6259 ; LINUX-64-PIC-NEXT: movq ([[RAX]]), %rax 6260 ; LINUX-64-PIC-NEXT: addq $64, %rax 6261 ; LINUX-64-PIC-NEXT: ret 6262 6263 ; DARWIN-32-STATIC: _bat05: 6264 ; DARWIN-32-STATIC: movl _dptr, %eax 6265 ; DARWIN-32-STATIC-NEXT: addl $64, %eax 6266 ; DARWIN-32-STATIC-NEXT: ret 6267 6268 ; DARWIN-32-DYNAMIC: _bat05: 6269 ; DARWIN-32-DYNAMIC: movl _dptr, %eax 6270 ; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax 6271 ; DARWIN-32-DYNAMIC-NEXT: ret 6272 6273 ; DARWIN-32-PIC: _bat05: 6274 ; DARWIN-32-PIC: calll L95$pb 6275 ; DARWIN-32-PIC-NEXT: L95$pb: 6276 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6277 ; DARWIN-32-PIC-NEXT: movl _dptr-L95$pb([[EAX]]), %eax 6278 ; DARWIN-32-PIC-NEXT: addl $64, %eax 6279 ; DARWIN-32-PIC-NEXT: ret 6280 6281 ; DARWIN-64-STATIC: _bat05: 6282 ; DARWIN-64-STATIC: movq _dptr(%rip), %rax 6283 ; DARWIN-64-STATIC-NEXT: addq $64, %rax 6284 ; DARWIN-64-STATIC-NEXT: ret 6285 6286 ; DARWIN-64-DYNAMIC: _bat05: 6287 ; DARWIN-64-DYNAMIC: movq _dptr(%rip), %rax 6288 ; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax 6289 ; DARWIN-64-DYNAMIC-NEXT: ret 6290 6291 ; DARWIN-64-PIC: _bat05: 6292 ; DARWIN-64-PIC: movq _dptr(%rip), %rax 6293 ; DARWIN-64-PIC-NEXT: addq $64, %rax 6294 ; DARWIN-64-PIC-NEXT: ret 6295 } 6296 6297 define i8* @bat06() nounwind { 6298 entry: 6299 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16) to i8*) 6300 ; LINUX-64-STATIC: bat06: 6301 ; LINUX-64-STATIC: movl $lsrc+64, %eax 6302 ; LINUX-64-STATIC: ret 6303 6304 ; LINUX-32-STATIC: bat06: 6305 ; LINUX-32-STATIC: movl $lsrc+64, %eax 6306 ; LINUX-32-STATIC-NEXT: ret 6307 6308 ; LINUX-32-PIC: bat06: 6309 ; LINUX-32-PIC: movl $lsrc+64, %eax 6310 ; LINUX-32-PIC-NEXT: ret 6311 6312 ; LINUX-64-PIC: bat06: 6313 ; LINUX-64-PIC: leaq lsrc+64(%rip), %rax 6314 ; LINUX-64-PIC-NEXT: ret 6315 6316 ; DARWIN-32-STATIC: _bat06: 6317 ; DARWIN-32-STATIC: movl $_lsrc+64, %eax 6318 ; DARWIN-32-STATIC-NEXT: ret 6319 6320 ; DARWIN-32-DYNAMIC: _bat06: 6321 ; DARWIN-32-DYNAMIC: movl $_lsrc+64, %eax 6322 ; DARWIN-32-DYNAMIC-NEXT: ret 6323 6324 ; DARWIN-32-PIC: _bat06: 6325 ; DARWIN-32-PIC: calll L96$pb 6326 ; DARWIN-32-PIC-NEXT: L96$pb: 6327 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6328 ; DARWIN-32-PIC-NEXT: leal (_lsrc-L96$pb)+64([[EAX]]), %eax 6329 ; DARWIN-32-PIC-NEXT: ret 6330 6331 ; DARWIN-64-STATIC: _bat06: 6332 ; DARWIN-64-STATIC: leaq _lsrc+64(%rip), %rax 6333 ; DARWIN-64-STATIC-NEXT: ret 6334 6335 ; DARWIN-64-DYNAMIC: _bat06: 6336 ; DARWIN-64-DYNAMIC: leaq _lsrc+64(%rip), %rax 6337 ; DARWIN-64-DYNAMIC-NEXT: ret 6338 6339 ; DARWIN-64-PIC: _bat06: 6340 ; DARWIN-64-PIC: leaq _lsrc+64(%rip), %rax 6341 ; DARWIN-64-PIC-NEXT: ret 6342 } 6343 6344 define i8* @bat07() nounwind { 6345 entry: 6346 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16) to i8*) 6347 ; LINUX-64-STATIC: bat07: 6348 ; LINUX-64-STATIC: movl $ldst+64, %eax 6349 ; LINUX-64-STATIC: ret 6350 6351 ; LINUX-32-STATIC: bat07: 6352 ; LINUX-32-STATIC: movl $ldst+64, %eax 6353 ; LINUX-32-STATIC-NEXT: ret 6354 6355 ; LINUX-32-PIC: bat07: 6356 ; LINUX-32-PIC: movl $ldst+64, %eax 6357 ; LINUX-32-PIC-NEXT: ret 6358 6359 ; LINUX-64-PIC: bat07: 6360 ; LINUX-64-PIC: leaq ldst+64(%rip), %rax 6361 ; LINUX-64-PIC-NEXT: ret 6362 6363 ; DARWIN-32-STATIC: _bat07: 6364 ; DARWIN-32-STATIC: movl $_ldst+64, %eax 6365 ; DARWIN-32-STATIC-NEXT: ret 6366 6367 ; DARWIN-32-DYNAMIC: _bat07: 6368 ; DARWIN-32-DYNAMIC: movl $_ldst+64, %eax 6369 ; DARWIN-32-DYNAMIC-NEXT: ret 6370 6371 ; DARWIN-32-PIC: _bat07: 6372 ; DARWIN-32-PIC: calll L97$pb 6373 ; DARWIN-32-PIC-NEXT: L97$pb: 6374 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6375 ; DARWIN-32-PIC-NEXT: leal (_ldst-L97$pb)+64([[EAX]]), %eax 6376 ; DARWIN-32-PIC-NEXT: ret 6377 6378 ; DARWIN-64-STATIC: _bat07: 6379 ; DARWIN-64-STATIC: leaq _ldst+64(%rip), %rax 6380 ; DARWIN-64-STATIC-NEXT: ret 6381 6382 ; DARWIN-64-DYNAMIC: _bat07: 6383 ; DARWIN-64-DYNAMIC: leaq _ldst+64(%rip), %rax 6384 ; DARWIN-64-DYNAMIC-NEXT: ret 6385 6386 ; DARWIN-64-PIC: _bat07: 6387 ; DARWIN-64-PIC: leaq _ldst+64(%rip), %rax 6388 ; DARWIN-64-PIC-NEXT: ret 6389 } 6390 6391 define i8* @bat08() nounwind { 6392 entry: 6393 %0 = load i32** @lptr, align 8 6394 %1 = getelementptr i32* %0, i64 16 6395 %2 = bitcast i32* %1 to i8* 6396 ret i8* %2 6397 ; LINUX-64-STATIC: bat08: 6398 ; LINUX-64-STATIC: movq lptr(%rip), %rax 6399 ; LINUX-64-STATIC: addq $64, %rax 6400 ; LINUX-64-STATIC: ret 6401 6402 ; LINUX-32-STATIC: bat08: 6403 ; LINUX-32-STATIC: movl lptr, %eax 6404 ; LINUX-32-STATIC-NEXT: addl $64, %eax 6405 ; LINUX-32-STATIC-NEXT: ret 6406 6407 ; LINUX-32-PIC: bat08: 6408 ; LINUX-32-PIC: movl lptr, %eax 6409 ; LINUX-32-PIC-NEXT: addl $64, %eax 6410 ; LINUX-32-PIC-NEXT: ret 6411 6412 ; LINUX-64-PIC: bat08: 6413 ; LINUX-64-PIC: movq lptr(%rip), %rax 6414 ; LINUX-64-PIC-NEXT: addq $64, %rax 6415 ; LINUX-64-PIC-NEXT: ret 6416 6417 ; DARWIN-32-STATIC: _bat08: 6418 ; DARWIN-32-STATIC: movl _lptr, %eax 6419 ; DARWIN-32-STATIC-NEXT: addl $64, %eax 6420 ; DARWIN-32-STATIC-NEXT: ret 6421 6422 ; DARWIN-32-DYNAMIC: _bat08: 6423 ; DARWIN-32-DYNAMIC: movl _lptr, %eax 6424 ; DARWIN-32-DYNAMIC-NEXT: addl $64, %eax 6425 ; DARWIN-32-DYNAMIC-NEXT: ret 6426 6427 ; DARWIN-32-PIC: _bat08: 6428 ; DARWIN-32-PIC: calll L98$pb 6429 ; DARWIN-32-PIC-NEXT: L98$pb: 6430 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6431 ; DARWIN-32-PIC-NEXT: movl _lptr-L98$pb([[EAX]]), %eax 6432 ; DARWIN-32-PIC-NEXT: addl $64, %eax 6433 ; DARWIN-32-PIC-NEXT: ret 6434 6435 ; DARWIN-64-STATIC: _bat08: 6436 ; DARWIN-64-STATIC: movq _lptr(%rip), %rax 6437 ; DARWIN-64-STATIC-NEXT: addq $64, %rax 6438 ; DARWIN-64-STATIC-NEXT: ret 6439 6440 ; DARWIN-64-DYNAMIC: _bat08: 6441 ; DARWIN-64-DYNAMIC: movq _lptr(%rip), %rax 6442 ; DARWIN-64-DYNAMIC-NEXT: addq $64, %rax 6443 ; DARWIN-64-DYNAMIC-NEXT: ret 6444 6445 ; DARWIN-64-PIC: _bat08: 6446 ; DARWIN-64-PIC: movq _lptr(%rip), %rax 6447 ; DARWIN-64-PIC-NEXT: addq $64, %rax 6448 ; DARWIN-64-PIC-NEXT: ret 6449 } 6450 6451 define i8* @bam00() nounwind { 6452 entry: 6453 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536) to i8*) 6454 ; LINUX-64-STATIC: bam00: 6455 ; LINUX-64-STATIC: movl $src+262144, %eax 6456 ; LINUX-64-STATIC: ret 6457 6458 ; LINUX-32-STATIC: bam00: 6459 ; LINUX-32-STATIC: movl $src+262144, %eax 6460 ; LINUX-32-STATIC-NEXT: ret 6461 6462 ; LINUX-32-PIC: bam00: 6463 ; LINUX-32-PIC: movl $src+262144, %eax 6464 ; LINUX-32-PIC-NEXT: ret 6465 6466 ; LINUX-64-PIC: bam00: 6467 ; LINUX-64-PIC: movl $262144, %eax 6468 ; LINUX-64-PIC-NEXT: addq src@GOTPCREL(%rip), %rax 6469 ; LINUX-64-PIC-NEXT: ret 6470 6471 ; DARWIN-32-STATIC: _bam00: 6472 ; DARWIN-32-STATIC: movl $_src+262144, %eax 6473 ; DARWIN-32-STATIC-NEXT: ret 6474 6475 ; DARWIN-32-DYNAMIC: _bam00: 6476 ; DARWIN-32-DYNAMIC: movl $262144, %eax 6477 ; DARWIN-32-DYNAMIC-NEXT: addl L_src$non_lazy_ptr, %eax 6478 ; DARWIN-32-DYNAMIC-NEXT: ret 6479 6480 ; DARWIN-32-PIC: _bam00: 6481 ; DARWIN-32-PIC: calll L99$pb 6482 ; DARWIN-32-PIC-NEXT: L99$pb: 6483 ; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]] 6484 ; DARWIN-32-PIC-NEXT: movl $262144, %eax 6485 ; DARWIN-32-PIC-NEXT: addl L_src$non_lazy_ptr-L99$pb([[ECX]]), %eax 6486 ; DARWIN-32-PIC-NEXT: ret 6487 6488 ; DARWIN-64-STATIC: _bam00: 6489 ; DARWIN-64-STATIC: movl $262144, %eax 6490 ; DARWIN-64-STATIC-NEXT: addq _src@GOTPCREL(%rip), %rax 6491 ; DARWIN-64-STATIC-NEXT: ret 6492 6493 ; DARWIN-64-DYNAMIC: _bam00: 6494 ; DARWIN-64-DYNAMIC: movl $262144, %eax 6495 ; DARWIN-64-DYNAMIC-NEXT: addq _src@GOTPCREL(%rip), %rax 6496 ; DARWIN-64-DYNAMIC-NEXT: ret 6497 6498 ; DARWIN-64-PIC: _bam00: 6499 ; DARWIN-64-PIC: movl $262144, %eax 6500 ; DARWIN-64-PIC-NEXT: addq _src@GOTPCREL(%rip), %rax 6501 ; DARWIN-64-PIC-NEXT: ret 6502 } 6503 6504 define i8* @bam01() nounwind { 6505 entry: 6506 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536) to i8*) 6507 ; LINUX-64-STATIC: bam01: 6508 ; LINUX-64-STATIC: movl $dst+262144, %eax 6509 ; LINUX-64-STATIC: ret 6510 6511 ; LINUX-32-STATIC: bam01: 6512 ; LINUX-32-STATIC: movl $dst+262144, %eax 6513 ; LINUX-32-STATIC-NEXT: ret 6514 6515 ; LINUX-32-PIC: bam01: 6516 ; LINUX-32-PIC: movl $dst+262144, %eax 6517 ; LINUX-32-PIC-NEXT: ret 6518 6519 ; LINUX-64-PIC: bam01: 6520 ; LINUX-64-PIC: movl $262144, %eax 6521 ; LINUX-64-PIC-NEXT: addq dst@GOTPCREL(%rip), %rax 6522 ; LINUX-64-PIC-NEXT: ret 6523 6524 ; DARWIN-32-STATIC: _bam01: 6525 ; DARWIN-32-STATIC: movl $_dst+262144, %eax 6526 ; DARWIN-32-STATIC-NEXT: ret 6527 6528 ; DARWIN-32-DYNAMIC: _bam01: 6529 ; DARWIN-32-DYNAMIC: movl $262144, %eax 6530 ; DARWIN-32-DYNAMIC-NEXT: addl L_dst$non_lazy_ptr, %eax 6531 ; DARWIN-32-DYNAMIC-NEXT: ret 6532 6533 ; DARWIN-32-PIC: _bam01: 6534 ; DARWIN-32-PIC: calll L100$pb 6535 ; DARWIN-32-PIC-NEXT: L100$pb: 6536 ; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]] 6537 ; DARWIN-32-PIC-NEXT: movl $262144, %eax 6538 ; DARWIN-32-PIC-NEXT: addl L_dst$non_lazy_ptr-L100$pb([[ECX]]), %eax 6539 ; DARWIN-32-PIC-NEXT: ret 6540 6541 ; DARWIN-64-STATIC: _bam01: 6542 ; DARWIN-64-STATIC: movl $262144, %eax 6543 ; DARWIN-64-STATIC-NEXT: addq _dst@GOTPCREL(%rip), %rax 6544 ; DARWIN-64-STATIC-NEXT: ret 6545 6546 ; DARWIN-64-DYNAMIC: _bam01: 6547 ; DARWIN-64-DYNAMIC: movl $262144, %eax 6548 ; DARWIN-64-DYNAMIC-NEXT: addq _dst@GOTPCREL(%rip), %rax 6549 ; DARWIN-64-DYNAMIC-NEXT: ret 6550 6551 ; DARWIN-64-PIC: _bam01: 6552 ; DARWIN-64-PIC: movl $262144, %eax 6553 ; DARWIN-64-PIC-NEXT: addq _dst@GOTPCREL(%rip), %rax 6554 ; DARWIN-64-PIC-NEXT: ret 6555 } 6556 6557 define i8* @bxm01() nounwind { 6558 entry: 6559 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 65536) to i8*) 6560 ; LINUX-64-STATIC: bxm01: 6561 ; LINUX-64-STATIC: movl $xdst+262144, %eax 6562 ; LINUX-64-STATIC: ret 6563 6564 ; LINUX-32-STATIC: bxm01: 6565 ; LINUX-32-STATIC: movl $xdst+262144, %eax 6566 ; LINUX-32-STATIC-NEXT: ret 6567 6568 ; LINUX-32-PIC: bxm01: 6569 ; LINUX-32-PIC: movl $xdst+262144, %eax 6570 ; LINUX-32-PIC-NEXT: ret 6571 6572 ; LINUX-64-PIC: bxm01: 6573 ; LINUX-64-PIC: movl $262144, %eax 6574 ; LINUX-64-PIC-NEXT: addq xdst@GOTPCREL(%rip), %rax 6575 ; LINUX-64-PIC-NEXT: ret 6576 6577 ; DARWIN-32-STATIC: _bxm01: 6578 ; DARWIN-32-STATIC: movl $_xdst+262144, %eax 6579 ; DARWIN-32-STATIC-NEXT: ret 6580 6581 ; DARWIN-32-DYNAMIC: _bxm01: 6582 ; DARWIN-32-DYNAMIC: movl $262144, %eax 6583 ; DARWIN-32-DYNAMIC-NEXT: addl L_xdst$non_lazy_ptr, %eax 6584 ; DARWIN-32-DYNAMIC-NEXT: ret 6585 6586 ; DARWIN-32-PIC: _bxm01: 6587 ; DARWIN-32-PIC: calll L101$pb 6588 ; DARWIN-32-PIC-NEXT: L101$pb: 6589 ; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]] 6590 ; DARWIN-32-PIC-NEXT: movl $262144, %eax 6591 ; DARWIN-32-PIC-NEXT: addl L_xdst$non_lazy_ptr-L101$pb([[ECX]]), %eax 6592 ; DARWIN-32-PIC-NEXT: ret 6593 6594 ; DARWIN-64-STATIC: _bxm01: 6595 ; DARWIN-64-STATIC: movl $262144, %eax 6596 ; DARWIN-64-STATIC-NEXT: addq _xdst@GOTPCREL(%rip), %rax 6597 ; DARWIN-64-STATIC-NEXT: ret 6598 6599 ; DARWIN-64-DYNAMIC: _bxm01: 6600 ; DARWIN-64-DYNAMIC: movl $262144, %eax 6601 ; DARWIN-64-DYNAMIC-NEXT: addq _xdst@GOTPCREL(%rip), %rax 6602 ; DARWIN-64-DYNAMIC-NEXT: ret 6603 6604 ; DARWIN-64-PIC: _bxm01: 6605 ; DARWIN-64-PIC: movl $262144, %eax 6606 ; DARWIN-64-PIC-NEXT: addq _xdst@GOTPCREL(%rip), %rax 6607 ; DARWIN-64-PIC-NEXT: ret 6608 } 6609 6610 define i8* @bam02() nounwind { 6611 entry: 6612 %0 = load i32** @ptr, align 8 6613 %1 = getelementptr i32* %0, i64 65536 6614 %2 = bitcast i32* %1 to i8* 6615 ret i8* %2 6616 ; LINUX-64-STATIC: bam02: 6617 ; LINUX-64-STATIC: movl $262144, %eax 6618 ; LINUX-64-STATIC: addq ptr(%rip), %rax 6619 ; LINUX-64-STATIC: ret 6620 6621 ; LINUX-32-STATIC: bam02: 6622 ; LINUX-32-STATIC: movl $262144, %eax 6623 ; LINUX-32-STATIC-NEXT: addl ptr, %eax 6624 ; LINUX-32-STATIC-NEXT: ret 6625 6626 ; LINUX-32-PIC: bam02: 6627 ; LINUX-32-PIC: movl $262144, %eax 6628 ; LINUX-32-PIC-NEXT: addl ptr, %eax 6629 ; LINUX-32-PIC-NEXT: ret 6630 6631 ; LINUX-64-PIC: bam02: 6632 ; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 6633 ; LINUX-64-PIC-NEXT: movl $262144, %eax 6634 ; LINUX-64-PIC-NEXT: addq ([[RCX]]), %rax 6635 ; LINUX-64-PIC-NEXT: ret 6636 6637 ; DARWIN-32-STATIC: _bam02: 6638 ; DARWIN-32-STATIC: movl $262144, %eax 6639 ; DARWIN-32-STATIC-NEXT: addl _ptr, %eax 6640 ; DARWIN-32-STATIC-NEXT: ret 6641 6642 ; DARWIN-32-DYNAMIC: _bam02: 6643 ; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[ECX:%e.x]] 6644 ; DARWIN-32-DYNAMIC-NEXT: movl $262144, %eax 6645 ; DARWIN-32-DYNAMIC-NEXT: addl ([[ECX]]), %eax 6646 ; DARWIN-32-DYNAMIC-NEXT: ret 6647 6648 ; DARWIN-32-PIC: _bam02: 6649 ; DARWIN-32-PIC: calll L102$pb 6650 ; DARWIN-32-PIC-NEXT: L102$pb: 6651 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6652 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L102$pb([[EAX]]), [[ECX:%e.x]] 6653 ; DARWIN-32-PIC-NEXT: movl $262144, %eax 6654 ; DARWIN-32-PIC-NEXT: addl ([[ECX]]), %eax 6655 ; DARWIN-32-PIC-NEXT: ret 6656 6657 ; DARWIN-64-STATIC: _bam02: 6658 ; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 6659 ; DARWIN-64-STATIC-NEXT: movl $262144, %eax 6660 ; DARWIN-64-STATIC-NEXT: addq ([[RCX]]), %rax 6661 ; DARWIN-64-STATIC-NEXT: ret 6662 6663 ; DARWIN-64-DYNAMIC: _bam02: 6664 ; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 6665 ; DARWIN-64-DYNAMIC-NEXT: movl $262144, %eax 6666 ; DARWIN-64-DYNAMIC-NEXT: addq ([[RCX]]), %rax 6667 ; DARWIN-64-DYNAMIC-NEXT: ret 6668 6669 ; DARWIN-64-PIC: _bam02: 6670 ; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 6671 ; DARWIN-64-PIC-NEXT: movl $262144, %eax 6672 ; DARWIN-64-PIC-NEXT: addq ([[RCX]]), %rax 6673 ; DARWIN-64-PIC-NEXT: ret 6674 } 6675 6676 define i8* @bam03() nounwind { 6677 entry: 6678 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536) to i8*) 6679 ; LINUX-64-STATIC: bam03: 6680 ; LINUX-64-STATIC: movl $dsrc+262144, %eax 6681 ; LINUX-64-STATIC: ret 6682 6683 ; LINUX-32-STATIC: bam03: 6684 ; LINUX-32-STATIC: movl $dsrc+262144, %eax 6685 ; LINUX-32-STATIC-NEXT: ret 6686 6687 ; LINUX-32-PIC: bam03: 6688 ; LINUX-32-PIC: movl $dsrc+262144, %eax 6689 ; LINUX-32-PIC-NEXT: ret 6690 6691 ; LINUX-64-PIC: bam03: 6692 ; LINUX-64-PIC: movl $262144, %eax 6693 ; LINUX-64-PIC-NEXT: addq dsrc@GOTPCREL(%rip), %rax 6694 ; LINUX-64-PIC-NEXT: ret 6695 6696 ; DARWIN-32-STATIC: _bam03: 6697 ; DARWIN-32-STATIC: movl $_dsrc+262144, %eax 6698 ; DARWIN-32-STATIC-NEXT: ret 6699 6700 ; DARWIN-32-DYNAMIC: _bam03: 6701 ; DARWIN-32-DYNAMIC: movl $_dsrc+262144, %eax 6702 ; DARWIN-32-DYNAMIC-NEXT: ret 6703 6704 ; DARWIN-32-PIC: _bam03: 6705 ; DARWIN-32-PIC: calll L103$pb 6706 ; DARWIN-32-PIC-NEXT: L103$pb: 6707 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6708 ; DARWIN-32-PIC-NEXT: leal (_dsrc-L103$pb)+262144([[EAX]]), %eax 6709 ; DARWIN-32-PIC-NEXT: ret 6710 6711 ; DARWIN-64-STATIC: _bam03: 6712 ; DARWIN-64-STATIC: leaq _dsrc+262144(%rip), %rax 6713 ; DARWIN-64-STATIC-NEXT: ret 6714 6715 ; DARWIN-64-DYNAMIC: _bam03: 6716 ; DARWIN-64-DYNAMIC: leaq _dsrc+262144(%rip), %rax 6717 ; DARWIN-64-DYNAMIC-NEXT: ret 6718 6719 ; DARWIN-64-PIC: _bam03: 6720 ; DARWIN-64-PIC: leaq _dsrc+262144(%rip), %rax 6721 ; DARWIN-64-PIC-NEXT: ret 6722 } 6723 6724 define i8* @bam04() nounwind { 6725 entry: 6726 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536) to i8*) 6727 ; LINUX-64-STATIC: bam04: 6728 ; LINUX-64-STATIC: movl $ddst+262144, %eax 6729 ; LINUX-64-STATIC: ret 6730 6731 ; LINUX-32-STATIC: bam04: 6732 ; LINUX-32-STATIC: movl $ddst+262144, %eax 6733 ; LINUX-32-STATIC-NEXT: ret 6734 6735 ; LINUX-32-PIC: bam04: 6736 ; LINUX-32-PIC: movl $ddst+262144, %eax 6737 ; LINUX-32-PIC-NEXT: ret 6738 6739 ; LINUX-64-PIC: bam04: 6740 ; LINUX-64-PIC: movl $262144, %eax 6741 ; LINUX-64-PIC-NEXT: addq ddst@GOTPCREL(%rip), %rax 6742 ; LINUX-64-PIC-NEXT: ret 6743 6744 ; DARWIN-32-STATIC: _bam04: 6745 ; DARWIN-32-STATIC: movl $_ddst+262144, %eax 6746 ; DARWIN-32-STATIC-NEXT: ret 6747 6748 ; DARWIN-32-DYNAMIC: _bam04: 6749 ; DARWIN-32-DYNAMIC: movl $_ddst+262144, %eax 6750 ; DARWIN-32-DYNAMIC-NEXT: ret 6751 6752 ; DARWIN-32-PIC: _bam04: 6753 ; DARWIN-32-PIC: calll L104$pb 6754 ; DARWIN-32-PIC-NEXT: L104$pb: 6755 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6756 ; DARWIN-32-PIC-NEXT: leal (_ddst-L104$pb)+262144([[EAX]]), %eax 6757 ; DARWIN-32-PIC-NEXT: ret 6758 6759 ; DARWIN-64-STATIC: _bam04: 6760 ; DARWIN-64-STATIC: leaq _ddst+262144(%rip), %rax 6761 ; DARWIN-64-STATIC-NEXT: ret 6762 6763 ; DARWIN-64-DYNAMIC: _bam04: 6764 ; DARWIN-64-DYNAMIC: leaq _ddst+262144(%rip), %rax 6765 ; DARWIN-64-DYNAMIC-NEXT: ret 6766 6767 ; DARWIN-64-PIC: _bam04: 6768 ; DARWIN-64-PIC: leaq _ddst+262144(%rip), %rax 6769 ; DARWIN-64-PIC-NEXT: ret 6770 } 6771 6772 define i8* @bam05() nounwind { 6773 entry: 6774 %0 = load i32** @dptr, align 8 6775 %1 = getelementptr i32* %0, i64 65536 6776 %2 = bitcast i32* %1 to i8* 6777 ret i8* %2 6778 ; LINUX-64-STATIC: bam05: 6779 ; LINUX-64-STATIC: movl $262144, %eax 6780 ; LINUX-64-STATIC: addq dptr(%rip), %rax 6781 ; LINUX-64-STATIC: ret 6782 6783 ; LINUX-32-STATIC: bam05: 6784 ; LINUX-32-STATIC: movl $262144, %eax 6785 ; LINUX-32-STATIC-NEXT: addl dptr, %eax 6786 ; LINUX-32-STATIC-NEXT: ret 6787 6788 ; LINUX-32-PIC: bam05: 6789 ; LINUX-32-PIC: movl $262144, %eax 6790 ; LINUX-32-PIC-NEXT: addl dptr, %eax 6791 ; LINUX-32-PIC-NEXT: ret 6792 6793 ; LINUX-64-PIC: bam05: 6794 ; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 6795 ; LINUX-64-PIC-NEXT: movl $262144, %eax 6796 ; LINUX-64-PIC-NEXT: addq ([[RCX]]), %rax 6797 ; LINUX-64-PIC-NEXT: ret 6798 6799 ; DARWIN-32-STATIC: _bam05: 6800 ; DARWIN-32-STATIC: movl $262144, %eax 6801 ; DARWIN-32-STATIC-NEXT: addl _dptr, %eax 6802 ; DARWIN-32-STATIC-NEXT: ret 6803 6804 ; DARWIN-32-DYNAMIC: _bam05: 6805 ; DARWIN-32-DYNAMIC: movl $262144, %eax 6806 ; DARWIN-32-DYNAMIC-NEXT: addl _dptr, %eax 6807 ; DARWIN-32-DYNAMIC-NEXT: ret 6808 6809 ; DARWIN-32-PIC: _bam05: 6810 ; DARWIN-32-PIC: calll L105$pb 6811 ; DARWIN-32-PIC-NEXT: L105$pb: 6812 ; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]] 6813 ; DARWIN-32-PIC-NEXT: movl $262144, %eax 6814 ; DARWIN-32-PIC-NEXT: addl _dptr-L105$pb([[ECX]]), %eax 6815 ; DARWIN-32-PIC-NEXT: ret 6816 6817 ; DARWIN-64-STATIC: _bam05: 6818 ; DARWIN-64-STATIC: movl $262144, %eax 6819 ; DARWIN-64-STATIC-NEXT: addq _dptr(%rip), %rax 6820 ; DARWIN-64-STATIC-NEXT: ret 6821 6822 ; DARWIN-64-DYNAMIC: _bam05: 6823 ; DARWIN-64-DYNAMIC: movl $262144, %eax 6824 ; DARWIN-64-DYNAMIC-NEXT: addq _dptr(%rip), %rax 6825 ; DARWIN-64-DYNAMIC-NEXT: ret 6826 6827 ; DARWIN-64-PIC: _bam05: 6828 ; DARWIN-64-PIC: movl $262144, %eax 6829 ; DARWIN-64-PIC-NEXT: addq _dptr(%rip), %rax 6830 ; DARWIN-64-PIC-NEXT: ret 6831 } 6832 6833 define i8* @bam06() nounwind { 6834 entry: 6835 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536) to i8*) 6836 ; LINUX-64-STATIC: bam06: 6837 ; LINUX-64-STATIC: movl $lsrc+262144, %eax 6838 ; LINUX-64-STATIC: ret 6839 6840 ; LINUX-32-STATIC: bam06: 6841 ; LINUX-32-STATIC: movl $lsrc+262144, %eax 6842 ; LINUX-32-STATIC-NEXT: ret 6843 6844 ; LINUX-32-PIC: bam06: 6845 ; LINUX-32-PIC: movl $lsrc+262144, %eax 6846 ; LINUX-32-PIC-NEXT: ret 6847 6848 ; LINUX-64-PIC: bam06: 6849 ; LINUX-64-PIC: leaq lsrc+262144(%rip), %rax 6850 ; LINUX-64-PIC-NEXT: ret 6851 6852 ; DARWIN-32-STATIC: _bam06: 6853 ; DARWIN-32-STATIC: movl $_lsrc+262144, %eax 6854 ; DARWIN-32-STATIC-NEXT: ret 6855 6856 ; DARWIN-32-DYNAMIC: _bam06: 6857 ; DARWIN-32-DYNAMIC: movl $_lsrc+262144, %eax 6858 ; DARWIN-32-DYNAMIC-NEXT: ret 6859 6860 ; DARWIN-32-PIC: _bam06: 6861 ; DARWIN-32-PIC: calll L106$pb 6862 ; DARWIN-32-PIC-NEXT: L106$pb: 6863 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 6864 ; DARWIN-32-PIC-NEXT: leal (_lsrc-L106$pb)+262144([[EAX]]), %eax 6865 ; DARWIN-32-PIC-NEXT: ret 6866 6867 ; DARWIN-64-STATIC: _bam06: 6868 ; DARWIN-64-STATIC: leaq _lsrc+262144(%rip), %rax 6869 ; DARWIN-64-STATIC-NEXT: ret 6870 6871 ; DARWIN-64-DYNAMIC: _bam06: 6872 ; DARWIN-64-DYNAMIC: leaq _lsrc+262144(%rip), %rax 6873 ; DARWIN-64-DYNAMIC-NEXT: ret 6874 6875 ; DARWIN-64-PIC: _bam06: 6876 ; DARWIN-64-PIC: leaq _lsrc+262144(%rip), %rax 6877 ; DARWIN-64-PIC-NEXT: ret 6878 } 6879 6880 define i8* @bam07() nounwind { 6881 entry: 6882 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536) to i8*) 6883 ; LINUX-64-STATIC: bam07: 6884 ; LINUX-64-STATIC: movl $ldst+262144, %eax 6885 ; LINUX-64-STATIC: ret 6886 6887 ; LINUX-32-STATIC: bam07: 6888 ; LINUX-32-STATIC: movl $ldst+262144, %eax 6889 ; LINUX-32-STATIC-NEXT: ret 6890 6891 ; LINUX-32-PIC: bam07: 6892 ; LINUX-32-PIC: movl $ldst+262144, %eax 6893 ; LINUX-32-PIC-NEXT: ret 6894 6895 ; LINUX-64-PIC: bam07: 6896 ; LINUX-64-PIC: leaq ldst+262144(%rip), %rax 6897 ; LINUX-64-PIC-NEXT: ret 6898 6899 ; DARWIN-32-STATIC: _bam07: 6900 ; DARWIN-32-STATIC: movl $_ldst+262144, %eax 6901 ; DARWIN-32-STATIC-NEXT: ret 6902 6903 ; DARWIN-32-DYNAMIC: _bam07: 6904 ; DARWIN-32-DYNAMIC: movl $_ldst+262144, %eax 6905 ; DARWIN-32-DYNAMIC-NEXT: ret 6906 6907 ; DARWIN-32-PIC: _bam07: 6908 ; DARWIN-32-PIC: calll L107$pb 6909 ; DARWIN-32-PIC-NEXT: L107$pb: 6910 ; DARWIN-32-PIC-NEXT: popl %eax 6911 ; DARWIN-32-PIC-NEXT: leal (_ldst-L107$pb)+262144([[EAX]]), %eax 6912 ; DARWIN-32-PIC-NEXT: ret 6913 6914 ; DARWIN-64-STATIC: _bam07: 6915 ; DARWIN-64-STATIC: leaq _ldst+262144(%rip), %rax 6916 ; DARWIN-64-STATIC-NEXT: ret 6917 6918 ; DARWIN-64-DYNAMIC: _bam07: 6919 ; DARWIN-64-DYNAMIC: leaq _ldst+262144(%rip), %rax 6920 ; DARWIN-64-DYNAMIC-NEXT: ret 6921 6922 ; DARWIN-64-PIC: _bam07: 6923 ; DARWIN-64-PIC: leaq _ldst+262144(%rip), %rax 6924 ; DARWIN-64-PIC-NEXT: ret 6925 } 6926 6927 define i8* @bam08() nounwind { 6928 entry: 6929 %0 = load i32** @lptr, align 8 6930 %1 = getelementptr i32* %0, i64 65536 6931 %2 = bitcast i32* %1 to i8* 6932 ret i8* %2 6933 ; LINUX-64-STATIC: bam08: 6934 ; LINUX-64-STATIC: movl $262144, %eax 6935 ; LINUX-64-STATIC: addq lptr(%rip), %rax 6936 ; LINUX-64-STATIC: ret 6937 6938 ; LINUX-32-STATIC: bam08: 6939 ; LINUX-32-STATIC: movl $262144, %eax 6940 ; LINUX-32-STATIC-NEXT: addl lptr, %eax 6941 ; LINUX-32-STATIC-NEXT: ret 6942 6943 ; LINUX-32-PIC: bam08: 6944 ; LINUX-32-PIC: movl $262144, %eax 6945 ; LINUX-32-PIC-NEXT: addl lptr, %eax 6946 ; LINUX-32-PIC-NEXT: ret 6947 6948 ; LINUX-64-PIC: bam08: 6949 ; LINUX-64-PIC: movl $262144, %eax 6950 ; LINUX-64-PIC-NEXT: addq lptr(%rip), %rax 6951 ; LINUX-64-PIC-NEXT: ret 6952 6953 ; DARWIN-32-STATIC: _bam08: 6954 ; DARWIN-32-STATIC: movl $262144, %eax 6955 ; DARWIN-32-STATIC-NEXT: addl _lptr, %eax 6956 ; DARWIN-32-STATIC-NEXT: ret 6957 6958 ; DARWIN-32-DYNAMIC: _bam08: 6959 ; DARWIN-32-DYNAMIC: movl $262144, %eax 6960 ; DARWIN-32-DYNAMIC-NEXT: addl _lptr, %eax 6961 ; DARWIN-32-DYNAMIC-NEXT: ret 6962 6963 ; DARWIN-32-PIC: _bam08: 6964 ; DARWIN-32-PIC: calll L108$pb 6965 ; DARWIN-32-PIC-NEXT: L108$pb: 6966 ; DARWIN-32-PIC-NEXT: popl [[ECX:%e.x]] 6967 ; DARWIN-32-PIC-NEXT: movl $262144, %eax 6968 ; DARWIN-32-PIC-NEXT: addl _lptr-L108$pb([[ECX]]), %eax 6969 ; DARWIN-32-PIC-NEXT: ret 6970 6971 ; DARWIN-64-STATIC: _bam08: 6972 ; DARWIN-64-STATIC: movl $262144, %eax 6973 ; DARWIN-64-STATIC-NEXT: addq _lptr(%rip), %rax 6974 ; DARWIN-64-STATIC-NEXT: ret 6975 6976 ; DARWIN-64-DYNAMIC: _bam08: 6977 ; DARWIN-64-DYNAMIC: movl $262144, %eax 6978 ; DARWIN-64-DYNAMIC-NEXT: addq _lptr(%rip), %rax 6979 ; DARWIN-64-DYNAMIC-NEXT: ret 6980 6981 ; DARWIN-64-PIC: _bam08: 6982 ; DARWIN-64-PIC: movl $262144, %eax 6983 ; DARWIN-64-PIC-NEXT: addq _lptr(%rip), %rax 6984 ; DARWIN-64-PIC-NEXT: ret 6985 } 6986 6987 define i8* @cat00(i64 %i) nounwind { 6988 entry: 6989 %0 = add i64 %i, 16 6990 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0 6991 %2 = bitcast i32* %1 to i8* 6992 ret i8* %2 6993 ; LINUX-64-STATIC: cat00: 6994 ; LINUX-64-STATIC: leaq src+64(,%rdi,4), %rax 6995 ; LINUX-64-STATIC: ret 6996 6997 ; LINUX-32-STATIC: cat00: 6998 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 6999 ; LINUX-32-STATIC-NEXT: leal src+64(,[[EAX]],4), %eax 7000 ; LINUX-32-STATIC-NEXT: ret 7001 7002 ; LINUX-32-PIC: cat00: 7003 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7004 ; LINUX-32-PIC-NEXT: leal src+64(,[[EAX]],4), %eax 7005 ; LINUX-32-PIC-NEXT: ret 7006 7007 ; LINUX-64-PIC: cat00: 7008 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 7009 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7010 ; LINUX-64-PIC-NEXT: ret 7011 7012 ; DARWIN-32-STATIC: _cat00: 7013 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7014 ; DARWIN-32-STATIC-NEXT: leal _src+64(,[[EAX]],4), %eax 7015 ; DARWIN-32-STATIC-NEXT: ret 7016 7017 ; DARWIN-32-DYNAMIC: _cat00: 7018 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7019 ; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]] 7020 ; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7021 ; DARWIN-32-DYNAMIC-NEXT: ret 7022 7023 ; DARWIN-32-PIC: _cat00: 7024 ; DARWIN-32-PIC: calll L109$pb 7025 ; DARWIN-32-PIC-NEXT: L109$pb: 7026 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7027 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7028 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L109$pb([[EAX]]), [[EAX:%e.x]] 7029 ; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax 7030 ; DARWIN-32-PIC-NEXT: ret 7031 7032 ; DARWIN-64-STATIC: _cat00: 7033 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 7034 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7035 ; DARWIN-64-STATIC-NEXT: ret 7036 7037 ; DARWIN-64-DYNAMIC: _cat00: 7038 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 7039 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7040 ; DARWIN-64-DYNAMIC-NEXT: ret 7041 7042 ; DARWIN-64-PIC: _cat00: 7043 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 7044 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7045 ; DARWIN-64-PIC-NEXT: ret 7046 } 7047 7048 define i8* @cxt00(i64 %i) nounwind { 7049 entry: 7050 %0 = add i64 %i, 16 7051 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0 7052 %2 = bitcast i32* %1 to i8* 7053 ret i8* %2 7054 ; LINUX-64-STATIC: cxt00: 7055 ; LINUX-64-STATIC: leaq xsrc+64(,%rdi,4), %rax 7056 ; LINUX-64-STATIC: ret 7057 7058 ; LINUX-32-STATIC: cxt00: 7059 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7060 ; LINUX-32-STATIC-NEXT: leal xsrc+64(,[[EAX]],4), %eax 7061 ; LINUX-32-STATIC-NEXT: ret 7062 7063 ; LINUX-32-PIC: cxt00: 7064 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7065 ; LINUX-32-PIC-NEXT: leal xsrc+64(,[[EAX]],4), %eax 7066 ; LINUX-32-PIC-NEXT: ret 7067 7068 ; LINUX-64-PIC: cxt00: 7069 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 7070 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7071 ; LINUX-64-PIC-NEXT: ret 7072 7073 ; DARWIN-32-STATIC: _cxt00: 7074 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7075 ; DARWIN-32-STATIC-NEXT: leal _xsrc+64(,[[EAX]],4), %eax 7076 ; DARWIN-32-STATIC-NEXT: ret 7077 7078 ; DARWIN-32-DYNAMIC: _cxt00: 7079 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7080 ; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, [[ECX:%e.x]] 7081 ; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7082 ; DARWIN-32-DYNAMIC-NEXT: ret 7083 7084 ; DARWIN-32-PIC: _cxt00: 7085 ; DARWIN-32-PIC: calll L110$pb 7086 ; DARWIN-32-PIC-NEXT: L110$pb: 7087 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7088 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7089 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L110$pb([[EAX]]), [[EAX:%e.x]] 7090 ; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax 7091 ; DARWIN-32-PIC-NEXT: ret 7092 7093 ; DARWIN-64-STATIC: _cxt00: 7094 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 7095 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7096 ; DARWIN-64-STATIC-NEXT: ret 7097 7098 ; DARWIN-64-DYNAMIC: _cxt00: 7099 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 7100 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7101 ; DARWIN-64-DYNAMIC-NEXT: ret 7102 7103 ; DARWIN-64-PIC: _cxt00: 7104 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 7105 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7106 ; DARWIN-64-PIC-NEXT: ret 7107 } 7108 7109 define i8* @cat01(i64 %i) nounwind { 7110 entry: 7111 %0 = add i64 %i, 16 7112 %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0 7113 %2 = bitcast i32* %1 to i8* 7114 ret i8* %2 7115 ; LINUX-64-STATIC: cat01: 7116 ; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax 7117 ; LINUX-64-STATIC: ret 7118 7119 ; LINUX-32-STATIC: cat01: 7120 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7121 ; LINUX-32-STATIC-NEXT: leal dst+64(,[[EAX]],4), %eax 7122 ; LINUX-32-STATIC-NEXT: ret 7123 7124 ; LINUX-32-PIC: cat01: 7125 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7126 ; LINUX-32-PIC-NEXT: leal dst+64(,[[EAX]],4), %eax 7127 ; LINUX-32-PIC-NEXT: ret 7128 7129 ; LINUX-64-PIC: cat01: 7130 ; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]] 7131 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7132 ; LINUX-64-PIC-NEXT: ret 7133 7134 ; DARWIN-32-STATIC: _cat01: 7135 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7136 ; DARWIN-32-STATIC-NEXT: leal _dst+64(,[[EAX]],4), %eax 7137 ; DARWIN-32-STATIC-NEXT: ret 7138 7139 ; DARWIN-32-DYNAMIC: _cat01: 7140 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7141 ; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e.x]] 7142 ; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7143 ; DARWIN-32-DYNAMIC-NEXT: ret 7144 7145 ; DARWIN-32-PIC: _cat01: 7146 ; DARWIN-32-PIC: calll L111$pb 7147 ; DARWIN-32-PIC-NEXT: L111$pb: 7148 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7149 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7150 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L111$pb([[EAX]]), [[EAX:%e.x]] 7151 ; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax 7152 ; DARWIN-32-PIC-NEXT: ret 7153 7154 ; DARWIN-64-STATIC: _cat01: 7155 ; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 7156 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7157 ; DARWIN-64-STATIC-NEXT: ret 7158 7159 ; DARWIN-64-DYNAMIC: _cat01: 7160 ; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 7161 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7162 ; DARWIN-64-DYNAMIC-NEXT: ret 7163 7164 ; DARWIN-64-PIC: _cat01: 7165 ; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 7166 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7167 ; DARWIN-64-PIC-NEXT: ret 7168 } 7169 7170 define i8* @cxt01(i64 %i) nounwind { 7171 entry: 7172 %0 = add i64 %i, 16 7173 %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0 7174 %2 = bitcast i32* %1 to i8* 7175 ret i8* %2 7176 ; LINUX-64-STATIC: cxt01: 7177 ; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax 7178 ; LINUX-64-STATIC: ret 7179 7180 ; LINUX-32-STATIC: cxt01: 7181 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7182 ; LINUX-32-STATIC-NEXT: leal xdst+64(,[[EAX]],4), %eax 7183 ; LINUX-32-STATIC-NEXT: ret 7184 7185 ; LINUX-32-PIC: cxt01: 7186 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7187 ; LINUX-32-PIC-NEXT: leal xdst+64(,[[EAX]],4), %eax 7188 ; LINUX-32-PIC-NEXT: ret 7189 7190 ; LINUX-64-PIC: cxt01: 7191 ; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), [[RAX:%r.x]] 7192 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7193 ; LINUX-64-PIC-NEXT: ret 7194 7195 ; DARWIN-32-STATIC: _cxt01: 7196 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7197 ; DARWIN-32-STATIC-NEXT: leal _xdst+64(,[[EAX]],4), %eax 7198 ; DARWIN-32-STATIC-NEXT: ret 7199 7200 ; DARWIN-32-DYNAMIC: _cxt01: 7201 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7202 ; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[ECX:%e.x]] 7203 ; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7204 ; DARWIN-32-DYNAMIC-NEXT: ret 7205 7206 ; DARWIN-32-PIC: _cxt01: 7207 ; DARWIN-32-PIC: calll L112$pb 7208 ; DARWIN-32-PIC-NEXT: L112$pb: 7209 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7210 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7211 ; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L112$pb([[EAX]]), [[EAX:%e.x]] 7212 ; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax 7213 ; DARWIN-32-PIC-NEXT: ret 7214 7215 ; DARWIN-64-STATIC: _cxt01: 7216 ; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 7217 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7218 ; DARWIN-64-STATIC-NEXT: ret 7219 7220 ; DARWIN-64-DYNAMIC: _cxt01: 7221 ; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 7222 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7223 ; DARWIN-64-DYNAMIC-NEXT: ret 7224 7225 ; DARWIN-64-PIC: _cxt01: 7226 ; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 7227 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7228 ; DARWIN-64-PIC-NEXT: ret 7229 } 7230 7231 define i8* @cat02(i64 %i) nounwind { 7232 entry: 7233 %0 = load i32** @ptr, align 8 7234 %1 = add i64 %i, 16 7235 %2 = getelementptr i32* %0, i64 %1 7236 %3 = bitcast i32* %2 to i8* 7237 ret i8* %3 7238 ; LINUX-64-STATIC: cat02: 7239 ; LINUX-64-STATIC: movq ptr(%rip), [[RAX:%r.x]] 7240 ; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax 7241 ; LINUX-64-STATIC: ret 7242 7243 ; LINUX-32-STATIC: cat02: 7244 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7245 ; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]] 7246 ; LINUX-32-STATIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7247 ; LINUX-32-STATIC-NEXT: ret 7248 7249 ; LINUX-32-PIC: cat02: 7250 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7251 ; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]] 7252 ; LINUX-32-PIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7253 ; LINUX-32-PIC-NEXT: ret 7254 7255 ; LINUX-64-PIC: cat02: 7256 ; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]] 7257 ; LINUX-64-PIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]] 7258 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7259 ; LINUX-64-PIC-NEXT: ret 7260 7261 ; DARWIN-32-STATIC: _cat02: 7262 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7263 ; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]] 7264 ; DARWIN-32-STATIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7265 ; DARWIN-32-STATIC-NEXT: ret 7266 7267 ; DARWIN-32-DYNAMIC: _cat02: 7268 ; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[EAX:%e.x]] 7269 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 7270 ; DARWIN-32-DYNAMIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7271 ; DARWIN-32-DYNAMIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax 7272 ; DARWIN-32-DYNAMIC-NEXT: ret 7273 7274 ; DARWIN-32-PIC: _cat02: 7275 ; DARWIN-32-PIC: calll L113$pb 7276 ; DARWIN-32-PIC-NEXT: L113$pb: 7277 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7278 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L113$pb([[EAX]]), [[EAX:%e.x]] 7279 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 7280 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7281 ; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax 7282 ; DARWIN-32-PIC-NEXT: ret 7283 7284 ; DARWIN-64-STATIC: _cat02: 7285 ; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 7286 ; DARWIN-64-STATIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]] 7287 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7288 ; DARWIN-64-STATIC-NEXT: ret 7289 7290 ; DARWIN-64-DYNAMIC: _cat02: 7291 ; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 7292 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]] 7293 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7294 ; DARWIN-64-DYNAMIC-NEXT: ret 7295 7296 ; DARWIN-64-PIC: _cat02: 7297 ; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 7298 ; DARWIN-64-PIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]] 7299 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7300 ; DARWIN-64-PIC-NEXT: ret 7301 } 7302 7303 define i8* @cat03(i64 %i) nounwind { 7304 entry: 7305 %0 = add i64 %i, 16 7306 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0 7307 %2 = bitcast i32* %1 to i8* 7308 ret i8* %2 7309 ; LINUX-64-STATIC: cat03: 7310 ; LINUX-64-STATIC: leaq dsrc+64(,%rdi,4), %rax 7311 ; LINUX-64-STATIC: ret 7312 7313 ; LINUX-32-STATIC: cat03: 7314 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7315 ; LINUX-32-STATIC-NEXT: leal dsrc+64(,[[EAX]],4), %eax 7316 ; LINUX-32-STATIC-NEXT: ret 7317 7318 ; LINUX-32-PIC: cat03: 7319 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7320 ; LINUX-32-PIC-NEXT: leal dsrc+64(,[[EAX]],4), %eax 7321 ; LINUX-32-PIC-NEXT: ret 7322 7323 ; LINUX-64-PIC: cat03: 7324 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 7325 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7326 ; LINUX-64-PIC-NEXT: ret 7327 7328 ; DARWIN-32-STATIC: _cat03: 7329 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7330 ; DARWIN-32-STATIC-NEXT: leal _dsrc+64(,[[EAX]],4), %eax 7331 ; DARWIN-32-STATIC-NEXT: ret 7332 7333 ; DARWIN-32-DYNAMIC: _cat03: 7334 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7335 ; DARWIN-32-DYNAMIC-NEXT: leal _dsrc+64(,[[EAX]],4), %eax 7336 ; DARWIN-32-DYNAMIC-NEXT: ret 7337 7338 ; DARWIN-32-PIC: _cat03: 7339 ; DARWIN-32-PIC: calll L114$pb 7340 ; DARWIN-32-PIC-NEXT: L114$pb: 7341 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7342 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7343 ; DARWIN-32-PIC-NEXT: leal (_dsrc-L114$pb)+64([[EAX]],[[ECX]],4), %eax 7344 ; DARWIN-32-PIC-NEXT: ret 7345 7346 ; DARWIN-64-STATIC: _cat03: 7347 ; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]] 7348 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7349 ; DARWIN-64-STATIC-NEXT: ret 7350 7351 ; DARWIN-64-DYNAMIC: _cat03: 7352 ; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]] 7353 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7354 ; DARWIN-64-DYNAMIC-NEXT: ret 7355 7356 ; DARWIN-64-PIC: _cat03: 7357 ; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]] 7358 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7359 ; DARWIN-64-PIC-NEXT: ret 7360 } 7361 7362 define i8* @cat04(i64 %i) nounwind { 7363 entry: 7364 %0 = add i64 %i, 16 7365 %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0 7366 %2 = bitcast i32* %1 to i8* 7367 ret i8* %2 7368 ; LINUX-64-STATIC: cat04: 7369 ; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax 7370 ; LINUX-64-STATIC: ret 7371 7372 ; LINUX-32-STATIC: cat04: 7373 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7374 ; LINUX-32-STATIC-NEXT: leal ddst+64(,[[EAX]],4), %eax 7375 ; LINUX-32-STATIC-NEXT: ret 7376 7377 ; LINUX-32-PIC: cat04: 7378 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7379 ; LINUX-32-PIC-NEXT: leal ddst+64(,[[EAX]],4), %eax 7380 ; LINUX-32-PIC-NEXT: ret 7381 7382 ; LINUX-64-PIC: cat04: 7383 ; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]] 7384 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7385 ; LINUX-64-PIC-NEXT: ret 7386 7387 ; DARWIN-32-STATIC: _cat04: 7388 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7389 ; DARWIN-32-STATIC-NEXT: leal _ddst+64(,[[EAX]],4), %eax 7390 ; DARWIN-32-STATIC-NEXT: ret 7391 7392 ; DARWIN-32-DYNAMIC: _cat04: 7393 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7394 ; DARWIN-32-DYNAMIC-NEXT: leal _ddst+64(,[[EAX]],4), %eax 7395 ; DARWIN-32-DYNAMIC-NEXT: ret 7396 7397 ; DARWIN-32-PIC: _cat04: 7398 ; DARWIN-32-PIC: calll L115$pb 7399 ; DARWIN-32-PIC-NEXT: L115$pb: 7400 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7401 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7402 ; DARWIN-32-PIC-NEXT: leal (_ddst-L115$pb)+64([[EAX]],[[ECX]],4), %eax 7403 ; DARWIN-32-PIC-NEXT: ret 7404 7405 ; DARWIN-64-STATIC: _cat04: 7406 ; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]] 7407 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7408 ; DARWIN-64-STATIC-NEXT: ret 7409 7410 ; DARWIN-64-DYNAMIC: _cat04: 7411 ; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]] 7412 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7413 ; DARWIN-64-DYNAMIC-NEXT: ret 7414 7415 ; DARWIN-64-PIC: _cat04: 7416 ; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]] 7417 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7418 ; DARWIN-64-PIC-NEXT: ret 7419 } 7420 7421 define i8* @cat05(i64 %i) nounwind { 7422 entry: 7423 %0 = load i32** @dptr, align 8 7424 %1 = add i64 %i, 16 7425 %2 = getelementptr i32* %0, i64 %1 7426 %3 = bitcast i32* %2 to i8* 7427 ret i8* %3 7428 ; LINUX-64-STATIC: cat05: 7429 ; LINUX-64-STATIC: movq dptr(%rip), [[RAX:%r.x]] 7430 ; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax 7431 ; LINUX-64-STATIC: ret 7432 7433 ; LINUX-32-STATIC: cat05: 7434 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7435 ; LINUX-32-STATIC-NEXT: movl dptr, [[ECX:%e.x]] 7436 ; LINUX-32-STATIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7437 ; LINUX-32-STATIC-NEXT: ret 7438 7439 ; LINUX-32-PIC: cat05: 7440 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7441 ; LINUX-32-PIC-NEXT: movl dptr, [[ECX:%e.x]] 7442 ; LINUX-32-PIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7443 ; LINUX-32-PIC-NEXT: ret 7444 7445 ; LINUX-64-PIC: cat05: 7446 ; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]] 7447 ; LINUX-64-PIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]] 7448 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7449 ; LINUX-64-PIC-NEXT: ret 7450 7451 ; DARWIN-32-STATIC: _cat05: 7452 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7453 ; DARWIN-32-STATIC-NEXT: movl _dptr, [[ECX:%e.x]] 7454 ; DARWIN-32-STATIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7455 ; DARWIN-32-STATIC-NEXT: ret 7456 7457 ; DARWIN-32-DYNAMIC: _cat05: 7458 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7459 ; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[ECX:%e.x]] 7460 ; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7461 ; DARWIN-32-DYNAMIC-NEXT: ret 7462 7463 ; DARWIN-32-PIC: _cat05: 7464 ; DARWIN-32-PIC: calll L116$pb 7465 ; DARWIN-32-PIC-NEXT: L116$pb: 7466 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7467 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7468 ; DARWIN-32-PIC-NEXT: movl _dptr-L116$pb([[EAX]]), [[EAX:%e.x]] 7469 ; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax 7470 ; DARWIN-32-PIC-NEXT: ret 7471 7472 ; DARWIN-64-STATIC: _cat05: 7473 ; DARWIN-64-STATIC: movq _dptr(%rip), [[RAX:%r.x]] 7474 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7475 ; DARWIN-64-STATIC-NEXT: ret 7476 7477 ; DARWIN-64-DYNAMIC: _cat05: 7478 ; DARWIN-64-DYNAMIC: movq _dptr(%rip), [[RAX:%r.x]] 7479 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7480 ; DARWIN-64-DYNAMIC-NEXT: ret 7481 7482 ; DARWIN-64-PIC: _cat05: 7483 ; DARWIN-64-PIC: movq _dptr(%rip), [[RAX:%r.x]] 7484 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7485 ; DARWIN-64-PIC-NEXT: ret 7486 } 7487 7488 define i8* @cat06(i64 %i) nounwind { 7489 entry: 7490 %0 = add i64 %i, 16 7491 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0 7492 %2 = bitcast i32* %1 to i8* 7493 ret i8* %2 7494 ; LINUX-64-STATIC: cat06: 7495 ; LINUX-64-STATIC: leaq lsrc+64(,%rdi,4), %rax 7496 ; LINUX-64-STATIC: ret 7497 7498 ; LINUX-32-STATIC: cat06: 7499 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7500 ; LINUX-32-STATIC-NEXT: leal lsrc+64(,[[EAX]],4), %eax 7501 ; LINUX-32-STATIC-NEXT: ret 7502 7503 ; LINUX-32-PIC: cat06: 7504 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7505 ; LINUX-32-PIC-NEXT: leal lsrc+64(,[[EAX]],4), %eax 7506 ; LINUX-32-PIC-NEXT: ret 7507 7508 ; LINUX-64-PIC: cat06: 7509 ; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]] 7510 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7511 ; LINUX-64-PIC-NEXT: ret 7512 7513 ; DARWIN-32-STATIC: _cat06: 7514 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7515 ; DARWIN-32-STATIC-NEXT: leal _lsrc+64(,[[EAX]],4), %eax 7516 ; DARWIN-32-STATIC-NEXT: ret 7517 7518 ; DARWIN-32-DYNAMIC: _cat06: 7519 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7520 ; DARWIN-32-DYNAMIC-NEXT: leal _lsrc+64(,[[EAX]],4), %eax 7521 ; DARWIN-32-DYNAMIC-NEXT: ret 7522 7523 ; DARWIN-32-PIC: _cat06: 7524 ; DARWIN-32-PIC: calll L117$pb 7525 ; DARWIN-32-PIC-NEXT: L117$pb: 7526 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7527 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7528 ; DARWIN-32-PIC-NEXT: leal (_lsrc-L117$pb)+64([[EAX]],[[ECX]],4), %eax 7529 ; DARWIN-32-PIC-NEXT: ret 7530 7531 ; DARWIN-64-STATIC: _cat06: 7532 ; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]] 7533 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7534 ; DARWIN-64-STATIC-NEXT: ret 7535 7536 ; DARWIN-64-DYNAMIC: _cat06: 7537 ; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]] 7538 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7539 ; DARWIN-64-DYNAMIC-NEXT: ret 7540 7541 ; DARWIN-64-PIC: _cat06: 7542 ; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]] 7543 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7544 ; DARWIN-64-PIC-NEXT: ret 7545 } 7546 7547 define i8* @cat07(i64 %i) nounwind { 7548 entry: 7549 %0 = add i64 %i, 16 7550 %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0 7551 %2 = bitcast i32* %1 to i8* 7552 ret i8* %2 7553 ; LINUX-64-STATIC: cat07: 7554 ; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax 7555 ; LINUX-64-STATIC: ret 7556 7557 ; LINUX-32-STATIC: cat07: 7558 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7559 ; LINUX-32-STATIC-NEXT: leal ldst+64(,[[EAX]],4), %eax 7560 ; LINUX-32-STATIC-NEXT: ret 7561 7562 ; LINUX-32-PIC: cat07: 7563 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7564 ; LINUX-32-PIC-NEXT: leal ldst+64(,[[EAX]],4), %eax 7565 ; LINUX-32-PIC-NEXT: ret 7566 7567 ; LINUX-64-PIC: cat07: 7568 ; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]] 7569 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7570 ; LINUX-64-PIC-NEXT: ret 7571 7572 ; DARWIN-32-STATIC: _cat07: 7573 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7574 ; DARWIN-32-STATIC-NEXT: leal _ldst+64(,[[EAX]],4), %eax 7575 ; DARWIN-32-STATIC-NEXT: ret 7576 7577 ; DARWIN-32-DYNAMIC: _cat07: 7578 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7579 ; DARWIN-32-DYNAMIC-NEXT: leal _ldst+64(,[[EAX]],4), %eax 7580 ; DARWIN-32-DYNAMIC-NEXT: ret 7581 7582 ; DARWIN-32-PIC: _cat07: 7583 ; DARWIN-32-PIC: calll L118$pb 7584 ; DARWIN-32-PIC-NEXT: L118$pb: 7585 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7586 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7587 ; DARWIN-32-PIC-NEXT: leal (_ldst-L118$pb)+64([[EAX]],[[ECX]],4), %eax 7588 ; DARWIN-32-PIC-NEXT: ret 7589 7590 ; DARWIN-64-STATIC: _cat07: 7591 ; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]] 7592 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7593 ; DARWIN-64-STATIC-NEXT: ret 7594 7595 ; DARWIN-64-DYNAMIC: _cat07: 7596 ; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]] 7597 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7598 ; DARWIN-64-DYNAMIC-NEXT: ret 7599 7600 ; DARWIN-64-PIC: _cat07: 7601 ; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]] 7602 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7603 ; DARWIN-64-PIC-NEXT: ret 7604 } 7605 7606 define i8* @cat08(i64 %i) nounwind { 7607 entry: 7608 %0 = load i32** @lptr, align 8 7609 %1 = add i64 %i, 16 7610 %2 = getelementptr i32* %0, i64 %1 7611 %3 = bitcast i32* %2 to i8* 7612 ret i8* %3 7613 ; LINUX-64-STATIC: cat08: 7614 ; LINUX-64-STATIC: movq lptr(%rip), [[RAX:%r.x]] 7615 ; LINUX-64-STATIC: leaq 64([[RAX]],%rdi,4), %rax 7616 ; LINUX-64-STATIC: ret 7617 7618 ; LINUX-32-STATIC: cat08: 7619 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7620 ; LINUX-32-STATIC-NEXT: movl lptr, [[ECX:%e.x]] 7621 ; LINUX-32-STATIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7622 ; LINUX-32-STATIC-NEXT: ret 7623 7624 ; LINUX-32-PIC: cat08: 7625 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7626 ; LINUX-32-PIC-NEXT: movl lptr, [[ECX:%e.x]] 7627 ; LINUX-32-PIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7628 ; LINUX-32-PIC-NEXT: ret 7629 7630 ; LINUX-64-PIC: cat08: 7631 ; LINUX-64-PIC: movq lptr(%rip), [[RAX:%r.x]] 7632 ; LINUX-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7633 ; LINUX-64-PIC-NEXT: ret 7634 7635 ; DARWIN-32-STATIC: _cat08: 7636 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7637 ; DARWIN-32-STATIC-NEXT: movl _lptr, [[ECX:%e.x]] 7638 ; DARWIN-32-STATIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7639 ; DARWIN-32-STATIC-NEXT: ret 7640 7641 ; DARWIN-32-DYNAMIC: _cat08: 7642 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7643 ; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[ECX:%e.x]] 7644 ; DARWIN-32-DYNAMIC-NEXT: leal 64([[ECX]],[[EAX]],4), %eax 7645 ; DARWIN-32-DYNAMIC-NEXT: ret 7646 7647 ; DARWIN-32-PIC: _cat08: 7648 ; DARWIN-32-PIC: calll L119$pb 7649 ; DARWIN-32-PIC-NEXT: L119$pb: 7650 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7651 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7652 ; DARWIN-32-PIC-NEXT: movl _lptr-L119$pb([[EAX]]), [[EAX:%e.x]] 7653 ; DARWIN-32-PIC-NEXT: leal 64([[EAX]],[[ECX]],4), %eax 7654 ; DARWIN-32-PIC-NEXT: ret 7655 7656 ; DARWIN-64-STATIC: _cat08: 7657 ; DARWIN-64-STATIC: movq _lptr(%rip), [[RAX:%r.x]] 7658 ; DARWIN-64-STATIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7659 ; DARWIN-64-STATIC-NEXT: ret 7660 7661 ; DARWIN-64-DYNAMIC: _cat08: 7662 ; DARWIN-64-DYNAMIC: movq _lptr(%rip), [[RAX:%r.x]] 7663 ; DARWIN-64-DYNAMIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7664 ; DARWIN-64-DYNAMIC-NEXT: ret 7665 7666 ; DARWIN-64-PIC: _cat08: 7667 ; DARWIN-64-PIC: movq _lptr(%rip), [[RAX:%r.x]] 7668 ; DARWIN-64-PIC-NEXT: leaq 64([[RAX]],%rdi,4), %rax 7669 ; DARWIN-64-PIC-NEXT: ret 7670 } 7671 7672 define i8* @cam00(i64 %i) nounwind { 7673 entry: 7674 %0 = add i64 %i, 65536 7675 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0 7676 %2 = bitcast i32* %1 to i8* 7677 ret i8* %2 7678 ; LINUX-64-STATIC: cam00: 7679 ; LINUX-64-STATIC: leaq src+262144(,%rdi,4), %rax 7680 ; LINUX-64-STATIC: ret 7681 7682 ; LINUX-32-STATIC: cam00: 7683 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7684 ; LINUX-32-STATIC-NEXT: leal src+262144(,[[EAX]],4), %eax 7685 ; LINUX-32-STATIC-NEXT: ret 7686 7687 ; LINUX-32-PIC: cam00: 7688 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7689 ; LINUX-32-PIC-NEXT: leal src+262144(,[[EAX]],4), %eax 7690 ; LINUX-32-PIC-NEXT: ret 7691 7692 ; LINUX-64-PIC: cam00: 7693 ; LINUX-64-PIC: movq src@GOTPCREL(%rip), [[RAX:%r.x]] 7694 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7695 ; LINUX-64-PIC-NEXT: ret 7696 7697 ; DARWIN-32-STATIC: _cam00: 7698 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7699 ; DARWIN-32-STATIC-NEXT: leal _src+262144(,[[EAX]],4), %eax 7700 ; DARWIN-32-STATIC-NEXT: ret 7701 7702 ; DARWIN-32-DYNAMIC: _cam00: 7703 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7704 ; DARWIN-32-DYNAMIC-NEXT: movl L_src$non_lazy_ptr, [[ECX:%e.x]] 7705 ; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 7706 ; DARWIN-32-DYNAMIC-NEXT: ret 7707 7708 ; DARWIN-32-PIC: _cam00: 7709 ; DARWIN-32-PIC: calll L120$pb 7710 ; DARWIN-32-PIC-NEXT: L120$pb: 7711 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7712 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7713 ; DARWIN-32-PIC-NEXT: movl L_src$non_lazy_ptr-L120$pb([[EAX]]), [[EAX:%e.x]] 7714 ; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax 7715 ; DARWIN-32-PIC-NEXT: ret 7716 7717 ; DARWIN-64-STATIC: _cam00: 7718 ; DARWIN-64-STATIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 7719 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7720 ; DARWIN-64-STATIC-NEXT: ret 7721 7722 ; DARWIN-64-DYNAMIC: _cam00: 7723 ; DARWIN-64-DYNAMIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 7724 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7725 ; DARWIN-64-DYNAMIC-NEXT: ret 7726 7727 ; DARWIN-64-PIC: _cam00: 7728 ; DARWIN-64-PIC: movq _src@GOTPCREL(%rip), [[RAX:%r.x]] 7729 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7730 ; DARWIN-64-PIC-NEXT: ret 7731 } 7732 7733 define i8* @cxm00(i64 %i) nounwind { 7734 entry: 7735 %0 = add i64 %i, 65536 7736 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0 7737 %2 = bitcast i32* %1 to i8* 7738 ret i8* %2 7739 ; LINUX-64-STATIC: cxm00: 7740 ; LINUX-64-STATIC: leaq xsrc+262144(,%rdi,4), %rax 7741 ; LINUX-64-STATIC: ret 7742 7743 ; LINUX-32-STATIC: cxm00: 7744 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7745 ; LINUX-32-STATIC-NEXT: leal xsrc+262144(,[[EAX]],4), %eax 7746 ; LINUX-32-STATIC-NEXT: ret 7747 7748 ; LINUX-32-PIC: cxm00: 7749 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7750 ; LINUX-32-PIC-NEXT: leal xsrc+262144(,[[EAX]],4), %eax 7751 ; LINUX-32-PIC-NEXT: ret 7752 7753 ; LINUX-64-PIC: cxm00: 7754 ; LINUX-64-PIC: movq xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 7755 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7756 ; LINUX-64-PIC-NEXT: ret 7757 7758 ; DARWIN-32-STATIC: _cxm00: 7759 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7760 ; DARWIN-32-STATIC-NEXT: leal _xsrc+262144(,[[EAX]],4), %eax 7761 ; DARWIN-32-STATIC-NEXT: ret 7762 7763 ; DARWIN-32-DYNAMIC: _cxm00: 7764 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7765 ; DARWIN-32-DYNAMIC-NEXT: movl L_xsrc$non_lazy_ptr, [[ECX:%e.x]] 7766 ; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 7767 ; DARWIN-32-DYNAMIC-NEXT: ret 7768 7769 ; DARWIN-32-PIC: _cxm00: 7770 ; DARWIN-32-PIC: calll L121$pb 7771 ; DARWIN-32-PIC-NEXT: L121$pb: 7772 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7773 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7774 ; DARWIN-32-PIC-NEXT: movl L_xsrc$non_lazy_ptr-L121$pb([[EAX]]), [[EAX:%e.x]] 7775 ; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax 7776 ; DARWIN-32-PIC-NEXT: ret 7777 7778 ; DARWIN-64-STATIC: _cxm00: 7779 ; DARWIN-64-STATIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 7780 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7781 ; DARWIN-64-STATIC-NEXT: ret 7782 7783 ; DARWIN-64-DYNAMIC: _cxm00: 7784 ; DARWIN-64-DYNAMIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 7785 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7786 ; DARWIN-64-DYNAMIC-NEXT: ret 7787 7788 ; DARWIN-64-PIC: _cxm00: 7789 ; DARWIN-64-PIC: movq _xsrc@GOTPCREL(%rip), [[RAX:%r.x]] 7790 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7791 ; DARWIN-64-PIC-NEXT: ret 7792 } 7793 7794 define i8* @cam01(i64 %i) nounwind { 7795 entry: 7796 %0 = add i64 %i, 65536 7797 %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0 7798 %2 = bitcast i32* %1 to i8* 7799 ret i8* %2 7800 ; LINUX-64-STATIC: cam01: 7801 ; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax 7802 ; LINUX-64-STATIC: ret 7803 7804 ; LINUX-32-STATIC: cam01: 7805 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7806 ; LINUX-32-STATIC-NEXT: leal dst+262144(,[[EAX]],4), %eax 7807 ; LINUX-32-STATIC-NEXT: ret 7808 7809 ; LINUX-32-PIC: cam01: 7810 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7811 ; LINUX-32-PIC-NEXT: leal dst+262144(,[[EAX]],4), %eax 7812 ; LINUX-32-PIC-NEXT: ret 7813 7814 ; LINUX-64-PIC: cam01: 7815 ; LINUX-64-PIC: movq dst@GOTPCREL(%rip), [[RAX:%r.x]] 7816 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7817 ; LINUX-64-PIC-NEXT: ret 7818 7819 ; DARWIN-32-STATIC: _cam01: 7820 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7821 ; DARWIN-32-STATIC-NEXT: leal _dst+262144(,[[EAX]],4), %eax 7822 ; DARWIN-32-STATIC-NEXT: ret 7823 7824 ; DARWIN-32-DYNAMIC: _cam01: 7825 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7826 ; DARWIN-32-DYNAMIC-NEXT: movl L_dst$non_lazy_ptr, [[ECX:%e.x]] 7827 ; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 7828 ; DARWIN-32-DYNAMIC-NEXT: ret 7829 7830 ; DARWIN-32-PIC: _cam01: 7831 ; DARWIN-32-PIC: calll L122$pb 7832 ; DARWIN-32-PIC-NEXT: L122$pb: 7833 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7834 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7835 ; DARWIN-32-PIC-NEXT: movl L_dst$non_lazy_ptr-L122$pb([[EAX]]), [[EAX:%e.x]] 7836 ; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax 7837 ; DARWIN-32-PIC-NEXT: ret 7838 7839 ; DARWIN-64-STATIC: _cam01: 7840 ; DARWIN-64-STATIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 7841 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7842 ; DARWIN-64-STATIC-NEXT: ret 7843 7844 ; DARWIN-64-DYNAMIC: _cam01: 7845 ; DARWIN-64-DYNAMIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 7846 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7847 ; DARWIN-64-DYNAMIC-NEXT: ret 7848 7849 ; DARWIN-64-PIC: _cam01: 7850 ; DARWIN-64-PIC: movq _dst@GOTPCREL(%rip), [[RAX:%r.x]] 7851 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7852 ; DARWIN-64-PIC-NEXT: ret 7853 } 7854 7855 define i8* @cxm01(i64 %i) nounwind { 7856 entry: 7857 %0 = add i64 %i, 65536 7858 %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0 7859 %2 = bitcast i32* %1 to i8* 7860 ret i8* %2 7861 ; LINUX-64-STATIC: cxm01: 7862 ; LINUX-64-STATIC: leaq xdst+262144(,%rdi,4), %rax 7863 ; LINUX-64-STATIC: ret 7864 7865 ; LINUX-32-STATIC: cxm01: 7866 ; LINUX-32-STATIC: movl 4(%esp), %eax 7867 ; LINUX-32-STATIC-NEXT: leal xdst+262144(,[[EAX]],4), %eax 7868 ; LINUX-32-STATIC-NEXT: ret 7869 7870 ; LINUX-32-PIC: cxm01: 7871 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7872 ; LINUX-32-PIC-NEXT: leal xdst+262144(,[[EAX]],4), %eax 7873 ; LINUX-32-PIC-NEXT: ret 7874 7875 ; LINUX-64-PIC: cxm01: 7876 ; LINUX-64-PIC: movq xdst@GOTPCREL(%rip), [[RAX:%r.x]] 7877 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7878 ; LINUX-64-PIC-NEXT: ret 7879 7880 ; DARWIN-32-STATIC: _cxm01: 7881 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7882 ; DARWIN-32-STATIC-NEXT: leal _xdst+262144(,[[EAX]],4), %eax 7883 ; DARWIN-32-STATIC-NEXT: ret 7884 7885 ; DARWIN-32-DYNAMIC: _cxm01: 7886 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 7887 ; DARWIN-32-DYNAMIC-NEXT: movl L_xdst$non_lazy_ptr, [[ECX:%e.x]] 7888 ; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 7889 ; DARWIN-32-DYNAMIC-NEXT: ret 7890 7891 ; DARWIN-32-PIC: _cxm01: 7892 ; DARWIN-32-PIC: calll L123$pb 7893 ; DARWIN-32-PIC-NEXT: L123$pb: 7894 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7895 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7896 ; DARWIN-32-PIC-NEXT: movl L_xdst$non_lazy_ptr-L123$pb([[EAX]]), [[EAX:%e.x]] 7897 ; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax 7898 ; DARWIN-32-PIC-NEXT: ret 7899 7900 ; DARWIN-64-STATIC: _cxm01: 7901 ; DARWIN-64-STATIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 7902 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7903 ; DARWIN-64-STATIC-NEXT: ret 7904 7905 ; DARWIN-64-DYNAMIC: _cxm01: 7906 ; DARWIN-64-DYNAMIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 7907 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7908 ; DARWIN-64-DYNAMIC-NEXT: ret 7909 7910 ; DARWIN-64-PIC: _cxm01: 7911 ; DARWIN-64-PIC: movq _xdst@GOTPCREL(%rip), [[RAX:%r.x]] 7912 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7913 ; DARWIN-64-PIC-NEXT: ret 7914 } 7915 7916 define i8* @cam02(i64 %i) nounwind { 7917 entry: 7918 %0 = load i32** @ptr, align 8 7919 %1 = add i64 %i, 65536 7920 %2 = getelementptr i32* %0, i64 %1 7921 %3 = bitcast i32* %2 to i8* 7922 ret i8* %3 7923 ; LINUX-64-STATIC: cam02: 7924 ; LINUX-64-STATIC: movq ptr(%rip), [[RAX:%r.x]] 7925 ; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax 7926 ; LINUX-64-STATIC: ret 7927 7928 ; LINUX-32-STATIC: cam02: 7929 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7930 ; LINUX-32-STATIC-NEXT: movl ptr, [[ECX:%e.x]] 7931 ; LINUX-32-STATIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 7932 ; LINUX-32-STATIC-NEXT: ret 7933 7934 ; LINUX-32-PIC: cam02: 7935 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 7936 ; LINUX-32-PIC-NEXT: movl ptr, [[ECX:%e.x]] 7937 ; LINUX-32-PIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 7938 ; LINUX-32-PIC-NEXT: ret 7939 7940 ; LINUX-64-PIC: cam02: 7941 ; LINUX-64-PIC: movq ptr@GOTPCREL(%rip), [[RAX:%r.x]] 7942 ; LINUX-64-PIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]] 7943 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7944 ; LINUX-64-PIC-NEXT: ret 7945 7946 ; DARWIN-32-STATIC: _cam02: 7947 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 7948 ; DARWIN-32-STATIC-NEXT: movl _ptr, [[ECX:%e.x]] 7949 ; DARWIN-32-STATIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 7950 ; DARWIN-32-STATIC-NEXT: ret 7951 7952 ; DARWIN-32-DYNAMIC: _cam02: 7953 ; DARWIN-32-DYNAMIC: movl L_ptr$non_lazy_ptr, [[EAX:%e.x]] 7954 ; DARWIN-32-DYNAMIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 7955 ; DARWIN-32-DYNAMIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7956 ; DARWIN-32-DYNAMIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax 7957 ; DARWIN-32-DYNAMIC-NEXT: ret 7958 7959 ; DARWIN-32-PIC: _cam02: 7960 ; DARWIN-32-PIC: calll L124$pb 7961 ; DARWIN-32-PIC-NEXT: L124$pb: 7962 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 7963 ; DARWIN-32-PIC-NEXT: movl L_ptr$non_lazy_ptr-L124$pb([[EAX]]), [[EAX:%e.x]] 7964 ; DARWIN-32-PIC-NEXT: movl ([[EAX]]), [[EAX:%e.x]] 7965 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 7966 ; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax 7967 ; DARWIN-32-PIC-NEXT: ret 7968 7969 ; DARWIN-64-STATIC: _cam02: 7970 ; DARWIN-64-STATIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 7971 ; DARWIN-64-STATIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]] 7972 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7973 ; DARWIN-64-STATIC-NEXT: ret 7974 7975 ; DARWIN-64-DYNAMIC: _cam02: 7976 ; DARWIN-64-DYNAMIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 7977 ; DARWIN-64-DYNAMIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]] 7978 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7979 ; DARWIN-64-DYNAMIC-NEXT: ret 7980 7981 ; DARWIN-64-PIC: _cam02: 7982 ; DARWIN-64-PIC: movq _ptr@GOTPCREL(%rip), [[RAX:%r.x]] 7983 ; DARWIN-64-PIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]] 7984 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 7985 ; DARWIN-64-PIC-NEXT: ret 7986 } 7987 7988 define i8* @cam03(i64 %i) nounwind { 7989 entry: 7990 %0 = add i64 %i, 65536 7991 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0 7992 %2 = bitcast i32* %1 to i8* 7993 ret i8* %2 7994 ; LINUX-64-STATIC: cam03: 7995 ; LINUX-64-STATIC: leaq dsrc+262144(,%rdi,4), %rax 7996 ; LINUX-64-STATIC: ret 7997 7998 ; LINUX-32-STATIC: cam03: 7999 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 8000 ; LINUX-32-STATIC-NEXT: leal dsrc+262144(,[[EAX]],4), %eax 8001 ; LINUX-32-STATIC-NEXT: ret 8002 8003 ; LINUX-32-PIC: cam03: 8004 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 8005 ; LINUX-32-PIC-NEXT: leal dsrc+262144(,[[EAX]],4), %eax 8006 ; LINUX-32-PIC-NEXT: ret 8007 8008 ; LINUX-64-PIC: cam03: 8009 ; LINUX-64-PIC: movq dsrc@GOTPCREL(%rip), [[RAX:%r.x]] 8010 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8011 ; LINUX-64-PIC-NEXT: ret 8012 8013 ; DARWIN-32-STATIC: _cam03: 8014 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 8015 ; DARWIN-32-STATIC-NEXT: leal _dsrc+262144(,[[EAX]],4), %eax 8016 ; DARWIN-32-STATIC-NEXT: ret 8017 8018 ; DARWIN-32-DYNAMIC: _cam03: 8019 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 8020 ; DARWIN-32-DYNAMIC-NEXT: leal _dsrc+262144(,[[EAX]],4), %eax 8021 ; DARWIN-32-DYNAMIC-NEXT: ret 8022 8023 ; DARWIN-32-PIC: _cam03: 8024 ; DARWIN-32-PIC: calll L125$pb 8025 ; DARWIN-32-PIC-NEXT: L125$pb: 8026 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 8027 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 8028 ; DARWIN-32-PIC-NEXT: leal (_dsrc-L125$pb)+262144([[EAX]],[[ECX]],4), %eax 8029 ; DARWIN-32-PIC-NEXT: ret 8030 8031 ; DARWIN-64-STATIC: _cam03: 8032 ; DARWIN-64-STATIC: leaq _dsrc(%rip), [[RAX:%r.x]] 8033 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8034 ; DARWIN-64-STATIC-NEXT: ret 8035 8036 ; DARWIN-64-DYNAMIC: _cam03: 8037 ; DARWIN-64-DYNAMIC: leaq _dsrc(%rip), [[RAX:%r.x]] 8038 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8039 ; DARWIN-64-DYNAMIC-NEXT: ret 8040 8041 ; DARWIN-64-PIC: _cam03: 8042 ; DARWIN-64-PIC: leaq _dsrc(%rip), [[RAX:%r.x]] 8043 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8044 ; DARWIN-64-PIC-NEXT: ret 8045 } 8046 8047 define i8* @cam04(i64 %i) nounwind { 8048 entry: 8049 %0 = add i64 %i, 65536 8050 %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0 8051 %2 = bitcast i32* %1 to i8* 8052 ret i8* %2 8053 ; LINUX-64-STATIC: cam04: 8054 ; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax 8055 ; LINUX-64-STATIC: ret 8056 8057 ; LINUX-32-STATIC: cam04: 8058 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 8059 ; LINUX-32-STATIC-NEXT: leal ddst+262144(,[[EAX]],4), %eax 8060 ; LINUX-32-STATIC-NEXT: ret 8061 8062 ; LINUX-32-PIC: cam04: 8063 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 8064 ; LINUX-32-PIC-NEXT: leal ddst+262144(,[[EAX]],4), %eax 8065 ; LINUX-32-PIC-NEXT: ret 8066 8067 ; LINUX-64-PIC: cam04: 8068 ; LINUX-64-PIC: movq ddst@GOTPCREL(%rip), [[RAX:%r.x]] 8069 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8070 ; LINUX-64-PIC-NEXT: ret 8071 8072 ; DARWIN-32-STATIC: _cam04: 8073 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 8074 ; DARWIN-32-STATIC-NEXT: leal _ddst+262144(,[[EAX]],4), %eax 8075 ; DARWIN-32-STATIC-NEXT: ret 8076 8077 ; DARWIN-32-DYNAMIC: _cam04: 8078 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 8079 ; DARWIN-32-DYNAMIC-NEXT: leal _ddst+262144(,[[EAX]],4), %eax 8080 ; DARWIN-32-DYNAMIC-NEXT: ret 8081 8082 ; DARWIN-32-PIC: _cam04: 8083 ; DARWIN-32-PIC: calll L126$pb 8084 ; DARWIN-32-PIC-NEXT: L126$pb: 8085 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 8086 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 8087 ; DARWIN-32-PIC-NEXT: leal (_ddst-L126$pb)+262144([[EAX]],[[ECX]],4), %eax 8088 ; DARWIN-32-PIC-NEXT: ret 8089 8090 ; DARWIN-64-STATIC: _cam04: 8091 ; DARWIN-64-STATIC: leaq _ddst(%rip), [[RAX:%r.x]] 8092 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8093 ; DARWIN-64-STATIC-NEXT: ret 8094 8095 ; DARWIN-64-DYNAMIC: _cam04: 8096 ; DARWIN-64-DYNAMIC: leaq _ddst(%rip), [[RAX:%r.x]] 8097 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8098 ; DARWIN-64-DYNAMIC-NEXT: ret 8099 8100 ; DARWIN-64-PIC: _cam04: 8101 ; DARWIN-64-PIC: leaq _ddst(%rip), [[RAX:%r.x]] 8102 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8103 ; DARWIN-64-PIC-NEXT: ret 8104 } 8105 8106 define i8* @cam05(i64 %i) nounwind { 8107 entry: 8108 %0 = load i32** @dptr, align 8 8109 %1 = add i64 %i, 65536 8110 %2 = getelementptr i32* %0, i64 %1 8111 %3 = bitcast i32* %2 to i8* 8112 ret i8* %3 8113 ; LINUX-64-STATIC: cam05: 8114 ; LINUX-64-STATIC: movq dptr(%rip), [[RAX:%r.x]] 8115 ; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax 8116 ; LINUX-64-STATIC: ret 8117 8118 ; LINUX-32-STATIC: cam05: 8119 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 8120 ; LINUX-32-STATIC-NEXT: movl dptr, [[ECX:%e.x]] 8121 ; LINUX-32-STATIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 8122 ; LINUX-32-STATIC-NEXT: ret 8123 8124 ; LINUX-32-PIC: cam05: 8125 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 8126 ; LINUX-32-PIC-NEXT: movl dptr, [[ECX:%e.x]] 8127 ; LINUX-32-PIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 8128 ; LINUX-32-PIC-NEXT: ret 8129 8130 ; LINUX-64-PIC: cam05: 8131 ; LINUX-64-PIC: movq dptr@GOTPCREL(%rip), [[RAX:%r.x]] 8132 ; LINUX-64-PIC-NEXT: movq ([[RAX]]), [[RAX:%r.x]] 8133 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8134 ; LINUX-64-PIC-NEXT: ret 8135 8136 ; DARWIN-32-STATIC: _cam05: 8137 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 8138 ; DARWIN-32-STATIC-NEXT: movl _dptr, [[ECX:%e.x]] 8139 ; DARWIN-32-STATIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 8140 ; DARWIN-32-STATIC-NEXT: ret 8141 8142 ; DARWIN-32-DYNAMIC: _cam05: 8143 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 8144 ; DARWIN-32-DYNAMIC-NEXT: movl _dptr, [[ECX:%e.x]] 8145 ; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 8146 ; DARWIN-32-DYNAMIC-NEXT: ret 8147 8148 ; DARWIN-32-PIC: _cam05: 8149 ; DARWIN-32-PIC: calll L127$pb 8150 ; DARWIN-32-PIC-NEXT: L127$pb: 8151 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 8152 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 8153 ; DARWIN-32-PIC-NEXT: movl _dptr-L127$pb([[EAX]]), [[EAX:%e.x]] 8154 ; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax 8155 ; DARWIN-32-PIC-NEXT: ret 8156 8157 ; DARWIN-64-STATIC: _cam05: 8158 ; DARWIN-64-STATIC: movq _dptr(%rip), [[RAX:%r.x]] 8159 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8160 ; DARWIN-64-STATIC-NEXT: ret 8161 8162 ; DARWIN-64-DYNAMIC: _cam05: 8163 ; DARWIN-64-DYNAMIC: movq _dptr(%rip), [[RAX:%r.x]] 8164 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8165 ; DARWIN-64-DYNAMIC-NEXT: ret 8166 8167 ; DARWIN-64-PIC: _cam05: 8168 ; DARWIN-64-PIC: movq _dptr(%rip), [[RAX:%r.x]] 8169 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8170 ; DARWIN-64-PIC-NEXT: ret 8171 } 8172 8173 define i8* @cam06(i64 %i) nounwind { 8174 entry: 8175 %0 = add i64 %i, 65536 8176 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0 8177 %2 = bitcast i32* %1 to i8* 8178 ret i8* %2 8179 ; LINUX-64-STATIC: cam06: 8180 ; LINUX-64-STATIC: leaq lsrc+262144(,%rdi,4), %rax 8181 ; LINUX-64-STATIC: ret 8182 8183 ; LINUX-32-STATIC: cam06: 8184 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 8185 ; LINUX-32-STATIC-NEXT: leal lsrc+262144(,[[EAX]],4), %eax 8186 ; LINUX-32-STATIC-NEXT: ret 8187 8188 ; LINUX-32-PIC: cam06: 8189 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 8190 ; LINUX-32-PIC-NEXT: leal lsrc+262144(,[[EAX]],4), %eax 8191 ; LINUX-32-PIC-NEXT: ret 8192 8193 ; LINUX-64-PIC: cam06: 8194 ; LINUX-64-PIC: leaq lsrc(%rip), [[RAX:%r.x]] 8195 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8196 ; LINUX-64-PIC-NEXT: ret 8197 8198 ; DARWIN-32-STATIC: _cam06: 8199 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 8200 ; DARWIN-32-STATIC-NEXT: leal _lsrc+262144(,[[EAX]],4), %eax 8201 ; DARWIN-32-STATIC-NEXT: ret 8202 8203 ; DARWIN-32-DYNAMIC: _cam06: 8204 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 8205 ; DARWIN-32-DYNAMIC-NEXT: leal _lsrc+262144(,[[EAX]],4), %eax 8206 ; DARWIN-32-DYNAMIC-NEXT: ret 8207 8208 ; DARWIN-32-PIC: _cam06: 8209 ; DARWIN-32-PIC: calll L128$pb 8210 ; DARWIN-32-PIC-NEXT: L128$pb: 8211 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 8212 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 8213 ; DARWIN-32-PIC-NEXT: leal (_lsrc-L128$pb)+262144([[EAX]],[[ECX]],4), %eax 8214 ; DARWIN-32-PIC-NEXT: ret 8215 8216 ; DARWIN-64-STATIC: _cam06: 8217 ; DARWIN-64-STATIC: leaq _lsrc(%rip), [[RAX:%r.x]] 8218 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8219 ; DARWIN-64-STATIC-NEXT: ret 8220 8221 ; DARWIN-64-DYNAMIC: _cam06: 8222 ; DARWIN-64-DYNAMIC: leaq _lsrc(%rip), [[RAX:%r.x]] 8223 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8224 ; DARWIN-64-DYNAMIC-NEXT: ret 8225 8226 ; DARWIN-64-PIC: _cam06: 8227 ; DARWIN-64-PIC: leaq _lsrc(%rip), [[RAX:%r.x]] 8228 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8229 ; DARWIN-64-PIC-NEXT: ret 8230 } 8231 8232 define i8* @cam07(i64 %i) nounwind { 8233 entry: 8234 %0 = add i64 %i, 65536 8235 %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0 8236 %2 = bitcast i32* %1 to i8* 8237 ret i8* %2 8238 ; LINUX-64-STATIC: cam07: 8239 ; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax 8240 ; LINUX-64-STATIC: ret 8241 8242 ; LINUX-32-STATIC: cam07: 8243 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 8244 ; LINUX-32-STATIC-NEXT: leal ldst+262144(,[[EAX]],4), %eax 8245 ; LINUX-32-STATIC-NEXT: ret 8246 8247 ; LINUX-32-PIC: cam07: 8248 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 8249 ; LINUX-32-PIC-NEXT: leal ldst+262144(,[[EAX]],4), %eax 8250 ; LINUX-32-PIC-NEXT: ret 8251 8252 ; LINUX-64-PIC: cam07: 8253 ; LINUX-64-PIC: leaq ldst(%rip), [[RAX:%r.x]] 8254 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8255 ; LINUX-64-PIC-NEXT: ret 8256 8257 ; DARWIN-32-STATIC: _cam07: 8258 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 8259 ; DARWIN-32-STATIC-NEXT: leal _ldst+262144(,[[EAX]],4), %eax 8260 ; DARWIN-32-STATIC-NEXT: ret 8261 8262 ; DARWIN-32-DYNAMIC: _cam07: 8263 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 8264 ; DARWIN-32-DYNAMIC-NEXT: leal _ldst+262144(,[[EAX]],4), %eax 8265 ; DARWIN-32-DYNAMIC-NEXT: ret 8266 8267 ; DARWIN-32-PIC: _cam07: 8268 ; DARWIN-32-PIC: calll L129$pb 8269 ; DARWIN-32-PIC-NEXT: L129$pb: 8270 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 8271 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 8272 ; DARWIN-32-PIC-NEXT: leal (_ldst-L129$pb)+262144([[EAX]],[[ECX]],4), %eax 8273 ; DARWIN-32-PIC-NEXT: ret 8274 8275 ; DARWIN-64-STATIC: _cam07: 8276 ; DARWIN-64-STATIC: leaq _ldst(%rip), [[RAX:%r.x]] 8277 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8278 ; DARWIN-64-STATIC-NEXT: ret 8279 8280 ; DARWIN-64-DYNAMIC: _cam07: 8281 ; DARWIN-64-DYNAMIC: leaq _ldst(%rip), [[RAX:%r.x]] 8282 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8283 ; DARWIN-64-DYNAMIC-NEXT: ret 8284 8285 ; DARWIN-64-PIC: _cam07: 8286 ; DARWIN-64-PIC: leaq _ldst(%rip), [[RAX:%r.x]] 8287 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8288 ; DARWIN-64-PIC-NEXT: ret 8289 } 8290 8291 define i8* @cam08(i64 %i) nounwind { 8292 entry: 8293 %0 = load i32** @lptr, align 8 8294 %1 = add i64 %i, 65536 8295 %2 = getelementptr i32* %0, i64 %1 8296 %3 = bitcast i32* %2 to i8* 8297 ret i8* %3 8298 ; LINUX-64-STATIC: cam08: 8299 ; LINUX-64-STATIC: movq lptr(%rip), [[RAX:%r.x]] 8300 ; LINUX-64-STATIC: leaq 262144([[RAX]],%rdi,4), %rax 8301 ; LINUX-64-STATIC: ret 8302 8303 ; LINUX-32-STATIC: cam08: 8304 ; LINUX-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 8305 ; LINUX-32-STATIC-NEXT: movl lptr, [[ECX:%e.x]] 8306 ; LINUX-32-STATIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 8307 ; LINUX-32-STATIC-NEXT: ret 8308 8309 ; LINUX-32-PIC: cam08: 8310 ; LINUX-32-PIC: movl 4(%esp), [[EAX:%e.x]] 8311 ; LINUX-32-PIC-NEXT: movl lptr, [[ECX:%e.x]] 8312 ; LINUX-32-PIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 8313 ; LINUX-32-PIC-NEXT: ret 8314 8315 ; LINUX-64-PIC: cam08: 8316 ; LINUX-64-PIC: movq lptr(%rip), [[RAX:%r.x]] 8317 ; LINUX-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8318 ; LINUX-64-PIC-NEXT: ret 8319 8320 ; DARWIN-32-STATIC: _cam08: 8321 ; DARWIN-32-STATIC: movl 4(%esp), [[EAX:%e.x]] 8322 ; DARWIN-32-STATIC-NEXT: movl _lptr, [[ECX:%e.x]] 8323 ; DARWIN-32-STATIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 8324 ; DARWIN-32-STATIC-NEXT: ret 8325 8326 ; DARWIN-32-DYNAMIC: _cam08: 8327 ; DARWIN-32-DYNAMIC: movl 4(%esp), [[EAX:%e.x]] 8328 ; DARWIN-32-DYNAMIC-NEXT: movl _lptr, [[ECX:%e.x]] 8329 ; DARWIN-32-DYNAMIC-NEXT: leal 262144([[ECX]],[[EAX]],4), %eax 8330 ; DARWIN-32-DYNAMIC-NEXT: ret 8331 8332 ; DARWIN-32-PIC: _cam08: 8333 ; DARWIN-32-PIC: calll L130$pb 8334 ; DARWIN-32-PIC-NEXT: L130$pb: 8335 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 8336 ; DARWIN-32-PIC-NEXT: movl 4(%esp), [[ECX:%e.x]] 8337 ; DARWIN-32-PIC-NEXT: movl _lptr-L130$pb([[EAX]]), [[EAX:%e.x]] 8338 ; DARWIN-32-PIC-NEXT: leal 262144([[EAX]],[[ECX]],4), %eax 8339 ; DARWIN-32-PIC-NEXT: ret 8340 8341 ; DARWIN-64-STATIC: _cam08: 8342 ; DARWIN-64-STATIC: movq _lptr(%rip), [[RAX:%r.x]] 8343 ; DARWIN-64-STATIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8344 ; DARWIN-64-STATIC-NEXT: ret 8345 8346 ; DARWIN-64-DYNAMIC: _cam08: 8347 ; DARWIN-64-DYNAMIC: movq _lptr(%rip), [[RAX:%r.x]] 8348 ; DARWIN-64-DYNAMIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8349 ; DARWIN-64-DYNAMIC-NEXT: ret 8350 8351 ; DARWIN-64-PIC: _cam08: 8352 ; DARWIN-64-PIC: movq _lptr(%rip), [[RAX:%r.x]] 8353 ; DARWIN-64-PIC-NEXT: leaq 262144([[RAX]],%rdi,4), %rax 8354 ; DARWIN-64-PIC-NEXT: ret 8355 } 8356 8357 define void @lcallee() nounwind { 8358 entry: 8359 call void @x() nounwind 8360 call void @x() nounwind 8361 call void @x() nounwind 8362 call void @x() nounwind 8363 call void @x() nounwind 8364 call void @x() nounwind 8365 call void @x() nounwind 8366 ret void 8367 ; LINUX-64-STATIC: lcallee: 8368 ; LINUX-64-STATIC: callq x 8369 ; LINUX-64-STATIC: callq x 8370 ; LINUX-64-STATIC: callq x 8371 ; LINUX-64-STATIC: callq x 8372 ; LINUX-64-STATIC: callq x 8373 ; LINUX-64-STATIC: callq x 8374 ; LINUX-64-STATIC: callq x 8375 ; LINUX-64-STATIC: ret 8376 8377 ; LINUX-32-STATIC: lcallee: 8378 ; LINUX-32-STATIC: subl 8379 ; LINUX-32-STATIC-NEXT: calll x 8380 ; LINUX-32-STATIC-NEXT: calll x 8381 ; LINUX-32-STATIC-NEXT: calll x 8382 ; LINUX-32-STATIC-NEXT: calll x 8383 ; LINUX-32-STATIC-NEXT: calll x 8384 ; LINUX-32-STATIC-NEXT: calll x 8385 ; LINUX-32-STATIC-NEXT: calll x 8386 ; LINUX-32-STATIC-NEXT: addl 8387 ; LINUX-32-STATIC-NEXT: ret 8388 8389 ; LINUX-32-PIC: lcallee: 8390 ; LINUX-32-PIC: subl 8391 ; LINUX-32-PIC-NEXT: calll x 8392 ; LINUX-32-PIC-NEXT: calll x 8393 ; LINUX-32-PIC-NEXT: calll x 8394 ; LINUX-32-PIC-NEXT: calll x 8395 ; LINUX-32-PIC-NEXT: calll x 8396 ; LINUX-32-PIC-NEXT: calll x 8397 ; LINUX-32-PIC-NEXT: calll x 8398 ; LINUX-32-PIC-NEXT: addl 8399 8400 ; LINUX-32-PIC-NEXT: ret 8401 8402 ; LINUX-64-PIC: lcallee: 8403 ; LINUX-64-PIC: pushq 8404 ; LINUX-64-PIC-NEXT: callq x@PLT 8405 ; LINUX-64-PIC-NEXT: callq x@PLT 8406 ; LINUX-64-PIC-NEXT: callq x@PLT 8407 ; LINUX-64-PIC-NEXT: callq x@PLT 8408 ; LINUX-64-PIC-NEXT: callq x@PLT 8409 ; LINUX-64-PIC-NEXT: callq x@PLT 8410 ; LINUX-64-PIC-NEXT: callq x@PLT 8411 ; LINUX-64-PIC-NEXT: popq 8412 ; LINUX-64-PIC-NEXT: ret 8413 8414 ; DARWIN-32-STATIC: _lcallee: 8415 ; DARWIN-32-STATIC: subl $12, %esp 8416 ; DARWIN-32-STATIC-NEXT: calll _x 8417 ; DARWIN-32-STATIC-NEXT: calll _x 8418 ; DARWIN-32-STATIC-NEXT: calll _x 8419 ; DARWIN-32-STATIC-NEXT: calll _x 8420 ; DARWIN-32-STATIC-NEXT: calll _x 8421 ; DARWIN-32-STATIC-NEXT: calll _x 8422 ; DARWIN-32-STATIC-NEXT: calll _x 8423 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 8424 ; DARWIN-32-STATIC-NEXT: ret 8425 8426 ; DARWIN-32-DYNAMIC: _lcallee: 8427 ; DARWIN-32-DYNAMIC: subl $12, %esp 8428 ; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub 8429 ; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub 8430 ; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub 8431 ; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub 8432 ; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub 8433 ; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub 8434 ; DARWIN-32-DYNAMIC-NEXT: calll L_x$stub 8435 ; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp 8436 ; DARWIN-32-DYNAMIC-NEXT: ret 8437 8438 ; DARWIN-32-PIC: _lcallee: 8439 ; DARWIN-32-PIC: subl $12, %esp 8440 ; DARWIN-32-PIC-NEXT: calll L_x$stub 8441 ; DARWIN-32-PIC-NEXT: calll L_x$stub 8442 ; DARWIN-32-PIC-NEXT: calll L_x$stub 8443 ; DARWIN-32-PIC-NEXT: calll L_x$stub 8444 ; DARWIN-32-PIC-NEXT: calll L_x$stub 8445 ; DARWIN-32-PIC-NEXT: calll L_x$stub 8446 ; DARWIN-32-PIC-NEXT: calll L_x$stub 8447 ; DARWIN-32-PIC-NEXT: addl $12, %esp 8448 ; DARWIN-32-PIC-NEXT: ret 8449 8450 ; DARWIN-64-STATIC: _lcallee: 8451 ; DARWIN-64-STATIC: pushq 8452 ; DARWIN-64-STATIC-NEXT: callq _x 8453 ; DARWIN-64-STATIC-NEXT: callq _x 8454 ; DARWIN-64-STATIC-NEXT: callq _x 8455 ; DARWIN-64-STATIC-NEXT: callq _x 8456 ; DARWIN-64-STATIC-NEXT: callq _x 8457 ; DARWIN-64-STATIC-NEXT: callq _x 8458 ; DARWIN-64-STATIC-NEXT: callq _x 8459 ; DARWIN-64-STATIC-NEXT: popq 8460 ; DARWIN-64-STATIC-NEXT: ret 8461 8462 ; DARWIN-64-DYNAMIC: _lcallee: 8463 ; DARWIN-64-DYNAMIC: pushq 8464 ; DARWIN-64-DYNAMIC-NEXT: callq _x 8465 ; DARWIN-64-DYNAMIC-NEXT: callq _x 8466 ; DARWIN-64-DYNAMIC-NEXT: callq _x 8467 ; DARWIN-64-DYNAMIC-NEXT: callq _x 8468 ; DARWIN-64-DYNAMIC-NEXT: callq _x 8469 ; DARWIN-64-DYNAMIC-NEXT: callq _x 8470 ; DARWIN-64-DYNAMIC-NEXT: callq _x 8471 ; DARWIN-64-DYNAMIC-NEXT: popq 8472 ; DARWIN-64-DYNAMIC-NEXT: ret 8473 8474 ; DARWIN-64-PIC: _lcallee: 8475 ; DARWIN-64-PIC: pushq 8476 ; DARWIN-64-PIC-NEXT: callq _x 8477 ; DARWIN-64-PIC-NEXT: callq _x 8478 ; DARWIN-64-PIC-NEXT: callq _x 8479 ; DARWIN-64-PIC-NEXT: callq _x 8480 ; DARWIN-64-PIC-NEXT: callq _x 8481 ; DARWIN-64-PIC-NEXT: callq _x 8482 ; DARWIN-64-PIC-NEXT: callq _x 8483 ; DARWIN-64-PIC-NEXT: popq 8484 ; DARWIN-64-PIC-NEXT: ret 8485 } 8486 8487 declare void @x() 8488 8489 define internal void @dcallee() nounwind { 8490 entry: 8491 call void @y() nounwind 8492 call void @y() nounwind 8493 call void @y() nounwind 8494 call void @y() nounwind 8495 call void @y() nounwind 8496 call void @y() nounwind 8497 call void @y() nounwind 8498 ret void 8499 ; LINUX-64-STATIC: dcallee: 8500 ; LINUX-64-STATIC: callq y 8501 ; LINUX-64-STATIC: callq y 8502 ; LINUX-64-STATIC: callq y 8503 ; LINUX-64-STATIC: callq y 8504 ; LINUX-64-STATIC: callq y 8505 ; LINUX-64-STATIC: callq y 8506 ; LINUX-64-STATIC: callq y 8507 ; LINUX-64-STATIC: ret 8508 8509 ; LINUX-32-STATIC: dcallee: 8510 ; LINUX-32-STATIC: subl 8511 ; LINUX-32-STATIC-NEXT: calll y 8512 ; LINUX-32-STATIC-NEXT: calll y 8513 ; LINUX-32-STATIC-NEXT: calll y 8514 ; LINUX-32-STATIC-NEXT: calll y 8515 ; LINUX-32-STATIC-NEXT: calll y 8516 ; LINUX-32-STATIC-NEXT: calll y 8517 ; LINUX-32-STATIC-NEXT: calll y 8518 ; LINUX-32-STATIC-NEXT: addl 8519 ; LINUX-32-STATIC-NEXT: ret 8520 8521 ; LINUX-32-PIC: dcallee: 8522 ; LINUX-32-PIC: subl 8523 ; LINUX-32-PIC-NEXT: calll y 8524 ; LINUX-32-PIC-NEXT: calll y 8525 ; LINUX-32-PIC-NEXT: calll y 8526 ; LINUX-32-PIC-NEXT: calll y 8527 ; LINUX-32-PIC-NEXT: calll y 8528 ; LINUX-32-PIC-NEXT: calll y 8529 ; LINUX-32-PIC-NEXT: calll y 8530 ; LINUX-32-PIC-NEXT: addl 8531 8532 ; LINUX-32-PIC-NEXT: ret 8533 8534 ; LINUX-64-PIC: dcallee: 8535 ; LINUX-64-PIC: pushq 8536 ; LINUX-64-PIC-NEXT: callq y@PLT 8537 ; LINUX-64-PIC-NEXT: callq y@PLT 8538 ; LINUX-64-PIC-NEXT: callq y@PLT 8539 ; LINUX-64-PIC-NEXT: callq y@PLT 8540 ; LINUX-64-PIC-NEXT: callq y@PLT 8541 ; LINUX-64-PIC-NEXT: callq y@PLT 8542 ; LINUX-64-PIC-NEXT: callq y@PLT 8543 ; LINUX-64-PIC-NEXT: popq 8544 ; LINUX-64-PIC-NEXT: ret 8545 8546 ; DARWIN-32-STATIC: _dcallee: 8547 ; DARWIN-32-STATIC: subl $12, %esp 8548 ; DARWIN-32-STATIC-NEXT: calll _y 8549 ; DARWIN-32-STATIC-NEXT: calll _y 8550 ; DARWIN-32-STATIC-NEXT: calll _y 8551 ; DARWIN-32-STATIC-NEXT: calll _y 8552 ; DARWIN-32-STATIC-NEXT: calll _y 8553 ; DARWIN-32-STATIC-NEXT: calll _y 8554 ; DARWIN-32-STATIC-NEXT: calll _y 8555 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 8556 ; DARWIN-32-STATIC-NEXT: ret 8557 8558 ; DARWIN-32-DYNAMIC: _dcallee: 8559 ; DARWIN-32-DYNAMIC: subl $12, %esp 8560 ; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub 8561 ; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub 8562 ; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub 8563 ; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub 8564 ; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub 8565 ; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub 8566 ; DARWIN-32-DYNAMIC-NEXT: calll L_y$stub 8567 ; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp 8568 ; DARWIN-32-DYNAMIC-NEXT: ret 8569 8570 ; DARWIN-32-PIC: _dcallee: 8571 ; DARWIN-32-PIC: subl $12, %esp 8572 ; DARWIN-32-PIC-NEXT: calll L_y$stub 8573 ; DARWIN-32-PIC-NEXT: calll L_y$stub 8574 ; DARWIN-32-PIC-NEXT: calll L_y$stub 8575 ; DARWIN-32-PIC-NEXT: calll L_y$stub 8576 ; DARWIN-32-PIC-NEXT: calll L_y$stub 8577 ; DARWIN-32-PIC-NEXT: calll L_y$stub 8578 ; DARWIN-32-PIC-NEXT: calll L_y$stub 8579 ; DARWIN-32-PIC-NEXT: addl $12, %esp 8580 ; DARWIN-32-PIC-NEXT: ret 8581 8582 ; DARWIN-64-STATIC: _dcallee: 8583 ; DARWIN-64-STATIC: pushq 8584 ; DARWIN-64-STATIC-NEXT: callq _y 8585 ; DARWIN-64-STATIC-NEXT: callq _y 8586 ; DARWIN-64-STATIC-NEXT: callq _y 8587 ; DARWIN-64-STATIC-NEXT: callq _y 8588 ; DARWIN-64-STATIC-NEXT: callq _y 8589 ; DARWIN-64-STATIC-NEXT: callq _y 8590 ; DARWIN-64-STATIC-NEXT: callq _y 8591 ; DARWIN-64-STATIC-NEXT: popq 8592 ; DARWIN-64-STATIC-NEXT: ret 8593 8594 ; DARWIN-64-DYNAMIC: _dcallee: 8595 ; DARWIN-64-DYNAMIC: pushq 8596 ; DARWIN-64-DYNAMIC-NEXT: callq _y 8597 ; DARWIN-64-DYNAMIC-NEXT: callq _y 8598 ; DARWIN-64-DYNAMIC-NEXT: callq _y 8599 ; DARWIN-64-DYNAMIC-NEXT: callq _y 8600 ; DARWIN-64-DYNAMIC-NEXT: callq _y 8601 ; DARWIN-64-DYNAMIC-NEXT: callq _y 8602 ; DARWIN-64-DYNAMIC-NEXT: callq _y 8603 ; DARWIN-64-DYNAMIC-NEXT: popq 8604 ; DARWIN-64-DYNAMIC-NEXT: ret 8605 8606 ; DARWIN-64-PIC: _dcallee: 8607 ; DARWIN-64-PIC: pushq 8608 ; DARWIN-64-PIC-NEXT: callq _y 8609 ; DARWIN-64-PIC-NEXT: callq _y 8610 ; DARWIN-64-PIC-NEXT: callq _y 8611 ; DARWIN-64-PIC-NEXT: callq _y 8612 ; DARWIN-64-PIC-NEXT: callq _y 8613 ; DARWIN-64-PIC-NEXT: callq _y 8614 ; DARWIN-64-PIC-NEXT: callq _y 8615 ; DARWIN-64-PIC-NEXT: popq 8616 ; DARWIN-64-PIC-NEXT: ret 8617 } 8618 8619 declare void @y() 8620 8621 define void ()* @address() nounwind { 8622 entry: 8623 ret void ()* @callee 8624 ; LINUX-64-STATIC: address: 8625 ; LINUX-64-STATIC: movl $callee, %eax 8626 ; LINUX-64-STATIC: ret 8627 8628 ; LINUX-32-STATIC: address: 8629 ; LINUX-32-STATIC: movl $callee, %eax 8630 ; LINUX-32-STATIC-NEXT: ret 8631 8632 ; LINUX-32-PIC: address: 8633 ; LINUX-32-PIC: movl $callee, %eax 8634 ; LINUX-32-PIC-NEXT: ret 8635 8636 ; LINUX-64-PIC: address: 8637 ; LINUX-64-PIC: movq callee@GOTPCREL(%rip), %rax 8638 ; LINUX-64-PIC-NEXT: ret 8639 8640 ; DARWIN-32-STATIC: _address: 8641 ; DARWIN-32-STATIC: movl $_callee, %eax 8642 ; DARWIN-32-STATIC-NEXT: ret 8643 8644 ; DARWIN-32-DYNAMIC: _address: 8645 ; DARWIN-32-DYNAMIC: movl L_callee$non_lazy_ptr, %eax 8646 ; DARWIN-32-DYNAMIC-NEXT: ret 8647 8648 ; DARWIN-32-PIC: _address: 8649 ; DARWIN-32-PIC: calll L133$pb 8650 ; DARWIN-32-PIC-NEXT: L133$pb: 8651 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 8652 ; DARWIN-32-PIC-NEXT: movl L_callee$non_lazy_ptr-L133$pb([[EAX]]), %eax 8653 ; DARWIN-32-PIC-NEXT: ret 8654 8655 ; DARWIN-64-STATIC: _address: 8656 ; DARWIN-64-STATIC: movq _callee@GOTPCREL(%rip), %rax 8657 ; DARWIN-64-STATIC-NEXT: ret 8658 8659 ; DARWIN-64-DYNAMIC: _address: 8660 ; DARWIN-64-DYNAMIC: movq _callee@GOTPCREL(%rip), %rax 8661 ; DARWIN-64-DYNAMIC-NEXT: ret 8662 8663 ; DARWIN-64-PIC: _address: 8664 ; DARWIN-64-PIC: movq _callee@GOTPCREL(%rip), %rax 8665 ; DARWIN-64-PIC-NEXT: ret 8666 } 8667 8668 declare void @callee() 8669 8670 define void ()* @laddress() nounwind { 8671 entry: 8672 ret void ()* @lcallee 8673 ; LINUX-64-STATIC: laddress: 8674 ; LINUX-64-STATIC: movl $lcallee, %eax 8675 ; LINUX-64-STATIC: ret 8676 8677 ; LINUX-32-STATIC: laddress: 8678 ; LINUX-32-STATIC: movl $lcallee, %eax 8679 ; LINUX-32-STATIC-NEXT: ret 8680 8681 ; LINUX-32-PIC: laddress: 8682 ; LINUX-32-PIC: movl $lcallee, %eax 8683 ; LINUX-32-PIC-NEXT: ret 8684 8685 ; LINUX-64-PIC: laddress: 8686 ; LINUX-64-PIC: movq lcallee@GOTPCREL(%rip), %rax 8687 ; LINUX-64-PIC-NEXT: ret 8688 8689 ; DARWIN-32-STATIC: _laddress: 8690 ; DARWIN-32-STATIC: movl $_lcallee, %eax 8691 ; DARWIN-32-STATIC-NEXT: ret 8692 8693 ; DARWIN-32-DYNAMIC: _laddress: 8694 ; DARWIN-32-DYNAMIC: movl $_lcallee, %eax 8695 ; DARWIN-32-DYNAMIC-NEXT: ret 8696 8697 ; DARWIN-32-PIC: _laddress: 8698 ; DARWIN-32-PIC: calll L134$pb 8699 ; DARWIN-32-PIC-NEXT: L134$pb: 8700 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 8701 ; DARWIN-32-PIC-NEXT: leal _lcallee-L134$pb([[EAX]]), %eax 8702 ; DARWIN-32-PIC-NEXT: ret 8703 8704 ; DARWIN-64-STATIC: _laddress: 8705 ; DARWIN-64-STATIC: leaq _lcallee(%rip), %rax 8706 ; DARWIN-64-STATIC-NEXT: ret 8707 8708 ; DARWIN-64-DYNAMIC: _laddress: 8709 ; DARWIN-64-DYNAMIC: leaq _lcallee(%rip), %rax 8710 ; DARWIN-64-DYNAMIC-NEXT: ret 8711 8712 ; DARWIN-64-PIC: _laddress: 8713 ; DARWIN-64-PIC: leaq _lcallee(%rip), %rax 8714 ; DARWIN-64-PIC-NEXT: ret 8715 } 8716 8717 define void ()* @daddress() nounwind { 8718 entry: 8719 ret void ()* @dcallee 8720 ; LINUX-64-STATIC: daddress: 8721 ; LINUX-64-STATIC: movl $dcallee, %eax 8722 ; LINUX-64-STATIC: ret 8723 8724 ; LINUX-32-STATIC: daddress: 8725 ; LINUX-32-STATIC: movl $dcallee, %eax 8726 ; LINUX-32-STATIC-NEXT: ret 8727 8728 ; LINUX-32-PIC: daddress: 8729 ; LINUX-32-PIC: movl $dcallee, %eax 8730 ; LINUX-32-PIC-NEXT: ret 8731 8732 ; LINUX-64-PIC: daddress: 8733 ; LINUX-64-PIC: leaq dcallee(%rip), %rax 8734 ; LINUX-64-PIC-NEXT: ret 8735 8736 ; DARWIN-32-STATIC: _daddress: 8737 ; DARWIN-32-STATIC: movl $_dcallee, %eax 8738 ; DARWIN-32-STATIC-NEXT: ret 8739 8740 ; DARWIN-32-DYNAMIC: _daddress: 8741 ; DARWIN-32-DYNAMIC: movl $_dcallee, %eax 8742 ; DARWIN-32-DYNAMIC-NEXT: ret 8743 8744 ; DARWIN-32-PIC: _daddress: 8745 ; DARWIN-32-PIC: calll L135$pb 8746 ; DARWIN-32-PIC-NEXT: L135$pb: 8747 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 8748 ; DARWIN-32-PIC-NEXT: leal _dcallee-L135$pb([[EAX]]), %eax 8749 ; DARWIN-32-PIC-NEXT: ret 8750 8751 ; DARWIN-64-STATIC: _daddress: 8752 ; DARWIN-64-STATIC: leaq _dcallee(%rip), %rax 8753 ; DARWIN-64-STATIC-NEXT: ret 8754 8755 ; DARWIN-64-DYNAMIC: _daddress: 8756 ; DARWIN-64-DYNAMIC: leaq _dcallee(%rip), %rax 8757 ; DARWIN-64-DYNAMIC-NEXT: ret 8758 8759 ; DARWIN-64-PIC: _daddress: 8760 ; DARWIN-64-PIC: leaq _dcallee(%rip), %rax 8761 ; DARWIN-64-PIC-NEXT: ret 8762 } 8763 8764 define void @caller() nounwind { 8765 entry: 8766 call void @callee() nounwind 8767 call void @callee() nounwind 8768 ret void 8769 ; LINUX-64-STATIC: caller: 8770 ; LINUX-64-STATIC: callq callee 8771 ; LINUX-64-STATIC: callq callee 8772 ; LINUX-64-STATIC: ret 8773 8774 ; LINUX-32-STATIC: caller: 8775 ; LINUX-32-STATIC: subl 8776 ; LINUX-32-STATIC-NEXT: calll callee 8777 ; LINUX-32-STATIC-NEXT: calll callee 8778 ; LINUX-32-STATIC-NEXT: addl 8779 ; LINUX-32-STATIC-NEXT: ret 8780 8781 ; LINUX-32-PIC: caller: 8782 ; LINUX-32-PIC: subl 8783 ; LINUX-32-PIC-NEXT: calll callee 8784 ; LINUX-32-PIC-NEXT: calll callee 8785 ; LINUX-32-PIC-NEXT: addl 8786 8787 ; LINUX-32-PIC-NEXT: ret 8788 8789 ; LINUX-64-PIC: caller: 8790 ; LINUX-64-PIC: pushq 8791 ; LINUX-64-PIC-NEXT: callq callee@PLT 8792 ; LINUX-64-PIC-NEXT: callq callee@PLT 8793 ; LINUX-64-PIC-NEXT: popq 8794 ; LINUX-64-PIC-NEXT: ret 8795 8796 ; DARWIN-32-STATIC: _caller: 8797 ; DARWIN-32-STATIC: subl $12, %esp 8798 ; DARWIN-32-STATIC-NEXT: calll _callee 8799 ; DARWIN-32-STATIC-NEXT: calll _callee 8800 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 8801 ; DARWIN-32-STATIC-NEXT: ret 8802 8803 ; DARWIN-32-DYNAMIC: _caller: 8804 ; DARWIN-32-DYNAMIC: subl $12, %esp 8805 ; DARWIN-32-DYNAMIC-NEXT: calll L_callee$stub 8806 ; DARWIN-32-DYNAMIC-NEXT: calll L_callee$stub 8807 ; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp 8808 ; DARWIN-32-DYNAMIC-NEXT: ret 8809 8810 ; DARWIN-32-PIC: _caller: 8811 ; DARWIN-32-PIC: subl $12, %esp 8812 ; DARWIN-32-PIC-NEXT: calll L_callee$stub 8813 ; DARWIN-32-PIC-NEXT: calll L_callee$stub 8814 ; DARWIN-32-PIC-NEXT: addl $12, %esp 8815 ; DARWIN-32-PIC-NEXT: ret 8816 8817 ; DARWIN-64-STATIC: _caller: 8818 ; DARWIN-64-STATIC: pushq 8819 ; DARWIN-64-STATIC-NEXT: callq _callee 8820 ; DARWIN-64-STATIC-NEXT: callq _callee 8821 ; DARWIN-64-STATIC-NEXT: popq 8822 ; DARWIN-64-STATIC-NEXT: ret 8823 8824 ; DARWIN-64-DYNAMIC: _caller: 8825 ; DARWIN-64-DYNAMIC: pushq 8826 ; DARWIN-64-DYNAMIC-NEXT: callq _callee 8827 ; DARWIN-64-DYNAMIC-NEXT: callq _callee 8828 ; DARWIN-64-DYNAMIC-NEXT: popq 8829 ; DARWIN-64-DYNAMIC-NEXT: ret 8830 8831 ; DARWIN-64-PIC: _caller: 8832 ; DARWIN-64-PIC: pushq 8833 ; DARWIN-64-PIC-NEXT: callq _callee 8834 ; DARWIN-64-PIC-NEXT: callq _callee 8835 ; DARWIN-64-PIC-NEXT: popq 8836 ; DARWIN-64-PIC-NEXT: ret 8837 } 8838 8839 define void @dcaller() nounwind { 8840 entry: 8841 call void @dcallee() nounwind 8842 call void @dcallee() nounwind 8843 ret void 8844 ; LINUX-64-STATIC: dcaller: 8845 ; LINUX-64-STATIC: callq dcallee 8846 ; LINUX-64-STATIC: callq dcallee 8847 ; LINUX-64-STATIC: ret 8848 8849 ; LINUX-32-STATIC: dcaller: 8850 ; LINUX-32-STATIC: subl 8851 ; LINUX-32-STATIC-NEXT: calll dcallee 8852 ; LINUX-32-STATIC-NEXT: calll dcallee 8853 ; LINUX-32-STATIC-NEXT: addl 8854 ; LINUX-32-STATIC-NEXT: ret 8855 8856 ; LINUX-32-PIC: dcaller: 8857 ; LINUX-32-PIC: subl 8858 ; LINUX-32-PIC-NEXT: calll dcallee 8859 ; LINUX-32-PIC-NEXT: calll dcallee 8860 ; LINUX-32-PIC-NEXT: addl 8861 8862 ; LINUX-32-PIC-NEXT: ret 8863 8864 ; LINUX-64-PIC: dcaller: 8865 ; LINUX-64-PIC: pushq 8866 ; LINUX-64-PIC-NEXT: callq dcallee 8867 ; LINUX-64-PIC-NEXT: callq dcallee 8868 ; LINUX-64-PIC-NEXT: popq 8869 ; LINUX-64-PIC-NEXT: ret 8870 8871 ; DARWIN-32-STATIC: _dcaller: 8872 ; DARWIN-32-STATIC: subl $12, %esp 8873 ; DARWIN-32-STATIC-NEXT: calll _dcallee 8874 ; DARWIN-32-STATIC-NEXT: calll _dcallee 8875 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 8876 ; DARWIN-32-STATIC-NEXT: ret 8877 8878 ; DARWIN-32-DYNAMIC: _dcaller: 8879 ; DARWIN-32-DYNAMIC: subl $12, %esp 8880 ; DARWIN-32-DYNAMIC-NEXT: calll _dcallee 8881 ; DARWIN-32-DYNAMIC-NEXT: calll _dcallee 8882 ; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp 8883 ; DARWIN-32-DYNAMIC-NEXT: ret 8884 8885 ; DARWIN-32-PIC: _dcaller: 8886 ; DARWIN-32-PIC: subl $12, %esp 8887 ; DARWIN-32-PIC-NEXT: calll _dcallee 8888 ; DARWIN-32-PIC-NEXT: calll _dcallee 8889 ; DARWIN-32-PIC-NEXT: addl $12, %esp 8890 ; DARWIN-32-PIC-NEXT: ret 8891 8892 ; DARWIN-64-STATIC: _dcaller: 8893 ; DARWIN-64-STATIC: pushq 8894 ; DARWIN-64-STATIC-NEXT: callq _dcallee 8895 ; DARWIN-64-STATIC-NEXT: callq _dcallee 8896 ; DARWIN-64-STATIC-NEXT: popq 8897 ; DARWIN-64-STATIC-NEXT: ret 8898 8899 ; DARWIN-64-DYNAMIC: _dcaller: 8900 ; DARWIN-64-DYNAMIC: pushq 8901 ; DARWIN-64-DYNAMIC-NEXT: callq _dcallee 8902 ; DARWIN-64-DYNAMIC-NEXT: callq _dcallee 8903 ; DARWIN-64-DYNAMIC-NEXT: popq 8904 ; DARWIN-64-DYNAMIC-NEXT: ret 8905 8906 ; DARWIN-64-PIC: _dcaller: 8907 ; DARWIN-64-PIC: pushq 8908 ; DARWIN-64-PIC-NEXT: callq _dcallee 8909 ; DARWIN-64-PIC-NEXT: callq _dcallee 8910 ; DARWIN-64-PIC-NEXT: popq 8911 ; DARWIN-64-PIC-NEXT: ret 8912 } 8913 8914 define void @lcaller() nounwind { 8915 entry: 8916 call void @lcallee() nounwind 8917 call void @lcallee() nounwind 8918 ret void 8919 ; LINUX-64-STATIC: lcaller: 8920 ; LINUX-64-STATIC: callq lcallee 8921 ; LINUX-64-STATIC: callq lcallee 8922 ; LINUX-64-STATIC: ret 8923 8924 ; LINUX-32-STATIC: lcaller: 8925 ; LINUX-32-STATIC: subl 8926 ; LINUX-32-STATIC-NEXT: calll lcallee 8927 ; LINUX-32-STATIC-NEXT: calll lcallee 8928 ; LINUX-32-STATIC-NEXT: addl 8929 ; LINUX-32-STATIC-NEXT: ret 8930 8931 ; LINUX-32-PIC: lcaller: 8932 ; LINUX-32-PIC: subl 8933 ; LINUX-32-PIC-NEXT: calll lcallee 8934 ; LINUX-32-PIC-NEXT: calll lcallee 8935 ; LINUX-32-PIC-NEXT: addl 8936 8937 ; LINUX-32-PIC-NEXT: ret 8938 8939 ; LINUX-64-PIC: lcaller: 8940 ; LINUX-64-PIC: pushq 8941 ; LINUX-64-PIC-NEXT: callq lcallee@PLT 8942 ; LINUX-64-PIC-NEXT: callq lcallee@PLT 8943 ; LINUX-64-PIC-NEXT: popq 8944 ; LINUX-64-PIC-NEXT: ret 8945 8946 ; DARWIN-32-STATIC: _lcaller: 8947 ; DARWIN-32-STATIC: subl $12, %esp 8948 ; DARWIN-32-STATIC-NEXT: calll _lcallee 8949 ; DARWIN-32-STATIC-NEXT: calll _lcallee 8950 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 8951 ; DARWIN-32-STATIC-NEXT: ret 8952 8953 ; DARWIN-32-DYNAMIC: _lcaller: 8954 ; DARWIN-32-DYNAMIC: subl $12, %esp 8955 ; DARWIN-32-DYNAMIC-NEXT: calll _lcallee 8956 ; DARWIN-32-DYNAMIC-NEXT: calll _lcallee 8957 ; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp 8958 ; DARWIN-32-DYNAMIC-NEXT: ret 8959 8960 ; DARWIN-32-PIC: _lcaller: 8961 ; DARWIN-32-PIC: subl $12, %esp 8962 ; DARWIN-32-PIC-NEXT: calll _lcallee 8963 ; DARWIN-32-PIC-NEXT: calll _lcallee 8964 ; DARWIN-32-PIC-NEXT: addl $12, %esp 8965 ; DARWIN-32-PIC-NEXT: ret 8966 8967 ; DARWIN-64-STATIC: _lcaller: 8968 ; DARWIN-64-STATIC: pushq 8969 ; DARWIN-64-STATIC-NEXT: callq _lcallee 8970 ; DARWIN-64-STATIC-NEXT: callq _lcallee 8971 ; DARWIN-64-STATIC-NEXT: popq 8972 ; DARWIN-64-STATIC-NEXT: ret 8973 8974 ; DARWIN-64-DYNAMIC: _lcaller: 8975 ; DARWIN-64-DYNAMIC: pushq 8976 ; DARWIN-64-DYNAMIC-NEXT: callq _lcallee 8977 ; DARWIN-64-DYNAMIC-NEXT: callq _lcallee 8978 ; DARWIN-64-DYNAMIC-NEXT: popq 8979 ; DARWIN-64-DYNAMIC-NEXT: ret 8980 8981 ; DARWIN-64-PIC: _lcaller: 8982 ; DARWIN-64-PIC: pushq 8983 ; DARWIN-64-PIC-NEXT: callq _lcallee 8984 ; DARWIN-64-PIC-NEXT: callq _lcallee 8985 ; DARWIN-64-PIC-NEXT: popq 8986 ; DARWIN-64-PIC-NEXT: ret 8987 } 8988 8989 define void @tailcaller() nounwind { 8990 entry: 8991 call void @callee() nounwind 8992 ret void 8993 ; LINUX-64-STATIC: tailcaller: 8994 ; LINUX-64-STATIC: callq callee 8995 ; LINUX-64-STATIC: ret 8996 8997 ; LINUX-32-STATIC: tailcaller: 8998 ; LINUX-32-STATIC: subl 8999 ; LINUX-32-STATIC-NEXT: calll callee 9000 ; LINUX-32-STATIC-NEXT: addl 9001 ; LINUX-32-STATIC-NEXT: ret 9002 9003 ; LINUX-32-PIC: tailcaller: 9004 ; LINUX-32-PIC: subl 9005 ; LINUX-32-PIC-NEXT: calll callee 9006 ; LINUX-32-PIC-NEXT: addl 9007 9008 ; LINUX-32-PIC-NEXT: ret 9009 9010 ; LINUX-64-PIC: tailcaller: 9011 ; LINUX-64-PIC: pushq 9012 ; LINUX-64-PIC-NEXT: callq callee@PLT 9013 ; LINUX-64-PIC-NEXT: popq 9014 ; LINUX-64-PIC-NEXT: ret 9015 9016 ; DARWIN-32-STATIC: _tailcaller: 9017 ; DARWIN-32-STATIC: subl $12, %esp 9018 ; DARWIN-32-STATIC-NEXT: calll _callee 9019 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 9020 ; DARWIN-32-STATIC-NEXT: ret 9021 9022 ; DARWIN-32-DYNAMIC: _tailcaller: 9023 ; DARWIN-32-DYNAMIC: subl $12, %esp 9024 ; DARWIN-32-DYNAMIC-NEXT: calll L_callee$stub 9025 ; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp 9026 ; DARWIN-32-DYNAMIC-NEXT: ret 9027 9028 ; DARWIN-32-PIC: _tailcaller: 9029 ; DARWIN-32-PIC: subl $12, %esp 9030 ; DARWIN-32-PIC-NEXT: calll L_callee$stub 9031 ; DARWIN-32-PIC-NEXT: addl $12, %esp 9032 ; DARWIN-32-PIC-NEXT: ret 9033 9034 ; DARWIN-64-STATIC: _tailcaller: 9035 ; DARWIN-64-STATIC: pushq 9036 ; DARWIN-64-STATIC-NEXT: callq _callee 9037 ; DARWIN-64-STATIC-NEXT: popq 9038 ; DARWIN-64-STATIC-NEXT: ret 9039 9040 ; DARWIN-64-DYNAMIC: _tailcaller: 9041 ; DARWIN-64-DYNAMIC: pushq 9042 ; DARWIN-64-DYNAMIC-NEXT: callq _callee 9043 ; DARWIN-64-DYNAMIC-NEXT: popq 9044 ; DARWIN-64-DYNAMIC-NEXT: ret 9045 9046 ; DARWIN-64-PIC: _tailcaller: 9047 ; DARWIN-64-PIC: pushq 9048 ; DARWIN-64-PIC-NEXT: callq _callee 9049 ; DARWIN-64-PIC-NEXT: popq 9050 ; DARWIN-64-PIC-NEXT: ret 9051 } 9052 9053 define void @dtailcaller() nounwind { 9054 entry: 9055 call void @dcallee() nounwind 9056 ret void 9057 ; LINUX-64-STATIC: dtailcaller: 9058 ; LINUX-64-STATIC: callq dcallee 9059 ; LINUX-64-STATIC: ret 9060 9061 ; LINUX-32-STATIC: dtailcaller: 9062 ; LINUX-32-STATIC: subl 9063 ; LINUX-32-STATIC-NEXT: calll dcallee 9064 ; LINUX-32-STATIC-NEXT: addl 9065 ; LINUX-32-STATIC-NEXT: ret 9066 9067 ; LINUX-32-PIC: dtailcaller: 9068 ; LINUX-32-PIC: subl 9069 ; LINUX-32-PIC-NEXT: calll dcallee 9070 ; LINUX-32-PIC-NEXT: addl 9071 9072 ; LINUX-32-PIC-NEXT: ret 9073 9074 ; LINUX-64-PIC: dtailcaller: 9075 ; LINUX-64-PIC: pushq 9076 ; LINUX-64-PIC-NEXT: callq dcallee 9077 ; LINUX-64-PIC-NEXT: popq 9078 ; LINUX-64-PIC-NEXT: ret 9079 9080 ; DARWIN-32-STATIC: _dtailcaller: 9081 ; DARWIN-32-STATIC: subl $12, %esp 9082 ; DARWIN-32-STATIC-NEXT: calll _dcallee 9083 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 9084 ; DARWIN-32-STATIC-NEXT: ret 9085 9086 ; DARWIN-32-DYNAMIC: _dtailcaller: 9087 ; DARWIN-32-DYNAMIC: subl $12, %esp 9088 ; DARWIN-32-DYNAMIC-NEXT: calll _dcallee 9089 ; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp 9090 ; DARWIN-32-DYNAMIC-NEXT: ret 9091 9092 ; DARWIN-32-PIC: _dtailcaller: 9093 ; DARWIN-32-PIC: subl $12, %esp 9094 ; DARWIN-32-PIC-NEXT: calll _dcallee 9095 ; DARWIN-32-PIC-NEXT: addl $12, %esp 9096 ; DARWIN-32-PIC-NEXT: ret 9097 9098 ; DARWIN-64-STATIC: _dtailcaller: 9099 ; DARWIN-64-STATIC: pushq 9100 ; DARWIN-64-STATIC-NEXT: callq _dcallee 9101 ; DARWIN-64-STATIC-NEXT: popq 9102 ; DARWIN-64-STATIC-NEXT: ret 9103 9104 ; DARWIN-64-DYNAMIC: _dtailcaller: 9105 ; DARWIN-64-DYNAMIC: pushq 9106 ; DARWIN-64-DYNAMIC-NEXT: callq _dcallee 9107 ; DARWIN-64-DYNAMIC-NEXT: popq 9108 ; DARWIN-64-DYNAMIC-NEXT: ret 9109 9110 ; DARWIN-64-PIC: _dtailcaller: 9111 ; DARWIN-64-PIC: pushq 9112 ; DARWIN-64-PIC-NEXT: callq _dcallee 9113 ; DARWIN-64-PIC-NEXT: popq 9114 ; DARWIN-64-PIC-NEXT: ret 9115 } 9116 9117 define void @ltailcaller() nounwind { 9118 entry: 9119 call void @lcallee() nounwind 9120 ret void 9121 ; LINUX-64-STATIC: ltailcaller: 9122 ; LINUX-64-STATIC: callq lcallee 9123 ; LINUX-64-STATIC: ret 9124 9125 ; LINUX-32-STATIC: ltailcaller: 9126 ; LINUX-32-STATIC: subl 9127 ; LINUX-32-STATIC-NEXT: calll lcallee 9128 ; LINUX-32-STATIC-NEXT: addl 9129 ; LINUX-32-STATIC-NEXT: ret 9130 9131 ; LINUX-32-PIC: ltailcaller: 9132 ; LINUX-32-PIC: subl 9133 ; LINUX-32-PIC-NEXT: calll lcallee 9134 ; LINUX-32-PIC-NEXT: addl 9135 9136 ; LINUX-32-PIC-NEXT: ret 9137 9138 ; LINUX-64-PIC: ltailcaller: 9139 ; LINUX-64-PIC: pushq 9140 ; LINUX-64-PIC-NEXT: callq lcallee@PLT 9141 ; LINUX-64-PIC-NEXT: popq 9142 ; LINUX-64-PIC-NEXT: ret 9143 9144 ; DARWIN-32-STATIC: _ltailcaller: 9145 ; DARWIN-32-STATIC: subl $12, %esp 9146 ; DARWIN-32-STATIC-NEXT: calll _lcallee 9147 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 9148 ; DARWIN-32-STATIC-NEXT: ret 9149 9150 ; DARWIN-32-DYNAMIC: _ltailcaller: 9151 ; DARWIN-32-DYNAMIC: subl $12, %esp 9152 ; DARWIN-32-DYNAMIC-NEXT: calll _lcallee 9153 ; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp 9154 ; DARWIN-32-DYNAMIC-NEXT: ret 9155 9156 ; DARWIN-32-PIC: _ltailcaller: 9157 ; DARWIN-32-PIC: subl $12, %esp 9158 ; DARWIN-32-PIC-NEXT: calll _lcallee 9159 ; DARWIN-32-PIC-NEXT: addl $12, %esp 9160 ; DARWIN-32-PIC-NEXT: ret 9161 9162 ; DARWIN-64-STATIC: _ltailcaller: 9163 ; DARWIN-64-STATIC: pushq 9164 ; DARWIN-64-STATIC-NEXT: callq _lcallee 9165 ; DARWIN-64-STATIC-NEXT: popq 9166 ; DARWIN-64-STATIC-NEXT: ret 9167 9168 ; DARWIN-64-DYNAMIC: _ltailcaller: 9169 ; DARWIN-64-DYNAMIC: pushq 9170 ; DARWIN-64-DYNAMIC-NEXT: callq _lcallee 9171 ; DARWIN-64-DYNAMIC-NEXT: popq 9172 ; DARWIN-64-DYNAMIC-NEXT: ret 9173 9174 ; DARWIN-64-PIC: _ltailcaller: 9175 ; DARWIN-64-PIC: pushq 9176 ; DARWIN-64-PIC-NEXT: callq _lcallee 9177 ; DARWIN-64-PIC-NEXT: popq 9178 ; DARWIN-64-PIC-NEXT: ret 9179 } 9180 9181 define void @icaller() nounwind { 9182 entry: 9183 %0 = load void ()** @ifunc, align 8 9184 call void %0() nounwind 9185 %1 = load void ()** @ifunc, align 8 9186 call void %1() nounwind 9187 ret void 9188 ; LINUX-64-STATIC: icaller: 9189 ; LINUX-64-STATIC: callq *ifunc 9190 ; LINUX-64-STATIC: callq *ifunc 9191 ; LINUX-64-STATIC: ret 9192 9193 ; LINUX-32-STATIC: icaller: 9194 ; LINUX-32-STATIC: subl 9195 ; LINUX-32-STATIC-NEXT: calll *ifunc 9196 ; LINUX-32-STATIC-NEXT: calll *ifunc 9197 ; LINUX-32-STATIC-NEXT: addl 9198 ; LINUX-32-STATIC-NEXT: ret 9199 9200 ; LINUX-32-PIC: icaller: 9201 ; LINUX-32-PIC: subl 9202 ; LINUX-32-PIC-NEXT: calll *ifunc 9203 ; LINUX-32-PIC-NEXT: calll *ifunc 9204 ; LINUX-32-PIC-NEXT: addl 9205 9206 ; LINUX-32-PIC-NEXT: ret 9207 9208 ; LINUX-64-PIC: icaller: 9209 ; LINUX-64-PIC: pushq [[RBX:%r.x]] 9210 ; LINUX-64-PIC-NEXT: movq ifunc@GOTPCREL(%rip), [[RBX:%r.x]] 9211 ; LINUX-64-PIC-NEXT: callq *([[RBX]]) 9212 ; LINUX-64-PIC-NEXT: callq *([[RBX]]) 9213 ; LINUX-64-PIC-NEXT: popq [[RBX:%r.x]] 9214 ; LINUX-64-PIC-NEXT: ret 9215 9216 ; DARWIN-32-STATIC: _icaller: 9217 ; DARWIN-32-STATIC: subl $12, %esp 9218 ; DARWIN-32-STATIC-NEXT: calll *_ifunc 9219 ; DARWIN-32-STATIC-NEXT: calll *_ifunc 9220 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 9221 ; DARWIN-32-STATIC-NEXT: ret 9222 9223 ; DARWIN-32-DYNAMIC: _icaller: 9224 ; DARWIN-32-DYNAMIC: pushl %esi 9225 ; DARWIN-32-DYNAMIC-NEXT: subl $8, %esp 9226 ; DARWIN-32-DYNAMIC-NEXT: movl L_ifunc$non_lazy_ptr, %esi 9227 ; DARWIN-32-DYNAMIC-NEXT: calll *(%esi) 9228 ; DARWIN-32-DYNAMIC-NEXT: calll *(%esi) 9229 ; DARWIN-32-DYNAMIC-NEXT: addl $8, %esp 9230 ; DARWIN-32-DYNAMIC-NEXT: popl %esi 9231 ; DARWIN-32-DYNAMIC-NEXT: ret 9232 9233 ; DARWIN-32-PIC: _icaller: 9234 ; DARWIN-32-PIC: pushl %esi 9235 ; DARWIN-32-PIC-NEXT: subl $8, %esp 9236 ; DARWIN-32-PIC-NEXT: calll L142$pb 9237 ; DARWIN-32-PIC-NEXT: L142$pb: 9238 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 9239 ; DARWIN-32-PIC-NEXT: movl L_ifunc$non_lazy_ptr-L142$pb([[EAX]]), %esi 9240 ; DARWIN-32-PIC-NEXT: calll *(%esi) 9241 ; DARWIN-32-PIC-NEXT: calll *(%esi) 9242 ; DARWIN-32-PIC-NEXT: addl $8, %esp 9243 ; DARWIN-32-PIC-NEXT: popl %esi 9244 ; DARWIN-32-PIC-NEXT: ret 9245 9246 ; DARWIN-64-STATIC: _icaller: 9247 ; DARWIN-64-STATIC: pushq [[RBX:%r.x]] 9248 ; DARWIN-64-STATIC-NEXT: movq _ifunc@GOTPCREL(%rip), [[RBX:%r.x]] 9249 ; DARWIN-64-STATIC-NEXT: callq *([[RBX]]) 9250 ; DARWIN-64-STATIC-NEXT: callq *([[RBX]]) 9251 ; DARWIN-64-STATIC-NEXT: popq [[RBX:%r.x]] 9252 ; DARWIN-64-STATIC-NEXT: ret 9253 9254 ; DARWIN-64-DYNAMIC: _icaller: 9255 ; DARWIN-64-DYNAMIC: pushq [[RBX:%r.x]] 9256 ; DARWIN-64-DYNAMIC-NEXT: movq _ifunc@GOTPCREL(%rip), [[RBX:%r.x]] 9257 ; DARWIN-64-DYNAMIC-NEXT: callq *([[RBX]]) 9258 ; DARWIN-64-DYNAMIC-NEXT: callq *([[RBX]]) 9259 ; DARWIN-64-DYNAMIC-NEXT: popq [[RBX:%r.x]] 9260 ; DARWIN-64-DYNAMIC-NEXT: ret 9261 9262 ; DARWIN-64-PIC: _icaller: 9263 ; DARWIN-64-PIC: pushq [[RBX:%r.x]] 9264 ; DARWIN-64-PIC-NEXT: movq _ifunc@GOTPCREL(%rip), [[RBX:%r.x]] 9265 ; DARWIN-64-PIC-NEXT: callq *([[RBX]]) 9266 ; DARWIN-64-PIC-NEXT: callq *([[RBX]]) 9267 ; DARWIN-64-PIC-NEXT: popq [[RBX:%r.x]] 9268 ; DARWIN-64-PIC-NEXT: ret 9269 } 9270 9271 define void @dicaller() nounwind { 9272 entry: 9273 %0 = load void ()** @difunc, align 8 9274 call void %0() nounwind 9275 %1 = load void ()** @difunc, align 8 9276 call void %1() nounwind 9277 ret void 9278 ; LINUX-64-STATIC: dicaller: 9279 ; LINUX-64-STATIC: callq *difunc 9280 ; LINUX-64-STATIC: callq *difunc 9281 ; LINUX-64-STATIC: ret 9282 9283 ; LINUX-32-STATIC: dicaller: 9284 ; LINUX-32-STATIC: subl 9285 ; LINUX-32-STATIC-NEXT: calll *difunc 9286 ; LINUX-32-STATIC-NEXT: calll *difunc 9287 ; LINUX-32-STATIC-NEXT: addl 9288 ; LINUX-32-STATIC-NEXT: ret 9289 9290 ; LINUX-32-PIC: dicaller: 9291 ; LINUX-32-PIC: subl 9292 ; LINUX-32-PIC-NEXT: calll *difunc 9293 ; LINUX-32-PIC-NEXT: calll *difunc 9294 ; LINUX-32-PIC-NEXT: addl 9295 9296 ; LINUX-32-PIC-NEXT: ret 9297 9298 ; LINUX-64-PIC: dicaller: 9299 ; LINUX-64-PIC: pushq [[RBX:%r.x]] 9300 ; LINUX-64-PIC-NEXT: movq difunc@GOTPCREL(%rip), [[RBX:%r.x]] 9301 ; LINUX-64-PIC-NEXT: callq *([[RBX]]) 9302 ; LINUX-64-PIC-NEXT: callq *([[RBX]]) 9303 ; LINUX-64-PIC-NEXT: popq [[RBX:%r.x]] 9304 ; LINUX-64-PIC-NEXT: ret 9305 9306 ; DARWIN-32-STATIC: _dicaller: 9307 ; DARWIN-32-STATIC: subl $12, %esp 9308 ; DARWIN-32-STATIC-NEXT: calll *_difunc 9309 ; DARWIN-32-STATIC-NEXT: calll *_difunc 9310 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 9311 ; DARWIN-32-STATIC-NEXT: ret 9312 9313 ; DARWIN-32-DYNAMIC: _dicaller: 9314 ; DARWIN-32-DYNAMIC: subl $12, %esp 9315 ; DARWIN-32-DYNAMIC-NEXT: calll *_difunc 9316 ; DARWIN-32-DYNAMIC-NEXT: calll *_difunc 9317 ; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp 9318 ; DARWIN-32-DYNAMIC-NEXT: ret 9319 9320 ; DARWIN-32-PIC: _dicaller: 9321 ; DARWIN-32-PIC: pushl %esi 9322 ; DARWIN-32-PIC-NEXT: subl $8, %esp 9323 ; DARWIN-32-PIC-NEXT: calll L143$pb 9324 ; DARWIN-32-PIC-NEXT: L143$pb: 9325 ; DARWIN-32-PIC-NEXT: popl %esi 9326 ; DARWIN-32-PIC-NEXT: calll *_difunc-L143$pb(%esi) 9327 ; DARWIN-32-PIC-NEXT: calll *_difunc-L143$pb(%esi) 9328 ; DARWIN-32-PIC-NEXT: addl $8, %esp 9329 ; DARWIN-32-PIC-NEXT: popl %esi 9330 ; DARWIN-32-PIC-NEXT: ret 9331 9332 ; DARWIN-64-STATIC: _dicaller: 9333 ; DARWIN-64-STATIC: pushq 9334 ; DARWIN-64-STATIC-NEXT: callq *_difunc(%rip) 9335 ; DARWIN-64-STATIC-NEXT: callq *_difunc(%rip) 9336 ; DARWIN-64-STATIC-NEXT: popq 9337 ; DARWIN-64-STATIC-NEXT: ret 9338 9339 ; DARWIN-64-DYNAMIC: _dicaller: 9340 ; DARWIN-64-DYNAMIC: pushq 9341 ; DARWIN-64-DYNAMIC-NEXT: callq *_difunc(%rip) 9342 ; DARWIN-64-DYNAMIC-NEXT: callq *_difunc(%rip) 9343 ; DARWIN-64-DYNAMIC-NEXT: popq 9344 ; DARWIN-64-DYNAMIC-NEXT: ret 9345 9346 ; DARWIN-64-PIC: _dicaller: 9347 ; DARWIN-64-PIC: pushq 9348 ; DARWIN-64-PIC-NEXT: callq *_difunc(%rip) 9349 ; DARWIN-64-PIC-NEXT: callq *_difunc(%rip) 9350 ; DARWIN-64-PIC-NEXT: popq 9351 ; DARWIN-64-PIC-NEXT: ret 9352 } 9353 9354 define void @licaller() nounwind { 9355 entry: 9356 %0 = load void ()** @lifunc, align 8 9357 call void %0() nounwind 9358 %1 = load void ()** @lifunc, align 8 9359 call void %1() nounwind 9360 ret void 9361 ; LINUX-64-STATIC: licaller: 9362 ; LINUX-64-STATIC: callq *lifunc 9363 ; LINUX-64-STATIC: callq *lifunc 9364 ; LINUX-64-STATIC: ret 9365 9366 ; LINUX-32-STATIC: licaller: 9367 ; LINUX-32-STATIC: subl 9368 ; LINUX-32-STATIC-NEXT: calll *lifunc 9369 ; LINUX-32-STATIC-NEXT: calll *lifunc 9370 ; LINUX-32-STATIC-NEXT: addl 9371 ; LINUX-32-STATIC-NEXT: ret 9372 9373 ; LINUX-32-PIC: licaller: 9374 ; LINUX-32-PIC: subl 9375 ; LINUX-32-PIC-NEXT: calll *lifunc 9376 ; LINUX-32-PIC-NEXT: calll *lifunc 9377 ; LINUX-32-PIC-NEXT: addl 9378 9379 ; LINUX-32-PIC-NEXT: ret 9380 9381 ; LINUX-64-PIC: licaller: 9382 ; LINUX-64-PIC: pushq 9383 ; LINUX-64-PIC-NEXT: callq *lifunc(%rip) 9384 ; LINUX-64-PIC-NEXT: callq *lifunc(%rip) 9385 ; LINUX-64-PIC-NEXT: popq 9386 ; LINUX-64-PIC-NEXT: ret 9387 9388 ; DARWIN-32-STATIC: _licaller: 9389 ; DARWIN-32-STATIC: subl $12, %esp 9390 ; DARWIN-32-STATIC-NEXT: calll *_lifunc 9391 ; DARWIN-32-STATIC-NEXT: calll *_lifunc 9392 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 9393 ; DARWIN-32-STATIC-NEXT: ret 9394 9395 ; DARWIN-32-DYNAMIC: _licaller: 9396 ; DARWIN-32-DYNAMIC: subl $12, %esp 9397 ; DARWIN-32-DYNAMIC-NEXT: calll *_lifunc 9398 ; DARWIN-32-DYNAMIC-NEXT: calll *_lifunc 9399 ; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp 9400 ; DARWIN-32-DYNAMIC-NEXT: ret 9401 9402 ; DARWIN-32-PIC: _licaller: 9403 ; DARWIN-32-PIC: pushl %esi 9404 ; DARWIN-32-PIC-NEXT: subl $8, %esp 9405 ; DARWIN-32-PIC-NEXT: calll L144$pb 9406 ; DARWIN-32-PIC-NEXT: L144$pb: 9407 ; DARWIN-32-PIC-NEXT: popl %esi 9408 ; DARWIN-32-PIC-NEXT: calll *_lifunc-L144$pb(%esi) 9409 ; DARWIN-32-PIC-NEXT: calll *_lifunc-L144$pb(%esi) 9410 ; DARWIN-32-PIC-NEXT: addl $8, %esp 9411 ; DARWIN-32-PIC-NEXT: popl %esi 9412 ; DARWIN-32-PIC-NEXT: ret 9413 9414 ; DARWIN-64-STATIC: _licaller: 9415 ; DARWIN-64-STATIC: pushq 9416 ; DARWIN-64-STATIC-NEXT: callq *_lifunc(%rip) 9417 ; DARWIN-64-STATIC-NEXT: callq *_lifunc(%rip) 9418 ; DARWIN-64-STATIC-NEXT: popq 9419 ; DARWIN-64-STATIC-NEXT: ret 9420 9421 ; DARWIN-64-DYNAMIC: _licaller: 9422 ; DARWIN-64-DYNAMIC: pushq 9423 ; DARWIN-64-DYNAMIC-NEXT: callq *_lifunc(%rip) 9424 ; DARWIN-64-DYNAMIC-NEXT: callq *_lifunc(%rip) 9425 ; DARWIN-64-DYNAMIC-NEXT: popq 9426 ; DARWIN-64-DYNAMIC-NEXT: ret 9427 9428 ; DARWIN-64-PIC: _licaller: 9429 ; DARWIN-64-PIC: pushq 9430 ; DARWIN-64-PIC-NEXT: callq *_lifunc(%rip) 9431 ; DARWIN-64-PIC-NEXT: callq *_lifunc(%rip) 9432 ; DARWIN-64-PIC-NEXT: popq 9433 ; DARWIN-64-PIC-NEXT: ret 9434 } 9435 9436 define void @itailcaller() nounwind { 9437 entry: 9438 %0 = load void ()** @ifunc, align 8 9439 call void %0() nounwind 9440 %1 = load void ()** @ifunc, align 8 9441 call void %1() nounwind 9442 ret void 9443 ; LINUX-64-STATIC: itailcaller: 9444 ; LINUX-64-STATIC: callq *ifunc 9445 ; LINUX-64-STATIC: callq *ifunc 9446 ; LINUX-64-STATIC: ret 9447 9448 ; LINUX-32-STATIC: itailcaller: 9449 ; LINUX-32-STATIC: subl 9450 ; LINUX-32-STATIC-NEXT: calll *ifunc 9451 ; LINUX-32-STATIC-NEXT: calll *ifunc 9452 ; LINUX-32-STATIC-NEXT: addl 9453 ; LINUX-32-STATIC-NEXT: ret 9454 9455 ; LINUX-32-PIC: itailcaller: 9456 ; LINUX-32-PIC: subl 9457 ; LINUX-32-PIC-NEXT: calll *ifunc 9458 ; LINUX-32-PIC-NEXT: calll *ifunc 9459 ; LINUX-32-PIC-NEXT: addl 9460 9461 ; LINUX-32-PIC-NEXT: ret 9462 9463 ; LINUX-64-PIC: itailcaller: 9464 ; LINUX-64-PIC: pushq [[RBX:%r.x]] 9465 ; LINUX-64-PIC-NEXT: movq ifunc@GOTPCREL(%rip), [[RBX:%r.x]] 9466 ; LINUX-64-PIC-NEXT: callq *([[RBX]]) 9467 ; LINUX-64-PIC-NEXT: callq *([[RBX]]) 9468 ; LINUX-64-PIC-NEXT: popq [[RBX:%r.x]] 9469 ; LINUX-64-PIC-NEXT: ret 9470 9471 ; DARWIN-32-STATIC: _itailcaller: 9472 ; DARWIN-32-STATIC: subl $12, %esp 9473 ; DARWIN-32-STATIC-NEXT: calll *_ifunc 9474 ; DARWIN-32-STATIC-NEXT: calll *_ifunc 9475 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 9476 ; DARWIN-32-STATIC-NEXT: ret 9477 9478 ; DARWIN-32-DYNAMIC: _itailcaller: 9479 ; DARWIN-32-DYNAMIC: pushl %esi 9480 ; DARWIN-32-DYNAMIC-NEXT: subl $8, %esp 9481 ; DARWIN-32-DYNAMIC-NEXT: movl L_ifunc$non_lazy_ptr, %esi 9482 ; DARWIN-32-DYNAMIC-NEXT: calll *(%esi) 9483 ; DARWIN-32-DYNAMIC-NEXT: calll *(%esi) 9484 ; DARWIN-32-DYNAMIC-NEXT: addl $8, %esp 9485 ; DARWIN-32-DYNAMIC-NEXT: popl %esi 9486 ; DARWIN-32-DYNAMIC-NEXT: ret 9487 9488 ; DARWIN-32-PIC: _itailcaller: 9489 ; DARWIN-32-PIC: pushl %esi 9490 ; DARWIN-32-PIC-NEXT: subl $8, %esp 9491 ; DARWIN-32-PIC-NEXT: calll L145$pb 9492 ; DARWIN-32-PIC-NEXT: L145$pb: 9493 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 9494 ; DARWIN-32-PIC-NEXT: movl L_ifunc$non_lazy_ptr-L145$pb([[EAX]]), %esi 9495 ; DARWIN-32-PIC-NEXT: calll *(%esi) 9496 ; DARWIN-32-PIC-NEXT: calll *(%esi) 9497 ; DARWIN-32-PIC-NEXT: addl $8, %esp 9498 ; DARWIN-32-PIC-NEXT: popl %esi 9499 ; DARWIN-32-PIC-NEXT: ret 9500 9501 ; DARWIN-64-STATIC: _itailcaller: 9502 ; DARWIN-64-STATIC: pushq [[RBX:%r.x]] 9503 ; DARWIN-64-STATIC-NEXT: movq _ifunc@GOTPCREL(%rip), [[RBX:%r.x]] 9504 ; DARWIN-64-STATIC-NEXT: callq *([[RBX]]) 9505 ; DARWIN-64-STATIC-NEXT: callq *([[RBX]]) 9506 ; DARWIN-64-STATIC-NEXT: popq [[RBX:%r.x]] 9507 ; DARWIN-64-STATIC-NEXT: ret 9508 9509 ; DARWIN-64-DYNAMIC: _itailcaller: 9510 ; DARWIN-64-DYNAMIC: pushq [[RBX:%r.x]] 9511 ; DARWIN-64-DYNAMIC-NEXT: movq _ifunc@GOTPCREL(%rip), [[RBX:%r.x]] 9512 ; DARWIN-64-DYNAMIC-NEXT: callq *([[RBX]]) 9513 ; DARWIN-64-DYNAMIC-NEXT: callq *([[RBX]]) 9514 ; DARWIN-64-DYNAMIC-NEXT: popq [[RBX:%r.x]] 9515 ; DARWIN-64-DYNAMIC-NEXT: ret 9516 9517 ; DARWIN-64-PIC: _itailcaller: 9518 ; DARWIN-64-PIC: pushq [[RBX:%r.x]] 9519 ; DARWIN-64-PIC-NEXT: movq _ifunc@GOTPCREL(%rip), [[RBX:%r.x]] 9520 ; DARWIN-64-PIC-NEXT: callq *([[RBX]]) 9521 ; DARWIN-64-PIC-NEXT: callq *([[RBX]]) 9522 ; DARWIN-64-PIC-NEXT: popq [[RBX:%r.x]] 9523 ; DARWIN-64-PIC-NEXT: ret 9524 } 9525 9526 define void @ditailcaller() nounwind { 9527 entry: 9528 %0 = load void ()** @difunc, align 8 9529 call void %0() nounwind 9530 ret void 9531 ; LINUX-64-STATIC: ditailcaller: 9532 ; LINUX-64-STATIC: callq *difunc 9533 ; LINUX-64-STATIC: ret 9534 9535 ; LINUX-32-STATIC: ditailcaller: 9536 ; LINUX-32-STATIC: subl 9537 ; LINUX-32-STATIC-NEXT: calll *difunc 9538 ; LINUX-32-STATIC-NEXT: addl 9539 ; LINUX-32-STATIC-NEXT: ret 9540 9541 ; LINUX-32-PIC: ditailcaller: 9542 ; LINUX-32-PIC: subl 9543 ; LINUX-32-PIC-NEXT: calll *difunc 9544 ; LINUX-32-PIC-NEXT: addl 9545 9546 ; LINUX-32-PIC-NEXT: ret 9547 9548 ; LINUX-64-PIC: ditailcaller: 9549 ; LINUX-64-PIC: pushq 9550 ; LINUX-64-PIC-NEXT: movq difunc@GOTPCREL(%rip), [[RAX:%r.x]] 9551 ; LINUX-64-PIC-NEXT: callq *([[RAX]]) 9552 ; LINUX-64-PIC-NEXT: popq 9553 ; LINUX-64-PIC-NEXT: ret 9554 9555 ; DARWIN-32-STATIC: _ditailcaller: 9556 ; DARWIN-32-STATIC: subl $12, %esp 9557 ; DARWIN-32-STATIC-NEXT: calll *_difunc 9558 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 9559 ; DARWIN-32-STATIC-NEXT: ret 9560 9561 ; DARWIN-32-DYNAMIC: _ditailcaller: 9562 ; DARWIN-32-DYNAMIC: subl $12, %esp 9563 ; DARWIN-32-DYNAMIC-NEXT: calll *_difunc 9564 ; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp 9565 ; DARWIN-32-DYNAMIC-NEXT: ret 9566 9567 ; DARWIN-32-PIC: _ditailcaller: 9568 ; DARWIN-32-PIC: subl $12, %esp 9569 ; DARWIN-32-PIC-NEXT: calll L146$pb 9570 ; DARWIN-32-PIC-NEXT: L146$pb: 9571 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 9572 ; DARWIN-32-PIC-NEXT: calll *_difunc-L146$pb([[EAX]]) 9573 ; DARWIN-32-PIC-NEXT: addl $12, %esp 9574 ; DARWIN-32-PIC-NEXT: ret 9575 9576 ; DARWIN-64-STATIC: _ditailcaller: 9577 ; DARWIN-64-STATIC: pushq 9578 ; DARWIN-64-STATIC-NEXT: callq *_difunc(%rip) 9579 ; DARWIN-64-STATIC-NEXT: popq 9580 ; DARWIN-64-STATIC-NEXT: ret 9581 9582 ; DARWIN-64-DYNAMIC: _ditailcaller: 9583 ; DARWIN-64-DYNAMIC: pushq 9584 ; DARWIN-64-DYNAMIC-NEXT: callq *_difunc(%rip) 9585 ; DARWIN-64-DYNAMIC-NEXT: popq 9586 ; DARWIN-64-DYNAMIC-NEXT: ret 9587 9588 ; DARWIN-64-PIC: _ditailcaller: 9589 ; DARWIN-64-PIC: callq *_difunc(%rip) 9590 ; DARWIN-64-PIC-NEXT: popq 9591 ; DARWIN-64-PIC-NEXT: ret 9592 } 9593 9594 define void @litailcaller() nounwind { 9595 entry: 9596 %0 = load void ()** @lifunc, align 8 9597 call void %0() nounwind 9598 ret void 9599 ; LINUX-64-STATIC: litailcaller: 9600 ; LINUX-64-STATIC: callq *lifunc 9601 ; LINUX-64-STATIC: ret 9602 9603 ; LINUX-32-STATIC: litailcaller: 9604 ; LINUX-32-STATIC: subl 9605 ; LINUX-32-STATIC-NEXT: calll *lifunc 9606 ; LINUX-32-STATIC-NEXT: addl 9607 ; LINUX-32-STATIC-NEXT: ret 9608 9609 ; LINUX-32-PIC: litailcaller: 9610 ; LINUX-32-PIC: subl 9611 ; LINUX-32-PIC-NEXT: calll *lifunc 9612 ; LINUX-32-PIC-NEXT: addl 9613 9614 ; LINUX-32-PIC-NEXT: ret 9615 9616 ; LINUX-64-PIC: litailcaller: 9617 ; LINUX-64-PIC: pushq 9618 ; LINUX-64-PIC-NEXT: callq *lifunc(%rip) 9619 ; LINUX-64-PIC-NEXT: popq 9620 ; LINUX-64-PIC-NEXT: ret 9621 9622 ; DARWIN-32-STATIC: _litailcaller: 9623 ; DARWIN-32-STATIC: subl $12, %esp 9624 ; DARWIN-32-STATIC-NEXT: calll *_lifunc 9625 ; DARWIN-32-STATIC-NEXT: addl $12, %esp 9626 ; DARWIN-32-STATIC-NEXT: ret 9627 9628 ; DARWIN-32-DYNAMIC: _litailcaller: 9629 ; DARWIN-32-DYNAMIC: subl $12, %esp 9630 ; DARWIN-32-DYNAMIC-NEXT: calll *_lifunc 9631 ; DARWIN-32-DYNAMIC-NEXT: addl $12, %esp 9632 ; DARWIN-32-DYNAMIC-NEXT: ret 9633 9634 ; DARWIN-32-PIC: _litailcaller: 9635 ; DARWIN-32-PIC: subl $12, %esp 9636 ; DARWIN-32-PIC-NEXT: calll L147$pb 9637 ; DARWIN-32-PIC-NEXT: L147$pb: 9638 ; DARWIN-32-PIC-NEXT: popl [[EAX:%e.x]] 9639 ; DARWIN-32-PIC-NEXT: calll *_lifunc-L147$pb([[EAX]]) 9640 ; DARWIN-32-PIC-NEXT: addl $12, %esp 9641 ; DARWIN-32-PIC-NEXT: ret 9642 9643 ; DARWIN-64-STATIC: _litailcaller: 9644 ; DARWIN-64-STATIC: pushq 9645 ; DARWIN-64-STATIC-NEXT: callq *_lifunc(%rip) 9646 ; DARWIN-64-STATIC-NEXT: popq 9647 ; DARWIN-64-STATIC-NEXT: ret 9648 9649 ; DARWIN-64-DYNAMIC: _litailcaller: 9650 ; DARWIN-64-DYNAMIC: pushq 9651 ; DARWIN-64-DYNAMIC-NEXT: callq *_lifunc(%rip) 9652 ; DARWIN-64-DYNAMIC-NEXT: popq 9653 ; DARWIN-64-DYNAMIC-NEXT: ret 9654 9655 ; DARWIN-64-PIC: _litailcaller: 9656 ; DARWIN-64-PIC: pushq 9657 ; DARWIN-64-PIC-NEXT: callq *_lifunc(%rip) 9658 ; DARWIN-64-PIC-NEXT: popq 9659 ; DARWIN-64-PIC-NEXT: ret 9660 } 9661