hotspot/src/share/vm/c1/c1_LIR.hpp
changeset 20702 bbe0fcde6e13
parent 19710 2f8ca425504e
child 24669 14439491d407
equal deleted inserted replaced
20701:ef9996662fd5 20702:bbe0fcde6e13
   880 class    LIR_OpUpdateCRC32;
   880 class    LIR_OpUpdateCRC32;
   881 class    LIR_OpLock;
   881 class    LIR_OpLock;
   882 class    LIR_OpTypeCheck;
   882 class    LIR_OpTypeCheck;
   883 class    LIR_OpCompareAndSwap;
   883 class    LIR_OpCompareAndSwap;
   884 class    LIR_OpProfileCall;
   884 class    LIR_OpProfileCall;
       
   885 class    LIR_OpProfileType;
   885 #ifdef ASSERT
   886 #ifdef ASSERT
   886 class    LIR_OpAssert;
   887 class    LIR_OpAssert;
   887 #endif
   888 #endif
   888 
   889 
   889 // LIR operation codes
   890 // LIR operation codes
  1003     , lir_cas_obj
  1004     , lir_cas_obj
  1004     , lir_cas_int
  1005     , lir_cas_int
  1005   , end_opCompareAndSwap
  1006   , end_opCompareAndSwap
  1006   , begin_opMDOProfile
  1007   , begin_opMDOProfile
  1007     , lir_profile_call
  1008     , lir_profile_call
       
  1009     , lir_profile_type
  1008   , end_opMDOProfile
  1010   , end_opMDOProfile
  1009   , begin_opAssert
  1011   , begin_opAssert
  1010     , lir_assert
  1012     , lir_assert
  1011   , end_opAssert
  1013   , end_opAssert
  1012 };
  1014 };
  1143   virtual LIR_OpArrayCopy* as_OpArrayCopy() { return NULL; }
  1145   virtual LIR_OpArrayCopy* as_OpArrayCopy() { return NULL; }
  1144   virtual LIR_OpUpdateCRC32* as_OpUpdateCRC32() { return NULL; }
  1146   virtual LIR_OpUpdateCRC32* as_OpUpdateCRC32() { return NULL; }
  1145   virtual LIR_OpTypeCheck* as_OpTypeCheck() { return NULL; }
  1147   virtual LIR_OpTypeCheck* as_OpTypeCheck() { return NULL; }
  1146   virtual LIR_OpCompareAndSwap* as_OpCompareAndSwap() { return NULL; }
  1148   virtual LIR_OpCompareAndSwap* as_OpCompareAndSwap() { return NULL; }
  1147   virtual LIR_OpProfileCall* as_OpProfileCall() { return NULL; }
  1149   virtual LIR_OpProfileCall* as_OpProfileCall() { return NULL; }
       
  1150   virtual LIR_OpProfileType* as_OpProfileType() { return NULL; }
  1148 #ifdef ASSERT
  1151 #ifdef ASSERT
  1149   virtual LIR_OpAssert* as_OpAssert() { return NULL; }
  1152   virtual LIR_OpAssert* as_OpAssert() { return NULL; }
  1150 #endif
  1153 #endif
  1151 
  1154 
  1152   virtual void verify() const {}
  1155   virtual void verify() const {}
  1923   LIR_Opr   _tmp1;
  1926   LIR_Opr   _tmp1;
  1924   ciKlass*  _known_holder;
  1927   ciKlass*  _known_holder;
  1925 
  1928 
  1926  public:
  1929  public:
  1927   // Destroys recv
  1930   // Destroys recv
  1928   LIR_OpProfileCall(LIR_Code code, ciMethod* profiled_method, int profiled_bci, ciMethod* profiled_callee, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* known_holder)
  1931   LIR_OpProfileCall(ciMethod* profiled_method, int profiled_bci, ciMethod* profiled_callee, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* known_holder)
  1929     : LIR_Op(code, LIR_OprFact::illegalOpr, NULL)  // no result, no info
  1932     : LIR_Op(lir_profile_call, LIR_OprFact::illegalOpr, NULL)  // no result, no info
  1930     , _profiled_method(profiled_method)
  1933     , _profiled_method(profiled_method)
  1931     , _profiled_bci(profiled_bci)
  1934     , _profiled_bci(profiled_bci)
  1932     , _profiled_callee(profiled_callee)
  1935     , _profiled_callee(profiled_callee)
  1933     , _mdo(mdo)
  1936     , _mdo(mdo)
  1934     , _recv(recv)
  1937     , _recv(recv)
  1943   LIR_Opr   tmp1()            const              { return _tmp1;             }
  1946   LIR_Opr   tmp1()            const              { return _tmp1;             }
  1944   ciKlass*  known_holder()    const              { return _known_holder;     }
  1947   ciKlass*  known_holder()    const              { return _known_holder;     }
  1945 
  1948 
  1946   virtual void emit_code(LIR_Assembler* masm);
  1949   virtual void emit_code(LIR_Assembler* masm);
  1947   virtual LIR_OpProfileCall* as_OpProfileCall() { return this; }
  1950   virtual LIR_OpProfileCall* as_OpProfileCall() { return this; }
       
  1951   virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
       
  1952 };
       
  1953 
       
  1954 // LIR_OpProfileType
       
  1955 class LIR_OpProfileType : public LIR_Op {
       
  1956  friend class LIR_OpVisitState;
       
  1957 
       
  1958  private:
       
  1959   LIR_Opr      _mdp;
       
  1960   LIR_Opr      _obj;
       
  1961   LIR_Opr      _tmp;
       
  1962   ciKlass*     _exact_klass;   // non NULL if we know the klass statically (no need to load it from _obj)
       
  1963   intptr_t     _current_klass; // what the profiling currently reports
       
  1964   bool         _not_null;      // true if we know statically that _obj cannot be null
       
  1965   bool         _no_conflict;   // true if we're profling parameters, _exact_klass is not NULL and we know
       
  1966                                // _exact_klass it the only possible type for this parameter in any context.
       
  1967 
       
  1968  public:
       
  1969   // Destroys recv
       
  1970   LIR_OpProfileType(LIR_Opr mdp, LIR_Opr obj, ciKlass* exact_klass, intptr_t current_klass, LIR_Opr tmp, bool not_null, bool no_conflict)
       
  1971     : LIR_Op(lir_profile_type, LIR_OprFact::illegalOpr, NULL)  // no result, no info
       
  1972     , _mdp(mdp)
       
  1973     , _obj(obj)
       
  1974     , _exact_klass(exact_klass)
       
  1975     , _current_klass(current_klass)
       
  1976     , _tmp(tmp)
       
  1977     , _not_null(not_null)
       
  1978     , _no_conflict(no_conflict) { }
       
  1979 
       
  1980   LIR_Opr      mdp()              const             { return _mdp;              }
       
  1981   LIR_Opr      obj()              const             { return _obj;              }
       
  1982   LIR_Opr      tmp()              const             { return _tmp;              }
       
  1983   ciKlass*     exact_klass()      const             { return _exact_klass;      }
       
  1984   intptr_t     current_klass()    const             { return _current_klass;    }
       
  1985   bool         not_null()         const             { return _not_null;         }
       
  1986   bool         no_conflict()      const             { return _no_conflict;      }
       
  1987 
       
  1988   virtual void emit_code(LIR_Assembler* masm);
       
  1989   virtual LIR_OpProfileType* as_OpProfileType() { return this; }
  1948   virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
  1990   virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
  1949 };
  1991 };
  1950 
  1992 
  1951 class LIR_InsertionBuffer;
  1993 class LIR_InsertionBuffer;
  1952 
  1994 
  2245                   LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check,
  2287                   LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check,
  2246                   CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub,
  2288                   CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub,
  2247                   ciMethod* profiled_method, int profiled_bci);
  2289                   ciMethod* profiled_method, int profiled_bci);
  2248   // MethodData* profiling
  2290   // MethodData* profiling
  2249   void profile_call(ciMethod* method, int bci, ciMethod* callee, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* cha_klass) {
  2291   void profile_call(ciMethod* method, int bci, ciMethod* callee, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* cha_klass) {
  2250     append(new LIR_OpProfileCall(lir_profile_call, method, bci, callee, mdo, recv, t1, cha_klass));
  2292     append(new LIR_OpProfileCall(method, bci, callee, mdo, recv, t1, cha_klass));
       
  2293   }
       
  2294   void profile_type(LIR_Address* mdp, LIR_Opr obj, ciKlass* exact_klass, intptr_t current_klass, LIR_Opr tmp, bool not_null, bool no_conflict) {
       
  2295     append(new LIR_OpProfileType(LIR_OprFact::address(mdp), obj, exact_klass, current_klass, tmp, not_null, no_conflict));
  2251   }
  2296   }
  2252 
  2297 
  2253   void xadd(LIR_Opr src, LIR_Opr add, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xadd, src, add, res, tmp)); }
  2298   void xadd(LIR_Opr src, LIR_Opr add, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xadd, src, add, res, tmp)); }
  2254   void xchg(LIR_Opr src, LIR_Opr set, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xchg, src, set, res, tmp)); }
  2299   void xchg(LIR_Opr src, LIR_Opr set, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xchg, src, set, res, tmp)); }
  2255 #ifdef ASSERT
  2300 #ifdef ASSERT