mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-20 01:20:44 +02:00
aco: introduce 'isPrecolored' flag for Operand and Definition
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31387>
This commit is contained in:
parent
b33f47b498
commit
c2ed4b474a
1 changed files with 24 additions and 7 deletions
|
|
@ -452,9 +452,10 @@ static constexpr PhysReg scc{253};
|
|||
class Operand final {
|
||||
public:
|
||||
constexpr Operand()
|
||||
: reg_(PhysReg{128}), isTemp_(false), isFixed_(true), isConstant_(false), isKill_(false),
|
||||
isUndef_(true), isFirstKill_(false), constSize(0), isLateKill_(false), isClobbered_(false),
|
||||
isCopyKill_(false), is16bit_(false), is24bit_(false), signext(false)
|
||||
: reg_(PhysReg{128}), isTemp_(false), isFixed_(true), isPrecolored_(false),
|
||||
isConstant_(false), isKill_(false), isUndef_(true), isFirstKill_(false),
|
||||
isLateKill_(false), isClobbered_(false), isCopyKill_(false), is16bit_(false),
|
||||
is24bit_(false), signext(false), constSize(0)
|
||||
{}
|
||||
|
||||
explicit Operand(Temp r) noexcept
|
||||
|
|
@ -734,6 +735,13 @@ public:
|
|||
reg_ = reg;
|
||||
}
|
||||
|
||||
constexpr bool isPrecolored() const noexcept { return isPrecolored_; }
|
||||
constexpr void setPrecolored(PhysReg reg) noexcept
|
||||
{
|
||||
setFixed(reg);
|
||||
isPrecolored_ = isFixed_;
|
||||
}
|
||||
|
||||
constexpr bool isConstant() const noexcept { return isConstant_; }
|
||||
|
||||
constexpr bool isLiteral() const noexcept { return isConstant() && reg_ == 255; }
|
||||
|
|
@ -879,17 +887,18 @@ private:
|
|||
struct {
|
||||
uint8_t isTemp_ : 1;
|
||||
uint8_t isFixed_ : 1;
|
||||
uint8_t isPrecolored_ : 1;
|
||||
uint8_t isConstant_ : 1;
|
||||
uint8_t isKill_ : 1;
|
||||
uint8_t isUndef_ : 1;
|
||||
uint8_t isFirstKill_ : 1;
|
||||
uint8_t constSize : 2;
|
||||
uint8_t isLateKill_ : 1;
|
||||
uint8_t isClobbered_ : 1;
|
||||
uint8_t isCopyKill_ : 1;
|
||||
uint8_t is16bit_ : 1;
|
||||
uint8_t is24bit_ : 1;
|
||||
uint8_t signext : 1;
|
||||
uint8_t constSize : 2;
|
||||
};
|
||||
/* can't initialize bit-fields in c++11, so work around using a union */
|
||||
uint16_t control_ = 0;
|
||||
|
|
@ -905,8 +914,8 @@ private:
|
|||
class Definition final {
|
||||
public:
|
||||
constexpr Definition()
|
||||
: temp(Temp(0, s1)), reg_(0), isFixed_(0), isKill_(0), isPrecise_(0), isInfPreserve_(0),
|
||||
isNaNPreserve_(0), isSZPreserve_(0), isNUW_(0), isNoCSE_(0)
|
||||
: temp(Temp(0, s1)), reg_(0), isFixed_(0), isPrecolored_(0), isKill_(0), isPrecise_(0),
|
||||
isInfPreserve_(0), isNaNPreserve_(0), isSZPreserve_(0), isNUW_(0), isNoCSE_(0)
|
||||
{}
|
||||
explicit Definition(Temp tmp) noexcept : temp(tmp) {}
|
||||
explicit Definition(PhysReg reg, RegClass type) noexcept : temp(Temp(0, type)) { setFixed(reg); }
|
||||
|
|
@ -938,6 +947,13 @@ public:
|
|||
reg_ = reg;
|
||||
}
|
||||
|
||||
constexpr bool isPrecolored() const noexcept { return isPrecolored_; }
|
||||
constexpr void setPrecolored(PhysReg reg) noexcept
|
||||
{
|
||||
setFixed(reg);
|
||||
isPrecolored_ = isFixed_;
|
||||
}
|
||||
|
||||
constexpr void setKill(bool flag) noexcept { isKill_ = flag; }
|
||||
|
||||
constexpr bool isKill() const noexcept { return isKill_; }
|
||||
|
|
@ -973,6 +989,7 @@ private:
|
|||
union {
|
||||
struct {
|
||||
uint8_t isFixed_ : 1;
|
||||
uint8_t isPrecolored_ : 1;
|
||||
uint8_t isKill_ : 1;
|
||||
uint8_t isPrecise_ : 1;
|
||||
uint8_t isInfPreserve_ : 1;
|
||||
|
|
@ -982,7 +999,7 @@ private:
|
|||
uint8_t isNoCSE_ : 1;
|
||||
};
|
||||
/* can't initialize bit-fields in c++11, so work around using a union */
|
||||
uint8_t control_ = 0;
|
||||
uint16_t control_ = 0;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue