| ; RUN: llc < %s -mtriple=riscv32 -mattr=+experimental-xsfmclic \ |
| ; RUN: -verify-machineinstrs -stop-after=prolog-epilog -o - \ |
| ; RUN: | FileCheck %s |
| ; RUN: llc < %s -mtriple=riscv64 -mattr=+experimental-xsfmclic \ |
| ; RUN: -verify-machineinstrs -stop-after=prolog-epilog -o - \ |
| ; RUN: | FileCheck %s |
| |
| define void @preemptible_stack_swap() "interrupt"="SiFive-CLIC-preemptible-stack-swap" { |
| ; CHECK-LABEL: name: preemptible_stack_swap |
| ; CHECK: body: | |
| ; CHECK-NEXT: bb.0 |
| ; CHECK-NEXT: $x2 = frame-setup CSRRW 840, killed $x2 |
| ; CHECK-NEXT: $x2 = frame-setup ADDI $x2, -16 |
| ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16 |
| ; CHECK-NEXT: frame-setup {{SW|SD}} killed $x8 |
| ; CHECK-NEXT: frame-setup {{SW|SD}} killed $x9 |
| ; CHECK-NEXT: $x8 = frame-setup CSRRS 834, $x0 |
| ; CHECK-NEXT: $x9 = frame-setup CSRRS 833, $x0 |
| ; CHECK-NEXT: $x0 = frame-setup CSRRSI 768, 8 |
| ; CHECK-NEXT: $x0 = frame-destroy CSRRCI 768, 8 |
| ; CHECK-NEXT: $x0 = frame-destroy CSRRW 833, killed $x9 |
| ; CHECK-NEXT: $x0 = frame-destroy CSRRW 834, killed $x8 |
| ; CHECK-NEXT: $x9 = frame-destroy {{LW|LD}} |
| ; CHECK-NEXT: $x8 = frame-destroy {{LW|LD}} |
| ; CHECK-NEXT: $x2 = frame-destroy ADDI $x2, 16 |
| ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0 |
| ; CHECK-NEXT: $x2 = frame-destroy CSRRW 840, killed $x2 |
| ; CHECK-NEXT: MRET |
| ret void |
| } |