# HG changeset patch # User goetz # Date 1412021010 14400 # Node ID 253efabfd9683e46bd43607f002cc07248c416e5 # Parent 781be83089fb4d4a675d8298f5264cf6e934eeb0 8058880: Introduce identifier TEMP_DEF for effects in adl. Summary: Modified adlc sources. Reviewed-by: kvn, drchase diff -r 781be83089fb -r 253efabfd968 hotspot/src/share/vm/adlc/archDesc.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); } diff -r 781be83089fb -r 253efabfd968 hotspot/src/share/vm/adlc/formssel.cpp --- 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"); diff -r 781be83089fb -r 253efabfd968 hotspot/src/share/vm/adlc/formssel.hpp --- 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 }; }; diff -r 781be83089fb -r 253efabfd968 hotspot/src/share/vm/adlc/output_c.cpp --- 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);