v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
turboshaft-graph-interface.cc File Reference
Include dependency graph for turboshaft-graph-interface.cc:

Go to the source code of this file.

Classes

class  v8::internal::wasm::TurboshaftGraphBuildingInterface
 
struct  v8::internal::wasm::TurboshaftGraphBuildingInterface::Value
 
struct  v8::internal::wasm::TurboshaftGraphBuildingInterface::Control
 
class  v8::internal::wasm::TurboshaftGraphBuildingInterface::BrTableAnalysis< ValidationTag >
 
class  v8::internal::wasm::TurboshaftGraphBuildingInterface::InstanceCache
 
class  v8::internal::wasm::TurboshaftGraphBuildingInterface::BlockPhis
 

Namespaces

namespace  v8
 
namespace  v8::internal
 
namespace  v8::internal::wasm
 

Macros

#define V8_COMPILER_TURBOSHAFT_ASSEMBLER_MACROS_DEFINED   1
 
#define TSA_DCHECK(assembler, condition)
 
#define TSA_SLOW_DCHECK(assembler, ...)
 
#define LIKELY(...)
 
#define UNLIKELY(...)
 
#define BIND(label, ...)
 
#define BIND_LOOP(loop_label, ...)
 
#define WHILE(...)
 
#define FOREACH_IMPL_2(arg, iterable)
 
#define FOREACH_IMPL_3(arg0, arg1, iterable)
 
#define FOREACH(...)
 
#define BREAK   Asm().ControlFlowHelper_Goto(loop_exit_xx, {})
 
#define CONTINUE   Asm().ControlFlowHelper_Goto(loop_header_xx, {})
 
#define GOTO(label, ...)
 
#define GOTO_IF(cond, label, ...)
 
#define GOTO_IF_NOT(cond, label, ...)
 
#define FORCE_UNROLL_LOOP
 
#define SUPPRESSED_DANGLING_ELSE_WARNING_IF(...)
 
#define SUPPRESSED_DANGLING_ELSE_WARNING_ELSE   else
 
#define NO_SHADOW
 
#define RE_SHADOW   _Pragma("GCC diagnostic pop")
 
#define IF(...)
 
#define IF_NOT(...)
 
#define ELSE
 
#define Assert(condition)
 
#define REDUCE(operation)
 
#define REDUCE_INPUT_GRAPH(operation)
 
#define __   Asm().
 
#define V(Name)
 
#define ELEMENTS_KIND_TO_ELEMENT_SIZE(Type, type, TYPE, ctype)
 
#define HANDLE_BINARY_OPCODE(kind)
 
#define HANDLE_F16X8_BIN_OPTIONAL_OPCODE(kind, extern_ref)
 
#define HANDLE_F16X8_INVERSE_COMPARISON(kind, ts_kind, extern_ref)
 
#define HANDLE_INVERSE_COMPARISON(wasm_kind, ts_kind)
 
#define HANDLE_UNARY_NON_OPTIONAL_OPCODE(kind)
 
#define HANDLE_UNARY_OPTIONAL_OPCODE(kind, feature, external_ref)
 
#define HANDLE_SHIFT_OPCODE(kind)
 
#define HANDLE_TEST_OPCODE(kind)
 
#define HANDLE_SPLAT_OPCODE(kind)
 
#define HANDLE_TERNARY_MASK_OPCODE(kind)
 
#define HANDLE_TERNARY_OTHER_OPCODE(kind)
 
#define HANDLE_F16X8_TERN_OPCODE(kind, extern_ref)
 
#define CASE_BINOP(OPCODE, BINOP, RESULT, INPUT)
 
#define RMW_OPERATION(V)
 
#define CASE_LOAD(OPCODE, RESULT, INPUT)
 
#define LOAD_OPERATION(V)
 
#define CASE_STORE(OPCODE, INPUT, OUTPUT)
 
#define STORE_OPERATION(V)
 
#define TRAPREASON_TO_TRAPID(name)
 

Typedefs

using v8::internal::wasm::TSBlock = compiler::turboshaft::Block
 

Functions

V8_EXPORT_PRIVATE void v8::internal::wasm::BuildTSGraph (compiler::turboshaft::PipelineData *data, AccountingAllocator *allocator, CompilationEnv *env, WasmDetectedFeatures *detected, Graph &graph, const FunctionBody &func_body, const WireBytesStorage *wire_bytes, std::unique_ptr< AssumptionsJournal > *assumptions, ZoneVector< WasmInliningPosition > *inlining_positions, int func_index)
 

