[LLVMdev] Dead Code Elimination and undef values

Duncan Sands baldrick at free.fr
Fri May 31 21:26:45 PDT 2013

Hi Cristianno,

On 01/06/13 01:49, Cristianno Martins wrote:
> Hello there,
> I'm writing a transformation pass for LLVM, and I hoped to use dce to clean up
> the resulting code after my pass. I just have some questions about LLVM's dce
> implementation.
> Well, my transformation is a function pass, and, after the changes are made,
> some instructions are not needed anymore. In order to easily get rid of those
> instructions, I'm setting all their uses to UndefValue. This is necessary
> because some of the instructions I want to erase are inside loops, and,
> therefore, there might be a circular dependence between the instruction I want
> to delete and a PHINode, for example, when both of them are not useful anymore.
> Ok, the problem is: I've always had explicitly invoked opt enabling, at least,
> -dce -adce -globaldce and -die, and I'm still getting a resultant code with some
> instructions like:
> store i8 undef, i8* %out.1107, align 1, !tbaa !1
> and
> %storemerge = phi i8 [ %conv46, %if.else ], [ %call, %if.then ],
> where %storemerge has no uses.
> So, is there any other dce variant I should be enabling for opt? Better yet, is
> this the correct behavior for all the dce variants I enabled in opt?

try running the instcombine pass too.  I'm surprised that dce didn't get the phi
node though, want to open a bugreport about that?

Ciao, Duncan.

> Thanks,
> --
> Cristianno Martins
> PhD Student of Computer Science
> University of Campinas
> cmartins at ic.unicamp.br <mailto:cmartins at ic.unicamp.br>
> <mailto:cristiannomartins at hotmail.com>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

More information about the llvm-dev mailing list