diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2016-12-15 14:36:06 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2016-12-15 14:36:06 +0000 |
commit | 91b5cf8412a9fffdca96619f02f485c8c48bf852 (patch) | |
tree | 45cc792752ed1bae1559f8501bc5e485eda07fed /llvm/lib/Target/Hexagon/RDFGraph.h | |
parent | 2f7f0e7a480d760999f1973d8db76aee590cf83e (diff) | |
download | bcm5719-llvm-91b5cf8412a9fffdca96619f02f485c8c48bf852.tar.gz bcm5719-llvm-91b5cf8412a9fffdca96619f02f485c8c48bf852.zip |
Extract LaneBitmask into a separate type
Specifically avoid implicit conversions from/to integral types to
avoid potential errors when changing the underlying type. For example,
a typical initialization of a "full" mask was "LaneMask = ~0u", which
would result in a value of 0x00000000FFFFFFFF if the type was extended
to uint64_t.
Differential Revision: https://reviews.llvm.org/D27454
llvm-svn: 289820
Diffstat (limited to 'llvm/lib/Target/Hexagon/RDFGraph.h')
-rw-r--r-- | llvm/lib/Target/Hexagon/RDFGraph.h | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/llvm/lib/Target/Hexagon/RDFGraph.h b/llvm/lib/Target/Hexagon/RDFGraph.h index 2e9a6cc6720..b279752a21f 100644 --- a/llvm/lib/Target/Hexagon/RDFGraph.h +++ b/llvm/lib/Target/Hexagon/RDFGraph.h @@ -403,9 +403,9 @@ namespace rdf { LaneBitmask Mask; RegisterRef() : RegisterRef(0) {} - explicit RegisterRef(RegisterId R, LaneBitmask M = ~LaneBitmask(0)) - : Reg(R), Mask(R != 0 ? M : 0) {} - operator bool() const { return Reg != 0 && Mask != LaneBitmask(0); } + explicit RegisterRef(RegisterId R, LaneBitmask M = LaneBitmask::getAll()) + : Reg(R), Mask(R != 0 ? M : LaneBitmask::getNone()) {} + operator bool() const { return Reg != 0 && !Mask.none(); } bool operator== (const RegisterRef &RR) const { return Reg == RR.Reg && Mask == RR.Mask; } @@ -458,7 +458,7 @@ namespace rdf { uint32_t find(T Val) const { auto F = llvm::find(Map, Val); assert(F != Map.end()); - return *F; + return F - Map.begin(); } private: std::vector<T> Map; @@ -468,15 +468,15 @@ namespace rdf { LaneMaskIndex() = default; LaneBitmask getLaneMaskForIndex(uint32_t K) const { - return K == 0 ? ~LaneBitmask(0) : get(K); + return K == 0 ? LaneBitmask::getAll() : get(K); } uint32_t getIndexForLaneMask(LaneBitmask LM) { - assert(LM != LaneBitmask(0)); - return LM == ~LaneBitmask(0) ? 0 : insert(LM); + assert(!LM.none()); + return LM.all() ? 0 : insert(LM); } uint32_t getIndexForLaneMask(LaneBitmask LM) const { - assert(LM != LaneBitmask(0)); - return LM == ~LaneBitmask(0) ? 0 : find(LM); + assert(!LM.none()); + return LM.all() ? 0 : find(LM); } PackedRegisterRef pack(RegisterRef RR) { return { RR.Reg, getIndexForLaneMask(RR.Mask) }; |