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