LLVM: lib/Frontend/OpenMP/OMPContext.cpp File Reference (original) (raw)

This file implements helper functions and classes to deal with OpenMP contexts as used by [begin/end] declare variant and metadirective. More...

Go to the source code of this file.

Macros
#define DEBUG_TYPE "openmp-ir-builder"
#define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str)
#define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str)
#define OMP_TRAIT_SET(Enum, Str)
#define OMP_TRAIT_SELECTOR(Enum, TraitSetEnum, Str, ReqProp)
#define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str)
#define OMP_TRAIT_SET(Enum, Str)
#define OMP_TRAIT_SELECTOR(Enum, TraitSetEnum, Str, ReqProp)
#define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str)
#define OMP_TRAIT_SELECTOR(Enum, TraitSetEnum, Str, ReqProp)
#define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str)
#define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str)
#define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str)
#define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str)
#define OMP_TRAIT_SELECTOR(Enum, TraitSetEnum, Str, ReqProp)
#define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str)
#define OMP_TRAIT_SET(Enum, Str)
#define OMP_TRAIT_SELECTOR(Enum, TraitSetEnum, Str, ReqProp)
#define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str)
Functions
template<typename T>
static bool isSubset (ArrayRef< T > C0, ArrayRef< T > C1)
Return true if C0 is a subset of C1.
template<typename T>
static bool isStrictSubset (ArrayRef< T > C0, ArrayRef< T > C1)
Return true if C0 is a strict subset of C1.
static bool isStrictSubset (const VariantMatchInfo &VMI0, const VariantMatchInfo &VMI1)
static int isVariantApplicableInContextHelper (const VariantMatchInfo &VMI, const OMPContext &Ctx, SmallVectorImpl< unsigned > *ConstructMatches, bool DeviceOrImplementationSetOnly)
static APInt getVariantMatchScore (const VariantMatchInfo &VMI, const OMPContext &Ctx, SmallVectorImpl< unsigned > &ConstructMatches)

This file implements helper functions and classes to deal with OpenMP contexts as used by [begin/end] declare variant and metadirective.

Definition in file OMPContext.cpp.

DEBUG_TYPE

#define DEBUG_TYPE "openmp-ir-builder"

OMP_TRAIT_PROPERTY [1/10]

#define OMP_TRAIT_PROPERTY ( Enum,
TraitSetEnum,
TraitSelectorEnum,
Str )

Value:

if (TraitSelector::TraitSelectorEnum == TraitSelector::target_device_arch) { \

if (TargetOffloadTriple.getArch() == \

TargetOffloadTriple.getArchTypeForLLVMName(Str)) \

ActiveTraits.set(unsigned(TraitProperty::Enum)); \

ActiveTraits.set(unsigned(TraitProperty::Enum)); \

}

StringRef - Represent a constant reference to a string, i.e.

OMP_TRAIT_PROPERTY [2/10]

#define OMP_TRAIT_PROPERTY ( Enum,
TraitSetEnum,
TraitSelectorEnum,
Str )

Value:

if (TraitSelector::TraitSelectorEnum == TraitSelector::device_arch || \

TraitSelector::TraitSelectorEnum == TraitSelector::target_device_arch) { \

if (TargetTriple.getArch() == TargetTriple.getArchTypeForLLVMName(Str)) \

ActiveTraits.set(unsigned(TraitProperty::Enum)); \

ActiveTraits.set(unsigned(TraitProperty::Enum)); \

}

OMP_TRAIT_PROPERTY [3/10]

#define OMP_TRAIT_PROPERTY ( Enum,
TraitSetEnum,
TraitSelectorEnum,
Str )

Value:

case TraitProperty::Enum: \

return TraitSet::TraitSetEnum;

OMP_TRAIT_PROPERTY [4/10]

#define OMP_TRAIT_PROPERTY ( Enum,
TraitSetEnum,
TraitSelectorEnum,
Str )

Value:

case TraitProperty::Enum: \

return TraitSelector::TraitSelectorEnum;

OMP_TRAIT_PROPERTY [5/10]

#define OMP_TRAIT_PROPERTY ( Enum,
TraitSetEnum,
TraitSelectorEnum,
Str )

Value:

if (Set == TraitSet::TraitSetEnum && Str == S) \

return TraitProperty::Enum;

OMP_TRAIT_PROPERTY [6/10]

#define OMP_TRAIT_PROPERTY ( Enum,
TraitSetEnum,
TraitSelectorEnum,
Str )

Value:

.Case(Str, Selector == TraitSelector::TraitSelectorEnum \

? TraitProperty::Enum \

: TraitProperty::invalid)

OMP_TRAIT_PROPERTY [7/10]

