From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3473 invoked by alias); 16 Jun 2004 06:21:00 -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 3446 invoked by uid 48); 16 Jun 2004 06:20:59 -0000 Date: Wed, 16 Jun 2004 06:21:00 -0000 Message-ID: <20040616062059.3444.qmail@sourceware.org> From: "kazu at cs dot umass dot edu" To: gcc-bugs@gcc.gnu.org In-Reply-To: <20040604185552.15826.kazu@cs.umass.edu> References: <20040604185552.15826.kazu@cs.umass.edu> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug tree-optimization/15826] don't use "if" to extract a single bit bit-field. X-Bugzilla-Reason: CC X-SW-Source: 2004-06/txt/msg01936.txt.bz2 List-Id: ------- Additional Comments From kazu at cs dot umass dot edu 2004-06-16 06:20 ------- Now that we have a single return statement, let me regenerate t50.tailc. struct s { unsigned int bit : 1; }; unsigned int foo (struct s *p) { if (p->bit) return 1; else return 0; } unsigned int bar (struct s *p) { return (unsigned int) (p->bit); } unsigned int andrew (struct s *p) { int i; if (p->bit) i = 1; else i = 0; return i; } I get: ;; Function foo (foo) foo (p) { _Bool T.7; unsigned int T.2; int T.1; unsigned int T.0; : T.0_3 = p_2->bit; T.7_8 = T.0_3 != 0; T.2_1 = (unsigned int)T.7_8; return T.2_1; } ;; Function bar (bar) bar (p) { unsigned int T.3; : T.3_2 = p_1->bit; return T.3_2; } ;; Function andrew (andrew) andrew (p) { _Bool T.16; int i; unsigned int T.6; int T.5; unsigned int T.4; : T.4_3 = p_2->bit; T.16_9 = T.4_3 != 0; i_1 = (int)T.16_9; T.6_5 = (unsigned int)i_1; return T.6_5; } So basically, the problems boils down to the tree combiner. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15826