[llvm-dev] Dead store elimination in the backend for -ftrivial-auto-var-init

JF Bastien via llvm-dev llvm-dev at lists.llvm.org
Thu Aug 1 09:08:06 PDT 2019


Hi Alexander,

The code doesn’t compile. Could you send a godbolt.org link that shows the issue?

Thanks,

JF

> On Aug 1, 2019, at 7:21 AM, Alexander Potapenko <glider at google.com> wrote:
> 
> Hi folks,
> 
> When compiling the attached example with -ftrivial-auto-var-init=zero:
> 
> $ clang   -no-integrated-as  -mno-sse -m64 -mstack-alignment=8    -O2
> -ftrivial-auto-var-init=zero
> -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
> -g  -o ipt.ll -c ipt.i -w -S -emit-llvm
> 
> , Clang generates an initialization memset() call for |acpar| in the IR:
> 
>    %0 = bitcast %struct.xt_action_param* %acpar to i8*, !dbg !27
>    call void @llvm.memset.p0i8.i64(i8* nonnull align 8 %0, i8 0, i64
> 40, i1 false), !dbg !28
> 
> Clang only splits memsets into series of stores under certain
> conditions, so it's hard to remove redundant stores on the IR level
> (even with the recent DSE patches: https://reviews.llvm.org/D61879).
> In the resulting assembly, however, the memset is lowered into a
> series of MOVQ instructions (see the attached ipt.s file), of which at
> least the stores to 24(%rsp) and 16(%rsp) are redundant.
> 
> Given that at MCInst level we already know if a memset is split into a
> sequence of stores, can we do a better job by making the backend
> delete these redundant stores for us?
> 
> Alex
> 
> -- 
> Alexander Potapenko
> Software Engineer
> 
> Google Germany GmbH
> Erika-Mann-Straße, 33
> 80636 München
> 
> Geschäftsführer: Paul Manicle, Halimah DeLaine Prado
> Registergericht und -nummer: Hamburg, HRB 86891
> Sitz der Gesellschaft: Hamburg
> <ipt.i><ipt.s>



More information about the llvm-dev mailing list