#define OMP_TRAIT_PROPERTY ( Enum,
TraitSetEnum,
TraitSelectorEnum,
Str )

Value:

case TraitProperty::Enum: \

return Str;

OMP_TRAIT_PROPERTY [8/10]

#define OMP_TRAIT_PROPERTY ( Enum,
TraitSetEnum,
TraitSelectorEnum,
Str )

Value:

case TraitProperty::Enum: \

return "(" #TraitSetEnum "," #TraitSelectorEnum "," Str ")";

OMP_TRAIT_PROPERTY [9/10]

#define OMP_TRAIT_PROPERTY ( Enum,
TraitSetEnum,
TraitSelectorEnum,
Str )

Value:

case TraitProperty::Enum: \

return Set == TraitSet::TraitSetEnum && \

Selector == TraitSelector::TraitSelectorEnum;

OMP_TRAIT_PROPERTY [10/10]

#define OMP_TRAIT_PROPERTY ( Enum,
TraitSetEnum,
TraitSelectorEnum,
Str )

Value:

if (TraitSet::TraitSetEnum == Set && \

TraitSelector::TraitSelectorEnum == Selector && \

S.append("'").append(Str).append("'").append(" ");

OMP_TRAIT_SELECTOR [1/5]

#define OMP_TRAIT_SELECTOR ( Enum,
TraitSetEnum,
Str,
ReqProp )

Value:

case TraitSelector::Enum: \

return TraitSet::TraitSetEnum;

OMP_TRAIT_SELECTOR [2/5]

#define OMP_TRAIT_SELECTOR ( Enum,
TraitSetEnum,
Str,
ReqProp )

Value:

.Case(Str, TraitSelector::Enum)

OMP_TRAIT_SELECTOR [3/5]

#define OMP_TRAIT_SELECTOR ( Enum,
TraitSetEnum,
Str,
ReqProp )

Value:

case TraitSelector::Enum: \

return Str;

OMP_TRAIT_SELECTOR [4/5]

#define OMP_TRAIT_SELECTOR ( Enum,
TraitSetEnum,
Str,
ReqProp )

Value:

case TraitSelector::Enum: \

RequiresProperty = ReqProp; \

return Set == TraitSet::TraitSetEnum;

OMP_TRAIT_SELECTOR [5/5]

#define OMP_TRAIT_SELECTOR ( Enum,
TraitSetEnum,
Str,
ReqProp )

Value:

if (TraitSet::TraitSetEnum == Set && StringRef(Str) != "Invalid") \

S.append("'").append(Str).append("'").append(" ");

OMP_TRAIT_SET [1/3]

#define OMP_TRAIT_SET ( Enum,
Str )

Value:

.Case(Str, TraitSet::Enum)

OMP_TRAIT_SET [2/3]

#define OMP_TRAIT_SET ( Enum,
Str )

Value:

case TraitSet::Enum: \

return Str;

OMP_TRAIT_SET [3/3]

#define OMP_TRAIT_SET ( Enum,
Str )

Value:

S.append("'").append(Str).append("'").append(" ");

getVariantMatchScore()

Definition at line 329 of file OMPContext.cpp.

References assert(), llvm::omp::VariantMatchInfo::ConstructTraits, llvm::dbgs(), DEBUG_TYPE, llvm::omp::getOpenMPContextTraitSelectorForProperty(), llvm::omp::getOpenMPContextTraitSetForProperty(), llvm::APInt::getZExtValue(), LLVM_DEBUG, llvm_unreachable, llvm::omp::VariantMatchInfo::RequiredTraits, llvm::omp::VariantMatchInfo::ScoreMap, llvm::BitVector::set_bits(), llvm::SmallVectorTemplateCommon< T, typename >::size(), and llvm::APInt::uge().

Referenced by llvm::omp::getBestVariantMatchForContext().

isStrictSubset() [1/2]

isStrictSubset() [2/2]

isSubset()

isVariantApplicableInContextHelper()

Definition at line 197 of file OMPContext.cpp.

References llvm::all_of(), assert(), llvm::omp::VariantMatchInfo::ConstructTraits, llvm::dbgs(), DEBUG_TYPE, llvm::omp::getOpenMPContextTraitPropertyName(), llvm::omp::getOpenMPContextTraitSelectorForProperty(), llvm::omp::getOpenMPContextTraitSetForProperty(), llvm::omp::VariantMatchInfo::ISATraits, isSubset(), LLVM_DEBUG, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::omp::VariantMatchInfo::RequiredTraits, llvm::BitVector::set_bits(), and llvm::BitVector::test().

Referenced by llvm::omp::getBestVariantMatchForContext(), and llvm::omp::isVariantApplicableInContext().