Macro Definition Documentation

◆ __

#define __   Asm().

◆ Assert

#define Assert ( condition)
Value:
AssertImpl(condition, #condition, __FILE__, __LINE__)

◆ BIND

#define BIND ( label,
... )
Value:
auto [CONCAT(is_bound_, __LINE__), ##__VA_ARGS__] = \
Asm().ControlFlowHelper_Bind(label); \
CONCAT(is_bound_, __LINE__)))
Label label
#define CONCAT(a,...)
Definition macros.h:22

◆ BIND_LOOP

#define BIND_LOOP ( loop_label,
... )
Value:
for(auto [CONCAT(run_loop_, __LINE__), ##__VA_ARGS__] = \
Asm().ControlFlowHelper_BindLoop(loop_label); CONCAT(run_loop_, __LINE__); \
Asm().ControlFlowHelper_EndLoop(loop_label), \
CONCAT(run_loop_, __LINE__) = false)

◆ BREAK

#define BREAK   Asm().ControlFlowHelper_Goto(loop_exit_xx, {})

◆ CASE_BINOP

#define CASE_BINOP ( OPCODE,
BINOP,
RESULT,
INPUT )
Value:
case WasmOpcode::kExpr##OPCODE: \
return AtomicOpInfo(Binop::k##BINOP, RegisterRepresentation::RESULT(), \
MemoryRepresentation::INPUT());
#define BINOP(binop, size)

◆ CASE_LOAD

#define CASE_LOAD ( OPCODE,
RESULT,
INPUT )
Value:
case WasmOpcode::kExpr##OPCODE: \
return AtomicOpInfo(kLoad, RegisterRepresentation::RESULT(), \
MemoryRepresentation::INPUT());

◆ CASE_STORE

#define CASE_STORE ( OPCODE,
INPUT,
OUTPUT )
Value:
case WasmOpcode::kExpr##OPCODE: \
return AtomicOpInfo(kStore, RegisterRepresentation::INPUT(), \
MemoryRepresentation::OUTPUT());

◆ CONTINUE

#define CONTINUE   Asm().ControlFlowHelper_Goto(loop_header_xx, {})

◆ ELEMENTS_KIND_TO_ELEMENT_SIZE

#define ELEMENTS_KIND_TO_ELEMENT_SIZE ( Type,
type,
TYPE,
ctype )
Value:
case kExternal##Type##Array: \
return sizeof(ctype);

◆ ELSE

#define ELSE
Value:
iteration == 1 && (bound = Asm().ControlFlowHelper_BindElse(&state)))
#define SUPPRESSED_DANGLING_ELSE_WARNING_ELSE

◆ FORCE_UNROLL_LOOP

#define FORCE_UNROLL_LOOP

◆ FOREACH

#define FOREACH ( ...)
Value:
CONCAT(FOREACH_IMPL_, COUNT_MACRO_ARGS(__VA_ARGS__))(__VA_ARGS__)
#define COUNT_MACRO_ARGS(...)
Definition macros.h:28

◆ FOREACH_IMPL_2

#define FOREACH_IMPL_2 ( arg,
iterable )
Value:
for (auto [CONCAT(run_loop_, __LINE__), iterable_xx, loop_header_yy, \
loop_exit_xx, current_iterator_xx, arg] = \
Asm().ControlFlowHelper_Foreach(iterable); \
CONCAT(run_loop_, __LINE__); \
Asm().ControlFlowHelper_EndForeachLoop( \
std::move(iterable_xx), loop_header_yy, loop_exit_xx, \
current_iterator_xx), \
CONCAT(run_loop_, __LINE__) = false)

◆ FOREACH_IMPL_3

#define FOREACH_IMPL_3 ( arg0,
arg1,
iterable )
Value:
for (auto [CONCAT(run_loop_, __LINE__), iterable_xx, loop_header_yy, \
loop_exit_xx, current_iterator_xx, arg0, arg1] = \
Asm().ControlFlowHelper_Foreach(iterable); \
CONCAT(run_loop_, __LINE__); \
Asm().ControlFlowHelper_EndForeachLoop( \
std::move(iterable_xx), loop_header_yy, loop_exit_xx, \
current_iterator_xx), \
CONCAT(run_loop_, __LINE__) = false)

