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]

IA-64 patch to fix ICE with long double after float HFA


This fixes PR target/19357.  The float HFA argument fills the FP
registers, and then the long double argument gets passed in int
registers.  This then requires the need to perform an XFmode store from
the int registers, but this support was missing from the movxf pattern. 
This patch adds it.

This was tested with an ia64-linux bootstrap and make check.  The new
testcase passes with the patch at all optimization levels, and fails at
all optimization levels without the patch.  The RTL dumps and assembler
output for the testcase was checked by hand to make sure it was
reasonable.

I have checked in these patches.
-- 
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com

Attachment: patch.xfmode.gpr
Description: Text document

2005-01-17  James E. Wilson  <wilson@specifixinc.com>

	PR target/19357
	* gcc.c-torture/compile/pr19357.c: New test.

Index: testsuite/gcc.c-torture/compile/pr19357.c
===================================================================
RCS file: testsuite/gcc.c-torture/compile/pr19357.c
diff -N testsuite/gcc.c-torture/compile/pr19357.c
*** /dev/null   1 Jan 1970 00:00:00 -0000
--- testsuite/gcc.c-torture/compile/pr19357.c   18 Jan 2005 03:48:54 -0000
***************
*** 0 ****
--- 1,8 ----
+ /* This generated an ICE for an ia64-linux target.  */
+ struct f {
+   float f[8];
+ };
+
+ long double ftest(struct f arg1, long double arg2) {
+   return arg2;
+ }

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