[LLVMdev] Testing LLVM on OS X
Patrick Flanagan
valtrain at mac.com
Mon May 17 23:43:01 PDT 2004
>
> Okay, I changed the C backend to emit syntactic loops around the real
> loops, and it seems to make a big difference. LLVM now generates this
> code (note that the actual loop is not actually responsible for control
> flow, it's unreachable):
>
> ... which is exactly what we want. Patrick, I would appreciate it if
> you
> could rerun your tests on PPC and let me know if this helps. :)
>
Aside from this syntactic loop stuff, I was looking over gzip some more
and found another area that could be improved.
In gzip's longest_match function, part of the code generated by CBE
looks like this:
l13_shortcirc_next_2E_11:
l8_chain_length_2E_039 = (((l2_tmp_2E_182) ? (4294967295u) : (0u))) +
l8_chain_length_2E_1;
.. some other code ...
l13_loopcont_2E_0:
... some other code ...
l2_tmp_2E_182 = l8_tmp_2E_180 > l8_mem_tmp_2E_0;
if (l2_tmp_2E_182) {
goto l13_shortcirc_next_2E_11;
} else {
goto l13_UnifiedReturnBlock;
}
Basically it does that check and puts the result in l2_tmp_2E_182,
then uses that in the if check and the ternary thing. When this is
compiled, the assembly that it generates for that check/assignment is:
subc r29, r25, r2
subfe r29,r29,r29
neg r29,r29
This is pretty slow compared to just doing the check on the fly (and
being able to just use a compare instruction). If I manually edit the
code to change it to:
l13_shortcirc_next_2E_11:
l8_chain_length_2E_039 = ((l8_tmp_2E_180 > l8_mem_tmp_2E_0) ?
(4294967295u) : (0u))) + l8_chain_length_2E_1;
.. some other code ...
l13_loopcont_2E_0:
if (l8_tmp_2E_180 > l8_mem_tmp_2E_0) {
goto l13_shortcirc_next_2E_11;
} else {
goto l13_UnifiedReturnBlock;
}
then the assembly generated becomes a cmplw and branch where it occurs.
Making this change in only this one spot causes the time to run to
decrease 69 seconds, giving it a speedup of 6% from the 5/12 LLVM CVS.
I noticed several spots in the CBE code where this type of code was
generated, and if it was changed to emit code the 2nd way it would
presumably help even more.
Lastly, did you ever hear anything back from that group that was
working on the PPC JIT compiler? :)
Thanks,
Patrick
More information about the llvm-dev
mailing list