diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/WinEHPrepare.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/IR/AsmWriter.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/IR/Function.cpp | 9 | ||||
| -rw-r--r-- | llvm/lib/IR/Verifier.cpp | 2 | 
4 files changed, 12 insertions, 11 deletions
| diff --git a/llvm/lib/CodeGen/WinEHPrepare.cpp b/llvm/lib/CodeGen/WinEHPrepare.cpp index 041fb7b912b..28efee08581 100644 --- a/llvm/lib/CodeGen/WinEHPrepare.cpp +++ b/llvm/lib/CodeGen/WinEHPrepare.cpp @@ -949,10 +949,14 @@ void WinEHPrepare::removeImplausibleInstructions(Function &F) {            continue;          // Skip call sites which are nounwind intrinsics or inline asm. +        // +        // FIXME: Should this check isIntrinsic() instead of +        // hasLLVMReservedName?  The latter is conservative.          auto *CalledFn =              dyn_cast<Function>(CS.getCalledValue()->stripPointerCasts()); -        if (CalledFn && ((CalledFn->isIntrinsic() && CS.doesNotThrow()) || -                         CS.isInlineAsm())) +        if (CalledFn && +            ((CalledFn->hasLLVMReservedName() && CS.doesNotThrow()) || +             CS.isInlineAsm()))            continue;          // This call site was not part of this funclet, remove it. diff --git a/llvm/lib/IR/AsmWriter.cpp b/llvm/lib/IR/AsmWriter.cpp index 9b2399dd880..bf5cc187e86 100644 --- a/llvm/lib/IR/AsmWriter.cpp +++ b/llvm/lib/IR/AsmWriter.cpp @@ -905,7 +905,7 @@ void SlotTracker::processInstructionMetadata(const Instruction &I) {    // Process metadata used directly by intrinsics.    if (const CallInst *CI = dyn_cast<CallInst>(&I))      if (Function *F = CI->getCalledFunction()) -      if (F->isIntrinsic()) +      if (F->hasLLVMReservedName())          for (auto &Op : I.operands())            if (auto *V = dyn_cast_or_null<MetadataAsValue>(Op))              if (MDNode *N = dyn_cast<MDNode>(V->getMetadata())) @@ -3378,7 +3378,7 @@ void Type::print(raw_ostream &OS, bool /*IsForDebug*/, bool NoDetails) const {  static bool isReferencingMDNode(const Instruction &I) {    if (const auto *CI = dyn_cast<CallInst>(&I))      if (Function *F = CI->getCalledFunction()) -      if (F->isIntrinsic()) +      if (F->hasLLVMReservedName())          for (auto &Op : I.operands())            if (auto *V = dyn_cast_or_null<MetadataAsValue>(Op))              if (isa<MDNode>(V->getMetadata())) diff --git a/llvm/lib/IR/Function.cpp b/llvm/lib/IR/Function.cpp index e1223d0d033..d9c59241ddf 100644 --- a/llvm/lib/IR/Function.cpp +++ b/llvm/lib/IR/Function.cpp @@ -488,9 +488,7 @@ static ArrayRef<const char *> findTargetSubtable(StringRef Name) {  /// \brief This does the actual lookup of an intrinsic ID which  /// matches the given function name. -static Intrinsic::ID lookupIntrinsicID(const ValueName *ValName) { -  StringRef Name = ValName->getKey(); - +static Intrinsic::ID lookupIntrinsicID(StringRef Name) {    ArrayRef<const char *> NameTable = findTargetSubtable(Name);    int Idx = Intrinsic::lookupLLVMIntrinsicByName(NameTable, Name);    if (Idx == -1) @@ -508,12 +506,11 @@ static Intrinsic::ID lookupIntrinsicID(const ValueName *ValName) {  }  void Function::recalculateIntrinsicID() { -  const ValueName *ValName = this->getValueName(); -  if (!ValName || !isIntrinsic()) { +  if (!hasLLVMReservedName()) {      IntID = Intrinsic::not_intrinsic;      return;    } -  IntID = lookupIntrinsicID(ValName); +  IntID = lookupIntrinsicID(getName());  }  /// Returns a stable mangling for the type specified for use in the name diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index 682e934d4b0..659a22428e2 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -3647,7 +3647,7 @@ void Verifier::visitInstruction(Instruction &I) {        // Check to make sure that the "address of" an intrinsic function is never        // taken.        Assert( -          !F->isIntrinsic() || +          !F->hasLLVMReservedName() ||                i == (isa<CallInst>(I) ? e - 1 : isa<InvokeInst>(I) ? e - 3 : 0),            "Cannot take the address of an intrinsic!", &I);        Assert( | 

