@@ -40,8 +40,6 @@ foreach i = 0...4 in {
4040 def RQ#i : NVPTXReg<"%rq"#i>; // 128-bit
4141 def H#i : NVPTXReg<"%h"#i>; // 16-bit float
4242 def HH#i : NVPTXReg<"%hh"#i>; // 2x16-bit float
43- def F#i : NVPTXReg<"%f"#i>; // 32-bit float
44- def FL#i : NVPTXReg<"%fd"#i>; // 64-bit float
4543
4644 // Arguments
4745 def ia#i : NVPTXReg<"%ia"#i>;
@@ -59,14 +57,13 @@ foreach i = 0...31 in {
5957//===----------------------------------------------------------------------===//
6058def Int1Regs : NVPTXRegClass<[i1], 8, (add (sequence "P%u", 0, 4))>;
6159def Int16Regs : NVPTXRegClass<[i16, f16, bf16], 16, (add (sequence "RS%u", 0, 4))>;
62- def Int32Regs : NVPTXRegClass<[i32, v2f16, v2bf16, v2i16, v4i8], 32,
60+ def Int32Regs : NVPTXRegClass<[i32, v2f16, v2bf16, v2i16, v4i8, f32 ], 32,
6361 (add (sequence "R%u", 0, 4),
6462 VRFrame32, VRFrameLocal32)>;
65- def Int64Regs : NVPTXRegClass<[i64], 64, (add (sequence "RL%u", 0, 4), VRFrame64, VRFrameLocal64)>;
63+ def Int64Regs : NVPTXRegClass<[i64, f64 ], 64, (add (sequence "RL%u", 0, 4), VRFrame64, VRFrameLocal64)>;
6664// 128-bit regs are not defined as general regs in NVPTX. They are used for inlineASM only.
6765def Int128Regs : NVPTXRegClass<[i128], 128, (add (sequence "RQ%u", 0, 4))>;
68- def Float32Regs : NVPTXRegClass<[f32], 32, (add (sequence "F%u", 0, 4))>;
69- def Float64Regs : NVPTXRegClass<[f64], 64, (add (sequence "FL%u", 0, 4))>;
66+
7067def Int32ArgRegs : NVPTXRegClass<[i32], 32, (add (sequence "ia%u", 0, 4))>;
7168def Int64ArgRegs : NVPTXRegClass<[i64], 64, (add (sequence "la%u", 0, 4))>;
7269def Float32ArgRegs : NVPTXRegClass<[f32], 32, (add (sequence "fa%u", 0, 4))>;
@@ -75,3 +72,6 @@ def Float64ArgRegs : NVPTXRegClass<[f64], 64, (add (sequence "da%u", 0, 4))>;
7572// Read NVPTXRegisterInfo.cpp to see how VRFrame and VRDepot are used.
7673def SpecialRegs : NVPTXRegClass<[i32], 32, (add VRFrame32, VRFrameLocal32, VRDepot,
7774 (sequence "ENVREG%u", 0, 31))>;
75+
76+ defvar Float32Regs = Int32Regs;
77+ defvar Float64Regs = Int64Regs;
0 commit comments