blob: e014c20febfb811117e75b11c03be8430870539e [file]
; 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
}