[Bug target/40934] [4.5 Regression] ICE in get_hard_regnum, at reg-stack.c:741

bonzini at gnu dot org gcc-bugzilla@gcc.gnu.org
Sat Aug 1 22:58:00 GMT 2009



------- Comment #7 from bonzini at gnu dot org  2009-08-01 22:57 -------
Hmm, Pentium is not a cmove target and it doesn't like sahf, so
ix86_fp_comparison_operator matches all comparison operators.  I would have
thought then that fp_jcc_3_387 would match:

(define_insn "*fp_jcc_3_387"
  [(set (pc)
        (if_then_else (match_operator 0 "ix86_fp_comparison_operator"
                        [(match_operand 1 "register_operand" "f")
                         (match_operand 2 "nonimmediate_operand" "fm")])
          (label_ref (match_operand 3 "" ""))
          (pc)))
   (clobber (reg:CCFP FPSR_REG))
   (clobber (reg:CCFP FLAGS_REG))
   (clobber (match_scratch:HI 4 "=a"))]
  "TARGET_80387
   && (GET_MODE (operands[1]) == SFmode || GET_MODE (operands[1]) == DFmode)
   && GET_MODE (operands[1]) == GET_MODE (operands[2])
   && SELECT_CC_MODE (GET_CODE (operands[0]),
                      operands[1], operands[2]) == CCFPmode
   && !TARGET_CMOVE"
  "#")

Maybe the instruction was optimized for size:

enum ix86_fpcmp_strategy
ix86_fp_comparison_strategy (enum rtx_code code ATTRIBUTE_UNUSED)
{
  /* Do fcomi/sahf based test when profitable.  */
  ...
  if (TARGET_SAHF && (TARGET_USE_SAHF || optimize_insn_for_size_p ()))
    return IX86_FPCMP_SAHF;

  return IX86_FPCMP_ARITH;
}


-- 

bonzini at gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|2009-08-01 22:04:31         |2009-08-01 22:57:49
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40934



More information about the Gcc-bugs mailing list