This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: rs6000 floatdisf
- From: Alan Modra <amodra at bigpond dot net dot au>
- To: gcc-patches at gcc dot gnu dot org, David Edelsohn <dje at watson dot ibm dot com>
- Date: Fri, 20 Sep 2002 17:22:24 +0930
- Subject: Re: rs6000 floatdisf
- References: <20020918215744.U14457@bubble.sa.bigpond.net.au>
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