LLVM: lib/CodeGen/LiveRegUnits.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

19

20using namespace llvm;

21

23 for (unsigned U = 0, E = TRI->getNumRegUnits(); U != E; ++U) {

27 break;

28 }

29 }

30 }

31}

32

34 for (unsigned U = 0, E = TRI->getNumRegUnits(); U != E; ++U) {

37 Units.set(U);

38 break;

39 }

40 }

41 }

42}

43

45

47 if (MOP.isReg()) {

48 if (MOP.isDef() && MOP.getReg().isPhysical())

50 continue;

51 }

52

53 if (MOP.isRegMask()) {

55 continue;

56 }

57 }

58

59

61 if (!MOP.isReg() || !MOP.readsReg())

62 continue;

63

64 if (MOP.getReg().isPhysical())

66 }

67}

68

70

72 if (MOP.isReg()) {

73 if (!MOP.getReg().isPhysical())

74 continue;

75 if (MOP.isDef() || MOP.readsReg())

77 continue;

78 }

79

80 if (MOP.isRegMask()) {

82 continue;

83 }

84 }

85}

86

87

91 LiveUnits.addRegMasked(LI.PhysReg, LI.LaneMask);

92}

93

94

99 for (const MCPhysReg *CSR = MRI.getCalleeSavedRegs(); CSR && *CSR; ++CSR) {

100 const unsigned N = *CSR;

101

105

106 if (Info == CSI.end() || Info->isRestored())

108 }

109}

110

111void LiveRegUnits::addPristines(const MachineFunction &MF) {

114 return;

115

116

118

119

121

124 return;

125 }

126

127

128

129

132

134 Pristine.removeReg(Info.getReg());

135 addUnits(Pristine.getBitVector());

136}

137

140

141 addPristines(MF);

142

143

146

147

152 }

153}

154

157 addPristines(MF);

159}

unsigned const MachineRegisterInfo * MRI

Analysis containing CSE Info

static void addCalleeSavedRegs(LivePhysRegs &LiveRegs, const MachineFunction &MF)

Adds all callee saved registers to LiveRegs.

static void addBlockLiveIns(LiveRegUnits &LiveUnits, const MachineBasicBlock &MBB)

Add live-in registers of basic block MBB to LiveUnits.

The CalleeSavedInfo class tracks the information need to locate where a callee saved register is in t...

A set of register units used to track register liveness.

void addRegMasked(MCPhysReg Reg, LaneBitmask Mask)

Adds register units covered by physical register Reg that are part of the lanemask Mask.

void addRegsInMask(const uint32_t *RegMask)

Adds register units not preserved by the regmask RegMask.

void stepBackward(const MachineInstr &MI)

Updates liveness when stepping backwards over the instruction MI.

void addReg(MCPhysReg Reg)

Adds register units covered by physical register Reg.

void addLiveOuts(const MachineBasicBlock &MBB)

Adds registers living out of block MBB.

void addUnits(const BitVector &RegUnits)

Adds all register units marked in the bitvector RegUnits.

bool empty() const

Returns true if the set is empty.

void addLiveIns(const MachineBasicBlock &MBB)

Adds registers living into block MBB.

void removeRegsNotPreserved(const uint32_t *RegMask)

Removes register units not preserved by the regmask RegMask.

void removeReg(MCPhysReg Reg)

Removes all register units covered by physical register Reg.

void accumulate(const MachineInstr &MI)

Adds all register units used, defined or clobbered in MI.

MCRegUnitRootIterator enumerates the root registers of a register unit.

bool isValid() const

Check if the iterator is at the end of the list.

unsigned getNumRegUnits() const

Return the number of (native) register units in the target.

iterator_range< livein_iterator > liveins() const

bool isReturnBlock() const

Convenience function that returns true if the block ends in a return instruction.

const MachineFunction * getParent() const

Return the MachineFunction containing this basic block.

iterator_range< succ_iterator > successors()

The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted.

bool isCalleeSavedInfoValid() const

Has the callee saved info been calculated yet?

const std::vector< CalleeSavedInfo > & getCalleeSavedInfo() const

Returns a reference to call saved info vector for the current function.

MachineFrameInfo & getFrameInfo()

getFrameInfo - Return the frame info object for the current function.

MachineRegisterInfo & getRegInfo()

getRegInfo - Return information about the registers currently in use.

Representation of each machine instruction.

MachineOperand class - Representation of each machine instruction operand.

static bool clobbersPhysReg(const uint32_t *RegMask, MCRegister PhysReg)

clobbersPhysReg - Returns true if this RegMask clobbers PhysReg.

MachineRegisterInfo - Keep track of information for virtual and physical registers,...

This is an optimization pass for GlobalISel generic memory operations.

auto find_if(R &&Range, UnaryPredicate P)

Provide wrappers to std::find_if which take ranges instead of having to pass begin/end explicitly.