[LLVMdev] LiveIntervals, replace register with representative register?

Tzu-Chien Chiu tzuchien.chiu at gmail.com
Wed Sep 7 00:09:08 PDT 2005

I don't understand the following code snippet in LiveIntervalAnalysis.cpp.

Why changing the type of the opreand from a virtual register to a
machine register? The register number (reg) is still a virtual
register index (>1024).

bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
  // perform a final pass over the instructions and compute spill
  // weights, coalesce virtual registers and remove identity moves

        for (unsigned i = 0; i < mii->getNumOperands(); ++i) {
          const MachineOperand& mop = mii->getOperand(i);
          if (mop.isRegister() && mop.getReg() &&
              MRegisterInfo::isVirtualRegister(mop.getReg())) {
            // replace register with representative register
            unsigned reg = rep(mop.getReg());
            mii->SetMachineOperandReg(i, reg);

            LiveInterval &RegInt = getInterval(reg);
            RegInt.weight +=
              (mop.isUse() + mop.isDef()) * pow(10.0F, (int)loopDepth);

Tzu-Chien Chiu,
3D Graphics Hardware Architect

More information about the llvm-dev mailing list