< prev index next >
src/share/vm/c1/c1_LIR.hpp
Print this page
rev 8802 : G1 performance improvements: card batching, joining, sorting, prefetching and write barrier fence elision and simplification based on a global syncrhonization using handshakes piggybacking on thread-local safepoints.
@@ -34,10 +34,11 @@
class LIR_Assembler;
class CodeEmitInfo;
class CodeStub;
class CodeStubList;
class ArrayCopyStub;
+class C1ThreadLocalSafepoint;
class LIR_Op;
class ciType;
class ValueType;
class LIR_OpVisitState;
class FpuStackSim;
@@ -871,10 +872,11 @@
class LIR_Op;
class LIR_Op0;
class LIR_OpLabel;
class LIR_Op1;
class LIR_OpBranch;
+class LIR_Op1Safepoint;
class LIR_OpConvert;
class LIR_OpAllocObj;
class LIR_OpRoundFP;
class LIR_Op2;
class LIR_OpDelay;
@@ -1140,10 +1142,11 @@
virtual LIR_OpLock* as_OpLock() { return NULL; }
virtual LIR_OpAllocArray* as_OpAllocArray() { return NULL; }
virtual LIR_OpAllocObj* as_OpAllocObj() { return NULL; }
virtual LIR_OpRoundFP* as_OpRoundFP() { return NULL; }
virtual LIR_OpBranch* as_OpBranch() { return NULL; }
+ virtual LIR_Op1Safepoint* as_Op1Safepoint() { return NULL; }
virtual LIR_OpRTCall* as_OpRTCall() { return NULL; }
virtual LIR_OpConvert* as_OpConvert() { return NULL; }
virtual LIR_Op0* as_Op0() { return NULL; }
virtual LIR_Op1* as_Op1() { return NULL; }
virtual LIR_Op2* as_Op2() { return NULL; }
@@ -1466,10 +1469,23 @@
virtual void emit_code(LIR_Assembler* masm);
virtual LIR_OpBranch* as_OpBranch() { return this; }
virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
};
+class LIR_Op1Safepoint: public LIR_Op1 {
+ friend class LIR_OpVisitState;
+
+ private:
+ C1ThreadLocalSafepoint* _tls_stub;
+
+ public:
+ LIR_Op1Safepoint(LIR_Code code, LIR_Opr opr, CodeEmitInfo* info);
+
+ C1ThreadLocalSafepoint* tls_stub() const { return _tls_stub; }
+
+ virtual LIR_Op1Safepoint* as_Op1Safepoint() { return this; }
+};
class ConversionStub;
class LIR_OpConvert: public LIR_Op1 {
friend class LIR_OpVisitState;
@@ -2138,13 +2154,13 @@
void oop2reg_patch(jobject o, LIR_Opr reg, CodeEmitInfo* info);
void metadata2reg (Metadata* o, LIR_Opr reg) { assert(reg->type() == T_METADATA, "bad reg"); append(new LIR_Op1(lir_move, LIR_OprFact::metadataConst(o), reg)); }
void klass2reg_patch(Metadata* o, LIR_Opr reg, CodeEmitInfo* info);
- void return_op(LIR_Opr result) { append(new LIR_Op1(lir_return, result)); }
+ void return_op(LIR_Opr result) { append(new LIR_Op1Safepoint(lir_return, result, NULL)); }
- void safepoint(LIR_Opr tmp, CodeEmitInfo* info) { append(new LIR_Op1(lir_safepoint, tmp, info)); }
+ void safepoint(LIR_Opr tmp, CodeEmitInfo* info) { append(new LIR_Op1Safepoint(lir_safepoint, tmp, info)); }
#ifdef PPC
void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, LIR_Opr tmp1, LIR_Opr tmp2) { append(new LIR_OpConvert(code, left, dst, NULL, tmp1, tmp2)); }
#endif
void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, ConversionStub* stub = NULL/*, bool is_32bit = false*/) { append(new LIR_OpConvert(code, left, dst, stub)); }
< prev index next >