| Index: test/cctest/wasm/test-run-wasm.cc
|
| diff --git a/test/cctest/wasm/test-run-wasm.cc b/test/cctest/wasm/test-run-wasm.cc
|
| index e6a6abaec520215f40ee2bc817356caa976b321a..5c7610a251ee12905cea0caafbaacff5e67d4420 100644
|
| --- a/test/cctest/wasm/test-run-wasm.cc
|
| +++ b/test/cctest/wasm/test-run-wasm.cc
|
| @@ -197,6 +197,26 @@ class TestingModule : public ModuleEnv {
|
| };
|
|
|
|
|
| +static void TestBuildingGraph(Zone* zone, JSGraph* jsgraph, FunctionEnv* env,
|
| + const byte* start, const byte* end) {
|
| + compiler::WasmGraphBuilder builder(zone, jsgraph, env->sig);
|
| + TreeResult result = BuildTFGraph(&builder, env, start, end);
|
| + if (result.failed()) {
|
| + ptrdiff_t pc = result.error_pc - result.start;
|
| + ptrdiff_t pt = result.error_pt - result.start;
|
| + std::ostringstream str;
|
| + str << "Verification failed: " << result.error_code << " pc = +" << pc;
|
| + if (result.error_pt) str << ", pt = +" << pt;
|
| + str << ", msg = " << result.error_msg.get();
|
| + FATAL(str.str().c_str());
|
| + }
|
| + if (FLAG_trace_turbo_graph) {
|
| + OFStream os(stdout);
|
| + os << AsRPO(*jsgraph->graph());
|
| + }
|
| +}
|
| +
|
| +
|
| // A helper for compiling functions that are only internally callable WASM code.
|
| class WasmFunctionCompiler : public HandleAndZoneScope,
|
| private GraphAndBuilders {
|
| @@ -222,21 +242,7 @@ class WasmFunctionCompiler : public HandleAndZoneScope,
|
| CallDescriptor* descriptor() { return descriptor_; }
|
|
|
| void Build(const byte* start, const byte* end) {
|
| - compiler::WasmGraphBuilder builder(main_zone(), &jsgraph, env.sig);
|
| - TreeResult result = BuildTFGraph(&builder, &env, start, end);
|
| - if (result.failed()) {
|
| - ptrdiff_t pc = result.error_pc - result.start;
|
| - ptrdiff_t pt = result.error_pt - result.start;
|
| - std::ostringstream str;
|
| - str << "Verification failed: " << result.error_code << " pc = +" << pc;
|
| - if (result.error_pt) str << ", pt = +" << pt;
|
| - str << ", msg = " << result.error_msg.get();
|
| - FATAL(str.str().c_str());
|
| - }
|
| - if (FLAG_trace_turbo_graph) {
|
| - OFStream os(stdout);
|
| - os << AsRPO(*jsgraph.graph());
|
| - }
|
| + TestBuildingGraph(main_zone(), &jsgraph, &env, start, end);
|
| }
|
|
|
| byte AllocateLocal(LocalType type) {
|
| @@ -2337,43 +2343,44 @@ TEST(Run_Wasm_Infinite_Loop_not_taken2_brif) {
|
| }
|
|
|
|
|
| -// TODO(titzer): Fix for nosee4 and re-enable.
|
| -#if 0
|
| -
|
| -static void TestBuildGraphForUnop(WasmOpcode opcode, FunctionSig* sig) {
|
| - WasmRunner<int32_t> r(MachineType::Int32());
|
| - init_env(r.env(), sig);
|
| - BUILD(r, static_cast<byte>(opcode), kExprGetLocal, 0);
|
| -}
|
| +static void TestBuildGraphForSimpleExpression(WasmOpcode opcode) {
|
| + if (!WasmOpcodes::IsSupported(opcode)) return;
|
|
|
| + Zone zone;
|
| + Isolate* isolate = CcTest::InitIsolateOnce();
|
| + HandleScope scope(isolate);
|
| + // Enable all optional operators.
|
| + CommonOperatorBuilder common(&zone);
|
| + MachineOperatorBuilder machine(&zone, MachineType::PointerRepresentation(),
|
| + MachineOperatorBuilder::kAllOptionalOps);
|
| + Graph graph(&zone);
|
| + JSGraph jsgraph(isolate, &graph, &common, nullptr, nullptr, &machine);
|
| + FunctionEnv env;
|
| + FunctionSig* sig = WasmOpcodes::Signature(opcode);
|
| + init_env(&env, sig);
|
|
|
| -static void TestBuildGraphForBinop(WasmOpcode opcode, FunctionSig* sig) {
|
| - WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32());
|
| - init_env(r.env(), sig);
|
| - BUILD(r, static_cast<byte>(opcode), kExprGetLocal, 0, kExprGetLocal, 1);
|
| + if (sig->parameter_count() == 1) {
|
| + byte code[] = {static_cast<byte>(opcode), kExprGetLocal, 0};
|
| + TestBuildingGraph(&zone, &jsgraph, &env, code, code + arraysize(code));
|
| + } else {
|
| + CHECK_EQ(2, sig->parameter_count());
|
| + byte code[] = {static_cast<byte>(opcode), kExprGetLocal, 0, kExprGetLocal,
|
| + 1};
|
| + TestBuildingGraph(&zone, &jsgraph, &env, code, code + arraysize(code));
|
| + }
|
| }
|
|
|
|
|
| TEST(Build_Wasm_SimpleExprs) {
|
| // Test that the decoder can build a graph for all supported simple expressions.
|
| -#define GRAPH_BUILD_TEST(name, opcode, sig) \
|
| - if (WasmOpcodes::IsSupported(kExpr##name)) { \
|
| - FunctionSig* sig = WasmOpcodes::Signature(kExpr##name); \
|
| - printf("expression: " #name "\n"); \
|
| - if (sig->parameter_count() == 1) { \
|
| - TestBuildGraphForUnop(kExpr##name, sig); \
|
| - } else { \
|
| - TestBuildGraphForBinop(kExpr##name, sig); \
|
| - } \
|
| - }
|
| +#define GRAPH_BUILD_TEST(name, opcode, sig) \
|
| + TestBuildGraphForSimpleExpression(kExpr##name);
|
|
|
| FOREACH_SIMPLE_OPCODE(GRAPH_BUILD_TEST);
|
|
|
| #undef GRAPH_BUILD_TEST
|
| }
|
|
|
| -#endif
|
| -
|
|
|
| TEST(Run_Wasm_Int32LoadInt8_signext) {
|
| TestingModule module;
|
|
|