pmatos marked 4 inline comments as done.
pmatos added inline comments.

================
Comment at: llvm/test/CodeGen/WebAssembly/externref-tableget.ll:8
+
+define %externref @get_externref_from_table(i32 %i) {
+  %p = getelementptr [0 x %externref], [0 x %externref] addrspace (1)* 
@externref_table, i32 0, i32 %i
----------------
tlively wrote:
> pmatos wrote:
> > tlively wrote:
> > > It would be good to add tests with different access patterns as well like 
> > > constant indices, base + offset indices, etc.
> > This is a good point and I am looking at this at the moment. Adding a few 
> > tests, reveals a couple of issues with hardcoding how a table shows up in 
> > the DAG. For example, an access with an offset reveals that the DAG is way 
> > more complicated than it needs to be. For example, for:
> > 
> > ```
> > define %externref @get_externref_from_table_with_offset(i32 %i) {
> >   %off = add nsw i32 %i, 2
> >   %p = getelementptr [0 x %externref], [0 x %externref] addrspace (1)* 
> > @externref_table, i32 0, i32 %off
> >   %ref = load %externref, %externref addrspace(1)* %p
> >   ret %externref %ref
> > }
> > ```
> > 
> > So, an access with a 2 offset from the argument index causes this dag to be 
> > generated for the access:
> > 
> > ```
> >             t2: i32 = WebAssemblyISD::ARGUMENT TargetConstant:i32<0>
> >           t12: i32 = shl t2, Constant:i32<2>
> >         t15: i32 = add t12, GlobalAddress:i32<[0 x %extern addrspace(10)*] 
> > addrspace(1)* @externref_table> 0
> >       t16: i32 = add t15, Constant:i32<8>
> >     t10: externref,ch = load<(load (s0) from %ir.p, addrspace 1)> t0, t16, 
> > undef:i32
> > ```
> > 
> > Which looks like: `(add (add (shl arg 2) table) 8)`.
> > I need to transform this back into a table load from `(add arg 2)` which 
> > seems suboptimal. I am trying to understand if it's possible to tell LLVM 
> > not to generate these address offsets for these types of accesses. It 
> > certainly seems cleaner than to reverse the computation to find the correct 
> > index to access.
> I wonder if there is a way to tell LLVM that the width of an element in the 
> table is just 1. That looks like it would simplify this a lot, if not 
> completely.
I managed to get that sorted in the last patch - which was to add to the 
datalayout string p10:8:8 and p20:8:8


================
Comment at: llvm/test/CodeGen/WebAssembly/funcref-table_call.ll:25-27
+; CHECK-NEXT: i32.const       0
+; CHECK-NEXT: ref.null        func
+; CHECK-NEXT: table.set       __funcref_call_table
----------------
tlively wrote:
> Do you think it would be a good idea to skip setting this table slot back to 
> null? I know we discussed this before, but I don't remember what the pros and 
> cons were.
So the reason to do this was that if we leave the funcref in the slot, this 
could create hidden GC roots. Comes from this comment by @wingo : 
https://reviews.llvm.org/D95425#inline-929792


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D111154

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to