[WebAssembly] Implementation of intrinsic for ref.null and HeapType removal
authorPaulo Matos <pmatos@igalia.com>
Sun, 5 Dec 2021 12:50:47 +0000 (13:50 +0100)
committerPaulo Matos <pmatos@igalia.com>
Mon, 6 Dec 2021 08:46:15 +0000 (09:46 +0100)
commita96d8285101546c92116246939c2d53c57b88cf0
tree22f76c55af8cde9ec51c718536ca4569318208fb
parent3ec6b1bfacebd65450662c75215a96ae59769368
[WebAssembly] Implementation of intrinsic for ref.null and HeapType removal

This patch implements the intrinsic for ref.null.
In the process of implementing int_wasm_ref_null_func() and
int_wasm_ref_null_extern() intrinsics, it removes the redundant
HeapType.

This also causes the textual assembler syntax for ref.null to
change. Instead of receiving an argument: `func` or `extern`, the
instruction mnemonic is either ref.null_func or ref.null_extern,
without the need for a further operand.

Reviewed By: tlively

Differential Revision: https://reviews.llvm.org/D114979
20 files changed:
llvm/include/llvm/IR/Intrinsics.td
llvm/include/llvm/IR/IntrinsicsWebAssembly.td
llvm/lib/IR/Function.cpp
llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
llvm/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp
llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyInstPrinter.cpp
llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyInstPrinter.h
llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCCodeEmitter.cpp
llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.h
llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypeUtilities.cpp
llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypeUtilities.h
llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.td
llvm/lib/Target/WebAssembly/WebAssemblyInstrRef.td
llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp
llvm/test/CodeGen/WebAssembly/funcref-call.ll
llvm/test/CodeGen/WebAssembly/funcref-table_call.ll
llvm/test/CodeGen/WebAssembly/ref-null.ll [new file with mode: 0644]
llvm/test/MC/WebAssembly/reference-types.s
llvm/utils/TableGen/IntrinsicEmitter.cpp