Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Unified Diff: src/wasm/ast-decoder.cc

Issue 1915123006: [wasm] Pass byte position for trapping instructions (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/compiler/wasm-compiler.cc ('K') | « src/runtime/runtime-internal.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/wasm/ast-decoder.cc
diff --git a/src/wasm/ast-decoder.cc b/src/wasm/ast-decoder.cc
index 62026517a74605bc38bded99dcbdf6c7afb20d89..5981236faab6b78efc687e5a317e9cf8767e37f4 100644
--- a/src/wasm/ast-decoder.cc
+++ b/src/wasm/ast-decoder.cc
@@ -718,8 +718,7 @@ class SR_WasmDecoder : public WasmDecoder {
break;
}
case kExprUnreachable: {
- // TODO(clemensh): add source position for unreachable
- BUILD0(Unreachable);
+ BUILD(Unreachable, current_position());
ssa_env_->Kill(SsaEnv::kControlEnd);
Leaf(kAstEnd, nullptr);
break;
@@ -792,7 +791,7 @@ class SR_WasmDecoder : public WasmDecoder {
case kExprI32LoadMem16S:
case kExprI32LoadMem16U:
case kExprI32LoadMem:
- len = DecodeLoadMem(pc_, kAstI32);
+ len = DecodeLoadMem(kAstI32);
break;
case kExprI64LoadMem8S:
case kExprI64LoadMem8U:
@@ -801,30 +800,30 @@ class SR_WasmDecoder : public WasmDecoder {
case kExprI64LoadMem32S:
case kExprI64LoadMem32U:
case kExprI64LoadMem:
- len = DecodeLoadMem(pc_, kAstI64);
+ len = DecodeLoadMem(kAstI64);
break;
case kExprF32LoadMem:
- len = DecodeLoadMem(pc_, kAstF32);
+ len = DecodeLoadMem(kAstF32);
break;
case kExprF64LoadMem:
- len = DecodeLoadMem(pc_, kAstF64);
+ len = DecodeLoadMem(kAstF64);
break;
case kExprI32StoreMem8:
case kExprI32StoreMem16:
case kExprI32StoreMem:
- len = DecodeStoreMem(pc_, kAstI32);
+ len = DecodeStoreMem(kAstI32);
break;
case kExprI64StoreMem8:
case kExprI64StoreMem16:
case kExprI64StoreMem32:
case kExprI64StoreMem:
- len = DecodeStoreMem(pc_, kAstI64);
+ len = DecodeStoreMem(kAstI64);
break;
case kExprF32StoreMem:
- len = DecodeStoreMem(pc_, kAstF32);
+ len = DecodeStoreMem(kAstF32);
break;
case kExprF64StoreMem:
- len = DecodeStoreMem(pc_, kAstF64);
+ len = DecodeStoreMem(kAstF64);
break;
case kExprMemorySize:
Leaf(kAstI32, BUILD(MemSize, 0));
@@ -885,14 +884,14 @@ class SR_WasmDecoder : public WasmDecoder {
blocks_.push_back({ssa_env, static_cast<int>(stack_.size() - 1)});
}
- int DecodeLoadMem(const byte* pc, LocalType type) {
- MemoryAccessOperand operand(this, pc);
+ int DecodeLoadMem(LocalType type) {
+ MemoryAccessOperand operand(this, pc_);
Shift(type, 1);
return 1 + operand.length;
}
- int DecodeStoreMem(const byte* pc, LocalType type) {
- MemoryAccessOperand operand(this, pc);
+ int DecodeStoreMem(LocalType type) {
+ MemoryAccessOperand operand(this, pc_);
Shift(type, 2);
return 1 + operand.length;
}
@@ -948,10 +947,12 @@ class SR_WasmDecoder : public WasmDecoder {
TypeCheckLast(p, sig->GetParam(p->index - 1));
if (p->done() && build()) {
if (sig->parameter_count() == 2) {
- p->tree->node = builder_->Binop(opcode, p->tree->children[0]->node,
- p->tree->children[1]->node);
+ p->tree->node =
+ builder_->Binop(opcode, p->tree->children[0]->node,
+ p->tree->children[1]->node, position(p));
} else if (sig->parameter_count() == 1) {
- p->tree->node = builder_->Unop(opcode, p->tree->children[0]->node);
+ p->tree->node =
+ builder_->Unop(opcode, p->tree->children[0]->node, position(p));
} else {
UNREACHABLE();
}
@@ -1254,7 +1255,8 @@ class SR_WasmDecoder : public WasmDecoder {
for (uint32_t i = 0; i < count; i++) {
buffer[i] = p->tree->children[i]->node;
}
- p->tree->node = builder_->CallIndirect(operand.index, buffer);
+ p->tree->node =
+ builder_->CallIndirect(operand.index, buffer, position(p));
AddSourcePosition(p);
}
break;
@@ -1327,8 +1329,8 @@ class SR_WasmDecoder : public WasmDecoder {
TypeCheckLast(p, kAstI32); // index
if (build()) {
MemoryAccessOperand operand(this, p->pc());
- p->tree->node =
- builder_->LoadMem(type, mem_type, p->last()->node, operand.offset);
+ p->tree->node = builder_->LoadMem(type, mem_type, p->last()->node,
+ operand.offset, position(p));
}
}
@@ -1342,7 +1344,7 @@ class SR_WasmDecoder : public WasmDecoder {
MemoryAccessOperand operand(this, p->pc());
TFNode* val = p->tree->children[1]->node;
builder_->StoreMem(mem_type, p->tree->children[0]->node, operand.offset,
- val);
+ val, position(p));
p->tree->node = val;
}
}
@@ -1420,7 +1422,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);
@@ -1435,7 +1437,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);
@@ -1458,7 +1460,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);
@@ -1636,15 +1638,17 @@ class SR_WasmDecoder : public WasmDecoder {
return assigned;
}
- void AddSourcePosition(Production* p) {
+ inline void AddSourcePosition(Production* p) {
DCHECK_NOT_NULL(p->tree->node);
- AddSourcePosition(p->tree->node, p->pc());
+ builder_->SetSourcePosition(p->tree->node, position(p));
}
- void AddSourcePosition(TFNode* node, const byte* pc) {
+ inline int current_position() { return position(pc_); }
titzer 2016/04/28 11:27:00 Let's inline this one, since it's not actually sho
Clemens Hammacher 2016/04/28 12:43:28 .. and it just had one usage. Done.
+ inline int position(Production* p) { return position(p->pc()); }
+ inline int position(const byte* pc) {
int offset = static_cast<int>(pc - start_);
DCHECK_EQ(pc - start_, offset); // overflows cannot happen
- builder_->SetSourcePosition(node, offset);
+ return offset;
}
};
« src/compiler/wasm-compiler.cc ('K') | « src/runtime/runtime-internal.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698