diff options
Diffstat (limited to 'contrib/llvm/lib/CodeGen/CalcSpillWeights.cpp')
| -rw-r--r-- | contrib/llvm/lib/CodeGen/CalcSpillWeights.cpp | 6 | 
1 files changed, 5 insertions, 1 deletions
diff --git a/contrib/llvm/lib/CodeGen/CalcSpillWeights.cpp b/contrib/llvm/lib/CodeGen/CalcSpillWeights.cpp index 5d722ee34f7e..e6b3bbca2068 100644 --- a/contrib/llvm/lib/CodeGen/CalcSpillWeights.cpp +++ b/contrib/llvm/lib/CodeGen/CalcSpillWeights.cpp @@ -188,6 +188,7 @@ void VirtRegAuxInfo::CalculateWeightAndHint(LiveInterval &li) {  void VirtRegAuxInfo::CalculateRegClass(unsigned reg) {    MachineRegisterInfo &MRI = MF.getRegInfo(); +  const TargetInstrInfo *TII = MF.getTarget().getInstrInfo();    const TargetRegisterInfo *TRI = MF.getTarget().getRegisterInfo();    const TargetRegisterClass *OldRC = MRI.getRegClass(reg);    const TargetRegisterClass *NewRC = TRI->getLargestLegalSuperClass(OldRC); @@ -202,8 +203,11 @@ void VirtRegAuxInfo::CalculateRegClass(unsigned reg) {      // TRI doesn't have accurate enough information to model this yet.      if (I.getOperand().getSubReg())        return; +    // Inline asm instuctions don't remember their constraints. +    if (I->isInlineAsm()) +      return;      const TargetRegisterClass *OpRC = -      I->getDesc().getRegClass(I.getOperandNo(), TRI); +      TII->getRegClass(I->getDesc(), I.getOperandNo(), TRI);      if (OpRC)        NewRC = getCommonSubClass(NewRC, OpRC);      if (!NewRC || NewRC == OldRC)  | 
