diff options
author | Duncan Sands <baldrick@free.fr> | 2009-05-06 06:49:50 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2009-05-06 06:49:50 +0000 |
commit | 7af1c78b98d2df7d0ab9154461ca3d835706716e (patch) | |
tree | 36e5d75294f6632cb5486c95675e0f2b6d13de86 /include | |
parent | e031e4bcb91ceafa2ddf0a7480a7135bdf5ebd57 (diff) | |
download | external_llvm-7af1c78b98d2df7d0ab9154461ca3d835706716e.zip external_llvm-7af1c78b98d2df7d0ab9154461ca3d835706716e.tar.gz external_llvm-7af1c78b98d2df7d0ab9154461ca3d835706716e.tar.bz2 |
Allow readonly functions to unwind exceptions. Teach
the optimizers about this. For example, a readonly
function with no uses cannot be removed unless it is
also marked nounwind.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71071 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Instruction.h | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/include/llvm/Instruction.h b/include/llvm/Instruction.h index 0a39b08..7d946e8 100644 --- a/include/llvm/Instruction.h +++ b/include/llvm/Instruction.h @@ -40,14 +40,6 @@ public: // Out of line virtual method, so the vtable, etc has a home. ~Instruction(); - /// mayWriteToMemory - Return true if this instruction may modify memory. - /// - bool mayWriteToMemory() const; - - /// mayReadFromMemory - Return true if this instruction may read memory. - /// - bool mayReadFromMemory() const; - /// clone() - Create a copy of 'this' instruction that is identical in all /// ways except the following: /// * The instruction has no parent @@ -181,6 +173,24 @@ public: } static bool isTrapping(unsigned op); + /// mayWriteToMemory - Return true if this instruction may modify memory. + /// + bool mayWriteToMemory() const; + + /// mayReadFromMemory - Return true if this instruction may read memory. + /// + bool mayReadFromMemory() const; + + /// mayThrow - Return true if this instruction may throw an exception. + /// + bool mayThrow() const; + + /// mayHaveSideEffects - Return true if the instruction may have side effects. + /// + bool mayHaveSideEffects() const { + return mayWriteToMemory() || mayThrow(); + } + /// Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const Instruction *) { return true; } static inline bool classof(const Value *V) { |