< prev index next >

src/hotspot/share/opto/library_call.cpp

Print this page




2634                                                       //   (i.e., larger than the maximum offset necessary for any
2635                                                       //   field access)
2636             ) {
2637           IdealKit ideal = IdealKit(this);
2638 #define __ ideal.
2639           IdealVariable normalized_result(ideal);
2640           __ declarations_done();
2641           __ set(normalized_result, p);
2642           __ if_then(p, BoolTest::ne, ideal.ConI(0));
2643           __ set(normalized_result, ideal.ConI(1));
2644           ideal.end_if();
2645           final_sync(ideal);
2646           p = __ value(normalized_result);
2647 #undef __
2648       }
2649     }
2650     if (type == T_ADDRESS) {
2651       p = gvn().transform(new CastP2XNode(NULL, p));
2652       p = ConvX2UL(p);
2653     }
2654     if (field != NULL && field->is_flattenable()&& !field->is_flattened()) {
2655       // Load a non-flattened but flattenable value type from memory
2656       if (value_type->value_klass()->is_scalarizable()) {
2657         p = ValueTypeNode::make_from_oop(this, p, value_type->value_klass());
2658       } else {
2659         p = null2default(p, value_type->value_klass());
2660       }
2661     }
2662     // The load node has the control of the preceding MemBarCPUOrder.  All
2663     // following nodes will have the control of the MemBarCPUOrder inserted at
2664     // the end of this method.  So, pushing the load onto the stack at a later
2665     // point is fine.
2666     set_result(p);
2667   } else {
2668     if (bt == T_ADDRESS) {
2669       // Repackage the long as a pointer.
2670       val = ConvL2X(val);
2671       val = gvn().transform(new CastX2PNode(val));
2672     }
2673     if (type == T_VALUETYPE) {
2674       if (adr_type->isa_instptr() && !mismatched) {




2634                                                       //   (i.e., larger than the maximum offset necessary for any
2635                                                       //   field access)
2636             ) {
2637           IdealKit ideal = IdealKit(this);
2638 #define __ ideal.
2639           IdealVariable normalized_result(ideal);
2640           __ declarations_done();
2641           __ set(normalized_result, p);
2642           __ if_then(p, BoolTest::ne, ideal.ConI(0));
2643           __ set(normalized_result, ideal.ConI(1));
2644           ideal.end_if();
2645           final_sync(ideal);
2646           p = __ value(normalized_result);
2647 #undef __
2648       }
2649     }
2650     if (type == T_ADDRESS) {
2651       p = gvn().transform(new CastP2XNode(NULL, p));
2652       p = ConvX2UL(p);
2653     }
2654     if (field != NULL && field->is_flattenable() && !field->is_flattened()) {
2655       // Load a non-flattened but flattenable value type from memory
2656       if (value_type->value_klass()->is_scalarizable()) {
2657         p = ValueTypeNode::make_from_oop(this, p, value_type->value_klass());
2658       } else {
2659         p = null2default(p, value_type->value_klass());
2660       }
2661     }
2662     // The load node has the control of the preceding MemBarCPUOrder.  All
2663     // following nodes will have the control of the MemBarCPUOrder inserted at
2664     // the end of this method.  So, pushing the load onto the stack at a later
2665     // point is fine.
2666     set_result(p);
2667   } else {
2668     if (bt == T_ADDRESS) {
2669       // Repackage the long as a pointer.
2670       val = ConvL2X(val);
2671       val = gvn().transform(new CastX2PNode(val));
2672     }
2673     if (type == T_VALUETYPE) {
2674       if (adr_type->isa_instptr() && !mismatched) {


< prev index next >