diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2011-08-09 23:02:53 +0000 |
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2011-08-09 23:02:53 +0000 |
| commit | 21006d40ac9ec7715bca2095451075a83773dc52 (patch) | |
| tree | a3015838890edfbb23387b5a3dcacb28a51b6e96 /lib/Transforms | |
| parent | 51c9805c4bcca635bc6a854e4a246ebd4258f512 (diff) | |
| download | external_llvm-21006d40ac9ec7715bca2095451075a83773dc52.zip external_llvm-21006d40ac9ec7715bca2095451075a83773dc52.tar.gz external_llvm-21006d40ac9ec7715bca2095451075a83773dc52.tar.bz2 | |
Representation of 'atomic load' and 'atomic store' in IR.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137170 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
| -rw-r--r-- | lib/Transforms/Scalar/LowerAtomic.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/Transforms/Scalar/LowerAtomic.cpp b/lib/Transforms/Scalar/LowerAtomic.cpp index 5f5ed03..449a795 100644 --- a/lib/Transforms/Scalar/LowerAtomic.cpp +++ b/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; } |
