[PATCH] D131867: [AVR] Do not emit instructions invalid for attiny10

Ben Shi via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 28 17:22:11 PST 2022


benshi001 added inline comments.


================
Comment at: llvm/lib/Target/AVR/AVRInstrInfo.td:1337
+  //   ld    Rd+1, P+
+  //   subiw P,    2
   let Constraints = "@earlyclobber $reg" in def LDWRdPtr
----------------
aykevl wrote:
> benshi001 wrote:
> > `subiw` is still a pseudo instruction, it would be better to give real instructions in this comment. 
> How would you suggest to do this? Something like this?
> 
> ```
>   //   ld   Rd,   P+
>   //   ld   Rd+1, P+
>   //   subi PL,    2
>   //   sbci PH,    0
> ```
> 
> I think the original is easier to read.
Indeed, I think this form is more obvious 


================
Comment at: llvm/lib/Target/AVR/AVRInstrInfo.td:1418
+  //   ld    Rd+1, P+
+  //   subiw P,    q+2
   let Constraints = "@earlyclobber $dst" in def LDDWRdPtrQ
----------------
aykevl wrote:
> benshi001 wrote:
> > `subiw` is still a pseudo instruction, it would be better to give real instructions in this comment. 
> Same here, but here it becomes even harder to write nice instructions. Closest I can think of is this:
> 
> ```
>   //   subi PL,   lo8(-q)
>   //   sbci PH,   hi8(-q)
>   //   ld   Rd,   P+
>   //   ld   Rd+1, P+
>   //   subi PL,   lo8(q)
>   //   sbci PH,   hi8(q)
> ```
That is fine.


================
Comment at: llvm/test/CodeGen/AVR/calling-conv/c/tiny.ll:49-59
 ; CHECK-NEXT:    in r29, 62
-; CHECK-NEXT:    ldd r30, Y+5
-; CHECK-NEXT:    ldd r31, Y+6
+; CHECK-NEXT:    in r16, 63
+; CHECK-NEXT:    subi r28, 251
+; CHECK-NEXT:    sbci r29, 255
+; CHECK-NEXT:    ld r30, Y+
+; CHECK-NEXT:    ld r31, Y+
+; CHECK-NEXT:    subi r28, 2
----------------
aykevl wrote:
> benshi001 wrote:
> > aykevl wrote:
> > > The code here is really terrible but it should be correct. I hope to optimize this in a later pass with a late pass that merges pointer adjustments.
> > Is such pattern common ? Is it necessary to introduce an extra pass just for this pattern? 
> > 
> > Since AVRTiny is a known low performance device serial, I think such pattern is OK. An extra pass will lead to longer run time.
> > Is such pattern common ? Is it necessary to introduce an extra pass just for this pattern?
> 
> I don't know. Maybe I'll try it, maybe not. But these chips are so small that every bit helps.
That is another issue which we can decide later. Please commit this patch.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D131867



More information about the llvm-commits mailing list