RFA init_propagate_block_info abort

Graham Stott graham.stott@btinternet.com
Tue Aug 6 13:42:00 GMT 2002


Jim Wilson wrote:
>    (if_then_else (ne:CC (const_int 1 [0x1])
>          (const_int 0 [0x0]))
>      (label_ref 5304)
>      (pc))
> 
> This RTL is not in canonical form, and thus it is likely incorrect.  This
> should be an unconditional branch instead of a conditional branch.
> 
> Jim
> 

This comes from the bra_true insn because the br_flag_or_contant_operand predicate accepts
CONST_INT operand with the value 0 or 1.

;; Branches based off of the flag bits
(define_insn "*bra_true"
   [(set (pc)
         (if_then_else (match_operator:CC 1 "condexec_branch_operator"
                                          [(match_operand:CC 2 "br_flag_or_constant_operand" "b,I,N")
                                           (const_int 0)])
                       (label_ref (match_operand 0 "" ""))
                       (pc)))]
   ""
   "*
{
   if (GET_CODE (operands[2]) == REG || GET_CODE (operands[2]) == SUBREG)
     return \"bra%F1 %l0\";

   if (GET_CODE (operands[2]) != CONST_INT)
     fatal_insn (\"bad jump\", insn);

   if ((GET_CODE (operands[1]) == EQ && INTVAL (operands[2]) == 0)
       || (GET_CODE (operands[1]) == NE && INTVAL (operands[2]) != 0))
     return \"bra %l0\";

   return \"; jump to %l0 optimized away\";
}"
   [(set_attr "type" "br")
    (set_attr "predicable" "no")])



More information about the Gcc-bugs mailing list