[PATCH] D95664: [AVR] Fix the eliminateCallFramePseudos method so that it always expands STDWSPQRr and STDSPQRr
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 30 15:45:53 PDT 2021
arsenm requested changes to this revision.
arsenm added a comment.
This revision now requires changes to proceed.
This seems like a confusion of what frame instructions means. What do these stores have to do with call frames? The stores should reference frame indexes representing fixed frame objects in the incoming arguments or local objects. The frame adjust instructions are for SP modifications in call sequences where instructions are directly referencing offsets off of the SP, which do not have corresponding frame indexes
================
Comment at: llvm/test/CodeGen/AVR/bug-2021-01-29-complex-frame-pointer-usage.ll:1-2
+; RUN: llc < %s -march=avr -mcpu=atmega328 -filetype=obj -o /dev/null --print-options 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+; RUN: llc < %s -march=avr -mcpu=atmega328 -filetype=obj | llvm-objdump -S - | FileCheck %s --check-prefix=CHECK-OBJDUMP
+
----------------
Disassembling here is a little bit weird. Why isn't directly emitting asm sufficent?
================
Comment at: llvm/test/CodeGen/AVR/bug-2021-01-29-complex-frame-pointer-usage.ll:14-17
+; The issue was that the ISel lowering pass would lower many stack slot stores to these
+; instructions, but the frame pointer elimination code (that is designed to rewrite these two
+; instructions to real instructions) was only designed to run for STDWSPQRr/STDSPQRr instructions
+; that appeared in the basic blocks that contained the FrameSetup/FrameDestroy instructions.
----------------
This sentence doesn't make sense to me. Frame index elimination is unrelated to frame setup / frame destroy.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D95664/new/
https://reviews.llvm.org/D95664
More information about the llvm-commits
mailing list