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();
+}
next prev parent 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).