| Index: src/IceTargetLoweringX8632.cpp
|
| diff --git a/src/IceTargetLoweringX8632.cpp b/src/IceTargetLoweringX8632.cpp
|
| index c2782f6a66d736200958d5526e94bc27ab9369aa..2652e8bfd0e761666e9872378ce626ea72874cfb 100644
|
| --- a/src/IceTargetLoweringX8632.cpp
|
| +++ b/src/IceTargetLoweringX8632.cpp
|
| @@ -2615,9 +2615,12 @@ Operand *TargetX8632::legalize(Operand *From, LegalMask Allowed,
|
| }
|
| if (Variable *Var = llvm::dyn_cast<Variable>(From)) {
|
| // We need a new physical register for the operand if:
|
| - // Mem is not allowed and Var->getRegNum() is unknown, or
|
| + // Mem is not allowed and Var isn't guaranteed a physical
|
| + // register, or
|
| // RegNum is required and Var->getRegNum() doesn't match.
|
| - if ((!(Allowed & Legal_Mem) && !Var->hasReg()) ||
|
| + bool WillHaveRegister =
|
| + (Var->hasReg() || Var->getWeight() == RegWeight::Inf);
|
| + if ((!(Allowed & Legal_Mem) && !WillHaveRegister) ||
|
| (RegNum != Variable::NoRegister && RegNum != Var->getRegNum())) {
|
| Variable *Reg = copyToReg(From, RegNum);
|
| if (RegNum == Variable::NoRegister) {
|
|
|