From: bernds Date: Fri, 23 Feb 2007 15:52:27 +0000 (+0000) Subject: * config/bfin/bfin.md (doloop_end): Fail for loops that can iterate X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ee445de834169dc5b14651db7148287d38e8b546;p=thirdparty%2Fgcc.git * config/bfin/bfin.md (doloop_end): Fail for loops that can iterate 2^32-1 or more times unless flag_unsafe_loop_optimizations. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122262 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c0fcb118c42a..fed1961f6662 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-02-23 Bernd Schmidt + + * config/bfin/bfin.md (doloop_end): Fail for loops that can iterate + 2^32-1 or more times unless flag_unsafe_loop_optimizations. + 2007-02-23 Kaveh R. Ghazi * builtins.c (fold_builtin_logb, fold_builtin_significand): New. diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md index 8c088f93cafa..63a651a5035b 100644 --- a/gcc/config/bfin/bfin.md +++ b/gcc/config/bfin/bfin.md @@ -1639,7 +1639,16 @@ (unspec [(const_int 0)] UNSPEC_LSETUP_END) (clobber (match_scratch:SI 5 ""))])] "" - {bfin_hardware_loop ();}) +{ + /* Due to limitations in the hardware (an initial loop count of 0 + does not loop 2^32 times) we must avoid to generate a hardware + loops when we cannot rule out this case. */ + + if (!flag_unsafe_loop_optimizations + && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) >= 0xFFFFFFFF) + FAIL; + bfin_hardware_loop (); +}) (define_insn "loop_end" [(set (pc)