[turbofan] Enable --verify-simplified-lowering in debug

Bug: v8:12619
Change-Id: I3b9f82a21c9454ff37036e8abcf73862e38f1fc9
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3494243
Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
Auto-Submit: Nico Hartmann <nicohartmann@chromium.org>
Commit-Queue: Nico Hartmann <nicohartmann@chromium.org>
Cr-Commit-Position: refs/heads/main@{#79338}
This commit is contained in:
Nico Hartmann 2022-03-02 17:35:10 +01:00 committed by V8 LUCI CQ
parent 35ddae0a27
commit 23b178b540
3 changed files with 26 additions and 7 deletions

View File

@ -41,7 +41,10 @@ void SimplifiedLoweringVerifier::CheckAndSet(Node* node, const Type& type,
node_type_str.str().c_str());
}
} else {
NodeProperties::SetType(node, type);
// We store the type inferred by the verification pass. We do not update
// the node's type directly, because following phases might encounter
// unsound types as long as the verification is not complete.
SetType(node, type);
}
SetTruncation(node, GeneralizeTruncation(trunc, type));
}

View File

@ -16,6 +16,7 @@ class OperationTyper;
class SimplifiedLoweringVerifier final {
public:
struct PerNodeData {
Type type = Type::None();
Truncation truncation = Truncation::Any(IdentifyZeros::kDistinguishZeros);
};
@ -38,6 +39,19 @@ class SimplifiedLoweringVerifier final {
return type_guards_.find(node) != type_guards_.end();
}
void ResizeDataIfNecessary(Node* node) {
if (data_.size() <= node->id()) {
data_.resize(node->id() + 1);
}
DCHECK_EQ(data_[node->id()].truncation,
Truncation::Any(IdentifyZeros::kDistinguishZeros));
}
void SetType(Node* node, const Type& type) {
ResizeDataIfNecessary(node);
data_[node->id()].type = type;
}
Type InputType(Node* node, int input_index) const {
// TODO(nicohartmann): Check that inputs are typed, once all operators are
// supported.
@ -45,15 +59,16 @@ class SimplifiedLoweringVerifier final {
if (NodeProperties::IsTyped(input)) {
return NodeProperties::GetType(input);
}
// For nodes that have not been typed before SL, we use the type that has
// been inferred by the verifier.
if (input->id() < data_.size()) {
return data_[input->id()].type;
}
return Type::None();
}
void SetTruncation(Node* node, const Truncation& truncation) {
if (data_.size() <= node->id()) {
data_.resize(node->id() + 1);
}
DCHECK_EQ(data_[node->id()].truncation,
Truncation::Any(IdentifyZeros::kDistinguishZeros));
ResizeDataIfNecessary(node);
data_[node->id()].truncation = truncation;
}

View File

@ -573,7 +573,8 @@ DEFINE_BOOL(assert_types, false,
// TODO(tebbi): Support allocating types from background thread.
DEFINE_NEG_IMPLICATION(assert_types, concurrent_recompilation)
DEFINE_BOOL(verify_simplified_lowering, false,
// Enable verification of SimplifiedLowering in debug builds.
DEFINE_BOOL(verify_simplified_lowering, DEBUG_BOOL,
"verify graph generated by simplified lowering")
DEFINE_BOOL(trace_compilation_dependencies, false, "trace code dependencies")