| Index: src/wasm/ast-decoder.cc
|
| diff --git a/src/wasm/ast-decoder.cc b/src/wasm/ast-decoder.cc
|
| index 17c84c6ac24121e7d7e43c451c64f80fd3472970..adc9c67183e2deb44f3f3a4b2ddeed631f72fe14 100644
|
| --- a/src/wasm/ast-decoder.cc
|
| +++ b/src/wasm/ast-decoder.cc
|
| @@ -615,13 +615,13 @@ class SR_WasmDecoder : public WasmDecoder {
|
| switch (sig->parameter_count()) {
|
| case 1: {
|
| Value val = Pop(0, sig->GetParam(0));
|
| - node = BUILD(Unop, opcode, val.node);
|
| + node = BUILD(Unop, opcode, val.node, position());
|
| break;
|
| }
|
| case 2: {
|
| Value rval = Pop(1, sig->GetParam(1));
|
| Value lval = Pop(0, sig->GetParam(0));
|
| - node = BUILD(Binop, opcode, lval.node, rval.node);
|
| + node = BUILD(Binop, opcode, lval.node, rval.node, position());
|
| break;
|
| }
|
| default:
|
| @@ -829,8 +829,7 @@ class SR_WasmDecoder : public WasmDecoder {
|
| break;
|
| }
|
| case kExprUnreachable: {
|
| - // TODO(clemensh): add source position for unreachable
|
| - Push(kAstEnd, BUILD0(Unreachable));
|
| + Push(kAstEnd, BUILD(Unreachable, position()));
|
| ssa_env_->Kill(SsaEnv::kControlEnd);
|
| break;
|
| }
|
| @@ -988,9 +987,9 @@ class SR_WasmDecoder : public WasmDecoder {
|
| CallFunctionOperand operand(this, pc_);
|
| if (Validate(pc_, operand)) {
|
| TFNode** buffer = PopArgs(operand.sig);
|
| - TFNode* call = BUILD(CallDirect, operand.index, buffer);
|
| + TFNode* call =
|
| + BUILD(CallDirect, operand.index, buffer, position());
|
| Push(GetReturnType(operand.sig), call);
|
| - AddSourcePosition(call, pc_);
|
| }
|
| len = 1 + operand.length;
|
| break;
|
| @@ -1001,9 +1000,9 @@ class SR_WasmDecoder : public WasmDecoder {
|
| TFNode** buffer = PopArgs(operand.sig);
|
| Value index = Pop(0, kAstI32);
|
| if (buffer) buffer[0] = index.node;
|
| - TFNode* call = BUILD(CallIndirect, operand.index, buffer);
|
| + TFNode* call =
|
| + BUILD(CallIndirect, operand.index, buffer, position());
|
| Push(GetReturnType(operand.sig), call);
|
| - AddSourcePosition(call, pc_);
|
| }
|
| len = 1 + operand.length;
|
| break;
|
| @@ -1012,9 +1011,9 @@ class SR_WasmDecoder : public WasmDecoder {
|
| CallImportOperand operand(this, pc_);
|
| if (Validate(pc_, operand)) {
|
| TFNode** buffer = PopArgs(operand.sig);
|
| - TFNode* call = BUILD(CallImport, operand.index, buffer);
|
| + TFNode* call =
|
| + BUILD(CallImport, operand.index, buffer, position());
|
| Push(GetReturnType(operand.sig), call);
|
| - AddSourcePosition(call, pc_);
|
| }
|
| len = 1 + operand.length;
|
| break;
|
| @@ -1108,7 +1107,8 @@ class SR_WasmDecoder : public WasmDecoder {
|
| int DecodeLoadMem(LocalType type, MachineType mem_type) {
|
| MemoryAccessOperand operand(this, pc_);
|
| Value index = Pop(0, kAstI32);
|
| - TFNode* node = BUILD(LoadMem, type, mem_type, index.node, operand.offset);
|
| + TFNode* node =
|
| + BUILD(LoadMem, type, mem_type, index.node, operand.offset, position());
|
| Push(type, node);
|
| return 1 + operand.length;
|
| }
|
| @@ -1117,7 +1117,7 @@ class SR_WasmDecoder : public WasmDecoder {
|
| MemoryAccessOperand operand(this, pc_);
|
| Value val = Pop(1, type);
|
| Value index = Pop(0, kAstI32);
|
| - BUILD(StoreMem, mem_type, index.node, operand.offset, val.node);
|
| + BUILD(StoreMem, mem_type, index.node, operand.offset, val.node, position());
|
| Push(type, val.node);
|
| return 1 + operand.length;
|
| }
|
| @@ -1295,7 +1295,7 @@ class SR_WasmDecoder : public WasmDecoder {
|
| builder_->AppendToMerge(merge, from->control);
|
| // Merge effects.
|
| if (builder_->IsPhiWithMerge(to->effect, merge)) {
|
| - builder_->AppendToPhi(merge, to->effect, from->effect);
|
| + builder_->AppendToPhi(to->effect, from->effect);
|
| } else if (to->effect != from->effect) {
|
| uint32_t count = builder_->InputCount(merge);
|
| TFNode** effects = builder_->Buffer(count);
|
| @@ -1310,7 +1310,7 @@ class SR_WasmDecoder : public WasmDecoder {
|
| TFNode* tnode = to->locals[i];
|
| TFNode* fnode = from->locals[i];
|
| if (builder_->IsPhiWithMerge(tnode, merge)) {
|
| - builder_->AppendToPhi(merge, tnode, fnode);
|
| + builder_->AppendToPhi(tnode, fnode);
|
| } else if (tnode != fnode) {
|
| uint32_t count = builder_->InputCount(merge);
|
| TFNode** vals = builder_->Buffer(count);
|
| @@ -1333,7 +1333,7 @@ class SR_WasmDecoder : public WasmDecoder {
|
| TFNode* CreateOrMergeIntoPhi(LocalType type, TFNode* merge, TFNode* tnode,
|
| TFNode* fnode) {
|
| if (builder_->IsPhiWithMerge(tnode, merge)) {
|
| - builder_->AppendToPhi(merge, tnode, fnode);
|
| + builder_->AppendToPhi(tnode, fnode);
|
| } else if (tnode != fnode) {
|
| uint32_t count = builder_->InputCount(merge);
|
| TFNode** vals = builder_->Buffer(count);
|
| @@ -1468,12 +1468,10 @@ class SR_WasmDecoder : public WasmDecoder {
|
| return assigned;
|
| }
|
|
|
| - void AddSourcePosition(TFNode* node, const byte* pc) {
|
| - if (node) {
|
| - int offset = static_cast<int>(pc - start_);
|
| - DCHECK_EQ(pc - start_, offset); // overflows cannot happen
|
| - builder_->SetSourcePosition(node, offset);
|
| - }
|
| + inline wasm::WasmCodePosition position() {
|
| + int offset = static_cast<int>(pc_ - start_);
|
| + DCHECK_EQ(pc_ - start_, offset); // overflows cannot happen
|
| + return offset;
|
| }
|
| };
|
|
|
|
|