diff options
| author | Thomas Lively <tlively@google.com> | 2018-10-11 18:45:48 +0000 |
|---|---|---|
| committer | Thomas Lively <tlively@google.com> | 2018-10-11 18:45:48 +0000 |
| commit | ab37189f7eb05e427170f60902d1964cf9ee4c95 (patch) | |
| tree | ad7000a1c824994a10567dd99e9a4f52986266de /llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td | |
| parent | e8a6c3eb9628e9833ae41196dc52a5c47041e3e6 (diff) | |
| download | bcm5719-llvm-ab37189f7eb05e427170f60902d1964cf9ee4c95.tar.gz bcm5719-llvm-ab37189f7eb05e427170f60902d1964cf9ee4c95.zip | |
[WebAssembly] Revert rL344180, which was breaking expensive checks
llvm-svn: 344280
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td')
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td index ccc331d1bf0..76ef1461d22 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td @@ -53,6 +53,8 @@ def regPlusGA : PatFrag<(ops node:$addr, node:$off), // We don't need a regPlusES because external symbols never have constant // offsets folded into them, so we can just use add. +let Defs = [ARGUMENTS] in { + // Defines atomic and non-atomic loads, regular and extending. multiclass WebAssemblyLoad<WebAssemblyRegClass rc, string Name, int Opcode> { let mayLoad = 1 in @@ -71,6 +73,8 @@ defm LOAD_I64 : WebAssemblyLoad<I64, "i64.load", 0x29>; defm LOAD_F32 : WebAssemblyLoad<F32, "f32.load", 0x2a>; defm LOAD_F64 : WebAssemblyLoad<F64, "f64.load", 0x2b>; +} // Defs = [ARGUMENTS] + // Select loads with no constant offset. class LoadPatNoOffset<ValueType ty, PatFrag kind, NI inst> : Pat<(ty (kind I32:$addr)), (inst 0, 0, I32:$addr)>; @@ -140,6 +144,8 @@ def : LoadPatExternSymOffOnly<i64, load, LOAD_I64>; def : LoadPatExternSymOffOnly<f32, load, LOAD_F32>; def : LoadPatExternSymOffOnly<f64, load, LOAD_F64>; +let Defs = [ARGUMENTS] in { + // Extending load. defm LOAD8_S_I32 : WebAssemblyLoad<I32, "i32.load8_s", 0x2c>; defm LOAD8_U_I32 : WebAssemblyLoad<I32, "i32.load8_u", 0x2d>; @@ -152,6 +158,8 @@ defm LOAD16_U_I64 : WebAssemblyLoad<I64, "i64.load16_u", 0x33>; defm LOAD32_S_I64 : WebAssemblyLoad<I64, "i64.load32_s", 0x34>; defm LOAD32_U_I64 : WebAssemblyLoad<I64, "i64.load32_u", 0x35>; +} // Defs = [ARGUMENTS] + // Select extending loads with no constant offset. def : LoadPatNoOffset<i32, sextloadi8, LOAD8_S_I32>; def : LoadPatNoOffset<i32, zextloadi8, LOAD8_U_I32>; @@ -295,6 +303,9 @@ def : LoadPatExternSymOffOnly<i64, extloadi8, LOAD8_U_I64>; def : LoadPatExternSymOffOnly<i64, extloadi16, LOAD16_U_I64>; def : LoadPatExternSymOffOnly<i64, extloadi32, LOAD32_U_I64>; + +let Defs = [ARGUMENTS] in { + // Defines atomic and non-atomic stores, regular and truncating multiclass WebAssemblyStore<WebAssemblyRegClass rc, string Name, int Opcode> { let mayStore = 1 in @@ -312,6 +323,8 @@ defm STORE_I64 : WebAssemblyStore<I64, "i64.store", 0x37>; defm STORE_F32 : WebAssemblyStore<F32, "f32.store", 0x38>; defm STORE_F64 : WebAssemblyStore<F64, "f64.store", 0x39>; +} // Defs = [ARGUMENTS] + // Select stores with no constant offset. class StorePatNoOffset<ValueType ty, PatFrag node, NI inst> : Pat<(node ty:$val, I32:$addr), (inst 0, 0, I32:$addr, ty:$val)>; @@ -376,6 +389,9 @@ def : StorePatExternSymOffOnly<i64, store, STORE_I64>; def : StorePatExternSymOffOnly<f32, store, STORE_F32>; def : StorePatExternSymOffOnly<f64, store, STORE_F64>; + +let Defs = [ARGUMENTS] in { + // Truncating store. defm STORE8_I32 : WebAssemblyStore<I32, "i32.store8", 0x3a>; defm STORE16_I32 : WebAssemblyStore<I32, "i32.store16", 0x3b>; @@ -383,6 +399,8 @@ defm STORE8_I64 : WebAssemblyStore<I64, "i64.store8", 0x3c>; defm STORE16_I64 : WebAssemblyStore<I64, "i64.store16", 0x3d>; defm STORE32_I64 : WebAssemblyStore<I64, "i64.store32", 0x3e>; +} // Defs = [ARGUMENTS] + // Select truncating stores with no constant offset. def : StorePatNoOffset<i32, truncstorei8, STORE8_I32>; def : StorePatNoOffset<i32, truncstorei16, STORE16_I32>; @@ -430,6 +448,8 @@ def : StorePatExternSymOffOnly<i64, truncstorei8, STORE8_I64>; def : StorePatExternSymOffOnly<i64, truncstorei16, STORE16_I64>; def : StorePatExternSymOffOnly<i64, truncstorei32, STORE32_I64>; +let Defs = [ARGUMENTS] in { + // Current memory size. defm MEMORY_SIZE_I32 : I<(outs I32:$dst), (ins i32imm:$flags), (outs), (ins i32imm:$flags), @@ -473,6 +493,8 @@ defm GROW_MEMORY_I32 : I<(outs I32:$dst), (ins i32imm:$flags, I32:$delta), 0x40>, Requires<[HasAddr32]>; +} // Defs = [ARGUMENTS] + def : Pat<(int_wasm_current_memory), (CURRENT_MEMORY_I32 0)>; def : Pat<(int_wasm_grow_memory I32:$delta), |

