From db5abfbbb477fc0339504dd1ae8148d112f26221 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Mon, 8 Feb 2021 09:35:59 +0000 Subject: [PATCH] [WebAssembly] Fix multiclass template parameter types. NFC. Fixes TableGen parser errors reported by D95874 due to incompatible types being used on multiclass templates. Differential Revision: https://reviews.llvm.org/D96205 --- .../Target/WebAssembly/WebAssemblyInstrAtomics.td | 4 +-- .../Target/WebAssembly/WebAssemblyInstrMemory.td | 8 +++--- .../lib/Target/WebAssembly/WebAssemblyInstrSIMD.td | 33 +++++++++++----------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrAtomics.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrAtomics.td index 22103b0..0705437 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrAtomics.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrAtomics.td @@ -607,7 +607,7 @@ multiclass BinRMWPatOffsetOnly { Requires<[HasAddr64, HasAtomics]>; } -multiclass BinRMWPatGlobalAddrOffOnly { +multiclass BinRMWPatGlobalAddrOffOnly { def : Pat<(ty (kind (WebAssemblywrapper tglobaladdr:$off), ty:$val)), (!cast(inst#_A32) 0, tglobaladdr:$off, (CONST_I32 0), ty:$val)>, Requires<[HasAddr32, HasAtomics, IsNotPIC]>; @@ -685,7 +685,7 @@ class sext_bin_rmw_16_64 : sext_bin_rmw_8_64; // Patterns for various addressing modes for truncating-extending binary RMWs. multiclass BinRMWTruncExtPattern< PatFrag rmw_8, PatFrag rmw_16, PatFrag rmw_32, PatFrag rmw_64, - NI inst8_32, NI inst16_32, NI inst8_64, NI inst16_64, NI inst32_64> { + string inst8_32, string inst16_32, string inst8_64, string inst16_64, string inst32_64> { // Truncating-extending binary RMWs with no constant offset defm : BinRMWPatNoOffset, inst8_32>; defm : BinRMWPatNoOffset, inst16_32>; diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td index 48b9344..82f5e98 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td @@ -67,7 +67,7 @@ defm LOAD_F32 : WebAssemblyLoad; defm LOAD_F64 : WebAssemblyLoad; // Select loads with no constant offset. -multiclass LoadPatNoOffset { +multiclass LoadPatNoOffset { def : Pat<(ty (kind I32:$addr)), (!cast(inst # "_A32") 0, 0, I32:$addr)>, Requires<[HasAddr32]>; def : Pat<(ty (kind (i64 I64:$addr))), (!cast(inst # "_A64") 0, 0, I64:$addr)>, @@ -82,7 +82,7 @@ defm : LoadPatNoOffset; // Select loads with a constant offset. // Pattern with address + immediate offset -multiclass LoadPatImmOff { def : Pat<(ty (kind (operand I32:$addr, imm:$off))), (!cast(inst # "_A32") 0, imm:$off, I32:$addr)>, @@ -102,7 +102,7 @@ defm : LoadPatImmOff; defm : LoadPatImmOff; // Select loads with just a constant offset. -multiclass LoadPatOffsetOnly { +multiclass LoadPatOffsetOnly { def : Pat<(ty (kind imm:$off)), (!cast(inst # "_A32") 0, imm:$off, (CONST_I32 0))>, Requires<[HasAddr32]>; @@ -116,7 +116,7 @@ defm : LoadPatOffsetOnly; defm : LoadPatOffsetOnly; defm : LoadPatOffsetOnly; -multiclass LoadPatGlobalAddrOffOnly { +multiclass LoadPatGlobalAddrOffOnly { def : Pat<(ty (kind (WebAssemblywrapper tglobaladdr:$off))), (!cast(inst # "_A32") 0, tglobaladdr:$off, (CONST_I32 0))>, Requires<[IsNotPIC, HasAddr32]>; diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td index 404cbcdf..98422a8 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td @@ -308,7 +308,7 @@ defm "" : SIMDLoadLane; defm "" : SIMDLoadLane; // Select loads with no constant offset. -multiclass LoadLanePatNoOffset { +multiclass LoadLanePatNoOffset { defvar load_lane_a32 = !cast("LOAD_LANE_"#vec#"_A32"); defvar load_lane_a64 = !cast("LOAD_LANE_"#vec#"_A64"); def : Pat<(vec.vt (kind (i32 I32:$addr), @@ -381,7 +381,7 @@ defm "" : SIMDStoreLane; defm "" : SIMDStoreLane; // Select stores with no constant offset. -multiclass StoreLanePatNoOffset { +multiclass StoreLanePatNoOffset { def : Pat<(kind (i32 I32:$addr), (vec.vt V128:$vec), (i32 vec.lane_idx:$idx)), (!cast("STORE_LANE_"#vec#"_A32") 0, 0, imm:$idx, $addr, $vec)>, Requires<[HasAddr32]>; @@ -705,7 +705,7 @@ defm EQ_v2i64 : // Bitwise operations //===----------------------------------------------------------------------===// -multiclass SIMDBinary simdop> { +multiclass SIMDBinary simdop> { defm _#vec : SIMD_I<(outs V128:$dst), (ins V128:$lhs, V128:$rhs), (outs), (ins), [(set (vec.vt V128:$dst), @@ -714,7 +714,8 @@ multiclass SIMDBinary simdop> { vec.prefix#"."#name, simdop>; } -multiclass SIMDBitwise simdop, bit commutable = false> { +multiclass SIMDBitwise simdop, + bit commutable = false> { let isCommutable = commutable in defm "" : SIMD_I<(outs V128:$dst), (ins V128:$lhs, V128:$rhs), (outs), (ins), [], @@ -724,7 +725,7 @@ multiclass SIMDBitwise simdop, bit commutable (!cast(NAME) $lhs, $rhs)>; } -multiclass SIMDUnary simdop> { +multiclass SIMDUnary simdop> { defm _#vec : SIMD_I<(outs V128:$dst), (ins V128:$v), (outs), (ins), [(set (vec.vt V128:$dst), (vec.vt (node (vec.vt V128:$v))))], @@ -811,21 +812,21 @@ defm : SIMDSignSelect; // Integer unary arithmetic //===----------------------------------------------------------------------===// -multiclass SIMDUnaryInt baseInst> { +multiclass SIMDUnaryInt baseInst> { defm "" : SIMDUnary; defm "" : SIMDUnary; defm "" : SIMDUnary; defm "" : SIMDUnary; } -multiclass SIMDReduceVec simdop> { +multiclass SIMDReduceVec simdop> { defm _#vec : SIMD_I<(outs I32:$dst), (ins V128:$vec), (outs), (ins), [(set I32:$dst, (i32 (op (vec.vt V128:$vec))))], vec.prefix#"."#name#"\t$dst, $vec", vec.prefix#"."#name, simdop>; } -multiclass SIMDReduce baseInst> { +multiclass SIMDReduce baseInst> { defm "" : SIMDReduceVec; defm "" : SIMDReduceVec; defm "" : SIMDReduceVec; @@ -912,23 +913,23 @@ defm SHR_U : SIMDShiftInt; // Integer binary arithmetic //===----------------------------------------------------------------------===// -multiclass SIMDBinaryIntNoI8x16 baseInst> { +multiclass SIMDBinaryIntNoI8x16 baseInst> { defm "" : SIMDBinary; defm "" : SIMDBinary; defm "" : SIMDBinary; } -multiclass SIMDBinaryIntSmall baseInst> { +multiclass SIMDBinaryIntSmall baseInst> { defm "" : SIMDBinary; defm "" : SIMDBinary; } -multiclass SIMDBinaryIntNoI64x2 baseInst> { +multiclass SIMDBinaryIntNoI64x2 baseInst> { defm "" : SIMDBinaryIntSmall; defm "" : SIMDBinary; } -multiclass SIMDBinaryInt baseInst> { +multiclass SIMDBinaryInt baseInst> { defm "" : SIMDBinaryIntNoI64x2; defm "" : SIMDBinary; } @@ -986,7 +987,7 @@ defm DOT : SIMD_I<(outs V128:$dst), (ins V128:$lhs, V128:$rhs), (outs), (ins), 186>; // Extending multiplication: extmul_{low,high}_P, extmul_high -multiclass SIMDExtBinary simdop> { +multiclass SIMDExtBinary simdop> { defm _#vec : SIMD_I<(outs V128:$dst), (ins V128:$lhs, V128:$rhs), (outs), (ins), [(set (vec.vt V128:$dst), (node @@ -1054,7 +1055,7 @@ defm NEAREST: SIMDUnary; // Floating-point binary arithmetic //===----------------------------------------------------------------------===// -multiclass SIMDBinaryFP baseInst> { +multiclass SIMDBinaryFP baseInst> { defm "" : SIMDBinary; defm "" : SIMDBinary; } @@ -1089,7 +1090,7 @@ defm PMAX : SIMDBinaryFP; // Conversions //===----------------------------------------------------------------------===// -multiclass SIMDConvert simdop> { defm op#_#vec : SIMD_I<(outs V128:$dst), (ins V128:$vec), (outs), (ins), @@ -1345,7 +1346,7 @@ defm PREFETCH_NT_A64 : "prefetch.nt\t$off$p2align", 0xc6>; } // mayLoad, UseNamedOperandTable -multiclass PrefetchPatNoOffset { +multiclass PrefetchPatNoOffset { def : Pat<(kind I32:$addr), (!cast(inst # "_A32") 0, 0, $addr)>, Requires<[HasAddr32]>; def : Pat<(kind I64:$addr), (!cast(inst # "_A64") 0, 0, $addr)>, -- 2.7.4