[PATCH] D62300: [AVR] Fix incorrect source regclass of LDWRdPtr

Dylan McKay via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun May 26 22:33:41 PDT 2019


dylanmckay added inline comments.


================
Comment at: lib/Target/AVR/AVRInstrInfo.td:1163
+  // ld  Rd,   P
+  // ldd Rd+1, P+1
   let Constraints = "@earlyclobber $reg" in
----------------
Thanks for fixing this comment


================
Comment at: lib/Target/AVR/AVRRegisterInfo.td:175
     // Callee saved registers.
-    R29R28, R17R16, R15R14, R13R12, R11R10,
+    R17R16, R15R14, R13R12, R11R10,
     R9R8, R7R6, R5R4, R3R2, R1R0
----------------
I can't tell why the removal of `Y` is needed.

`LDWRdPtr` expands to `LDRdPtr` and `LDDRdPtrQ`.

`LDRdPtr` accepts any pointer register (`X`, `Y`, or `Z`), and as you point out, `LDDRdPtrQ` only accepts `DREGS_WITHOUT_Z_WORKAROUND:` (AKA some GPRs and `X`, `Y`). The register constraints over the instruction pair is the intersection of the register classes for these sub instructions, which is the set of pointer registers `{ X, Y }`

What are your thoughts?


Repository:
  rL LLVM

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

https://reviews.llvm.org/D62300





More information about the llvm-commits mailing list