diff options
Diffstat (limited to 'include/llvm')
-rw-r--r-- | include/llvm/CodeGen/MachineInstr.h | 8 | ||||
-rw-r--r-- | include/llvm/InlineAsm.h | 2 |
2 files changed, 7 insertions, 3 deletions
diff --git a/include/llvm/CodeGen/MachineInstr.h b/include/llvm/CodeGen/MachineInstr.h index eab74bd..4270901 100644 --- a/include/llvm/CodeGen/MachineInstr.h +++ b/include/llvm/CodeGen/MachineInstr.h @@ -58,8 +58,10 @@ public: NoFlags = 0, FrameSetup = 1 << 0, // Instruction is used as a part of // function frame setup code. - InsideBundle = 1 << 1 // Instruction is inside a bundle (not + InsideBundle = 1 << 1, // Instruction is inside a bundle (not // the first MI in a bundle) + MayLoad = 1 << 2, // Instruction could possibly read memory. + MayStore = 1 << 3 // Instruction could possibly modify memory. }; private: const MCInstrDesc *MCID; // Instruction descriptor. @@ -445,7 +447,7 @@ public: /// Instructions with this flag set are not necessarily simple load /// instructions, they may load a value and modify it, for example. bool mayLoad(QueryType Type = AnyInBundle) const { - return hasProperty(MCID::MayLoad, Type); + return hasProperty(MCID::MayLoad, Type) || (Flags & MayLoad); } @@ -454,7 +456,7 @@ public: /// instructions, they may store a modified value based on their operands, or /// may not actually modify anything, for example. bool mayStore(QueryType Type = AnyInBundle) const { - return hasProperty(MCID::MayStore, Type); + return hasProperty(MCID::MayStore, Type) || (Flags & MayStore); } //===--------------------------------------------------------------------===// diff --git a/include/llvm/InlineAsm.h b/include/llvm/InlineAsm.h index c6e0aab..b5e0fd4 100644 --- a/include/llvm/InlineAsm.h +++ b/include/llvm/InlineAsm.h @@ -214,6 +214,8 @@ public: Extra_HasSideEffects = 1, Extra_IsAlignStack = 2, Extra_AsmDialect = 4, + Extra_MayLoad = 8, + Extra_MayStore = 16, // Inline asm operands map to multiple SDNode / MachineInstr operands. // The first operand is an immediate describing the asm operand, the low |