◆ GOTO

#define GOTO ( label,
... )
Value:
Asm().ControlFlowHelper_Goto(label, {__VA_ARGS__})

◆ GOTO_IF

#define GOTO_IF ( cond,
label,
... )
Value:
Asm().ControlFlowHelper_GotoIf(cond, label, {__VA_ARGS__})

◆ GOTO_IF_NOT

#define GOTO_IF_NOT ( cond,
label,
... )
Value:
Asm().ControlFlowHelper_GotoIfNot(cond, label, {__VA_ARGS__})

◆ HANDLE_BINARY_OPCODE

#define HANDLE_BINARY_OPCODE ( kind)
Value:
case kExpr##kind: \
result->op = \
__ Simd128Binop(V<compiler::turboshaft::Simd128>::Cast(args[0].op), \
V<compiler::turboshaft::Simd128>::Cast(args[1].op), \
compiler::turboshaft::Simd128BinopOp::Kind::k##kind); \
break;
Builtins::Kind kind
Definition builtins.cc:40
base::Vector< const DirectHandle< Object > > args
Definition execution.cc:74
ZoneVector< RpoNumber > & result
#define __

◆ HANDLE_F16X8_BIN_OPTIONAL_OPCODE

#define HANDLE_F16X8_BIN_OPTIONAL_OPCODE ( kind,
extern_ref )
Value:
case kExprF16x8##kind: \
if (SupportedOperations::float16()) { \
result->op = __ Simd128Binop( \
V<compiler::turboshaft::Simd128>::Cast(args[0].op), \
V<compiler::turboshaft::Simd128>::Cast(args[1].op), \
compiler::turboshaft::Simd128BinopOp::Kind::kF16x8##kind); \
} else { \
result->op = CallCStackSlotToStackSlot(args[0].op, args[1].op, \
ExternalReference::extern_ref(), \
MemoryRepresentation::Simd128()); \
} \
break;

◆ HANDLE_F16X8_INVERSE_COMPARISON

#define HANDLE_F16X8_INVERSE_COMPARISON ( kind,
ts_kind,
extern_ref )
Value:
case kExprF16x8##kind: \
if (SupportedOperations::float16()) { \
result->op = __ Simd128Binop( \
V<compiler::turboshaft::Simd128>::Cast(args[1].op), \
V<compiler::turboshaft::Simd128>::Cast(args[0].op), \
compiler::turboshaft::Simd128BinopOp::Kind::kF16x8##ts_kind); \
} else { \
result->op = CallCStackSlotToStackSlot(args[1].op, args[0].op, \
ExternalReference::extern_ref(), \
MemoryRepresentation::Simd128()); \
} \
break;

◆ HANDLE_F16X8_TERN_OPCODE

#define HANDLE_F16X8_TERN_OPCODE ( kind,
extern_ref )
Value:
case kExpr##kind: \
if (SupportedOperations::float16()) { \
result->op = __ Simd128Ternary( \
V<compiler::turboshaft::Simd128>::Cast(args[0].op), \
V<compiler::turboshaft::Simd128>::Cast(args[1].op), \
V<compiler::turboshaft::Simd128>::Cast(args[2].op), \
compiler::turboshaft::Simd128TernaryOp::Kind::k##kind); \
} else { \
result->op = CallCStackSlotToStackSlot( \
ExternalReference::extern_ref(), MemoryRepresentation::Simd128(), \
{{args[0].op, MemoryRepresentation::Simd128()}, \
{args[1].op, MemoryRepresentation::Simd128()}, \
{args[2].op, MemoryRepresentation::Simd128()}}); \
} \
break;

◆ HANDLE_INVERSE_COMPARISON

#define HANDLE_INVERSE_COMPARISON ( wasm_kind,
ts_kind )
Value:
case kExpr##wasm_kind: \
result->op = __ Simd128Binop( \
V<compiler::turboshaft::Simd128>::Cast(args[1].op), \
V<compiler::turboshaft::Simd128>::Cast(args[0].op), \
compiler::turboshaft::Simd128BinopOp::Kind::k##ts_kind); \
break;

◆ HANDLE_SHIFT_OPCODE

#define HANDLE_SHIFT_OPCODE ( kind)
Value:
case kExpr##kind: \
result->op = \
__ Simd128Shift(V<compiler::turboshaft::Simd128>::Cast(args[0].op), \
V<Word32>::Cast(args[1].op), \
compiler::turboshaft::Simd128ShiftOp::Kind::k##kind); \
break;

◆ HANDLE_SPLAT_OPCODE

#define HANDLE_SPLAT_OPCODE ( kind)
Value:
case kExpr##kind##Splat: \
result->op = \
__ Simd128Splat(V<Any>::Cast(args[0].op), \
compiler::turboshaft::Simd128SplatOp::Kind::k##kind); \
break;

◆ HANDLE_TERNARY_MASK_OPCODE

#define HANDLE_TERNARY_MASK_OPCODE ( kind)
Value:
case kExpr##kind: \
result->op = __ Simd128Ternary( \
V<compiler::turboshaft::Simd128>::Cast(args[2].op), \
V<compiler::turboshaft::Simd128>::Cast(args[0].op), \
V<compiler::turboshaft::Simd128>::Cast(args[1].op), \
compiler::turboshaft::Simd128TernaryOp::Kind::k##kind); \
break;

◆ HANDLE_TERNARY_OTHER_OPCODE

#define HANDLE_TERNARY_OTHER_OPCODE ( kind)
Value:
case kExpr##kind: \
result->op = __ Simd128Ternary( \
V<compiler::turboshaft::Simd128>::Cast(args[0].op), \
V<compiler::turboshaft::Simd128>::Cast(args[1].op), \
V<compiler::turboshaft::Simd128>::Cast(args[2].op), \
compiler::turboshaft::Simd128TernaryOp::Kind::k##kind); \
break;

◆ HANDLE_TEST_OPCODE

#define HANDLE_TEST_OPCODE ( kind)
Value:
case kExpr##kind: \
result->op = \
__ Simd128Test(V<compiler::turboshaft::Simd128>::Cast(args[0].op), \
compiler::turboshaft::Simd128TestOp::Kind::k##kind); \
break;

◆ HANDLE_UNARY_NON_OPTIONAL_OPCODE

#define HANDLE_UNARY_NON_OPTIONAL_OPCODE ( kind)
Value:
case kExpr##kind: \
result->op = \
__ Simd128Unary(V<compiler::turboshaft::Simd128>::Cast(args[0].op), \
compiler::turboshaft::Simd128UnaryOp::Kind::k##kind); \
break;

◆ HANDLE_UNARY_OPTIONAL_OPCODE

#define HANDLE_UNARY_OPTIONAL_OPCODE ( kind,
feature,
external_ref )
Value:
case kExpr##kind: \
if (SupportedOperations::feature()) { \
result->op = __ Simd128Unary( \
V<compiler::turboshaft::Simd128>::Cast(args[0].op), \
compiler::turboshaft::Simd128UnaryOp::Kind::k##kind); \
} else { \
result->op = CallCStackSlotToStackSlot( \
args[0].op, ExternalReference::external_ref(), \
MemoryRepresentation::Simd128()); \
} \
break;

◆ IF

#define IF ( ...)
Value:
NO_SHADOW \
SUPPRESSED_DANGLING_ELSE_WARNING_IF( \
typename std::decay_t<decltype(Asm())>::ControlFlowHelper_IfState state; \
true) \
for (int iteration = 0, bound = false; iteration < 3; \
(bound ? Asm().ControlFlowHelper_FinishIfBlock(&state) : (void)0), \
bound = false, iteration++) \
RE_SHADOW \
SUPPRESSED_DANGLING_ELSE_WARNING_IF(iteration == 2) { \
Asm().ControlFlowHelper_EndIf(&state); \
} \
iteration == 0 && \
(bound = Asm().ControlFlowHelper_BindIf(__VA_ARGS__, &state)))
#define FORCE_UNROLL_LOOP

◆ IF_NOT

#define IF_NOT ( ...)
Value:
NO_SHADOW \
SUPPRESSED_DANGLING_ELSE_WARNING_IF( \
typename std::decay_t<decltype(Asm())>::ControlFlowHelper_IfState state; \
true) \
for (int iteration = 0, bound = false; iteration < 3; \
(bound ? Asm().ControlFlowHelper_FinishIfBlock(&state) : (void)0), \
bound = false, iteration++) \
RE_SHADOW \
SUPPRESSED_DANGLING_ELSE_WARNING_IF(iteration == 2) { \
Asm().ControlFlowHelper_EndIf(&state); \
} \
iteration == 0 && \
(bound = Asm().ControlFlowHelper_BindIfNot(__VA_ARGS__, &state)))

◆ LIKELY

#define LIKELY ( ...)
Value:
ConditionWithHint(__VA_ARGS__, BranchHint::kTrue)

◆ LOAD_OPERATION

#define LOAD_OPERATION ( V)
Value:
V(I32AtomicLoad, Word32, Uint32) \
V(I32AtomicLoad16U, Word32, Uint16) \
V(I32AtomicLoad8U, Word32, Uint8) \
V(I64AtomicLoad, Word64, Uint64) \
V(I64AtomicLoad32U, Word64, Uint32) \
V(I64AtomicLoad16U, Word64, Uint16) \
V(I64AtomicLoad8U, Word64, Uint8)
#define V(Name)

◆ NO_SHADOW

#define NO_SHADOW
Value:
_Pragma("GCC diagnostic push") \
_Pragma("GCC diagnostic ignored \"-Wshadow\"")

◆ RE_SHADOW

#define RE_SHADOW   _Pragma("GCC diagnostic pop")

◆ REDUCE

#define REDUCE ( operation)
Value:
Reduce##operation

◆ REDUCE_INPUT_GRAPH

#define REDUCE_INPUT_GRAPH ( operation)
Value:
ReduceInputGraph##operation

◆ RMW_OPERATION

#define RMW_OPERATION ( V)

◆ STORE_OPERATION

#define STORE_OPERATION ( V)
Value:
V(I32AtomicStore, Word32, Uint32) \
V(I32AtomicStore16U, Word32, Uint16) \
V(I32AtomicStore8U, Word32, Uint8) \
V(I64AtomicStore, Word64, Uint64) \
V(I64AtomicStore32U, Word64, Uint32) \
V(I64AtomicStore16U, Word64, Uint16) \
V(I64AtomicStore8U, Word64, Uint8)

◆ SUPPRESSED_DANGLING_ELSE_WARNING_ELSE

#define SUPPRESSED_DANGLING_ELSE_WARNING_ELSE   else

◆ SUPPRESSED_DANGLING_ELSE_WARNING_IF

#define SUPPRESSED_DANGLING_ELSE_WARNING_IF ( ...)
Value:
if (__VA_ARGS__)

◆ TRAPREASON_TO_TRAPID

#define TRAPREASON_TO_TRAPID ( name)
Value:
case wasm::k##name: \
static_assert(static_cast<int>(TrapId::k##name) == \
static_cast<int>(Builtin::kThrowWasm##name), \
"trap id mismatch"); \
return TrapId::k##name;
const char * name
Definition builtins.cc:39

◆ TSA_DCHECK

#define TSA_DCHECK ( assembler,
condition )
Value:
(assembler)->Asm().Dcheck(condition, #condition, __FILE__, __LINE__ )
AssemblerT assembler

◆ TSA_SLOW_DCHECK

#define TSA_SLOW_DCHECK ( assembler,
... )
Value:
((void)0)

◆ UNLIKELY

#define UNLIKELY ( ...)
Value:
ConditionWithHint(__VA_ARGS__, BranchHint::kFalse)

◆ V

#define V ( Name)
Value:
case DataViewOp::kGet##Name: \
case DataViewOp::kSet##Name: \
return kExternal##Name##Array;

◆ V8_COMPILER_TURBOSHAFT_ASSEMBLER_MACROS_DEFINED

#define V8_COMPILER_TURBOSHAFT_ASSEMBLER_MACROS_DEFINED   1

◆ WHILE

#define WHILE ( ...)
Value:
for (auto [CONCAT(run_loop_, __LINE__), loop_header_xx, loop_exit_xx] \
= Asm().ControlFlowHelper_While([&]() { \
return Asm().resolve(ConstOrV<Word32>(__VA_ARGS__)); \
}); \
CONCAT(run_loop_, __LINE__); \
Asm().ControlFlowHelper_EndWhileLoop(loop_header_xx, loop_exit_xx), \
CONCAT(run_loop_, __LINE__) = false)

Variable Documentation

◆ cursor_

int cursor_ {0}
private

Definition at line 141 of file turboshaft-graph-interface.cc.