diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/CodeGen/GlobalISel/Utils.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/CodeGen/GlobalISel/Utils.cpp | 27 | 
1 files changed, 16 insertions, 11 deletions
diff --git a/contrib/llvm-project/llvm/lib/CodeGen/GlobalISel/Utils.cpp b/contrib/llvm-project/llvm/lib/CodeGen/GlobalISel/Utils.cpp index 1a440c064a59..b0b84763e922 100644 --- a/contrib/llvm-project/llvm/lib/CodeGen/GlobalISel/Utils.cpp +++ b/contrib/llvm-project/llvm/lib/CodeGen/GlobalISel/Utils.cpp @@ -834,10 +834,9 @@ bool llvm::isKnownToBeAPowerOfTwo(Register Reg, const MachineRegisterInfo &MRI,    case TargetOpcode::G_BUILD_VECTOR: {      // TODO: Probably should have a recursion depth guard since you could have      // bitcasted vector elements. -    for (unsigned I = 1, E = MI.getNumOperands(); I != E; ++I) { -      if (!isKnownToBeAPowerOfTwo(MI.getOperand(I).getReg(), MRI, KB)) +    for (const MachineOperand &MO : llvm::drop_begin(MI.operands())) +      if (!isKnownToBeAPowerOfTwo(MO.getReg(), MRI, KB))          return false; -    }      return true;    } @@ -845,8 +844,8 @@ bool llvm::isKnownToBeAPowerOfTwo(Register Reg, const MachineRegisterInfo &MRI,      // Only handle constants since we would need to know if number of leading      // zeros is greater than the truncation amount.      const unsigned BitWidth = Ty.getScalarSizeInBits(); -    for (unsigned I = 1, E = MI.getNumOperands(); I != E; ++I) { -      auto Const = getIConstantVRegVal(MI.getOperand(I).getReg(), MRI); +    for (const MachineOperand &MO : llvm::drop_begin(MI.operands())) { +      auto Const = getIConstantVRegVal(MO.getReg(), MRI);        if (!Const || !Const->zextOrTrunc(BitWidth).isPowerOf2())          return false;      } @@ -1031,16 +1030,22 @@ Optional<ValueAndVReg> getAnyConstantSplat(Register VReg,    return SplatValAndReg;  } -bool isBuildVectorConstantSplat(const MachineInstr &MI, -                                const MachineRegisterInfo &MRI, -                                int64_t SplatValue, bool AllowUndef) { -  if (auto SplatValAndReg = -          getAnyConstantSplat(MI.getOperand(0).getReg(), MRI, AllowUndef)) +} // end anonymous namespace + +bool llvm::isBuildVectorConstantSplat(const Register Reg, +                                      const MachineRegisterInfo &MRI, +                                      int64_t SplatValue, bool AllowUndef) { +  if (auto SplatValAndReg = getAnyConstantSplat(Reg, MRI, AllowUndef))      return mi_match(SplatValAndReg->VReg, MRI, m_SpecificICst(SplatValue));    return false;  } -} // end anonymous namespace +bool llvm::isBuildVectorConstantSplat(const MachineInstr &MI, +                                      const MachineRegisterInfo &MRI, +                                      int64_t SplatValue, bool AllowUndef) { +  return isBuildVectorConstantSplat(MI.getOperand(0).getReg(), MRI, SplatValue, +                                    AllowUndef); +}  Optional<int64_t>  llvm::getBuildVectorConstantSplat(const MachineInstr &MI,  | 
