forked from OSchip/llvm-project
Make the popcnt support enums and methods have more clear names and
follow the conding conventions regarding enumerating a set of "kinds" of things. llvm-svn: 171687
This commit is contained in:
parent
d3e73556d6
commit
50a36cd148
|
@ -70,16 +70,18 @@ public:
|
|||
/// \name Scalar Target Information
|
||||
/// @{
|
||||
|
||||
/// PopcntHwSupport - Hardware support for population count. Compared to the
|
||||
/// SW implementation, HW support is supposed to significantly boost the
|
||||
/// performance when the population is dense, and it may or may not degrade
|
||||
/// performance if the population is sparse. A HW support is considered as
|
||||
/// "Fast" if it can outperform, or is on a par with, SW implementaion when
|
||||
/// the population is sparse; otherwise, it is considered as "Slow".
|
||||
enum PopcntHwSupport {
|
||||
None,
|
||||
Fast,
|
||||
Slow
|
||||
/// \brief Flags indicating the kind of support for population count.
|
||||
///
|
||||
/// Compared to the SW implementation, HW support is supposed to
|
||||
/// significantly boost the performance when the population is dense, and it
|
||||
/// may or may not degrade performance if the population is sparse. A HW
|
||||
/// support is considered as "Fast" if it can outperform, or is on a par
|
||||
/// with, SW implementaion when the population is sparse; otherwise, it is
|
||||
/// considered as "Slow".
|
||||
enum PopcntSupportKind {
|
||||
PSK_Software,
|
||||
PSK_SlowHardware,
|
||||
PSK_FastHardware
|
||||
};
|
||||
|
||||
/// isLegalAddImmediate - Return true if the specified immediate is legal
|
||||
|
@ -121,8 +123,8 @@ public:
|
|||
/// lookup tables for the target.
|
||||
virtual bool shouldBuildLookupTables() const;
|
||||
|
||||
/// getPopcntHwSupport - Return hardware support for population count.
|
||||
virtual PopcntHwSupport getPopcntHwSupport(unsigned IntTyWidthInBit) const;
|
||||
/// getPopcntSupport - Return hardware support for population count.
|
||||
virtual PopcntSupportKind getPopcntSupport(unsigned IntTyWidthInBit) const;
|
||||
|
||||
/// getIntImmCost - Return the expected cost of materializing the given
|
||||
/// integer immediate of the specified type.
|
||||
|
|
|
@ -79,9 +79,9 @@ bool TargetTransformInfo::shouldBuildLookupTables() const {
|
|||
return PrevTTI->shouldBuildLookupTables();
|
||||
}
|
||||
|
||||
TargetTransformInfo::PopcntHwSupport
|
||||
TargetTransformInfo::getPopcntHwSupport(unsigned IntTyWidthInBit) const {
|
||||
return PrevTTI->getPopcntHwSupport(IntTyWidthInBit);
|
||||
TargetTransformInfo::PopcntSupportKind
|
||||
TargetTransformInfo::getPopcntSupport(unsigned IntTyWidthInBit) const {
|
||||
return PrevTTI->getPopcntSupport(IntTyWidthInBit);
|
||||
}
|
||||
|
||||
unsigned TargetTransformInfo::getIntImmCost(const APInt &Imm, Type *Ty) const {
|
||||
|
@ -202,8 +202,8 @@ struct NoTTI : ImmutablePass, TargetTransformInfo {
|
|||
return true;
|
||||
}
|
||||
|
||||
PopcntHwSupport getPopcntHwSupport(unsigned IntTyWidthInBit) const {
|
||||
return None;
|
||||
PopcntSupportKind getPopcntSupport(unsigned IntTyWidthInBit) const {
|
||||
return PSK_Software;
|
||||
}
|
||||
|
||||
unsigned getIntImmCost(const APInt &Imm, Type *Ty) const {
|
||||
|
|
|
@ -76,7 +76,7 @@ public:
|
|||
/// \name Scalar TTI Implementations
|
||||
/// @{
|
||||
|
||||
virtual PopcntHwSupport getPopcntHwSupport(unsigned TyWidth) const;
|
||||
virtual PopcntSupportKind getPopcntSupport(unsigned TyWidth) const;
|
||||
|
||||
/// @}
|
||||
|
||||
|
@ -157,12 +157,12 @@ FindInConvertTable(const X86TypeConversionCostTblEntry *Tbl, unsigned len,
|
|||
}
|
||||
|
||||
|
||||
X86TTI::PopcntHwSupport X86TTI::getPopcntHwSupport(unsigned TyWidth) const {
|
||||
X86TTI::PopcntSupportKind X86TTI::getPopcntSupport(unsigned TyWidth) const {
|
||||
assert(isPowerOf2_32(TyWidth) && "Ty width must be power of 2");
|
||||
// TODO: Currently the __builtin_popcount() implementation using SSE3
|
||||
// instructions is inefficient. Once the problem is fixed, we should
|
||||
// call ST->hasSSE3() instead of ST->hasSSE4().
|
||||
return ST->hasSSE41() ? Fast : None;
|
||||
return ST->hasSSE41() ? PSK_FastHardware : PSK_Software;
|
||||
}
|
||||
|
||||
unsigned X86TTI::getNumberOfRegisters(bool Vector) const {
|
||||
|
|
|
@ -311,7 +311,7 @@ NclPopcountRecognize::NclPopcountRecognize(LoopIdiomRecognize &TheLIR):
|
|||
|
||||
bool NclPopcountRecognize::preliminaryScreen() {
|
||||
const TargetTransformInfo *TTI = LIR.getTargetTransformInfo();
|
||||
if (TTI->getPopcntHwSupport(32) != TargetTransformInfo::Fast)
|
||||
if (TTI->getPopcntSupport(32) != TargetTransformInfo::PSK_FastHardware)
|
||||
return false;
|
||||
|
||||
// Counting population are usually conducted by few arithmetic instrutions.
|
||||
|
|
Loading…
Reference in New Issue