Commit 60ac45f0 authored by Victor Gomes's avatar Victor Gomes Committed by V8 LUCI CQ

[maglev] Add UNSUPPORTED macro for codegen

Allows incremental test, while some codegen paths are not available.

Bug: v8:7700
Change-Id: Icc24cf8e85464587f9eee6175107093a25b76da9
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3512794Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
Commit-Queue: Victor Gomes <victorgomes@chromium.org>
Auto-Submit: Victor Gomes <victorgomes@chromium.org>
Cr-Commit-Position: refs/heads/main@{#79423}
parent 4927d9b5
...@@ -72,6 +72,14 @@ class MaglevCodeGenState { ...@@ -72,6 +72,14 @@ class MaglevCodeGenState {
} }
MaglevCompilationUnit* compilation_unit() const { return compilation_unit_; } MaglevCompilationUnit* compilation_unit() const { return compilation_unit_; }
// TODO(v8:7700): Clean up after all code paths are supported.
void set_found_unsupported_code_paths(bool val) {
found_unsupported_code_paths_ = val;
}
bool found_unsupported_code_paths() const {
return found_unsupported_code_paths_;
}
private: private:
MaglevCompilationUnit* const compilation_unit_; MaglevCompilationUnit* const compilation_unit_;
SafepointTableBuilder* const safepoint_table_builder_; SafepointTableBuilder* const safepoint_table_builder_;
...@@ -79,6 +87,11 @@ class MaglevCodeGenState { ...@@ -79,6 +87,11 @@ class MaglevCodeGenState {
MacroAssembler masm_; MacroAssembler masm_;
std::vector<DeferredCodeInfo*> deferred_code_; std::vector<DeferredCodeInfo*> deferred_code_;
int vreg_slots_ = 0; int vreg_slots_ = 0;
// Allow marking some codegen paths as unsupported, so that we can test maglev
// incrementally.
// TODO(v8:7700): Clean up after all code paths are supported.
bool found_unsupported_code_paths_ = false;
}; };
// Some helpers for codegen. // Some helpers for codegen.
......
...@@ -323,6 +323,7 @@ class MaglevCodeGeneratorImpl final { ...@@ -323,6 +323,7 @@ class MaglevCodeGeneratorImpl final {
MaybeHandle<Code> Generate() { MaybeHandle<Code> Generate() {
EmitCode(); EmitCode();
if (code_gen_state_.found_unsupported_code_paths()) return {};
EmitMetadata(); EmitMetadata();
return BuildCodeObject(); return BuildCodeObject();
} }
......
...@@ -18,13 +18,16 @@ namespace internal { ...@@ -18,13 +18,16 @@ namespace internal {
namespace maglev { namespace maglev {
// TODO(v8:7700): Clean up after all bytecodes are supported. // TODO(v8:7700): Clean up after all bytecodes are supported.
#define MAGLEV_UNIMPLEMENTED_BYTECODE(Name) \ #define MAGLEV_UNIMPLEMENTED(BytecodeName) \
void MaglevGraphBuilder::Visit##Name() { \ do { \
std::cerr << "Maglev: Can't compile, bytecode " #Name \ std::cerr << "Maglev: Can't compile, bytecode " #BytecodeName \
" is not supported\n"; \ " is not supported\n"; \
found_unsupported_bytecode_ = true; \ found_unsupported_bytecode_ = true; \
this_field_will_be_unused_once_all_bytecodes_are_supported_ = true; \ this_field_will_be_unused_once_all_bytecodes_are_supported_ = true; \
} } while (false)
#define MAGLEV_UNIMPLEMENTED_BYTECODE(Name) \
void MaglevGraphBuilder::Visit##Name() { MAGLEV_UNIMPLEMENTED(Name); }
void MaglevGraphBuilder::VisitLdar() { SetAccumulator(LoadRegister(0)); } void MaglevGraphBuilder::VisitLdar() { SetAccumulator(LoadRegister(0)); }
...@@ -164,7 +167,7 @@ void MaglevGraphBuilder::VisitSetNamedProperty() { ...@@ -164,7 +167,7 @@ void MaglevGraphBuilder::VisitSetNamedProperty() {
} }
// TODO(victorgomes): Generic store. // TODO(victorgomes): Generic store.
UNREACHABLE(); MAGLEV_UNIMPLEMENTED(VisitSetNamedProperty);
} }
MAGLEV_UNIMPLEMENTED_BYTECODE(DefineNamedOwnProperty) MAGLEV_UNIMPLEMENTED_BYTECODE(DefineNamedOwnProperty)
......
...@@ -30,6 +30,15 @@ const char* ToString(Opcode opcode) { ...@@ -30,6 +30,15 @@ const char* ToString(Opcode opcode) {
#define __ code_gen_state->masm()-> #define __ code_gen_state->masm()->
// TODO(v8:7700): Clean up after all code paths are supported.
static bool g_this_field_will_be_unused_once_all_code_paths_are_supported;
#define UNSUPPORTED() \
do { \
std::cerr << "Maglev: Can't compile, unsuppored codegen path.\n"; \
code_gen_state->set_found_unsupported_code_paths(true); \
g_this_field_will_be_unused_once_all_code_paths_are_supported = true; \
} while (false)
namespace { namespace {
// --- // ---
...@@ -576,11 +585,11 @@ void LoadField::GenerateCode(MaglevCodeGenState* code_gen_state, ...@@ -576,11 +585,11 @@ void LoadField::GenerateCode(MaglevCodeGenState* code_gen_state,
__ DecompressAnyTagged(ToRegister(result()), input_field_operand); __ DecompressAnyTagged(ToRegister(result()), input_field_operand);
if (LoadHandler::IsDoubleBits::decode(handler)) { if (LoadHandler::IsDoubleBits::decode(handler)) {
// TODO(leszeks): Copy out the value, either as a double or a HeapNumber. // TODO(leszeks): Copy out the value, either as a double or a HeapNumber.
UNREACHABLE(); UNSUPPORTED();
} }
} else { } else {
// TODO(leszeks): Handle out-of-object properties. // TODO(leszeks): Handle out-of-object properties.
UNREACHABLE(); UNSUPPORTED();
} }
} }
void LoadField::PrintParams(std::ostream& os, void LoadField::PrintParams(std::ostream& os,
...@@ -605,7 +614,7 @@ void StoreField::GenerateCode(MaglevCodeGenState* code_gen_state, ...@@ -605,7 +614,7 @@ void StoreField::GenerateCode(MaglevCodeGenState* code_gen_state,
__ StoreTaggedField(operand, value); __ StoreTaggedField(operand, value);
} else { } else {
// TODO(victorgomes): Out-of-object properties. // TODO(victorgomes): Out-of-object properties.
UNREACHABLE(); UNSUPPORTED();
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment