mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
fix documentation comments; NFC
llvm-svn: 263345
This commit is contained in:
parent
2077c270a0
commit
8e3352072c
@ -42,23 +42,23 @@ class Instruction : public User,
|
||||
DebugLoc DbgLoc; // 'dbg' Metadata cache.
|
||||
|
||||
enum {
|
||||
/// HasMetadataBit - This is a bit stored in the SubClassData field which
|
||||
/// indicates whether this instruction has metadata attached to it or not.
|
||||
/// This is a bit stored in the SubClassData field which indicates whether
|
||||
/// this instruction has metadata attached to it or not.
|
||||
HasMetadataBit = 1 << 15
|
||||
};
|
||||
public:
|
||||
// Out of line virtual method, so the vtable, etc has a home.
|
||||
~Instruction() override;
|
||||
|
||||
/// user_back - Specialize the methods defined in Value, as we know that an
|
||||
/// instruction can only be used by other instructions.
|
||||
/// Specialize the methods defined in Value, as we know that an instruction
|
||||
/// can only be used by other instructions.
|
||||
Instruction *user_back() { return cast<Instruction>(*user_begin());}
|
||||
const Instruction *user_back() const { return cast<Instruction>(*user_begin());}
|
||||
|
||||
inline const BasicBlock *getParent() const { return Parent; }
|
||||
inline BasicBlock *getParent() { return Parent; }
|
||||
|
||||
/// \brief Return the module owning the function this instruction belongs to
|
||||
/// Return the module owning the function this instruction belongs to
|
||||
/// or nullptr it the function does not have a module.
|
||||
///
|
||||
/// Note: this is undefined behavior if the instruction does not have a
|
||||
@ -66,20 +66,18 @@ public:
|
||||
const Module *getModule() const;
|
||||
Module *getModule();
|
||||
|
||||
/// \brief Return the function this instruction belongs to.
|
||||
/// Return the function this instruction belongs to.
|
||||
///
|
||||
/// Note: it is undefined behavior to call this on an instruction not
|
||||
/// currently inserted into a function.
|
||||
const Function *getFunction() const;
|
||||
Function *getFunction();
|
||||
|
||||
/// removeFromParent - This method unlinks 'this' from the containing basic
|
||||
/// block, but does not delete it.
|
||||
///
|
||||
/// This method unlinks 'this' from the containing basic block, but does not
|
||||
/// delete it.
|
||||
void removeFromParent();
|
||||
|
||||
/// eraseFromParent - This method unlinks 'this' from the containing basic
|
||||
/// block and deletes it.
|
||||
/// This method unlinks 'this' from the containing basic block and deletes it.
|
||||
///
|
||||
/// \returns an iterator pointing to the element after the erased one
|
||||
SymbolTableList<Instruction>::iterator eraseFromParent();
|
||||
@ -92,16 +90,15 @@ public:
|
||||
/// specified instruction.
|
||||
void insertAfter(Instruction *InsertPos);
|
||||
|
||||
/// moveBefore - Unlink this instruction from its current basic block and
|
||||
/// insert it into the basic block that MovePos lives in, right before
|
||||
/// MovePos.
|
||||
/// Unlink this instruction from its current basic block and insert it into
|
||||
/// the basic block that MovePos lives in, right before MovePos.
|
||||
void moveBefore(Instruction *MovePos);
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Subclass classification.
|
||||
//===--------------------------------------------------------------------===//
|
||||
|
||||
/// getOpcode() returns a member of one of the enums like Instruction::Add.
|
||||
/// Returns a member of one of the enums like Instruction::Add.
|
||||
unsigned getOpcode() const { return getValueID() - InstructionVal; }
|
||||
|
||||
const char *getOpcodeName() const { return getOpcodeName(getOpcode()); }
|
||||
@ -121,28 +118,27 @@ public:
|
||||
return Opcode >= BinaryOpsBegin && Opcode < BinaryOpsEnd;
|
||||
}
|
||||
|
||||
/// @brief Determine if the Opcode is one of the shift instructions.
|
||||
/// Determine if the Opcode is one of the shift instructions.
|
||||
static inline bool isShift(unsigned Opcode) {
|
||||
return Opcode >= Shl && Opcode <= AShr;
|
||||
}
|
||||
|
||||
/// isLogicalShift - Return true if this is a logical shift left or a logical
|
||||
/// shift right.
|
||||
/// Return true if this is a logical shift left or a logical shift right.
|
||||
inline bool isLogicalShift() const {
|
||||
return getOpcode() == Shl || getOpcode() == LShr;
|
||||
}
|
||||
|
||||
/// isArithmeticShift - Return true if this is an arithmetic shift right.
|
||||
/// Return true if this is an arithmetic shift right.
|
||||
inline bool isArithmeticShift() const {
|
||||
return getOpcode() == AShr;
|
||||
}
|
||||
|
||||
/// @brief Determine if the OpCode is one of the CastInst instructions.
|
||||
/// Determine if the OpCode is one of the CastInst instructions.
|
||||
static inline bool isCast(unsigned OpCode) {
|
||||
return OpCode >= CastOpsBegin && OpCode < CastOpsEnd;
|
||||
}
|
||||
|
||||
/// @brief Determine if the OpCode is one of the FuncletPadInst instructions.
|
||||
/// Determine if the OpCode is one of the FuncletPadInst instructions.
|
||||
static inline bool isFuncletPad(unsigned OpCode) {
|
||||
return OpCode >= FuncletPadOpsBegin && OpCode < FuncletPadOpsEnd;
|
||||
}
|
||||
@ -151,55 +147,53 @@ public:
|
||||
// Metadata manipulation.
|
||||
//===--------------------------------------------------------------------===//
|
||||
|
||||
/// hasMetadata() - Return true if this instruction has any metadata attached
|
||||
/// to it.
|
||||
/// Return true if this instruction has any metadata attached to it.
|
||||
bool hasMetadata() const { return DbgLoc || hasMetadataHashEntry(); }
|
||||
|
||||
/// hasMetadataOtherThanDebugLoc - Return true if this instruction has
|
||||
/// metadata attached to it other than a debug location.
|
||||
/// Return true if this instruction has metadata attached to it other than a
|
||||
/// debug location.
|
||||
bool hasMetadataOtherThanDebugLoc() const {
|
||||
return hasMetadataHashEntry();
|
||||
}
|
||||
|
||||
/// getMetadata - Get the metadata of given kind attached to this Instruction.
|
||||
/// Get the metadata of given kind attached to this Instruction.
|
||||
/// If the metadata is not found then return null.
|
||||
MDNode *getMetadata(unsigned KindID) const {
|
||||
if (!hasMetadata()) return nullptr;
|
||||
return getMetadataImpl(KindID);
|
||||
}
|
||||
|
||||
/// getMetadata - Get the metadata of given kind attached to this Instruction.
|
||||
/// Get the metadata of given kind attached to this Instruction.
|
||||
/// If the metadata is not found then return null.
|
||||
MDNode *getMetadata(StringRef Kind) const {
|
||||
if (!hasMetadata()) return nullptr;
|
||||
return getMetadataImpl(Kind);
|
||||
}
|
||||
|
||||
/// getAllMetadata - Get all metadata attached to this Instruction. The first
|
||||
/// element of each pair returned is the KindID, the second element is the
|
||||
/// metadata value. This list is returned sorted by the KindID.
|
||||
/// Get all metadata attached to this Instruction. The first element of each
|
||||
/// pair returned is the KindID, the second element is the metadata value.
|
||||
/// This list is returned sorted by the KindID.
|
||||
void
|
||||
getAllMetadata(SmallVectorImpl<std::pair<unsigned, MDNode *>> &MDs) const {
|
||||
if (hasMetadata())
|
||||
getAllMetadataImpl(MDs);
|
||||
}
|
||||
|
||||
/// getAllMetadataOtherThanDebugLoc - This does the same thing as
|
||||
/// getAllMetadata, except that it filters out the debug location.
|
||||
/// This does the same thing as getAllMetadata, except that it filters out the
|
||||
/// debug location.
|
||||
void getAllMetadataOtherThanDebugLoc(
|
||||
SmallVectorImpl<std::pair<unsigned, MDNode *>> &MDs) const {
|
||||
if (hasMetadataOtherThanDebugLoc())
|
||||
getAllMetadataOtherThanDebugLocImpl(MDs);
|
||||
}
|
||||
|
||||
/// getAAMetadata - Fills the AAMDNodes structure with AA metadata from
|
||||
/// this instruction. When Merge is true, the existing AA metadata is
|
||||
/// merged with that from this instruction providing the most-general result.
|
||||
/// Fills the AAMDNodes structure with AA metadata from this instruction.
|
||||
/// When Merge is true, the existing AA metadata is merged with that from this
|
||||
/// instruction providing the most-general result.
|
||||
void getAAMetadata(AAMDNodes &N, bool Merge = false) const;
|
||||
|
||||
/// setMetadata - Set the metadata of the specified kind to the specified
|
||||
/// node. This updates/replaces metadata if already present, or removes it if
|
||||
/// Node is null.
|
||||
/// Set the metadata of the specified kind to the specified node. This updates
|
||||
/// or replaces metadata if already present, or removes it if Node is null.
|
||||
void setMetadata(unsigned KindID, MDNode *Node);
|
||||
void setMetadata(StringRef Kind, MDNode *Node);
|
||||
|
||||
@ -220,14 +214,13 @@ public:
|
||||
}
|
||||
/// @}
|
||||
|
||||
/// setAAMetadata - Sets the metadata on this instruction from the
|
||||
/// AAMDNodes structure.
|
||||
/// Sets the metadata on this instruction from the AAMDNodes structure.
|
||||
void setAAMetadata(const AAMDNodes &N);
|
||||
|
||||
/// setDebugLoc - Set the debug location information for this instruction.
|
||||
/// Set the debug location information for this instruction.
|
||||
void setDebugLoc(DebugLoc Loc) { DbgLoc = std::move(Loc); }
|
||||
|
||||
/// getDebugLoc - Return the debug location for this node as a DebugLoc.
|
||||
/// Return the debug location for this node as a DebugLoc.
|
||||
const DebugLoc &getDebugLoc() const { return DbgLoc; }
|
||||
|
||||
/// Set or clear the unsafe-algebra flag on this instruction, which must be an
|
||||
@ -289,8 +282,7 @@ public:
|
||||
void copyFastMathFlags(const Instruction *I);
|
||||
|
||||
private:
|
||||
/// hasMetadataHashEntry - Return true if we have an entry in the on-the-side
|
||||
/// metadata hash.
|
||||
/// Return true if we have an entry in the on-the-side metadata hash.
|
||||
bool hasMetadataHashEntry() const {
|
||||
return (getSubclassDataFromValue() & HasMetadataBit) != 0;
|
||||
}
|
||||
@ -302,6 +294,7 @@ private:
|
||||
getAllMetadataImpl(SmallVectorImpl<std::pair<unsigned, MDNode *>> &) const;
|
||||
void getAllMetadataOtherThanDebugLocImpl(
|
||||
SmallVectorImpl<std::pair<unsigned, MDNode *>> &) const;
|
||||
/// Clear all hashtable-based metadata from this instruction.
|
||||
void clearMetadataHashEntries();
|
||||
public:
|
||||
//===--------------------------------------------------------------------===//
|
||||
@ -309,7 +302,7 @@ public:
|
||||
//===--------------------------------------------------------------------===//
|
||||
|
||||
|
||||
/// isAssociative - Return true if the instruction is associative:
|
||||
/// Return true if the instruction is associative:
|
||||
///
|
||||
/// Associative operators satisfy: x op (y op z) === (x op y) op z
|
||||
///
|
||||
@ -318,7 +311,7 @@ public:
|
||||
bool isAssociative() const;
|
||||
static bool isAssociative(unsigned op);
|
||||
|
||||
/// isCommutative - Return true if the instruction is commutative:
|
||||
/// Return true if the instruction is commutative:
|
||||
///
|
||||
/// Commutative operators satisfy: (x op y) === (y op x)
|
||||
///
|
||||
@ -328,7 +321,7 @@ public:
|
||||
bool isCommutative() const { return isCommutative(getOpcode()); }
|
||||
static bool isCommutative(unsigned op);
|
||||
|
||||
/// isIdempotent - Return true if the instruction is idempotent:
|
||||
/// Return true if the instruction is idempotent:
|
||||
///
|
||||
/// Idempotent operators satisfy: x op x === x
|
||||
///
|
||||
@ -337,7 +330,7 @@ public:
|
||||
bool isIdempotent() const { return isIdempotent(getOpcode()); }
|
||||
static bool isIdempotent(unsigned op);
|
||||
|
||||
/// isNilpotent - Return true if the instruction is nilpotent:
|
||||
/// Return true if the instruction is nilpotent:
|
||||
///
|
||||
/// Nilpotent operators satisfy: x op x === Id,
|
||||
///
|
||||
@ -349,37 +342,31 @@ public:
|
||||
bool isNilpotent() const { return isNilpotent(getOpcode()); }
|
||||
static bool isNilpotent(unsigned op);
|
||||
|
||||
/// mayWriteToMemory - Return true if this instruction may modify memory.
|
||||
///
|
||||
/// Return true if this instruction may modify memory.
|
||||
bool mayWriteToMemory() const;
|
||||
|
||||
/// mayReadFromMemory - Return true if this instruction may read memory.
|
||||
///
|
||||
/// Return true if this instruction may read memory.
|
||||
bool mayReadFromMemory() const;
|
||||
|
||||
/// mayReadOrWriteMemory - Return true if this instruction may read or
|
||||
/// write memory.
|
||||
///
|
||||
/// Return true if this instruction may read or write memory.
|
||||
bool mayReadOrWriteMemory() const {
|
||||
return mayReadFromMemory() || mayWriteToMemory();
|
||||
}
|
||||
|
||||
/// isAtomic - Return true if this instruction has an
|
||||
/// AtomicOrdering of unordered or higher.
|
||||
///
|
||||
/// Return true if this instruction has an AtomicOrdering of unordered or
|
||||
/// higher.
|
||||
bool isAtomic() const;
|
||||
|
||||
/// mayThrow - Return true if this instruction may throw an exception.
|
||||
///
|
||||
/// Return true if this instruction may throw an exception.
|
||||
bool mayThrow() const;
|
||||
|
||||
/// mayReturn - Return true if this is a function that may return.
|
||||
/// this is true for all normal instructions. The only exception
|
||||
/// Return true if this is a function that may return.
|
||||
/// This is true for all normal instructions. The only exception
|
||||
/// is functions that are marked with the 'noreturn' attribute.
|
||||
///
|
||||
bool mayReturn() const;
|
||||
|
||||
/// mayHaveSideEffects - Return true if the instruction may have side effects.
|
||||
/// Return true if the instruction may have side effects.
|
||||
///
|
||||
/// Note that this does not consider malloc and alloca to have side
|
||||
/// effects because the newly allocated memory is completely invisible to
|
||||
@ -389,7 +376,7 @@ public:
|
||||
return mayWriteToMemory() || mayThrow() || !mayReturn();
|
||||
}
|
||||
|
||||
/// \brief Return true if the instruction is a variety of EH-block.
|
||||
/// Return true if the instruction is a variety of EH-block.
|
||||
bool isEHPad() const {
|
||||
switch (getOpcode()) {
|
||||
case Instruction::CatchSwitch:
|
||||
@ -402,21 +389,21 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
/// clone() - Create a copy of 'this' instruction that is identical in all
|
||||
/// ways except the following:
|
||||
/// Create a copy of 'this' instruction that is identical in all ways except
|
||||
/// the following:
|
||||
/// * The instruction has no parent
|
||||
/// * The instruction has no name
|
||||
///
|
||||
Instruction *clone() const;
|
||||
|
||||
/// isIdenticalTo - Return true if the specified instruction is exactly
|
||||
/// identical to the current one. This means that all operands match and any
|
||||
/// extra information (e.g. load is volatile) agree.
|
||||
/// Return true if the specified instruction is exactly identical to the
|
||||
/// current one. This means that all operands match and any extra information
|
||||
/// (e.g. load is volatile) agree.
|
||||
bool isIdenticalTo(const Instruction *I) const;
|
||||
|
||||
/// isIdenticalToWhenDefined - This is like isIdenticalTo, except that it
|
||||
/// ignores the SubclassOptionalData flags, which specify conditions
|
||||
/// under which the instruction's result is undefined.
|
||||
/// This is like isIdenticalTo, except that it ignores the
|
||||
/// SubclassOptionalData flags, which specify conditions under which the
|
||||
/// instruction's result is undefined.
|
||||
bool isIdenticalToWhenDefined(const Instruction *I) const;
|
||||
|
||||
/// When checking for operation equivalence (using isSameOperationAs) it is
|
||||
@ -439,10 +426,9 @@ public:
|
||||
/// @brief Determine if one instruction is the same operation as another.
|
||||
bool isSameOperationAs(const Instruction *I, unsigned flags = 0) const;
|
||||
|
||||
/// isUsedOutsideOfBlock - Return true if there are any uses of this
|
||||
/// instruction in blocks other than the specified block. Note that PHI nodes
|
||||
/// are considered to evaluate their operands in the corresponding predecessor
|
||||
/// block.
|
||||
/// Return true if there are any uses of this instruction in blocks other than
|
||||
/// the specified block. Note that PHI nodes are considered to evaluate their
|
||||
/// operands in the corresponding predecessor block.
|
||||
bool isUsedOutsideOfBlock(const BasicBlock *BB) const;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user