Xiao-Feng, I'm slightly confused about current WB support in Jitrino.OPT, so I need an advice.
The problem: I think that write barriers in Jitrino OPT do not work. Example (see for lines marked with =>): HIR with WB disabled: I1:defarg.ths -) t1:cls:java/net/URLClassLoader$4 I2:tauisnonnull t1 -) t2:tau I3:tauhastype t1,cls:java/net/URLClassLoader$4 -) t3:tau I4:defarg -) t4:cls:java/net/URLClassLoader I5:tauhastype t4,cls:java/net/URLClassLoader -) t5:tau I6:defarg -) t6:cls:java/lang/String I7:tauhastype t6,cls:java/lang/String -) t7:tau I8:ldflda [t1.java/net/URLClassLoader$4::this$0] -) t8:ref:cls:java/net/URLClassLoader => I9:stind.unc:o t4 ((t2,t3,t5)) -) [t8] I10:ldflda [t1.java/net/URLClassLoader$4::val$clsName] -) t9:ref:cls:java/lang/String => I11:stind.unc:str t6 ((t2,t3,t7)) -) [t9] I12:tauunsafe() -) t10:tau I13:call java/lang/Object::_init_(t1) ((t2,t10)) -) The same HIR with WB enabled: Successors: L5 UNWIND I1:defarg.ths -) t1:cls:java/net/URLClassLoader$4 I2:tauisnonnull t1 -) t2:tau I3:tauhastype t1,cls:java/net/URLClassLoader$4 -) t3:tau I4:defarg -) t4:cls:java/net/URLClassLoader I5:tauhastype t4,cls:java/net/URLClassLoader -) t5:tau I6:defarg -) t6:cls:java/lang/String I7:tauhastype t6,cls:java/lang/String -) t7:tau I8:ldflda [t1.java/net/URLClassLoader$4::this$0] -) t8:ref:cls:java/net/URLClassLoader => I9:stref.wb.unc t4 ((t2,t3,t5)) -) [t8 t1] I10:ldflda [t1.java/net/URLClassLoader$4::val$clsName] -) t9:ref:cls:java/lang/String => I11:stref.wb.unc t6 ((t2,t3,t7)) -) [t9 t1] I12:tauunsafe() -) t10:tau I13:call java/lang/Object::_init_(t1) ((t2,t10)) -) The LIR with WB disabled I1: t4:ref:cls:java/net/URLClassLoader (ID:s5(EFLGS):uint32) =ADD t0:cls:java/net/URLClassLoader$4,t3(0:fo:java/net/URLClassLoader$4.this$0):intptr => I2: (AD:t6[t4]:object) =CopyPseudoInst/MOV (AU:t1:cls:java/net/URLClassLoader) I3: t8:ref:cls:java/lang/String (ID:s5(EFLGS):uint32) =ADD t0:cls:java/net/URLClassLoader$4,t7(0:fo:java/net/URLClassLoader$4.val$clsName):intptr => I4: (AD:t9[t8]:string) =CopyPseudoInst/MOV (AU:t2:cls:java/lang/String) The same LIR with WB enabled I1: t4:ref:cls:java/net/URLClassLoader (ID:s5(EFLGS):uint32) =ADD t0:cls:java/net/URLClassLoader$4,t3(0:fo:java/net/URLClassLoader$4.this$0):intptr => I2: CALL t6(0:h:WriteBarrier):ptr:intptr (AU:t0:cls:java/net/URLClassLoader$4,t4:ref:cls:java/net/URLClassLoader,t1:cls:java/net/URLClassLoader) I3: t8:ref:cls:java/lang/String (ID:s5(EFLGS):uint32) =ADD t0:cls:java/net/URLClassLoader$4,t7(0:fo:java/net/URLClassLoader$4.val$clsName):intptr => I4: CALL t9(0:h:WriteBarrier):ptr:intptr (AU:t0:cls:java/net/URLClassLoader$4,t8:ref:cls:java/lang/String,t2:cls:java/lang/String) The question is what is in the CALL? I see only the method: gc_heap_slot_write_ref and this method does not save anything into fields. Does it mean that WB support in Jitrino.OPT is incomplete today? -- Mikhail Fursov