< prev index next >

src/hotspot/share/opto/parse.hpp

Print this page
@@ -443,11 +443,11 @@
   private:
    // Create a JVMS & map for the initial state of this method.
    SafePointNode* create_entry_map();
  
    // OSR helpers
-   Node *fetch_interpreter_state(int index, BasicType bt, Node *local_addrs, Node *local_addrs_base);
+   Node* fetch_interpreter_state(int index, const Type* type, Node* local_addrs, Node* local_addrs_base);
    Node* check_interpreter_type(Node* l, const Type* type, SafePointNode* &bad_type_exit);
    void  load_interpreter_state(Node* osr_buf);
  
    // Functions for managing basic blocks:
    void init_blocks();

@@ -489,17 +489,25 @@
  
    // Parse this bytecode, and alter the Parsers JVM->Node mapping
    void do_one_bytecode();
  
    // helper function to generate array store check
-   void array_store_check();
+   Node* array_store_check(Node*& adr, const Type*& elemtype);
    // Helper function to generate array load
    void array_load(BasicType etype);
    // Helper function to generate array store
    void array_store(BasicType etype);
    // Helper function to compute array addressing
    Node* array_addressing(BasicType type, int vals, const Type*& elemtype);
+   bool needs_range_check(const TypeInt* size_type, const Node* index) const;
+   Node* create_speculative_inline_type_array_checks(Node* array, const TypeAryPtr* array_type, const Type*& element_type);
+   Node* cast_to_speculative_array_type(Node* array, const TypeAryPtr*& array_type, const Type*& element_type);
+   Node* cast_to_profiled_array_type(Node* const array);
+   Node* speculate_non_null_free_array(Node* array, const TypeAryPtr*& array_type);
+   Node* speculate_non_flat_array(Node* array, const TypeAryPtr* array_type);
+   void create_range_check(Node* idx, Node* ary, const TypeInt* sizetype);
+   Node* record_profile_for_speculation_at_array_load(Node* ld);
  
    void clinit_deopt();
  
    // Pass current map to exits
    void return_current(Node* value);

@@ -542,17 +550,20 @@
  
    // common code for making initial checks and forming addresses
    void do_field_access(bool is_get, bool is_field);
  
    // common code for actually performing the load or store
-   void do_get_xxx(Node* obj, ciField* field, bool is_field);
+   void do_get_xxx(Node* obj, ciField* field);
    void do_put_xxx(Node* obj, ciField* field, bool is_field);
+   void set_inline_type_field(Node* obj, ciField* field, Node* val);
+ 
+   ciType* improve_abstract_inline_type_klass(ciType* field_klass);
  
    // implementation of object creation bytecodes
    void do_new();
    void do_newarray(BasicType elemtype);
-   void do_anewarray();
+   void do_newarray();
    void do_multianewarray();
    Node* expand_multianewarray(ciArrayKlass* array_klass, Node* *lengths, int ndimensions, int nargs);
  
    // implementation of jsr/ret
    void do_jsr();

@@ -562,13 +573,18 @@
    float   branch_prediction(float &cnt, BoolTest::mask btest, int target_bci, Node* test);
    bool    seems_never_taken(float prob) const;
    bool    path_is_suitable_for_uncommon_trap(float prob) const;
  
    void    do_ifnull(BoolTest::mask btest, Node* c);
-   void    do_if(BoolTest::mask btest, Node* c);
+   void    do_if(BoolTest::mask btest, Node* c, bool can_trap = true, bool new_path = false, Node** ctrl_taken = nullptr);
+   void    do_acmp(BoolTest::mask btest, Node* left, Node* right);
+   void    acmp_always_null_input(Node* input, const TypeOopPtr* tinput, BoolTest::mask btest, Node* eq_region);
+   void    acmp_known_non_inline_type_input(Node* input, const TypeOopPtr* tinput, ProfilePtrKind input_ptr, ciKlass* input_type, BoolTest::mask btest, Node* eq_region);
+   Node*   acmp_null_check(Node* input, const TypeOopPtr* tinput, ProfilePtrKind input_ptr, Node*& null_ctl);
+   void    acmp_unknown_non_inline_type_input(Node* input, const TypeOopPtr* tinput, ProfilePtrKind input_ptr, BoolTest::mask btest, Node* eq_region);
    int     repush_if_args();
-   void    adjust_map_after_if(BoolTest::mask btest, Node* c, float prob, Block* path);
+   void    adjust_map_after_if(BoolTest::mask btest, Node* c, float prob, Block* path, bool can_trap = true);
    void    sharpen_type_after_if(BoolTest::mask btest,
                                  Node* con, const Type* tcon,
                                  Node* val, const Type* tval);
    void    maybe_add_predicate_after_if(Block* path);
    IfNode* jump_if_fork_int(Node* a, Node* b, BoolTest::mask mask, float prob, float cnt);
< prev index next >