From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25930 invoked by alias); 3 Sep 2003 07:44:36 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 25906 invoked by uid 48); 3 Sep 2003 07:44:35 -0000 Date: Wed, 03 Sep 2003 07:44:00 -0000 From: "heinrich dot brand at fujitsu-siemens dot com" To: gcc-bugs@gcc.gnu.org Message-ID: <20030903074430.12147.heinrich.brand@fujitsu-siemens.com> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug optimization/12147] New: Wrong code with -O2 in context of reload X-Bugzilla-Reason: CC X-SW-Source: 2003-09/txt/msg00194.txt.bz2 List-Id: 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 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); } }