| ;; Check if manually reserved registers are always excluded from being saved by |
| ;; the function prolog/epilog, even for callee-saved ones, as per GCC behavior. |
| ;; Look at AArch64Features.td for registers excluded from this test. |
| ;; FIXME: Fix machine verifier issues and remove -verify-machineinstrs=0. |
| |
| ; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu -verify-machineinstrs=0 | FileCheck %s |
| |
| define preserve_mostcc void @t1() "target-features"="+reserve-x1" { |
| ; CHECK-LABEL: t1: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w1, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x1},{x1}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t2() "target-features"="+reserve-x2" { |
| ; CHECK-LABEL: t2: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w2, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x2},{x2}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t3() "target-features"="+reserve-x3" { |
| ; CHECK-LABEL: t3: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w3, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x3},{x3}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t4() "target-features"="+reserve-x4" { |
| ; CHECK-LABEL: t4: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w4, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x4},{x4}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t5() "target-features"="+reserve-x5" { |
| ; CHECK-LABEL: t5: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w5, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x5},{x5}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t6() "target-features"="+reserve-x6" { |
| ; CHECK-LABEL: t6: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w6, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x6},{x6}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t7() "target-features"="+reserve-x7" { |
| ; CHECK-LABEL: t7: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w7, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x7},{x7}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t9() "target-features"="+reserve-x9" { |
| ; CHECK-LABEL: t9: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w9, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x9},{x9}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t10() "target-features"="+reserve-x10" { |
| ; CHECK-LABEL: t10: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w10, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x10},{x10}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t11() "target-features"="+reserve-x11" { |
| ; CHECK-LABEL: t11: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w11, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x11},{x11}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t12() "target-features"="+reserve-x12" { |
| ; CHECK-LABEL: t12: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w12, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x12},{x12}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t13() "target-features"="+reserve-x13" { |
| ; CHECK-LABEL: t13: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w13, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x13},{x13}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t14() "target-features"="+reserve-x14" { |
| ; CHECK-LABEL: t14: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w14, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x14},{x14}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t15() "target-features"="+reserve-x15" { |
| ; CHECK-LABEL: t15: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w15, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x15},{x15}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t18() "target-features"="+reserve-x18" { |
| ; CHECK-LABEL: t18: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w18, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x18},{x18}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t20() "target-features"="+reserve-x20" { |
| ; CHECK-LABEL: t20: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w20, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x20},{x20}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t21() "target-features"="+reserve-x21" { |
| ; CHECK-LABEL: t21: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w21, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x21},{x21}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t22() "target-features"="+reserve-x22" { |
| ; CHECK-LABEL: t22: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w22, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x22},{x22}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t23() "target-features"="+reserve-x23" { |
| ; CHECK-LABEL: t23: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w23, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x23},{x23}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t24() "target-features"="+reserve-x24" { |
| ; CHECK-LABEL: t24: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w24, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x24},{x24}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t25() "target-features"="+reserve-x25" { |
| ; CHECK-LABEL: t25: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w25, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x25},{x25}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t26() "target-features"="+reserve-x26" { |
| ; CHECK-LABEL: t26: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w26, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x26},{x26}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t27() "target-features"="+reserve-x27" { |
| ; CHECK-LABEL: t27: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w27, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x27},{x27}"(i64 256) |
| ret void |
| } |
| |
| define preserve_mostcc void @t28() "target-features"="+reserve-x28" { |
| ; CHECK-LABEL: t28: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w28, #256 |
| ; CHECK-NEXT: //APP |
| ; CHECK-NEXT: //NO_APP |
| ; CHECK-NEXT: ret |
| call i64 asm sideeffect "", "={x28},{x28}"(i64 256) |
| ret void |
| } |