[LLVMdev] Physical register definition removed by MachineCSE

Jim Grosbach grosbach at apple.com
Mon Aug 18 14:57:04 PDT 2014


> On Aug 15, 2014, at 2:18 AM, Mikael Holmén <mikael.holmen at ericsson.com> wrote:
> 
> Hi,
> 
> My target has a special configuration register that many instructions read implicitly, configuring for example if an add instruction should saturate at over/underflow or not.
> 
> Now, I have a problem where the MachineCSE removes a setting of this configuration register in a basic block, because MachineCSE::isPhysDefTriviallyDead can't find any uses of it in the basic block where it's defined.
> 
> Similar to other special physical registers, e.g the stack pointer, this configuration register is marked as "reserved".
> 
> Is there anything else I need to do for the MachineCSE to leave this register and not remove it just because it can't find any uses in the current basic block?

The instructions which set this control register are distinct from normal reg-to-reg moves and such, I assume? The way that’s typically modeled is to mark those instructions as having side effects (hasSideEffects=1) in the .td file.

Note that LLVM doesn’t have any more general notion of things like saturating arithmetic, so it is possible (likely even) that you’ll end up with some strange mis-optimizations when operations get optimized across one of those instructions. That’s a wholly separate issue, though.

-Jim

> 
> Best regards,
> Mikael Holmén
> _______________________________________________
> 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