1; RUN: llvm-as < %s | llc -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small > %t 2; RUN: grep leal %t | count 33 3; RUN: grep movl %t | count 239 4; RUN: grep addl %t | count 20 5; RUN: grep subl %t | count 14 6; RUN: not grep leaq %t 7; RUN: not grep movq %t 8; RUN: not grep addq %t 9; RUN: not grep subq %t 10; RUN: not grep movabs %t 11; RUN: not grep largecomm %t 12; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t 13; RUN: not grep @GOT %t 14; RUN: not grep @GOTOFF %t 15; RUN: not grep @GOTPCREL %t 16; RUN: not grep @GOTPLT %t 17; RUN: not grep @PLT %t 18; RUN: not grep @PLTOFF %t 19; RUN: grep {call \\\*} %t | count 10 20; RUN: not grep %rip %t 21; RUN: llvm-as < %s | llc -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=pic -code-model=small > %t 22; RUN: grep leal %t | count 43 23; RUN: grep movl %t | count 377 24; RUN: grep addl %t | count 179 25; RUN: grep subl %t | count 6 26; RUN: not grep leaq %t 27; RUN: not grep movq %t 28; RUN: not grep addq %t 29; RUN: not grep subq %t 30; RUN: not grep movabs %t 31; RUN: not grep largecomm %t 32; RUN: grep _GLOBAL_OFFSET_TABLE_ %t | count 148 33; RUN: grep @GOT %t | count 207 34; RUN: grep @GOTOFF %t | count 58 35; RUN: not grep @GOTPCREL %t 36; RUN: not grep @GOTPLT %t 37; RUN: grep @PLT %t | count 20 38; RUN: not grep @PLTOFF %t 39; RUN: grep {call \\\*} %t | count 10 40; RUN: not grep {%rip} %t 41 42; RUN: llvm-as < %s | llc -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=static -code-model=small | FileCheck %s -check-prefix=LINUX-64-STATIC 43 44; RUN: llvm-as < %s | llc -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=pic -code-model=small > %t 45; RUN: not grep leal %t 46; RUN: grep movl %t | count 98 47; RUN: not grep addl %t 48; RUN: not grep subl %t 49; RUN: grep leaq %t | count 59 50; RUN: grep movq %t | count 195 51; RUN: grep addq %t | count 36 52; RUN: grep subq %t | count 11 53; RUN: not grep movabs %t 54; RUN: not grep largecomm %t 55; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t 56; RUN: grep @GOT %t | count 149 57; RUN: not grep @GOTOFF %t 58; RUN: grep @GOTPCREL %t | count 149 59; RUN: not grep @GOTPLT %t 60; RUN: grep @PLT %t | count 20 61; RUN: not grep @PLTOFF %t 62; RUN: grep {call \\\*} %t | count 10 63; RUN: grep {%rip} %t | count 207 64 65 66 67; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin -march=x86 -relocation-model=static -code-model=small > %t 68; RUN: grep leal %t | count 33 69; RUN: grep movl %t | count 239 70; RUN: grep addl %t | count 20 71; RUN: grep subl %t | count 14 72; RUN: not grep leaq %t 73; RUN: not grep movq %t 74; RUN: not grep addq %t 75; RUN: not grep subq %t 76; RUN: not grep movabs %t 77; RUN: not grep largecomm %t 78; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t 79; RUN: not grep @GOT %t 80; RUN: not grep @GOTOFF %t 81; RUN: not grep @GOTPCREL %t 82; RUN: not grep @GOTPLT %t 83; RUN: not grep @PLT %t 84; RUN: not grep @PLTOFF %t 85; RUN: grep {call \\\*} %t | count 10 86; RUN: not grep %rip %t 87; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin -march=x86 -relocation-model=dynamic-no-pic -code-model=small > %t 88; RUN: grep leal %t | count 31 89; RUN: grep movl %t | count 312 90; RUN: grep addl %t | count 32 91; RUN: grep subl %t | count 14 92; RUN: not grep leaq %t 93; RUN: not grep movq %t 94; RUN: not grep addq %t 95; RUN: not grep subq %t 96; RUN: not grep movabs %t 97; RUN: not grep largecomm %t 98; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t 99; RUN: not grep @GOT %t 100; RUN: not grep @GOTOFF %t 101; RUN: not grep @GOTPCREL %t 102; RUN: not grep @GOTPLT %t 103; RUN: not grep @PLT %t 104; RUN: not grep @PLTOFF %t 105; RUN: grep {call \\\*} %t | count 10 106; RUN: not grep {%rip} %t 107; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin -march=x86 -relocation-model=pic -code-model=small > %t 108; RUN: grep leal %t | count 57 109; RUN: grep movl %t | count 292 110; RUN: grep addl %t | count 32 111; RUN: grep subl %t | count 14 112; RUN: not grep leaq %t 113; RUN: not grep movq %t 114; RUN: not grep addq %t 115; RUN: not grep subq %t 116; RUN: not grep movabs %t 117; RUN: not grep largecomm %t 118; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t 119; RUN: not grep @GOT %t 120; RUN: not grep @GOTOFF %t 121; RUN: not grep @GOTPCREL %t 122; RUN: not grep @GOTPLT %t 123; RUN: not grep @PLT %t 124; RUN: not grep @PLTOFF %t 125; RUN: grep {call \\\*} %t | count 10 126; RUN: not grep {%rip} %t 127; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=dynamic-no-pic -code-model=small > %t 128; RUN: not grep leal %t 129; RUN: grep movl %t | count 95 130; RUN: not grep addl %t 131; RUN: not grep subl %t 132; RUN: grep leaq %t | count 89 133; RUN: grep movq %t | count 142 134; RUN: grep addq %t | count 30 135; RUN: grep subq %t | count 12 136; RUN: not grep movabs %t 137; RUN: not grep largecomm %t 138; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t 139; RUN: grep @GOT %t | count 92 140; RUN: not grep @GOTOFF %t 141; RUN: grep @GOTPCREL %t | count 92 142; RUN: not grep @GOTPLT %t 143; RUN: not grep @PLT %t 144; RUN: not grep @PLTOFF %t 145; RUN: grep {call \\\*} %t | count 10 146; RUN: grep {%rip} %t | count 208 147; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=pic -code-model=small > %t 148; RUN: not grep leal %t 149; RUN: grep movl %t | count 95 150; RUN: not grep addl %t 151; RUN: not grep subl %t 152; RUN: grep leaq %t | count 89 153; RUN: grep movq %t | count 142 154; RUN: grep addq %t | count 30 155; RUN: grep subq %t | count 12 156; RUN: not grep movabs %t 157; RUN: not grep largecomm %t 158; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t 159; RUN: grep @GOT %t | count 92 160; RUN: not grep @GOTOFF %t 161; RUN: grep @GOTPCREL %t | count 92 162; RUN: not grep @GOTPLT %t 163; RUN: not grep @PLT %t 164; RUN: not grep @PLTOFF %t 165; RUN: grep {call \\\*} %t | count 10 166; RUN: grep {%rip} %t | count 208 167 168@src = external global [131072 x i32] 169@dst = external global [131072 x i32] 170@xsrc = external global [32 x i32] 171@xdst = external global [32 x i32] 172@ptr = external global i32* 173@dsrc = global [131072 x i32] zeroinitializer, align 32 174@ddst = global [131072 x i32] zeroinitializer, align 32 175@dptr = global i32* null 176@lsrc = internal global [131072 x i32] zeroinitializer 177@ldst = internal global [131072 x i32] zeroinitializer 178@lptr = internal global i32* null 179@ifunc = external global void ()* 180@difunc = global void ()* null 181@lifunc = internal global void ()* null 182@lxsrc = internal global [32 x i32] zeroinitializer, align 32 183@lxdst = internal global [32 x i32] zeroinitializer, align 32 184@dxsrc = global [32 x i32] zeroinitializer, align 32 185@dxdst = global [32 x i32] zeroinitializer, align 32 186 187define void @foo00() nounwind { 188entry: 189 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4 190 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 0), align 4 191 ret void 192 193; LINUX-64-STATIC: foo00: 194; LINUX-64-STATIC: movl src, %eax 195; LINUX-64-STATIC: movl %eax, dst 196; LINUX-64-STATIC: ret 197} 198 199define void @fxo00() nounwind { 200entry: 201 %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4 202 store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 0), align 4 203 ret void 204 205; LINUX-64-STATIC: fxo00: 206; LINUX-64-STATIC: movl xsrc, %eax 207; LINUX-64-STATIC: movl %eax, xdst 208; LINUX-64-STATIC: ret 209} 210 211define void @foo01() nounwind { 212entry: 213 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8 214 ret void 215; LINUX-64-STATIC: foo01: 216; LINUX-64-STATIC: movq $dst, ptr 217; LINUX-64-STATIC: ret 218} 219 220define void @fxo01() nounwind { 221entry: 222 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8 223 ret void 224; LINUX-64-STATIC: fxo01: 225; LINUX-64-STATIC: movq $xdst, ptr 226; LINUX-64-STATIC: ret 227} 228 229define void @foo02() nounwind { 230entry: 231 %0 = load i32** @ptr, align 8 232 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4 233 store i32 %1, i32* %0, align 4 234 ret void 235; LINUX-64-STATIC: foo02: 236; LINUX-64-STATIC: movl src, % 237; LINUX-64-STATIC: movq ptr, % 238; LINUX-64-STATIC: movl 239; LINUX-64-STATIC: ret 240} 241 242define void @fxo02() nounwind { 243entry: 244 %0 = load i32** @ptr, align 8 245 %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4 246 store i32 %1, i32* %0, align 4 247; LINUX-64-STATIC: fxo02: 248; LINUX-64-STATIC: movl xsrc, % 249; LINUX-64-STATIC: movq ptr, % 250; LINUX-64-STATIC: movl 251; LINUX-64-STATIC: ret 252 ret void 253} 254 255define void @foo03() nounwind { 256entry: 257 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32 258 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 0), align 32 259 ret void 260; LINUX-64-STATIC: foo03: 261; LINUX-64-STATIC: movl dsrc, %eax 262; LINUX-64-STATIC: movl %eax, ddst 263; LINUX-64-STATIC: ret 264} 265 266define void @foo04() nounwind { 267entry: 268 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8 269 ret void 270; LINUX-64-STATIC: foo04: 271; LINUX-64-STATIC: movq $ddst, dptr 272; LINUX-64-STATIC: ret 273} 274 275define void @foo05() nounwind { 276entry: 277 %0 = load i32** @dptr, align 8 278 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32 279 store i32 %1, i32* %0, align 4 280 ret void 281; LINUX-64-STATIC: foo05: 282; LINUX-64-STATIC: movl dsrc, % 283; LINUX-64-STATIC: movq dptr, % 284; LINUX-64-STATIC: movl 285; LINUX-64-STATIC: ret 286} 287 288define void @foo06() nounwind { 289entry: 290 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4 291 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 0), align 4 292 ret void 293; LINUX-64-STATIC: foo06: 294; LINUX-64-STATIC: movl lsrc, %eax 295; LINUX-64-STATIC: movl %eax, ldst 296; LINUX-64-STATIC: ret 297} 298 299define void @foo07() nounwind { 300entry: 301 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8 302 ret void 303; LINUX-64-STATIC: foo07: 304; LINUX-64-STATIC: movq $ldst, lptr 305; LINUX-64-STATIC: ret 306} 307 308define void @foo08() nounwind { 309entry: 310 %0 = load i32** @lptr, align 8 311 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4 312 store i32 %1, i32* %0, align 4 313 ret void 314; LINUX-64-STATIC: foo08: 315; LINUX-64-STATIC: movl lsrc, % 316; LINUX-64-STATIC: movq lptr, % 317; LINUX-64-STATIC: movl 318; LINUX-64-STATIC: ret 319} 320 321define void @qux00() nounwind { 322entry: 323 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4 324 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), align 4 325 ret void 326; LINUX-64-STATIC: qux00: 327; LINUX-64-STATIC: movl src+64, %eax 328; LINUX-64-STATIC: movl %eax, dst+64 329; LINUX-64-STATIC: ret 330} 331 332define void @qxx00() nounwind { 333entry: 334 %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4 335 store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), align 4 336 ret void 337; LINUX-64-STATIC: qxx00: 338; LINUX-64-STATIC: movl xsrc+64, %eax 339; LINUX-64-STATIC: movl %eax, xdst+64 340; LINUX-64-STATIC: ret 341} 342 343define void @qux01() nounwind { 344entry: 345 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8 346 ret void 347; LINUX-64-STATIC: qux01: 348; LINUX-64-STATIC: movq $dst+64, ptr 349; LINUX-64-STATIC: ret 350} 351 352define void @qxx01() nounwind { 353entry: 354 store i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8 355 ret void 356; LINUX-64-STATIC: qxx01: 357; LINUX-64-STATIC: movq $xdst+64, ptr 358; LINUX-64-STATIC: ret 359} 360 361define void @qux02() nounwind { 362entry: 363 %0 = load i32** @ptr, align 8 364 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4 365 %2 = getelementptr i32* %0, i64 16 366 store i32 %1, i32* %2, align 4 367; LINUX-64-STATIC: qux02: 368; LINUX-64-STATIC: movl src+64, %eax 369; LINUX-64-STATIC: movq ptr, %rcx 370; LINUX-64-STATIC: movl %eax, 64(%rcx) 371; LINUX-64-STATIC: ret 372 ret void 373} 374 375define void @qxx02() nounwind { 376entry: 377 %0 = load i32** @ptr, align 8 378 %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4 379 %2 = getelementptr i32* %0, i64 16 380 store i32 %1, i32* %2, align 4 381; LINUX-64-STATIC: qxx02: 382; LINUX-64-STATIC: movl xsrc+64, %eax 383; LINUX-64-STATIC: movq ptr, %rcx 384; LINUX-64-STATIC: movl %eax, 64(%rcx) 385; LINUX-64-STATIC: ret 386 ret void 387} 388 389define void @qux03() nounwind { 390entry: 391 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32 392 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), align 32 393 ret void 394; LINUX-64-STATIC: qux03: 395; LINUX-64-STATIC: movl dsrc+64, %eax 396; LINUX-64-STATIC: movl %eax, ddst+64 397; LINUX-64-STATIC: ret 398} 399 400define void @qux04() nounwind { 401entry: 402 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8 403 ret void 404; LINUX-64-STATIC: qux04: 405; LINUX-64-STATIC: movq $ddst+64, dptr 406; LINUX-64-STATIC: ret 407} 408 409define void @qux05() nounwind { 410entry: 411 %0 = load i32** @dptr, align 8 412 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32 413 %2 = getelementptr i32* %0, i64 16 414 store i32 %1, i32* %2, align 4 415; LINUX-64-STATIC: qux05: 416; LINUX-64-STATIC: movl dsrc+64, %eax 417; LINUX-64-STATIC: movq dptr, %rcx 418; LINUX-64-STATIC: movl %eax, 64(%rcx) 419; LINUX-64-STATIC: ret 420 ret void 421} 422 423define void @qux06() nounwind { 424entry: 425 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4 426 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), align 4 427 ret void 428; LINUX-64-STATIC: qux06: 429; LINUX-64-STATIC: movl lsrc+64, %eax 430; LINUX-64-STATIC: movl %eax, ldst+64 431; LINUX-64-STATIC: ret 432} 433 434define void @qux07() nounwind { 435entry: 436 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8 437 ret void 438; LINUX-64-STATIC: qux07: 439; LINUX-64-STATIC: movq $ldst+64, lptr 440; LINUX-64-STATIC: ret 441} 442 443define void @qux08() nounwind { 444entry: 445 %0 = load i32** @lptr, align 8 446 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4 447 %2 = getelementptr i32* %0, i64 16 448 store i32 %1, i32* %2, align 4 449; LINUX-64-STATIC: qux08: 450; LINUX-64-STATIC: movl lsrc+64, %eax 451; LINUX-64-STATIC: movq lptr, %rcx 452; LINUX-64-STATIC: movl %eax, 64(%rcx) 453; LINUX-64-STATIC: ret 454 ret void 455} 456 457define void @ind00(i64 %i) nounwind { 458entry: 459 %0 = getelementptr [131072 x i32]* @src, i64 0, i64 %i 460 %1 = load i32* %0, align 4 461 %2 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i 462 store i32 %1, i32* %2, align 4 463 ret void 464; LINUX-64-STATIC: ind00: 465; LINUX-64-STATIC: movl src(,%rdi,4), %eax 466; LINUX-64-STATIC: movl %eax, dst(,%rdi,4) 467; LINUX-64-STATIC: ret 468} 469 470define void @ixd00(i64 %i) nounwind { 471entry: 472 %0 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i 473 %1 = load i32* %0, align 4 474 %2 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i 475 store i32 %1, i32* %2, align 4 476 ret void 477; LINUX-64-STATIC: ixd00: 478; LINUX-64-STATIC: movl xsrc(,%rdi,4), %eax 479; LINUX-64-STATIC: movl %eax, xdst(,%rdi,4) 480; LINUX-64-STATIC: ret 481} 482 483define void @ind01(i64 %i) nounwind { 484entry: 485 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i 486 store i32* %0, i32** @ptr, align 8 487 ret void 488; LINUX-64-STATIC: ind01: 489; LINUX-64-STATIC: leaq dst(,%rdi,4), %rax 490; LINUX-64-STATIC: movq %rax, ptr 491; LINUX-64-STATIC: ret 492} 493 494define void @ixd01(i64 %i) nounwind { 495entry: 496 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i 497 store i32* %0, i32** @ptr, align 8 498 ret void 499; LINUX-64-STATIC: ixd01: 500; LINUX-64-STATIC: leaq xdst(,%rdi,4), %rax 501; LINUX-64-STATIC: movq %rax, ptr 502; LINUX-64-STATIC: ret 503} 504 505define void @ind02(i64 %i) nounwind { 506entry: 507 %0 = load i32** @ptr, align 8 508 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %i 509 %2 = load i32* %1, align 4 510 %3 = getelementptr i32* %0, i64 %i 511 store i32 %2, i32* %3, align 4 512 ret void 513; LINUX-64-STATIC: ind02: 514; LINUX-64-STATIC: movl src(,%rdi,4), %eax 515; LINUX-64-STATIC: movq ptr, %rcx 516; LINUX-64-STATIC: movl %eax, (%rcx,%rdi,4) 517; LINUX-64-STATIC: ret 518} 519 520define void @ixd02(i64 %i) nounwind { 521entry: 522 %0 = load i32** @ptr, align 8 523 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i 524 %2 = load i32* %1, align 4 525 %3 = getelementptr i32* %0, i64 %i 526 store i32 %2, i32* %3, align 4 527 ret void 528; LINUX-64-STATIC: ixd02: 529; LINUX-64-STATIC: movl xsrc(,%rdi,4), %eax 530; LINUX-64-STATIC: movq ptr, %rcx 531; LINUX-64-STATIC: movl %eax, (%rcx,%rdi,4) 532; LINUX-64-STATIC: ret 533} 534 535define void @ind03(i64 %i) nounwind { 536entry: 537 %0 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i 538 %1 = load i32* %0, align 4 539 %2 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i 540 store i32 %1, i32* %2, align 4 541 ret void 542; LINUX-64-STATIC: ind03: 543; LINUX-64-STATIC: movl dsrc(,%rdi,4), %eax 544; LINUX-64-STATIC: movl %eax, ddst(,%rdi,4) 545; LINUX-64-STATIC: ret 546} 547 548define void @ind04(i64 %i) nounwind { 549entry: 550 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i 551 store i32* %0, i32** @dptr, align 8 552 ret void 553; LINUX-64-STATIC: ind04: 554; LINUX-64-STATIC: leaq ddst(,%rdi,4), %rax 555; LINUX-64-STATIC: movq %rax, dptr 556; LINUX-64-STATIC: ret 557} 558 559define void @ind05(i64 %i) nounwind { 560entry: 561 %0 = load i32** @dptr, align 8 562 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i 563 %2 = load i32* %1, align 4 564 %3 = getelementptr i32* %0, i64 %i 565 store i32 %2, i32* %3, align 4 566 ret void 567; LINUX-64-STATIC: ind05: 568; LINUX-64-STATIC: movl dsrc(,%rdi,4), %eax 569; LINUX-64-STATIC: movq dptr, %rcx 570; LINUX-64-STATIC: movl %eax, (%rcx,%rdi,4) 571; LINUX-64-STATIC: ret 572} 573 574define void @ind06(i64 %i) nounwind { 575entry: 576 %0 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i 577 %1 = load i32* %0, align 4 578 %2 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i 579 store i32 %1, i32* %2, align 4 580 ret void 581; LINUX-64-STATIC: ind06: 582; LINUX-64-STATIC: movl lsrc(,%rdi,4), %eax 583; LINUX-64-STATIC: movl %eax, ldst(,%rdi,4) 584; LINUX-64-STATIC: ret 585} 586 587define void @ind07(i64 %i) nounwind { 588entry: 589 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i 590 store i32* %0, i32** @lptr, align 8 591 ret void 592; LINUX-64-STATIC: ind07: 593; LINUX-64-STATIC: leaq ldst(,%rdi,4), %rax 594; LINUX-64-STATIC: movq %rax, lptr 595; LINUX-64-STATIC: ret 596} 597 598define void @ind08(i64 %i) nounwind { 599entry: 600 %0 = load i32** @lptr, align 8 601 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i 602 %2 = load i32* %1, align 4 603 %3 = getelementptr i32* %0, i64 %i 604 store i32 %2, i32* %3, align 4 605 ret void 606; LINUX-64-STATIC: ind08: 607; LINUX-64-STATIC: movl lsrc(,%rdi,4), %eax 608; LINUX-64-STATIC: movq lptr, %rcx 609; LINUX-64-STATIC: movl %eax, (%rcx,%rdi,4) 610; LINUX-64-STATIC: ret 611} 612 613define void @off00(i64 %i) nounwind { 614entry: 615 %0 = add i64 %i, 16 616 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0 617 %2 = load i32* %1, align 4 618 %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0 619 store i32 %2, i32* %3, align 4 620 ret void 621; LINUX-64-STATIC: off00: 622; LINUX-64-STATIC: movl src+64(,%rdi,4), %eax 623; LINUX-64-STATIC: movl %eax, dst+64(,%rdi,4) 624; LINUX-64-STATIC: ret 625} 626 627define void @oxf00(i64 %i) nounwind { 628entry: 629 %0 = add i64 %i, 16 630 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0 631 %2 = load i32* %1, align 4 632 %3 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0 633 store i32 %2, i32* %3, align 4 634 ret void 635; LINUX-64-STATIC: oxf00: 636; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), %eax 637; LINUX-64-STATIC: movl %eax, xdst+64(,%rdi,4) 638; LINUX-64-STATIC: ret 639} 640 641define void @off01(i64 %i) nounwind { 642entry: 643 %.sum = add i64 %i, 16 644 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum 645 store i32* %0, i32** @ptr, align 8 646 ret void 647; LINUX-64-STATIC: off01: 648; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax 649; LINUX-64-STATIC: movq %rax, ptr 650; LINUX-64-STATIC: ret 651} 652 653define void @oxf01(i64 %i) nounwind { 654entry: 655 %.sum = add i64 %i, 16 656 %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %.sum 657 store i32* %0, i32** @ptr, align 8 658 ret void 659; LINUX-64-STATIC: oxf01: 660; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax 661; LINUX-64-STATIC: movq %rax, ptr 662; LINUX-64-STATIC: ret 663} 664 665define void @off02(i64 %i) nounwind { 666entry: 667 %0 = load i32** @ptr, align 8 668 %1 = add i64 %i, 16 669 %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1 670 %3 = load i32* %2, align 4 671 %4 = getelementptr i32* %0, i64 %1 672 store i32 %3, i32* %4, align 4 673 ret void 674; LINUX-64-STATIC: off02: 675; LINUX-64-STATIC: movl src+64(,%rdi,4), %eax 676; LINUX-64-STATIC: movq ptr, %rcx 677; LINUX-64-STATIC: movl %eax, 64(%rcx,%rdi,4) 678; LINUX-64-STATIC: ret 679} 680 681define void @oxf02(i64 %i) nounwind { 682entry: 683 %0 = load i32** @ptr, align 8 684 %1 = add i64 %i, 16 685 %2 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %1 686 %3 = load i32* %2, align 4 687 %4 = getelementptr i32* %0, i64 %1 688 store i32 %3, i32* %4, align 4 689 ret void 690; LINUX-64-STATIC: oxf02: 691; LINUX-64-STATIC: movl xsrc+64(,%rdi,4), %eax 692; LINUX-64-STATIC: movq ptr, %rcx 693; LINUX-64-STATIC: movl %eax, 64(%rcx,%rdi,4) 694; LINUX-64-STATIC: ret 695} 696 697define void @off03(i64 %i) nounwind { 698entry: 699 %0 = add i64 %i, 16 700 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0 701 %2 = load i32* %1, align 4 702 %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0 703 store i32 %2, i32* %3, align 4 704 ret void 705; LINUX-64-STATIC: off03: 706; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), %eax 707; LINUX-64-STATIC: movl %eax, ddst+64(,%rdi,4) 708; LINUX-64-STATIC: ret 709} 710 711define void @off04(i64 %i) nounwind { 712entry: 713 %.sum = add i64 %i, 16 714 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum 715 store i32* %0, i32** @dptr, align 8 716 ret void 717; LINUX-64-STATIC: off04: 718; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax 719; LINUX-64-STATIC: movq %rax, dptr 720; LINUX-64-STATIC: ret 721} 722 723define void @off05(i64 %i) nounwind { 724entry: 725 %0 = load i32** @dptr, align 8 726 %1 = add i64 %i, 16 727 %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1 728 %3 = load i32* %2, align 4 729 %4 = getelementptr i32* %0, i64 %1 730 store i32 %3, i32* %4, align 4 731 ret void 732; LINUX-64-STATIC: off05: 733; LINUX-64-STATIC: movl dsrc+64(,%rdi,4), %eax 734; LINUX-64-STATIC: movq dptr, %rcx 735; LINUX-64-STATIC: movl %eax, 64(%rcx,%rdi,4) 736; LINUX-64-STATIC: ret 737} 738 739define void @off06(i64 %i) nounwind { 740entry: 741 %0 = add i64 %i, 16 742 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0 743 %2 = load i32* %1, align 4 744 %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0 745 store i32 %2, i32* %3, align 4 746 ret void 747; LINUX-64-STATIC: off06: 748; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), %eax 749; LINUX-64-STATIC: movl %eax, ldst+64(,%rdi,4) 750; LINUX-64-STATIC: ret 751} 752 753define void @off07(i64 %i) nounwind { 754entry: 755 %.sum = add i64 %i, 16 756 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum 757 store i32* %0, i32** @lptr, align 8 758 ret void 759; LINUX-64-STATIC: off07: 760; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax 761; LINUX-64-STATIC: movq %rax, lptr 762; LINUX-64-STATIC: ret 763} 764 765define void @off08(i64 %i) nounwind { 766entry: 767 %0 = load i32** @lptr, align 8 768 %1 = add i64 %i, 16 769 %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1 770 %3 = load i32* %2, align 4 771 %4 = getelementptr i32* %0, i64 %1 772 store i32 %3, i32* %4, align 4 773 ret void 774; LINUX-64-STATIC: off08: 775; LINUX-64-STATIC: movl lsrc+64(,%rdi,4), %eax 776; LINUX-64-STATIC: movq lptr, %rcx 777; LINUX-64-STATIC: movl %eax, 64(%rcx,%rdi,4) 778; LINUX-64-STATIC: ret 779} 780 781define void @moo00(i64 %i) nounwind { 782entry: 783 %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4 784 store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), align 4 785 ret void 786; LINUX-64-STATIC: moo00: 787; LINUX-64-STATIC: movl src+262144, %eax 788; LINUX-64-STATIC: movl %eax, dst+262144 789; LINUX-64-STATIC: ret 790} 791 792define void @moo01(i64 %i) nounwind { 793entry: 794 store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8 795 ret void 796; LINUX-64-STATIC: moo01: 797; LINUX-64-STATIC: movq $dst+262144, ptr 798; LINUX-64-STATIC: ret 799} 800 801define void @moo02(i64 %i) nounwind { 802entry: 803 %0 = load i32** @ptr, align 8 804 %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4 805 %2 = getelementptr i32* %0, i64 65536 806 store i32 %1, i32* %2, align 4 807 ret void 808; LINUX-64-STATIC: moo02: 809; LINUX-64-STATIC: movl src+262144, %eax 810; LINUX-64-STATIC: movq ptr, %rcx 811; LINUX-64-STATIC: movl %eax, 262144(%rcx) 812; LINUX-64-STATIC: ret 813} 814 815define void @moo03(i64 %i) nounwind { 816entry: 817 %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32 818 store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), align 32 819 ret void 820; LINUX-64-STATIC: moo03: 821; LINUX-64-STATIC: movl dsrc+262144, %eax 822; LINUX-64-STATIC: movl %eax, ddst+262144 823; LINUX-64-STATIC: ret 824} 825 826define void @moo04(i64 %i) nounwind { 827entry: 828 store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8 829 ret void 830; LINUX-64-STATIC: moo04: 831; LINUX-64-STATIC: movq $ddst+262144, dptr 832; LINUX-64-STATIC: ret 833} 834 835define void @moo05(i64 %i) nounwind { 836entry: 837 %0 = load i32** @dptr, align 8 838 %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32 839 %2 = getelementptr i32* %0, i64 65536 840 store i32 %1, i32* %2, align 4 841 ret void 842; LINUX-64-STATIC: moo05: 843; LINUX-64-STATIC: movl dsrc+262144, %eax 844; LINUX-64-STATIC: movq dptr, %rcx 845; LINUX-64-STATIC: movl %eax, 262144(%rcx) 846; LINUX-64-STATIC: ret 847} 848 849define void @moo06(i64 %i) nounwind { 850entry: 851 %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4 852 store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), align 4 853 ret void 854; LINUX-64-STATIC: moo06: 855; LINUX-64-STATIC: movl lsrc+262144, %eax 856; LINUX-64-STATIC: movl %eax, ldst+262144 857; LINUX-64-STATIC: ret 858} 859 860define void @moo07(i64 %i) nounwind { 861entry: 862 store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8 863 ret void 864; LINUX-64-STATIC: moo07: 865; LINUX-64-STATIC: movq $ldst+262144, lptr 866; LINUX-64-STATIC: ret 867} 868 869define void @moo08(i64 %i) nounwind { 870entry: 871 %0 = load i32** @lptr, align 8 872 %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4 873 %2 = getelementptr i32* %0, i64 65536 874 store i32 %1, i32* %2, align 4 875 ret void 876; LINUX-64-STATIC: moo08: 877; LINUX-64-STATIC: movl lsrc+262144, %eax 878; LINUX-64-STATIC: movq lptr, %rcx 879; LINUX-64-STATIC: movl %eax, 262144(%rcx) 880; LINUX-64-STATIC: ret 881} 882 883define void @big00(i64 %i) nounwind { 884entry: 885 %0 = add i64 %i, 65536 886 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0 887 %2 = load i32* %1, align 4 888 %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0 889 store i32 %2, i32* %3, align 4 890 ret void 891; LINUX-64-STATIC: big00: 892; LINUX-64-STATIC: movl src+262144(,%rdi,4), %eax 893; LINUX-64-STATIC: movl %eax, dst+262144(,%rdi,4) 894; LINUX-64-STATIC: ret 895} 896 897define void @big01(i64 %i) nounwind { 898entry: 899 %.sum = add i64 %i, 65536 900 %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum 901 store i32* %0, i32** @ptr, align 8 902 ret void 903; LINUX-64-STATIC: big01: 904; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax 905; LINUX-64-STATIC: movq %rax, ptr 906; LINUX-64-STATIC: ret 907} 908 909define void @big02(i64 %i) nounwind { 910entry: 911 %0 = load i32** @ptr, align 8 912 %1 = add i64 %i, 65536 913 %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1 914 %3 = load i32* %2, align 4 915 %4 = getelementptr i32* %0, i64 %1 916 store i32 %3, i32* %4, align 4 917 ret void 918; LINUX-64-STATIC: big02: 919; LINUX-64-STATIC: movl src+262144(,%rdi,4), %eax 920; LINUX-64-STATIC: movq ptr, %rcx 921; LINUX-64-STATIC: movl %eax, 262144(%rcx,%rdi,4) 922; LINUX-64-STATIC: ret 923} 924 925define void @big03(i64 %i) nounwind { 926entry: 927 %0 = add i64 %i, 65536 928 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0 929 %2 = load i32* %1, align 4 930 %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0 931 store i32 %2, i32* %3, align 4 932 ret void 933; LINUX-64-STATIC: big03: 934; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), %eax 935; LINUX-64-STATIC: movl %eax, ddst+262144(,%rdi,4) 936; LINUX-64-STATIC: ret 937} 938 939define void @big04(i64 %i) nounwind { 940entry: 941 %.sum = add i64 %i, 65536 942 %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum 943 store i32* %0, i32** @dptr, align 8 944 ret void 945; LINUX-64-STATIC: big04: 946; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax 947; LINUX-64-STATIC: movq %rax, dptr 948; LINUX-64-STATIC: ret 949} 950 951define void @big05(i64 %i) nounwind { 952entry: 953 %0 = load i32** @dptr, align 8 954 %1 = add i64 %i, 65536 955 %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1 956 %3 = load i32* %2, align 4 957 %4 = getelementptr i32* %0, i64 %1 958 store i32 %3, i32* %4, align 4 959 ret void 960; LINUX-64-STATIC: big05: 961; LINUX-64-STATIC: movl dsrc+262144(,%rdi,4), %eax 962; LINUX-64-STATIC: movq dptr, %rcx 963; LINUX-64-STATIC: movl %eax, 262144(%rcx,%rdi,4) 964; LINUX-64-STATIC: ret 965} 966 967define void @big06(i64 %i) nounwind { 968entry: 969 %0 = add i64 %i, 65536 970 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0 971 %2 = load i32* %1, align 4 972 %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0 973 store i32 %2, i32* %3, align 4 974 ret void 975; LINUX-64-STATIC: big06: 976; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), %eax 977; LINUX-64-STATIC: movl %eax, ldst+262144(,%rdi,4) 978; LINUX-64-STATIC: ret 979} 980 981define void @big07(i64 %i) nounwind { 982entry: 983 %.sum = add i64 %i, 65536 984 %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum 985 store i32* %0, i32** @lptr, align 8 986 ret void 987; LINUX-64-STATIC: big07: 988; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax 989; LINUX-64-STATIC: movq %rax, lptr 990; LINUX-64-STATIC: ret 991} 992 993define void @big08(i64 %i) nounwind { 994entry: 995 %0 = load i32** @lptr, align 8 996 %1 = add i64 %i, 65536 997 %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1 998 %3 = load i32* %2, align 4 999 %4 = getelementptr i32* %0, i64 %1 1000 store i32 %3, i32* %4, align 4 1001 ret void 1002; LINUX-64-STATIC: big08: 1003; LINUX-64-STATIC: movl lsrc+262144(,%rdi,4), %eax 1004; LINUX-64-STATIC: movq lptr, %rcx 1005; LINUX-64-STATIC: movl %eax, 262144(%rcx,%rdi,4) 1006; LINUX-64-STATIC: ret 1007} 1008 1009define i8* @bar00() nounwind { 1010entry: 1011 ret i8* bitcast ([131072 x i32]* @src to i8*) 1012; LINUX-64-STATIC: bar00: 1013; LINUX-64-STATIC: movl $src, %eax 1014; LINUX-64-STATIC: ret 1015} 1016 1017define i8* @bxr00() nounwind { 1018entry: 1019 ret i8* bitcast ([32 x i32]* @xsrc to i8*) 1020; LINUX-64-STATIC: bxr00: 1021; LINUX-64-STATIC: movl $xsrc, %eax 1022; LINUX-64-STATIC: ret 1023} 1024 1025define i8* @bar01() nounwind { 1026entry: 1027 ret i8* bitcast ([131072 x i32]* @dst to i8*) 1028; LINUX-64-STATIC: bar01: 1029; LINUX-64-STATIC: movl $dst, %eax 1030; LINUX-64-STATIC: ret 1031} 1032 1033define i8* @bxr01() nounwind { 1034entry: 1035 ret i8* bitcast ([32 x i32]* @xdst to i8*) 1036; LINUX-64-STATIC: bxr01: 1037; LINUX-64-STATIC: movl $xdst, %eax 1038; LINUX-64-STATIC: ret 1039} 1040 1041define i8* @bar02() nounwind { 1042entry: 1043 ret i8* bitcast (i32** @ptr to i8*) 1044; LINUX-64-STATIC: bar02: 1045; LINUX-64-STATIC: movl $ptr, %eax 1046; LINUX-64-STATIC: ret 1047} 1048 1049define i8* @bar03() nounwind { 1050entry: 1051 ret i8* bitcast ([131072 x i32]* @dsrc to i8*) 1052; LINUX-64-STATIC: bar03: 1053; LINUX-64-STATIC: movl $dsrc, %eax 1054; LINUX-64-STATIC: ret 1055} 1056 1057define i8* @bar04() nounwind { 1058entry: 1059 ret i8* bitcast ([131072 x i32]* @ddst to i8*) 1060; LINUX-64-STATIC: bar04: 1061; LINUX-64-STATIC: movl $ddst, %eax 1062; LINUX-64-STATIC: ret 1063} 1064 1065define i8* @bar05() nounwind { 1066entry: 1067 ret i8* bitcast (i32** @dptr to i8*) 1068; LINUX-64-STATIC: bar05: 1069; LINUX-64-STATIC: movl $dptr, %eax 1070; LINUX-64-STATIC: ret 1071} 1072 1073define i8* @bar06() nounwind { 1074entry: 1075 ret i8* bitcast ([131072 x i32]* @lsrc to i8*) 1076; LINUX-64-STATIC: bar06: 1077; LINUX-64-STATIC: movl $lsrc, %eax 1078; LINUX-64-STATIC: ret 1079} 1080 1081define i8* @bar07() nounwind { 1082entry: 1083 ret i8* bitcast ([131072 x i32]* @ldst to i8*) 1084; LINUX-64-STATIC: bar07: 1085; LINUX-64-STATIC: movl $ldst, %eax 1086; LINUX-64-STATIC: ret 1087} 1088 1089define i8* @bar08() nounwind { 1090entry: 1091 ret i8* bitcast (i32** @lptr to i8*) 1092; LINUX-64-STATIC: bar08: 1093; LINUX-64-STATIC: movl $lptr, %eax 1094; LINUX-64-STATIC: ret 1095} 1096 1097define i8* @har00() nounwind { 1098entry: 1099 ret i8* bitcast ([131072 x i32]* @src to i8*) 1100; LINUX-64-STATIC: har00: 1101; LINUX-64-STATIC: movl $src, %eax 1102; LINUX-64-STATIC: ret 1103} 1104 1105define i8* @hxr00() nounwind { 1106entry: 1107 ret i8* bitcast ([32 x i32]* @xsrc to i8*) 1108; LINUX-64-STATIC: hxr00: 1109; LINUX-64-STATIC: movl $xsrc, %eax 1110; LINUX-64-STATIC: ret 1111} 1112 1113define i8* @har01() nounwind { 1114entry: 1115 ret i8* bitcast ([131072 x i32]* @dst to i8*) 1116; LINUX-64-STATIC: har01: 1117; LINUX-64-STATIC: movl $dst, %eax 1118; LINUX-64-STATIC: ret 1119} 1120 1121define i8* @hxr01() nounwind { 1122entry: 1123 ret i8* bitcast ([32 x i32]* @xdst to i8*) 1124; LINUX-64-STATIC: hxr01: 1125; LINUX-64-STATIC: movl $xdst, %eax 1126; LINUX-64-STATIC: ret 1127} 1128 1129define i8* @har02() nounwind { 1130entry: 1131 %0 = load i32** @ptr, align 8 1132 %1 = bitcast i32* %0 to i8* 1133 ret i8* %1 1134; LINUX-64-STATIC: har02: 1135; LINUX-64-STATIC: movq ptr, %rax 1136; LINUX-64-STATIC: ret 1137} 1138 1139define i8* @har03() nounwind { 1140entry: 1141 ret i8* bitcast ([131072 x i32]* @dsrc to i8*) 1142; LINUX-64-STATIC: har03: 1143; LINUX-64-STATIC: movl $dsrc, %eax 1144; LINUX-64-STATIC: ret 1145} 1146 1147define i8* @har04() nounwind { 1148entry: 1149 ret i8* bitcast ([131072 x i32]* @ddst to i8*) 1150; LINUX-64-STATIC: har04: 1151; LINUX-64-STATIC: movl $ddst, %eax 1152; LINUX-64-STATIC: ret 1153} 1154 1155define i8* @har05() nounwind { 1156entry: 1157 %0 = load i32** @dptr, align 8 1158 %1 = bitcast i32* %0 to i8* 1159 ret i8* %1 1160; LINUX-64-STATIC: har05: 1161; LINUX-64-STATIC: movq dptr, %rax 1162; LINUX-64-STATIC: ret 1163} 1164 1165define i8* @har06() nounwind { 1166entry: 1167 ret i8* bitcast ([131072 x i32]* @lsrc to i8*) 1168; LINUX-64-STATIC: har06: 1169; LINUX-64-STATIC: movl $lsrc, %eax 1170; LINUX-64-STATIC: ret 1171} 1172 1173define i8* @har07() nounwind { 1174entry: 1175 ret i8* bitcast ([131072 x i32]* @ldst to i8*) 1176; LINUX-64-STATIC: har07: 1177; LINUX-64-STATIC: movl $ldst, %eax 1178; LINUX-64-STATIC: ret 1179} 1180 1181define i8* @har08() nounwind { 1182entry: 1183 %0 = load i32** @lptr, align 8 1184 %1 = bitcast i32* %0 to i8* 1185 ret i8* %1 1186; LINUX-64-STATIC: har08: 1187; LINUX-64-STATIC: movq lptr, %rax 1188; LINUX-64-STATIC: ret 1189} 1190 1191define i8* @bat00() nounwind { 1192entry: 1193 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16) to i8*) 1194; LINUX-64-STATIC: bat00: 1195; LINUX-64-STATIC: movl $src+64, %eax 1196; LINUX-64-STATIC: ret 1197} 1198 1199define i8* @bxt00() nounwind { 1200entry: 1201 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16) to i8*) 1202; LINUX-64-STATIC: bxt00: 1203; LINUX-64-STATIC: movl $xsrc+64, %eax 1204; LINUX-64-STATIC: ret 1205} 1206 1207define i8* @bat01() nounwind { 1208entry: 1209 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16) to i8*) 1210; LINUX-64-STATIC: bat01: 1211; LINUX-64-STATIC: movl $dst+64, %eax 1212; LINUX-64-STATIC: ret 1213} 1214 1215define i8* @bxt01() nounwind { 1216entry: 1217 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16) to i8*) 1218; LINUX-64-STATIC: bxt01: 1219; LINUX-64-STATIC: movl $xdst+64, %eax 1220; LINUX-64-STATIC: ret 1221} 1222 1223define i8* @bat02() nounwind { 1224entry: 1225 %0 = load i32** @ptr, align 8 1226 %1 = getelementptr i32* %0, i64 16 1227 %2 = bitcast i32* %1 to i8* 1228 ret i8* %2 1229; LINUX-64-STATIC: bat02: 1230; LINUX-64-STATIC: movq ptr, %rax 1231; LINUX-64-STATIC: addq $64, %rax 1232; LINUX-64-STATIC: ret 1233} 1234 1235define i8* @bat03() nounwind { 1236entry: 1237 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16) to i8*) 1238; LINUX-64-STATIC: bat03: 1239; LINUX-64-STATIC: movl $dsrc+64, %eax 1240; LINUX-64-STATIC: ret 1241} 1242 1243define i8* @bat04() nounwind { 1244entry: 1245 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16) to i8*) 1246; LINUX-64-STATIC: bat04: 1247; LINUX-64-STATIC: movl $ddst+64, %eax 1248; LINUX-64-STATIC: ret 1249} 1250 1251define i8* @bat05() nounwind { 1252entry: 1253 %0 = load i32** @dptr, align 8 1254 %1 = getelementptr i32* %0, i64 16 1255 %2 = bitcast i32* %1 to i8* 1256 ret i8* %2 1257; LINUX-64-STATIC: bat05: 1258; LINUX-64-STATIC: movq dptr, %rax 1259; LINUX-64-STATIC: addq $64, %rax 1260; LINUX-64-STATIC: ret 1261} 1262 1263define i8* @bat06() nounwind { 1264entry: 1265 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16) to i8*) 1266; LINUX-64-STATIC: bat06: 1267; LINUX-64-STATIC: movl $lsrc+64, %eax 1268; LINUX-64-STATIC: ret 1269} 1270 1271define i8* @bat07() nounwind { 1272entry: 1273 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16) to i8*) 1274; LINUX-64-STATIC: bat07: 1275; LINUX-64-STATIC: movl $ldst+64, %eax 1276; LINUX-64-STATIC: ret 1277} 1278 1279define i8* @bat08() nounwind { 1280entry: 1281 %0 = load i32** @lptr, align 8 1282 %1 = getelementptr i32* %0, i64 16 1283 %2 = bitcast i32* %1 to i8* 1284 ret i8* %2 1285; LINUX-64-STATIC: bat08: 1286; LINUX-64-STATIC: movq lptr, %rax 1287; LINUX-64-STATIC: addq $64, %rax 1288; LINUX-64-STATIC: ret 1289} 1290 1291define i8* @bam00() nounwind { 1292entry: 1293 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536) to i8*) 1294; LINUX-64-STATIC: bam00: 1295; LINUX-64-STATIC: movl $src+262144, %eax 1296; LINUX-64-STATIC: ret 1297} 1298 1299define i8* @bam01() nounwind { 1300entry: 1301 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536) to i8*) 1302; LINUX-64-STATIC: bam01: 1303; LINUX-64-STATIC: movl $dst+262144, %eax 1304; LINUX-64-STATIC: ret 1305} 1306 1307define i8* @bxm01() nounwind { 1308entry: 1309 ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 65536) to i8*) 1310; LINUX-64-STATIC: bxm01: 1311; LINUX-64-STATIC: movl $xdst+262144, %eax 1312; LINUX-64-STATIC: ret 1313} 1314 1315define i8* @bam02() nounwind { 1316entry: 1317 %0 = load i32** @ptr, align 8 1318 %1 = getelementptr i32* %0, i64 65536 1319 %2 = bitcast i32* %1 to i8* 1320 ret i8* %2 1321; LINUX-64-STATIC: bam02: 1322; LINUX-64-STATIC: movl $262144, %eax 1323; LINUX-64-STATIC: addq ptr, %rax 1324; LINUX-64-STATIC: ret 1325} 1326 1327define i8* @bam03() nounwind { 1328entry: 1329 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536) to i8*) 1330; LINUX-64-STATIC: bam03: 1331; LINUX-64-STATIC: movl $dsrc+262144, %eax 1332; LINUX-64-STATIC: ret 1333} 1334 1335define i8* @bam04() nounwind { 1336entry: 1337 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536) to i8*) 1338; LINUX-64-STATIC: bam04: 1339; LINUX-64-STATIC: movl $ddst+262144, %eax 1340; LINUX-64-STATIC: ret 1341} 1342 1343define i8* @bam05() nounwind { 1344entry: 1345 %0 = load i32** @dptr, align 8 1346 %1 = getelementptr i32* %0, i64 65536 1347 %2 = bitcast i32* %1 to i8* 1348 ret i8* %2 1349; LINUX-64-STATIC: bam05: 1350; LINUX-64-STATIC: movl $262144, %eax 1351; LINUX-64-STATIC: addq dptr, %rax 1352; LINUX-64-STATIC: ret 1353} 1354 1355define i8* @bam06() nounwind { 1356entry: 1357 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536) to i8*) 1358; LINUX-64-STATIC: bam06: 1359; LINUX-64-STATIC: movl $lsrc+262144, %eax 1360; LINUX-64-STATIC: ret 1361} 1362 1363define i8* @bam07() nounwind { 1364entry: 1365 ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536) to i8*) 1366; LINUX-64-STATIC: bam07: 1367; LINUX-64-STATIC: movl $ldst+262144, %eax 1368; LINUX-64-STATIC: ret 1369} 1370 1371define i8* @bam08() nounwind { 1372entry: 1373 %0 = load i32** @lptr, align 8 1374 %1 = getelementptr i32* %0, i64 65536 1375 %2 = bitcast i32* %1 to i8* 1376 ret i8* %2 1377; LINUX-64-STATIC: bam08: 1378; LINUX-64-STATIC: movl $262144, %eax 1379; LINUX-64-STATIC: addq lptr, %rax 1380; LINUX-64-STATIC: ret 1381} 1382 1383define i8* @cat00(i64 %i) nounwind { 1384entry: 1385 %0 = add i64 %i, 16 1386 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0 1387 %2 = bitcast i32* %1 to i8* 1388 ret i8* %2 1389; LINUX-64-STATIC: cat00: 1390; LINUX-64-STATIC: leaq src+64(,%rdi,4), %rax 1391; LINUX-64-STATIC: ret 1392} 1393 1394define i8* @cxt00(i64 %i) nounwind { 1395entry: 1396 %0 = add i64 %i, 16 1397 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0 1398 %2 = bitcast i32* %1 to i8* 1399 ret i8* %2 1400; LINUX-64-STATIC: cxt00: 1401; LINUX-64-STATIC: leaq xsrc+64(,%rdi,4), %rax 1402; LINUX-64-STATIC: ret 1403} 1404 1405define i8* @cat01(i64 %i) nounwind { 1406entry: 1407 %0 = add i64 %i, 16 1408 %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0 1409 %2 = bitcast i32* %1 to i8* 1410 ret i8* %2 1411; LINUX-64-STATIC: cat01: 1412; LINUX-64-STATIC: leaq dst+64(,%rdi,4), %rax 1413; LINUX-64-STATIC: ret 1414} 1415 1416define i8* @cxt01(i64 %i) nounwind { 1417entry: 1418 %0 = add i64 %i, 16 1419 %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0 1420 %2 = bitcast i32* %1 to i8* 1421 ret i8* %2 1422; LINUX-64-STATIC: cxt01: 1423; LINUX-64-STATIC: leaq xdst+64(,%rdi,4), %rax 1424; LINUX-64-STATIC: ret 1425} 1426 1427define i8* @cat02(i64 %i) nounwind { 1428entry: 1429 %0 = load i32** @ptr, align 8 1430 %1 = add i64 %i, 16 1431 %2 = getelementptr i32* %0, i64 %1 1432 %3 = bitcast i32* %2 to i8* 1433 ret i8* %3 1434; LINUX-64-STATIC: cat02: 1435; LINUX-64-STATIC: movq ptr, %rax 1436; LINUX-64-STATIC: leaq 64(%rax,%rdi,4), %rax 1437; LINUX-64-STATIC: ret 1438} 1439 1440define i8* @cat03(i64 %i) nounwind { 1441entry: 1442 %0 = add i64 %i, 16 1443 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0 1444 %2 = bitcast i32* %1 to i8* 1445 ret i8* %2 1446; LINUX-64-STATIC: cat03: 1447; LINUX-64-STATIC: leaq dsrc+64(,%rdi,4), %rax 1448; LINUX-64-STATIC: ret 1449} 1450 1451define i8* @cat04(i64 %i) nounwind { 1452entry: 1453 %0 = add i64 %i, 16 1454 %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0 1455 %2 = bitcast i32* %1 to i8* 1456 ret i8* %2 1457; LINUX-64-STATIC: cat04: 1458; LINUX-64-STATIC: leaq ddst+64(,%rdi,4), %rax 1459; LINUX-64-STATIC: ret 1460} 1461 1462define i8* @cat05(i64 %i) nounwind { 1463entry: 1464 %0 = load i32** @dptr, align 8 1465 %1 = add i64 %i, 16 1466 %2 = getelementptr i32* %0, i64 %1 1467 %3 = bitcast i32* %2 to i8* 1468 ret i8* %3 1469; LINUX-64-STATIC: cat05: 1470; LINUX-64-STATIC: movq dptr, %rax 1471; LINUX-64-STATIC: leaq 64(%rax,%rdi,4), %rax 1472; LINUX-64-STATIC: ret 1473} 1474 1475define i8* @cat06(i64 %i) nounwind { 1476entry: 1477 %0 = add i64 %i, 16 1478 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0 1479 %2 = bitcast i32* %1 to i8* 1480 ret i8* %2 1481; LINUX-64-STATIC: cat06: 1482; LINUX-64-STATIC: leaq lsrc+64(,%rdi,4), %rax 1483; LINUX-64-STATIC: ret 1484} 1485 1486define i8* @cat07(i64 %i) nounwind { 1487entry: 1488 %0 = add i64 %i, 16 1489 %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0 1490 %2 = bitcast i32* %1 to i8* 1491 ret i8* %2 1492; LINUX-64-STATIC: cat07: 1493; LINUX-64-STATIC: leaq ldst+64(,%rdi,4), %rax 1494; LINUX-64-STATIC: ret 1495} 1496 1497define i8* @cat08(i64 %i) nounwind { 1498entry: 1499 %0 = load i32** @lptr, align 8 1500 %1 = add i64 %i, 16 1501 %2 = getelementptr i32* %0, i64 %1 1502 %3 = bitcast i32* %2 to i8* 1503 ret i8* %3 1504; LINUX-64-STATIC: cat08: 1505; LINUX-64-STATIC: movq lptr, %rax 1506; LINUX-64-STATIC: leaq 64(%rax,%rdi,4), %rax 1507; LINUX-64-STATIC: ret 1508} 1509 1510define i8* @cam00(i64 %i) nounwind { 1511entry: 1512 %0 = add i64 %i, 65536 1513 %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0 1514 %2 = bitcast i32* %1 to i8* 1515 ret i8* %2 1516; LINUX-64-STATIC: cam00: 1517; LINUX-64-STATIC: leaq src+262144(,%rdi,4), %rax 1518; LINUX-64-STATIC: ret 1519} 1520 1521define i8* @cxm00(i64 %i) nounwind { 1522entry: 1523 %0 = add i64 %i, 65536 1524 %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0 1525 %2 = bitcast i32* %1 to i8* 1526 ret i8* %2 1527; LINUX-64-STATIC: cxm00: 1528; LINUX-64-STATIC: leaq xsrc+262144(,%rdi,4), %rax 1529; LINUX-64-STATIC: ret 1530} 1531 1532define i8* @cam01(i64 %i) nounwind { 1533entry: 1534 %0 = add i64 %i, 65536 1535 %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0 1536 %2 = bitcast i32* %1 to i8* 1537 ret i8* %2 1538; LINUX-64-STATIC: cam01: 1539; LINUX-64-STATIC: leaq dst+262144(,%rdi,4), %rax 1540; LINUX-64-STATIC: ret 1541} 1542 1543define i8* @cxm01(i64 %i) nounwind { 1544entry: 1545 %0 = add i64 %i, 65536 1546 %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0 1547 %2 = bitcast i32* %1 to i8* 1548 ret i8* %2 1549; LINUX-64-STATIC: cxm01: 1550; LINUX-64-STATIC: leaq xdst+262144(,%rdi,4), %rax 1551; LINUX-64-STATIC: ret 1552} 1553 1554define i8* @cam02(i64 %i) nounwind { 1555entry: 1556 %0 = load i32** @ptr, align 8 1557 %1 = add i64 %i, 65536 1558 %2 = getelementptr i32* %0, i64 %1 1559 %3 = bitcast i32* %2 to i8* 1560 ret i8* %3 1561; LINUX-64-STATIC: cam02: 1562; LINUX-64-STATIC: movq ptr, %rax 1563; LINUX-64-STATIC: leaq 262144(%rax,%rdi,4), %rax 1564; LINUX-64-STATIC: ret 1565} 1566 1567define i8* @cam03(i64 %i) nounwind { 1568entry: 1569 %0 = add i64 %i, 65536 1570 %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0 1571 %2 = bitcast i32* %1 to i8* 1572 ret i8* %2 1573; LINUX-64-STATIC: cam03: 1574; LINUX-64-STATIC: leaq dsrc+262144(,%rdi,4), %rax 1575; LINUX-64-STATIC: ret 1576} 1577 1578define i8* @cam04(i64 %i) nounwind { 1579entry: 1580 %0 = add i64 %i, 65536 1581 %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0 1582 %2 = bitcast i32* %1 to i8* 1583 ret i8* %2 1584; LINUX-64-STATIC: cam04: 1585; LINUX-64-STATIC: leaq ddst+262144(,%rdi,4), %rax 1586; LINUX-64-STATIC: ret 1587} 1588 1589define i8* @cam05(i64 %i) nounwind { 1590entry: 1591 %0 = load i32** @dptr, align 8 1592 %1 = add i64 %i, 65536 1593 %2 = getelementptr i32* %0, i64 %1 1594 %3 = bitcast i32* %2 to i8* 1595 ret i8* %3 1596; LINUX-64-STATIC: cam05: 1597; LINUX-64-STATIC: movq dptr, %rax 1598; LINUX-64-STATIC: leaq 262144(%rax,%rdi,4), %rax 1599; LINUX-64-STATIC: ret 1600} 1601 1602define i8* @cam06(i64 %i) nounwind { 1603entry: 1604 %0 = add i64 %i, 65536 1605 %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0 1606 %2 = bitcast i32* %1 to i8* 1607 ret i8* %2 1608; LINUX-64-STATIC: cam06: 1609; LINUX-64-STATIC: leaq lsrc+262144(,%rdi,4), %rax 1610; LINUX-64-STATIC: ret 1611} 1612 1613define i8* @cam07(i64 %i) nounwind { 1614entry: 1615 %0 = add i64 %i, 65536 1616 %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0 1617 %2 = bitcast i32* %1 to i8* 1618 ret i8* %2 1619; LINUX-64-STATIC: cam07: 1620; LINUX-64-STATIC: leaq ldst+262144(,%rdi,4), %rax 1621; LINUX-64-STATIC: ret 1622} 1623 1624define i8* @cam08(i64 %i) nounwind { 1625entry: 1626 %0 = load i32** @lptr, align 8 1627 %1 = add i64 %i, 65536 1628 %2 = getelementptr i32* %0, i64 %1 1629 %3 = bitcast i32* %2 to i8* 1630 ret i8* %3 1631; LINUX-64-STATIC: cam08: 1632; LINUX-64-STATIC: movq lptr, %rax 1633; LINUX-64-STATIC: leaq 262144(%rax,%rdi,4), %rax 1634; LINUX-64-STATIC: ret 1635} 1636 1637define void @lcallee() nounwind { 1638entry: 1639 tail call void @x() nounwind 1640 tail call void @x() nounwind 1641 tail call void @x() nounwind 1642 tail call void @x() nounwind 1643 tail call void @x() nounwind 1644 tail call void @x() nounwind 1645 tail call void @x() nounwind 1646 ret void 1647; LINUX-64-STATIC: lcallee: 1648; LINUX-64-STATIC: call x 1649; LINUX-64-STATIC: call x 1650; LINUX-64-STATIC: call x 1651; LINUX-64-STATIC: call x 1652; LINUX-64-STATIC: call x 1653; LINUX-64-STATIC: call x 1654; LINUX-64-STATIC: call x 1655; LINUX-64-STATIC: ret 1656} 1657 1658declare void @x() 1659 1660define internal void @dcallee() nounwind { 1661entry: 1662 tail call void @y() nounwind 1663 tail call void @y() nounwind 1664 tail call void @y() nounwind 1665 tail call void @y() nounwind 1666 tail call void @y() nounwind 1667 tail call void @y() nounwind 1668 tail call void @y() nounwind 1669 ret void 1670; LINUX-64-STATIC: dcallee: 1671; LINUX-64-STATIC: call y 1672; LINUX-64-STATIC: call y 1673; LINUX-64-STATIC: call y 1674; LINUX-64-STATIC: call y 1675; LINUX-64-STATIC: call y 1676; LINUX-64-STATIC: call y 1677; LINUX-64-STATIC: call y 1678; LINUX-64-STATIC: ret 1679} 1680 1681declare void @y() 1682 1683define void ()* @address() nounwind { 1684entry: 1685 ret void ()* @callee 1686; LINUX-64-STATIC: address: 1687; LINUX-64-STATIC: movl $callee, %eax 1688; LINUX-64-STATIC: ret 1689} 1690 1691declare void @callee() 1692 1693define void ()* @laddress() nounwind { 1694entry: 1695 ret void ()* @lcallee 1696; LINUX-64-STATIC: laddress: 1697; LINUX-64-STATIC: movl $lcallee, %eax 1698; LINUX-64-STATIC: ret 1699} 1700 1701define void ()* @daddress() nounwind { 1702entry: 1703 ret void ()* @dcallee 1704; LINUX-64-STATIC: daddress: 1705; LINUX-64-STATIC: movl $dcallee, %eax 1706; LINUX-64-STATIC: ret 1707} 1708 1709define void @caller() nounwind { 1710entry: 1711 tail call void @callee() nounwind 1712 tail call void @callee() nounwind 1713 ret void 1714; LINUX-64-STATIC: caller: 1715; LINUX-64-STATIC: call callee 1716; LINUX-64-STATIC: call callee 1717; LINUX-64-STATIC: ret 1718} 1719 1720define void @dcaller() nounwind { 1721entry: 1722 tail call void @dcallee() nounwind 1723 tail call void @dcallee() nounwind 1724 ret void 1725; LINUX-64-STATIC: dcaller: 1726; LINUX-64-STATIC: call dcallee 1727; LINUX-64-STATIC: call dcallee 1728; LINUX-64-STATIC: ret 1729} 1730 1731define void @lcaller() nounwind { 1732entry: 1733 tail call void @lcallee() nounwind 1734 tail call void @lcallee() nounwind 1735 ret void 1736; LINUX-64-STATIC: lcaller: 1737; LINUX-64-STATIC: call lcallee 1738; LINUX-64-STATIC: call lcallee 1739; LINUX-64-STATIC: ret 1740} 1741 1742define void @tailcaller() nounwind { 1743entry: 1744 tail call void @callee() nounwind 1745 ret void 1746; LINUX-64-STATIC: tailcaller: 1747; LINUX-64-STATIC: call callee 1748; LINUX-64-STATIC: ret 1749} 1750 1751define void @dtailcaller() nounwind { 1752entry: 1753 tail call void @dcallee() nounwind 1754 ret void 1755; LINUX-64-STATIC: dtailcaller: 1756; LINUX-64-STATIC: call dcallee 1757; LINUX-64-STATIC: ret 1758} 1759 1760define void @ltailcaller() nounwind { 1761entry: 1762 tail call void @lcallee() nounwind 1763 ret void 1764; LINUX-64-STATIC: ltailcaller: 1765; LINUX-64-STATIC: call lcallee 1766; LINUX-64-STATIC: ret 1767} 1768 1769define void @icaller() nounwind { 1770entry: 1771 %0 = load void ()** @ifunc, align 8 1772 tail call void %0() nounwind 1773 %1 = load void ()** @ifunc, align 8 1774 tail call void %1() nounwind 1775 ret void 1776; LINUX-64-STATIC: icaller: 1777; LINUX-64-STATIC: call *ifunc 1778; LINUX-64-STATIC: call *ifunc 1779; LINUX-64-STATIC: ret 1780} 1781 1782define void @dicaller() nounwind { 1783entry: 1784 %0 = load void ()** @difunc, align 8 1785 tail call void %0() nounwind 1786 %1 = load void ()** @difunc, align 8 1787 tail call void %1() nounwind 1788 ret void 1789; LINUX-64-STATIC: dicaller: 1790; LINUX-64-STATIC: call *difunc 1791; LINUX-64-STATIC: call *difunc 1792; LINUX-64-STATIC: ret 1793} 1794 1795define void @licaller() nounwind { 1796entry: 1797 %0 = load void ()** @lifunc, align 8 1798 tail call void %0() nounwind 1799 %1 = load void ()** @lifunc, align 8 1800 tail call void %1() nounwind 1801 ret void 1802; LINUX-64-STATIC: licaller: 1803; LINUX-64-STATIC: call *lifunc 1804; LINUX-64-STATIC: call *lifunc 1805; LINUX-64-STATIC: ret 1806} 1807 1808define void @itailcaller() nounwind { 1809entry: 1810 %0 = load void ()** @ifunc, align 8 1811 tail call void %0() nounwind 1812 %1 = load void ()** @ifunc, align 8 1813 tail call void %1() nounwind 1814 ret void 1815; LINUX-64-STATIC: itailcaller: 1816; LINUX-64-STATIC: call *ifunc 1817; LINUX-64-STATIC: call *ifunc 1818; LINUX-64-STATIC: ret 1819} 1820 1821define void @ditailcaller() nounwind { 1822entry: 1823 %0 = load void ()** @difunc, align 8 1824 tail call void %0() nounwind 1825 ret void 1826; LINUX-64-STATIC: ditailcaller: 1827; LINUX-64-STATIC: call *difunc 1828; LINUX-64-STATIC: ret 1829} 1830 1831define void @litailcaller() nounwind { 1832entry: 1833 %0 = load void ()** @lifunc, align 8 1834 tail call void %0() nounwind 1835 ret void 1836; LINUX-64-STATIC: litailcaller: 1837; LINUX-64-STATIC: call *lifunc 1838; LINUX-64-STATIC: ret 1839} 1840