From patchwork Fri May 31 21:28:09 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Segher Boessenkool X-Patchwork-Id: 248020 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]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "localhost", Issuer "www.qmailtoaster.com" (not verified)) by ozlabs.org (Postfix) with ESMTPS id B749F2C0090 for ; Sat, 1 Jun 2013 07:29:25 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; q=dns; s=default; b=K+kHlDPrfUpJ7fMbh2r 7XqZb405klnP0m7hv/O42cwp60ITH4psaG4ZqNfRoFWxJelG1RHe69VZmETypwFG JXs+Pkx9q29BkMoauWquBR5JNs4KjZmT1n7r8Q9A9aYl29mV0eNSd3GuVxDaggGm rSRkYVOHgNgawFgRNRLts2mQ= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; s=default; bh=2hWaFv4pjKDJxHnOg6jvums1/ t0=; b=g4D9IEt+EkgcWoukbRxbp64rs7q5sJA9tc3aYEfMnfLkjqIrAcEDvnXE3 NmPiN62ECZcxwp30n0thGfVlNr0YIhym2CrNZL22V3GeDSCcftEQhbsVwKBdm8zS FLcLE7Uo2Xpsnq2+XpmxqTyJwgxGoy76Pi3aloraF3e1ilylto= Received: (qmail 18018 invoked by alias); 31 May 2013 21:28:51 -0000 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 Received: (qmail 17995 invoked by uid 89); 31 May 2013 21:28:51 -0000 X-Spam-SWARE-Status: No, score=-3.2 required=5.0 tests=AWL, BAYES_00, KHOP_THREADED, RP_MATCHES_RCVD autolearn=ham version=3.3.1 Received: from gcc1-power7.osuosl.org (HELO gcc1-power7.osuosl.org) (140.211.15.137) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Fri, 31 May 2013 21:28:48 +0000 Received: from gcc1-power7.osuosl.org (localhost [127.0.0.1]) by gcc1-power7.osuosl.org (8.14.6/8.14.6) with ESMTP id r4VLSZb3057658; Fri, 31 May 2013 14:28:35 -0700 Received: (from segher@localhost) by gcc1-power7.osuosl.org (8.14.6/8.14.6/Submit) id r4VLSZTe057573; Fri, 31 May 2013 14:28:35 -0700 From: Segher Boessenkool To: gcc-patches@gcc.gnu.org Cc: dje.gcc@gmail.com, Segher Boessenkool Subject: [PATCH 4/6] rs6000: dot for var_shift_rotate/var_delayed_compare Date: Fri, 31 May 2013 14:28:09 -0700 Message-Id: In-Reply-To: <14577e1c6b530d6f4feda94ba84896983b05513b.1370028541.git.segher@kernel.crashing.org> References: <14577e1c6b530d6f4feda94ba84896983b05513b.1370028541.git.segher@kernel.crashing.org> In-Reply-To: <14577e1c6b530d6f4feda94ba84896983b05513b.1370028541.git.segher@kernel.crashing.org> References: <14577e1c6b530d6f4feda94ba84896983b05513b.1370028541.git.segher@kernel.crashing.org> This changes all scheduling descriptions to treat insn type var_shift_rotate with dot=yes the same as var_delayed_compare is treated, and to require dot=no for var_shift_rotate that already was handled. 2013-05-31 Segher Boessenkool gcc/ * config/rs6000/integer.mdm (ashl3, lshr3): Delete comment. * config/rs6000/integer.md: Regenerate. * config/rs6000/40x.md: Require dot=no for type=var_shift_rotate; where type=var_delayed_compare, also handle type=var_shift_rotate dot=yes. * config/rs6000/440.md: Ditto. * config/rs6000/476.md: Ditto. * config/rs6000/601.md: Ditto. * config/rs6000/603.md: Ditto. * config/rs6000/6xx.md: Ditto. * config/rs6000/7450.md: Ditto. * config/rs6000/7xx.md: Ditto. * config/rs6000/cell.md: Ditto. * config/rs6000/mpc.md: Ditto. * config/rs6000/power4.md: Ditto. * config/rs6000/power5.md: Ditto. * config/rs6000/power6.md: Ditto. * config/rs6000/power7.md: Ditto. * config/rs6000/rs64.md: Ditto. * config/rs6000/titan.md: Ditto. * config/rs6000/rs6000.c (is_cracked_insn): Add missing TYPE_VAR_DELAYED_COMPARE case. Also handle TYPE_VAR_SHIFT_ROTATE. (insn_must_be_first_in_group): Add missing TYPE_VAR_DELAYED_COMPARE case. (insn_must_be_last_in_group): Ditto. --- gcc/config/rs6000/40x.md | 12 ++++++++---- gcc/config/rs6000/440.md | 6 ++++-- gcc/config/rs6000/476.md | 10 +++++++--- gcc/config/rs6000/601.md | 11 +++++++---- gcc/config/rs6000/603.md | 12 ++++++++---- gcc/config/rs6000/6xx.md | 12 ++++++++---- gcc/config/rs6000/7450.md | 12 ++++++++---- gcc/config/rs6000/7xx.md | 12 ++++++++---- gcc/config/rs6000/cell.md | 25 +++++++++++++++---------- gcc/config/rs6000/integer.md | 12 ++++++------ gcc/config/rs6000/integer.mdm | 4 ++-- gcc/config/rs6000/mpc.md | 12 ++++++++---- gcc/config/rs6000/power4.md | 9 ++++++--- gcc/config/rs6000/power5.md | 10 +++++++--- gcc/config/rs6000/power6.md | 5 ++++- gcc/config/rs6000/power7.md | 10 +++++++--- gcc/config/rs6000/rs6000.c | 5 +++++ gcc/config/rs6000/rs64.md | 12 ++++++++---- gcc/config/rs6000/titan.md | 4 +++- 19 files changed, 129 insertions(+), 66 deletions(-) diff --git a/gcc/config/rs6000/40x.md b/gcc/config/rs6000/40x.md index ab0cf06..2054e65 100644 --- a/gcc/config/rs6000/40x.md +++ b/gcc/config/rs6000/40x.md @@ -37,8 +37,10 @@ (define_insn_reservation "ppc403-store" 2 "iu_40x") (define_insn_reservation "ppc403-integer" 1 - (and (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\ - var_shift_rotate,cntlz,exts,isel") + (and (ior (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\ + cntlz,exts,isel") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "ppc403,ppc405")) "iu_40x") @@ -53,8 +55,10 @@ (define_insn_reservation "ppc403-three" 1 "iu_40x,iu_40x,iu_40x") (define_insn_reservation "ppc403-compare" 3 - (and (eq_attr "type" "cmp,fast_compare,compare,delayed_compare,\ - var_delayed_compare") + (and (ior (eq_attr "type" "cmp,fast_compare,compare,delayed_compare,\ + var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "ppc403,ppc405")) "iu_40x,nothing,bpu_40x") diff --git a/gcc/config/rs6000/440.md b/gcc/config/rs6000/440.md index fe70be0..b4abab5 100644 --- a/gcc/config/rs6000/440.md +++ b/gcc/config/rs6000/440.md @@ -54,8 +54,10 @@ (define_insn_reservation "ppc440-fpstore" 3 "ppc440_issue,ppc440_l_pipe") (define_insn_reservation "ppc440-integer" 1 - (and (eq_attr "type" "integer,insert_word,insert_dword,shift,\ - trap,var_shift_rotate,cntlz,exts,isel") + (and (ior (eq_attr "type" "integer,insert_word,insert_dword,shift,\ + trap,cntlz,exts,isel") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "ppc440")) "ppc440_issue,ppc440_i_pipe|ppc440_j_pipe") diff --git a/gcc/config/rs6000/476.md b/gcc/config/rs6000/476.md index 4254659..5448ab2 100644 --- a/gcc/config/rs6000/476.md +++ b/gcc/config/rs6000/476.md @@ -64,7 +64,9 @@ (define_insn_reservation "ppc476-fpstore" 4 ppc476_lj_pipe") (define_insn_reservation "ppc476-simple-integer" 1 - (and (eq_attr "type" "integer,insert_word,var_shift_rotate,exts,shift") + (and (ior (eq_attr "type" "integer,insert_word,exts,shift") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "ppc476")) "ppc476_issue,\ ppc476_i_pipe|ppc476_lj_pipe") @@ -76,8 +78,10 @@ (define_insn_reservation "ppc476-complex-integer" 1 ppc476_i_pipe") (define_insn_reservation "ppc476-compare" 4 - (and (eq_attr "type" "compare,delayed_compare,fast_compare,mfcr,mfcrf,\ - mtcr,mfjmpr,mtjmpr,var_delayed_compare") + (and (ior (eq_attr "type" "compare,delayed_compare,fast_compare,mfcr,mfcrf,\ + mtcr,mfjmpr,mtjmpr,var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "ppc476")) "ppc476_issue,\ ppc476_i_pipe") diff --git a/gcc/config/rs6000/601.md b/gcc/config/rs6000/601.md index d9170dc..4a7dc3f 100644 --- a/gcc/config/rs6000/601.md +++ b/gcc/config/rs6000/601.md @@ -46,8 +46,10 @@ (define_insn_reservation "ppc601-fpstore" 3 "iu_ppc601+fpu_ppc601") (define_insn_reservation "ppc601-integer" 1 - (and (eq_attr "type" "integer,insert_word,insert_dword,shift,\ - trap,var_shift_rotate,cntlz,exts,isel") + (and (ior (eq_attr "type" "integer,insert_word,insert_dword,shift,\ + trap,cntlz,exts,isel") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "ppc601")) "iu_ppc601") @@ -74,8 +76,9 @@ (define_insn_reservation "ppc601-idiv" 36 ; compare executes on integer unit, but feeds insns which ; execute on the branch unit. (define_insn_reservation "ppc601-compare" 3 - (and (eq_attr "type" "cmp,compare,delayed_compare,\ - var_delayed_compare") + (and (ior (eq_attr "type" "cmp,compare,delayed_compare,var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "ppc601")) "iu_ppc601,nothing,bpu_ppc601") diff --git a/gcc/config/rs6000/603.md b/gcc/config/rs6000/603.md index 00627f9..05f2599 100644 --- a/gcc/config/rs6000/603.md +++ b/gcc/config/rs6000/603.md @@ -58,8 +58,10 @@ (define_insn_reservation "ppc603-storec" 8 "lsu_603") (define_insn_reservation "ppc603-integer" 1 - (and (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\ - var_shift_rotate,cntlz,exts,isel") + (and (ior (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\ + cntlz,exts,isel") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "ppc603")) "iu_603") @@ -90,8 +92,10 @@ (define_insn_reservation "ppc603-idiv" 37 "iu_603*37") (define_insn_reservation "ppc603-compare" 3 - (and (eq_attr "type" "cmp,fast_compare,compare,delayed_compare,\ - var_delayed_compare") + (and (ior (eq_attr "type" "cmp,fast_compare,compare,delayed_compare,\ + var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "ppc603")) "iu_603,nothing,bpu_603") diff --git a/gcc/config/rs6000/6xx.md b/gcc/config/rs6000/6xx.md index 361989d..7c1528a 100644 --- a/gcc/config/rs6000/6xx.md +++ b/gcc/config/rs6000/6xx.md @@ -73,8 +73,10 @@ (define_insn_reservation "ppc630-llsc" 4 "lsu_6xx") (define_insn_reservation "ppc604-integer" 1 - (and (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\ - var_shift_rotate,cntlz,exts,isel") + (and (ior (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\ + cntlz,exts,isel") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "ppc604,ppc604e,ppc620,ppc630")) "iu1_6xx|iu2_6xx") @@ -139,8 +141,10 @@ (define_insn_reservation "ppc620-ldiv" 37 "mciu_6xx*36") (define_insn_reservation "ppc604-compare" 3 - (and (eq_attr "type" "cmp,fast_compare,compare,delayed_compare,\ - var_delayed_compare") + (and (ior (eq_attr "type" "cmp,fast_compare,compare,delayed_compare,\ + var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "ppc604,ppc604e,ppc620,ppc630")) "(iu1_6xx|iu2_6xx)") diff --git a/gcc/config/rs6000/7450.md b/gcc/config/rs6000/7450.md index 59fe15f..46dcc81 100644 --- a/gcc/config/rs6000/7450.md +++ b/gcc/config/rs6000/7450.md @@ -74,8 +74,10 @@ (define_insn_reservation "ppc7450-sync" 35 "ppc7450_du,lsu_7450") (define_insn_reservation "ppc7450-integer" 1 - (and (eq_attr "type" "integer,insert_word,insert_dword,shift,\ - trap,var_shift_rotate,cntlz,exts,isel") + (and (ior (eq_attr "type" "integer,insert_word,insert_dword,shift,\ + trap,cntlz,exts,isel") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "ppc7450")) "ppc7450_du,iu1_7450|iu2_7450|iu3_7450") @@ -106,8 +108,10 @@ (define_insn_reservation "ppc7450-idiv" 23 "ppc7450_du,mciu_7450*23") (define_insn_reservation "ppc7450-compare" 2 - (and (eq_attr "type" "cmp,fast_compare,compare,delayed_compare,\ - var_delayed_compare") + (and (ior (eq_attr "type" "cmp,fast_compare,compare,delayed_compare,\ + var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "ppc7450")) "ppc7450_du,(iu1_7450|iu2_7450|iu3_7450)") diff --git a/gcc/config/rs6000/7xx.md b/gcc/config/rs6000/7xx.md index 32dc20b..2085e79 100644 --- a/gcc/config/rs6000/7xx.md +++ b/gcc/config/rs6000/7xx.md @@ -64,8 +64,10 @@ (define_insn_reservation "ppc750-storec" 8 "ppc750_du,lsu_7xx") (define_insn_reservation "ppc750-integer" 1 - (and (eq_attr "type" "integer,insert_word,insert_dword,shift,\ - trap,var_shift_rotate,cntlz,exts,isel") + (and (ior (eq_attr "type" "integer,insert_word,insert_dword,shift,\ + trap,cntlz,exts,isel") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "ppc750,ppc7400")) "ppc750_du,iu1_7xx|iu2_7xx") @@ -100,8 +102,10 @@ (define_insn_reservation "ppc750-idiv" 19 "ppc750_du,iu1_7xx*19") (define_insn_reservation "ppc750-compare" 2 - (and (eq_attr "type" "cmp,fast_compare,compare,delayed_compare,\ - var_delayed_compare") + (and (ior (eq_attr "type" "cmp,fast_compare,compare,delayed_compare,\ + var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "ppc750,ppc7400")) "ppc750_du,(iu1_7xx|iu2_7xx)") diff --git a/gcc/config/rs6000/cell.md b/gcc/config/rs6000/cell.md index c3ee53d..b2ea065 100644 --- a/gcc/config/rs6000/cell.md +++ b/gcc/config/rs6000/cell.md @@ -155,8 +155,9 @@ (define_insn_reservation "cell-vecstore" 1 ;; Integer latency is 2 cycles (define_insn_reservation "cell-integer" 2 - (and (eq_attr "type" "integer,insert_dword,shift,trap,\ - var_shift_rotate,cntlz,exts,isel") + (and (ior (eq_attr "type" "integer,insert_dword,shift,trap,cntlz,exts,isel") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "cell")) "slot01,fxu_cell") @@ -186,17 +187,21 @@ (define_insn_reservation "cell-cmp" 1 ;; add, addo, sub, subo, alter cr0, rldcli, rlwinm (define_insn_reservation "cell-fast-cmp" 2 - (and (and (eq_attr "type" "fast_compare,delayed_compare,compare,\ - var_delayed_compare") - (eq_attr "cpu" "cell")) - (eq_attr "cell_micro" "not")) + (and (ior (eq_attr "type" "fast_compare,delayed_compare,compare,\ + var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) + (eq_attr "cpu" "cell") + (eq_attr "cell_micro" "not")) "slot01,fxu_cell") (define_insn_reservation "cell-cmp-microcoded" 9 - (and (and (eq_attr "type" "fast_compare,delayed_compare,compare,\ - var_delayed_compare") - (eq_attr "cpu" "cell")) - (eq_attr "cell_micro" "always")) + (and (ior (eq_attr "type" "fast_compare,delayed_compare,compare,\ + var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) + (eq_attr "cpu" "cell") + (eq_attr "cell_micro" "always")) "slot0+slot1,fxu_cell,fxu_cell*7") ;; mulld diff --git a/gcc/config/rs6000/integer.md b/gcc/config/rs6000/integer.md index e1520bc..f0b55e1 100644 --- a/gcc/config/rs6000/integer.md +++ b/gcc/config/rs6000/integer.md @@ -38,7 +38,7 @@ (define_insn "ashl3" (match_operand:SI 2 "gpc_reg_operand" "r")))] "" "sl %0,%1,%2" - [(set_attr "type" "var_shift_rotate") ; var_delayed_compare + [(set_attr "type" "var_shift_rotate") ]) (define_insn "*ashl3_dot" @@ -54,7 +54,7 @@ (define_insn "*ashl3_dot" #" [(set_attr "length" "4,8") (set_attr "dot" "yes,no") - (set_attr "type" "var_shift_rotate") ; var_delayed_compare + (set_attr "type" "var_shift_rotate") ]) (define_split @@ -89,7 +89,7 @@ (define_insn "*ashl3_dot2" #" [(set_attr "length" "4,8") (set_attr "dot" "yes,no") - (set_attr "type" "var_shift_rotate") ; var_delayed_compare + (set_attr "type" "var_shift_rotate") ]) (define_split @@ -200,7 +200,7 @@ (define_insn "lshr3" (match_operand:SI 2 "gpc_reg_operand" "r")))] "" "sr %0,%1,%2" - [(set_attr "type" "var_shift_rotate") ; var_delayed_compare + [(set_attr "type" "var_shift_rotate") ]) (define_insn "*lshr3_dot" @@ -216,7 +216,7 @@ (define_insn "*lshr3_dot" #" [(set_attr "length" "4,8") (set_attr "dot" "yes,no") - (set_attr "type" "var_shift_rotate") ; var_delayed_compare + (set_attr "type" "var_shift_rotate") ]) (define_split @@ -251,7 +251,7 @@ (define_insn "*lshr3_dot2" #" [(set_attr "length" "4,8") (set_attr "dot" "yes,no") - (set_attr "type" "var_shift_rotate") ; var_delayed_compare + (set_attr "type" "var_shift_rotate") ]) (define_split diff --git a/gcc/config/rs6000/integer.mdm b/gcc/config/rs6000/integer.mdm index bb426b3..d972f35 100644 --- a/gcc/config/rs6000/integer.mdm +++ b/gcc/config/rs6000/integer.mdm @@ -35,7 +35,7 @@ "" "mode == Pmode && rs6000_gen_cell_microcode" "sl %0,%1,%2" - [(set_attr "type" "var_shift_rotate") ; var_delayed_compare + [(set_attr "type" "var_shift_rotate") ]) (define_dot_insn "*ashl3_imm" @@ -55,7 +55,7 @@ "" "mode == Pmode && rs6000_gen_cell_microcode" "sr %0,%1,%2" - [(set_attr "type" "var_shift_rotate") ; var_delayed_compare + [(set_attr "type" "var_shift_rotate") ]) (define_dot_insn "*lshr3_imm" diff --git a/gcc/config/rs6000/mpc.md b/gcc/config/rs6000/mpc.md index 381db5b..19a461f 100644 --- a/gcc/config/rs6000/mpc.md +++ b/gcc/config/rs6000/mpc.md @@ -42,8 +42,10 @@ (define_insn_reservation "mpccore-fpload" 2 "lsu_mpc") (define_insn_reservation "mpccore-integer" 1 - (and (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\ - var_shift_rotate,cntlz,exts,isel") + (and (ior (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\ + cntlz,exts,isel") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "mpccore")) "iu_mpc") @@ -69,8 +71,10 @@ (define_insn_reservation "mpccore-idiv" 6 "mciu_mpc*6") (define_insn_reservation "mpccore-compare" 3 - (and (eq_attr "type" "cmp,fast_compare,compare,delayed_compare,\ - var_delayed_compare") + (and (ior (eq_attr "type" "cmp,fast_compare,compare,delayed_compare,\ + var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "mpccore")) "iu_mpc,nothing,bpu_mpc") diff --git a/gcc/config/rs6000/power4.md b/gcc/config/rs6000/power4.md index 468cc60..72a3355 100644 --- a/gcc/config/rs6000/power4.md +++ b/gcc/config/rs6000/power4.md @@ -185,8 +185,9 @@ (define_insn_reservation "power4-llsc" 11 ; Integer latency is 2 cycles (define_insn_reservation "power4-integer" 2 - (and (eq_attr "type" "integer,insert_dword,shift,trap,\ - var_shift_rotate,cntlz,exts,isel") + (and (ior (eq_attr "type" "integer,insert_dword,shift,trap,cntlz,exts,isel") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "power4")) "iq_power4") @@ -226,7 +227,9 @@ (define_insn_reservation "power4-cmp" 3 "iq_power4") (define_insn_reservation "power4-compare" 2 - (and (eq_attr "type" "compare,delayed_compare,var_delayed_compare") + (and (ior (eq_attr "type" "compare,delayed_compare,var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "power4")) "(du1_power4+du2_power4|du2_power4+du3_power4|du3_power4+du4_power4),\ ((iu1_power4,iu2_power4)\ diff --git a/gcc/config/rs6000/power5.md b/gcc/config/rs6000/power5.md index 0cd9d1a..54853d7 100644 --- a/gcc/config/rs6000/power5.md +++ b/gcc/config/rs6000/power5.md @@ -141,8 +141,10 @@ (define_insn_reservation "power5-llsc" 11 ; Integer latency is 2 cycles (define_insn_reservation "power5-integer" 2 - (and (eq_attr "type" "integer,insert_dword,shift,trap,\ - var_shift_rotate,cntlz,exts,isel,popcnt") + (and (ior (eq_attr "type" "integer,insert_dword,shift,trap,\ + cntlz,exts,isel,popcnt") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "power5")) "iq_power5") @@ -179,7 +181,9 @@ (define_insn_reservation "power5-cmp" 3 "iq_power5") (define_insn_reservation "power5-compare" 2 - (and (eq_attr "type" "compare,delayed_compare,var_delayed_compare") + (and (ior (eq_attr "type" "compare,delayed_compare,var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "power5")) "du1_power5+du2_power5,iu1_power5,iu2_power5") diff --git a/gcc/config/rs6000/power6.md b/gcc/config/rs6000/power6.md index ed33374..f4082e9 100644 --- a/gcc/config/rs6000/power6.md +++ b/gcc/config/rs6000/power6.md @@ -261,6 +261,7 @@ (define_bypass 1 "power6-cntlz" (define_insn_reservation "power6-var-rotate" 4 (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no") (eq_attr "cpu" "power6")) "FXU_power6") @@ -327,7 +328,9 @@ (define_insn_reservation "power6-delayed-compare" 2 ; N/A "FXU_power6") (define_insn_reservation "power6-var-delayed-compare" 4 - (and (eq_attr "type" "var_delayed_compare") + (and (ior (eq_attr "type" "var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "power6")) "FXU_power6") diff --git a/gcc/config/rs6000/power7.md b/gcc/config/rs6000/power7.md index 52db123..7b999d1 100644 --- a/gcc/config/rs6000/power7.md +++ b/gcc/config/rs6000/power7.md @@ -149,8 +149,10 @@ (define_insn_reservation "power7-sync" 11 ; FX Unit (define_insn_reservation "power7-integer" 1 - (and (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\ - var_shift_rotate,exts,isel,popcnt") + (and (ior (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\ + exts,isel,popcnt") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "power7")) "DU_power7,FXU_power7") @@ -175,7 +177,9 @@ (define_insn_reservation "power7-cmp" 1 "DU_power7,FXU_power7") (define_insn_reservation "power7-compare" 2 - (and (eq_attr "type" "compare,delayed_compare,var_delayed_compare") + (and (ior (eq_attr "type" "compare,delayed_compare,var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "power7")) "DU2F_power7,FXU_power7,FXU_power7") diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index cb68760..e0d1112 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -23467,10 +23467,13 @@ is_cracked_insn (rtx insn) || type == TYPE_FPLOAD_UX || type == TYPE_FPSTORE_UX || type == TYPE_LOAD_EXT || type == TYPE_DELAYED_CR || type == TYPE_COMPARE || type == TYPE_DELAYED_COMPARE + || type == TYPE_VAR_DELAYED_COMPARE || type == TYPE_IMUL_COMPARE || type == TYPE_LMUL_COMPARE || type == TYPE_IDIV || type == TYPE_LDIV || type == TYPE_INSERT_WORD) return true; + if (get_attr_dot (insn) == DOT_YES && type == TYPE_VAR_SHIFT_ROTATE) + return true; } return false; @@ -24307,6 +24310,7 @@ insn_must_be_first_in_group (rtx insn) case TYPE_IDIV: case TYPE_INSERT_WORD: case TYPE_DELAYED_COMPARE: + case TYPE_VAR_DELAYED_COMPARE: case TYPE_IMUL_COMPARE: case TYPE_LMUL_COMPARE: case TYPE_FPCOMPARE: @@ -24413,6 +24417,7 @@ insn_must_be_last_in_group (rtx insn) case TYPE_LMUL: case TYPE_IDIV: case TYPE_DELAYED_COMPARE: + case TYPE_VAR_DELAYED_COMPARE: case TYPE_IMUL_COMPARE: case TYPE_LMUL_COMPARE: case TYPE_FPCOMPARE: diff --git a/gcc/config/rs6000/rs64.md b/gcc/config/rs6000/rs64.md index 9b96450..546f0cb 100644 --- a/gcc/config/rs6000/rs64.md +++ b/gcc/config/rs6000/rs64.md @@ -46,8 +46,10 @@ (define_insn_reservation "rs64a-llsc" 2 "lsu_rs64") (define_insn_reservation "rs64a-integer" 1 - (and (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\ - var_shift_rotate,cntlz,exts,isel") + (and (ior (eq_attr "type" "integer,insert_word,insert_dword,shift,trap,\ + cntlz,exts,isel") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "rs64a")) "iu_rs64") @@ -92,8 +94,10 @@ (define_insn_reservation "rs64a-ldiv" 66 "mciu_rs64*66") (define_insn_reservation "rs64a-compare" 3 - (and (eq_attr "type" "cmp,fast_compare,compare,\ - delayed_compare,var_delayed_compare") + (and (ior (eq_attr "type" "cmp,fast_compare,compare,\ + delayed_compare,var_delayed_compare") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "yes"))) (eq_attr "cpu" "rs64a")) "iu_rs64,nothing,bpu_rs64") diff --git a/gcc/config/rs6000/titan.md b/gcc/config/rs6000/titan.md index 138b712..c3830f1 100644 --- a/gcc/config/rs6000/titan.md +++ b/gcc/config/rs6000/titan.md @@ -55,7 +55,9 @@ (define_insn_reservation "titan_mulhw" 4 (define_bypass 2 "titan_mulhw" "titan_mulhw") (define_insn_reservation "titan_fxu_shift_and_rotate" 2 - (and (eq_attr "type" "insert_word,shift,var_shift_rotate,cntlz") + (and (ior (eq_attr "type" "insert_word,shift,cntlz") + (and (eq_attr "type" "var_shift_rotate") + (eq_attr "dot" "no"))) (eq_attr "cpu" "titan")) "titan_issue,titan_fxu_sh,nothing*2,titan_fxu_wb")