From patchwork Thu Jan 13 15:59:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Liu, Hongtao" X-Patchwork-Id: 49991 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 612B03951C05 for ; Thu, 13 Jan 2022 15:59:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 612B03951C05 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1642089590; bh=BUHoaZJ33aPldoleDIw24HBNd+EeQOXcYjMzRrRxtLE=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=E+EElGSQJhge1DWEG3/ANZ0079P0tzMqMdvNQ5wMt57y57KibNJ96rPyPnKNvCb2R 94sDulws7Fk7qsGDJRTH8IirpGur/wOfg0tD8xyXQLznL7TL+jY/0dM8L+EgTbVCn5 7TEskkMlQsEUfeG90R6N+EOcXdwjYSWbCr8nxkmc= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by sourceware.org (Postfix) with ESMTPS id 224BD39518AF for ; Thu, 13 Jan 2022 15:59:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 224BD39518AF X-IronPort-AV: E=McAfee;i="6200,9189,10225"; a="224019791" X-IronPort-AV: E=Sophos;i="5.88,286,1635231600"; d="scan'208";a="224019791" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2022 07:59:20 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,286,1635231600"; d="scan'208";a="515977206" Received: from scymds01.sc.intel.com ([10.148.94.138]) by orsmga007.jf.intel.com with ESMTP; 13 Jan 2022 07:59:19 -0800 Received: from shliclel320.sh.intel.com (shliclel320.sh.intel.com [10.239.236.50]) by scymds01.sc.intel.com with ESMTP id 20DFxIfr014781; Thu, 13 Jan 2022 07:59:18 -0800 To: gcc-patches@gcc.gnu.org Subject: [PATCH] [i386] Fix ICE of unrecognizable insn. [PR target/104001] Date: Thu, 13 Jan 2022 23:59:18 +0800 Message-Id: <20220113155918.28175-1-hongtao.liu@intel.com> X-Mailer: git-send-email 2.18.1 X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, SPF_HELO_PASS, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: liuhongt via Gcc-patches From: "Liu, Hongtao" Reply-To: liuhongt Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" For define_insn_and_split "*xor2andn": 1. Refine predicate of operands[0] from nonimmediate_operand to register_operand. 2. Remove TARGET_AVX512BW from condition to avoid kmov when TARGET_BMI is not available. 3. Force_reg operands[2]. Bootstrapped and regtested on x86_64-pc-linux-gnu{-m32,}. Ok for trunk? gcc/ChangeLog: PR target/104001 PR target/94790 * config/i386/i386.md (*xor2andn): Refine predicate of operands[0] from nonimmediate_operand to register_operand, remove TARGET_AVX512BW from condition, force_reg operands[2]. gcc/testsuite/ChangeLog: * gcc.target/i386/pr104001.c: New test. --- gcc/config/i386/i386.md | 6 +++--- gcc/testsuite/gcc.target/i386/pr104001.c | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr104001.c diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 9937643a273..7bd4f24aa07 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -10455,7 +10455,7 @@ (define_insn_and_split "*xordi_1_btc" ;; PR target/94790: Optimize a ^ ((a ^ b) & mask) to (~mask & a) | (b & mask) (define_insn_and_split "*xor2andn" - [(set (match_operand:SWI248 0 "nonimmediate_operand") + [(set (match_operand:SWI248 0 "register_operand") (xor:SWI248 (and:SWI248 (xor:SWI248 @@ -10464,8 +10464,7 @@ (define_insn_and_split "*xor2andn" (match_operand:SWI248 3 "nonimmediate_operand")) (match_dup 1))) (clobber (reg:CC FLAGS_REG))] - "(TARGET_BMI || TARGET_AVX512BW) - && ix86_pre_reload_split ()" + "TARGET_BMI && ix86_pre_reload_split ()" "#" "&& 1" [(parallel [(set (match_dup 4) @@ -10486,6 +10485,7 @@ (define_insn_and_split "*xor2andn" (clobber (reg:CC FLAGS_REG))])] { operands[1] = force_reg (mode, operands[1]); + operands[2] = force_reg (mode, operands[2]); operands[3] = force_reg (mode, operands[3]); operands[4] = gen_reg_rtx (mode); operands[5] = gen_reg_rtx (mode); diff --git a/gcc/testsuite/gcc.target/i386/pr104001.c b/gcc/testsuite/gcc.target/i386/pr104001.c new file mode 100644 index 00000000000..bd85aa7145e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr104001.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { scan-assembler-not "kandn" } } */ +/* { dg-final { scan-assembler-times "andn" 1 } } */ + +int b, c, d; +int r; + +void +__attribute__((target("bmi"))) +foo () +{ + r = ((b & ~d) | (c & d)); +} + +void +__attribute__((target("avx512bw"))) +bar () +{ + r = ((b & ~d) | (c & d)); +}