This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/65914] [6 Regression] error: unrecognizable insn
- From: "wschmidt at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 18 Jun 2015 16:20:19 +0000
- Subject: [Bug target/65914] [6 Regression] error: unrecognizable insn
- Auto-submitted: auto-generated
- References: <bug-65914-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65914
--- Comment #6 from Bill Schmidt <wschmidt at gcc dot gnu.org> ---
The tree-optimized dump shows:
void foo() ()
{
vector(2) long unsigned int vect_cst_.60;
vector(2) long unsigned int vect_cst_.59;
vector(2) long unsigned int vect_cst_.58;
struct A p1;
const struct A D.3509;
int p1;
int p1;
const struct A D.3508;
struct A p1;
struct expression D.3507;
long unsigned int _5;
long unsigned int _6;
long unsigned int _8;
long unsigned int _11;
long unsigned int _18;
long unsigned int _19;
<bb 2>:
_18 = (long unsigned int) &p1;
_19 = (long unsigned int) &p1;
vect_cst_.60_20 = {_19, _18};
_6 = (long unsigned int) &D.3509;
_5 = (long unsigned int) &p1;
vect_cst_.59_17 = {_5, _6};
_11 = (long unsigned int) &D.3508;
_8 = (long unsigned int) &p1;
vect_cst_.58_7 = {_8, _11};
D.3509 ={v} {CLOBBER};
D.3508 ={v} {CLOBBER};
MEM[(struct &)&D.3507] ={v} {CLOBBER};
MEM[(const struct A & *)&D.3507] = vect_cst_.60_20;
MEM[(const struct A & *)&D.3507 + 16B] = vect_cst_.59_17;
MEM[(const struct A & *)&D.3507 + 32B] = vect_cst_.58_7;
operator/<int, A<int>, expression<int, expression<int, int, expression<int,
A\
<int>, A<int>, void, void>, void, void>, expression<int, int, A<int>, void,
voi\
d>, void, void>, void, void, double> (D.3507,
1.0000000000000000555111512312578\
27021181583404541015625e-1);
return;
}
The problem is that the POWER port doesn't appear to have a pattern to match
the vector constructors like:
vect_cst_.60_20 = {_19, _18};
The translation into rtl is a (vec_concat:V2DI (reg:DI) (reg:DI)). The closest
thing we have to matching this is vsx_concat_<mode> in vsx.md, but IIUC this
will only match (vec_concat:V2DF (reg:DF) (reg:DF)) because of the
vsx_register_operand restriction. Mike Meissner, can you please confirm?