xref: /llvm-project/llvm/test/CodeGen/RISCV/reserved-reg-errors.ll (revision aed9d6d64a38d155cd09232da5640b5ade069bd9)
1*aed9d6d6SSimon Cook; RUN: not llc -mtriple=riscv32 -mattr=+reserve-x1 < %s 2>&1 | FileCheck %s -check-prefix=X1
2*aed9d6d6SSimon Cook; RUN: not llc -mtriple=riscv64 -mattr=+reserve-x1 < %s 2>&1 | FileCheck %s -check-prefix=X1
3*aed9d6d6SSimon Cook; RUN: not llc -mtriple=riscv32 -mattr=+reserve-x2 < %s 2>&1 | FileCheck %s -check-prefix=X2
4*aed9d6d6SSimon Cook; RUN: not llc -mtriple=riscv64 -mattr=+reserve-x2 < %s 2>&1 | FileCheck %s -check-prefix=X2
5*aed9d6d6SSimon Cook; RUN: not llc -mtriple=riscv32 -mattr=+reserve-x8 < %s 2>&1 | FileCheck %s -check-prefix=X8
6*aed9d6d6SSimon Cook; RUN: not llc -mtriple=riscv64 -mattr=+reserve-x8 < %s 2>&1 | FileCheck %s -check-prefix=X8
7*aed9d6d6SSimon Cook; RUN: not llc -mtriple=riscv32 -mattr=+reserve-x10 < %s 2>&1 | FileCheck %s -check-prefix=X10
8*aed9d6d6SSimon Cook; RUN: not llc -mtriple=riscv64 -mattr=+reserve-x10 < %s 2>&1 | FileCheck %s -check-prefix=X10
9*aed9d6d6SSimon Cook; RUN: llc -mtriple=riscv32 -mattr=+reserve-x11 < %s 2>&1 | FileCheck %s -check-prefix=X11
10*aed9d6d6SSimon Cook; RUN: llc -mtriple=riscv32 -mattr=+reserve-x11 < %s 2>&1 | FileCheck %s -check-prefix=X11
11*aed9d6d6SSimon Cook; RUN: llc -mtriple=riscv32 <%s
12*aed9d6d6SSimon Cook; RUN: llc -mtriple=riscv64 <%s
13*aed9d6d6SSimon Cook
14*aed9d6d6SSimon Cook; This tests combinations when we would expect an error to be produced because
15*aed9d6d6SSimon Cook; a reserved register is required by the default ABI. The final test checks no
16*aed9d6d6SSimon Cook; errors are produced when no registers are reserved.
17*aed9d6d6SSimon Cook
18*aed9d6d6SSimon Cookdefine i32 @caller(i32 %a) #0 {
19*aed9d6d6SSimon Cook; X1: in function caller {{.*}} Return address register required, but has been reserved.
20*aed9d6d6SSimon Cook; X2: in function caller {{.*}} Stack pointer required, but has been reserved.
21*aed9d6d6SSimon Cook; X8: in function caller {{.*}} Frame pointer required, but has been reserved.
22*aed9d6d6SSimon Cook; X10: in function caller {{.*}} Argument register required, but has been reserved.
23*aed9d6d6SSimon Cook; X10: in function caller {{.*}} Return value register required, but has been reserved.
24*aed9d6d6SSimon Cook  %call = call i32 @callee(i32 0)
25*aed9d6d6SSimon Cook  ret i32 %call
26*aed9d6d6SSimon Cook}
27*aed9d6d6SSimon Cook
28*aed9d6d6SSimon Cookdeclare i32 @callee(i32 %a)
29*aed9d6d6SSimon Cook
30*aed9d6d6SSimon Cookdefine void @clobber() {
31*aed9d6d6SSimon Cook; X11: warning: inline asm clobber list contains reserved registers: X11
32*aed9d6d6SSimon Cook  call void asm sideeffect "nop", "~{x11}"()
33*aed9d6d6SSimon Cook  ret void
34*aed9d6d6SSimon Cook}
35*aed9d6d6SSimon Cook
36*aed9d6d6SSimon Cookattributes #0 = { "frame-pointer"="all" }
37