diff options
| author | Sam Clegg <sbc@chromium.org> | 2019-03-15 00:20:13 +0000 |
|---|---|---|
| committer | Sam Clegg <sbc@chromium.org> | 2019-03-15 00:20:13 +0000 |
| commit | 3d70a2b7d1624edc35c1ba607edf57b6cff3d299 (patch) | |
| tree | a98a3056b4a50449319205750085dc6c8d123a77 /llvm/lib/Target/WebAssembly | |
| parent | 787a7734982f0345939f4b23a45bbb90b6f61ed0 (diff) | |
| download | bcm5719-llvm-3d70a2b7d1624edc35c1ba607edf57b6cff3d299.tar.gz bcm5719-llvm-3d70a2b7d1624edc35c1ba607edf57b6cff3d299.zip | |
[WebAssembly] Remove unused load/store patterns that use texternalsym
Differential Revision: https://reviews.llvm.org/D59395
llvm-svn: 356221
Diffstat (limited to 'llvm/lib/Target/WebAssembly')
4 files changed, 5 insertions, 234 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp index 6c5a5ab9ea5..9f81da01f90 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp @@ -1002,11 +1002,11 @@ WebAssemblyTargetLowering::LowerExternalSymbol(SDValue Op, EVT VT = Op.getValueType(); assert(ES->getTargetFlags() == 0 && "Unexpected target flags on generic ExternalSymbolSDNode"); - // Set the TargetFlags to 0x1 which indicates that this is a "function" - // symbol rather than a data symbol. We do this unconditionally even though - // we don't know anything about the symbol other than its name, because all - // external symbols used in target-independent SelectionDAG code are for - // functions. + // Set the TargetFlags to MO_SYMBOL_FUNCTION which indicates that this is a + // "function" symbol rather than a data symbol. We do this unconditionally + // even though we don't know anything about the symbol other than its name, + // because all external symbols used in target-independent SelectionDAG code + // are for functions. return DAG.getNode( WebAssemblyISD::Wrapper, DL, VT, DAG.getTargetExternalSymbol(ES->getSymbol(), VT, diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrAtomics.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrAtomics.td index f0cb0c284bf..86ed5eff955 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrAtomics.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrAtomics.td @@ -77,12 +77,6 @@ def NotifyPatGlobalAddr : I32:$count)), (ATOMIC_NOTIFY 0, tglobaladdr:$off, I32:$addr, I32:$count)>; -def NotifyPatExternalSym : - Pat<(i32 (int_wasm_atomic_notify (add I32:$addr, - (WebAssemblywrapper texternalsym:$off)), - I32:$count)), - (ATOMIC_NOTIFY 0, texternalsym:$off, I32:$addr, I32:$count)>; - // Select notifys with just a constant offset. def NotifyPatOffsetOnly : Pat<(i32 (int_wasm_atomic_notify imm:$off, I32:$count)), @@ -93,11 +87,6 @@ def NotifyPatGlobalAddrOffOnly : I32:$count)), (ATOMIC_NOTIFY 0, tglobaladdr:$off, (CONST_I32 0), I32:$count)>; -def NotifyPatExternSymOffOnly : - Pat<(i32 (int_wasm_atomic_notify (WebAssemblywrapper texternalsym:$off), - I32:$count)), - (ATOMIC_NOTIFY 0, texternalsym:$off, (CONST_I32 0), I32:$count)>; - // Select waits with no constant offset. class WaitPatNoOffset<ValueType ty, Intrinsic kind, NI inst> : Pat<(i32 (kind I32:$addr, ty:$exp, I64:$timeout)), @@ -123,13 +112,6 @@ class WaitPatGlobalAddr<ValueType ty, Intrinsic kind, NI inst> : def : WaitPatGlobalAddr<i32, int_wasm_atomic_wait_i32, ATOMIC_WAIT_I32>; def : WaitPatGlobalAddr<i64, int_wasm_atomic_wait_i64, ATOMIC_WAIT_I64>; -class WaitPatExternalSym<ValueType ty, Intrinsic kind, NI inst> : - Pat<(i32 (kind (add I32:$addr, (WebAssemblywrapper texternalsym:$off)), - ty:$exp, I64:$timeout)), - (inst 0, texternalsym:$off, I32:$addr, ty:$exp, I64:$timeout)>; -def : WaitPatExternalSym<i32, int_wasm_atomic_wait_i32, ATOMIC_WAIT_I32>; -def : WaitPatExternalSym<i64, int_wasm_atomic_wait_i64, ATOMIC_WAIT_I64>; - // Select wait_i32, ATOMIC_WAIT_I32s with just a constant offset. class WaitPatOffsetOnly<ValueType ty, Intrinsic kind, NI inst> : Pat<(i32 (kind imm:$off, ty:$exp, I64:$timeout)), @@ -142,13 +124,6 @@ class WaitPatGlobalAddrOffOnly<ValueType ty, Intrinsic kind, NI inst> : (inst 0, tglobaladdr:$off, (CONST_I32 0), ty:$exp, I64:$timeout)>; def : WaitPatGlobalAddrOffOnly<i32, int_wasm_atomic_wait_i32, ATOMIC_WAIT_I32>; def : WaitPatGlobalAddrOffOnly<i64, int_wasm_atomic_wait_i64, ATOMIC_WAIT_I64>; - -class WaitPatExternSymOffOnly<ValueType ty, Intrinsic kind, NI inst> : - Pat<(i32 (kind (WebAssemblywrapper texternalsym:$off), ty:$exp, - I64:$timeout)), - (inst 0, texternalsym:$off, (CONST_I32 0), ty:$exp, I64:$timeout)>; -def : WaitPatExternSymOffOnly<i32, int_wasm_atomic_wait_i32, ATOMIC_WAIT_I32>; -def : WaitPatExternSymOffOnly<i64, int_wasm_atomic_wait_i64, ATOMIC_WAIT_I64>; } // Predicates = [HasAtomics] //===----------------------------------------------------------------------===// @@ -179,9 +154,6 @@ def : LoadPatImmOff<i64, atomic_load_64, or_is_add, ATOMIC_LOAD_I64>; def : LoadPatGlobalAddr<i32, atomic_load_32, ATOMIC_LOAD_I32>; def : LoadPatGlobalAddr<i64, atomic_load_64, ATOMIC_LOAD_I64>; -def : LoadPatExternalSym<i32, atomic_load_32, ATOMIC_LOAD_I32>; -def : LoadPatExternalSym<i64, atomic_load_64, ATOMIC_LOAD_I64>; - // Select loads with just a constant offset. def : LoadPatOffsetOnly<i32, atomic_load_32, ATOMIC_LOAD_I32>; def : LoadPatOffsetOnly<i64, atomic_load_64, ATOMIC_LOAD_I64>; @@ -189,9 +161,6 @@ def : LoadPatOffsetOnly<i64, atomic_load_64, ATOMIC_LOAD_I64>; def : LoadPatGlobalAddrOffOnly<i32, atomic_load_32, ATOMIC_LOAD_I32>; def : LoadPatGlobalAddrOffOnly<i64, atomic_load_64, ATOMIC_LOAD_I64>; -def : LoadPatExternSymOffOnly<i32, atomic_load_32, ATOMIC_LOAD_I32>; -def : LoadPatExternSymOffOnly<i64, atomic_load_64, ATOMIC_LOAD_I64>; - } // Predicates = [HasAtomics] // Extending loads. Note that there are only zero-extending atomic loads, no @@ -285,16 +254,6 @@ def : LoadPatGlobalAddr<i32, atomic_load_16, ATOMIC_LOAD16_U_I32>; def : LoadPatGlobalAddr<i64, sext_aload_8_64, ATOMIC_LOAD8_U_I64>; def : LoadPatGlobalAddr<i64, sext_aload_16_64, ATOMIC_LOAD16_U_I64>; -def : LoadPatExternalSym<i32, zext_aload_8_32, ATOMIC_LOAD8_U_I32>; -def : LoadPatExternalSym<i32, zext_aload_16_32, ATOMIC_LOAD16_U_I32>; -def : LoadPatExternalSym<i64, zext_aload_8_64, ATOMIC_LOAD8_U_I64>; -def : LoadPatExternalSym<i64, zext_aload_16_64, ATOMIC_LOAD16_U_I64>; -def : LoadPatExternalSym<i64, zext_aload_32_64, ATOMIC_LOAD32_U_I64>; -def : LoadPatExternalSym<i32, atomic_load_8, ATOMIC_LOAD8_U_I32>; -def : LoadPatExternalSym<i32, atomic_load_16, ATOMIC_LOAD16_U_I32>; -def : LoadPatExternalSym<i64, sext_aload_8_64, ATOMIC_LOAD8_U_I64>; -def : LoadPatExternalSym<i64, sext_aload_16_64, ATOMIC_LOAD16_U_I64>; - // Extending loads with just a constant offset def : LoadPatOffsetOnly<i32, zext_aload_8_32, ATOMIC_LOAD8_U_I32>; def : LoadPatOffsetOnly<i32, zext_aload_16_32, ATOMIC_LOAD16_U_I32>; @@ -316,16 +275,6 @@ def : LoadPatGlobalAddrOffOnly<i32, atomic_load_16, ATOMIC_LOAD16_U_I32>; def : LoadPatGlobalAddrOffOnly<i64, sext_aload_8_64, ATOMIC_LOAD8_U_I64>; def : LoadPatGlobalAddrOffOnly<i64, sext_aload_16_64, ATOMIC_LOAD16_U_I64>; -def : LoadPatExternSymOffOnly<i32, zext_aload_8_32, ATOMIC_LOAD8_U_I32>; -def : LoadPatExternSymOffOnly<i32, zext_aload_16_32, ATOMIC_LOAD16_U_I32>; -def : LoadPatExternSymOffOnly<i64, zext_aload_8_64, ATOMIC_LOAD8_U_I64>; -def : LoadPatExternSymOffOnly<i64, zext_aload_16_64, ATOMIC_LOAD16_U_I64>; -def : LoadPatExternSymOffOnly<i64, zext_aload_32_64, ATOMIC_LOAD32_U_I64>; -def : LoadPatExternSymOffOnly<i32, atomic_load_8, ATOMIC_LOAD8_U_I32>; -def : LoadPatExternSymOffOnly<i32, atomic_load_16, ATOMIC_LOAD16_U_I32>; -def : LoadPatExternSymOffOnly<i64, sext_aload_8_64, ATOMIC_LOAD8_U_I64>; -def : LoadPatExternSymOffOnly<i64, sext_aload_16_64, ATOMIC_LOAD16_U_I64>; - } // Predicates = [HasAtomics] //===----------------------------------------------------------------------===// @@ -371,12 +320,6 @@ class AStorePatGlobalAddr<ValueType ty, PatFrag kind, NI inst> : def : AStorePatGlobalAddr<i32, atomic_store_32, ATOMIC_STORE_I32>; def : AStorePatGlobalAddr<i64, atomic_store_64, ATOMIC_STORE_I64>; -class AStorePatExternalSym<ValueType ty, PatFrag kind, NI inst> : - Pat<(kind (add I32:$addr, (WebAssemblywrapper texternalsym:$off)), ty:$val), - (inst 0, texternalsym:$off, I32:$addr, ty:$val)>; -def : AStorePatExternalSym<i32, atomic_store_32, ATOMIC_STORE_I32>; -def : AStorePatExternalSym<i64, atomic_store_64, ATOMIC_STORE_I64>; - // Select stores with just a constant offset. class AStorePatOffsetOnly<ValueType ty, PatFrag kind, NI inst> : Pat<(kind imm:$off, ty:$val), (inst 0, imm:$off, (CONST_I32 0), ty:$val)>; @@ -389,12 +332,6 @@ class AStorePatGlobalAddrOffOnly<ValueType ty, PatFrag kind, NI inst> : def : AStorePatGlobalAddrOffOnly<i32, atomic_store_32, ATOMIC_STORE_I32>; def : AStorePatGlobalAddrOffOnly<i64, atomic_store_64, ATOMIC_STORE_I64>; -class AStorePatExternSymOffOnly<ValueType ty, PatFrag kind, NI inst> : - Pat<(kind (WebAssemblywrapper texternalsym:$off), ty:$val), - (inst 0, texternalsym:$off, (CONST_I32 0), ty:$val)>; -def : AStorePatExternSymOffOnly<i32, atomic_store_32, ATOMIC_STORE_I32>; -def : AStorePatExternSymOffOnly<i64, atomic_store_64, ATOMIC_STORE_I64>; - } // Predicates = [HasAtomics] // Truncating stores. @@ -443,12 +380,6 @@ def : AStorePatGlobalAddr<i64, trunc_astore_8_64, ATOMIC_STORE8_I64>; def : AStorePatGlobalAddr<i64, trunc_astore_16_64, ATOMIC_STORE16_I64>; def : AStorePatGlobalAddr<i64, trunc_astore_32_64, ATOMIC_STORE32_I64>; -def : AStorePatExternalSym<i32, atomic_store_8, ATOMIC_STORE8_I32>; -def : AStorePatExternalSym<i32, atomic_store_16, ATOMIC_STORE16_I32>; -def : AStorePatExternalSym<i64, trunc_astore_8_64, ATOMIC_STORE8_I64>; -def : AStorePatExternalSym<i64, trunc_astore_16_64, ATOMIC_STORE16_I64>; -def : AStorePatExternalSym<i64, trunc_astore_32_64, ATOMIC_STORE32_I64>; - // Truncating stores with just a constant offset def : AStorePatOffsetOnly<i32, atomic_store_8, ATOMIC_STORE8_I32>; def : AStorePatOffsetOnly<i32, atomic_store_16, ATOMIC_STORE16_I32>; @@ -462,12 +393,6 @@ def : AStorePatGlobalAddrOffOnly<i64, trunc_astore_8_64, ATOMIC_STORE8_I64>; def : AStorePatGlobalAddrOffOnly<i64, trunc_astore_16_64, ATOMIC_STORE16_I64>; def : AStorePatGlobalAddrOffOnly<i64, trunc_astore_32_64, ATOMIC_STORE32_I64>; -def : AStorePatExternSymOffOnly<i32, atomic_store_8, ATOMIC_STORE8_I32>; -def : AStorePatExternSymOffOnly<i32, atomic_store_16, ATOMIC_STORE16_I32>; -def : AStorePatExternSymOffOnly<i64, trunc_astore_8_64, ATOMIC_STORE8_I64>; -def : AStorePatExternSymOffOnly<i64, trunc_astore_16_64, ATOMIC_STORE16_I64>; -def : AStorePatExternSymOffOnly<i64, trunc_astore_32_64, ATOMIC_STORE32_I64>; - } // Predicates = [HasAtomics] //===----------------------------------------------------------------------===// @@ -580,11 +505,6 @@ class BinRMWPatGlobalAddr<ValueType ty, PatFrag kind, NI inst> : ty:$val)), (inst 0, tglobaladdr:$off, I32:$addr, ty:$val)>; -class BinRMWPatExternalSym<ValueType ty, PatFrag kind, NI inst> : - Pat<(ty (kind (add I32:$addr, (WebAssemblywrapper texternalsym:$off)), - ty:$val)), - (inst 0, texternalsym:$off, I32:$addr, ty:$val)>; - // Select binary RMWs with just a constant offset. class BinRMWPatOffsetOnly<ValueType ty, PatFrag kind, NI inst> : Pat<(ty (kind imm:$off, ty:$val)), @@ -594,10 +514,6 @@ class BinRMWPatGlobalAddrOffOnly<ValueType ty, PatFrag kind, NI inst> : Pat<(ty (kind (WebAssemblywrapper tglobaladdr:$off), ty:$val)), (inst 0, tglobaladdr:$off, (CONST_I32 0), ty:$val)>; -class BinRMWPatExternSymOffOnly<ValueType ty, PatFrag kind, NI inst> : - Pat<(ty (kind (WebAssemblywrapper texternalsym:$off), ty:$val)), - (inst 0, texternalsym:$off, (CONST_I32 0), ty:$val)>; - // Patterns for various addressing modes. multiclass BinRMWPattern<PatFrag rmw_32, PatFrag rmw_64, NI inst_32, NI inst_64> { @@ -612,17 +528,11 @@ multiclass BinRMWPattern<PatFrag rmw_32, PatFrag rmw_64, NI inst_32, def : BinRMWPatGlobalAddr<i32, rmw_32, inst_32>; def : BinRMWPatGlobalAddr<i64, rmw_64, inst_64>; - def : BinRMWPatExternalSym<i32, rmw_32, inst_32>; - def : BinRMWPatExternalSym<i64, rmw_64, inst_64>; - def : BinRMWPatOffsetOnly<i32, rmw_32, inst_32>; def : BinRMWPatOffsetOnly<i64, rmw_64, inst_64>; def : BinRMWPatGlobalAddrOffOnly<i32, rmw_32, inst_32>; def : BinRMWPatGlobalAddrOffOnly<i64, rmw_64, inst_64>; - - def : BinRMWPatExternSymOffOnly<i32, rmw_32, inst_32>; - def : BinRMWPatExternSymOffOnly<i64, rmw_64, inst_64>; } let Predicates = [HasAtomics] in { @@ -723,17 +633,6 @@ multiclass BinRMWTruncExtPattern< def : BinRMWPatGlobalAddr<i64, sext_bin_rmw_8_64<rmw_8>, inst8_64>; def : BinRMWPatGlobalAddr<i64, sext_bin_rmw_16_64<rmw_16>, inst16_64>; - def : BinRMWPatExternalSym<i32, zext_bin_rmw_8_32<rmw_8>, inst8_32>; - def : BinRMWPatExternalSym<i32, zext_bin_rmw_16_32<rmw_16>, inst16_32>; - def : BinRMWPatExternalSym<i64, zext_bin_rmw_8_64<rmw_8>, inst8_64>; - def : BinRMWPatExternalSym<i64, zext_bin_rmw_16_64<rmw_16>, inst16_64>; - def : BinRMWPatExternalSym<i64, zext_bin_rmw_32_64<rmw_32>, inst32_64>; - - def : BinRMWPatExternalSym<i32, sext_bin_rmw_8_32<rmw_8>, inst8_32>; - def : BinRMWPatExternalSym<i32, sext_bin_rmw_16_32<rmw_16>, inst16_32>; - def : BinRMWPatExternalSym<i64, sext_bin_rmw_8_64<rmw_8>, inst8_64>; - def : BinRMWPatExternalSym<i64, sext_bin_rmw_16_64<rmw_16>, inst16_64>; - // Truncating-extending binary RMWs with just a constant offset def : BinRMWPatOffsetOnly<i32, zext_bin_rmw_8_32<rmw_8>, inst8_32>; def : BinRMWPatOffsetOnly<i32, zext_bin_rmw_16_32<rmw_16>, inst16_32>; @@ -756,17 +655,6 @@ multiclass BinRMWTruncExtPattern< def : BinRMWPatGlobalAddrOffOnly<i32, sext_bin_rmw_16_32<rmw_16>, inst16_32>; def : BinRMWPatGlobalAddrOffOnly<i64, sext_bin_rmw_8_64<rmw_8>, inst8_64>; def : BinRMWPatGlobalAddrOffOnly<i64, sext_bin_rmw_16_64<rmw_16>, inst16_64>; - - def : BinRMWPatExternSymOffOnly<i32, zext_bin_rmw_8_32<rmw_8>, inst8_32>; - def : BinRMWPatExternSymOffOnly<i32, zext_bin_rmw_16_32<rmw_16>, inst16_32>; - def : BinRMWPatExternSymOffOnly<i64, zext_bin_rmw_8_64<rmw_8>, inst8_64>; - def : BinRMWPatExternSymOffOnly<i64, zext_bin_rmw_16_64<rmw_16>, inst16_64>; - def : BinRMWPatExternSymOffOnly<i64, zext_bin_rmw_32_64<rmw_32>, inst32_64>; - - def : BinRMWPatExternSymOffOnly<i32, sext_bin_rmw_8_32<rmw_8>, inst8_32>; - def : BinRMWPatExternSymOffOnly<i32, sext_bin_rmw_16_32<rmw_16>, inst16_32>; - def : BinRMWPatExternSymOffOnly<i64, sext_bin_rmw_8_64<rmw_8>, inst8_64>; - def : BinRMWPatExternSymOffOnly<i64, sext_bin_rmw_16_64<rmw_16>, inst16_64>; } let Predicates = [HasAtomics] in { @@ -849,11 +737,6 @@ class TerRMWPatGlobalAddr<ValueType ty, PatFrag kind, NI inst> : ty:$exp, ty:$new)), (inst 0, tglobaladdr:$off, I32:$addr, ty:$exp, ty:$new)>; -class TerRMWPatExternalSym<ValueType ty, PatFrag kind, NI inst> : - Pat<(ty (kind (add I32:$addr, (WebAssemblywrapper texternalsym:$off)), - ty:$exp, ty:$new)), - (inst 0, texternalsym:$off, I32:$addr, ty:$exp, ty:$new)>; - // Select ternary RMWs with just a constant offset. class TerRMWPatOffsetOnly<ValueType ty, PatFrag kind, NI inst> : Pat<(ty (kind imm:$off, ty:$exp, ty:$new)), @@ -863,10 +746,6 @@ class TerRMWPatGlobalAddrOffOnly<ValueType ty, PatFrag kind, NI inst> : Pat<(ty (kind (WebAssemblywrapper tglobaladdr:$off), ty:$exp, ty:$new)), (inst 0, tglobaladdr:$off, (CONST_I32 0), ty:$exp, ty:$new)>; -class TerRMWPatExternSymOffOnly<ValueType ty, PatFrag kind, NI inst> : - Pat<(ty (kind (WebAssemblywrapper texternalsym:$off), ty:$exp, ty:$new)), - (inst 0, texternalsym:$off, (CONST_I32 0), ty:$exp, ty:$new)>; - // Patterns for various addressing modes. multiclass TerRMWPattern<PatFrag rmw_32, PatFrag rmw_64, NI inst_32, NI inst_64> { @@ -881,17 +760,11 @@ multiclass TerRMWPattern<PatFrag rmw_32, PatFrag rmw_64, NI inst_32, def : TerRMWPatGlobalAddr<i32, rmw_32, inst_32>; def : TerRMWPatGlobalAddr<i64, rmw_64, inst_64>; - def : TerRMWPatExternalSym<i32, rmw_32, inst_32>; - def : TerRMWPatExternalSym<i64, rmw_64, inst_64>; - def : TerRMWPatOffsetOnly<i32, rmw_32, inst_32>; def : TerRMWPatOffsetOnly<i64, rmw_64, inst_64>; def : TerRMWPatGlobalAddrOffOnly<i32, rmw_32, inst_32>; def : TerRMWPatGlobalAddrOffOnly<i64, rmw_64, inst_64>; - - def : TerRMWPatExternSymOffOnly<i32, rmw_32, inst_32>; - def : TerRMWPatExternSymOffOnly<i64, rmw_64, inst_64>; } let Predicates = [HasAtomics] in @@ -984,17 +857,6 @@ multiclass TerRMWTruncExtPattern< def : TerRMWPatGlobalAddr<i64, sext_ter_rmw_8_64<rmw_8>, inst8_64>; def : TerRMWPatGlobalAddr<i64, sext_ter_rmw_16_64<rmw_16>, inst16_64>; - def : TerRMWPatExternalSym<i32, zext_ter_rmw_8_32<rmw_8>, inst8_32>; - def : TerRMWPatExternalSym<i32, zext_ter_rmw_16_32<rmw_16>, inst16_32>; - def : TerRMWPatExternalSym<i64, zext_ter_rmw_8_64<rmw_8>, inst8_64>; - def : TerRMWPatExternalSym<i64, zext_ter_rmw_16_64<rmw_16>, inst16_64>; - def : TerRMWPatExternalSym<i64, zext_ter_rmw_32_64<rmw_32>, inst32_64>; - - def : TerRMWPatExternalSym<i32, sext_ter_rmw_8_32<rmw_8>, inst8_32>; - def : TerRMWPatExternalSym<i32, sext_ter_rmw_16_32<rmw_16>, inst16_32>; - def : TerRMWPatExternalSym<i64, sext_ter_rmw_8_64<rmw_8>, inst8_64>; - def : TerRMWPatExternalSym<i64, sext_ter_rmw_16_64<rmw_16>, inst16_64>; - // Truncating-extending ternary RMWs with just a constant offset def : TerRMWPatOffsetOnly<i32, zext_ter_rmw_8_32<rmw_8>, inst8_32>; def : TerRMWPatOffsetOnly<i32, zext_ter_rmw_16_32<rmw_16>, inst16_32>; @@ -1017,17 +879,6 @@ multiclass TerRMWTruncExtPattern< def : TerRMWPatGlobalAddrOffOnly<i32, sext_ter_rmw_16_32<rmw_16>, inst16_32>; def : TerRMWPatGlobalAddrOffOnly<i64, sext_ter_rmw_8_64<rmw_8>, inst8_64>; def : TerRMWPatGlobalAddrOffOnly<i64, sext_ter_rmw_16_64<rmw_16>, inst16_64>; - - def : TerRMWPatExternSymOffOnly<i32, zext_ter_rmw_8_32<rmw_8>, inst8_32>; - def : TerRMWPatExternSymOffOnly<i32, zext_ter_rmw_16_32<rmw_16>, inst16_32>; - def : TerRMWPatExternSymOffOnly<i64, zext_ter_rmw_8_64<rmw_8>, inst8_64>; - def : TerRMWPatExternSymOffOnly<i64, zext_ter_rmw_16_64<rmw_16>, inst16_64>; - def : TerRMWPatExternSymOffOnly<i64, zext_ter_rmw_32_64<rmw_32>, inst32_64>; - - def : TerRMWPatExternSymOffOnly<i32, sext_ter_rmw_8_32<rmw_8>, inst8_32>; - def : TerRMWPatExternSymOffOnly<i32, sext_ter_rmw_16_32<rmw_16>, inst16_32>; - def : TerRMWPatExternSymOffOnly<i64, sext_ter_rmw_8_64<rmw_8>, inst8_64>; - def : TerRMWPatExternSymOffOnly<i64, sext_ter_rmw_16_64<rmw_16>, inst16_64>; } let Predicates = [HasAtomics] in diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td index 0d6d12f49ca..46a87f97cc7 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td @@ -102,15 +102,6 @@ def : LoadPatGlobalAddr<i64, load, LOAD_I64>; def : LoadPatGlobalAddr<f32, load, LOAD_F32>; def : LoadPatGlobalAddr<f64, load, LOAD_F64>; -class LoadPatExternalSym<ValueType ty, PatFrag kind, NI inst> : - Pat<(ty (kind (add I32:$addr, (WebAssemblywrapper texternalsym:$off)))), - (inst 0, texternalsym:$off, I32:$addr)>; -def : LoadPatExternalSym<i32, load, LOAD_I32>; -def : LoadPatExternalSym<i64, load, LOAD_I64>; -def : LoadPatExternalSym<f32, load, LOAD_F32>; -def : LoadPatExternalSym<f64, load, LOAD_F64>; - - // Select loads with just a constant offset. class LoadPatOffsetOnly<ValueType ty, PatFrag kind, NI inst> : Pat<(ty (kind imm:$off)), (inst 0, imm:$off, (CONST_I32 0))>; @@ -129,14 +120,6 @@ def : LoadPatGlobalAddrOffOnly<i64, load, LOAD_I64>; def : LoadPatGlobalAddrOffOnly<f32, load, LOAD_F32>; def : LoadPatGlobalAddrOffOnly<f64, load, LOAD_F64>; -class LoadPatExternSymOffOnly<ValueType ty, PatFrag kind, NI inst> : - Pat<(ty (kind (WebAssemblywrapper texternalsym:$off))), - (inst 0, texternalsym:$off, (CONST_I32 0))>; -def : LoadPatExternSymOffOnly<i32, load, LOAD_I32>; -def : LoadPatExternSymOffOnly<i64, load, LOAD_I64>; -def : LoadPatExternSymOffOnly<f32, load, LOAD_F32>; -def : LoadPatExternSymOffOnly<f64, load, LOAD_F64>; - // Extending load. defm LOAD8_S_I32 : WebAssemblyLoad<I32, "i32.load8_s", 0x2c>; defm LOAD8_U_I32 : WebAssemblyLoad<I32, "i32.load8_u", 0x2d>; @@ -196,18 +179,6 @@ def : LoadPatGlobalAddr<i64, zextloadi16, LOAD16_U_I64>; def : LoadPatGlobalAddr<i64, sextloadi32, LOAD32_S_I64>; def : LoadPatGlobalAddr<i64, zextloadi32, LOAD32_U_I64>; -def : LoadPatExternalSym<i32, sextloadi8, LOAD8_S_I32>; -def : LoadPatExternalSym<i32, zextloadi8, LOAD8_U_I32>; -def : LoadPatExternalSym<i32, sextloadi16, LOAD16_S_I32>; -def : LoadPatExternalSym<i32, zextloadi16, LOAD16_U_I32>; -def : LoadPatExternalSym<i64, sextloadi8, LOAD8_S_I64>; -def : LoadPatExternalSym<i64, zextloadi8, LOAD8_U_I64>; -def : LoadPatExternalSym<i64, sextloadi16, LOAD16_S_I64>; -def : LoadPatExternalSym<i64, zextloadi16, LOAD16_U_I64>; -def : LoadPatExternalSym<i64, sextloadi32, LOAD32_S_I64>; -def : LoadPatExternalSym<i64, zextloadi32, LOAD32_U_I64>; - - // Select extending loads with just a constant offset. def : LoadPatOffsetOnly<i32, sextloadi8, LOAD8_S_I32>; def : LoadPatOffsetOnly<i32, zextloadi8, LOAD8_U_I32>; @@ -232,17 +203,6 @@ def : LoadPatGlobalAddrOffOnly<i64, zextloadi16, LOAD16_U_I64>; def : LoadPatGlobalAddrOffOnly<i64, sextloadi32, LOAD32_S_I64>; def : LoadPatGlobalAddrOffOnly<i64, zextloadi32, LOAD32_U_I64>; -def : LoadPatExternSymOffOnly<i32, sextloadi8, LOAD8_S_I32>; -def : LoadPatExternSymOffOnly<i32, zextloadi8, LOAD8_U_I32>; -def : LoadPatExternSymOffOnly<i32, sextloadi16, LOAD16_S_I32>; -def : LoadPatExternSymOffOnly<i32, zextloadi16, LOAD16_U_I32>; -def : LoadPatExternSymOffOnly<i64, sextloadi8, LOAD8_S_I64>; -def : LoadPatExternSymOffOnly<i64, zextloadi8, LOAD8_U_I64>; -def : LoadPatExternSymOffOnly<i64, sextloadi16, LOAD16_S_I64>; -def : LoadPatExternSymOffOnly<i64, zextloadi16, LOAD16_U_I64>; -def : LoadPatExternSymOffOnly<i64, sextloadi32, LOAD32_S_I64>; -def : LoadPatExternSymOffOnly<i64, zextloadi32, LOAD32_U_I64>; - // Resolve "don't care" extending loads to zero-extending loads. This is // somewhat arbitrary, but zero-extending is conceptually simpler. @@ -269,11 +229,6 @@ def : LoadPatGlobalAddr<i32, extloadi16, LOAD16_U_I32>; def : LoadPatGlobalAddr<i64, extloadi8, LOAD8_U_I64>; def : LoadPatGlobalAddr<i64, extloadi16, LOAD16_U_I64>; def : LoadPatGlobalAddr<i64, extloadi32, LOAD32_U_I64>; -def : LoadPatExternalSym<i32, extloadi8, LOAD8_U_I32>; -def : LoadPatExternalSym<i32, extloadi16, LOAD16_U_I32>; -def : LoadPatExternalSym<i64, extloadi8, LOAD8_U_I64>; -def : LoadPatExternalSym<i64, extloadi16, LOAD16_U_I64>; -def : LoadPatExternalSym<i64, extloadi32, LOAD32_U_I64>; // Select "don't care" extending loads with just a constant offset. def : LoadPatOffsetOnly<i32, extloadi8, LOAD8_U_I32>; @@ -286,11 +241,6 @@ def : LoadPatGlobalAddrOffOnly<i32, extloadi16, LOAD16_U_I32>; def : LoadPatGlobalAddrOffOnly<i64, extloadi8, LOAD8_U_I64>; def : LoadPatGlobalAddrOffOnly<i64, extloadi16, LOAD16_U_I64>; def : LoadPatGlobalAddrOffOnly<i64, extloadi32, LOAD32_U_I64>; -def : LoadPatExternSymOffOnly<i32, extloadi8, LOAD8_U_I32>; -def : LoadPatExternSymOffOnly<i32, extloadi16, LOAD16_U_I32>; -def : LoadPatExternSymOffOnly<i64, extloadi8, LOAD8_U_I64>; -def : LoadPatExternSymOffOnly<i64, extloadi16, LOAD16_U_I64>; -def : LoadPatExternSymOffOnly<i64, extloadi32, LOAD32_U_I64>; // Defines atomic and non-atomic stores, regular and truncating multiclass WebAssemblyStore<WebAssemblyRegClass rc, string Name, int Opcode> { @@ -341,14 +291,6 @@ def : StorePatGlobalAddr<i64, store, STORE_I64>; def : StorePatGlobalAddr<f32, store, STORE_F32>; def : StorePatGlobalAddr<f64, store, STORE_F64>; -class StorePatExternalSym<ValueType ty, PatFrag kind, NI inst> : - Pat<(kind ty:$val, (add I32:$addr, (WebAssemblywrapper texternalsym:$off))), - (inst 0, texternalsym:$off, I32:$addr, ty:$val)>; -def : StorePatExternalSym<i32, store, STORE_I32>; -def : StorePatExternalSym<i64, store, STORE_I64>; -def : StorePatExternalSym<f32, store, STORE_F32>; -def : StorePatExternalSym<f64, store, STORE_F64>; - // Select stores with just a constant offset. class StorePatOffsetOnly<ValueType ty, PatFrag kind, NI inst> : Pat<(kind ty:$val, imm:$off), (inst 0, imm:$off, (CONST_I32 0), ty:$val)>; @@ -365,14 +307,6 @@ def : StorePatGlobalAddrOffOnly<i64, store, STORE_I64>; def : StorePatGlobalAddrOffOnly<f32, store, STORE_F32>; def : StorePatGlobalAddrOffOnly<f64, store, STORE_F64>; -class StorePatExternSymOffOnly<ValueType ty, PatFrag kind, NI inst> : - Pat<(kind ty:$val, (WebAssemblywrapper texternalsym:$off)), - (inst 0, texternalsym:$off, (CONST_I32 0), ty:$val)>; -def : StorePatExternSymOffOnly<i32, store, STORE_I32>; -def : StorePatExternSymOffOnly<i64, store, STORE_I64>; -def : StorePatExternSymOffOnly<f32, store, STORE_F32>; -def : StorePatExternSymOffOnly<f64, store, STORE_F64>; - // Truncating store. defm STORE8_I32 : WebAssemblyStore<I32, "i32.store8", 0x3a>; defm STORE16_I32 : WebAssemblyStore<I32, "i32.store16", 0x3b>; @@ -404,11 +338,6 @@ def : StorePatGlobalAddr<i32, truncstorei16, STORE16_I32>; def : StorePatGlobalAddr<i64, truncstorei8, STORE8_I64>; def : StorePatGlobalAddr<i64, truncstorei16, STORE16_I64>; def : StorePatGlobalAddr<i64, truncstorei32, STORE32_I64>; -def : StorePatExternalSym<i32, truncstorei8, STORE8_I32>; -def : StorePatExternalSym<i32, truncstorei16, STORE16_I32>; -def : StorePatExternalSym<i64, truncstorei8, STORE8_I64>; -def : StorePatExternalSym<i64, truncstorei16, STORE16_I64>; -def : StorePatExternalSym<i64, truncstorei32, STORE32_I64>; // Select truncating stores with just a constant offset. def : StorePatOffsetOnly<i32, truncstorei8, STORE8_I32>; @@ -421,11 +350,6 @@ def : StorePatGlobalAddrOffOnly<i32, truncstorei16, STORE16_I32>; def : StorePatGlobalAddrOffOnly<i64, truncstorei8, STORE8_I64>; def : StorePatGlobalAddrOffOnly<i64, truncstorei16, STORE16_I64>; def : StorePatGlobalAddrOffOnly<i64, truncstorei32, STORE32_I64>; -def : StorePatExternSymOffOnly<i32, truncstorei8, STORE8_I32>; -def : StorePatExternSymOffOnly<i32, truncstorei16, STORE16_I32>; -def : StorePatExternSymOffOnly<i64, truncstorei8, STORE8_I64>; -def : StorePatExternSymOffOnly<i64, truncstorei16, STORE16_I64>; -def : StorePatExternSymOffOnly<i64, truncstorei32, STORE32_I64>; // Current memory size. defm MEMORY_SIZE_I32 : I<(outs I32:$dst), (ins i32imm:$flags), diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td index 0d0948c00e0..6f5e89efaf0 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td @@ -57,10 +57,8 @@ def : LoadPatNoOffset<vec_t, load, !cast<NI>("LOAD_"#vec_t)>; def : LoadPatImmOff<vec_t, load, regPlusImm, !cast<NI>("LOAD_"#vec_t)>; def : LoadPatImmOff<vec_t, load, or_is_add, !cast<NI>("LOAD_"#vec_t)>; def : LoadPatGlobalAddr<vec_t, load, !cast<NI>("LOAD_"#vec_t)>; -def : LoadPatExternalSym<vec_t, load, !cast<NI>("LOAD_"#vec_t)>; def : LoadPatOffsetOnly<vec_t, load, !cast<NI>("LOAD_"#vec_t)>; def : LoadPatGlobalAddrOffOnly<vec_t, load, !cast<NI>("LOAD_"#vec_t)>; -def : LoadPatExternSymOffOnly<vec_t, load, !cast<NI>("LOAD_"#vec_t)>; } // Store: v128.store @@ -81,10 +79,8 @@ def : StorePatNoOffset<vec_t, store, !cast<NI>("STORE_"#vec_t)>; def : StorePatImmOff<vec_t, store, regPlusImm, !cast<NI>("STORE_"#vec_t)>; def : StorePatImmOff<vec_t, store, or_is_add, !cast<NI>("STORE_"#vec_t)>; def : StorePatGlobalAddr<vec_t, store, !cast<NI>("STORE_"#vec_t)>; -def : StorePatExternalSym<vec_t, store, !cast<NI>("STORE_"#vec_t)>; def : StorePatOffsetOnly<vec_t, store, !cast<NI>("STORE_"#vec_t)>; def : StorePatGlobalAddrOffOnly<vec_t, store, !cast<NI>("STORE_"#vec_t)>; -def : StorePatExternSymOffOnly<vec_t, store, !cast<NI>("STORE_"#vec_t)>; } //===----------------------------------------------------------------------===// |

