[PATCH,PR50763] Follow-up patch to fix i686 bootstrap failure
Tom de Vries
Tom_deVries@mentor.com
Fri Nov 4 17:39:00 GMT 2011
On 11/02/2011 07:02 PM, Tom de Vries wrote:
> 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.
>
Committed 2 additional test-cases.
Thanks,
- Tom
2011-11-04 Tom de Vries <tom@codesourcery.com>
PR tree-optimization/50763
* g++.dg/pr50763-4.C: New test.
* gcc.dg/pr50763-5.c: New test.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pr50763.test.3.patch
Type: text/x-patch
Size: 852 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20111104/8586b8a4/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pr50763.test.4.patch
Type: text/x-patch
Size: 678 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20111104/8586b8a4/attachment-0001.bin>
More information about the Gcc-patches
mailing list