[LLVMdev] disable llc optimizations

Andrew Lukefahr andrewlukefahr at gmail.com
Tue Dec 7 08:46:45 PST 2010


Ok,

I'm trying to get llvm to decide when to turn the multiplier "on" and "off"
for an ARM simulator.  These instructions are just to let the simulator know
when to power on/off the multiplier.  I need to insert an instruction before
the first multiply and another one after the last multiply in a basic
block.  I'm currently trying to figure out the best way to do that without
having to add a new instruction to llvm.

My plan was to insert useless instructions, let llc generate an assembly
(.s) file, then use sed to replace the useless instructions with my special
instructions.  However, llc eliminates my useless instructions. ( Allocas
and binary operators go away,  volatile loads and stores change the register
allocation. )

%mul_en = alloca i32
%2 = mul nsw i32 %y, %x
%mul_dis = alloca i32

becomes...

mul r12, r12, r0


Next I tried using llvm-dis and llvm-as to manually replace my useless
instructions with a inline no-op in the .bc file.  However, llc then  moves
the volatile no-op below the multiply.

tail call void asm sideeffect "NOP", ""() nounwind
%2 = mul nsw i32 %y, %x
tail call void asm sideeffect "NOP", ""() nounwind

becomes....

mul r12, r12, r0
...
@APP
NOP
@NO_APP
@APP
NOP
@NO_APP


Andrew Lukefahr
andrewlukefahr at gmail.com

Open Source, Open Minds


On Mon, Dec 6, 2010 at 2:08 PM, Jim Grosbach <grosbach at apple.com> wrote:

>
> On Dec 6, 2010, at 10:57 AM, John Criswell wrote:
>
> > On 12/6/10 11:39 AM, Andrew Lukefahr wrote:
> >> Hi,
> >>
> >> How would I disable dead code elimination in llc?  Can that be done via
> the command line or do I need to modify llc's source?
> >
> > You can use llc --help-hidden to see a list of options.  There are
> several -disable-xxx options that disable various code generator
> optimizations.
> >
> > That said, I, like Duncan, wasn't aware that llc did any dead-code
> elimination (beyond peephole optimization).  Are you sure llc is removing
> the instructions you care about?
> >
>
>
> Perhaps the dead machine instruction elimination pass?
> (DeadMachineInstructionElim.cpp) I don't think there's a way to disable
> that.
>
> -Jim
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20101207/5a9cc970/attachment.html>


More information about the llvm-dev mailing list