Mercurial > hg > graal-jvmci-8
diff src/share/vm/adlc/output_h.cpp @ 6848:8e47bac5643a
7054512: Compress class pointers after perm gen removal
Summary: support of compress class pointers in the compilers.
Reviewed-by: kvn, twisti
author | roland |
---|---|
date | Tue, 09 Oct 2012 10:11:38 +0200 |
parents | da91efe96a93 |
children | d336b3173277 |
line wrap: on
line diff
--- a/src/share/vm/adlc/output_h.cpp Mon Oct 08 17:04:00 2012 -0700 +++ b/src/share/vm/adlc/output_h.cpp Tue Oct 09 10:11:38 2012 +0200 @@ -207,6 +207,10 @@ if (i > 0) fprintf(fp,", "); fprintf(fp," const TypeNarrowOop *_c%d;\n", i); } + else if (!strcmp(type, "ConNKlass")) { + if (i > 0) fprintf(fp,", "); + fprintf(fp," const TypeNarrowKlass *_c%d;\n", i); + } else if (!strcmp(type, "ConL")) { if (i > 0) fprintf(fp,", "); fprintf(fp," jlong _c%d;\n", i); @@ -243,6 +247,10 @@ fprintf(fp," const TypePtr *_c%d;\n", i); i++; } + else if (!strcmp(comp->base_type(globals), "ConNKlass")) { + fprintf(fp," const TypePtr *_c%d;\n", i); + i++; + } else if (!strcmp(comp->base_type(globals), "ConL")) { fprintf(fp," jlong _c%d;\n", i); i++; @@ -288,11 +296,12 @@ fprintf(fp,is_ideal_bool ? "BoolTest::mask c%d" : "int32 c%d", i); break; } - case Form::idealN : { fprintf(fp,"const TypeNarrowOop *c%d", i); break; } - case Form::idealP : { fprintf(fp,"const TypePtr *c%d", i); break; } - case Form::idealL : { fprintf(fp,"jlong c%d", i); break; } - case Form::idealF : { fprintf(fp,"jfloat c%d", i); break; } - case Form::idealD : { fprintf(fp,"jdouble c%d", i); break; } + case Form::idealN : { fprintf(fp,"const TypeNarrowOop *c%d", i); break; } + case Form::idealNKlass : { fprintf(fp,"const TypeNarrowKlass *c%d", i); break; } + case Form::idealP : { fprintf(fp,"const TypePtr *c%d", i); break; } + case Form::idealL : { fprintf(fp,"jlong c%d", i); break; } + case Form::idealF : { fprintf(fp,"jfloat c%d", i); break; } + case Form::idealD : { fprintf(fp,"jdouble c%d", i); break; } default: assert(!is_ideal_bool, "Non-constant operand lacks component list."); break; @@ -316,6 +325,11 @@ fprintf(fp,"const TypePtr *c%d", i); i++; } + else if (!strcmp(comp->base_type(globals), "ConNKlass")) { + if (i > 0) fprintf(fp,", "); + fprintf(fp,"const TypePtr *c%d", i); + i++; + } else if (!strcmp(comp->base_type(globals), "ConL")) { if (i > 0) fprintf(fp,", "); fprintf(fp,"jlong c%d", i); @@ -380,6 +394,10 @@ fprintf(fp," _c%d->dump_on(st);\n", i); ++i; } + else if (!strcmp(ideal_type, "ConNKlass")) { + fprintf(fp," _c%d->dump_on(st);\n", i); + ++i; + } else if (!strcmp(ideal_type, "ConL")) { fprintf(fp," st->print(\"#\" INT64_FORMAT, _c%d);\n", i); ++i; @@ -1239,7 +1257,7 @@ if( type != NULL ) { Form::DataType data_type = oper->is_base_constant(_globalNames); // Check if we are an ideal pointer type - if( data_type == Form::idealP || data_type == Form::idealN ) { + if( data_type == Form::idealP || data_type == Form::idealN || data_type == Form::idealNKlass ) { // Return the ideal type we already have: <TypePtr *> fprintf(fp," return _c0;"); } else { @@ -1377,6 +1395,16 @@ fprintf(fp, " return _c0->get_ptrtype()->reloc();"); fprintf(fp, " }\n"); } + else if (!strcmp(oper->ideal_type(_globalNames), "ConNKlass")) { + // Access the locally stored constant + fprintf(fp," virtual intptr_t constant() const {"); + fprintf(fp, " return _c0->get_ptrtype()->get_con();"); + fprintf(fp, " }\n"); + // Generate query to determine if this pointer is an oop + fprintf(fp," virtual relocInfo::relocType constant_reloc() const {"); + fprintf(fp, " return _c0->get_ptrtype()->reloc();"); + fprintf(fp, " }\n"); + } else if (!strcmp(oper->ideal_type(_globalNames), "ConL")) { fprintf(fp," virtual intptr_t constant() const {"); // We don't support addressing modes with > 4Gig offsets. @@ -1810,6 +1838,7 @@ break; case Form::idealP: case Form::idealN: + case Form::idealNKlass: fprintf(fp," return opnd_array(1)->type();\n"); break; case Form::idealD: