From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7875) id CEE803858C55; Thu, 14 Jul 2022 14:07:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CEE803858C55 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Surya Kumari Jangala To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-8568] regrename: Fix -fcompare-debug issue in check_new_reg_p [PR105041] X-Act-Checkin: gcc X-Git-Author: Surya Kumari Jangala X-Git-Refname: refs/heads/releases/gcc-12 X-Git-Oldrev: 87d4bdc87f2b8c17bbc2f427821e23b65d77be69 X-Git-Newrev: 0380d008b1474373852fd2fc921886491304f854 Message-Id: <20220714140744.CEE803858C55@sourceware.org> Date: Thu, 14 Jul 2022 14:07:44 +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: Thu, 14 Jul 2022 14:07:44 -0000 https://gcc.gnu.org/g:0380d008b1474373852fd2fc921886491304f854 commit r12-8568-g0380d008b1474373852fd2fc921886491304f854 Author: Surya Kumari Jangala Date: Fri Jun 10 19:52:57 2022 +0530 regrename: Fix -fcompare-debug issue in check_new_reg_p [PR105041] In check_new_reg_p, the nregs of a du chain is computed by obtaining the MODE of the first element in the chain, and then calling hard_regno_nregs() with the MODE. But the first element of the chain can be a DEBUG_INSN whose mode need not be the same as the rest of the elements in the du chain. This was resulting in fcompare-debug failure as check_new_reg_p was returning a different result with -g for the same candidate register. We can instead obtain nregs from the du chain itself. 2022-06-10 Surya Kumari Jangala gcc/ PR rtl-optimization/105041 * regrename.cc (check_new_reg_p): Use nregs value from du chain. gcc/testsuite/ PR rtl-optimization/105041 * gcc.target/powerpc/pr105041.c: New test. (cherry picked from commit 3e16b4359e86b36676ed01219e6deafa95f3c16b) Diff: --- gcc/regrename.cc | 3 +-- gcc/testsuite/gcc.target/powerpc/pr105041.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/gcc/regrename.cc b/gcc/regrename.cc index 10271e1b17d..f65135151d8 100644 --- a/gcc/regrename.cc +++ b/gcc/regrename.cc @@ -324,8 +324,7 @@ static bool check_new_reg_p (int reg ATTRIBUTE_UNUSED, int new_reg, class du_head *this_head, HARD_REG_SET this_unavailable) { - machine_mode mode = GET_MODE (*this_head->first->loc); - int nregs = hard_regno_nregs (new_reg, mode); + int nregs = this_head->nregs; int i; struct du_chain *tmp; diff --git a/gcc/testsuite/gcc.target/powerpc/pr105041.c b/gcc/testsuite/gcc.target/powerpc/pr105041.c new file mode 100644 index 00000000000..e5144b293a3 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr105041.c @@ -0,0 +1,22 @@ +/* { dg-options "-mdejagnu-cpu=power4 -O2 -fcompare-debug -fharden-compares -frename-registers" } */ + +double m; +int n; + +unsigned int +foo (unsigned int x, int y) +{ + long long int a = y, b = !a; + int c = 0; + + if (b != x) + while ((int) m == a) + { + c = a; + a = 0; + } + + n = b = y; + + return x + c; +}