Skip to content

Commit 3def997

Browse files
committed
Use early return/continue in TailDuplicator::duplicateInstruction [nfc]
1 parent ba93685 commit 3def997

File tree

1 file changed

+73
-73
lines changed

1 file changed

+73
-73
lines changed

llvm/lib/CodeGen/TailDuplicator.cpp

Lines changed: 73 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -399,81 +399,81 @@ void TailDuplicator::duplicateInstruction(
399399
return;
400400
}
401401
MachineInstr &NewMI = TII->duplicate(*PredBB, PredBB->end(), *MI);
402-
if (PreRegAlloc) {
403-
for (unsigned i = 0, e = NewMI.getNumOperands(); i != e; ++i) {
404-
MachineOperand &MO = NewMI.getOperand(i);
405-
if (!MO.isReg())
406-
continue;
407-
Register Reg = MO.getReg();
408-
if (!Reg.isVirtual())
409-
continue;
410-
if (MO.isDef()) {
411-
const TargetRegisterClass *RC = MRI->getRegClass(Reg);
412-
Register NewReg = MRI->createVirtualRegister(RC);
413-
MO.setReg(NewReg);
414-
LocalVRMap.insert(std::make_pair(Reg, RegSubRegPair(NewReg, 0)));
415-
if (isDefLiveOut(Reg, TailBB, MRI) || UsedByPhi.count(Reg))
416-
addSSAUpdateEntry(Reg, NewReg, PredBB);
417-
} else {
418-
auto VI = LocalVRMap.find(Reg);
419-
if (VI != LocalVRMap.end()) {
420-
// Need to make sure that the register class of the mapped register
421-
// will satisfy the constraints of the class of the register being
422-
// replaced.
423-
auto *OrigRC = MRI->getRegClass(Reg);
424-
auto *MappedRC = MRI->getRegClass(VI->second.Reg);
425-
const TargetRegisterClass *ConstrRC;
426-
if (VI->second.SubReg != 0) {
427-
ConstrRC = TRI->getMatchingSuperRegClass(MappedRC, OrigRC,
428-
VI->second.SubReg);
429-
if (ConstrRC) {
430-
// The actual constraining (as in "find appropriate new class")
431-
// is done by getMatchingSuperRegClass, so now we only need to
432-
// change the class of the mapped register.
433-
MRI->setRegClass(VI->second.Reg, ConstrRC);
434-
}
435-
} else {
436-
// For mapped registers that do not have sub-registers, simply
437-
// restrict their class to match the original one.
438-
439-
// We don't want debug instructions affecting the resulting code so
440-
// if we're cloning a debug instruction then just use MappedRC
441-
// rather than constraining the register class further.
442-
ConstrRC = NewMI.isDebugInstr()
443-
? MappedRC
444-
: MRI->constrainRegClass(VI->second.Reg, OrigRC);
445-
}
446-
447-
if (ConstrRC) {
448-
// If the class constraining succeeded, we can simply replace
449-
// the old register with the mapped one.
450-
MO.setReg(VI->second.Reg);
451-
// We have Reg -> VI.Reg:VI.SubReg, so if Reg is used with a
452-
// sub-register, we need to compose the sub-register indices.
453-
MO.setSubReg(
454-
TRI->composeSubRegIndices(VI->second.SubReg, MO.getSubReg()));
455-
} else {
456-
// The direct replacement is not possible, due to failing register
457-
// class constraints. An explicit COPY is necessary. Create one
458-
// that can be reused.
459-
Register NewReg = MRI->createVirtualRegister(OrigRC);
460-
BuildMI(*PredBB, NewMI, NewMI.getDebugLoc(),
461-
TII->get(TargetOpcode::COPY), NewReg)
462-
.addReg(VI->second.Reg, 0, VI->second.SubReg);
463-
LocalVRMap.erase(VI);
464-
LocalVRMap.insert(std::make_pair(Reg, RegSubRegPair(NewReg, 0)));
465-
MO.setReg(NewReg);
466-
// The composed VI.Reg:VI.SubReg is replaced with NewReg, which
467-
// is equivalent to the whole register Reg. Hence, Reg:subreg
468-
// is same as NewReg:subreg, so keep the sub-register index
469-
// unchanged.
470-
}
471-
// Clear any kill flags from this operand. The new register could
472-
// have uses after this one, so kills are not valid here.
473-
MO.setIsKill(false);
474-
}
402+
if (!PreRegAlloc)
403+
return;
404+
for (unsigned i = 0, e = NewMI.getNumOperands(); i != e; ++i) {
405+
MachineOperand &MO = NewMI.getOperand(i);
406+
if (!MO.isReg())
407+
continue;
408+
Register Reg = MO.getReg();
409+
if (!Reg.isVirtual())
410+
continue;
411+
if (MO.isDef()) {
412+
const TargetRegisterClass *RC = MRI->getRegClass(Reg);
413+
Register NewReg = MRI->createVirtualRegister(RC);
414+
MO.setReg(NewReg);
415+
LocalVRMap.insert(std::make_pair(Reg, RegSubRegPair(NewReg, 0)));
416+
if (isDefLiveOut(Reg, TailBB, MRI) || UsedByPhi.count(Reg))
417+
addSSAUpdateEntry(Reg, NewReg, PredBB);
418+
continue;
419+
}
420+
auto VI = LocalVRMap.find(Reg);
421+
if (VI == LocalVRMap.end())
422+
continue;
423+
// Need to make sure that the register class of the mapped register
424+
// will satisfy the constraints of the class of the register being
425+
// replaced.
426+
auto *OrigRC = MRI->getRegClass(Reg);
427+
auto *MappedRC = MRI->getRegClass(VI->second.Reg);
428+
const TargetRegisterClass *ConstrRC;
429+
if (VI->second.SubReg != 0) {
430+
ConstrRC =
431+
TRI->getMatchingSuperRegClass(MappedRC, OrigRC, VI->second.SubReg);
432+
if (ConstrRC) {
433+
// The actual constraining (as in "find appropriate new class")
434+
// is done by getMatchingSuperRegClass, so now we only need to
435+
// change the class of the mapped register.
436+
MRI->setRegClass(VI->second.Reg, ConstrRC);
475437
}
438+
} else {
439+
// For mapped registers that do not have sub-registers, simply
440+
// restrict their class to match the original one.
441+
442+
// We don't want debug instructions affecting the resulting code so
443+
// if we're cloning a debug instruction then just use MappedRC
444+
// rather than constraining the register class further.
445+
ConstrRC = NewMI.isDebugInstr()
446+
? MappedRC
447+
: MRI->constrainRegClass(VI->second.Reg, OrigRC);
448+
}
449+
450+
if (ConstrRC) {
451+
// If the class constraining succeeded, we can simply replace
452+
// the old register with the mapped one.
453+
MO.setReg(VI->second.Reg);
454+
// We have Reg -> VI.Reg:VI.SubReg, so if Reg is used with a
455+
// sub-register, we need to compose the sub-register indices.
456+
MO.setSubReg(
457+
TRI->composeSubRegIndices(VI->second.SubReg, MO.getSubReg()));
458+
} else {
459+
// The direct replacement is not possible, due to failing register
460+
// class constraints. An explicit COPY is necessary. Create one
461+
// that can be reused.
462+
Register NewReg = MRI->createVirtualRegister(OrigRC);
463+
BuildMI(*PredBB, NewMI, NewMI.getDebugLoc(), TII->get(TargetOpcode::COPY),
464+
NewReg)
465+
.addReg(VI->second.Reg, 0, VI->second.SubReg);
466+
LocalVRMap.erase(VI);
467+
LocalVRMap.insert(std::make_pair(Reg, RegSubRegPair(NewReg, 0)));
468+
MO.setReg(NewReg);
469+
// The composed VI.Reg:VI.SubReg is replaced with NewReg, which
470+
// is equivalent to the whole register Reg. Hence, Reg:subreg
471+
// is same as NewReg:subreg, so keep the sub-register index
472+
// unchanged.
476473
}
474+
// Clear any kill flags from this operand. The new register could
475+
// have uses after this one, so kills are not valid here.
476+
MO.setIsKill(false);
477477
}
478478
}
479479

0 commit comments

Comments
 (0)