1; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | 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 -pre-RA-sched=list-ilp | 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 -pre-RA-sched=list-ilp | 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 -pre-RA-sched=list-ilp | 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 -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-32-STATIC 8; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-apple-darwin9 -march=x86 -relocation-model=dynamic-no-pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-32-DYNAMIC 9; RUN: llc < %s -asm-verbose=0 -mcpu=generic -mtriple=i686-apple-darwin9 -march=x86 -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | 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 -pre-RA-sched=list-ilp | 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 -pre-RA-sched=list-ilp | 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 -pre-RA-sched=list-ilp | 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 34define void @foo00() nounwind { 35entry: 36 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 0), align 4 37 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 0), align 4 38 ret void 39 40; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 106define void @fxo00() nounwind { 107entry: 108 %0 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 0), align 4 109 store i32 %0, i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 0), align 4 110 ret void 111 112; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 178define void @foo01() nounwind { 179entry: 180 store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8 181 ret void 182; LINUX-64-STATIC-LABEL: foo01: 183; LINUX-64-STATIC: movq $dst, ptr 184; LINUX-64-STATIC: ret 185 186; LINUX-32-STATIC-LABEL: foo01: 187; LINUX-32-STATIC: movl $dst, ptr 188; LINUX-32-STATIC-NEXT: ret 189 190; LINUX-32-PIC-LABEL: foo01: 191; LINUX-32-PIC: movl $dst, ptr 192; LINUX-32-PIC-NEXT: ret 193 194; LINUX-64-PIC-LABEL: 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 238define void @fxo01() nounwind { 239entry: 240 store i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8 241 ret void 242; LINUX-64-STATIC-LABEL: fxo01: 243; LINUX-64-STATIC: movq $xdst, ptr 244; LINUX-64-STATIC: ret 245 246; LINUX-32-STATIC-LABEL: fxo01: 247; LINUX-32-STATIC: movl $xdst, ptr 248; LINUX-32-STATIC-NEXT: ret 249 250; LINUX-32-PIC-LABEL: fxo01: 251; LINUX-32-PIC: movl $xdst, ptr 252; LINUX-32-PIC-NEXT: ret 253 254; LINUX-64-PIC-LABEL: 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 298define void @foo02() nounwind { 299entry: 300 %0 = load i32*, i32** @ptr, align 8 301 %1 = load i32, i32* getelementptr ([131072 x i32], [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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 380define void @fxo02() nounwind { 381entry: 382 %0 = load i32*, i32** @ptr, align 8 383 %1 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 0), align 4 384 store i32 %1, i32* %0, align 4 385; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 462define void @foo03() nounwind { 463entry: 464 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 0), align 32 465 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 0), align 32 466 ret void 467; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 523define void @foo04() nounwind { 524entry: 525 store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8 526 ret void 527; LINUX-64-STATIC-LABEL: foo04: 528; LINUX-64-STATIC: movq $ddst, dptr 529; LINUX-64-STATIC: ret 530 531; LINUX-32-STATIC-LABEL: foo04: 532; LINUX-32-STATIC: movl $ddst, dptr 533; LINUX-32-STATIC-NEXT: ret 534 535; LINUX-32-PIC-LABEL: foo04: 536; LINUX-32-PIC: movl $ddst, dptr 537; LINUX-32-PIC-NEXT: ret 538 539; LINUX-64-PIC-LABEL: 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 577define void @foo05() nounwind { 578entry: 579 %0 = load i32*, i32** @dptr, align 8 580 %1 = load i32, i32* getelementptr ([131072 x i32], [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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 649define void @foo06() nounwind { 650entry: 651 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 0), align 4 652 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 0), align 4 653 ret void 654; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 708define void @foo07() nounwind { 709entry: 710 store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8 711 ret void 712; LINUX-64-STATIC-LABEL: foo07: 713; LINUX-64-STATIC: movq $ldst, lptr 714; LINUX-64-STATIC: ret 715 716; LINUX-32-STATIC-LABEL: foo07: 717; LINUX-32-STATIC: movl $ldst, lptr 718; LINUX-32-STATIC-NEXT: ret 719 720; LINUX-32-PIC-LABEL: foo07: 721; LINUX-32-PIC: movl $ldst, lptr 722; LINUX-32-PIC-NEXT: ret 723 724; LINUX-64-PIC-LABEL: 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 761define void @foo08() nounwind { 762entry: 763 %0 = load i32*, i32** @lptr, align 8 764 %1 = load i32, i32* getelementptr ([131072 x i32], [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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 831define void @qux00() nounwind { 832entry: 833 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16), align 4 834 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16), align 4 835 ret void 836; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 902define void @qxx00() nounwind { 903entry: 904 %0 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16), align 4 905 store i32 %0, i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16), align 4 906 ret void 907; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 973define void @qux01() nounwind { 974entry: 975 store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8 976 ret void 977; LINUX-64-STATIC-LABEL: qux01: 978; LINUX-64-STATIC: movq $dst+64, ptr 979; LINUX-64-STATIC: ret 980 981; LINUX-32-STATIC-LABEL: qux01: 982; LINUX-32-STATIC: movl $dst+64, ptr 983; LINUX-32-STATIC-NEXT: ret 984 985; LINUX-32-PIC-LABEL: qux01: 986; LINUX-32-PIC: movl $dst+64, ptr 987; LINUX-32-PIC-NEXT: ret 988 989; LINUX-64-PIC-LABEL: 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 1039define void @qxx01() nounwind { 1040entry: 1041 store i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8 1042 ret void 1043; LINUX-64-STATIC-LABEL: qxx01: 1044; LINUX-64-STATIC: movq $xdst+64, ptr 1045; LINUX-64-STATIC: ret 1046 1047; LINUX-32-STATIC-LABEL: qxx01: 1048; LINUX-32-STATIC: movl $xdst+64, ptr 1049; LINUX-32-STATIC-NEXT: ret 1050 1051; LINUX-32-PIC-LABEL: qxx01: 1052; LINUX-32-PIC: movl $xdst+64, ptr 1053; LINUX-32-PIC-NEXT: ret 1054 1055; LINUX-64-PIC-LABEL: 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 1105define void @qux02() nounwind { 1106entry: 1107 %0 = load i32*, i32** @ptr, align 8 1108 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16), align 4 1109 %2 = getelementptr i32, i32* %0, i64 16 1110 store i32 %1, i32* %2, align 4 1111; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 1188define void @qxx02() nounwind { 1189entry: 1190 %0 = load i32*, i32** @ptr, align 8 1191 %1 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16), align 4 1192 %2 = getelementptr i32, i32* %0, i64 16 1193 store i32 %1, i32* %2, align 4 1194; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 1271define void @qux03() nounwind { 1272entry: 1273 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16), align 32 1274 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16), align 32 1275 ret void 1276; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 1332define void @qux04() nounwind { 1333entry: 1334 store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8 1335 ret void 1336; LINUX-64-STATIC-LABEL: qux04: 1337; LINUX-64-STATIC: movq $ddst+64, dptr(%rip) 1338; LINUX-64-STATIC: ret 1339 1340; LINUX-32-STATIC-LABEL: qux04: 1341; LINUX-32-STATIC: movl $ddst+64, dptr 1342; LINUX-32-STATIC-NEXT: ret 1343 1344; LINUX-32-PIC-LABEL: qux04: 1345; LINUX-32-PIC: movl $ddst+64, dptr 1346; LINUX-32-PIC-NEXT: ret 1347 1348; LINUX-64-PIC-LABEL: 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 1387define void @qux05() nounwind { 1388entry: 1389 %0 = load i32*, i32** @dptr, align 8 1390 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16), align 32 1391 %2 = getelementptr i32, i32* %0, i64 16 1392 store i32 %1, i32* %2, align 4 1393; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 1460define void @qux06() nounwind { 1461entry: 1462 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16), align 4 1463 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16), align 4 1464 ret void 1465; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 1519define void @qux07() nounwind { 1520entry: 1521 store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8 1522 ret void 1523; LINUX-64-STATIC-LABEL: qux07: 1524; LINUX-64-STATIC: movq $ldst+64, lptr 1525; LINUX-64-STATIC: ret 1526 1527; LINUX-32-STATIC-LABEL: qux07: 1528; LINUX-32-STATIC: movl $ldst+64, lptr 1529; LINUX-32-STATIC-NEXT: ret 1530 1531; LINUX-32-PIC-LABEL: qux07: 1532; LINUX-32-PIC: movl $ldst+64, lptr 1533; LINUX-32-PIC-NEXT: ret 1534 1535; LINUX-64-PIC-LABEL: 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 1572define void @qux08() nounwind { 1573entry: 1574 %0 = load i32*, i32** @lptr, align 8 1575 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16), align 4 1576 %2 = getelementptr i32, i32* %0, i64 16 1577 store i32 %1, i32* %2, align 4 1578; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 1643define void @ind00(i64 %i) nounwind { 1644entry: 1645 %0 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %i 1646 %1 = load i32, i32* %0, align 4 1647 %2 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %i 1648 store i32 %1, i32* %2, align 4 1649 ret void 1650; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 1721define void @ixd00(i64 %i) nounwind { 1722entry: 1723 %0 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %i 1724 %1 = load i32, i32* %0, align 4 1725 %2 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %i 1726 store i32 %1, i32* %2, align 4 1727 ret void 1728; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 1799define void @ind01(i64 %i) nounwind { 1800entry: 1801 %0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %i 1802 store i32* %0, i32** @ptr, align 8 1803 ret void 1804; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 1875define void @ixd01(i64 %i) nounwind { 1876entry: 1877 %0 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %i 1878 store i32* %0, i32** @ptr, align 8 1879 ret void 1880; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 1951define void @ind02(i64 %i) nounwind { 1952entry: 1953 %0 = load i32*, i32** @ptr, align 8 1954 %1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %i 1955 %2 = load i32, i32* %1, align 4 1956 %3 = getelementptr i32, i32* %0, i64 %i 1957 store i32 %2, i32* %3, align 4 1958 ret void 1959; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2040define void @ixd02(i64 %i) nounwind { 2041entry: 2042 %0 = load i32*, i32** @ptr, align 8 2043 %1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %i 2044 %2 = load i32, i32* %1, align 4 2045 %3 = getelementptr i32, i32* %0, i64 %i 2046 store i32 %2, i32* %3, align 4 2047 ret void 2048; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2129define void @ind03(i64 %i) nounwind { 2130entry: 2131 %0 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %i 2132 %1 = load i32, i32* %0, align 4 2133 %2 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %i 2134 store i32 %1, i32* %2, align 4 2135 ret void 2136; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2203define void @ind04(i64 %i) nounwind { 2204entry: 2205 %0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %i 2206 store i32* %0, i32** @dptr, align 8 2207 ret void 2208; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2272define void @ind05(i64 %i) nounwind { 2273entry: 2274 %0 = load i32*, i32** @dptr, align 8 2275 %1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %i 2276 %2 = load i32, i32* %1, align 4 2277 %3 = getelementptr i32, i32* %0, i64 %i 2278 store i32 %2, i32* %3, align 4 2279 ret void 2280; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2354define void @ind06(i64 %i) nounwind { 2355entry: 2356 %0 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %i 2357 %1 = load i32, i32* %0, align 4 2358 %2 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %i 2359 store i32 %1, i32* %2, align 4 2360 ret void 2361; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2428define void @ind07(i64 %i) nounwind { 2429entry: 2430 %0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %i 2431 store i32* %0, i32** @lptr, align 8 2432 ret void 2433; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2496define void @ind08(i64 %i) nounwind { 2497entry: 2498 %0 = load i32*, i32** @lptr, align 8 2499 %1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %i 2500 %2 = load i32, i32* %1, align 4 2501 %3 = getelementptr i32, i32* %0, i64 %i 2502 store i32 %2, i32* %3, align 4 2503 ret void 2504; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2577define void @off00(i64 %i) nounwind { 2578entry: 2579 %0 = add i64 %i, 16 2580 %1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0 2581 %2 = load i32, i32* %1, align 4 2582 %3 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0 2583 store i32 %2, i32* %3, align 4 2584 ret void 2585; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2656define void @oxf00(i64 %i) nounwind { 2657entry: 2658 %0 = add i64 %i, 16 2659 %1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0 2660 %2 = load i32, i32* %1, align 4 2661 %3 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0 2662 store i32 %2, i32* %3, align 4 2663 ret void 2664; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2735define void @off01(i64 %i) nounwind { 2736entry: 2737 %.sum = add i64 %i, 16 2738 %0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %.sum 2739 store i32* %0, i32** @ptr, align 8 2740 ret void 2741; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2812define void @oxf01(i64 %i) nounwind { 2813entry: 2814 %.sum = add i64 %i, 16 2815 %0 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %.sum 2816 store i32* %0, i32** @ptr, align 8 2817 ret void 2818; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2889define void @off02(i64 %i) nounwind { 2890entry: 2891 %0 = load i32*, i32** @ptr, align 8 2892 %1 = add i64 %i, 16 2893 %2 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %1 2894 %3 = load i32, i32* %2, align 4 2895 %4 = getelementptr i32, i32* %0, i64 %1 2896 store i32 %3, i32* %4, align 4 2897 ret void 2898; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 2979define void @oxf02(i64 %i) nounwind { 2980entry: 2981 %0 = load i32*, i32** @ptr, align 8 2982 %1 = add i64 %i, 16 2983 %2 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %1 2984 %3 = load i32, i32* %2, align 4 2985 %4 = getelementptr i32, i32* %0, i64 %1 2986 store i32 %3, i32* %4, align 4 2987 ret void 2988; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 3069define void @off03(i64 %i) nounwind { 3070entry: 3071 %0 = add i64 %i, 16 3072 %1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0 3073 %2 = load i32, i32* %1, align 4 3074 %3 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0 3075 store i32 %2, i32* %3, align 4 3076 ret void 3077; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 3144define void @off04(i64 %i) nounwind { 3145entry: 3146 %.sum = add i64 %i, 16 3147 %0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %.sum 3148 store i32* %0, i32** @dptr, align 8 3149 ret void 3150; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 3214define void @off05(i64 %i) nounwind { 3215entry: 3216 %0 = load i32*, i32** @dptr, align 8 3217 %1 = add i64 %i, 16 3218 %2 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %1 3219 %3 = load i32, i32* %2, align 4 3220 %4 = getelementptr i32, i32* %0, i64 %1 3221 store i32 %3, i32* %4, align 4 3222 ret void 3223; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 3297define void @off06(i64 %i) nounwind { 3298entry: 3299 %0 = add i64 %i, 16 3300 %1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0 3301 %2 = load i32, i32* %1, align 4 3302 %3 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0 3303 store i32 %2, i32* %3, align 4 3304 ret void 3305; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 3372define void @off07(i64 %i) nounwind { 3373entry: 3374 %.sum = add i64 %i, 16 3375 %0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %.sum 3376 store i32* %0, i32** @lptr, align 8 3377 ret void 3378; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 3441define void @off08(i64 %i) nounwind { 3442entry: 3443 %0 = load i32*, i32** @lptr, align 8 3444 %1 = add i64 %i, 16 3445 %2 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %1 3446 %3 = load i32, i32* %2, align 4 3447 %4 = getelementptr i32, i32* %0, i64 %1 3448 store i32 %3, i32* %4, align 4 3449 ret void 3450; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 3523define void @moo00(i64 %i) nounwind { 3524entry: 3525 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536), align 4 3526 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536), align 4 3527 ret void 3528; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 3594define void @moo01(i64 %i) nounwind { 3595entry: 3596 store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8 3597 ret void 3598; LINUX-64-STATIC-LABEL: moo01: 3599; LINUX-64-STATIC: movq $dst+262144, ptr(%rip) 3600; LINUX-64-STATIC: ret 3601 3602; LINUX-32-STATIC-LABEL: moo01: 3603; LINUX-32-STATIC: movl $dst+262144, ptr 3604; LINUX-32-STATIC-NEXT: ret 3605 3606; LINUX-32-PIC-LABEL: moo01: 3607; LINUX-32-PIC: movl $dst+262144, ptr 3608; LINUX-32-PIC-NEXT: ret 3609 3610; LINUX-64-PIC-LABEL: 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 3660define void @moo02(i64 %i) nounwind { 3661entry: 3662 %0 = load i32*, i32** @ptr, align 8 3663 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536), align 4 3664 %2 = getelementptr i32, i32* %0, i64 65536 3665 store i32 %1, i32* %2, align 4 3666 ret void 3667; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 3743define void @moo03(i64 %i) nounwind { 3744entry: 3745 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536), align 32 3746 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536), align 32 3747 ret void 3748; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 3804define void @moo04(i64 %i) nounwind { 3805entry: 3806 store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8 3807 ret void 3808; LINUX-64-STATIC-LABEL: moo04: 3809; LINUX-64-STATIC: movq $ddst+262144, dptr 3810; LINUX-64-STATIC: ret 3811 3812; LINUX-32-STATIC-LABEL: moo04: 3813; LINUX-32-STATIC: movl $ddst+262144, dptr 3814; LINUX-32-STATIC-NEXT: ret 3815 3816; LINUX-32-PIC-LABEL: moo04: 3817; LINUX-32-PIC: movl $ddst+262144, dptr 3818; LINUX-32-PIC-NEXT: ret 3819 3820; LINUX-64-PIC-LABEL: 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 3859define void @moo05(i64 %i) nounwind { 3860entry: 3861 %0 = load i32*, i32** @dptr, align 8 3862 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536), align 32 3863 %2 = getelementptr i32, i32* %0, i64 65536 3864 store i32 %1, i32* %2, align 4 3865 ret void 3866; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 3932define void @moo06(i64 %i) nounwind { 3933entry: 3934 %0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536), align 4 3935 store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536), align 4 3936 ret void 3937; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 3991define void @moo07(i64 %i) nounwind { 3992entry: 3993 store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8 3994 ret void 3995; LINUX-64-STATIC-LABEL: moo07: 3996; LINUX-64-STATIC: movq $ldst+262144, lptr 3997; LINUX-64-STATIC: ret 3998 3999; LINUX-32-STATIC-LABEL: moo07: 4000; LINUX-32-STATIC: movl $ldst+262144, lptr 4001; LINUX-32-STATIC-NEXT: ret 4002 4003; LINUX-32-PIC-LABEL: moo07: 4004; LINUX-32-PIC: movl $ldst+262144, lptr 4005; LINUX-32-PIC-NEXT: ret 4006 4007; LINUX-64-PIC-LABEL: 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 4044define void @moo08(i64 %i) nounwind { 4045entry: 4046 %0 = load i32*, i32** @lptr, align 8 4047 %1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536), align 4 4048 %2 = getelementptr i32, i32* %0, i64 65536 4049 store i32 %1, i32* %2, align 4 4050 ret void 4051; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 4115define void @big00(i64 %i) nounwind { 4116entry: 4117 %0 = add i64 %i, 65536 4118 %1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0 4119 %2 = load i32, i32* %1, align 4 4120 %3 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0 4121 store i32 %2, i32* %3, align 4 4122 ret void 4123; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 4194define void @big01(i64 %i) nounwind { 4195entry: 4196 %.sum = add i64 %i, 65536 4197 %0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %.sum 4198 store i32* %0, i32** @ptr, align 8 4199 ret void 4200; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 4271define void @big02(i64 %i) nounwind { 4272entry: 4273 %0 = load i32*, i32** @ptr, align 8 4274 %1 = add i64 %i, 65536 4275 %2 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %1 4276 %3 = load i32, i32* %2, align 4 4277 %4 = getelementptr i32, i32* %0, i64 %1 4278 store i32 %3, i32* %4, align 4 4279 ret void 4280; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 4361define void @big03(i64 %i) nounwind { 4362entry: 4363 %0 = add i64 %i, 65536 4364 %1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0 4365 %2 = load i32, i32* %1, align 4 4366 %3 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0 4367 store i32 %2, i32* %3, align 4 4368 ret void 4369; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 4436define void @big04(i64 %i) nounwind { 4437entry: 4438 %.sum = add i64 %i, 65536 4439 %0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %.sum 4440 store i32* %0, i32** @dptr, align 8 4441 ret void 4442; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 4506define void @big05(i64 %i) nounwind { 4507entry: 4508 %0 = load i32*, i32** @dptr, align 8 4509 %1 = add i64 %i, 65536 4510 %2 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %1 4511 %3 = load i32, i32* %2, align 4 4512 %4 = getelementptr i32, i32* %0, i64 %1 4513 store i32 %3, i32* %4, align 4 4514 ret void 4515; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 4589define void @big06(i64 %i) nounwind { 4590entry: 4591 %0 = add i64 %i, 65536 4592 %1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0 4593 %2 = load i32, i32* %1, align 4 4594 %3 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0 4595 store i32 %2, i32* %3, align 4 4596 ret void 4597; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 4664define void @big07(i64 %i) nounwind { 4665entry: 4666 %.sum = add i64 %i, 65536 4667 %0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %.sum 4668 store i32* %0, i32** @lptr, align 8 4669 ret void 4670; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 4733define void @big08(i64 %i) nounwind { 4734entry: 4735 %0 = load i32*, i32** @lptr, align 8 4736 %1 = add i64 %i, 65536 4737 %2 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %1 4738 %3 = load i32, i32* %2, align 4 4739 %4 = getelementptr i32, i32* %0, i64 %1 4740 store i32 %3, i32* %4, align 4 4741 ret void 4742; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 4815define i8* @bar00() nounwind { 4816entry: 4817 ret i8* bitcast ([131072 x i32]* @src to i8*) 4818; LINUX-64-STATIC-LABEL: bar00: 4819; LINUX-64-STATIC: movl $src, %eax 4820; LINUX-64-STATIC: ret 4821 4822; LINUX-32-STATIC-LABEL: bar00: 4823; LINUX-32-STATIC: movl $src, %eax 4824; LINUX-32-STATIC-NEXT: ret 4825 4826; LINUX-32-PIC-LABEL: bar00: 4827; LINUX-32-PIC: movl $src, %eax 4828; LINUX-32-PIC-NEXT: ret 4829 4830; LINUX-64-PIC-LABEL: 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 4862define i8* @bxr00() nounwind { 4863entry: 4864 ret i8* bitcast ([32 x i32]* @xsrc to i8*) 4865; LINUX-64-STATIC-LABEL: bxr00: 4866; LINUX-64-STATIC: movl $xsrc, %eax 4867; LINUX-64-STATIC: ret 4868 4869; LINUX-32-STATIC-LABEL: bxr00: 4870; LINUX-32-STATIC: movl $xsrc, %eax 4871; LINUX-32-STATIC-NEXT: ret 4872 4873; LINUX-32-PIC-LABEL: bxr00: 4874; LINUX-32-PIC: movl $xsrc, %eax 4875; LINUX-32-PIC-NEXT: ret 4876 4877; LINUX-64-PIC-LABEL: 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 4909define i8* @bar01() nounwind { 4910entry: 4911 ret i8* bitcast ([131072 x i32]* @dst to i8*) 4912; LINUX-64-STATIC-LABEL: bar01: 4913; LINUX-64-STATIC: movl $dst, %eax 4914; LINUX-64-STATIC: ret 4915 4916; LINUX-32-STATIC-LABEL: bar01: 4917; LINUX-32-STATIC: movl $dst, %eax 4918; LINUX-32-STATIC-NEXT: ret 4919 4920; LINUX-32-PIC-LABEL: bar01: 4921; LINUX-32-PIC: movl $dst, %eax 4922; LINUX-32-PIC-NEXT: ret 4923 4924; LINUX-64-PIC-LABEL: 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 4956define i8* @bxr01() nounwind { 4957entry: 4958 ret i8* bitcast ([32 x i32]* @xdst to i8*) 4959; LINUX-64-STATIC-LABEL: bxr01: 4960; LINUX-64-STATIC: movl $xdst, %eax 4961; LINUX-64-STATIC: ret 4962 4963; LINUX-32-STATIC-LABEL: bxr01: 4964; LINUX-32-STATIC: movl $xdst, %eax 4965; LINUX-32-STATIC-NEXT: ret 4966 4967; LINUX-32-PIC-LABEL: bxr01: 4968; LINUX-32-PIC: movl $xdst, %eax 4969; LINUX-32-PIC-NEXT: ret 4970 4971; LINUX-64-PIC-LABEL: 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 5003define i8* @bar02() nounwind { 5004entry: 5005 ret i8* bitcast (i32** @ptr to i8*) 5006; LINUX-64-STATIC-LABEL: bar02: 5007; LINUX-64-STATIC: movl $ptr, %eax 5008; LINUX-64-STATIC: ret 5009 5010; LINUX-32-STATIC-LABEL: bar02: 5011; LINUX-32-STATIC: movl $ptr, %eax 5012; LINUX-32-STATIC-NEXT: ret 5013 5014; LINUX-32-PIC-LABEL: bar02: 5015; LINUX-32-PIC: movl $ptr, %eax 5016; LINUX-32-PIC-NEXT: ret 5017 5018; LINUX-64-PIC-LABEL: 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 5050define i8* @bar03() nounwind { 5051entry: 5052 ret i8* bitcast ([131072 x i32]* @dsrc to i8*) 5053; LINUX-64-STATIC-LABEL: bar03: 5054; LINUX-64-STATIC: movl $dsrc, %eax 5055; LINUX-64-STATIC: ret 5056 5057; LINUX-32-STATIC-LABEL: bar03: 5058; LINUX-32-STATIC: movl $dsrc, %eax 5059; LINUX-32-STATIC-NEXT: ret 5060 5061; LINUX-32-PIC-LABEL: bar03: 5062; LINUX-32-PIC: movl $dsrc, %eax 5063; LINUX-32-PIC-NEXT: ret 5064 5065; LINUX-64-PIC-LABEL: 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 5097define i8* @bar04() nounwind { 5098entry: 5099 ret i8* bitcast ([131072 x i32]* @ddst to i8*) 5100; LINUX-64-STATIC-LABEL: bar04: 5101; LINUX-64-STATIC: movl $ddst, %eax 5102; LINUX-64-STATIC: ret 5103 5104; LINUX-32-STATIC-LABEL: bar04: 5105; LINUX-32-STATIC: movl $ddst, %eax 5106; LINUX-32-STATIC-NEXT: ret 5107 5108; LINUX-32-PIC-LABEL: bar04: 5109; LINUX-32-PIC: movl $ddst, %eax 5110; LINUX-32-PIC-NEXT: ret 5111 5112; LINUX-64-PIC-LABEL: 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 5144define i8* @bar05() nounwind { 5145entry: 5146 ret i8* bitcast (i32** @dptr to i8*) 5147; LINUX-64-STATIC-LABEL: bar05: 5148; LINUX-64-STATIC: movl $dptr, %eax 5149; LINUX-64-STATIC: ret 5150 5151; LINUX-32-STATIC-LABEL: bar05: 5152; LINUX-32-STATIC: movl $dptr, %eax 5153; LINUX-32-STATIC-NEXT: ret 5154 5155; LINUX-32-PIC-LABEL: bar05: 5156; LINUX-32-PIC: movl $dptr, %eax 5157; LINUX-32-PIC-NEXT: ret 5158 5159; LINUX-64-PIC-LABEL: 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 5191define i8* @bar06() nounwind { 5192entry: 5193 ret i8* bitcast ([131072 x i32]* @lsrc to i8*) 5194; LINUX-64-STATIC-LABEL: bar06: 5195; LINUX-64-STATIC: movl $lsrc, %eax 5196; LINUX-64-STATIC: ret 5197 5198; LINUX-32-STATIC-LABEL: bar06: 5199; LINUX-32-STATIC: movl $lsrc, %eax 5200; LINUX-32-STATIC-NEXT: ret 5201 5202; LINUX-32-PIC-LABEL: bar06: 5203; LINUX-32-PIC: movl $lsrc, %eax 5204; LINUX-32-PIC-NEXT: ret 5205 5206; LINUX-64-PIC-LABEL: 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 5238define i8* @bar07() nounwind { 5239entry: 5240 ret i8* bitcast ([131072 x i32]* @ldst to i8*) 5241; LINUX-64-STATIC-LABEL: bar07: 5242; LINUX-64-STATIC: movl $ldst, %eax 5243; LINUX-64-STATIC: ret 5244 5245; LINUX-32-STATIC-LABEL: bar07: 5246; LINUX-32-STATIC: movl $ldst, %eax 5247; LINUX-32-STATIC-NEXT: ret 5248 5249; LINUX-32-PIC-LABEL: bar07: 5250; LINUX-32-PIC: movl $ldst, %eax 5251; LINUX-32-PIC-NEXT: ret 5252 5253; LINUX-64-PIC-LABEL: 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 5285define i8* @bar08() nounwind { 5286entry: 5287 ret i8* bitcast (i32** @lptr to i8*) 5288; LINUX-64-STATIC-LABEL: bar08: 5289; LINUX-64-STATIC: movl $lptr, %eax 5290; LINUX-64-STATIC: ret 5291 5292; LINUX-32-STATIC-LABEL: bar08: 5293; LINUX-32-STATIC: movl $lptr, %eax 5294; LINUX-32-STATIC-NEXT: ret 5295 5296; LINUX-32-PIC-LABEL: bar08: 5297; LINUX-32-PIC: movl $lptr, %eax 5298; LINUX-32-PIC-NEXT: ret 5299 5300; LINUX-64-PIC-LABEL: 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 5332define i8* @har00() nounwind { 5333entry: 5334 ret i8* bitcast ([131072 x i32]* @src to i8*) 5335; LINUX-64-STATIC-LABEL: har00: 5336; LINUX-64-STATIC: movl $src, %eax 5337; LINUX-64-STATIC: ret 5338 5339; LINUX-32-STATIC-LABEL: har00: 5340; LINUX-32-STATIC: movl $src, %eax 5341; LINUX-32-STATIC-NEXT: ret 5342 5343; LINUX-32-PIC-LABEL: har00: 5344; LINUX-32-PIC: movl $src, %eax 5345; LINUX-32-PIC-NEXT: ret 5346 5347; LINUX-64-PIC-LABEL: 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 5379define i8* @hxr00() nounwind { 5380entry: 5381 ret i8* bitcast ([32 x i32]* @xsrc to i8*) 5382; LINUX-64-STATIC-LABEL: hxr00: 5383; LINUX-64-STATIC: movl $xsrc, %eax 5384; LINUX-64-STATIC: ret 5385 5386; LINUX-32-STATIC-LABEL: hxr00: 5387; LINUX-32-STATIC: movl $xsrc, %eax 5388; LINUX-32-STATIC-NEXT: ret 5389 5390; LINUX-32-PIC-LABEL: hxr00: 5391; LINUX-32-PIC: movl $xsrc, %eax 5392; LINUX-32-PIC-NEXT: ret 5393 5394; LINUX-64-PIC-LABEL: 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 5426define i8* @har01() nounwind { 5427entry: 5428 ret i8* bitcast ([131072 x i32]* @dst to i8*) 5429; LINUX-64-STATIC-LABEL: har01: 5430; LINUX-64-STATIC: movl $dst, %eax 5431; LINUX-64-STATIC: ret 5432 5433; LINUX-32-STATIC-LABEL: har01: 5434; LINUX-32-STATIC: movl $dst, %eax 5435; LINUX-32-STATIC-NEXT: ret 5436 5437; LINUX-32-PIC-LABEL: har01: 5438; LINUX-32-PIC: movl $dst, %eax 5439; LINUX-32-PIC-NEXT: ret 5440 5441; LINUX-64-PIC-LABEL: 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 5473define i8* @hxr01() nounwind { 5474entry: 5475 ret i8* bitcast ([32 x i32]* @xdst to i8*) 5476; LINUX-64-STATIC-LABEL: hxr01: 5477; LINUX-64-STATIC: movl $xdst, %eax 5478; LINUX-64-STATIC: ret 5479 5480; LINUX-32-STATIC-LABEL: hxr01: 5481; LINUX-32-STATIC: movl $xdst, %eax 5482; LINUX-32-STATIC-NEXT: ret 5483 5484; LINUX-32-PIC-LABEL: hxr01: 5485; LINUX-32-PIC: movl $xdst, %eax 5486; LINUX-32-PIC-NEXT: ret 5487 5488; LINUX-64-PIC-LABEL: 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 5520define i8* @har02() nounwind { 5521entry: 5522 %0 = load i32*, i32** @ptr, align 8 5523 %1 = bitcast i32* %0 to i8* 5524 ret i8* %1 5525; LINUX-64-STATIC-LABEL: har02: 5526; LINUX-64-STATIC: movq ptr(%rip), %rax 5527; LINUX-64-STATIC: ret 5528 5529; LINUX-32-STATIC-LABEL: har02: 5530; LINUX-32-STATIC: movl ptr, %eax 5531; LINUX-32-STATIC-NEXT: ret 5532 5533; LINUX-32-PIC-LABEL: har02: 5534; LINUX-32-PIC: movl ptr, %eax 5535; LINUX-32-PIC-NEXT: ret 5536 5537; LINUX-64-PIC-LABEL: 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 5575define i8* @har03() nounwind { 5576entry: 5577 ret i8* bitcast ([131072 x i32]* @dsrc to i8*) 5578; LINUX-64-STATIC-LABEL: har03: 5579; LINUX-64-STATIC: movl $dsrc, %eax 5580; LINUX-64-STATIC: ret 5581 5582; LINUX-32-STATIC-LABEL: har03: 5583; LINUX-32-STATIC: movl $dsrc, %eax 5584; LINUX-32-STATIC-NEXT: ret 5585 5586; LINUX-32-PIC-LABEL: har03: 5587; LINUX-32-PIC: movl $dsrc, %eax 5588; LINUX-32-PIC-NEXT: ret 5589 5590; LINUX-64-PIC-LABEL: 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 5622define i8* @har04() nounwind { 5623entry: 5624 ret i8* bitcast ([131072 x i32]* @ddst to i8*) 5625; LINUX-64-STATIC-LABEL: har04: 5626; LINUX-64-STATIC: movl $ddst, %eax 5627; LINUX-64-STATIC: ret 5628 5629; LINUX-32-STATIC-LABEL: har04: 5630; LINUX-32-STATIC: movl $ddst, %eax 5631; LINUX-32-STATIC-NEXT: ret 5632 5633; LINUX-32-PIC-LABEL: har04: 5634; LINUX-32-PIC: movl $ddst, %eax 5635; LINUX-32-PIC-NEXT: ret 5636 5637; LINUX-64-PIC-LABEL: 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 5669define i8* @har05() nounwind { 5670entry: 5671 %0 = load i32*, i32** @dptr, align 8 5672 %1 = bitcast i32* %0 to i8* 5673 ret i8* %1 5674; LINUX-64-STATIC-LABEL: har05: 5675; LINUX-64-STATIC: movq dptr(%rip), %rax 5676; LINUX-64-STATIC: ret 5677 5678; LINUX-32-STATIC-LABEL: har05: 5679; LINUX-32-STATIC: movl dptr, %eax 5680; LINUX-32-STATIC-NEXT: ret 5681 5682; LINUX-32-PIC-LABEL: har05: 5683; LINUX-32-PIC: movl dptr, %eax 5684; LINUX-32-PIC-NEXT: ret 5685 5686; LINUX-64-PIC-LABEL: 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 5719define i8* @har06() nounwind { 5720entry: 5721 ret i8* bitcast ([131072 x i32]* @lsrc to i8*) 5722; LINUX-64-STATIC-LABEL: har06: 5723; LINUX-64-STATIC: movl $lsrc, %eax 5724; LINUX-64-STATIC: ret 5725 5726; LINUX-32-STATIC-LABEL: har06: 5727; LINUX-32-STATIC: movl $lsrc, %eax 5728; LINUX-32-STATIC-NEXT: ret 5729 5730; LINUX-32-PIC-LABEL: har06: 5731; LINUX-32-PIC: movl $lsrc, %eax 5732; LINUX-32-PIC-NEXT: ret 5733 5734; LINUX-64-PIC-LABEL: 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 5766define i8* @har07() nounwind { 5767entry: 5768 ret i8* bitcast ([131072 x i32]* @ldst to i8*) 5769; LINUX-64-STATIC-LABEL: har07: 5770; LINUX-64-STATIC: movl $ldst, %eax 5771; LINUX-64-STATIC: ret 5772 5773; LINUX-32-STATIC-LABEL: har07: 5774; LINUX-32-STATIC: movl $ldst, %eax 5775; LINUX-32-STATIC-NEXT: ret 5776 5777; LINUX-32-PIC-LABEL: har07: 5778; LINUX-32-PIC: movl $ldst, %eax 5779; LINUX-32-PIC-NEXT: ret 5780 5781; LINUX-64-PIC-LABEL: 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 5813define i8* @har08() nounwind { 5814entry: 5815 %0 = load i32*, i32** @lptr, align 8 5816 %1 = bitcast i32* %0 to i8* 5817 ret i8* %1 5818; LINUX-64-STATIC-LABEL: har08: 5819; LINUX-64-STATIC: movq lptr(%rip), %rax 5820; LINUX-64-STATIC: ret 5821 5822; LINUX-32-STATIC-LABEL: har08: 5823; LINUX-32-STATIC: movl lptr, %eax 5824; LINUX-32-STATIC-NEXT: ret 5825 5826; LINUX-32-PIC-LABEL: har08: 5827; LINUX-32-PIC: movl lptr, %eax 5828; LINUX-32-PIC-NEXT: ret 5829 5830; LINUX-64-PIC-LABEL: 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 5862define i8* @bat00() nounwind { 5863entry: 5864 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16) to i8*) 5865; LINUX-64-STATIC-LABEL: bat00: 5866; LINUX-64-STATIC: movl $src+64, %eax 5867; LINUX-64-STATIC: ret 5868 5869; LINUX-32-STATIC-LABEL: bat00: 5870; LINUX-32-STATIC: movl $src+64, %eax 5871; LINUX-32-STATIC-NEXT: ret 5872 5873; LINUX-32-PIC-LABEL: bat00: 5874; LINUX-32-PIC: movl $src+64, %eax 5875; LINUX-32-PIC-NEXT: ret 5876 5877; LINUX-64-PIC-LABEL: 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 5915define i8* @bxt00() nounwind { 5916entry: 5917 ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16) to i8*) 5918; LINUX-64-STATIC-LABEL: bxt00: 5919; LINUX-64-STATIC: movl $xsrc+64, %eax 5920; LINUX-64-STATIC: ret 5921 5922; LINUX-32-STATIC-LABEL: bxt00: 5923; LINUX-32-STATIC: movl $xsrc+64, %eax 5924; LINUX-32-STATIC-NEXT: ret 5925 5926; LINUX-32-PIC-LABEL: bxt00: 5927; LINUX-32-PIC: movl $xsrc+64, %eax 5928; LINUX-32-PIC-NEXT: ret 5929 5930; LINUX-64-PIC-LABEL: 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 5968define i8* @bat01() nounwind { 5969entry: 5970 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16) to i8*) 5971; LINUX-64-STATIC-LABEL: bat01: 5972; LINUX-64-STATIC: movl $dst+64, %eax 5973; LINUX-64-STATIC: ret 5974 5975; LINUX-32-STATIC-LABEL: bat01: 5976; LINUX-32-STATIC: movl $dst+64, %eax 5977; LINUX-32-STATIC-NEXT: ret 5978 5979; LINUX-32-PIC-LABEL: bat01: 5980; LINUX-32-PIC: movl $dst+64, %eax 5981; LINUX-32-PIC-NEXT: ret 5982 5983; LINUX-64-PIC-LABEL: 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 6021define i8* @bxt01() nounwind { 6022entry: 6023 ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16) to i8*) 6024; LINUX-64-STATIC-LABEL: bxt01: 6025; LINUX-64-STATIC: movl $xdst+64, %eax 6026; LINUX-64-STATIC: ret 6027 6028; LINUX-32-STATIC-LABEL: bxt01: 6029; LINUX-32-STATIC: movl $xdst+64, %eax 6030; LINUX-32-STATIC-NEXT: ret 6031 6032; LINUX-32-PIC-LABEL: bxt01: 6033; LINUX-32-PIC: movl $xdst+64, %eax 6034; LINUX-32-PIC-NEXT: ret 6035 6036; LINUX-64-PIC-LABEL: 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 6074define i8* @bat02() nounwind { 6075entry: 6076 %0 = load i32*, i32** @ptr, align 8 6077 %1 = getelementptr i32, i32* %0, i64 16 6078 %2 = bitcast i32* %1 to i8* 6079 ret i8* %2 6080; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 6140define i8* @bat03() nounwind { 6141entry: 6142 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16) to i8*) 6143; LINUX-64-STATIC-LABEL: bat03: 6144; LINUX-64-STATIC: movl $dsrc+64, %eax 6145; LINUX-64-STATIC: ret 6146 6147; LINUX-32-STATIC-LABEL: bat03: 6148; LINUX-32-STATIC: movl $dsrc+64, %eax 6149; LINUX-32-STATIC-NEXT: ret 6150 6151; LINUX-32-PIC-LABEL: bat03: 6152; LINUX-32-PIC: movl $dsrc+64, %eax 6153; LINUX-32-PIC-NEXT: ret 6154 6155; LINUX-64-PIC-LABEL: 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 6188define i8* @bat04() nounwind { 6189entry: 6190 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16) to i8*) 6191; LINUX-64-STATIC-LABEL: bat04: 6192; LINUX-64-STATIC: movl $ddst+64, %eax 6193; LINUX-64-STATIC: ret 6194 6195; LINUX-32-STATIC-LABEL: bat04: 6196; LINUX-32-STATIC: movl $ddst+64, %eax 6197; LINUX-32-STATIC-NEXT: ret 6198 6199; LINUX-32-PIC-LABEL: bat04: 6200; LINUX-32-PIC: movl $ddst+64, %eax 6201; LINUX-32-PIC-NEXT: ret 6202 6203; LINUX-64-PIC-LABEL: 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 6236define i8* @bat05() nounwind { 6237entry: 6238 %0 = load i32*, i32** @dptr, align 8 6239 %1 = getelementptr i32, i32* %0, i64 16 6240 %2 = bitcast i32* %1 to i8* 6241 ret i8* %2 6242; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 6297define i8* @bat06() nounwind { 6298entry: 6299 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16) to i8*) 6300; LINUX-64-STATIC-LABEL: bat06: 6301; LINUX-64-STATIC: movl $lsrc+64, %eax 6302; LINUX-64-STATIC: ret 6303 6304; LINUX-32-STATIC-LABEL: bat06: 6305; LINUX-32-STATIC: movl $lsrc+64, %eax 6306; LINUX-32-STATIC-NEXT: ret 6307 6308; LINUX-32-PIC-LABEL: bat06: 6309; LINUX-32-PIC: movl $lsrc+64, %eax 6310; LINUX-32-PIC-NEXT: ret 6311 6312; LINUX-64-PIC-LABEL: 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 6344define i8* @bat07() nounwind { 6345entry: 6346 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16) to i8*) 6347; LINUX-64-STATIC-LABEL: bat07: 6348; LINUX-64-STATIC: movl $ldst+64, %eax 6349; LINUX-64-STATIC: ret 6350 6351; LINUX-32-STATIC-LABEL: bat07: 6352; LINUX-32-STATIC: movl $ldst+64, %eax 6353; LINUX-32-STATIC-NEXT: ret 6354 6355; LINUX-32-PIC-LABEL: bat07: 6356; LINUX-32-PIC: movl $ldst+64, %eax 6357; LINUX-32-PIC-NEXT: ret 6358 6359; LINUX-64-PIC-LABEL: 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 6391define i8* @bat08() nounwind { 6392entry: 6393 %0 = load i32*, i32** @lptr, align 8 6394 %1 = getelementptr i32, i32* %0, i64 16 6395 %2 = bitcast i32* %1 to i8* 6396 ret i8* %2 6397; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 6451define i8* @bam00() nounwind { 6452entry: 6453 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536) to i8*) 6454; LINUX-64-STATIC-LABEL: bam00: 6455; LINUX-64-STATIC: movl $src+262144, %eax 6456; LINUX-64-STATIC: ret 6457 6458; LINUX-32-STATIC-LABEL: bam00: 6459; LINUX-32-STATIC: movl $src+262144, %eax 6460; LINUX-32-STATIC-NEXT: ret 6461 6462; LINUX-32-PIC-LABEL: bam00: 6463; LINUX-32-PIC: movl $src+262144, %eax 6464; LINUX-32-PIC-NEXT: ret 6465 6466; LINUX-64-PIC-LABEL: 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 6504define i8* @bam01() nounwind { 6505entry: 6506 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536) to i8*) 6507; LINUX-64-STATIC-LABEL: bam01: 6508; LINUX-64-STATIC: movl $dst+262144, %eax 6509; LINUX-64-STATIC: ret 6510 6511; LINUX-32-STATIC-LABEL: bam01: 6512; LINUX-32-STATIC: movl $dst+262144, %eax 6513; LINUX-32-STATIC-NEXT: ret 6514 6515; LINUX-32-PIC-LABEL: bam01: 6516; LINUX-32-PIC: movl $dst+262144, %eax 6517; LINUX-32-PIC-NEXT: ret 6518 6519; LINUX-64-PIC-LABEL: 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 6557define i8* @bxm01() nounwind { 6558entry: 6559 ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 65536) to i8*) 6560; LINUX-64-STATIC-LABEL: bxm01: 6561; LINUX-64-STATIC: movl $xdst+262144, %eax 6562; LINUX-64-STATIC: ret 6563 6564; LINUX-32-STATIC-LABEL: bxm01: 6565; LINUX-32-STATIC: movl $xdst+262144, %eax 6566; LINUX-32-STATIC-NEXT: ret 6567 6568; LINUX-32-PIC-LABEL: bxm01: 6569; LINUX-32-PIC: movl $xdst+262144, %eax 6570; LINUX-32-PIC-NEXT: ret 6571 6572; LINUX-64-PIC-LABEL: 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 6610define i8* @bam02() nounwind { 6611entry: 6612 %0 = load i32*, i32** @ptr, align 8 6613 %1 = getelementptr i32, i32* %0, i64 65536 6614 %2 = bitcast i32* %1 to i8* 6615 ret i8* %2 6616; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: bam02: 6632; LINUX-64-PIC: movl $262144, %eax 6633; LINUX-64-PIC-NEXT: movq ptr@GOTPCREL(%rip), [[RCX:%r.x]] 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: movl $262144, %eax 6659; DARWIN-64-STATIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 6660; DARWIN-64-STATIC-NEXT: addq ([[RCX]]), %rax 6661; DARWIN-64-STATIC-NEXT: ret 6662 6663; DARWIN-64-DYNAMIC: _bam02: 6664; DARWIN-64-DYNAMIC: movl $262144, %eax 6665; DARWIN-64-DYNAMIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 6666; DARWIN-64-DYNAMIC-NEXT: addq ([[RCX]]), %rax 6667; DARWIN-64-DYNAMIC-NEXT: ret 6668 6669; DARWIN-64-PIC: _bam02: 6670; DARWIN-64-PIC: movl $262144, %eax 6671; DARWIN-64-PIC-NEXT: movq _ptr@GOTPCREL(%rip), [[RCX:%r.x]] 6672; DARWIN-64-PIC-NEXT: addq ([[RCX]]), %rax 6673; DARWIN-64-PIC-NEXT: ret 6674} 6675 6676define i8* @bam03() nounwind { 6677entry: 6678 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536) to i8*) 6679; LINUX-64-STATIC-LABEL: bam03: 6680; LINUX-64-STATIC: movl $dsrc+262144, %eax 6681; LINUX-64-STATIC: ret 6682 6683; LINUX-32-STATIC-LABEL: bam03: 6684; LINUX-32-STATIC: movl $dsrc+262144, %eax 6685; LINUX-32-STATIC-NEXT: ret 6686 6687; LINUX-32-PIC-LABEL: bam03: 6688; LINUX-32-PIC: movl $dsrc+262144, %eax 6689; LINUX-32-PIC-NEXT: ret 6690 6691; LINUX-64-PIC-LABEL: 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 6724define i8* @bam04() nounwind { 6725entry: 6726 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536) to i8*) 6727; LINUX-64-STATIC-LABEL: bam04: 6728; LINUX-64-STATIC: movl $ddst+262144, %eax 6729; LINUX-64-STATIC: ret 6730 6731; LINUX-32-STATIC-LABEL: bam04: 6732; LINUX-32-STATIC: movl $ddst+262144, %eax 6733; LINUX-32-STATIC-NEXT: ret 6734 6735; LINUX-32-PIC-LABEL: bam04: 6736; LINUX-32-PIC: movl $ddst+262144, %eax 6737; LINUX-32-PIC-NEXT: ret 6738 6739; LINUX-64-PIC-LABEL: 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 6772define i8* @bam05() nounwind { 6773entry: 6774 %0 = load i32*, i32** @dptr, align 8 6775 %1 = getelementptr i32, i32* %0, i64 65536 6776 %2 = bitcast i32* %1 to i8* 6777 ret i8* %2 6778; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: bam05: 6794; LINUX-64-PIC: movl $262144, %eax 6795; LINUX-64-PIC-NEXT: movq dptr@GOTPCREL(%rip), [[RCX:%r.x]] 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 6833define i8* @bam06() nounwind { 6834entry: 6835 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536) to i8*) 6836; LINUX-64-STATIC-LABEL: bam06: 6837; LINUX-64-STATIC: movl $lsrc+262144, %eax 6838; LINUX-64-STATIC: ret 6839 6840; LINUX-32-STATIC-LABEL: bam06: 6841; LINUX-32-STATIC: movl $lsrc+262144, %eax 6842; LINUX-32-STATIC-NEXT: ret 6843 6844; LINUX-32-PIC-LABEL: bam06: 6845; LINUX-32-PIC: movl $lsrc+262144, %eax 6846; LINUX-32-PIC-NEXT: ret 6847 6848; LINUX-64-PIC-LABEL: 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 6880define i8* @bam07() nounwind { 6881entry: 6882 ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536) to i8*) 6883; LINUX-64-STATIC-LABEL: bam07: 6884; LINUX-64-STATIC: movl $ldst+262144, %eax 6885; LINUX-64-STATIC: ret 6886 6887; LINUX-32-STATIC-LABEL: bam07: 6888; LINUX-32-STATIC: movl $ldst+262144, %eax 6889; LINUX-32-STATIC-NEXT: ret 6890 6891; LINUX-32-PIC-LABEL: bam07: 6892; LINUX-32-PIC: movl $ldst+262144, %eax 6893; LINUX-32-PIC-NEXT: ret 6894 6895; LINUX-64-PIC-LABEL: 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 6927define i8* @bam08() nounwind { 6928entry: 6929 %0 = load i32*, i32** @lptr, align 8 6930 %1 = getelementptr i32, i32* %0, i64 65536 6931 %2 = bitcast i32* %1 to i8* 6932 ret i8* %2 6933; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 6987define i8* @cat00(i64 %i) nounwind { 6988entry: 6989 %0 = add i64 %i, 16 6990 %1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0 6991 %2 = bitcast i32* %1 to i8* 6992 ret i8* %2 6993; LINUX-64-STATIC-LABEL: cat00: 6994; LINUX-64-STATIC: leaq src+64(,%rdi,4), %rax 6995; LINUX-64-STATIC: ret 6996 6997; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 7048define i8* @cxt00(i64 %i) nounwind { 7049entry: 7050 %0 = add i64 %i, 16 7051 %1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0 7052 %2 = bitcast i32* %1 to i8* 7053 ret i8* %2 7054; LINUX-64-STATIC-LABEL: cxt00: 7055; LINUX-64-STATIC: leaq xsrc+64(,%rdi,4), %rax 7056; LINUX-64-STATIC: ret 7057 7058; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 7109define i8* @cat01(i64 %i) nounwind { 7110entry: 7111 %0 = add i64 %i, 16 7112 %1 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0 7113 %2 = bitcast i32* %1 to i8* 7114 ret i8* %2 7115; LINUX-64-STATIC-LABEL: cat01: 7116; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax 7117; LINUX-64-STATIC: ret 7118 7119; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 7170define i8* @cxt01(i64 %i) nounwind { 7171entry: 7172 %0 = add i64 %i, 16 7173 %1 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0 7174 %2 = bitcast i32* %1 to i8* 7175 ret i8* %2 7176; LINUX-64-STATIC-LABEL: cxt01: 7177; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax 7178; LINUX-64-STATIC: ret 7179 7180; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 7231define i8* @cat02(i64 %i) nounwind { 7232entry: 7233 %0 = load i32*, i32** @ptr, align 8 7234 %1 = add i64 %i, 16 7235 %2 = getelementptr i32, i32* %0, i64 %1 7236 %3 = bitcast i32* %2 to i8* 7237 ret i8* %3 7238; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 7303define i8* @cat03(i64 %i) nounwind { 7304entry: 7305 %0 = add i64 %i, 16 7306 %1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0 7307 %2 = bitcast i32* %1 to i8* 7308 ret i8* %2 7309; LINUX-64-STATIC-LABEL: cat03: 7310; LINUX-64-STATIC: leaq dsrc+64(,%rdi,4), %rax 7311; LINUX-64-STATIC: ret 7312 7313; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 7362define i8* @cat04(i64 %i) nounwind { 7363entry: 7364 %0 = add i64 %i, 16 7365 %1 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0 7366 %2 = bitcast i32* %1 to i8* 7367 ret i8* %2 7368; LINUX-64-STATIC-LABEL: cat04: 7369; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax 7370; LINUX-64-STATIC: ret 7371 7372; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 7421define i8* @cat05(i64 %i) nounwind { 7422entry: 7423 %0 = load i32*, i32** @dptr, align 8 7424 %1 = add i64 %i, 16 7425 %2 = getelementptr i32, i32* %0, i64 %1 7426 %3 = bitcast i32* %2 to i8* 7427 ret i8* %3 7428; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 7488define i8* @cat06(i64 %i) nounwind { 7489entry: 7490 %0 = add i64 %i, 16 7491 %1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0 7492 %2 = bitcast i32* %1 to i8* 7493 ret i8* %2 7494; LINUX-64-STATIC-LABEL: cat06: 7495; LINUX-64-STATIC: leaq lsrc+64(,%rdi,4), %rax 7496; LINUX-64-STATIC: ret 7497 7498; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 7547define i8* @cat07(i64 %i) nounwind { 7548entry: 7549 %0 = add i64 %i, 16 7550 %1 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0 7551 %2 = bitcast i32* %1 to i8* 7552 ret i8* %2 7553; LINUX-64-STATIC-LABEL: cat07: 7554; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax 7555; LINUX-64-STATIC: ret 7556 7557; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 7606define i8* @cat08(i64 %i) nounwind { 7607entry: 7608 %0 = load i32*, i32** @lptr, align 8 7609 %1 = add i64 %i, 16 7610 %2 = getelementptr i32, i32* %0, i64 %1 7611 %3 = bitcast i32* %2 to i8* 7612 ret i8* %3 7613; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 7672define i8* @cam00(i64 %i) nounwind { 7673entry: 7674 %0 = add i64 %i, 65536 7675 %1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0 7676 %2 = bitcast i32* %1 to i8* 7677 ret i8* %2 7678; LINUX-64-STATIC-LABEL: cam00: 7679; LINUX-64-STATIC: leaq src+262144(,%rdi,4), %rax 7680; LINUX-64-STATIC: ret 7681 7682; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 7733define i8* @cxm00(i64 %i) nounwind { 7734entry: 7735 %0 = add i64 %i, 65536 7736 %1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0 7737 %2 = bitcast i32* %1 to i8* 7738 ret i8* %2 7739; LINUX-64-STATIC-LABEL: cxm00: 7740; LINUX-64-STATIC: leaq xsrc+262144(,%rdi,4), %rax 7741; LINUX-64-STATIC: ret 7742 7743; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 7794define i8* @cam01(i64 %i) nounwind { 7795entry: 7796 %0 = add i64 %i, 65536 7797 %1 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0 7798 %2 = bitcast i32* %1 to i8* 7799 ret i8* %2 7800; LINUX-64-STATIC-LABEL: cam01: 7801; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax 7802; LINUX-64-STATIC: ret 7803 7804; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 7855define i8* @cxm01(i64 %i) nounwind { 7856entry: 7857 %0 = add i64 %i, 65536 7858 %1 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0 7859 %2 = bitcast i32* %1 to i8* 7860 ret i8* %2 7861; LINUX-64-STATIC-LABEL: cxm01: 7862; LINUX-64-STATIC: leaq xdst+262144(,%rdi,4), %rax 7863; LINUX-64-STATIC: ret 7864 7865; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 7916define i8* @cam02(i64 %i) nounwind { 7917entry: 7918 %0 = load i32*, i32** @ptr, align 8 7919 %1 = add i64 %i, 65536 7920 %2 = getelementptr i32, i32* %0, i64 %1 7921 %3 = bitcast i32* %2 to i8* 7922 ret i8* %3 7923; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 7988define i8* @cam03(i64 %i) nounwind { 7989entry: 7990 %0 = add i64 %i, 65536 7991 %1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0 7992 %2 = bitcast i32* %1 to i8* 7993 ret i8* %2 7994; LINUX-64-STATIC-LABEL: cam03: 7995; LINUX-64-STATIC: leaq dsrc+262144(,%rdi,4), %rax 7996; LINUX-64-STATIC: ret 7997 7998; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 8047define i8* @cam04(i64 %i) nounwind { 8048entry: 8049 %0 = add i64 %i, 65536 8050 %1 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0 8051 %2 = bitcast i32* %1 to i8* 8052 ret i8* %2 8053; LINUX-64-STATIC-LABEL: cam04: 8054; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax 8055; LINUX-64-STATIC: ret 8056 8057; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 8106define i8* @cam05(i64 %i) nounwind { 8107entry: 8108 %0 = load i32*, i32** @dptr, align 8 8109 %1 = add i64 %i, 65536 8110 %2 = getelementptr i32, i32* %0, i64 %1 8111 %3 = bitcast i32* %2 to i8* 8112 ret i8* %3 8113; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 8173define i8* @cam06(i64 %i) nounwind { 8174entry: 8175 %0 = add i64 %i, 65536 8176 %1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0 8177 %2 = bitcast i32* %1 to i8* 8178 ret i8* %2 8179; LINUX-64-STATIC-LABEL: cam06: 8180; LINUX-64-STATIC: leaq lsrc+262144(,%rdi,4), %rax 8181; LINUX-64-STATIC: ret 8182 8183; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 8232define i8* @cam07(i64 %i) nounwind { 8233entry: 8234 %0 = add i64 %i, 65536 8235 %1 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0 8236 %2 = bitcast i32* %1 to i8* 8237 ret i8* %2 8238; LINUX-64-STATIC-LABEL: cam07: 8239; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax 8240; LINUX-64-STATIC: ret 8241 8242; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 8291define i8* @cam08(i64 %i) nounwind { 8292entry: 8293 %0 = load i32*, i32** @lptr, align 8 8294 %1 = add i64 %i, 65536 8295 %2 = getelementptr i32, i32* %0, i64 %1 8296 %3 = bitcast i32* %2 to i8* 8297 ret i8* %3 8298; LINUX-64-STATIC-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 8357define void @lcallee() nounwind { 8358entry: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 _x 8429; DARWIN-32-DYNAMIC-NEXT: calll _x 8430; DARWIN-32-DYNAMIC-NEXT: calll _x 8431; DARWIN-32-DYNAMIC-NEXT: calll _x 8432; DARWIN-32-DYNAMIC-NEXT: calll _x 8433; DARWIN-32-DYNAMIC-NEXT: calll _x 8434; DARWIN-32-DYNAMIC-NEXT: calll _x 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 _x 8441; DARWIN-32-PIC-NEXT: calll _x 8442; DARWIN-32-PIC-NEXT: calll _x 8443; DARWIN-32-PIC-NEXT: calll _x 8444; DARWIN-32-PIC-NEXT: calll _x 8445; DARWIN-32-PIC-NEXT: calll _x 8446; DARWIN-32-PIC-NEXT: calll _x 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 8487declare void @x() 8488 8489define internal void @dcallee() nounwind { 8490entry: 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-LABEL: 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-LABEL: 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-LABEL: 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-LABEL: 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 _y 8561; DARWIN-32-DYNAMIC-NEXT: calll _y 8562; DARWIN-32-DYNAMIC-NEXT: calll _y 8563; DARWIN-32-DYNAMIC-NEXT: calll _y 8564; DARWIN-32-DYNAMIC-NEXT: calll _y 8565; DARWIN-32-DYNAMIC-NEXT: calll _y 8566; DARWIN-32-DYNAMIC-NEXT: calll _y 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 _y 8573; DARWIN-32-PIC-NEXT: calll _y 8574; DARWIN-32-PIC-NEXT: calll _y 8575; DARWIN-32-PIC-NEXT: calll _y 8576; DARWIN-32-PIC-NEXT: calll _y 8577; DARWIN-32-PIC-NEXT: calll _y 8578; DARWIN-32-PIC-NEXT: calll _y 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 8619declare void @y() 8620 8621define void ()* @address() nounwind { 8622entry: 8623 ret void ()* @callee 8624; LINUX-64-STATIC-LABEL: address: 8625; LINUX-64-STATIC: movl $callee, %eax 8626; LINUX-64-STATIC: ret 8627 8628; LINUX-32-STATIC-LABEL: address: 8629; LINUX-32-STATIC: movl $callee, %eax 8630; LINUX-32-STATIC-NEXT: ret 8631 8632; LINUX-32-PIC-LABEL: address: 8633; LINUX-32-PIC: movl $callee, %eax 8634; LINUX-32-PIC-NEXT: ret 8635 8636; LINUX-64-PIC-LABEL: 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 8668declare void @callee() 8669 8670define void ()* @laddress() nounwind { 8671entry: 8672 ret void ()* @lcallee 8673; LINUX-64-STATIC-LABEL: laddress: 8674; LINUX-64-STATIC: movl $lcallee, %eax 8675; LINUX-64-STATIC: ret 8676 8677; LINUX-32-STATIC-LABEL: laddress: 8678; LINUX-32-STATIC: movl $lcallee, %eax 8679; LINUX-32-STATIC-NEXT: ret 8680 8681; LINUX-32-PIC-LABEL: laddress: 8682; LINUX-32-PIC: movl $lcallee, %eax 8683; LINUX-32-PIC-NEXT: ret 8684 8685; LINUX-64-PIC-LABEL: 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 8717define void ()* @daddress() nounwind { 8718entry: 8719 ret void ()* @dcallee 8720; LINUX-64-STATIC-LABEL: daddress: 8721; LINUX-64-STATIC: movl $dcallee, %eax 8722; LINUX-64-STATIC: ret 8723 8724; LINUX-32-STATIC-LABEL: daddress: 8725; LINUX-32-STATIC: movl $dcallee, %eax 8726; LINUX-32-STATIC-NEXT: ret 8727 8728; LINUX-32-PIC-LABEL: daddress: 8729; LINUX-32-PIC: movl $dcallee, %eax 8730; LINUX-32-PIC-NEXT: ret 8731 8732; LINUX-64-PIC-LABEL: 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 8764define void @caller() nounwind { 8765entry: 8766 call void @callee() nounwind 8767 call void @callee() nounwind 8768 ret void 8769; LINUX-64-STATIC-LABEL: caller: 8770; LINUX-64-STATIC: callq callee 8771; LINUX-64-STATIC: callq callee 8772; LINUX-64-STATIC: ret 8773 8774; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 _callee 8806; DARWIN-32-DYNAMIC-NEXT: calll _callee 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 _callee 8813; DARWIN-32-PIC-NEXT: calll _callee 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 8839define void @dcaller() nounwind { 8840entry: 8841 call void @dcallee() nounwind 8842 call void @dcallee() nounwind 8843 ret void 8844; LINUX-64-STATIC-LABEL: dcaller: 8845; LINUX-64-STATIC: callq dcallee 8846; LINUX-64-STATIC: callq dcallee 8847; LINUX-64-STATIC: ret 8848 8849; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 8914define void @lcaller() nounwind { 8915entry: 8916 call void @lcallee() nounwind 8917 call void @lcallee() nounwind 8918 ret void 8919; LINUX-64-STATIC-LABEL: lcaller: 8920; LINUX-64-STATIC: callq lcallee 8921; LINUX-64-STATIC: callq lcallee 8922; LINUX-64-STATIC: ret 8923 8924; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 8989define void @tailcaller() nounwind { 8990entry: 8991 call void @callee() nounwind 8992 ret void 8993; LINUX-64-STATIC-LABEL: tailcaller: 8994; LINUX-64-STATIC: callq callee 8995; LINUX-64-STATIC: ret 8996 8997; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 _callee 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 _callee 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 9053define void @dtailcaller() nounwind { 9054entry: 9055 call void @dcallee() nounwind 9056 ret void 9057; LINUX-64-STATIC-LABEL: dtailcaller: 9058; LINUX-64-STATIC: callq dcallee 9059; LINUX-64-STATIC: ret 9060 9061; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 9117define void @ltailcaller() nounwind { 9118entry: 9119 call void @lcallee() nounwind 9120 ret void 9121; LINUX-64-STATIC-LABEL: ltailcaller: 9122; LINUX-64-STATIC: callq lcallee 9123; LINUX-64-STATIC: ret 9124 9125; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 9181define void @icaller() nounwind { 9182entry: 9183 %0 = load void ()*, void ()** @ifunc, align 8 9184 call void %0() nounwind 9185 %1 = load void ()*, void ()** @ifunc, align 8 9186 call void %1() nounwind 9187 ret void 9188; LINUX-64-STATIC-LABEL: icaller: 9189; LINUX-64-STATIC: callq *ifunc 9190; LINUX-64-STATIC: callq *ifunc 9191; LINUX-64-STATIC: ret 9192 9193; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 9271define void @dicaller() nounwind { 9272entry: 9273 %0 = load void ()*, void ()** @difunc, align 8 9274 call void %0() nounwind 9275 %1 = load void ()*, void ()** @difunc, align 8 9276 call void %1() nounwind 9277 ret void 9278; LINUX-64-STATIC-LABEL: dicaller: 9279; LINUX-64-STATIC: callq *difunc 9280; LINUX-64-STATIC: callq *difunc 9281; LINUX-64-STATIC: ret 9282 9283; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 9354define void @licaller() nounwind { 9355entry: 9356 %0 = load void ()*, void ()** @lifunc, align 8 9357 call void %0() nounwind 9358 %1 = load void ()*, void ()** @lifunc, align 8 9359 call void %1() nounwind 9360 ret void 9361; LINUX-64-STATIC-LABEL: licaller: 9362; LINUX-64-STATIC: callq *lifunc 9363; LINUX-64-STATIC: callq *lifunc 9364; LINUX-64-STATIC: ret 9365 9366; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 9436define void @itailcaller() nounwind { 9437entry: 9438 %0 = load void ()*, void ()** @ifunc, align 8 9439 call void %0() nounwind 9440 %1 = load void ()*, void ()** @ifunc, align 8 9441 call void %1() nounwind 9442 ret void 9443; LINUX-64-STATIC-LABEL: itailcaller: 9444; LINUX-64-STATIC: callq *ifunc 9445; LINUX-64-STATIC: callq *ifunc 9446; LINUX-64-STATIC: ret 9447 9448; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 9526define void @ditailcaller() nounwind { 9527entry: 9528 %0 = load void ()*, void ()** @difunc, align 8 9529 call void %0() nounwind 9530 ret void 9531; LINUX-64-STATIC-LABEL: ditailcaller: 9532; LINUX-64-STATIC: callq *difunc 9533; LINUX-64-STATIC: ret 9534 9535; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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 9594define void @litailcaller() nounwind { 9595entry: 9596 %0 = load void ()*, void ()** @lifunc, align 8 9597 call void %0() nounwind 9598 ret void 9599; LINUX-64-STATIC-LABEL: litailcaller: 9600; LINUX-64-STATIC: callq *lifunc 9601; LINUX-64-STATIC: ret 9602 9603; LINUX-32-STATIC-LABEL: 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-LABEL: 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-LABEL: 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