Reviewers: Benedikt Meurer,

Message:
Benedikt: this change is required for
https://codereview.chromium.org/1239793002/. Could you please take a look?
Thanks.

Description:
[turbofan] Change RawMachineAssembler to take a CallDescriptor instead of a
MachineSignature.

The InterpreterAssembler needs to specify a specific CallDescriptor type
instead of using the SimplifiedCDescriptor type. This CL makes it possible
to specify the CallDescriptor used by the RawMachineAssembler instead of
specifying a MachineSignature.

BUG=v8:4280
LOG=N

Please review this at https://codereview.chromium.org/1235313002/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+40, -37 lines):
  M src/compiler/raw-machine-assembler.h
  M src/compiler/raw-machine-assembler.cc
  M test/cctest/compiler/codegen-tester.h
  M test/cctest/compiler/instruction-selector-tester.h
  M test/unittests/compiler/instruction-selector-unittest.h


Index: src/compiler/raw-machine-assembler.cc
diff --git a/src/compiler/raw-machine-assembler.cc b/src/compiler/raw-machine-assembler.cc index 3e87ef5d97a9006dc35e95f5ccc8c714de4c6695..1a3d6494e93d07225e9c304e5339ddf67738296c 100644
--- a/src/compiler/raw-machine-assembler.cc
+++ b/src/compiler/raw-machine-assembler.cc
@@ -12,16 +12,14 @@ namespace internal {
 namespace compiler {

 RawMachineAssembler::RawMachineAssembler(Isolate* isolate, Graph* graph,
- const MachineSignature* machine_sig,
+                                         CallDescriptor* call_descriptor,
                                          MachineType word,
MachineOperatorBuilder::Flags flags)
     : GraphBuilder(isolate, graph),
       schedule_(new (zone()) Schedule(zone())),
       machine_(zone(), word, flags),
       common_(zone()),
-      machine_sig_(machine_sig),
-      call_descriptor_(
-          Linkage::GetSimplifiedCDescriptor(graph->zone(), machine_sig)),
+      call_descriptor_(call_descriptor),
       parameters_(NULL),
       current_block_(schedule()->start()) {
   int param_count = static_cast<int>(parameter_count());
Index: src/compiler/raw-machine-assembler.h
diff --git a/src/compiler/raw-machine-assembler.h b/src/compiler/raw-machine-assembler.h index bc28e6c8175d3ef909e32732c7e75ff1dbc26d2d..36299440d681ac2550ed7e336741e08b94fe92f4 100644
--- a/src/compiler/raw-machine-assembler.h
+++ b/src/compiler/raw-machine-assembler.h
@@ -43,7 +43,7 @@ class RawMachineAssembler : public GraphBuilder {
   };

   RawMachineAssembler(Isolate* isolate, Graph* graph,
-                      const MachineSignature* machine_sig,
+                      CallDescriptor* call_descriptor,
                       MachineType word = kMachPtr,
                       MachineOperatorBuilder::Flags flags =
                           MachineOperatorBuilder::Flag::kNoFlags);
@@ -53,8 +53,10 @@ class RawMachineAssembler : public GraphBuilder {
   MachineOperatorBuilder* machine() { return &machine_; }
   CommonOperatorBuilder* common() { return &common_; }
   CallDescriptor* call_descriptor() const { return call_descriptor_; }
- size_t parameter_count() const { return machine_sig_->parameter_count(); }
-  const MachineSignature* machine_sig() const { return machine_sig_; }
+ size_t parameter_count() const { return machine_sig()->parameter_count(); }
+  const MachineSignature* machine_sig() const {
+    return call_descriptor_->GetMachineSignature();
+  }

   Node* UndefinedConstant() {
     Unique<HeapObject> unique = Unique<HeapObject>::CreateImmovable(
@@ -528,7 +530,6 @@ class RawMachineAssembler : public GraphBuilder {
   Schedule* schedule_;
   MachineOperatorBuilder machine_;
   CommonOperatorBuilder common_;
-  const MachineSignature* machine_sig_;
   CallDescriptor* call_descriptor_;
   Node** parameters_;
   BasicBlock* current_block_;
Index: test/cctest/compiler/codegen-tester.h
diff --git a/test/cctest/compiler/codegen-tester.h b/test/cctest/compiler/codegen-tester.h index bc6d938ce13aff135c4c931f09cd1831bc65f279..d8ecc02fc24ca1af9542be2e3c856578cf0efd51 100644
--- a/test/cctest/compiler/codegen-tester.h
+++ b/test/cctest/compiler/codegen-tester.h
@@ -34,8 +34,10 @@ class RawMachineAssemblerTester : public HandleAndZoneScope,
                             p2, p3, p4)),
         RawMachineAssembler(
             main_isolate(), new (main_zone()) Graph(main_zone()),
- CSignature::New(main_zone(), MachineTypeForC<ReturnType>(), p0, p1,
-                            p2, p3, p4),
+            Linkage::GetSimplifiedCDescriptor(
+                main_zone(),
+ CSignature::New(main_zone(), MachineTypeForC<ReturnType>(), p0,
+                                p1, p2, p3, p4)),
kMachPtr, InstructionSelector::SupportedMachineOperatorFlags()) {}

   void CheckNumber(double expected, Object* number) {
Index: test/cctest/compiler/instruction-selector-tester.h
diff --git a/test/cctest/compiler/instruction-selector-tester.h b/test/cctest/compiler/instruction-selector-tester.h index 3a28b2e5dfaf0553f859618bce082c360eb707bc..6b094b1c1da8a3094d55daec6f452624513620a3 100644
--- a/test/cctest/compiler/instruction-selector-tester.h
+++ b/test/cctest/compiler/instruction-selector-tester.h
@@ -27,20 +27,23 @@ class InstructionSelectorTester : public HandleAndZoneScope,
   enum Mode { kTargetMode, kInternalMode };

   static const int kParameterCount = 3;
-  static MachineType* BuildParameterArray(Zone* zone) {
-    MachineType* array = zone->NewArray<MachineType>(kParameterCount);
+  static CallDescriptor* BuildCallDescriptor(Zone* zone) {
+ MachineType* parameter_array = zone->NewArray<MachineType>(kParameterCount);
     for (int i = 0; i < kParameterCount; ++i) {
       array[i] = kMachInt32;
     }
-    return array;
+    return Linkage::GetSimplifiedCDescriptor(
+        graph->zone(),
+ new (zone) MachineCallDescriptorBuilder(kMachInt32, kParameterCount,
+                                                parameter_array));
   }

   InstructionSelectorTester()
       : RawMachineAssembler(
             new (main_zone()) Graph(main_zone()),
-            new (main_zone()) MachineCallDescriptorBuilder(
- kMachInt32, kParameterCount, BuildParameterArray(main_zone())),
-            kMachPtr) {}
+            BuildCallDescriptor(main_zone()),
+            kMachPtr,
+            machine_sig)) {}

   void SelectInstructions(CpuFeature feature) {
     SelectInstructions(InstructionSelector::Features(feature));
Index: test/unittests/compiler/instruction-selector-unittest.h
diff --git a/test/unittests/compiler/instruction-selector-unittest.h b/test/unittests/compiler/instruction-selector-unittest.h index 15d3b2005f60a578f43c6ba4e8f78976f56af1b4..574864edf5ea3b25c2cd12f4be339c5c800dd87f 100644
--- a/test/unittests/compiler/instruction-selector-unittest.h
+++ b/test/unittests/compiler/instruction-selector-unittest.h
@@ -39,22 +39,22 @@ class InstructionSelectorTest : public TestWithContext,
     StreamBuilder(InstructionSelectorTest* test, MachineType return_type)
         : RawMachineAssembler(
               test->isolate(), new (test->zone()) Graph(test->zone()),
-              MakeMachineSignature(test->zone(), return_type), kMachPtr,
+              MakeCallDescriptor(test->zone(), return_type), kMachPtr,
               MachineOperatorBuilder::kAllOptionalOps),
           test_(test) {}
     StreamBuilder(InstructionSelectorTest* test, MachineType return_type,
                   MachineType parameter0_type)
         : RawMachineAssembler(
               test->isolate(), new (test->zone()) Graph(test->zone()),
- MakeMachineSignature(test->zone(), return_type, parameter0_type), + MakeCallDescriptor(test->zone(), return_type, parameter0_type),
               kMachPtr, MachineOperatorBuilder::kAllOptionalOps),
           test_(test) {}
     StreamBuilder(InstructionSelectorTest* test, MachineType return_type,
                   MachineType parameter0_type, MachineType parameter1_type)
         : RawMachineAssembler(
               test->isolate(), new (test->zone()) Graph(test->zone()),
- MakeMachineSignature(test->zone(), return_type, parameter0_type,
-                                   parameter1_type),
+ MakeCallDescriptor(test->zone(), return_type, parameter0_type,
+                                 parameter1_type),
               kMachPtr, MachineOperatorBuilder::kAllOptionalOps),
           test_(test) {}
     StreamBuilder(InstructionSelectorTest* test, MachineType return_type,
@@ -62,8 +62,8 @@ class InstructionSelectorTest : public TestWithContext,
                   MachineType parameter2_type)
         : RawMachineAssembler(
               test->isolate(), new (test->zone()) Graph(test->zone()),
- MakeMachineSignature(test->zone(), return_type, parameter0_type,
-                                   parameter1_type, parameter2_type),
+ MakeCallDescriptor(test->zone(), return_type, parameter0_type,
+                                 parameter1_type, parameter2_type),
               kMachPtr, MachineOperatorBuilder::kAllOptionalOps),
           test_(test) {}

@@ -85,41 +85,40 @@ class InstructionSelectorTest : public TestWithContext,
int local_count);

    private:
-    MachineSignature* MakeMachineSignature(Zone* zone,
-                                           MachineType return_type) {
+ CallDescriptor* MakeCallDescriptor(Zone* zone, MachineType return_type) {
       MachineSignature::Builder builder(zone, 1, 0);
       builder.AddReturn(return_type);
-      return builder.Build();
+      return Linkage::GetSimplifiedCDescriptor(zone, builder.Build());
     }

- MachineSignature* MakeMachineSignature(Zone* zone, MachineType return_type,
-                                           MachineType parameter0_type) {
+    CallDescriptor* MakeCallDescriptor(Zone* zone, MachineType return_type,
+                                       MachineType parameter0_type) {
       MachineSignature::Builder builder(zone, 1, 1);
       builder.AddReturn(return_type);
       builder.AddParam(parameter0_type);
-      return builder.Build();
+      return Linkage::GetSimplifiedCDescriptor(zone, builder.Build());
     }

- MachineSignature* MakeMachineSignature(Zone* zone, MachineType return_type,
-                                           MachineType parameter0_type,
-                                           MachineType parameter1_type) {
+    CallDescriptor* MakeCallDescriptor(Zone* zone, MachineType return_type,
+                                       MachineType parameter0_type,
+                                       MachineType parameter1_type) {
       MachineSignature::Builder builder(zone, 1, 2);
       builder.AddReturn(return_type);
       builder.AddParam(parameter0_type);
       builder.AddParam(parameter1_type);
-      return builder.Build();
+      return Linkage::GetSimplifiedCDescriptor(zone, builder.Build());
     }

- MachineSignature* MakeMachineSignature(Zone* zone, MachineType return_type,
-                                           MachineType parameter0_type,
-                                           MachineType parameter1_type,
-                                           MachineType parameter2_type) {
+    CallDescriptor* MakeCallDescriptor(Zone* zone, MachineType return_type,
+                                       MachineType parameter0_type,
+                                       MachineType parameter1_type,
+                                       MachineType parameter2_type) {
       MachineSignature::Builder builder(zone, 1, 3);
       builder.AddReturn(return_type);
       builder.AddParam(parameter0_type);
       builder.AddParam(parameter1_type);
       builder.AddParam(parameter2_type);
-      return builder.Build();
+      return Linkage::GetSimplifiedCDescriptor(zone, builder.Build());
     }

    private:


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to