< prev index next >

src/hotspot/share/opto/parse2.cpp

Print this page




  41 #include "opto/mulnode.hpp"
  42 #include "opto/opaquenode.hpp"
  43 #include "opto/parse.hpp"
  44 #include "opto/runtime.hpp"
  45 #include "runtime/deoptimization.hpp"
  46 #include "runtime/sharedRuntime.hpp"
  47 
  48 #ifndef PRODUCT
  49 extern int explicit_null_checks_inserted,
  50            explicit_null_checks_elided;
  51 #endif
  52 
  53 //---------------------------------array_load----------------------------------
  54 void Parse::array_load(BasicType elem_type) {
  55   const Type* elem = Type::TOP;
  56   Node* adr = array_addressing(elem_type, 0, &elem);
  57   if (stopped())  return;     // guaranteed null or range check
  58   dec_sp(2);                  // Pop array and index
  59   const TypeAryPtr* adr_type = TypeAryPtr::get_array_body_type(elem_type);
  60   Node* ld = make_load(control(), adr, elem, elem_type, adr_type, MemNode::unordered);
  61   if (UseLoadBarrier && elem_type == T_OBJECT) {
  62     ld = load_barrier(ld, adr);
  63   }
  64   push(ld);
  65 }
  66 
  67 
  68 //--------------------------------array_store----------------------------------
  69 void Parse::array_store(BasicType elem_type) {
  70   const Type* elem = Type::TOP;
  71   Node* adr = array_addressing(elem_type, 1, &elem);
  72   if (stopped())  return;     // guaranteed null or range check
  73   Node* val = pop();
  74   dec_sp(2);                  // Pop array and index
  75   const TypeAryPtr* adr_type = TypeAryPtr::get_array_body_type(elem_type);
  76   if (elem == TypeInt::BOOL) {
  77     elem_type = T_BOOLEAN;
  78   }
  79   store_to_memory(control(), adr, val, elem_type, adr_type, StoreNode::release_if_reference(elem_type));
  80 }
  81 




  41 #include "opto/mulnode.hpp"
  42 #include "opto/opaquenode.hpp"
  43 #include "opto/parse.hpp"
  44 #include "opto/runtime.hpp"
  45 #include "runtime/deoptimization.hpp"
  46 #include "runtime/sharedRuntime.hpp"
  47 
  48 #ifndef PRODUCT
  49 extern int explicit_null_checks_inserted,
  50            explicit_null_checks_elided;
  51 #endif
  52 
  53 //---------------------------------array_load----------------------------------
  54 void Parse::array_load(BasicType elem_type) {
  55   const Type* elem = Type::TOP;
  56   Node* adr = array_addressing(elem_type, 0, &elem);
  57   if (stopped())  return;     // guaranteed null or range check
  58   dec_sp(2);                  // Pop array and index
  59   const TypeAryPtr* adr_type = TypeAryPtr::get_array_body_type(elem_type);
  60   Node* ld = make_load(control(), adr, elem, elem_type, adr_type, MemNode::unordered);
  61   if (UseZGC && elem_type == T_OBJECT) {
  62     ld = load_barrier(ld, adr);
  63   }
  64   push(ld);
  65 }
  66 
  67 
  68 //--------------------------------array_store----------------------------------
  69 void Parse::array_store(BasicType elem_type) {
  70   const Type* elem = Type::TOP;
  71   Node* adr = array_addressing(elem_type, 1, &elem);
  72   if (stopped())  return;     // guaranteed null or range check
  73   Node* val = pop();
  74   dec_sp(2);                  // Pop array and index
  75   const TypeAryPtr* adr_type = TypeAryPtr::get_array_body_type(elem_type);
  76   if (elem == TypeInt::BOOL) {
  77     elem_type = T_BOOLEAN;
  78   }
  79   store_to_memory(control(), adr, val, elem_type, adr_type, StoreNode::release_if_reference(elem_type));
  80 }
  81 


< prev index next >