From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2136) id 1C26A385482D; Sun, 24 Jul 2022 15:05:01 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1C26A385482D MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Aldy Hernandez To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-1814] Tweaks to global ranges. X-Act-Checkin: gcc X-Git-Author: Aldy Hernandez X-Git-Refname: refs/heads/master X-Git-Oldrev: 4a36b4e1fe405fe347d57c39f8e23ac8a6c57263 X-Git-Newrev: 164758b02c44cba66e00103c118c6a4b5f76a812 Message-Id: <20220724150501.1C26A385482D@sourceware.org> Date: Sun, 24 Jul 2022 15:05:01 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 24 Jul 2022 15:05:01 -0000 https://gcc.gnu.org/g:164758b02c44cba66e00103c118c6a4b5f76a812 commit r13-1814-g164758b02c44cba66e00103c118c6a4b5f76a812 Author: Aldy Hernandez Date: Wed Jul 20 20:37:45 2022 +0200 Tweaks to global ranges. The global get_nonzero_bits was previously returning -1 for unsupported types. I dropped this in the conversion to global ranges and it's causing a problem in the frange work, where CCP is asking for the nonzero bits of non-integral types. CCP may require further tweaks, but for now, restore the original behavior. Also, I'm removing old checks for precision that no longer hold, now that we handle various types for global ranges. Tested on x86-64 Linux. gcc/ChangeLog: * tree-ssanames.cc (get_nonzero_bits): Return -1 for unsupported types. * value-query.cc (get_ssa_name_range_info): Remove precision check. Diff: --- gcc/tree-ssanames.cc | 3 +-- gcc/value-query.cc | 9 +++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/gcc/tree-ssanames.cc b/gcc/tree-ssanames.cc index 9389454a5a7..5c5d0e346c4 100644 --- a/gcc/tree-ssanames.cc +++ b/gcc/tree-ssanames.cc @@ -489,13 +489,12 @@ get_nonzero_bits (const_tree name) return wi::shwi (-1, precision); } - if (!range_info_p (name)) + if (!range_info_p (name) || !irange::supports_p (TREE_TYPE (name))) return wi::shwi (-1, precision); /* Optimization to get at the nonzero bits because we know the storage type. This saves us measurable time compared to going through vrange_storage. */ - gcc_checking_assert (irange::supports_p (TREE_TYPE (name))); irange_storage_slot *ri = static_cast (SSA_NAME_RANGE_INFO (name)); return ri->get_nonzero_bits (); diff --git a/gcc/value-query.cc b/gcc/value-query.cc index 51911bdd1d0..3560d19f1ae 100644 --- a/gcc/value-query.cc +++ b/gcc/value-query.cc @@ -280,16 +280,13 @@ get_ssa_name_range_info (vrange &r, const_tree name) void *ri = SSA_NAME_RANGE_INFO (name); - // Return VR_VARYING for SSA_NAMEs with NULL RANGE_INFO or SSA_NAMEs - // with integral types width > 2 * HOST_BITS_PER_WIDE_INT precision. - if (!ri || (GET_MODE_PRECISION (SCALAR_INT_TYPE_MODE (TREE_TYPE (name))) - > 2 * HOST_BITS_PER_WIDE_INT)) - r.set_varying (type); - else + if (ri) { vrange_storage vstore (NULL); vstore.get_vrange (ri, r, TREE_TYPE (name)); } + else + r.set_varying (type); } // Return nonnull attribute of pointer NAME from SSA_NAME_PTR_INFO.