From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19194 invoked by alias); 6 May 2005 08:39:15 -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 19057 invoked by uid 48); 6 May 2005 08:39:06 -0000 Date: Fri, 06 May 2005 08:39:00 -0000 Message-ID: <20050506083906.19056.qmail@sourceware.org> From: "steven at gcc dot gnu dot org" To: gcc-bugs@gcc.gnu.org In-Reply-To: <20050206134041.19791.kazu@cs.umass.edu> References: <20050206134041.19791.kazu@cs.umass.edu> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug tree-optimization/19791] [tcb] A constant not fully propagated X-Bugzilla-Reason: CC X-SW-Source: 2005-05/txt/msg00802.txt.bz2 List-Id: ------- Additional Comments From steven at gcc dot gnu dot org 2005-05-06 08:39 ------- Looks fixed to me. The only problem now is that there is an extra load of 128 as an immediate, I haven't looked at why uncprop doesn't fix this. --------------------------- extern void abort (void) __attribute__ ((__noreturn__)); extern int bar (int, int); int PR19791_test (int mode, int size, unsigned int align) { int align0; int iftmp1; if (mode == 0) { if (align != 128) abort (); } align0 = (int) align; if (mode == 0) { int D1131 = align0 / 8; int D1132 = D1131 + size; int D1133 = D1132 - 1; int D1134 = D1131 - 1; int D1135 = ~D1134; iftmp1 = D1133 & D1135; } else { iftmp1 = size; } return bar (iftmp1, align0); } int PR19791_result (int mode, int size, unsigned int align) { int align0; int iftmp1; if (mode == 0) { if (align != 128) abort (); } align0 = (int) align; if (mode == 0) { int D1131 = ((int) 128) / 8; int D1132 = D1131 + size; int D1133 = D1132 - 1; int D1134 = D1131 - 1; int D1135 = ~D1134; iftmp1 = D1133 & D1135; } else { iftmp1 = size; } return bar (iftmp1, align0); } --------------------------- --------------------------- PR19791_test (mode, size, align) { int D1135; int D1134; int D1133; int D1132; int D1131; int iftmp1; int align0; int D.1579; int D.1578; : if (mode == 0) goto ; else goto ; :; if (align != 128) goto ; else goto ; :; abort (); :; align0 = (int) align; iftmp1 = size; goto (); :; iftmp1 = size + 15 & -16; align0 = 128; :; D.1578 = bar (iftmp1, align0) [tail call]; return D.1578; } PR19791_result (mode, size, align) { int D1135; int D1134; int D1133; int D1132; int D1131; int iftmp1; int align0; int D.1593; int D.1592; : if (mode == 0) goto ; else goto ; :; if (align != 128) goto ; else goto ; :; abort (); :; align0 = (int) align; iftmp1 = size; goto (); :; iftmp1 = size + 15 & -16; align0 = 128; :; D.1592 = bar (iftmp1, align0) [tail call]; return D.1592; } --------------------------- -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19791