[llvm-dev] analyzePhysReg question

Smith, Kevin B via llvm-dev llvm-dev at lists.llvm.org
Thu Dec 3 16:35:33 PST 2015

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 wanted to be sure that I wasn't missing something about the interface definition/expectation.

Kevin Smith

More information about the llvm-dev mailing list