8058880: Introduce identifier TEMP_DEF for effects in adl.
authorgoetz
Mon, 29 Sep 2014 16:03:30 -0400
changeset 26910 253efabfd968
parent 26854 781be83089fb
child 26920 f5d04f448585
8058880: Introduce identifier TEMP_DEF for effects in adl. Summary: Modified adlc sources. Reviewed-by: kvn, drchase
hotspot/src/share/vm/adlc/archDesc.cpp
hotspot/src/share/vm/adlc/formssel.cpp
hotspot/src/share/vm/adlc/formssel.hpp
hotspot/src/share/vm/adlc/output_c.cpp
--- a/hotspot/src/share/vm/adlc/archDesc.cpp	Fri Sep 26 01:40:31 2014 -0700
+++ b/hotspot/src/share/vm/adlc/archDesc.cpp	Mon Sep 29 16:03:30 2014 -0400
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+// Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
 // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 //
 // This code is free software; you can redistribute it and/or modify it
@@ -969,23 +969,22 @@
 void ArchDesc::initBaseOpTypes() {
   // Create OperandForm and assign type for each opcode.
   for (int i = 1; i < _last_machine_leaf; ++i) {
-    char        *ident   = (char *)NodeClassNames[i];
+    char *ident = (char *)NodeClassNames[i];
     constructOperand(ident, true);
   }
   // Create InstructForm and assign type for each ideal instruction.
-  for ( int j = _last_machine_leaf+1; j < _last_opcode; ++j) {
-    char         *ident    = (char *)NodeClassNames[j];
-    if(!strcmp(ident, "ConI") || !strcmp(ident, "ConP") ||
-       !strcmp(ident, "ConN") || !strcmp(ident, "ConNKlass") ||
-       !strcmp(ident, "ConF") || !strcmp(ident, "ConD") ||
-       !strcmp(ident, "ConL") || !strcmp(ident, "Con" ) ||
-       !strcmp(ident, "Bool") ) {
+  for (int j = _last_machine_leaf+1; j < _last_opcode; ++j) {
+    char *ident = (char *)NodeClassNames[j];
+    if (!strcmp(ident, "ConI") || !strcmp(ident, "ConP") ||
+        !strcmp(ident, "ConN") || !strcmp(ident, "ConNKlass") ||
+        !strcmp(ident, "ConF") || !strcmp(ident, "ConD") ||
+        !strcmp(ident, "ConL") || !strcmp(ident, "Con" ) ||
+        !strcmp(ident, "Bool")) {
       constructOperand(ident, true);
-    }
-    else {
-      InstructForm *insForm  = new InstructForm(ident, true);
-      // insForm->_opcode       = nextUserOpType(ident);
-      _globalNames.Insert(ident,insForm);
+    } else {
+      InstructForm *insForm = new InstructForm(ident, true);
+      // insForm->_opcode = nextUserOpType(ident);
+      _globalNames.Insert(ident, insForm);
       addForm(insForm);
     }
   }
@@ -1038,6 +1037,9 @@
     ident = "TEMP";
     eForm = new Effect(ident);
     _globalNames.Insert(ident, eForm);
+    ident = "TEMP_DEF";
+    eForm = new Effect(ident);
+    _globalNames.Insert(ident, eForm);
     ident = "CALL";
     eForm = new Effect(ident);
     _globalNames.Insert(ident, eForm);
@@ -1050,8 +1052,8 @@
     const char *idealName = NodeClassNames[idealIndex];
     _idealIndex.Insert((void*) idealName, (void*) (intptr_t) idealIndex);
   }
-  for ( idealIndex = _last_machine_leaf+1;
-        idealIndex < _last_opcode; ++idealIndex) {
+  for (idealIndex = _last_machine_leaf+1;
+       idealIndex < _last_opcode; ++idealIndex) {
     const char *idealName = NodeClassNames[idealIndex];
     _idealIndex.Insert((void*) idealName, (void*) (intptr_t) idealIndex);
   }
--- a/hotspot/src/share/vm/adlc/formssel.cpp	Fri Sep 26 01:40:31 2014 -0700
+++ b/hotspot/src/share/vm/adlc/formssel.cpp	Mon Sep 29 16:03:30 2014 -0400
@@ -1816,15 +1816,16 @@
 
 //------------------------------Effect-----------------------------------------
 static int effect_lookup(const char *name) {
-  if(!strcmp(name, "USE")) return Component::USE;
-  if(!strcmp(name, "DEF")) return Component::DEF;
-  if(!strcmp(name, "USE_DEF")) return Component::USE_DEF;
-  if(!strcmp(name, "KILL")) return Component::KILL;
-  if(!strcmp(name, "USE_KILL")) return Component::USE_KILL;
-  if(!strcmp(name, "TEMP")) return Component::TEMP;
-  if(!strcmp(name, "INVALID")) return Component::INVALID;
-  if(!strcmp(name, "CALL")) return Component::CALL;
-  assert( false,"Invalid effect name specified\n");
+  if (!strcmp(name, "USE")) return Component::USE;
+  if (!strcmp(name, "DEF")) return Component::DEF;
+  if (!strcmp(name, "USE_DEF")) return Component::USE_DEF;
+  if (!strcmp(name, "KILL")) return Component::KILL;
+  if (!strcmp(name, "USE_KILL")) return Component::USE_KILL;
+  if (!strcmp(name, "TEMP")) return Component::TEMP;
+  if (!strcmp(name, "TEMP_DEF")) return Component::TEMP_DEF;
+  if (!strcmp(name, "INVALID")) return Component::INVALID;
+  if (!strcmp(name, "CALL")) return Component::CALL;
+  assert(false,"Invalid effect name specified\n");
   return Component::INVALID;
 }
 
@@ -1836,6 +1837,7 @@
     case Component::USE_KILL: return "USE_KILL"; break;
     case Component::KILL:     return "KILL";     break;
     case Component::TEMP:     return "TEMP";     break;
+    case Component::TEMP_DEF: return "TEMP_DEF"; break;
     case Component::DEF:      return "DEF";      break;
     case Component::CALL:     return "CALL";     break;
     default: assert(false, "unknown effect");
--- a/hotspot/src/share/vm/adlc/formssel.hpp	Fri Sep 26 01:40:31 2014 -0700
+++ b/hotspot/src/share/vm/adlc/formssel.hpp	Mon Sep 29 16:03:30 2014 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -910,13 +910,16 @@
 public:
   // Implementation depends upon working bit intersection and union.
   enum use_def_enum {
-    INVALID = 0x0,
-    USE     = 0x1,
-    DEF     = 0x2, USE_DEF   = 0x3,
-    KILL    = 0x4, USE_KILL  = 0x5,
+    INVALID   = 0x0,
+    USE       = 0x1,
+    DEF       = 0x2,
+    USE_DEF   = USE | DEF,
+    KILL      = 0x4,
+    USE_KILL  = USE | KILL,
     SYNTHETIC = 0x8,
-    TEMP = USE | SYNTHETIC,
-    CALL = 0x10
+    TEMP      = USE | SYNTHETIC,
+    TEMP_DEF  = TEMP | DEF,
+    CALL      = 0x10
   };
 };
 
--- a/hotspot/src/share/vm/adlc/output_c.cpp	Fri Sep 26 01:40:31 2014 -0700
+++ b/hotspot/src/share/vm/adlc/output_c.cpp	Mon Sep 29 16:03:30 2014 -0400
@@ -1715,13 +1715,14 @@
     bool declared_def  = false;
     bool declared_kill = false;
 
-    while( (comp = node->_components.iter()) != NULL ) {
+    while ((comp = node->_components.iter()) != NULL) {
       // Lookup register class associated with operand type
-      Form        *form = (Form*)_globalNames[comp->_type];
-      assert( form, "component type must be a defined form");
-      OperandForm *op   = form->is_operand();
-
-      if (comp->is(Component::TEMP)) {
+      Form *form = (Form*)_globalNames[comp->_type];
+      assert(form, "component type must be a defined form");
+      OperandForm *op = form->is_operand();
+
+      if (comp->is(Component::TEMP) ||
+          comp->is(Component::TEMP_DEF)) {
         fprintf(fp, "  // TEMP %s\n", comp->_name);
         if (!declared_def) {
           // Define the variable "def" to hold new MachProjNodes
@@ -1750,7 +1751,7 @@
           declared_kill = true;
         }
 
-        assert( op, "Support additional KILLS for base operands");
+        assert(op, "Support additional KILLS for base operands");
         const char *regmask    = reg_mask(*op);
         const char *ideal_type = op->ideal_type(_globalNames, _register);