[llvm] [AVR] Set mayLoad/mayStore flags of some load/store instructions (PR #172986)

Ben Shi via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 22 19:39:46 PST 2025


================
@@ -1149,17 +1160,16 @@ def STDPtrQRr : FSTDLDD<1, (outs), (ins memri:$memri, GPR8:$reg),
 //   st    P+, Rr
 //   st    P+, Rr+1
 //   subiw P,  q+2
+let mayStore = 1 in
 def STDWPtrQRr : Pseudo<(outs), (ins memri:$memri, DREGS:$src),
                         "stdw\t$memri, $src", [(store i16:$src, addr:$memri)]>,
                  Requires<[HasSRAM]>;
 
 // Load program memory operations.
-let canFoldAsLoad = 1, isReMaterializable = 1, mayLoad = 1,
-    hasSideEffects = 0 in {
-  let Defs = [R0],
-      Uses = [R31R30] in def LPM
-      : F16<0b1001010111001000, (outs), (ins), "lpm", []>,
-      Requires<[HasLPM]>;
+let isReMaterializable = 1, mayLoad = 1, hasSideEffects = 0 in {
+  let Defs = [R0], Uses = [R31R30] in
----------------
benshi001 wrote:

> Now that i think about it, why do we have `Defs = [R0]` here? 🤔

It seems all instructions with implicit R0 destination or may overwrite R0 are marked with Defs = [R0], let us just follow this rule. We can fix that in the future.

https://github.com/llvm/llvm-project/pull/172986


More information about the llvm-commits mailing list