summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/LowerAtomic.cpp
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2011-08-09 23:02:53 +0000
committerEli Friedman <eli.friedman@gmail.com>2011-08-09 23:02:53 +0000
commit59b66883eacbc62a09c09f08bcbfdce7af46cf31 (patch)
tree94bf465b6c6ec54c89d295d0422be1d6cc3613c6 /llvm/lib/Transforms/Scalar/LowerAtomic.cpp
parente95fcf7860d7de015a4fd2b41eb785340c32f875 (diff)
downloadbcm5719-llvm-59b66883eacbc62a09c09f08bcbfdce7af46cf31.tar.gz
bcm5719-llvm-59b66883eacbc62a09c09f08bcbfdce7af46cf31.zip
Representation of 'atomic load' and 'atomic store' in IR.
llvm-svn: 137170
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LowerAtomic.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/LowerAtomic.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/LowerAtomic.cpp b/llvm/lib/Transforms/Scalar/LowerAtomic.cpp
index 5f5ed03bd82..449a795489a 100644
--- a/llvm/lib/Transforms/Scalar/LowerAtomic.cpp
+++ b/llvm/lib/Transforms/Scalar/LowerAtomic.cpp
@@ -190,6 +190,16 @@ static bool LowerFenceInst(FenceInst *FI) {
return true;
}
+static bool LowerLoadInst(LoadInst *LI) {
+ LI->setAtomic(NotAtomic);
+ return true;
+}
+
+static bool LowerStoreInst(StoreInst *SI) {
+ SI->setAtomic(NotAtomic);
+ return true;
+}
+
namespace {
struct LowerAtomic : public BasicBlockPass {
static char ID;
@@ -208,6 +218,13 @@ namespace {
Changed |= LowerAtomicCmpXchgInst(CXI);
else if (AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(Inst))
Changed |= LowerAtomicRMWInst(RMWI);
+ else if (LoadInst *LI = dyn_cast<LoadInst>(Inst)) {
+ if (LI->isAtomic())
+ LowerLoadInst(LI);
+ } else if (StoreInst *SI = dyn_cast<StoreInst>(Inst)) {
+ if (SI->isAtomic())
+ LowerStoreInst(SI);
+ }
}
return Changed;
}
OpenPOWER on IntegriCloud