From: Alexander Shaposhnikov Date: Wed, 20 Jul 2022 22:29:03 +0000 (+0000) Subject: [GlobalOpt] Enable evaluation of atomic stores X-Git-Tag: upstream/15.0.7~1037 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=67f1fe8597817f9630c84d77ca23852e362e62d6;p=platform%2Fupstream%2Fllvm.git [GlobalOpt] Enable evaluation of atomic stores Relax the check to allow evaluation of atomic stores (but still skip volatile stores). Test plan: 1/ ninja check-llvm check-clang 2/ Bootstrapped LLVM/Clang pass tests Differential revision: https://reviews.llvm.org/D129841 --- diff --git a/llvm/lib/Transforms/Utils/Evaluator.cpp b/llvm/lib/Transforms/Utils/Evaluator.cpp index 7b8d855..3989fbc 100644 --- a/llvm/lib/Transforms/Utils/Evaluator.cpp +++ b/llvm/lib/Transforms/Utils/Evaluator.cpp @@ -301,9 +301,9 @@ bool Evaluator::EvaluateBlock(BasicBlock::iterator CurInst, BasicBlock *&NextBB, LLVM_DEBUG(dbgs() << "Evaluating Instruction: " << *CurInst << "\n"); if (StoreInst *SI = dyn_cast(CurInst)) { - if (!SI->isSimple()) { - LLVM_DEBUG(dbgs() << "Store is not simple! Can not evaluate.\n"); - return false; // no volatile/atomic accesses. + if (SI->isVolatile()) { + LLVM_DEBUG(dbgs() << "Store is volatile! Can not evaluate.\n"); + return false; // no volatile accesses. } Constant *Ptr = getVal(SI->getOperand(1)); Constant *FoldedPtr = ConstantFoldConstant(Ptr, DL, TLI); diff --git a/llvm/test/Transforms/GlobalOpt/ctor-list-opt.ll b/llvm/test/Transforms/GlobalOpt/ctor-list-opt.ll index d039941..d351be1 100644 --- a/llvm/test/Transforms/GlobalOpt/ctor-list-opt.ll +++ b/llvm/test/Transforms/GlobalOpt/ctor-list-opt.ll @@ -27,6 +27,7 @@ @Z = global i32 123 ; [#uses=1] @D = global double 0.000000e+00 ; [#uses=1] @CTORGV = internal global i1 false ; [#uses=2] +@GA = global i32 0 ; [#uses=1] define internal void @CTOR1() { ret void @@ -130,3 +131,9 @@ define internal void @CTOR11() { define internal void @CTOR12() { ret void } + +; CHECK-NOT: CTOR13 +define internal void @CTOR13() { + store atomic i32 123, i32* @GA seq_cst, align 4 + ret void +}