Hi,
For the jit guys, I have a somewhat (?) related question.
When looking at the jit logs for tight loops like:
for( indx = 0; indx < 1000; indx++)
{
afrom[indx] = afrom[indx + 1];
}
which is fairly common in Spec sequences, sorts, etc.....
there are of course three checks during the assignmnet ...null check, type
check and bounds check. I wanted to make sure that for the above pattern of
code, the type check was being optimized away. Though is is more potent in
the jet compiler which I think calls a helper for this, I wanted to
check this in the opt compiler. I am quite new to jitrino's logs.
In the debugger, I see that the jitrino.opt compilation does
genTauCheckElementType() which finally simplifies through
simplifytaucheckelementtype(). This does a subclass check and for the above
generates a genTauHasExactType...
In the log ( attached ) , in the HIR, after global operand analysis, the ct
log shows:
Block L2:
Predecessors: L1
Successors: L8 UNWIND
I2:L2:
I11:ldci4 #1 -) t6:int32
I12:add t4, t6 -) t7:int32
I13:chknull g1 -) t8:tau
GOTO L8
Block L8:
Predecessors: L2
Successors: L9 UNWIND
I33:L8:
I14:tauhastype g1,cls:ArrayRef[] -) t9:tau
I15:arraylen g1 ((t8,t9)) -) t10:int32
I16:chkbounds t7 .lt. t10 -) t11:tau
GOTO L9
Block L9:
Predecessors: L8
Successors: L10 UNWIND
I34:L9:
I17:tauand t9, t11 -) t12:tau
I18:ldbase g1 -) t13:ref:cls:ArrayRef
I19:addindex t13, t7 -) t14:ref:cls:ArrayRef
I20:ldind.unc:o [t14] ((t8,t12)) -) t15:cls:ArrayRef
I21:chkbounds t4 .lt. t10 -) t16:tau
GOTO L10
Block UNWIND:
Predecessors: L2 L8 L9
Successors: EXIT
I31:L6:
GOTO EXIT
Block L10:
Predecessors: L9
Successors: L1
I35:L10:
I22:tauand t9, t16 -) t17:tau
I23:tausafe() -) t18:tau
I24:addindex t13, t4 -) t19:ref:cls:ArrayRef
I25:stind.unc:o t15 ((t8,t17,t18)) -) [t19]
I26:stvar t7 -) v1:int32
GOTO L1
But looking at L8, L9, L10, I am not sure that I understand that the type
check is going away, or what is happening to tauhastype. Is there a manual
on the tau operators that the non jitrino people can read ? I think the
final code generated is fine since the only exception being checked in the
generated code is the bounds check. Sorry for the long question.
Rana
On 1/18/07, Mikhail Fursov <[EMAIL PROTECTED]> wrote:
Answers:
On 1/18/07, zouqiong <[EMAIL PROTECTED]> wrote:
>
> Thanks. I want to know about three things:
>
> 1) the compilation time for both OPT and JET.
-XDjit.arg.time=on
If you need to measure total time for your code/algorithm add new timer.
See
any of existing timers (search by it's name in log) to see how it's work.
2) IR and compilation log for a method compiled by OPT.
All IR:
-Xem:opt -XDjit.arg.log=ct,irdump,dotdump
IR for the specified method:
-Xem:opt -XDjit.CS_OPT.f.filter=Test::main -XDjit.f.arg.log=ct
,irdump,dotdump
Read this doc to learn more:
http://harmony.apache.org/subcomponents/drlvm/JIT_PMF.html
3) some runtime metrics for managed code.
-Xem:opt -XDjit.arg.codegen.iprof=on -
XDjit.arg.codegen.iprof.config=iprof.cfg
Note! you can use per-method filters here too.
Read this doc to learn more:
http://harmony.apache.org/subcomponents/drlvm/internal_profiler.html
--
Mikhail Fursov