incubator-stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Sebor (JIRA)" <j...@apache.org>
Subject [jira] Commented: (STDCXX-335) std::min() suboptimal
Date Wed, 07 Feb 2007 22:01:05 GMT

    [ https://issues.apache.org/jira/browse/STDCXX-335?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12471120
] 

Martin Sebor commented on STDCXX-335:
-------------------------------------

Here's the IPF assembly for a similar test not involving <algorithm> compiled and optimized
with HP aCC 6.05 at +O2 (test_min_ref calls a by-reference min, test_min_val calls a by-value
min):

_Z12test_min_refii::
        add             r9 = 0, sp
        cmp4.ge.unc     p6, p0 = r32, r33
        addp4           r8 = 4, r9
        add             r10 = 4, r9
        addp4           r11 = 12, r9
        nop.i           0
        st4             [r8] = r32
        st4             [r11] = r33
        addp4           r8 = 12, r9
(p6)    add             r10 = 0, r8
        nop.i           0
        addp4           r8 = 0, r10
        ld4             r8 = [r8]
        nop.m           0
.restore sp
        br.ret.sptk.many rp

_Z12test_min_valii::
        cmp4.ge.unc     p6, p0 = r32, r33
        add             r8 = 0, r32
(p6)    add             r8 = 0, r33
        nop.m           0
        nop.m           0
.restore sp
        br.ret.sptk.many rp


> std::min() suboptimal
> ---------------------
>
>                 Key: STDCXX-335
>                 URL: https://issues.apache.org/jira/browse/STDCXX-335
>             Project: C++ Standard Library
>          Issue Type: Bug
>          Components: 25. Algorithms
>    Affects Versions: 4.1.3
>         Environment: gcc 3.2.3, x86 Linux
>            Reporter: Mark Brown
>
> I don't know if it's the compiler that's generating worse code for the stdcxx version
of min or if the function is not implemented as efficiently as it could be but the disassembly
for the two functions below shows that my_min() is one instruction shorter than test_min():
> #include <algorithm>
> int test_min (int x, int y) { return std::min (x, y); }
> int my_min (int x, int y) { return x < y ? x : y; }
> _Z8test_minii:
>         pushl   %ebp
>         movl    %esp, %ebp
>         movl    12(%ebp), %eax
>         cmpl    %eax, 8(%ebp)
>         jg      .L2
>         leal    8(%ebp), %eax   <<< extra load?
> .L4:
>         movl    (%eax), %eax
>         leave
>         ret
> _Z6my_minii:
>         pushl   %ebp
>         movl    %esp, %ebp
>         movl    12(%ebp), %eax
>         cmpl    8(%ebp), %eax
>         jle     .L6
>         movl    8(%ebp), %eax
> .L6:
>         leave
>         ret

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message