On 02/09/2011 08:55 AM, Anitha Boyapati wrote:
> Direct-conditional branch
> 
>> (jump_insn 9 8 34 3 gt.c:4 (set (pc)
>>         (if_then_else (gt:CC (cc0)
>>                 (const_int 0 [0x0]))
>>             (label_ref 12)
>>             (pc))) -1 (nil))
> 
> Reverse-conditional Branch
> 
>> (jump_insn 9 8 34 3 gt.c:4 (set (pc)
>>         (if_then_else (gt:CC (cc0)
>>                 (const_int 0 [0x0]))
>>             (pc))) -1 (nil))
>>             (label_ref 14)

You do not have to support reverse-conditional branches in your port,
and frankly I encourage you not to do so.  These patterns are, or ought
to be, long obsolete.

> The latter pattern is supposed to emit assembly which tests for the
> reverse-condition. For instance if  the former pattern emits assembly
> instruction like "brgt <label>" then the latter pattern is supposed to
> emit instruction like "brle <label>"

See reverse_condition_maybe_unordered -- the true inverse of GT is UNLE.
That is, UNORDERED || LE.

Support as many of the UNORDERED comparisons as possible and you'll
obviate the need for the reverse-conditional patterns, and also 
prevent the generation of conditions that cannot be implemented
on your target.

>From what I can determine re avr32 fcmp.s, you cannot support any
of the compound unordered comparisons directly.  You can only handle
ORDERED and UNORDERED via the overflow (V) bit; there are no branches
that combine V with any other flag in a way that's useful for floats.


r~

Reply via email to