From patchwork Thu Jul 13 10:30:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robin Dapp X-Patchwork-Id: 119767 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a6b2:0:b0:3e4:2afc:c1 with SMTP id c18csp1726953vqm; Thu, 13 Jul 2023 03:31:57 -0700 (PDT) X-Google-Smtp-Source: APBJJlGbPuVbhMv7WMTqXACjp+R3Tx5c/8oEATU3uMd1OeEqVCHU4udImlnkvQ+80FneR+mjygXK X-Received: by 2002:a17:907:9143:b0:991:e458:d16 with SMTP id l3-20020a170907914300b00991e4580d16mr1056418ejs.72.1689244317403; Thu, 13 Jul 2023 03:31:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689244317; cv=none; d=google.com; s=arc-20160816; b=OL7KPjB13DPyc0YhixGwxBu2npePHp2dFn/jR/UbtLq+jHH89ozDT01QdtdgX2esyU 0+/iPYlzAcMhJaIS5bT46p8xQ0PYfj256aTOlNpSP8Bq1C0qR6kOImacbU7eze3XhUzA eCLdzF7AWJrGEznO9SVaKdMAsHLDUT8nQ37V8sh57TuVwj/WPUznbPB9D234KvdPWdFh I2Z8nKCBjgruatBiktzIhn7mQHAcB14ZbrX0RmU8OYMLi3iNVHJaEN7WWRJi4uQCCkhD wha0Zyb0IZrv8fs2bd8kAaWPQpBEr1TJt2kbX1tc20UpfO4BY80y7hxF10RlovS6vfpy giDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:to:subject:content-language:cc:user-agent :mime-version:date:message-id:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=LCrZJZw/PHO4/175i+K0M3S/a2jJfT8GV8bCWlM0KUA=; fh=RfNrlHQvzmof9NqH9dQWc9AEnQIKqQyorVQkBsH4SEI=; b=ohxDG6vm8EQBncYlBmsRD1ptt5lo0vpIaZr7jfZu4DG2muXqzLnFfk1UCfwGuOpMFW Tm1sjWIYaNPOaQz4+Gi27xuko/J0ZqJIpk2AwcE/M7gO7zAFkgu06w7E1mk1exmi70AD VrgCuijjUptGX+dYTlU2OBkSIYKZDTSuZq92vsypw1dWXjSneZH+8lA38ifuU1KIbbb9 EWXwTkdGj9enqclIb3UMJoG4P2KnJdCkaVWrn2+OVXaJj2lrAEVzw5SujDxVDeGzrN3a TRnHp3n+dMPwdfZxfuuIqftfYXZE+8XevY6CyCNx7YZIZd7CUAVB9vtv1KLdhxPs5AtK ltmA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=vaU1N1pp; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id j5-20020a17090643c500b009929af2f7d1si6698743ejn.376.2023.07.13.03.31.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Jul 2023 03:31:57 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=vaU1N1pp; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 31DA3385C6FC for ; Thu, 13 Jul 2023 10:31:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 31DA3385C6FC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1689244273; bh=LCrZJZw/PHO4/175i+K0M3S/a2jJfT8GV8bCWlM0KUA=; h=Date:Cc:Subject:To:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=vaU1N1ppZQwkB8VgfZjjFbK5puol6W+Ctzi5tcrt6RGBsrbCGVpgySec1vwJffnld rlMr/iA78g1Xlrm5YulVlAQxnph9n82wfrJ6F+Ozp+Uo0SblOanPml4p5notbUzQvB QaZEFUJm+8paAYicA6fRbYm65afw7KYnjQxIvmms= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) by sourceware.org (Postfix) with ESMTPS id 0CD173858439 for ; Thu, 13 Jul 2023 10:30:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0CD173858439 Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-9923833737eso76798466b.3 for ; Thu, 13 Jul 2023 03:30:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689244226; x=1691836226; h=content-transfer-encoding:to:subject:from:content-language:cc :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=LCrZJZw/PHO4/175i+K0M3S/a2jJfT8GV8bCWlM0KUA=; b=KJFW6Kr45zYVQKy6QD1ZBmGVzCOy5Fj52PAQd+EXpmSUBjl6i/auu0jkvSNQFideR3 1T0Jf2k2pJr9IC+P4K9hT8USmZXBneBq/OtnKq5GZ/59tBtVNh0kLpTeQMBIpDcrXuFt spKzJEmdeqREZYluYRaL1NtA7CClCcFrU9gcXjz8GP9WVnsxvXSj1ueCYXzeaL1x3wCP o25HEtE91Cr91MNfAGb7NqHrT3QunXAE2TBRQBTr06zgqIUv26VZtT+1BoaRCgBVxy7G B/Hg4qjir0c3vnnqNbaYPpEzsDL+0ZyLlikT3RLFQOHnWqtzvJ2lhaldb/yZ0gdalaOl hm+Q== X-Gm-Message-State: ABy/qLacP/mBvg3qO6DJi88dVmRSJevGcAmZ13bfIN2NqqR1f+/CK/Fc ZDYILR+H6YzR96IZNnEru74DxATS0lC+xA== X-Received: by 2002:a17:906:5c:b0:989:34a0:45b0 with SMTP id 28-20020a170906005c00b0098934a045b0mr1386416ejg.49.1689244226427; Thu, 13 Jul 2023 03:30:26 -0700 (PDT) Received: from [192.168.1.23] (ip-046-005-130-086.um12.pools.vodafone-ip.de. [46.5.130.86]) by smtp.gmail.com with ESMTPSA id mj7-20020a170906af8700b0098963eb0c3dsm3822989ejb.26.2023.07.13.03.30.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 13 Jul 2023 03:30:26 -0700 (PDT) Message-ID: Date: Thu, 13 Jul 2023 12:30:25 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Cc: rdapp.gcc@gmail.com Content-Language: en-US Subject: [PATCH] vect: Handle demoting FLOAT and promoting FIX_TRUNC. To: gcc-patches X-Spam-Status: No, score=-9.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, 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 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: Robin Dapp via Gcc-patches From: Robin Dapp Reply-To: Robin Dapp Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771301049354471466 X-GMAIL-MSGID: 1771301049354471466 Hi, the recent changes that allowed multi-step conversions for "non-packing/unpacking", i.e. modifier == NONE targets included promoting to-float and demoting to-int variants. This patch adds demoting to-float and promoting to-int handling. Bootstrapped and regtested on x86 and aarch64. A question that seems related: Why do we require !flag_trapping_math for the "NONE" multistep conversion but not for the "NARROW_DST" case when both seem to handle float -> int and there are float values that do not have an int representation? If a backend can guarantee that the conversion traps, should it just implement a multistep conversion in a matching expander? Regards Robin gcc/ChangeLog: * tree-vect-stmts.cc (vectorizable_conversion): Handle more demotion/promotion for modifier == NONE. --- gcc/tree-vect-stmts.cc | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 10e71178ce7..78e0510be7e 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -5324,28 +5324,46 @@ vectorizable_conversion (vec_info *vinfo, break; } - /* For conversions between float and smaller integer types try whether we - can use intermediate signed integer types to support the + /* For conversions between float and larger integer types try whether + we can use intermediate signed integer types to support the conversion. */ if ((code == FLOAT_EXPR - && GET_MODE_SIZE (lhs_mode) > GET_MODE_SIZE (rhs_mode)) + && GET_MODE_SIZE (lhs_mode) != GET_MODE_SIZE (rhs_mode)) || (code == FIX_TRUNC_EXPR - && GET_MODE_SIZE (rhs_mode) > GET_MODE_SIZE (lhs_mode) - && !flag_trapping_math)) + && ((GET_MODE_SIZE (rhs_mode) > GET_MODE_SIZE (lhs_mode) + && !flag_trapping_math) + || GET_MODE_SIZE (rhs_mode) < GET_MODE_SIZE (lhs_mode)))) { + bool demotion = GET_MODE_SIZE (rhs_mode) > GET_MODE_SIZE (lhs_mode); bool float_expr_p = code == FLOAT_EXPR; - scalar_mode imode = float_expr_p ? rhs_mode : lhs_mode; - fltsz = GET_MODE_SIZE (float_expr_p ? lhs_mode : rhs_mode); + unsigned short target_size; + scalar_mode intermediate_mode; + if (demotion) + { + intermediate_mode = lhs_mode; + target_size = GET_MODE_SIZE (rhs_mode); + } + else + { + target_size = GET_MODE_SIZE (lhs_mode); + tree itype + = build_nonstandard_integer_type (GET_MODE_BITSIZE + (rhs_mode), 0); + intermediate_mode = SCALAR_TYPE_MODE (itype); + } code1 = float_expr_p ? code : NOP_EXPR; codecvt1 = float_expr_p ? NOP_EXPR : code; - FOR_EACH_2XWIDER_MODE (rhs_mode_iter, imode) + opt_scalar_mode mode_iter; + FOR_EACH_2XWIDER_MODE (mode_iter, intermediate_mode) { - imode = rhs_mode_iter.require (); - if (GET_MODE_SIZE (imode) > fltsz) + intermediate_mode = mode_iter.require (); + + if (GET_MODE_SIZE (intermediate_mode) > target_size) break; cvt_type - = build_nonstandard_integer_type (GET_MODE_BITSIZE (imode), + = build_nonstandard_integer_type (GET_MODE_BITSIZE + (intermediate_mode), 0); cvt_type = get_vectype_for_scalar_type (vinfo, cvt_type, slp_node);