This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Fix for i686-pc-linux-gnu gcc.dg/20000720-1.c regression
- To: gcc-patches at gcc dot gnu dot org
- Subject: Fix for i686-pc-linux-gnu gcc.dg/20000720-1.c regression
- From: Joern Rennecke <amylaar at cambridge dot redhat dot com>
- Date: Thu, 5 Apr 2001 00:21:03 +0100 (BST)
- Cc: amylaar at cambridge dot redhat dot com
The i686-pc-linux-gnu gcc from the cvs mainline fails the gcc.dg/20000720-1.c
compilation:
/s/fsf/egcs/gcc/testsuite/gcc.dg/20000720-1.c: In function `dead':
/s/fsf/egcs/gcc/testsuite/gcc.dg/20000720-1.c:39: Insn does not satisfy its constraints:
(insn:TI 195 194 196 (parallel[
(set (zero_extract:SI (reg:SI 5 edi)
(const_int 8 [0x8])
(const_int 8 [0x8]))
(xor:SI (zero_extract:SI (reg:SI 5 edi)
(const_int 8 [0x8])
(const_int 8 [0x8]))
(zero_extract:SI (reg:SI 5 edi)
(const_int 8 [0x8])
(const_int 8 [0x8]))))
(clobber (reg:CC 17 flags))
] ) 318 {*xorqi_ext_1} (insn_list 194 (nil))
(expr_list:REG_UNUSED (reg:CC 17 flags)
(nil)))
/s/fsf/egcs/gcc/testsuite/gcc.dg/20000720-1.c:39: Internal compiler error in extract_constrain_insn_cached, at recog.c:2241
This insn has been generated by a splitter after reload. The following patch
prevents this splitter from generating this pattern if the operand is not of
a suitable class:
Thu Apr 5 00:15:27 2001 J"orn Rennecke <amylaar@redhat.com>
* i386.md (*andsi_1+3): If used after reload, make sure the operand is
in class Q_REGS.
Index: config/i386/i386.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/i386/i386.md,v
retrieving revision 1.253
diff -p -r1.253 i386.md
*** i386.md 2001/04/01 09:50:06 1.253
--- i386.md 2001/04/04 23:14:41
***************
*** 8080,8086 ****
(clobber (reg:CC 17))]
"(optimize_size || !TARGET_PARTIAL_REG_STALL)
&& (GET_MODE (operands[0]) == SImode || GET_MODE (operands[0]) == HImode
! || (TARGET_64BIT && GET_MODE (operands[0]) == DImode))"
[(parallel [(set (zero_extract:SI (match_dup 0)
(const_int 8)
(const_int 8))
--- 8080,8089 ----
(clobber (reg:CC 17))]
"(optimize_size || !TARGET_PARTIAL_REG_STALL)
&& (GET_MODE (operands[0]) == SImode || GET_MODE (operands[0]) == HImode
! || (TARGET_64BIT && GET_MODE (operands[0]) == DImode))
! && (! reload_completed
! || TEST_HARD_REG_BIT (reg_class_contents[Q_REGS],
! true_regnum (operands[0])))"
[(parallel [(set (zero_extract:SI (match_dup 0)
(const_int 8)
(const_int 8))