| Index: src/IceTargetLoweringARM32.cpp
|
| diff --git a/src/IceTargetLoweringARM32.cpp b/src/IceTargetLoweringARM32.cpp
|
| index 8a0ebec9a50fb3d5f2ef3ec17bd27a09fe9d0d8a..c58a9dfe4478cf1cf587ddf6797e2e647cf10431 100644
|
| --- a/src/IceTargetLoweringARM32.cpp
|
| +++ b/src/IceTargetLoweringARM32.cpp
|
| @@ -389,12 +389,12 @@ Variable *TargetARM32::getPhysicalRegister(SizeT RegNum, Type Ty) {
|
| Reg = Func->makeVariable(Ty);
|
| Reg->setRegNum(RegNum);
|
| PhysicalRegisters[Ty][RegNum] = Reg;
|
| - // Specially mark SP and LR as an "argument" so that it is considered live
|
| - // upon function entry.
|
| - if (RegNum == RegARM32::Reg_sp || RegNum == RegARM32::Reg_lr) {
|
| - Func->addImplicitArg(Reg);
|
| - Reg->setIgnoreLiveness();
|
| - }
|
| + // Specially mark a named physical register as an "argument" so that it is
|
| + // considered live upon function entry. Otherwise it's possible to get
|
| + // liveness validation errors for saving callee-save registers.
|
| + Func->addImplicitArg(Reg);
|
| + // Don't bother tracking the live range of a named physical register.
|
| + Reg->setIgnoreLiveness();
|
| }
|
| return Reg;
|
| }
|
|
|