From patchwork Thu Apr 28 19:33:08 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Edelsohn X-Patchwork-Id: 616391 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.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3qwn7D6z84z9t8g for ; Fri, 29 Apr 2016 05:33:28 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=oQkbysPl; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:date:message-id:subject:from:to:content-type; q= dns; s=default; b=eNdp8h4cOBhLfmhwpncqank5vZQ1ibpgBP1hvH7vSPW5F+ qrpKu6quZDow2Y32emJ8QUe6Ls422hm3lN15Db3IJEyZDDjui3NHjz0dujVL8+8+ mSFg/VdzncX7lQmWq9tw96b8oINIc7bGfIP72lcGTH/LS9pHwKTcpWPIECrGk= 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 :mime-version:date:message-id:subject:from:to:content-type; s= default; bh=/j26CWhU8vWLRMOudNFu3zu6bUM=; b=oQkbysPl/yFW8JarhSQs tslAXyzahvJ/IDiCPW5zQphMZBvx1+d/3tgukdiJJdNhIErvHtPcKrJC2SpsPx7+ I60yWByPhrbtnnQEo5+GyOdKPzUSkgQ4m1LYnoBCO8AoPlpWuT+Pn/AAhK0nnYKK LNqY6nu5wDA6NObJeeK12Cc= Received: (qmail 93224 invoked by alias); 28 Apr 2016 19:33:21 -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 93205 invoked by uid 89); 28 Apr 2016 19:33:20 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=HImode, himode, 7117 X-HELO: mail-oi0-f49.google.com Received: from mail-oi0-f49.google.com (HELO mail-oi0-f49.google.com) (209.85.218.49) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 28 Apr 2016 19:33:10 +0000 Received: by mail-oi0-f49.google.com with SMTP id x201so95279924oif.3 for ; Thu, 28 Apr 2016 12:33:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to; bh=HSb0OpDTpt5ASXHVnbHs69aL+dGx42eFy85GQRdwQo0=; b=Gyzhy3nPOxq9JO3nIJJBO+PLQfw5FRxPADY3OBwEwxiTDUHq9SGgdnuFLbDt+Nqmxs HiuoGLpYA1n5UYOIDWflosW3DUucu5VQUznl7xrbw0LVvU+i5W7fQsppsQ3iUw71Iuye GV3bouTPxrpEniuM2oZaYOSo5ki7bgm0BZM8D9way2g/VOJeKw70zH9yWBY8gpnuSijY DPSEmBpt7rZQJclFpEbO8kXW9Gv/WkRptyJDUZADWBN21R1VPJouNzm9h57oDvcrZQVW wnVoAzNQKcRb/db6J7YRTcbr5YFmjca+WSr8A+T4bypGrhkdEb9YQ34vFnnTwmYTT64u MgLA== X-Gm-Message-State: AOPr4FXz34iUzMam0fOh2NKLD3MG7KiMLpGa4XiqiONPjdSU5GQfKl3jS6Ou57exoVJjkwMK6Pee4WTLdnEDBw== MIME-Version: 1.0 X-Received: by 10.202.60.194 with SMTP id j185mr6805684oia.197.1461871988582; Thu, 28 Apr 2016 12:33:08 -0700 (PDT) Received: by 10.157.47.154 with HTTP; Thu, 28 Apr 2016 12:33:08 -0700 (PDT) Date: Thu, 28 Apr 2016 15:33:08 -0400 Message-ID: Subject: [PATCH] Fix PR target/69810 (GCC 7) From: David Edelsohn To: GCC Patches This PR was fixed earlier with a patch that was deemed safe for GCC 6 through the removal of splitters for zero extend and sign extend to HImode. Now that trunk has opened for GCC 7 development, the following patch restores the splitters and fixes the bug in the more aggressive manner originally proposed: disallow patterns for extension to HImode by removing HImode from the iterator. The PowerPC architecture does not provide any instructions that directly operate on HImode, so it's better for GCC to operate on it as SUBREG except for loads and stores, as this patch accomplishes. Bootstrapped on powerpc-ibm-aix7.1.0.0. Thanks, David PR target/69810 * config/rs6000/rs6000.md (EXTQI): Don't allow extension to HImode. (zero_extendqi2_dot): Revert earlier conversion from define_insn_and_split to define_insn. (zero_extendqi2_dot2): Same. (extendqi2_dot): Same. (extendqi2_dot2): Same. (const_int 0))) @@ -719,12 +719,19 @@ "rs6000_gen_cell_microcode" "@ andi. %0,%1,0xff - rlwinm %0,%1,0,0xff\;cmpwi %2,%0,0" + #" + "&& reload_completed && cc_reg_not_cr0_operand (operands[2], CCmode)" + [(set (match_dup 0) + (zero_extend:EXTQI (match_dup 1))) + (set (match_dup 2) + (compare:CC (match_dup 0) + (const_int 0)))] + "" [(set_attr "type" "logical") (set_attr "dot" "yes") (set_attr "length" "4,8")]) -(define_insn "*zero_extendqi2_dot2" +(define_insn_and_split "*zero_extendqi2_dot2" [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y") (compare:CC (zero_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r, r")) (const_int 0))) @@ -733,7 +740,14 @@ "rs6000_gen_cell_microcode" "@ andi. %0,%1,0xff - rlwinm %0,%1,0,0xff\;cmpwi %2,%0,0" + #" + "&& reload_completed && cc_reg_not_cr0_operand (operands[2], CCmode)" + [(set (match_dup 0) + (zero_extend:EXTQI (match_dup 1))) + (set (match_dup 2) + (compare:CC (match_dup 0) + (const_int 0)))] + "" [(set_attr "type" "logical") (set_attr "dot" "yes") (set_attr "length" "4,8")]) @@ -851,7 +865,7 @@ "extsb %0,%1" [(set_attr "type" "exts")]) -(define_insn "*extendqi2_dot" +(define_insn_and_split "*extendqi2_dot" [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y") (compare:CC (sign_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r, r")) (const_int 0))) @@ -859,12 +873,19 @@ "rs6000_gen_cell_microcode" "@ extsb. %0,%1 - extsb %0,%1\;cmpwi %2,%0,0" + #" + "&& reload_completed && cc_reg_not_cr0_operand (operands[2], CCmode)" + [(set (match_dup 0) + (sign_extend:EXTQI (match_dup 1))) + (set (match_dup 2) + (compare:CC (match_dup 0) + (const_int 0)))] + "" [(set_attr "type" "exts") (set_attr "dot" "yes") (set_attr "length" "4,8")]) -(define_insn "*extendqi2_dot2" +(define_insn_and_split "*extendqi2_dot2" [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y") (compare:CC (sign_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r, r")) (const_int 0))) @@ -873,7 +894,14 @@ "rs6000_gen_cell_microcode" "@ extsb. %0,%1 - extsb %0,%1\;cmpwi %2,%0,0" + #" + "&& reload_completed && cc_reg_not_cr0_operand (operands[2], CCmode)" + [(set (match_dup 0) + (sign_extend:EXTQI (match_dup 1))) + (set (match_dup 2) + (compare:CC (match_dup 0) + (const_int 0)))] + "" [(set_attr "type" "exts") (set_attr "dot" "yes") (set_attr "length" "4,8")]) Index: rs6000.md =================================================================== --- rs6000.md (revision 235573) +++ rs6000.md (working copy) @@ -322,7 +322,7 @@ (define_mode_iterator INT1 [QI HI SI (DI "TARGET_POWERPC64")]) ; Everything we can extend QImode to. -(define_mode_iterator EXTQI [HI SI (DI "TARGET_POWERPC64")]) +(define_mode_iterator EXTQI [SI (DI "TARGET_POWERPC64")]) ; Everything we can extend HImode to. (define_mode_iterator EXTHI [SI (DI "TARGET_POWERPC64")]) @@ -711,7 +711,7 @@ rlwinm %0,%1,0,0xff" [(set_attr "type" "load,shift")]) -(define_insn "*zero_extendqi2_dot" +(define_insn_and_split "*zero_extendqi2_dot" [(set (match_operand:CC 2 "cc_reg_operand" "=x,?y") (compare:CC (zero_extend:EXTQI (match_operand:QI 1 "gpc_reg_operand" "r, r"))