diff options
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AccelTable.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/CodeGenPrepare.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineOperand.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineScheduler.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineStableHash.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/RegAllocFast.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/RegisterCoalescer.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp | 20 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 5 | 
15 files changed, 45 insertions, 23 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/AccelTable.cpp b/llvm/lib/CodeGen/AsmPrinter/AccelTable.cpp index e5c85d5..1ea30d8 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AccelTable.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AccelTable.cpp @@ -745,11 +745,6 @@ void AppleAccelTableStaticTypeData::emit(AsmPrinter *Asm) const {    Asm->emitInt32(QualifiedNameHash);  } -constexpr AppleAccelTableData::Atom AppleAccelTableTypeData::Atoms[]; -constexpr AppleAccelTableData::Atom AppleAccelTableOffsetData::Atoms[]; -constexpr AppleAccelTableData::Atom AppleAccelTableStaticOffsetData::Atoms[]; -constexpr AppleAccelTableData::Atom AppleAccelTableStaticTypeData::Atoms[]; -  #ifndef NDEBUG  void AppleAccelTableWriter::Header::print(raw_ostream &OS) const {    OS << "Magic: " << format("0x%x", Magic) << "\n" diff --git a/llvm/lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp b/llvm/lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp index 171fb83..98cdada 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DbgEntityHistoryCalculator.cpp @@ -112,8 +112,7 @@ void DbgValueHistoryMap::Entry::endEntry(EntryIndex Index) {  /// to the first intersecting scope range if one exists.  static std::optional<ArrayRef<InsnRange>::iterator>  intersects(const MachineInstr *StartMI, const MachineInstr *EndMI, -           const ArrayRef<InsnRange> &Ranges, -           const InstructionOrdering &Ordering) { +           ArrayRef<InsnRange> Ranges, const InstructionOrdering &Ordering) {    for (auto RangesI = Ranges.begin(), RangesE = Ranges.end();         RangesI != RangesE; ++RangesI) {      if (EndMI && Ordering.isBefore(EndMI, RangesI->first)) diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp index 8ea1326..0309e22 100644 --- a/llvm/lib/CodeGen/CodeGenPrepare.cpp +++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp @@ -368,7 +368,7 @@ class CodeGenPrepare {    std::unique_ptr<DominatorTree> DT;  public: -  CodeGenPrepare(){}; +  CodeGenPrepare() = default;    CodeGenPrepare(const TargetMachine *TM) : TM(TM){};    /// If encounter huge function, we need to limit the build time.    bool IsHugeFunc = false; diff --git a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp index 9ace7d6..ec4d13f 100644 --- a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp @@ -589,8 +589,8 @@ bool CombinerHelper::matchCombineShuffleVector(    return true;  } -void CombinerHelper::applyCombineShuffleVector( -    MachineInstr &MI, const ArrayRef<Register> Ops) const { +void CombinerHelper::applyCombineShuffleVector(MachineInstr &MI, +                                               ArrayRef<Register> Ops) const {    Register DstReg = MI.getOperand(0).getReg();    Builder.setInsertPt(*MI.getParent(), MI);    Register NewDstReg = MRI.cloneVirtualRegister(DstReg); diff --git a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp index 4b4df98..637acd6 100644 --- a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp +++ b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp @@ -109,8 +109,10 @@ MachineInstrBuilder MachineIRBuilder::buildConstDbgValue(const Constant &C,    if (auto *CI = dyn_cast<ConstantInt>(NumericConstant)) {      if (CI->getBitWidth() > 64)        MIB.addCImm(CI); -    else +    else if (CI->getBitWidth() == 1)        MIB.addImm(CI->getZExtValue()); +    else +      MIB.addImm(CI->getSExtValue());    } else if (auto *CFP = dyn_cast<ConstantFP>(NumericConstant)) {      MIB.addFPImm(CFP);    } else if (isa<ConstantPointerNull>(NumericConstant)) { diff --git a/llvm/lib/CodeGen/MachineOperand.cpp b/llvm/lib/CodeGen/MachineOperand.cpp index bb9c76f..8c6d219 100644 --- a/llvm/lib/CodeGen/MachineOperand.cpp +++ b/llvm/lib/CodeGen/MachineOperand.cpp @@ -363,8 +363,9 @@ bool MachineOperand::isIdenticalTo(const MachineOperand &Other) const {    case MachineOperand::MO_RegisterMask:    case MachineOperand::MO_RegisterLiveOut: {      // Shallow compare of the two RegMasks -    const uint32_t *RegMask = getRegMask(); -    const uint32_t *OtherRegMask = Other.getRegMask(); +    const uint32_t *RegMask = isRegMask() ? getRegMask() : getRegLiveOut(); +    const uint32_t *OtherRegMask = +        isRegMask() ? Other.getRegMask() : Other.getRegLiveOut();      if (RegMask == OtherRegMask)        return true; @@ -434,7 +435,8 @@ hash_code llvm::hash_value(const MachineOperand &MO) {      if (const MachineFunction *MF = getMFIfAvailable(MO)) {        const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();        unsigned RegMaskSize = MachineOperand::getRegMaskSize(TRI->getNumRegs()); -      const uint32_t *RegMask = MO.getRegMask(); +      const uint32_t *RegMask = +          MO.isRegMask() ? MO.getRegMask() : MO.getRegLiveOut();        std::vector<stable_hash> RegMaskHashes(RegMask, RegMask + RegMaskSize);        return hash_combine(MO.getType(), MO.getTargetFlags(),                            stable_hash_combine(RegMaskHashes)); diff --git a/llvm/lib/CodeGen/MachineScheduler.cpp b/llvm/lib/CodeGen/MachineScheduler.cpp index 3ed1045..f18c051 100644 --- a/llvm/lib/CodeGen/MachineScheduler.cpp +++ b/llvm/lib/CodeGen/MachineScheduler.cpp @@ -334,7 +334,7 @@ public:      LiveIntervals &LIS;    }; -  MachineSchedulerImpl() {} +  MachineSchedulerImpl() = default;    // Migration only    void setLegacyPass(MachineFunctionPass *P) { this->P = P; }    void setMFAM(MachineFunctionAnalysisManager *MFAM) { this->MFAM = MFAM; } @@ -358,7 +358,7 @@ public:      MachineLoopInfo &MLI;      AAResults &AA;    }; -  PostMachineSchedulerImpl() {} +  PostMachineSchedulerImpl() = default;    // Migration only    void setLegacyPass(MachineFunctionPass *P) { this->P = P; }    void setMFAM(MachineFunctionAnalysisManager *MFAM) { this->MFAM = MFAM; } diff --git a/llvm/lib/CodeGen/MachineStableHash.cpp b/llvm/lib/CodeGen/MachineStableHash.cpp index 9d56696..6da708d 100644 --- a/llvm/lib/CodeGen/MachineStableHash.cpp +++ b/llvm/lib/CodeGen/MachineStableHash.cpp @@ -136,7 +136,8 @@ stable_hash llvm::stableHashValue(const MachineOperand &MO) {            const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();            unsigned RegMaskSize =                MachineOperand::getRegMaskSize(TRI->getNumRegs()); -          const uint32_t *RegMask = MO.getRegMask(); +          const uint32_t *RegMask = +              MO.isRegMask() ? MO.getRegMask() : MO.getRegLiveOut();            std::vector<llvm::stable_hash> RegMaskHashes(RegMask,                                                         RegMask + RegMaskSize);            return stable_hash_combine(MO.getType(), MO.getTargetFlags(), diff --git a/llvm/lib/CodeGen/RegAllocFast.cpp b/llvm/lib/CodeGen/RegAllocFast.cpp index 697b779..ec6ffd4 100644 --- a/llvm/lib/CodeGen/RegAllocFast.cpp +++ b/llvm/lib/CodeGen/RegAllocFast.cpp @@ -206,7 +206,7 @@ private:      bool Error = false;              ///< Could not allocate.      explicit LiveReg(Register VirtReg) : VirtReg(VirtReg) {} -    explicit LiveReg() {} +    explicit LiveReg() = default;      unsigned getSparseSetIndex() const { return VirtReg.virtRegIndex(); }    }; diff --git a/llvm/lib/CodeGen/RegisterCoalescer.cpp b/llvm/lib/CodeGen/RegisterCoalescer.cpp index e17a214b..38f6deb 100644 --- a/llvm/lib/CodeGen/RegisterCoalescer.cpp +++ b/llvm/lib/CodeGen/RegisterCoalescer.cpp @@ -378,7 +378,7 @@ class RegisterCoalescer : private LiveRangeEdit::Delegate {  public:    // For legacy pass only. -  RegisterCoalescer() {} +  RegisterCoalescer() = default;    RegisterCoalescer &operator=(RegisterCoalescer &&Other) = default;    RegisterCoalescer(LiveIntervals *LIS, SlotIndexes *SI, diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index bdd6bf0..46c4bb8 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -9374,7 +9374,7 @@ static unsigned bigEndianByteAt(unsigned BW, unsigned i) {  // Check if the bytes offsets we are looking at match with either big or  // little endian value loaded. Return true for big endian, false for little  // endian, and std::nullopt if match failed. -static std::optional<bool> isBigEndian(const ArrayRef<int64_t> ByteOffsets, +static std::optional<bool> isBigEndian(ArrayRef<int64_t> ByteOffsets,                                         int64_t FirstOffset) {    // The endian can be decided only when it is 2 bytes at least.    unsigned Width = ByteOffsets.size(); diff --git a/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp b/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp index bb10cf6..d84c3fb 100644 --- a/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp @@ -733,6 +733,8 @@ MachineOperand GetMOForConstDbgOp(const SDDbgOperand &Op) {    if (const ConstantInt *CI = dyn_cast<ConstantInt>(V)) {      if (CI->getBitWidth() > 64)        return MachineOperand::CreateCImm(CI); +    if (CI->getBitWidth() == 1) +      return MachineOperand::CreateImm(CI->getZExtValue());      return MachineOperand::CreateImm(CI->getSExtValue());    }    if (const ConstantFP *CF = dyn_cast<ConstantFP>(V)) diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp index bf1abfe..58983cb 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp @@ -1172,6 +1172,12 @@ bool DAGTypeLegalizer::SoftenFloatOperand(SDNode *N, unsigned OpNo) {    case ISD::FAKE_USE:      Res = SoftenFloatOp_FAKE_USE(N);      break; +  case ISD::STACKMAP: +    Res = SoftenFloatOp_STACKMAP(N, OpNo); +    break; +  case ISD::PATCHPOINT: +    Res = SoftenFloatOp_PATCHPOINT(N, OpNo); +    break;    }    // If the result is null, the sub-method took care of registering results etc. @@ -1512,6 +1518,20 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_FAKE_USE(SDNode *N) {                       N->getOperand(0), Op1);  } +SDValue DAGTypeLegalizer::SoftenFloatOp_STACKMAP(SDNode *N, unsigned OpNo) { +  assert(OpNo > 1); // Because the first two arguments are guaranteed legal. +  SmallVector<SDValue> NewOps(N->ops()); +  NewOps[OpNo] = GetSoftenedFloat(NewOps[OpNo]); +  return SDValue(DAG.UpdateNodeOperands(N, NewOps), 0); +} + +SDValue DAGTypeLegalizer::SoftenFloatOp_PATCHPOINT(SDNode *N, unsigned OpNo) { +  assert(OpNo >= 7); +  SmallVector<SDValue> NewOps(N->ops()); +  NewOps[OpNo] = GetSoftenedFloat(NewOps[OpNo]); +  return SDValue(DAG.UpdateNodeOperands(N, NewOps), 0); +} +  //===----------------------------------------------------------------------===//  //  Float Result Expansion  //===----------------------------------------------------------------------===// diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h index 9656a30..ede522e 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h @@ -658,6 +658,8 @@ private:    SDValue SoftenFloatOp_ATOMIC_STORE(SDNode *N, unsigned OpNo);    SDValue SoftenFloatOp_FCOPYSIGN(SDNode *N);    SDValue SoftenFloatOp_FAKE_USE(SDNode *N); +  SDValue SoftenFloatOp_STACKMAP(SDNode *N, unsigned OpNo); +  SDValue SoftenFloatOp_PATCHPOINT(SDNode *N, unsigned OpNo);    //===--------------------------------------------------------------------===//    // Float Expansion Support: LegalizeFloatTypes.cpp diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index a522650..fa0c899 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -8958,9 +8958,8 @@ bool SelectionDAGBuilder::canTailCall(const CallBase &CB) const {    // Avoid emitting tail calls in functions with the disable-tail-calls    // attribute.    const Function *Caller = CB.getParent()->getParent(); -  if (Caller->getFnAttribute("disable-tail-calls").getValueAsString() == -          "true" && -      !isMustTailCall) +  if (!isMustTailCall && +      Caller->getFnAttribute("disable-tail-calls").getValueAsBool())      return false;    // We can't tail call inside a function with a swifterror argument. Lowering  | 
