From patchwork Mon Nov 21 03:34:43 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiangning Liu X-Patchwork-Id: 126682 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 0C7A4B720D for ; Mon, 21 Nov 2011 14:35:15 +1100 (EST) Received: (qmail 19545 invoked by alias); 21 Nov 2011 03:35:12 -0000 Received: (qmail 19236 invoked by uid 22791); 21 Nov 2011 03:35:11 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL, BAYES_00, MSGID_MULTIPLE_AT, RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from service87.mimecast.com (HELO service87.mimecast.com) (91.220.42.44) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 21 Nov 2011 03:34:58 +0000 Received: from cam-owa2.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.21]) by service87.mimecast.com; Mon, 21 Nov 2011 03:34:56 +0000 Received: from jiangningsh02 ([10.1.255.212]) by cam-owa2.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Mon, 21 Nov 2011 03:34:52 +0000 From: "Jiangning Liu" To: Subject: [RFC] Use which_alternative in preparation-statements of define_insn_and_split Date: Mon, 21 Nov 2011 11:34:43 +0800 Message-ID: <000101cca7fe$83c35490$8b49fdb0$@liu@arm.com> MIME-Version: 1.0 X-MC-Unique: 111112103345600201 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hi, I find which_alternative can't really be used in preparation-statements of define_insn_and_split, so can this be fixed like below? For example, I want to use which_alternative in the pattern below, (define_insn_and_split "*thumb2_movsicc_insn" [(set (match_operand:SI 0 "s_register_operand" "=r,r,r,r,r,r,r,r") (if_then_else:SI (match_operator 3 "arm_comparison_operator" [(match_operand 4 "cc_register" "") (const_int 0)]) (match_operand:SI 1 "arm_not_operand" "0,0,rI,K,rI,rI,K,K") (match_operand:SI 2 "arm_not_operand" "rI,K,0,0,rI,K,rI,K")))] "TARGET_THUMB2" "@ it\\t%D3\;mov%D3\\t%0, %2 it\\t%D3\;mvn%D3\\t%0, #%B2 it\\t%d3\;mov%d3\\t%0, %1 it\\t%d3\;mvn%d3\\t%0, #%B1 ite\\t%d3\;mov%d3\\t%0, %1\;mov%D3\\t%0, %2 ite\\t%d3\;mov%d3\\t%0, %1\;mvn%D3\\t%0, #%B2 ite\\t%d3\;mvn%d3\\t%0, #%B1\;mov%D3\\t%0, %2 ite\\t%d3\;mvn%d3\\t%0, #%B1\;mvn%D3\\t%0, #%B2" "&& reload_completed" [(cond_exec (match_dup 5) (set (match_dup 0) (match_dup 6)))] " { if (which_alternative >= 2 && which_alternative < 4) { ... } else if (which_alternative >= 4) { ... } }" [(set_attr "length" "6,6,6,6,10,10,10,10") (set_attr "conds" "use")] ) Thanks, -Jiangning Patch: diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index c94e743..df6a3df --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -3502,6 +3502,10 @@ try_split (rtx pat, rtx trial, int last) split_branch_probability = INTVAL (XEXP (note, 0)); probability = split_branch_probability; + extract_insn (trial); + if (!constrain_operands (reload_completed)) + return trial; + seq = split_insns (pat, trial); split_branch_probability = -1;