comparison src/share/vm/opto/matcher.cpp @ 163:885ed790ecf0

6695810: null oop passed to encode_heap_oop_not_null Summary: fix several problems in C2 related to Escape Analysis and Compressed Oops. Reviewed-by: never, jrose
author kvn
date Wed, 21 May 2008 10:45:07 -0700
parents ba764ed4b6f2
children c436414a719e
comparison
equal deleted inserted replaced
162:8aa010f60e0f 163:885ed790ecf0
878 // Monitor boxes are also represented directly. 878 // Monitor boxes are also represented directly.
879 for (i = cnt - 1; i >= debug_cnt; --i) { // For all debug inputs do 879 for (i = cnt - 1; i >= debug_cnt; --i) { // For all debug inputs do
880 Node *m = n->in(i); // Get input 880 Node *m = n->in(i); // Get input
881 int op = m->Opcode(); 881 int op = m->Opcode();
882 assert((op == Op_BoxLock) == jvms->is_monitor_use(i), "boxes only at monitor sites"); 882 assert((op == Op_BoxLock) == jvms->is_monitor_use(i), "boxes only at monitor sites");
883 if( op == Op_ConI || op == Op_ConP || 883 if( op == Op_ConI || op == Op_ConP || op == Op_ConN ||
884 op == Op_ConF || op == Op_ConD || op == Op_ConL 884 op == Op_ConF || op == Op_ConD || op == Op_ConL
885 // || op == Op_BoxLock // %%%% enable this and remove (+++) in chaitin.cpp 885 // || op == Op_BoxLock // %%%% enable this and remove (+++) in chaitin.cpp
886 ) { 886 ) {
887 m = m->clone(); 887 m = m->clone();
888 mstack.push(m, Post_Visit, n, i); // Don't neet to visit 888 mstack.push(m, Post_Visit, n, i); // Don't neet to visit
1721 case Op_ConP: { // Convert pointers above the centerline to NUL 1721 case Op_ConP: { // Convert pointers above the centerline to NUL
1722 TypeNode *tn = n->as_Type(); // Constants derive from type nodes 1722 TypeNode *tn = n->as_Type(); // Constants derive from type nodes
1723 const TypePtr* tp = tn->type()->is_ptr(); 1723 const TypePtr* tp = tn->type()->is_ptr();
1724 if (tp->_ptr == TypePtr::AnyNull) { 1724 if (tp->_ptr == TypePtr::AnyNull) {
1725 tn->set_type(TypePtr::NULL_PTR); 1725 tn->set_type(TypePtr::NULL_PTR);
1726 }
1727 break;
1728 }
1729 case Op_ConN: { // Convert narrow pointers above the centerline to NUL
1730 TypeNode *tn = n->as_Type(); // Constants derive from type nodes
1731 const TypePtr* tp = tn->type()->is_narrowoop()->make_oopptr();
1732 if (tp->_ptr == TypePtr::AnyNull) {
1733 tn->set_type(TypeNarrowOop::NULL_PTR);
1726 } 1734 }
1727 break; 1735 break;
1728 } 1736 }
1729 case Op_Binary: // These are introduced in the Post_Visit state. 1737 case Op_Binary: // These are introduced in the Post_Visit state.
1730 ShouldNotReachHere(); 1738 ShouldNotReachHere();