Jim marked 8 inline comments as done.
Jim added inline comments.

================
Comment at: llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp:442
+
+    if (STI.getFeatureBits()[RISCV::FeatureExtZpsfoperand] &&
+        !STI.getFeatureBits()[RISCV::Feature64Bit]) {
----------------
jrtc27 wrote:
> The table is called RISCV32POnly but you're checking for Zpsfoperand 
> (whatever that mouthful of an extension is). Which is it?
Rename RISCV32POnly to RISCV32Zpsfoperand. 
This is for the instruction with even/odd paired-register operands on RV32. 

In RISCV32Zpsfoperand, two kinds of instruction defined for the same 
instruction in spec, one for RV32 with even/odd paired-register operands 
defined in RISCV32Zpsfoperand table , the other one for RV64 with normal GPR 
operands.




================
Comment at: llvm/lib/Target/RISCV/RISCV.td:186-188
+                       [FeatureExtZpsfoperand,
+                        FeatureExtZpn,
+                        FeatureExtZprvsfextra]>;
----------------
jrtc27 wrote:
> These aren't correct? RV64 doesn't have Zpsfoperand and RV32 doesn't have 
> Zprvsfextra.
RV64 has Zpsfoperand extension that just has normal GPRs as operands (RV32 has 
even/odd paired-register operand).

RV32 doesn't have Zprvsfextra. All of instruction in Zprvsfextra are defined in 
Predicates = [HasStdExtZprvsfextra, IsRV64].

If P is enabled, it means Zpn+Zpsfoperand enabled on RV32, and 
Zpn+Zpsfoperand+Zprvsfextra enabled on RV64.


================
Comment at: llvm/lib/Target/RISCV/RISCVRegisterInfo.td:216
+// Dummy zero register for pairing with X0.
+def ZERO : RISCVReg<0, "0">;
+
----------------
jrtc27 wrote:
> Ew, this is a gross quirk of the register pair instructions. ZERO is not a 
> good name for it though, that's the ABI name for x0 so already taken and is 
> pretty confusing. I assume LLVM doesn't like it if you create a register pair 
> that is (X0, X0)?
Rename it to REG_PAIR_WITH_X0.


================
Comment at: llvm/lib/Target/RISCV/RISCVRegisterInfo.td:226-228
+def GPRPair : RegisterClass<"RISCV", [untyped], 64, (add GPRPairs)> {
+  let Size = 64;
+}
----------------
jrtc27 wrote:
> IMO the register class should be GPR32Pair not GPRPair unless you also make 
> it have a sensible interpretation for RV32 (which seems like a waste of time)
Rename it to GPR32Pair.


================
Comment at: llvm/lib/Target/RISCV/RISCVRegisterInfo.td:69
 
+def sub_lo : SubRegIndex<32>;
+def sub_hi : SubRegIndex<32, 32>;
----------------
jrtc27 wrote:
> Jim wrote:
> > Jim wrote:
> > > luismarques wrote:
> > > > jrtc27 wrote:
> > > > > This assumes RV32, and is not clear it applies to register pairs
> > > > What's the best way to address this?
> > > sub_lo and sub_hi are only used for GPRPair register class to extract a 
> > > register from pair registers on RV32.
> > Do you mean that sub_lo and sub_hi only used on RV32? Does it need to 
> > rename or ..?
> Yes, these should have names that make it clear they're for each half of a 
> 2*32-bit register pair. Otherwise it sounds like they're the 32-bit hi and lo 
> halves of the 64-bit registers on RV64.
Rename it to gpr_pair_lo and gpr_pair_hi


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D95588/new/

https://reviews.llvm.org/D95588

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to