xref: /aosp_15_r20/external/llvm/lib/Target/NVPTX/NVPTXRegisterInfo.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===-- NVPTXRegisterInfo.td - NVPTX Register defs ---------*- tablegen -*-===//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
11*9880d681SAndroid Build Coastguard Worker//  Declarations that describe the PTX register file
12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerclass NVPTXReg<string n> : Register<n> {
15*9880d681SAndroid Build Coastguard Worker  let Namespace = "NVPTX";
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerclass NVPTXRegClass<list<ValueType> regTypes, int alignment, dag regList>
19*9880d681SAndroid Build Coastguard Worker     : RegisterClass <"NVPTX", regTypes, alignment, regList>;
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
22*9880d681SAndroid Build Coastguard Worker//  Registers
23*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker// Special Registers used as stack pointer
26*9880d681SAndroid Build Coastguard Workerdef VRFrame         : NVPTXReg<"%SP">;
27*9880d681SAndroid Build Coastguard Workerdef VRFrameLocal    : NVPTXReg<"%SPL">;
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker// Special Registers used as the stack
30*9880d681SAndroid Build Coastguard Workerdef VRDepot  : NVPTXReg<"%Depot">;
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker// We use virtual registers, but define a few physical registers here to keep
33*9880d681SAndroid Build Coastguard Worker// SDAG and the MachineInstr layers happy.
34*9880d681SAndroid Build Coastguard Workerforeach i = 0-4 in {
35*9880d681SAndroid Build Coastguard Worker  def P#i  : NVPTXReg<"%p"#i>;  // Predicate
36*9880d681SAndroid Build Coastguard Worker  def RS#i : NVPTXReg<"%rs"#i>; // 16-bit
37*9880d681SAndroid Build Coastguard Worker  def R#i  : NVPTXReg<"%r"#i>;  // 32-bit
38*9880d681SAndroid Build Coastguard Worker  def RL#i : NVPTXReg<"%rd"#i>; // 64-bit
39*9880d681SAndroid Build Coastguard Worker  def F#i  : NVPTXReg<"%f"#i>;  // 32-bit float
40*9880d681SAndroid Build Coastguard Worker  def FL#i : NVPTXReg<"%fd"#i>; // 64-bit float
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker  // Arguments
43*9880d681SAndroid Build Coastguard Worker  def ia#i : NVPTXReg<"%ia"#i>;
44*9880d681SAndroid Build Coastguard Worker  def la#i : NVPTXReg<"%la"#i>;
45*9880d681SAndroid Build Coastguard Worker  def fa#i : NVPTXReg<"%fa"#i>;
46*9880d681SAndroid Build Coastguard Worker  def da#i : NVPTXReg<"%da"#i>;
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerforeach i = 0-31 in {
50*9880d681SAndroid Build Coastguard Worker  def ENVREG#i : NVPTXReg<"%envreg"#i>;
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
54*9880d681SAndroid Build Coastguard Worker//  Register classes
55*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
56*9880d681SAndroid Build Coastguard Workerdef Int1Regs : NVPTXRegClass<[i1], 8, (add (sequence "P%u", 0, 4))>;
57*9880d681SAndroid Build Coastguard Workerdef Int16Regs : NVPTXRegClass<[i16], 16, (add (sequence "RS%u", 0, 4))>;
58*9880d681SAndroid Build Coastguard Workerdef Int32Regs : NVPTXRegClass<[i32], 32, (add (sequence "R%u", 0, 4))>;
59*9880d681SAndroid Build Coastguard Workerdef Int64Regs : NVPTXRegClass<[i64], 64, (add (sequence "RL%u", 0, 4))>;
60*9880d681SAndroid Build Coastguard Workerdef Float32Regs : NVPTXRegClass<[f32], 32, (add (sequence "F%u", 0, 4))>;
61*9880d681SAndroid Build Coastguard Workerdef Float64Regs : NVPTXRegClass<[f64], 64, (add (sequence "FL%u", 0, 4))>;
62*9880d681SAndroid Build Coastguard Workerdef Int32ArgRegs : NVPTXRegClass<[i32], 32, (add (sequence "ia%u", 0, 4))>;
63*9880d681SAndroid Build Coastguard Workerdef Int64ArgRegs : NVPTXRegClass<[i64], 64, (add (sequence "la%u", 0, 4))>;
64*9880d681SAndroid Build Coastguard Workerdef Float32ArgRegs : NVPTXRegClass<[f32], 32, (add (sequence "fa%u", 0, 4))>;
65*9880d681SAndroid Build Coastguard Workerdef Float64ArgRegs : NVPTXRegClass<[f64], 64, (add (sequence "da%u", 0, 4))>;
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker// Read NVPTXRegisterInfo.cpp to see how VRFrame and VRDepot are used.
68*9880d681SAndroid Build Coastguard Workerdef SpecialRegs : NVPTXRegClass<[i32], 32, (add VRFrame, VRFrameLocal, VRDepot,
69*9880d681SAndroid Build Coastguard Worker                                            (sequence "ENVREG%u", 0, 31))>;
70