[llvm-dev] analyzePhysReg question

Quentin Colombet via llvm-dev llvm-dev at lists.llvm.org
Thu Dec 3 16:42:36 PST 2015


> On Dec 3, 2015, at 4:35 PM, Smith, Kevin B via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> I am looking at results from analyzePhysReg, and am getting results a little different than I expected for x86.
> 
> The call to this is coming from this code in llvm::MachineBasicBlock::computeRegisterLiveness
> 1163          MachineOperandIteratorBase::PhysRegInfo Analysis =
> 1164            ConstMIOperands(I).analyzePhysReg(Reg, TRI);
> 
> The instruction I being analyzed is:
>  %BX<def> = MOV16rm %EDI, 2, %ECX, 0, %noreg; mem:LD2[%arrayidx98](tbaa=!18)
> 
> and the Reg being passed in is 21, which is EBX.  The result I get back for is:
> 
> Analysis: {Clobbers = true, Defines = true, Reads = false, ReadsOverlap = false,
>  DefinesDead = false, Kills = false}
> 
> It seems based on the comment in the definition of PhysRegInfo.Defines, that Defines should only be true if Reg or a super-register of Reg is
> defined.  BX is not a super-register of EBX, so it seemed like Defines should be false here, while Clobbers is correct as true.

I believe the documentation is wrong here.
EBX is partly defined, so to me Defines == true is conservatively correct here.
My guess, but I haven’t checked the code, is that super-register should be understood as any alias of Reg.

Worth checking.

Q.

> 
> I wanted to be sure that I wasn't missing something about the interface definition/expectation.
> 
> Thanks,
> Kevin Smith
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev



More information about the llvm-dev mailing list