diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-08-29 21:08:52 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-08-29 21:08:52 +0000 |
commit | ad7ebc2aebd94ec9e0bd01e1735d06cfe067368b (patch) | |
tree | f0e82cfe34644a2dcfa2123f1edb7360a654ff7d /include/llvm/CodeGen | |
parent | 0d7585839540abb9ab661a741dc3e0c2c860bceb (diff) | |
download | external_llvm-ad7ebc2aebd94ec9e0bd01e1735d06cfe067368b.zip external_llvm-ad7ebc2aebd94ec9e0bd01e1735d06cfe067368b.tar.gz external_llvm-ad7ebc2aebd94ec9e0bd01e1735d06cfe067368b.tar.bz2 |
Add MachineMemOperand::isUnordered().
This means the same as LoadInst/StoreInst::isUnordered(), and implies
!isVolatile().
Atomic loads and stored are also ordered, and this is the right method
to check if it is safe to reorder memory operations. Ordered atomics
can't be reordered wrt normal loads and stores, which is a stronger
constraint than volatile.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162859 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen')
-rw-r--r-- | include/llvm/CodeGen/MachineMemOperand.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/MachineMemOperand.h b/include/llvm/CodeGen/MachineMemOperand.h index 1ac9080..ddb1271 100644 --- a/include/llvm/CodeGen/MachineMemOperand.h +++ b/include/llvm/CodeGen/MachineMemOperand.h @@ -151,6 +151,15 @@ public: bool isNonTemporal() const { return Flags & MONonTemporal; } bool isInvariant() const { return Flags & MOInvariant; } + /// isUnordered - Returns true if this memory operation doesn't have any + /// ordering constraints other than normal aliasing. Volatile and atomic + /// memory operations can't be reordered. + /// + /// Currently, we don't model the difference between volatile and atomic + /// operations. They should retain their ordering relative to all memory + /// operations. + bool isUnordered() const { return !isVolatile(); } + /// refineAlignment - Update this MachineMemOperand to reflect the alignment /// of MMO, if it has a greater alignment. This must only be used when the /// new alignment applies to all users of this MachineMemOperand. |