diff options
Diffstat (limited to 'lib/IR/Core.cpp')
| -rw-r--r-- | lib/IR/Core.cpp | 22 | 
1 files changed, 14 insertions, 8 deletions
diff --git a/lib/IR/Core.cpp b/lib/IR/Core.cpp index 4ff0261a7f08f..2165ae5a94702 100644 --- a/lib/IR/Core.cpp +++ b/lib/IR/Core.cpp @@ -50,6 +50,7 @@ void llvm::initializeCore(PassRegistry &Registry) {    initializePrintModulePassWrapperPass(Registry);    initializePrintFunctionPassWrapperPass(Registry);    initializePrintBasicBlockPassPass(Registry); +  initializeSafepointIRVerifierPass(Registry);    initializeVerifierLegacyPassPass(Registry);  } @@ -2755,11 +2756,14 @@ static LLVMAtomicOrdering mapToLLVMOrdering(AtomicOrdering Ordering) {    llvm_unreachable("Invalid AtomicOrdering value!");  } +// TODO: Should this and other atomic instructions support building with +// "syncscope"?  LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering Ordering,                              LLVMBool isSingleThread, const char *Name) {    return wrap(      unwrap(B)->CreateFence(mapFromLLVMOrdering(Ordering), -                           isSingleThread ? SingleThread : CrossThread, +                           isSingleThread ? SyncScope::SingleThread +                                          : SyncScope::System,                             Name));  } @@ -3041,7 +3045,8 @@ LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B,LLVMAtomicRMWBinOp op,      case LLVMAtomicRMWBinOpUMin: intop = AtomicRMWInst::UMin; break;    }    return wrap(unwrap(B)->CreateAtomicRMW(intop, unwrap(PTR), unwrap(Val), -    mapFromLLVMOrdering(ordering), singleThread ? SingleThread : CrossThread)); +    mapFromLLVMOrdering(ordering), singleThread ? SyncScope::SingleThread +                                                : SyncScope::System));  }  LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr, @@ -3053,7 +3058,7 @@ LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr,    return wrap(unwrap(B)->CreateAtomicCmpXchg(unwrap(Ptr), unwrap(Cmp),                  unwrap(New), mapFromLLVMOrdering(SuccessOrdering),                  mapFromLLVMOrdering(FailureOrdering), -                singleThread ? SingleThread : CrossThread)); +                singleThread ? SyncScope::SingleThread : SyncScope::System));  } @@ -3061,17 +3066,18 @@ LLVMBool LLVMIsAtomicSingleThread(LLVMValueRef AtomicInst) {    Value *P = unwrap<Value>(AtomicInst);    if (AtomicRMWInst *I = dyn_cast<AtomicRMWInst>(P)) -    return I->getSynchScope() == SingleThread; -  return cast<AtomicCmpXchgInst>(P)->getSynchScope() == SingleThread; +    return I->getSyncScopeID() == SyncScope::SingleThread; +  return cast<AtomicCmpXchgInst>(P)->getSyncScopeID() == +             SyncScope::SingleThread;  }  void LLVMSetAtomicSingleThread(LLVMValueRef AtomicInst, LLVMBool NewValue) {    Value *P = unwrap<Value>(AtomicInst); -  SynchronizationScope Sync = NewValue ? SingleThread : CrossThread; +  SyncScope::ID SSID = NewValue ? SyncScope::SingleThread : SyncScope::System;    if (AtomicRMWInst *I = dyn_cast<AtomicRMWInst>(P)) -    return I->setSynchScope(Sync); -  return cast<AtomicCmpXchgInst>(P)->setSynchScope(Sync); +    return I->setSyncScopeID(SSID); +  return cast<AtomicCmpXchgInst>(P)->setSyncScopeID(SSID);  }  LLVMAtomicOrdering LLVMGetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst)  {  | 
