[PATCH] D117426: [AVR] Only push and clear R1 in interrupts when necessary
Ben Shi via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 4 20:24:58 PDT 2022
benshi001 added inline comments.
================
Comment at: llvm/lib/Target/AVR/AVRISelDAGToDAG.cpp:460
+ // correctly zeroed in interrupts.
+ Ops.push_back(CurDAG->getRegister(AVR::R1, MVT::i8));
+
----------------
benshi001 wrote:
> benshi001 wrote:
> > benshi001 wrote:
> > > I am OK with current form. Just one more suggestion, you can add a new case of `icall`, current tests only contains a direct call but no indirect call. And you can add the `icall` test either in this patch or a new patch.
> > I have debugged your code, and I find this line is unnecessary.
> >
> > Since there is already such a line in AVRISelLowering.cpp / LowerCall():
> >
> > ```
> > // Add argument registers to the end of the list so that they are known live
> > // into the call.
> > for (auto Reg : RegsToPass) {
> > Ops.push_back(DAG.getRegister(Reg.first, Reg.second.getValueType()));
> > }
> >
> > // The R1 register must be passed as an implicit register so that R1 is
> > // correctly zeroed in interrupts.
> > Ops.push_back(DAG.getRegister(AVR::R1, MVT::i8));
> > ```
> >
> > That line in LowerCall is always executed, no matter direct call or indirect call, so the implicit `R1` will be added twice for indirect calls.
> I still accept your patch, and you can delete this line in AVRDAGToDAGISel::select<AVRISD::CALL> when commit.
@aykevl , do you have any different opinion on my comments? I suggest you commit this ASAP.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D117426/new/
https://reviews.llvm.org/D117426
More information about the llvm-commits
mailing list