mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
538215e467
The patch is to adjust the strategy of frequency based consthoisting: Previously when the candidate block has the same frequency with the existing blocks containing a const, it will not hoist the const to the candidate block. For that case, now we change the strategy to hoist the const if only existing blocks have more than one block member. This is helpful for reducing code size. Differential Revision: https://reviews.llvm.org/D35084 llvm-svn: 307328
83 lines
2.4 KiB
C++
83 lines
2.4 KiB
C++
//===-------- BlockFrequency.h - Block Frequency Wrapper --------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements Block Frequency class.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_SUPPORT_BLOCKFREQUENCY_H
|
|
#define LLVM_SUPPORT_BLOCKFREQUENCY_H
|
|
|
|
#include "llvm/Support/BranchProbability.h"
|
|
#include "llvm/Support/DataTypes.h"
|
|
|
|
namespace llvm {
|
|
|
|
class raw_ostream;
|
|
|
|
// This class represents Block Frequency as a 64-bit value.
|
|
class BlockFrequency {
|
|
uint64_t Frequency;
|
|
|
|
public:
|
|
BlockFrequency(uint64_t Freq = 0) : Frequency(Freq) { }
|
|
|
|
/// \brief Returns the maximum possible frequency, the saturation value.
|
|
static uint64_t getMaxFrequency() { return -1ULL; }
|
|
|
|
/// \brief Returns the frequency as a fixpoint number scaled by the entry
|
|
/// frequency.
|
|
uint64_t getFrequency() const { return Frequency; }
|
|
|
|
/// \brief Multiplies with a branch probability. The computation will never
|
|
/// overflow.
|
|
BlockFrequency &operator*=(BranchProbability Prob);
|
|
BlockFrequency operator*(BranchProbability Prob) const;
|
|
|
|
/// \brief Divide by a non-zero branch probability using saturating
|
|
/// arithmetic.
|
|
BlockFrequency &operator/=(BranchProbability Prob);
|
|
BlockFrequency operator/(BranchProbability Prob) const;
|
|
|
|
/// \brief Adds another block frequency using saturating arithmetic.
|
|
BlockFrequency &operator+=(BlockFrequency Freq);
|
|
BlockFrequency operator+(BlockFrequency Freq) const;
|
|
|
|
/// \brief Subtracts another block frequency using saturating arithmetic.
|
|
BlockFrequency &operator-=(BlockFrequency Freq);
|
|
BlockFrequency operator-(BlockFrequency Freq) const;
|
|
|
|
/// \brief Shift block frequency to the right by count digits saturating to 1.
|
|
BlockFrequency &operator>>=(const unsigned count);
|
|
|
|
bool operator<(BlockFrequency RHS) const {
|
|
return Frequency < RHS.Frequency;
|
|
}
|
|
|
|
bool operator<=(BlockFrequency RHS) const {
|
|
return Frequency <= RHS.Frequency;
|
|
}
|
|
|
|
bool operator>(BlockFrequency RHS) const {
|
|
return Frequency > RHS.Frequency;
|
|
}
|
|
|
|
bool operator>=(BlockFrequency RHS) const {
|
|
return Frequency >= RHS.Frequency;
|
|
}
|
|
|
|
bool operator==(BlockFrequency RHS) const {
|
|
return Frequency == RHS.Frequency;
|
|
}
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|