fix documentation comments; NFC

llvm-svn: 263345
This commit is contained in:
Sanjay Patel 2016-03-12 20:44:30 +00:00
parent 2077c270a0
commit 8e3352072c

View File

@ -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;