LLVM: lib/CodeGen/Analysis.cpp File Reference (original) (raw)
Go to the source code of this file.
| Functions | |
|---|---|
| static bool | isNoopBitcast (Type *T1, Type *T2, const TargetLoweringBase &TLI) |
| static const Value * | getNoopInput (const Value *V, SmallVectorImpl< unsigned > &ValLoc, unsigned &DataBits, const TargetLoweringBase &TLI, const DataLayout &DL) |
| Look through operations that will be free to find the earliest source of this value. | |
| static bool | slotOnlyDiscardsData (const Value *RetVal, const Value *CallVal, SmallVectorImpl< unsigned > &RetIndices, SmallVectorImpl< unsigned > &CallIndices, bool AllowDifferingSizes, const TargetLoweringBase &TLI, const DataLayout &DL) |
| Return true if this scalar return value only has bits discarded on its path from the "tail call" to the "ret". | |
| static bool | indexReallyValid (Type *T, unsigned Idx) |
| For an aggregate type, determine whether a given index is within bounds or not. | |
| static bool | advanceToNextLeafType (SmallVectorImpl< Type * > &SubTypes, SmallVectorImpl< unsigned > &Path) |
| Move the given iterators to the next leaf type in depth first traversal. | |
| static bool | firstRealType (Type *Next, SmallVectorImpl< Type * > &SubTypes, SmallVectorImpl< unsigned > &Path) |
| Find the first non-empty, scalar-like type in Next and setup the iterator components. | |
| static bool | nextRealType (SmallVectorImpl< Type * > &SubTypes, SmallVectorImpl< unsigned > &Path) |
| Set the iterator data-structures to the next non-empty, non-aggregate subtype. | |
| static void | collectEHScopeMembers (DenseMap< const MachineBasicBlock *, int > &EHScopeMembership, int EHScope, const MachineBasicBlock *MBB) |
◆ advanceToNextLeafType()
Move the given iterators to the next leaf type in depth first traversal.
Performs a depth-first traversal of the type as specified by its arguments, stopping at the next leaf node (which may be a legitimate scalar type or an empty struct or array).
Parameters
| SubTypes | List of the partial components making up the type from outermost to innermost non-empty aggregate. The element currently represented is SubTypes.back()->getTypeAtIndex(Path.back() - 1). |
|---|---|
| Path | Set of extractvalue indices leading from the outermost type (SubTypes[0]) to the leaf node currently represented. |
Returns
true if a new type was found, false otherwise. Calling this function again on a finished iterator will repeatedly return false. SubTypes.back()->getTypeAtIndex(Path.back()) is either an empty aggregate or a non-aggregate
Definition at line 453 of file Analysis.cpp.
References llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::ExtractValueInst::getIndexedType(), indexReallyValid(), llvm::Type::isAggregateType(), llvm::SmallVectorTemplateBase< T, bool >::pop_back(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by firstRealType(), and nextRealType().
◆ collectEHScopeMembers()
Definition at line 732 of file Analysis.cpp.
References llvm::append_range(), assert(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::insert(), llvm::MachineBasicBlock::isEHPad(), llvm::MachineBasicBlock::isEHScopeReturnBlock(), MBB, P, llvm::SmallVectorImpl< T >::pop_back_val(), and llvm::MachineBasicBlock::successors().
Referenced by llvm::getEHScopeMembership().
◆ firstRealType()
Find the first non-empty, scalar-like type in Next and setup the iterator components.
Assuming Next is an aggregate of some kind, this function will traverse the tree from left to right (i.e. depth-first) looking for the first non-aggregate type which will play a role in function return.
For example, if Next was {[0 x i64], {{}, i32, {}}, i32} then we would setup Path as [1, 1] and SubTypes as [Next, {{}, i32, {}}] to represent the first i32 in that type.
Definition at line 494 of file Analysis.cpp.
References advanceToNextLeafType(), llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::ExtractValueInst::getIndexedType(), llvm::Next, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by llvm::returnTypeIsEligibleForTailCall().
◆ getNoopInput()
Look through operations that will be free to find the earliest source of this value.
Parameters
| ValLoc | If V has aggregate type, we will be interested in a particular scalar component. This records its address; the reverse of this list gives a sequence of indices appropriate for an extractvalue to locate the important value. This value is updated during the function and on exit will indicate similar information for the Value returned. |
|---|---|
| DataBits | If this function looks through truncate instructions, this will record the smallest size attained. |
Definition at line 303 of file Analysis.cpp.
References llvm::TargetLoweringBase::allowTruncateForTailCall(), llvm::SmallVectorImpl< T >::append(), llvm::ArrayRef< T >::begin(), llvm::cast(), DL, llvm::dyn_cast(), llvm::ArrayRef< T >::end(), llvm::Value::getType(), I, llvm::isa(), isNoopBitcast(), llvm::ArrayRef< T >::rbegin(), llvm::SmallVectorTemplateCommon< T, typename >::rbegin(), llvm::ArrayRef< T >::rend(), llvm::SmallVectorImpl< T >::resize(), llvm::ArrayRef< T >::size(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by slotOnlyDiscardsData().