From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2053.outbound.protection.outlook.com [40.107.22.53]) by sourceware.org (Postfix) with ESMTPS id 24C033858D35 for ; Sun, 25 Jun 2023 13:35:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 24C033858D35 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kqE8qky8nkIvnvQSd14y02rLhggV0dGTZlrKQMdBi2hs0wK1vm/pXujlQ0TjYT8tH4ctSDmBAMdh+AwGhY3CoOfL6sjaGmyWh6RsJzEb2rlOJeh85cSlta38kJ5FAR31W4iPqjTG6mJtpRMkK2+UrKlyTCA6KA7JBXcvCljgcJDYcwH8ObGgNKsjRMoav5c6S4dahMTn4t+iQp0Gq7h4grh/Zo2TZ3wqaLeMYL27yfoPGHB33h3fhJ3+PNEdZsshvQAwDok+8aqdSfgEMh0kUO9cRlj+jPOtBohYyCppDnJg0hv+0LtnEEc/TnsOW23M7ctk69EAjywO393U/HCoVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fNz8an2TdUP+U28d2sRby5BWGmrN0Q4R2SrUjU++oxg=; b=hraHKMCyZveJN+nHKqvE7EgyWIVoHILl3Qshx2g1JU4I9bf+2fld7jQgqW6oqtEZf8dPGLamBaF7mopdcXaFnGC8wBaFdt0TVK3CFfqaZWCtfO2u1dOqCmvaCM9EsV6sxLPkzqzJTNQN1zfxmaF2NmC7UikwfTfF4ircbWO//mLNWj57rLDsCbfeOhEdYcICpGFQ4iRE5j3OIeIz8frNAijaXzGnaYappY4GsHYLJPbspqb4RbBWPO4ox/6tqDSwzY1mgT0A2fibB1fMokVV1/d1OJDlLkg2Q2EixlUy+mxsqiDKJ+JTMgylUeq5l/lAvthPopGUpByciQ3M0WBGbA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fNz8an2TdUP+U28d2sRby5BWGmrN0Q4R2SrUjU++oxg=; b=0/ENZ+Lw++mQkFLNf5FKI/wHkkfnM9SIYFNankjmupebqfSH3/Hsj6wkFNsivKcB19nTHCMy6Y9MRkgRQzanYjkGFCcou3yhX2blfnyoJHZe4hh3TYIJc7k2iYy6Vcjtm2/Um+vfNMkDcUNvw8FWt5ndHVhcGH1pOF9p9b8b72NTLAZZTt3CNiJ86fL3UaPk39/pwgHCXHpL3IeRIzOsrV86WhAAGg7mOHiZOzitrk/TIMAulIZB5DiIgZELdSlUfSrd3Px8hFAl4XSGv6/RppZrHKG4goVvLoL+/s8w8zlxOkpgVkcnfwFnZ6sSB5VnjzJrO2qTx/iM79pW7mKGBQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Received: from DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) by AM9PR04MB8618.eurprd04.prod.outlook.com (2603:10a6:20b:439::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6521.26; Sun, 25 Jun 2023 13:35:47 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::9bd3:48c9:ff58:9880]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::9bd3:48c9:ff58:9880%4]) with mapi id 15.20.6521.026; Sun, 25 Jun 2023 13:35:47 +0000 Message-ID: <49e10641-7a2f-440a-df07-562aaf265ecc@suse.com> Date: Sun, 25 Jun 2023 15:35:44 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: [PATCH 1/5] x86: use VPTERNLOG for further bitwise two-vector operations To: Hongtao Liu Cc: "gcc-patches@gcc.gnu.org" , Hongtao Liu , Kirill Yukhin References: <04f99abe-a563-d093-23b7-4abf0f91633d@suse.com> <457ffad0-9ecd-3e19-f5ab-6153ce4b8bad@suse.com> <615edb3e-3dda-4e3f-9b71-43738a268afd@suse.com> Content-Language: en-US From: Jan Beulich In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: FR3P281CA0039.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::11) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|AM9PR04MB8618:EE_ X-MS-Office365-Filtering-Correlation-Id: 5f62ba42-0de6-48c5-f067-08db7581157b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ppd9nVqBTawkKtsG7YvVxca52MMRCkbWhlGL5la42flkfJKmO7eynZpJjekVwd/i6mblOfPeg+HTUHc6yVTlT4/WpMdxPS/6xchLRhQ8Em/6aurHFPzbcFvIiQZCcfiu/v6jgAdXYxJPLdxlW2PdbqA7qeiyw+zos7Io7OlpELERZfPqeQE5dakjgdrZwYD7hYaSEYrjUQz6352fMo11xzqViLOSNW1Yj1K6mP+OV2+1pocB/MB3B2c+RX3IBuM+6WMZf2QhpRXpypa+yvL2ezKm6a4O/DozbbFFhknyrHbMFJbc9hFI+VCtMT/oAjFi9h+raqbf2RmPfUM6FBTDGD5+SqjQa3c+Q87nGechdmV17AEfmrVj0bviREzPZd5/SzH8JPRlQrFF6wRt1CMwUIB2ZleV3v2/AggZf/aXcQWKDAn3y7aUy5nPMFiTrhhDkU3vr1eLGCSE2az3pnlhVUkXAQyurrnmQUBNvF2ndo+ylSWQh2/9Zl9maSQi7N1rb2LtxWugblUeoZZwA13qAFbcscL0HwpV7aV6irtVQ6d16wZWFGExw1eY0f1I4pVj7Gt+WqXFet+mnHX6U1hdTt1tyiE3uiOFvLH/LOCV/raQwW7thfhuzINBkJoi7VzppC80EvVjOWCdjJVxO7eahg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8790.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(366004)(136003)(39860400002)(396003)(376002)(346002)(451199021)(31686004)(36756003)(5660300002)(6916009)(8936002)(8676002)(41300700001)(86362001)(66556008)(66476007)(4326008)(38100700002)(316002)(31696002)(66946007)(6506007)(26005)(6512007)(53546011)(2906002)(186003)(2616005)(478600001)(6666004)(54906003)(6486002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RGhJN0lPbmxQcmN1WEZnOUVtOVlOUlIzK1ozSVNQb3Q3MmtsV1JFMHRQZnlZ?= =?utf-8?B?cnpoT2VFU3dQazlwQm8xdVA3dkJ6dzYyOFlVbmtpN3ovd3h6YU9FZ3Q3UlZh?= =?utf-8?B?ck5SMjV6Szk1d0ZUTENtTGsxcTZZcjRzSXFGV2VnU2pQc05tOVQ1SXpnOUd3?= =?utf-8?B?REVkc2NIRFdXclNJMkhtSlM3QWMxMEI0dTR4cVV1V0doOXpaZUFQejF3Z1pv?= =?utf-8?B?ZTU3Z0xBTTd1S3F2Rkg4WjUyWDFPMnhuWjNiSnJJUTRERnFMTHN3eWtZWFIy?= =?utf-8?B?Mkx3dHZ2akpvTnhiREowVjBXdlJRZkwyQmdpcUFyZ3NNejlPSTJ0ZzVJZ2tk?= =?utf-8?B?N0tPL0NZY0dkNW1wa0c3UnFqSWxrckkxcDB3bzEwdTBFd0JjRmRvSGJIT1Mr?= =?utf-8?B?Tlk0ckVsMmtya0VNRkFseDhZaGNXQUJoanBRRzM4cmREVHFzZzRBSC94Tm5L?= =?utf-8?B?REc4RHJEMFFORkpkZUZwQk9MZEh1WmplVU5tNUF6RmxLQlRBSURTZWtmTEN3?= =?utf-8?B?ZVlHNk9CR2V2V3Y0ck1RSHRiQ1gzaTBSaVJoSmE5TkJ1Z3dNQzBRaVZpbVFS?= =?utf-8?B?dVNvQys2VnFpUXY4UTFPSDFJT3FPN0w3dUtDY3lIMXFGNXpiOTFKOTZCbVQ0?= =?utf-8?B?cmkydUM0bDg0amgvN1EyQzNXcCtWcHZPRXkycENpYzF2VnRlRWlMTkU0b0gy?= =?utf-8?B?ZnA2cVJDMEtEdHVjNmkxMjNIRFRCbHdTRHFZeThVc0wwcHVmSXA5NUFaclZ6?= =?utf-8?B?dVh3bDlYWDMvNDJ4WFNCL3ZKRzBkcVZqOGZTemsvR3JEUTh0S1ZNYXA3QTdh?= =?utf-8?B?VGZodGZMa0F5dDJnMnA4cmdFS1gweGpaenFRRWZKL1VkSmtGQ21URG9UcFp1?= =?utf-8?B?aG5BeVMwVDBLL29vY24xZ3lVWjdnUm9lZlhlRXJ1VCtISXAvS0pPdndtaldF?= =?utf-8?B?UklMWnhqdE1KYk1XSVpMVDhuVnAxbW5nSkY1azZkUE1tNm9Qck80N1ZMNUFI?= =?utf-8?B?N1Fkd2Y3Q2NjUU8zWWJJQytLVW5hWTFjbHRLZlN4bFl3Y0dFOS92NWgwQTha?= =?utf-8?B?LzAxeGxQcjBFcDY0cFhhNU1JT1ZmWEZzUjJWcmY1SDlzeVQ2dXFRRFVGNkdM?= =?utf-8?B?YisrOHNneXY2UDUyOTZCc3FObHV6SXpOMnBuaDFiQjR4NlJUM2hLM0xTVzEx?= =?utf-8?B?L2ZSdUs4akJoUFpGWEdEa2g3MWNlcm5vd1I2U2NRL092R2w4VnRmOURnNWtB?= =?utf-8?B?amt3YTNMR2tYWkpzRWk0UWE3VXdlYnk2alNTK0RYL3hUWHJMSUszc1Iydndh?= =?utf-8?B?YnpsUjJuZFcwbFpLNFNndXdjaCtIMUVRdTh4QlNGbnl6WUZibi9HTFY5SVJi?= =?utf-8?B?aXB3OUVrcTY2M2NDUWVvUysreXlkZStmcjA1M1lrR3QyYXhodDBpUXNqRU9w?= =?utf-8?B?M0FUK0xkUXJzcjRNUXgvTTljWFZVTnNtSWI4c1ZIK2NvRHdvZ3Z1QzZ0eHdC?= =?utf-8?B?aGE1OWxGbkU0R1AyWGtxWnVINm5sT1YvSzc3WmhaQWZTOWRxQndSWHRxd0Qr?= =?utf-8?B?dVhOVlRiU1lFOUM0TjArbkxkU3NDU0pHdnQwbU05aDRnRFdDNm1zZllxbFA0?= =?utf-8?B?K3NpdSs2QjZKcFo5dzRENnZQWm1ISHJ5QjJnM1BOVk1RYm1nNHJLd3VrMmxz?= =?utf-8?B?OFg2UjUzWWRIaFd4NWR6SDQwZkdMeHJYMnBZWkJrVjM3UzB1OHlUby9KbUVR?= =?utf-8?B?c0JybEVCTCtwTXphWGU1aHJqN0JPTnpTRWpFVFd6T0pXY1pKNzFmTUt0TjMr?= =?utf-8?B?d1FwY0pIK0Z5NitSdVUwRTcvZmJ6MWxHQnV4UGJ3MkpTOXEyRWxGNXVKMVZ0?= =?utf-8?B?VWg5a21zM2ZnMGZ2YVNtSUhBdE82WVM1UU1GSm1HVXJvb3VhTUk2UzJLMkpP?= =?utf-8?B?TlUvMXdPUnV5SElyY2l4WThZQUcySCtzLzRQelF3cmxXbTIyMExmdjduaGcv?= =?utf-8?B?UE1NSmVxZWI0eDRkS2syNkxnRmRPb2gzUktmYXpNNUdFcjVVdk10RGRNaGdV?= =?utf-8?B?cmMxQXN6YThiSFAzczNuVTg2Z253MGJEWWZqV0NPT0VGa0Jzc3FWTk9GZDA4?= =?utf-8?Q?bxQDJvPKA9sSY6g/RJaf+XSbw?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5f62ba42-0de6-48c5-f067-08db7581157b X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2023 13:35:47.5924 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: keEJJ38BXjBlVLnzTdzY5swAaXcYGeWZwjjWoY+r9kaWpR4sqcmzyrNDTTOcVpyP02aHw34kHiRjnRyPNz3OcA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8618 X-Spam-Status: No, score=-3027.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 25.06.2023 09:30, Hongtao Liu wrote: > On Sun, Jun 25, 2023 at 3:23 PM Hongtao Liu wrote: >> >> On Sun, Jun 25, 2023 at 3:13 PM Hongtao Liu wrote: >>> >>> On Sun, Jun 25, 2023 at 1:52 PM Jan Beulich wrote: >>>> >>>> On 25.06.2023 06:42, Hongtao Liu wrote: >>>>> On Wed, Jun 21, 2023 at 2:26 PM Jan Beulich via Gcc-patches >>>>> wrote: >>>>>> >>>>>> +(define_code_iterator andor [and ior]) >>>>>> +(define_code_attr nlogic [(and "nor") (ior "nand")]) >>>>>> +(define_code_attr ternlog_nlogic [(and "0x11") (ior "0x77")]) >>>>>> + >>>>>> +(define_insn "*3" >>>>>> + [(set (match_operand:VI 0 "register_operand" "=v,v") >>>>>> + (andor:VI >>>>>> + (not:VI (match_operand:VI 1 "bcst_vector_operand" "%v,v")) >>>>>> + (not:VI (match_operand:VI 2 "bcst_vector_operand" "vBr,m"))))] >>>>> I'm thinking of doing it in simplify_rtx or gimple match.pd to transform >>>>> (and (not op1)) (not op2)) -> (not: (ior: op1 op2)) >>>> >>>> This wouldn't be a win (not + andn) -> (or + not), but what's >>>> more important is ... >>>> >>>>> (ior (not op1) (not op2)) -> (not : (and op1 op2)) >>>>> >>>>> Even w/o avx512f, the transformation should also benefit since it >>>>> takes less logic operations 3 -> 2.(or 2 -> 2 for pandn). >>>> >>>> ... that these transformations (from the, as per the doc, >>>> canonical representation of nand and nor) are already occurring >>> I see, there're already such simplifications in the gimple phase, so >>> the question: is there any need for and/ior:not not pattern? >>> Can you provide a testcase to demonstrate that and/ior: not not >>> pattern is needed? >> >> typedef int v4si __attribute__((vector_size(16))); >> v4si >> foo1 (v4si a, v4si b) >> { >> return ~a & ~b; >> } >> >> I only gimple have optimized it to >> >> [local count: 1073741824]: >> # DEBUG BEGIN_STMT >> _1 = a_2(D) | b_3(D); >> _4 = ~_1; >> return _4; >> >> >> But rtl still try to match >> >> (set (reg:V4SI 86) >> (and:V4SI (not:V4SI (reg:V4SI 88)) >> (not:V4SI (reg:V4SI 89)))) >> >> Hmm. > In rtl, we're using xor -1 for not, so it's > > (insn 8 7 9 2 (set (reg:V4SI 87) > (ior:V4SI (reg:V4SI 88) > (reg:V4SI 89))) "/app/example.cpp":6:15 6830 {*iorv4si3} > (expr_list:REG_DEAD (reg:V4SI 89) > (expr_list:REG_DEAD (reg:V4SI 88) > (nil)))) > (insn 9 8 14 2 (set (reg:V4SI 86) > (xor:V4SI (reg:V4SI 87) > (const_vector:V4SI [ > (const_int -1 [0xffffffffffffffff]) repeated x4 > ]))) "/app/example.cpp":6:18 6792 {*one_cmplv4si2} > > Then simplified to >> (set (reg:V4SI 86) >> (and:V4SI (not:V4SI (reg:V4SI 88)) >> (not:V4SI (reg:V4SI 89)))) >> > > by > > 3565 case XOR: > 3566 if (trueop1 == CONST0_RTX (mode)) > 3567 return op0; > 3568 if (INTEGRAL_MODE_P (mode) && trueop1 == CONSTM1_RTX (mode)) > 3569 return simplify_gen_unary (NOT, mode, op0, mode); > > and > > 1018 /* Apply De Morgan's laws to reduce number of patterns for machines > 1019 with negating logical insns (and-not, nand, etc.). If result has > 1020 only one NOT, put it first, since that is how the patterns are > 1021 coded. */ > 1022 if (GET_CODE (op) == IOR || GET_CODE (op) == AND) > 1023 { > 1024 rtx in1 = XEXP (op, 0), in2 = XEXP (op, 1); > 1025 machine_mode op_mode; > 1026 > 1027 op_mode = GET_MODE (in1); > 1028 in1 = simplify_gen_unary (NOT, op_mode, in1, op_mode); > 1029 > 1030 op_mode = GET_MODE (in2); > 1031 if (op_mode == VOIDmode) > 1032 op_mode = mode; > 1033 in2 = simplify_gen_unary (NOT, op_mode, in2, op_mode); > 1034 > 1035 if (GET_CODE (in2) == NOT && GET_CODE (in1) != NOT) > 1036 std::swap (in1, in2); > 1037 > 1038 return gen_rtx_fmt_ee (GET_CODE (op) == IOR ? AND : IOR, > 1039 mode, in1, in2); > 1040 } > > > Ok, got it, and/ior:not not pattern LGTM then. Just to avoid misunderstandings - together with your initial reply that's then an "okay" to the patch as a whole, right? Thanks, Jan