This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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")])


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]