From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30112 invoked by alias); 23 Apr 2012 20:12:58 -0000 Received: (qmail 30082 invoked by uid 22791); 23 Apr 2012 20:12:56 -0000 X-SWARE-Spam-Status: No, hits=-4.3 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00,KHOP_THREADED,TW_XF X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 23 Apr 2012 20:12:44 +0000 From: "steven at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/53087] [powerpc] Poor code from cstore expander Date: Mon, 23 Apr 2012 20:12:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Keywords: missed-optimization X-Bugzilla-Severity: normal X-Bugzilla-Who: steven at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Summary Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2012-04/txt/msg02013.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53087 Steven Bosscher changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|Poor code for conversion |[powerpc] Poor code from |from _Bool to int |cstore expander --- Comment #3 from Steven Bosscher 2012-04-23 20:12:37 UTC --- The first time round to rs6000.md:cstore4, the insn isn't generated because code==NE. The second time, some insns are emitted: Breakpoint 11, emit_store_flag_1 (target=0x0, code=EQ, op0=0xfffb5f092c0, op1=0xfffb5f60470, mode=DImode, unsignedp=0, normalizep=1, target_mode=QImode) at ../../trunk/gcc/expmed.c:5363 5363 do_pending_stack_adjust (); (gdb) next 5364 tem = emit_cstore (target, icode, code, mode, compare_mode, (gdb) 5366 if (tem) (gdb) p tem $67 = (rtx) 0xfffb5f094a0 (gdb) p debug_rtx(tem) (reg:QI 132) $68 = void (gdb) p debug_rtx_list (get_last_insn(), -7) (insn 15 14 16 (set (reg:CC 134) (compare:CC (reg:DI 123 [ D.2005 ]) (const_int 0 [0]))) t.c:16 -1 (nil)) (insn 16 15 17 (set (reg:DI 135) (eq:DI (reg:CC 134) (const_int 0 [0]))) t.c:16 -1 (nil)) (insn 17 16 18 (set (reg:SI 133) (subreg:SI (reg:DI 135) 4)) t.c:16 -1 (nil)) (insn 18 17 0 (set (reg:QI 132) (subreg:QI (reg:SI 133) 3)) t.c:16 -1 (nil)) $69 = void (gdb) next 5367 return tem; (gdb) 5381 } (gdb) emit_store_flag (target=0xfffb5f09460, code=NE, op0=0xfffb5f092c0, op1=0xfffb5f60470, mode=DImode, unsignedp=1, normalizep=1) at ../../trunk/gcc/expmed.c:5578 5578 if (tem != 0) (gdb) p tem $70 = (rtx) 0xfffb5f094a0 (gdb) l 5573 && rtx_cost (trueval, XOR, 1, 5574 optimize_insn_for_speed_p ()) == 0) 5575 { 5576 tem = emit_store_flag_1 (subtarget, rcode, op0, op1, mode, 0, 5577 normalizep, target_mode); 5578 if (tem != 0) 5579 tem = expand_binop (target_mode, xor_optab, tem, trueval, target, 5580 INTVAL (trueval) >= 0, OPTAB_WIDEN); 5581 } So the problem is not the _Bool->int conversion but the cstore for ";; D.2013_7 = D.2005_5 != 0;"