[PATCH] D139645: [WebAssembly] Fold adds with global addresses into load offset
Derek Schuff via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 13 13:34:25 PST 2022
dschuff added inline comments.
================
Comment at: llvm/test/CodeGen/WebAssembly/userstack.ll:336
+; global address, so we should fold the global address into the offset, but not
+; the frame offset.
; CHECK-LABEL: frame_offset_with_global_address
----------------
luke wrote:
> dschuff wrote:
> > so the result of this is that the frame offset will end up in a const or add expression (consumed by the i32.load8_u), and the global address will be folded?
> > Is this better than what we did before (i.e. the address in a const and the frame offset folded)?
> In this case the frame offset wasn't being folded, although I'm not sure if that is intentional or not. This is the codegen before the patch:
>
> ```
> frame_offset_with_global_address:
> .functype frame_offset_with_global_address () -> (i32)
> i32.const $push0=, str
> global.get $push5=, __stack_pointer
> i32.const $push6=, 16
> i32.sub $push9=, $pop5, $pop6
> i32.const $push7=, 12
> i32.add $push8=, $pop9, $pop7
> i32.add $push1=, $pop0, $pop8
> i32.load8_u $push2=, 0($pop1)
> i32.const $push3=, 67
> i32.and $push4=, $pop2, $pop3
> return $pop4
> ```
>
> With the patch the global address gets folded in which saves a `const` and an `add` instruction:
>
> ```
> frame_offset_with_global_address:
> .functype frame_offset_with_global_address () -> (i32)
> global.get $push3=, __stack_pointer
> i32.const $push4=, 16
> i32.sub $push7=, $pop3, $pop4
> i32.const $push5=, 12
> i32.add $push6=, $pop7, $pop5
> i32.load8_u $push1=, str($pop6)
> i32.const $push0=, 67
> i32.and $push2=, $pop1, $pop0
> return $pop2
> ```
>
>
Ah ok yeah this test was added in https://reviews.llvm.org/D90577 which fixed a bug in the case below the one you are modifying in this CL. So I guess what's happening now is that this IR is being ISel'ed differently and is ending up in the first case in eliminateFrameIndex instead of the second.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D139645/new/
https://reviews.llvm.org/D139645
More information about the llvm-commits
mailing list