pmatos marked 7 inline comments as done. pmatos added inline comments.
================ Comment at: llvm/lib/CodeGen/MachineOperand.cpp:1174 + } else + OS << ", opaque "; if (getAlign() != getBaseAlign()) ---------------- tlively wrote: > Is there a test that demonstrates this printing? Also, I'm not sure > specifically calling out zero-sized operands in the text dump is that useful. > Can zero-sized operands still be given an alignment? If so, it might even be > good to continue printing the alignment for them. The reason I changed this here is due to the call of getSize() crashing for zeroSized arguments. I have not added test for the printing. I don't think zero-sized operands can still be given an alignment. We are actually setting the alignment to ================ Comment at: llvm/lib/Target/WebAssembly/Utils/WebAssemblyUtilities.cpp:132-134 + // Setting Comdat ensure only one table is left after linking when multiple + // modules define the table. + Sym->setComdat(true); ---------------- sbc100 wrote: > tlively wrote: > > Is this necessary given that the symbol is set to be undefined? Perhaps it > > would be better to make it defined here and also set comdat so that the > > linker doesn't need to do anything special to make sure it exists in the > > final binary. (Or possibly I'm misunderstanding what these settings mean!) > > @sbc100 wdyt? > I think don't want this here. Firstly I think this will mark the symbol as > being a comdat group symbol .. which is not the same thing as being part of a > comdat group ( which I think is that is indented here). Secondly, I don't > think it makes sense for an undefined symbol to be part of a comdat group. I > think what you want here, if the symbol was defined is `setWeak()`. Given > that is not defined I dont think you even want that. It seems I was mistaken - I thought that by setting it as Comdat, the linker would merge symbols from different compilation units if they existed. Maybe what I need is `Weak` then. ================ Comment at: llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.h:59-61 + // AS 2 : is an integral address space for globals of externref values + // AS 3 : is an non-integral address space for funcref values + // AS 4 : is an integral address spaces for globals of funcref values ---------------- tlively wrote: > Why are the address spaces for globals integral? It doesn't make sense to do > arithmetic on the "address" of a global afaict. Does using getelementptr to > index tables in the global address space require the address space to be > integral? If so, that might be a good reason to make the address space > integral, but it might also be a good reason to put tables and globals in > different address spaces instead. Also, IMO it would be better to use just a > single address space for all globals; that way we could support globals with > other types like i32, i64, etc. without even more address spaces. Current set of patches should have addressed your concerns here. ================ Comment at: llvm/lib/Target/WebAssembly/WebAssemblyInstrTable.td:15 multiclass TABLE<WebAssemblyRegClass rt> { + let mayLoad = 1 in defm TABLE_GET_#rt : I<(outs rt:$res), (ins table32_op:$table), ---------------- tlively wrote: > wingo wrote: > > I think you may need `hasSideEffects = 0` for these annotations to have an > > effect. > I would be surprised if this were true! Why would this be the case? If I remember correctly, I added `mayLoad` and `mayStore` here so that lowering includes a chain. And this works without the need for `hasSideEffects`. Unless you think this is required for other reaons, but `mayLoad` works with it. ================ Comment at: llvm/lib/Target/WebAssembly/WebAssemblyInstrTable.td:19 [], "table.get\t$res, $table", "table.get\t$table", ---------------- tlively wrote: > wingo wrote: > > Not something for this patch, but this is certainly bogus: surely we mean > > `table.get\t$table, $i` and we have an i32 index argument? > Agree about the i32 index argument, but it is correct to have the result as > part of the string for the register-based output format. Not sure I understand why this should be `$i` instead of `$table`. Isn't `$table` represented as an index anyway? A `table32_op` is defined as `Operand<i32>` so I don't quite understand what we gain by changing this. ================ Comment at: llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp:129 + TT.isArch64Bit() + ? (hasReferenceTypes(FS) + ? "e-m:e-p:64:64-i64:64-n32:64-S128-ni:1:3" ---------------- tlively wrote: > This check should incorporate the CPU as well using `getSubtargetImpl(CPU, > FS)->hasReferenceTypes()`. What exactly do you mean here? Not sure what is the difference here. You mean adding something like : `hasReferenceTypes(FS) || getSubtargetImpl(CPU, FS)->hasReferenceTypes()`? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D95425/new/ https://reviews.llvm.org/D95425 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits