This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: RFA init_propagate_block_info abort
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")])