[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