This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug optimization/12147] New: Wrong code with -O2 in context of reload
- From: "heinrich dot brand at fujitsu-siemens dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 3 Sep 2003 07:44:35 -0000
- Subject: [Bug optimization/12147] New: Wrong code with -O2 in context of reload
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12147
Summary: Wrong code with -O2 in context of reload
Product: gcc
Version: 3.3.1
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: heinrich dot brand at fujitsu-siemens dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: s390-linux-gnu
GCC host triplet: s390-linux-gnu
GCC target triplet: s390-linux-gnu
Please see usage of r11 in x.c.24.greg generated with the code below:
(insn 4069 4063 4068 0 (nil) (set (reg:SI 11 %r11)
(const_int 253 [0xfd])) 54 {*movsi_lhi} (nil)
(nil))
(insn 4068 4069 1767 0 (nil) (set (reg:SI 11 %r11)
(const_int 5572 [0x15c4])) 54 {*movsi_lhi} (nil)
(nil))
(insn 1767 4068 4067 0 0x40209980 (parallel [
(set (reg:SI 11 %r11)
(xor:SI (reg:SI 11 %r11)
(mem:SI (plus:SI (reg/f:SI 15 %r15)
(reg:SI 11 %r11)) [178 S8 A8])))
(clobber (reg:CC 33 %cc))
]) 216 {xorsi3} (insn_list 1759 (insn_list:REG_DEP_OUTPUT 47 (insn_list:
REG_DEP_OUTPUT 1621 (insn_list 1765 (insn_list:REG_DEP_ANTI 52 (nil))))))
(expr_list:REG_NO_CONFLICT (mem:DI (plus:SI (reg/f:SI 15 %r15)
(const_int 5568 [0x15c0])) [178 S8 A8])
(nil)))
#############################################################################
test:
#define asop &=
#define op &
#define conv signed char
#include <stdio.h>
struct C77 {
unsigned long long f1 : 1;
unsigned long long a1 : 6; /* Bitfeld innerhalb eines Bytes */
unsigned long long f2 : 1;
unsigned long long a2 : 7; /* linksbuendig */
unsigned long long f3 : 2;
unsigned long long a3 : 7; /* rechtsbuendig */
unsigned long long f4 : 8;
unsigned long long f5 : 1;
unsigned long long b1 : 14;/* Bitfeld innerhalb eines Halbworts */
unsigned long long f6 : 1;
unsigned long long b2 : 15;/* linksbuendig */
unsigned long long f7 : 1;
unsigned long long f8 : 1;
unsigned long long b3 : 15;/* rechtsbuendig */
unsigned long long f9 : 16;
unsigned long long fa : 1;
unsigned long long c1 : 30;/* Bitfeld innerhalb eines Worts */
unsigned long long fb : 1;
unsigned long long c2 : 31;/* linksbuendig */
unsigned long long fc : 2;
unsigned long long c3 : 31;/* rechtsbuendig */
unsigned long long fd : 1;
unsigned long long d1 : 62;/* Bitfeld innerhalb eines Doppelworts */
unsigned long long fe : 1;
unsigned long long d2 : 63;/* linksbuendig */
unsigned long long ff : 1;
unsigned long long fg : 1;
unsigned long long d3 : 63;/* rechtsbuendig */
};
#define XA 0xca9653c6396a5c63LL
#define XB 0xffffffffffffffffLL
#define XC 0x2424242424242424LL
#define XD 0x0c51LL
#define XE 0x1414141414141414LL
static int f1(), f2(), f3(), f5(), f6();
void tprint(struct C77 y[]);
int main() {
register int i;
long dummy[824];
struct C77 w[4];
long long z[4][20];
static int q;
q = 0;
z[0][0] = XA;
z[1][0] = XB;
z[2][0] = XC;
z[3][0] = XD;
#if 1
for(i=3;i<4;i++){i = 3;
}
#endif
memset(w, (char) XE, 4*sizeof(struct C77));
#if 1 /*alle z[][] schalten */
#if 1
z[0][1] = (conv) (w[0].a1 asop XA);
z[0][2] = (conv) (w[0].a1 asop XA);
z[0][3] = (conv) (w[0].a1 asop XA);
z[0][4] = (conv) (w[0].b1 asop XA);
z[0][5] = (conv) (w[0].b1 asop XA);
#if 1
z[0][6] = (conv) (w[0].b3 asop XA); /*SUCCESSFUL,FAILED*/
#else
z[0][6] = (conv) (w[0].b2 asop XA); /*SUCCESSFUL,SUCCESSFUL*/
#endif
z[0][7] = (conv) (w[0].c1 asop XA);
z[0][8] = (conv) (w[0].c2 asop XA);
z[0][9] = (conv) (w[0].c3 asop XA);
z[0][10] = (conv) (w[0].d1 asop XA);
z[0][11] = (conv) (w[0].d2 asop XA);
z[0][12] = (conv) (w[0].d3 asop XA);
#endif
#if 1
z[1][1] = (conv) (w[1].a1 asop XB);
z[1][2] = (conv) (w[1].a2 asop XB);
z[1][3] = (conv) (w[1].a3 asop XB);
z[1][4] = (conv) (w[1].b1 asop XB);
z[1][5] = (conv) (w[1].b2 asop XB);
z[1][6] = (conv) (w[1].b3 asop XB);
z[1][7] = (conv) (w[1].c1 asop XB);
z[1][8] = (conv) (w[1].c2 asop XB);
z[1][9] = (conv) (w[1].c3 asop XB);
z[1][10] = (conv) (w[1].d1 asop XB);
z[1][11] = (conv) (w[1].d2 asop XB);
z[1][12] = (conv) (w[1].d3 asop XB);
#endif
z[2][1] = (conv) (w[2].a1 asop XC);
z[2][2] = (conv) (w[2].a2 asop XC);
z[2][3] = (conv) (w[2].a3 asop XC);
z[2][4] = (conv) (w[2].b1 asop XC);
z[2][5] = (conv) (w[2].b2 asop XC);
z[2][6] = (conv) (w[2].b3 asop XC);
z[2][7] = (conv) (w[2].c1 asop XC);
z[2][8] = (conv) (w[2].c2 asop XC);
z[2][9] = (conv) (w[2].c3 asop XC);
z[2][10] = (conv) (w[2].d1 asop XC);
z[2][11] = (conv) (w[2].d2 asop XC);
z[2][12] = (conv) (w[2].d3 asop XC);
z[3][1] = (conv) (w[3].a1 asop XD);
z[3][2] = (conv) (w[3].a2 asop XD);
z[3][3] = (conv) (w[3].a3 asop XD);
z[3][4] = (conv) (w[3].b1 asop XD);
z[3][5] = (conv) (w[3].b2 asop XD);
z[3][6] = (conv) (w[3].b3 asop XD);
z[3][7] = (conv) (w[3].c1 asop XD);
z[3][8] = (conv) (w[3].c2 asop XD);
z[3][9] = (conv) (w[3].c3 asop XD);
z[3][10] = (conv) (w[3].d1 asop XD);
z[3][11] = (conv) (w[3].d2 asop XD);
#else
#endif
{unsigned long long r,res;
unsigned long long ersatz[10];
char zw,zwntf("r= %llx\n",r);
res=r;
printf("\n");
r = r ^ XDD;
printf("w[3].d3: %llx zwi: %x\n",w[3].d3,zwi);
/*if( w[3].d3 == r)printf("SUCCESSFUL\n");*/
if((conv) w[3].d3 == (conv)r)
printf("SUCCESSFUL\n");
else
printf("FAILED\n");
printf("(conv) w[3].d3: %x (conv) r: %x\n",(conv)w[3].d3,(conv) r);
exit(res&1);
}
}