diff options
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.td')
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.td | 43 |
1 files changed, 33 insertions, 10 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.td index 5ff0d73534a6..2f5a64a87a59 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrInfo.td @@ -74,8 +74,6 @@ def SDT_WebAssemblyCallSeqStart : SDCallSeqStart<[SDTCisVT<0, iPTR>, SDTCisVT<1, iPTR>]>; def SDT_WebAssemblyCallSeqEnd : SDCallSeqEnd<[SDTCisVT<0, iPTR>, SDTCisVT<1, iPTR>]>; -def SDT_WebAssemblyCall0 : SDTypeProfile<0, -1, [SDTCisPtrTy<0>]>; -def SDT_WebAssemblyCall1 : SDTypeProfile<1, -1, [SDTCisPtrTy<1>]>; def SDT_WebAssemblyBrTable : SDTypeProfile<0, -1, [SDTCisPtrTy<0>]>; def SDT_WebAssemblyArgument : SDTypeProfile<1, 1, [SDTCisVT<1, i32>]>; def SDT_WebAssemblyReturn : SDTypeProfile<0, -1, []>; @@ -83,7 +81,8 @@ def SDT_WebAssemblyWrapper : SDTypeProfile<1, 1, [SDTCisSameAs<0, 1>, SDTCisPtrTy<0>]>; def SDT_WebAssemblyWrapperPIC : SDTypeProfile<1, 1, [SDTCisSameAs<0, 1>, SDTCisPtrTy<0>]>; -def SDT_WebAssemblyThrow : SDTypeProfile<0, -1, [SDTCisPtrTy<0>]>; +def SDT_WebAssemblyThrow : SDTypeProfile<0, -1, []>; +def SDT_WebAssemblyCatch : SDTypeProfile<1, 1, [SDTCisPtrTy<0>]>; //===----------------------------------------------------------------------===// // WebAssembly-specific DAG Nodes. @@ -109,6 +108,8 @@ def WebAssemblywrapperPIC : SDNode<"WebAssemblyISD::WrapperPIC", SDT_WebAssemblyWrapperPIC>; def WebAssemblythrow : SDNode<"WebAssemblyISD::THROW", SDT_WebAssemblyThrow, [SDNPHasChain, SDNPVariadic]>; +def WebAssemblycatch : SDNode<"WebAssemblyISD::CATCH", SDT_WebAssemblyCatch, + [SDNPHasChain, SDNPSideEffect]>; //===----------------------------------------------------------------------===// // WebAssembly-specific Operands. @@ -163,6 +164,9 @@ def vec_i64imm_op : Operand<i64>; let OperandType = "OPERAND_FUNCTION32" in def function32_op : Operand<i32>; +let OperandType = "OPERAND_TABLE" in +def table32_op : Operand<i32>; + let OperandType = "OPERAND_OFFSET32" in def offset32_op : Operand<i32>; @@ -184,6 +188,11 @@ def Signature : Operand<i32> { let PrintMethod = "printWebAssemblySignatureOperand"; } +let OperandType = "OPERAND_HEAPTYPE" in +def HeapType : Operand<i32> { + let PrintMethod = "printWebAssemblyHeapTypeOperand"; +} + let OperandType = "OPERAND_TYPEINDEX" in def TypeIndex : Operand<i32>; @@ -236,7 +245,8 @@ defm "": ARGUMENT<I32, i32>; defm "": ARGUMENT<I64, i64>; defm "": ARGUMENT<F32, f32>; defm "": ARGUMENT<F64, f64>; -defm "": ARGUMENT<EXNREF, exnref>; +defm "": ARGUMENT<FUNCREF, funcref>; +defm "": ARGUMENT<EXTERNREF, externref>; // local.get and local.set are not generated by instruction selection; they // are implied by virtual register uses and defs. @@ -306,7 +316,8 @@ defm "" : LOCAL<I64>; defm "" : LOCAL<F32>; defm "" : LOCAL<F64>; defm "" : LOCAL<V128>, Requires<[HasSIMD128]>; -defm "" : LOCAL<EXNREF>, Requires<[HasExceptionHandling]>; +defm "" : LOCAL<FUNCREF>, Requires<[HasReferenceTypes]>; +defm "" : LOCAL<EXTERNREF>, Requires<[HasReferenceTypes]>; let isMoveImm = 1, isAsCheapAsAMove = 1, isReMaterializable = 1 in { defm CONST_I32 : I<(outs I32:$res), (ins i32imm_op:$imm), @@ -328,19 +339,30 @@ defm CONST_F64 : I<(outs F64:$res), (ins f64imm_op:$imm), } // isMoveImm = 1, isAsCheapAsAMove = 1, isReMaterializable = 1 def : Pat<(i32 (WebAssemblywrapper tglobaladdr:$addr)), - (CONST_I32 tglobaladdr:$addr)>, Requires<[IsNotPIC]>; + (CONST_I32 tglobaladdr:$addr)>, Requires<[IsNotPIC, HasAddr32]>; +def : Pat<(i64 (WebAssemblywrapper tglobaladdr:$addr)), + (CONST_I64 tglobaladdr:$addr)>, Requires<[IsNotPIC, HasAddr64]>; def : Pat<(i32 (WebAssemblywrapper tglobaladdr:$addr)), - (GLOBAL_GET_I32 tglobaladdr:$addr)>, Requires<[IsPIC]>; + (GLOBAL_GET_I32 tglobaladdr:$addr)>, Requires<[IsPIC, HasAddr32]>; def : Pat<(i32 (WebAssemblywrapperPIC tglobaladdr:$addr)), - (CONST_I32 tglobaladdr:$addr)>, Requires<[IsPIC]>; + (CONST_I32 tglobaladdr:$addr)>, Requires<[IsPIC, HasAddr32]>; +def : Pat<(i64 (WebAssemblywrapperPIC tglobaladdr:$addr)), + (CONST_I64 tglobaladdr:$addr)>, Requires<[IsPIC, HasAddr64]>; + +def : Pat<(i32 (WebAssemblywrapper tglobaltlsaddr:$addr)), + (CONST_I32 tglobaltlsaddr:$addr)>, Requires<[HasAddr32]>; +def : Pat<(i64 (WebAssemblywrapper tglobaltlsaddr:$addr)), + (CONST_I64 tglobaltlsaddr:$addr)>, Requires<[HasAddr64]>; def : Pat<(i32 (WebAssemblywrapper texternalsym:$addr)), - (GLOBAL_GET_I32 texternalsym:$addr)>, Requires<[IsPIC]>; + (GLOBAL_GET_I32 texternalsym:$addr)>, Requires<[IsPIC, HasAddr32]>; def : Pat<(i32 (WebAssemblywrapper texternalsym:$addr)), - (CONST_I32 texternalsym:$addr)>, Requires<[IsNotPIC]>; + (CONST_I32 texternalsym:$addr)>, Requires<[IsNotPIC, HasAddr32]>; +def : Pat<(i64 (WebAssemblywrapper texternalsym:$addr)), + (CONST_I64 texternalsym:$addr)>, Requires<[IsNotPIC, HasAddr64]>; def : Pat<(i32 (WebAssemblywrapper mcsym:$sym)), (CONST_I32 mcsym:$sym)>; def : Pat<(i64 (WebAssemblywrapper mcsym:$sym)), (CONST_I64 mcsym:$sym)>; @@ -359,3 +381,4 @@ include "WebAssemblyInstrAtomics.td" include "WebAssemblyInstrSIMD.td" include "WebAssemblyInstrRef.td" include "WebAssemblyInstrBulkMemory.td" +include "WebAssemblyInstrTable.td" |
