|
| 1 | +; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -relocation-model=static | FileCheck %s |
| 2 | + |
| 3 | +declare preserve_nonecc void @next(i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64) |
| 4 | +declare preserve_nonecc void @next_with_cond(i1, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64) |
| 5 | + |
| 6 | +define preserve_nonecc void @static_tail_unchanged(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, i64 %a7, i64 %a8, i64 %a9, i64 %a10, i64 %a11, i64 %a12, i64 %a13, i64 %a14, i64 %a15, i64 %a16, i64 %a17, i64 %a18, i64 %a19, i64 %a20, i64 %a21, i64 %a22, i64 %a23, i64 %a24, i64 %a25, i64 %a26, i64 %a27, i64 %a28, i64 %a29, i64 %a30, i64 %a31, i64 %a32, i64 %a33, i64 %a34, i64 %a35) { |
| 7 | +; CHECK-LABEL: static_tail_unchanged: |
| 8 | +; CHECK: # %bb.0: |
| 9 | +; CHECK-NEXT: jmp next@PLT # TAILCALL |
| 10 | +entry: |
| 11 | + musttail call preserve_nonecc void @next(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, i64 %a7, i64 %a8, i64 %a9, i64 %a10, i64 %a11, i64 %a12, i64 %a13, i64 %a14, i64 %a15, i64 %a16, i64 %a17, i64 %a18, i64 %a19, i64 %a20, i64 %a21, i64 %a22, i64 %a23, i64 %a24, i64 %a25, i64 %a26, i64 %a27, i64 %a28, i64 %a29, i64 %a30, i64 %a31, i64 %a32, i64 %a33, i64 %a34, i64 %a35) |
| 12 | + ret void |
| 13 | +} |
| 14 | + |
| 15 | +define preserve_nonecc void @static_tail_changed(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, i64 %a7, i64 %a8, i64 %a9, i64 %a10, i64 %a11, i64 %a12, i64 %a13, i64 %a14, i64 %a15, i64 %a16, i64 %a17, i64 %a18, i64 %a19, i64 %a20, i64 %a21, i64 %a22, i64 %a23, i64 %a24, i64 %a25, i64 %a26, i64 %a27, i64 %a28, i64 %a29, i64 %a30, i64 %a31, i64 %a32, i64 %a33, i64 %a34, i64 %a35) { |
| 16 | +; CHECK-LABEL: static_tail_changed: |
| 17 | +; CHECK: # %bb.0: |
| 18 | +; CHECK-NEXT: movq 168(%rsp), %r10 |
| 19 | +; CHECK-NEXT: incq %r10 |
| 20 | +; CHECK-NEXT: movq %r10, 168(%rsp) |
| 21 | +; CHECK-NEXT: jmp next@PLT # TAILCALL |
| 22 | +entry: |
| 23 | + %a32x = add i64 %a32, 1 |
| 24 | + musttail call preserve_nonecc void @next(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, i64 %a7, i64 %a8, i64 %a9, i64 %a10, i64 %a11, i64 %a12, i64 %a13, i64 %a14, i64 %a15, i64 %a16, i64 %a17, i64 %a18, i64 %a19, i64 %a20, i64 %a21, i64 %a22, i64 %a23, i64 %a24, i64 %a25, i64 %a26, i64 %a27, i64 %a28, i64 %a29, i64 %a30, i64 %a31, i64 %a32x, i64 %a33, i64 %a34, i64 %a35) |
| 25 | + ret void |
| 26 | +} |
| 27 | + |
| 28 | +define preserve_nonecc void @phi_tail(i1 %cond, i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, i64 %a7, i64 %a8, i64 %a9, i64 %a10, i64 %a11, i64 %a12, i64 %a13, i64 %a14, i64 %a15, i64 %a16, i64 %a17, i64 %a18, i64 %a19, i64 %a20, i64 %a21, i64 %a22, i64 %a23, i64 %a24, i64 %a25, i64 %a26, i64 %a27, i64 %a28, i64 %a29, i64 %a30, i64 %a31, i64 %a32, i64 %a33, i64 %a34, i64 %a35) { |
| 29 | +; CHECK-LABEL: phi_tail: |
| 30 | +; CHECK: # %bb.0: |
| 31 | +; CHECK-NEXT: movq 176(%rsp), %r10 |
| 32 | +; CHECK-NEXT: testb $1, %dil |
| 33 | +; CHECK-NEXT: je .LBB2_2 |
| 34 | +; CHECK: # %bb.1: |
| 35 | +; CHECK-NEXT: incq %r10 |
| 36 | +; CHECK: .LBB2_2: |
| 37 | +; CHECK-NEXT: movq %r10, 176(%rsp) |
| 38 | +; CHECK-NEXT: movzbl %dil, %edi |
| 39 | +; CHECK-NEXT: jmp next_with_cond@PLT # TAILCALL |
| 40 | +entry: |
| 41 | + br i1 %cond, label %a, label %b |
| 42 | +a: |
| 43 | + %a32x = add i64 %a32, 1 |
| 44 | + br label %join |
| 45 | +b: |
| 46 | + br label %join |
| 47 | +join: |
| 48 | + %a32m = phi i64 [ %a32x, %a ], [ %a32, %b ] |
| 49 | + musttail call preserve_nonecc void @next_with_cond(i1 %cond, i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, i64 %a7, i64 %a8, i64 %a9, i64 %a10, i64 %a11, i64 %a12, i64 %a13, i64 %a14, i64 %a15, i64 %a16, i64 %a17, i64 %a18, i64 %a19, i64 %a20, i64 %a21, i64 %a22, i64 %a23, i64 %a24, i64 %a25, i64 %a26, i64 %a27, i64 %a28, i64 %a29, i64 %a30, i64 %a31, i64 %a32m, i64 %a33, i64 %a34, i64 %a35) |
| 50 | + ret void |
| 51 | +} |
0 commit comments