On Mon, Sep 26, 2011 at 9:39 AM, Jiangning Liu <jiangning....@arm.com> wrote: >> > * Without PRE, >> > >> > Path1: >> > movl $2, %eax >> > cmpl $1, %eax >> > je .L3 >> > >> > Path2: >> > movb $3, %al >> > cmpl $1, %eax >> > je .L3 >> > >> > Path3: >> > cmpl $1, %eax >> > jne .L14 >> > >> > * With PRE, >> > >> > Path1: >> > movl $1, %ebx >> > movl $2, %eax >> > testb %bl, %bl >> > je .L3 >> > >> > Path2: >> > movl $1, %ebx >> > movb $3, %al >> > testb %bl, %bl >> > je .L3 >> > >> > Path3: >> > cmpl $1, %eax >> > setne %bl >> > testb %bl, %bl >> > jne .L14 >> > >> > Do you have any more thoughts? >> >> It seems to me that with PRE all the testb %bl, %bl >> should be evaluated at compile-time considering the >> preceeding movl $1, %ebx. Am I missing something? >> > > Yes. Can this be done by PRE or any other optimizations in middle end?
Hm, the paths as you quote them are obfuscated by missed jump-threading. On the tree level we have # s_2 = PHI <2(5), 3(4), 2(6), s_25(7)> # prephitmp.6_1 = PHI <1(5), 1(4), 1(6), prephitmp.6_3(7)> <L10>: t_14 = t_24 + 1; D.2729_6 = MEM[base: t_14, offset: 0B]; D.2732_7 = D.2729_6 != 0; D.2734_9 = prephitmp.6_1 & D.2732_7; if (D.2734_9 != 0) where we could thread the cases with prephitmp.6_1 == 1, ultimately removing the & and forwarding the D.2729_6 != 0 test. Which would of course cause some code duplication. Jeff, you recently looked at tree jump-threading, can you see if we can improve things on this particular testcase? Thanks, Richard. > Thanks, > -Jiangning > >> Richard. >> > > > > >