public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Tom de Vries <Tom_deVries@mentor.com>
To: Richard Guenther <richard.guenther@gmail.com>
Cc: "gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH,PR50763] Follow-up patch to fix i686 bootstrap failure
Date: Wed, 02 Nov 2011 18:05:00 -0000	[thread overview]
Message-ID: <4EB185AD.5010402@mentor.com> (raw)
In-Reply-To: <CAFiYyc0djo2ChfzjmebrSpVK7+BopW+SCufeCJ9oYvbhCdcPCg@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2904 bytes --]

On 10/26/2011 10:38 AM, Richard Guenther wrote:
> On Tue, Oct 25, 2011 at 2:15 PM, Tom de Vries <Tom_deVries@mentor.com> wrote:
>> Richard,
>>
>> I have a patch for the i686 bootstrap problem reported in PR50763 comment 10.
>>
>> pr50763-2.c looks like this before tail_merge_optimize:
>> ...
>> std_canonical_va_list_type (union tree_node * typeD.1608)
>> {
>>  _BoolD.1576 pretmp.6D.2739;
>>  union tree_node * pretmp.5D.2738;
>>  _BoolD.1576 pretmp.4D.2737;
>>  union tree_node * pretmp.3D.2736;
>>  intD.6 D.2734;
>>  _BoolD.1576 D.2733;
>>  union tree_node * D.2725;
>>  intD.6 D.2722;
>>  intD.6 D.2717;
>>
>>  # BLOCK 2 freq:10000
>>  # PRED: ENTRY [100.0%]  (fallthru,exec)
>>  # VUSE <.MEMD.2730_12(D)>
>>  D.2717_4 = typeD.1608_3(D)->baseD.1605.codeD.1597;
>>  if (D.2717_4 != 0)
>>    goto <bb 3>;
>>  else
>>    goto <bb 4>;
>>  # SUCC: 3 [50.0%]  (true,exec) 4 [50.0%]  (false,exec)
>>
>>  # BLOCK 3 freq:5000
>>  # PRED: 2 [50.0%]  (true,exec)
>>  # VUSE <.MEMD.2730_12(D)>
>>  # PT = anything
>>  typeD.1608_5 = typeD.1608_3(D)->typedD.1606.typeD.1600;
>>  goto <bb 6>;
>>  # SUCC: 6 [100.0%]  (fallthru,exec)
>>
>>  # BLOCK 4 freq:5000
>>  # PRED: 2 [50.0%]  (false,exec)
>>  # VUSE <.MEMD.2730_12(D)>
>>  # PT = anything
>>  typeD.1608_6 = typeD.1608_3(D)->typedD.1606.typeD.1600;
>>  # VUSE <.MEMD.2730_12(D)>
>>  D.2722_7 = typeD.1608_6->baseD.1605.codeD.1597;
>>  if (D.2722_7 != 0)
>>    goto <bb 5>;
>>  else
>>    goto <bb 7>;
>>  # SUCC: 5 [50.0%]  (true,exec) 7 [50.0%]  (false,exec)
>>
>>  # BLOCK 7 freq:2500
>>  # PRED: 4 [50.0%]  (false,exec)
>>  goto <bb 6>;
>>  # SUCC: 6 [100.0%]  (fallthru)
>>
>>  # BLOCK 5 freq:2500
>>  # PRED: 4 [50.0%]  (true,exec)
>>  # SUCC: 6 [100.0%]  (fallthru,exec)
>>
>>  # BLOCK 6 freq:10000
>>  # PRED: 3 [100.0%]  (fallthru,exec) 7 [100.0%]  (fallthru) 5 [100.0%]
>> (fallthru,exec)
>>  # PT = anything
>>
>>  # typeD.1608_1 = PHI <typeD.1608_5(3), typeD.1608_3(D)(7), typeD.1608_6(5)>
>>  # VUSE <.MEMD.2730_12(D)>
>>  # PT = anything
>>  D.2725_9 = typeD.1608_1->type_commonD.1607.main_variantD.1604;
>>  D.2733_15 = D.2725_9 != 0B;
>>  D.2734_14 = (intD.6) D.2733_15;
>>  # VUSE <.MEMD.2730_12(D)>
>>  return D.2734_14;
>>  # SUCC: EXIT [100.0%]
>>
>> }
>> ...
>>
>> tail_merge_optimize discovers that block 3 and 5 are identical, and removes block 5.
>> In replace_block_by, we end up with phi_vuse1 == NULL_TREE and
>> phi_vuse2 == .MEMD.2730_12(D).
>>
>> After the original fix to PR50763, this forces us to update the vuses, while
>> that is not necessary.
>>
>> Attached patch fixes this problem by determining more precisely when the vuses
>> need to be updated.
>>
>> bootstrapped and reg-tested on x86_64 and i686.
>>
>> OK for trunk?
> 
> Ok.
> 

Committed additional testcase from duplicate PR50854.

Thanks,
- Tom

2011-11-02  Tom de Vries  <tom@codesourcery.com>

	PR tree-optimization/50763
	* g++.dg/pr50763-3.C: New test.

[-- Attachment #2: pr50763.test.2.patch --]
[-- Type: text/x-patch, Size: 1358 bytes --]

Index: gcc/testsuite/g++.dg/pr50763-3.C
===================================================================
--- /dev/null (new file)
+++ gcc/testsuite/g++.dg/pr50763-3.C (revision 0)
@@ -0,0 +1,57 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target ilp32 } */
+/* { dg-options "-O2 -ftree-tail-merge" } */
+
+class v2d {
+public:
+   double x;
+   double y;
+};
+
+class v3d {
+public:
+   double x;
+   v3d() {}
+   v3d(const v2d & cr2Dv) {}
+};
+
+class e2d {
+protected:
+   v2d _Min;
+   v2d _Max;
+public:
+   int cop2d(const v2d & rPnt) const;
+   v2d clp2d(const v2d & rPnt) const;
+};
+
+inline int e2d::cop2d(const v2d & rPnt) const {
+   int bRet = 1;
+   if (rPnt.x < _Min.x) bRet = 0;
+   else if (rPnt.x > _Max.x) bRet = 0;
+   else if (rPnt.y > _Max.y) bRet = 0;
+   return bRet;
+}
+
+inline v2d e2d::clp2d(const v2d & rPnt) const {
+   v2d sRet = rPnt;
+   if (rPnt.x < _Min.x) sRet.x = _Min.x;
+   if (rPnt.y < _Min.y) sRet.y = _Min.y;
+   if (rPnt.x > _Max.x) sRet.x = _Max.x;
+   if (rPnt.y > _Max.y) sRet.y = _Max.y;
+   return sRet;
+}
+
+class sExt {
+protected:
+   e2d _Dom;
+   long eval() const;
+   long evalPoint(const v2d & crUV, v3d & rPnt) const;
+};
+
+long sExt::evalPoint(const v2d & crUV, v3d & rPnt) const {
+   v3d sUV = crUV;
+   if (!_Dom.cop2d(crUV)) {
+      sUV = _Dom.clp2d(crUV);
+   }
+   eval();
+}   

  reply	other threads:[~2011-11-02 18:03 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-25 12:54 Tom de Vries
2011-10-25 22:06 ` H.J. Lu
2011-10-26 10:19 ` Richard Guenther
2011-11-02 18:05   ` Tom de Vries [this message]
2011-11-04 17:39     ` Tom de Vries

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4EB185AD.5010402@mentor.com \
    --to=tom_devries@mentor.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=richard.guenther@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).