aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/opto/buildOopMap.cpp
diff options
context:
space:
mode:
authorcoleenp <none@none>2008-04-13 17:43:42 -0400
committercoleenp <none@none>2008-04-13 17:43:42 -0400
commit8dc3eb94be5546c0d912a2973322aa4c75f4ca16 (patch)
tree3ef8c64ec2efcfbeec6e46f6a3775a60c122e5df /src/share/vm/opto/buildOopMap.cpp
parent490af03e05e08d9e13e7135cce32cb5b31110834 (diff)
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
Diffstat (limited to 'src/share/vm/opto/buildOopMap.cpp')
-rw-r--r--src/share/vm/opto/buildOopMap.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/share/vm/opto/buildOopMap.cpp b/src/share/vm/opto/buildOopMap.cpp
index 2116c404d..8d3adc78d 100644
--- a/src/share/vm/opto/buildOopMap.cpp
+++ b/src/share/vm/opto/buildOopMap.cpp
@@ -315,6 +315,26 @@ OopMap *OopFlow::build_oop_map( Node *n, int max_reg, PhaseRegAlloc *regalloc, i
}
}
+ } else if( t->isa_narrowoop() ) {
+ assert( !OptoReg::is_valid(_callees[reg]), "oop can't be callee save" );
+ // Check for a legal reg name in the oopMap and bailout if it is not.
+ if (!omap->legal_vm_reg_name(r)) {
+ regalloc->C->record_method_not_compilable("illegal oopMap register name");
+ continue;
+ }
+ if( mcall ) {
+ // Outgoing argument GC mask responsibility belongs to the callee,
+ // not the caller. Inspect the inputs to the call, to see if
+ // this live-range is one of them.
+ uint cnt = mcall->tf()->domain()->cnt();
+ uint j;
+ for( j = TypeFunc::Parms; j < cnt; j++)
+ if( mcall->in(j) == def )
+ break; // reaching def is an argument oop
+ if( j < cnt ) // arg oops dont go in GC map
+ continue; // Continue on to the next register
+ }
+ omap->set_narrowoop(r);
} else if( OptoReg::is_valid(_callees[reg])) { // callee-save?
// It's a callee-save value
assert( dup_check[_callees[reg]]==0, "trying to callee save same reg twice" );