This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/34930] [4.3 Regression] ICE in instantiate_virtual_regs_in_insn with vector splat load
- From: "pinskia at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 23 Jan 2008 04:39:17 -0000
- Subject: [Bug target/34930] [4.3 Regression] ICE in instantiate_virtual_regs_in_insn with vector splat load
- References: <bug-34930-12313@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #3 from pinskia at gcc dot gnu dot org 2008-01-23 04:39 -------
Here is a reduced C testcase compile with -O2 -maltivec:
#define vector __attribute__((vector_size(16) ))
vector int f(int a, int b)
{
int g[100000]={};
g[a] = b;
return (vector int){a,a,a,a} + (vector int){g[b], g[b], g[b], g[b]};
}
Note the reason for g is to make virtual-stack-vars large enough so we get:
(insn 22 21 23 t.c:7 (parallel [
(set (reg:V4SI 132)
(mem/c/i:V4SI (plus:DI (reg/f:DI 115 virtual-stack-vars)
(const_int 400000 [0x61a80])) [3 S16 A128]))
(unspec [
(const_int 0 [0x0])
] 196)
]) -1 (nil))
And then when instantiate_virtual_regs_in_insn comes around, it does a separate
load for the mem. I don't know if this is a bug in altivec.md for the unspec
being done incorrectly or a bug in instantiate_virtual_regs_in_insn where it
tries to fix up the lve's memory location but it pulls the memory load out
instead of just the address.
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
GCC build triplet|powerpc-apple-darwin9 |
GCC host triplet|powerpc-apple-darwin9 |
GCC target triplet|powerpc-apple-darwin9 |powerpc*-*-*
Last reconfirmed|0000-00-00 00:00:00 |2008-01-23 04:39:17
date| |
Summary|[4.3 Regression] |[4.3 Regression] ICE in
|gfortran.dg/cray_pointers_2.|instantiate_virtual_regs_in_
|f90:3360: internal compiler |insn with vector splat load
|error: in |
|instantiate_virtual_regs_in_|
|insn, at function.c:1564 |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34930