This is the mail archive of the gcc-patches@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: rs6000 floatdisf


lock/lock_region.c:443: error: unrecognizable insn:
(insn:HI 143 141 144 14 0x4028a140 (set (reg:DI 187)
        (and:DI (reg:DI 183)
            (const_int 2047 [0x7ff]))) -1 (nil)
    (nil))

Here I was thinking that clobbers and scratch regs would be supplied.
Apparently not in all cases, as the above attempt to compile glibc/db2
shows.  floatdisf2 worked fine in my testcases...

	* config/rs6000/rs6000.md (floatdisf2_internal2): Combine
	insns.  Supply missing clobber of scratch reg.

Index: gcc/config/rs6000/rs6000.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.md,v
retrieving revision 1.207
diff -u -p -r1.207 rs6000.md
--- gcc/config/rs6000/rs6000.md	18 Sep 2002 23:27:29 -0000	1.207
+++ gcc/config/rs6000/rs6000.md	20 Sep 2002 07:28:10 -0000
@@ -5927,8 +5927,12 @@
 ;; by a bit that won't be lost at that stage, but is below the SFmode
 ;; rounding position.
 (define_expand "floatdisf2_internal2"
-  [(set (match_dup 2) (and:DI (match_operand:DI 0 "" "") (const_int 2047)))
-   (set (match_dup 4) (compare:CC (match_dup 2) (const_int 0)))
+  [(parallel [(set (match_dup 4)
+		   (compare:CC (and:DI (match_operand:DI 0 "" "")
+				       (const_int 2047))
+			       (const_int 0)))
+	      (set (match_dup 2) (and:DI (match_dup 0) (const_int 2047)))
+	      (clobber (match_scratch:CC 7 ""))])
    (set (match_dup 3) (ashiftrt:DI (match_dup 0) (const_int 53)))
    (set (match_dup 3) (plus:DI (match_dup 3) (const_int 1)))
    (set (pc) (if_then_else (eq (match_dup 4) (const_int 0))

-- 
Alan Modra
IBM OzLabs - Linux Technology Centre


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