From 6b63aa06d31c3ca8d24c61165491636f977d90c1 Mon Sep 17 00:00:00 2001 From: titzer Date: Tue, 4 Aug 2015 06:13:54 -0700 Subject: [PATCH] [turbofan] Handle void returns in instruction selector. R=jarin@chromium.org BUG= Review URL: https://codereview.chromium.org/1269183002 Cr-Commit-Position: refs/heads/master@{#29999} --- src/compiler/instruction-selector.cc | 10 +++++++--- test/cctest/compiler/test-run-machops.cc | 7 +++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc index 4981f64..fde7ba3 100644 --- a/src/compiler/instruction-selector.cc +++ b/src/compiler/instruction-selector.cc @@ -1000,9 +1000,13 @@ void InstructionSelector::VisitGoto(BasicBlock* target) { void InstructionSelector::VisitReturn(Node* value) { DCHECK_NOT_NULL(value); OperandGenerator g(this); - Emit(kArchRet, g.NoOutput(), - g.UseLocation(value, linkage()->GetReturnLocation(), - linkage()->GetReturnType())); + if (linkage()->GetIncomingDescriptor()->ReturnCount() == 0) { + Emit(kArchRet, g.NoOutput()); + } else { + Emit(kArchRet, g.NoOutput(), + g.UseLocation(value, linkage()->GetReturnLocation(), + linkage()->GetReturnType())); + } } diff --git a/test/cctest/compiler/test-run-machops.cc b/test/cctest/compiler/test-run-machops.cc index b1fc369..10e9e9f 100644 --- a/test/cctest/compiler/test-run-machops.cc +++ b/test/cctest/compiler/test-run-machops.cc @@ -82,6 +82,13 @@ TEST(CodeGenInt32Binop) { } +TEST(CodeGenNop) { + RawMachineAssemblerTester m; + m.Return(m.Int32Constant(0)); + m.GenerateCode(); +} + + #if V8_TURBOFAN_BACKEND_64 static Node* Int64Input(RawMachineAssemblerTester* m, int index) { switch (index) { -- 2.7.4