[LLVMdev] Physical register definition removed by MachineCSE
Mikael Holmén
mikael.holmen at ericsson.com
Mon Aug 18 00:07:09 PDT 2014
Hi,
On 08/15/14 16:15, Tom Stellard wrote:
> On Fri, Aug 15, 2014 at 11:18:51AM +0200, Mikael Holmén 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?
>
> Have you added this register as an implicit use to the instructions
> like add whose behavior depends on its value?
Yes.
So it's like
BB1:
...
def ConfReg
... <no uses of ConfReg>
branch cond BB2
branch BB3
BB2:
...
add ... <imp-use ConfReg>
...
Since there are no uses of ConfReg after the ConfReg def in BB1,
MachineCSE::isPhysDefTriviallyDead decides ConfReg is trivially dead,
and removes the setting.
Best Regards,
Mikael
>
> -Tom
>
>>
>> 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