[DAGCombiner] Eliminate dead stores to stack.
[llvm-complete.git] / lib / Target / RISCV / RISCVCallingConv.td
blob65106029881425f1b7a4b70c9b15097da6ed06be
1 //===-- RISCVCallingConv.td - Calling Conventions RISCV ----*- tablegen -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This describes the calling conventions for the RISCV architecture.
11 //===----------------------------------------------------------------------===//
13 // The RISC-V calling convention is handled with custom code in
14 // RISCVISelLowering.cpp (CC_RISCV).
16 def CSR : CalleeSavedRegs<(add X1, X3, X4, X8, X9, (sequence "X%u", 18, 27))>;
18 // Needed for implementation of RISCVRegisterInfo::getNoPreservedMask()
19 def CSR_NoRegs : CalleeSavedRegs<(add)>;
21 // Interrupt handler needs to save/restore all registers that are used,
22 // both Caller and Callee saved registers.
23 def CSR_Interrupt : CalleeSavedRegs<(add X1,
24     (sequence "X%u", 3, 9),
25     (sequence "X%u", 10, 11),
26     (sequence "X%u", 12, 17),
27     (sequence "X%u", 18, 27),
28     (sequence "X%u", 28, 31))>;
30 // Same as CSR_Interrupt, but including all 32-bit FP registers.
31 def CSR_XLEN_F32_Interrupt: CalleeSavedRegs<(add X1,
32     (sequence "X%u", 3, 9),
33     (sequence "X%u", 10, 11),
34     (sequence "X%u", 12, 17),
35     (sequence "X%u", 18, 27),
36     (sequence "X%u", 28, 31),
37     (sequence "F%u_32", 0, 7),
38     (sequence "F%u_32", 10, 11),
39     (sequence "F%u_32", 12, 17),
40     (sequence "F%u_32", 28, 31),
41     (sequence "F%u_32", 8, 9),
42     (sequence "F%u_32", 18, 27))>;
44 // Same as CSR_Interrupt, but including all 64-bit FP registers.
45 def CSR_XLEN_F64_Interrupt: CalleeSavedRegs<(add X1,
46     (sequence "X%u", 3, 9),
47     (sequence "X%u", 10, 11),
48     (sequence "X%u", 12, 17),
49     (sequence "X%u", 18, 27),
50     (sequence "X%u", 28, 31),
51     (sequence "F%u_64", 0, 7),
52     (sequence "F%u_64", 10, 11),
53     (sequence "F%u_64", 12, 17),
54     (sequence "F%u_64", 28, 31),
55     (sequence "F%u_64", 8, 9),
56     (sequence "F%u_64", 18, 27))>;