diff options
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyInstrBulkMemory.td')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyInstrBulkMemory.td | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrBulkMemory.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrBulkMemory.td index 4642236366e..646b16cf7bf 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrBulkMemory.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrBulkMemory.td @@ -21,19 +21,48 @@ multiclass BULK_I<dag oops_r, dag iops_r, dag oops_s, dag iops_s, } // Bespoke types and nodes for bulk memory ops -def wasm_memcpy_t : SDTypeProfile<0, 3, - [SDTCisPtrTy<0>, SDTCisPtrTy<1>, SDTCisInt<2>] +def wasm_memcpy_t : SDTypeProfile<0, 5, + [SDTCisInt<0>, SDTCisInt<1>, SDTCisPtrTy<2>, SDTCisPtrTy<3>, SDTCisInt<4>] >; def wasm_memcpy : SDNode<"WebAssemblyISD::MEMORY_COPY", wasm_memcpy_t, [SDNPHasChain, SDNPMayLoad, SDNPMayStore]>; //===----------------------------------------------------------------------===// +// memory.init +//===----------------------------------------------------------------------===// + +let mayStore = 1 in +defm MEMORY_INIT : + BULK_I<(outs), + (ins i32imm_op:$seg, i32imm_op:$idx, I32:$dest, + I32:$offset, I32:$size), + (outs), (ins i32imm_op:$seg, i32imm_op:$idx), + [(int_wasm_memory_init (i32 imm:$seg), (i32 imm:$idx), I32:$dest, + I32:$offset, I32:$size + )], + "memory.init\t$seg, $idx, $dest, $offset, $size", + "memory.init\t$seg, $idx", 0x08>; + +//===----------------------------------------------------------------------===// +// data.drop +//===----------------------------------------------------------------------===// + +defm DATA_DROP : + BULK_I<(outs), (ins i32imm_op:$seg), (outs), (ins i32imm_op:$seg), + [(int_wasm_data_drop (i32 imm:$seg))], + "data.drop\t$seg", "data.drop\t$seg", 0x09>; + +//===----------------------------------------------------------------------===// // memory.copy //===----------------------------------------------------------------------===// let mayLoad = 1, mayStore = 1 in -defm MEMORY_COPY : BULK_I<(outs), (ins I32:$dst, I32:$src, I32:$len), - (outs), (ins), - [(wasm_memcpy I32:$dst, I32:$src, I32:$len)], - "memory.copy\t$dst, $src, $len", - "memory.copy", 0x0a>; +defm MEMORY_COPY : + BULK_I<(outs), (ins i32imm_op:$src_idx, i32imm_op:$dst_idx, + I32:$dst, I32:$src, I32:$len), + (outs), (ins i32imm_op:$src_idx, i32imm_op:$dst_idx), + [(wasm_memcpy (i32 imm:$src_idx), (i32 imm:$dst_idx), + I32:$dst, I32:$src, I32:$len + )], + "memory.copy\t$src_idx, $dst_idx, $dst, $src, $len", + "memory.copy\t$src_idx, $dst_idx", 0x0a>; |