[LLVMdev] Dead Code Elimination and undef values

Cristianno Martins cristiannomartins at gmail.com
Fri May 31 16:49:21 PDT 2013


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?

Thanks,

--
Cristianno Martins
PhD Student of Computer Science
University of Campinas
cmartins at ic.unicamp.br
<cristiannomartins at hotmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130531/909d2e73/attachment.html>


More information about the llvm-dev mailing list