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