This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: operator new[] overflow (PR 19351)


On Sun, Dec 5, 2010 at 8:56 AM, Chris Lattner <clattner@apple.com> wrote:
>
> On Dec 4, 2010, at 5:22 AM, Florian Weimer wrote:
>
>> * Joe Buck:
>>
>>> It's wasted code if the multiply instruction detects the overflow.
>>> It's true that the cost is small (maybe just one extra instruction
>>> and the same number of tests, maybe one more on architectures where you
>>> have to load a large constant), but it is slightly worse code than what
>>> Chris Lattner showed.
>>
>> It's possible to improve slightly on the LLVM code by using the
>> overflow flag (at least on i386/amd64), as explained in this blog
>> post:
>>
>> <http://blogs.msdn.com/b/michael_howard/archive/2005/12/06/500629.aspx>
>
> Ah, great point. ?I improved the clang codegen to this:
>
> $ cat t.cc
> void *test(long count) {
> ? ? ?return new int[count];
> }
> $ clang t.cc -S -o - -O3 -mkernel -fomit-frame-pointer -mllvm -show-mc-encoding
> ? ? ? ?.section ? ? ? ?__TEXT,__text,regular,pure_instructions
> ? ? ? ?.globl ?__Z4testl
> ? ? ? ?.align ?4, 0x90
> __Z4testl: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?## @_Z4testl
> ## BB#0: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?## %entry
> ? ? ? ?movl ? ?$4, %ecx ? ? ? ? ? ? ? ?## encoding: [0xb9,0x04,0x00,0x00,0x00]
> ? ? ? ?movq ? ?%rdi, %rax ? ? ? ? ? ? ?## encoding: [0x48,0x89,0xf8]
> ? ? ? ?mulq ? ?%rcx ? ? ? ? ? ? ? ? ? ?## encoding: [0x48,0xf7,0xe1]
> ? ? ? ?movq ? ?$-1, %rdi ? ? ? ? ? ? ? ## encoding: [0x48,0xc7,0xc7,0xff,0xff,0xff,0xff]
> ? ? ? ?cmovnoq %rax, %rdi ? ? ? ? ? ? ?## encoding: [0x48,0x0f,0x41,0xf8]
> ? ? ? ?jmp ? ? __Znam ? ? ? ? ? ? ? ? ?## TAILCALL
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?## encoding: [0xeb,A]
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?## ? fixup A - offset: 1, value: __Znam-1, kind: FK_PCRel_1
> .subsections_via_symbols
>
> This could be further improved by inverting the cmov condition to avoid the first movq, which we'll tackle as a general regalloc improvement.

I'm curious as on how you represent the overflow checking in your highlevel IL.

Richard.

> Thanks for the pointer!
>
> -Chris
>
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]