aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Target/TargetInstrInfo.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-01-06 05:43:21 +0000
committerChris Lattner <sabre@nondot.org>2008-01-06 05:43:21 +0000
commit8ed9c1a6d92083102867d0886dc0b6ed0fb05461 (patch)
treec00b41ddc971a7acf2dbc7ff726ab343e0fb50b2 /include/llvm/Target/TargetInstrInfo.h
parente67bde5bb1959dbd7085981cb0bcf6f7c749f724 (diff)
downloadexternal_llvm-8ed9c1a6d92083102867d0886dc0b6ed0fb05461.zip
external_llvm-8ed9c1a6d92083102867d0886dc0b6ed0fb05461.tar.gz
external_llvm-8ed9c1a6d92083102867d0886dc0b6ed0fb05461.tar.bz2
describe isStore and simplify the implementation of hasUnmodelledSideEffects.
No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45651 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Target/TargetInstrInfo.h')
-rw-r--r--include/llvm/Target/TargetInstrInfo.h14
1 files changed, 12 insertions, 2 deletions
diff --git a/include/llvm/Target/TargetInstrInfo.h b/include/llvm/Target/TargetInstrInfo.h
index 5ba1204..7b19270 100644
--- a/include/llvm/Target/TargetInstrInfo.h
+++ b/include/llvm/Target/TargetInstrInfo.h
@@ -49,7 +49,13 @@ const unsigned M_RET_FLAG = 1 << 2;
const unsigned M_BARRIER_FLAG = 1 << 3;
const unsigned M_DELAY_SLOT_FLAG = 1 << 4;
const unsigned M_LOAD_FLAG = 1 << 5;
+
+/// M_STORE_FLAG - This flag is set to any instruction that could possibly
+/// modify memory. Instructions with this flag set are not necessarily simple
+/// store instructions, they may store a modified value based on their operands,
+/// or may not actually modify anything, for example.
const unsigned M_STORE_FLAG = 1 << 6;
+
const unsigned M_INDIRECT_FLAG = 1 << 7;
const unsigned M_IMPLICIT_DEF_FLAG = 1 << 8;
@@ -276,6 +282,11 @@ public:
bool isLoad(MachineOpCode Opcode) const {
return get(Opcode).Flags & M_LOAD_FLAG;
}
+
+ /// isStore - Return true if this instruction could possibly modify memory.
+ /// Instructions with this flag set are not necessarily simple store
+ /// instructions, they may store a modified value based on their operands, or
+ /// may not actually modify anything, for example.
bool isStore(MachineOpCode Opcode) const {
return get(Opcode).Flags & M_STORE_FLAG;
}
@@ -322,9 +333,8 @@ public:
/// flags.
bool hasUnmodelledSideEffects(MachineInstr *MI) const {
const TargetInstrDescriptor *TID = MI->getInstrDescriptor();
- if (!(TID->Flags & M_NEVER_HAS_SIDE_EFFECTS ||
- TID->Flags & M_MAY_HAVE_SIDE_EFFECTS)) return true;
if (TID->Flags & M_NEVER_HAS_SIDE_EFFECTS) return false;
+ if (!(TID->Flags & M_MAY_HAVE_SIDE_EFFECTS)) return true;
return !isReallySideEffectFree(MI); // May have side effects
}
protected: