[patch] Enable fmove-loop-invariants by default
Eric Botcazou
ebotcazou@adacore.com
Tue Feb 14 17:40:00 GMT 2006
> this patch enables the new loop invariant motion pass by default. This
> duplicates functionality of loop.c, but I still hope loop.c will be
> removed soon, and even if not, it is neccessary to have loop-invariant
> tested if we ever want to use it (I have just spent a week by fixing
> bugs introduced because it was disabled and nobody tested it).
It may badly interact with -fnon-call-exceptions, causing
FAIL: cxg2007
FAIL: cxg2012
to pop up in the ACATS testsuite on x86-64/Linux.
cxg2007.adb: In function 'CXG2007':
cxg2007.adb:228: error: missing REG_EH_REGION note in the end of bb 162
+===========================GNAT BUG DETECTED==============================+
| 4.2.0 20060213 (experimental) (x86_64-suse-linux-gnu) GCC error: |
| verify_flow_info failed |
| Error detected at cxg2007.adb:228:5
(insn 1065 1063 1696 162 (set (mem:XF (plus:DI (reg/f:DI 7 sp)
(const_int 64 [0x40])) [0 S16 A64])
(const_double:XF 3.0e+0 [0x0.cp+2])) 99 {*movxf_integer} (nil)
(expr_list:REG_EH_REGION (const_int 21 [0x15])
(nil)))
;; End of basic block 162, registers live:
(nil)
Set in insn 1065 is invariant (29), cost 6, depends on
Decided to move invariant 29
I'm not sure what the counter-measures were in loop.c against that. Do you
see any other straightforward solutions than punting in that case?
--
Eric Botcazou
More information about the Gcc-patches
mailing list