Index: lib/Transforms/Instrumentation/InstrProfiling.cpp =================================================================== --- lib/Transforms/Instrumentation/InstrProfiling.cpp +++ lib/Transforms/Instrumentation/InstrProfiling.cpp @@ -147,9 +147,9 @@ IRBuilder<> Builder(Inc->getParent(), *Inc); uint64_t Index = Inc->getIndex()->getZExtValue(); Value *Addr = Builder.CreateConstInBoundsGEP2_64(Counters, 0, Index); - Value *Count = Builder.CreateLoad(Addr, "pgocount"); - Count = Builder.CreateAdd(Count, Builder.getInt64(1)); - Inc->replaceAllUsesWith(Builder.CreateStore(Count, Addr)); + Builder.CreateAtomicRMW(AtomicRMWInst::Add, Addr, Builder.getInt64(1), + llvm::Monotonic); + assert(Inc->use_empty() && "InstrProfIncrementInst has uses!"); Inc->eraseFromParent(); }