8058880: Introduce identifier TEMP_DEF for effects in adl.
Summary: Modified adlc sources.
Reviewed-by: kvn, drchase
--- 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);