From: JF Bastien Date: Sat, 8 Sep 2018 16:43:49 +0000 (+0000) Subject: NFC: use bit_cast more in AArch64AddressingModes X-Git-Tag: llvmorg-8.0.0-rc1~9158 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1825d10d3c1deba8040672a6975f6945e58548c9;p=platform%2Fupstream%2Fllvm.git NFC: use bit_cast more in AArch64AddressingModes llvm-svn: 341749 --- diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AddressingModes.h b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AddressingModes.h index 34b732a..688ca75 100644 --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AddressingModes.h +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AddressingModes.h @@ -754,12 +754,8 @@ static inline uint64_t decodeAdvSIMDModImmType12(uint8_t Imm) { /// Returns true if Imm is the concatenation of a repeating pattern of type T. template static inline bool isSVEMaskOfIdenticalElements(int64_t Imm) { - union { - int64_t Whole; - T Parts[sizeof(int64_t)/sizeof(T)]; - } Vec { Imm }; - - return all_of(Vec.Parts, [Vec](T Elem) { return Elem == Vec.Parts[0]; }); + auto Parts = bit_cast>(Imm); + return all_of(Parts, [&](T Elem) { return Elem == Parts[0]; }); } /// Returns true if Imm is valid for CPY/DUP. @@ -787,29 +783,20 @@ static inline bool isSVEAddSubImm(int64_t Imm) { /// Return true if Imm is valid for DUPM and has no single CPY/DUP equivalent. static inline bool isSVEMoveMaskPreferredLogicalImmediate(int64_t Imm) { - union { - int64_t D; - int32_t S[2]; - int16_t H[4]; - int8_t B[8]; - } Vec = { Imm }; - - if (isSVECpyImm(Vec.D)) + if (isSVECpyImm(Imm)) return false; - if (isSVEMaskOfIdenticalElements(Imm) && - isSVECpyImm(Vec.S[0])) - return false; + auto S = bit_cast>(Imm); + auto H = bit_cast>(Imm); + auto B = bit_cast>(Imm); - if (isSVEMaskOfIdenticalElements(Imm) && - isSVECpyImm(Vec.H[0])) + if (isSVEMaskOfIdenticalElements(Imm) && isSVECpyImm(S[0])) return false; - - if (isSVEMaskOfIdenticalElements(Imm) && - isSVECpyImm(Vec.B[0])) + if (isSVEMaskOfIdenticalElements(Imm) && isSVECpyImm(H[0])) return false; - - return isLogicalImmediate(Vec.D, 64); + if (isSVEMaskOfIdenticalElements(Imm) && isSVECpyImm(B[0])) + return false; + return isLogicalImmediate(Imm, 64); } inline static bool isAnyMOVZMovAlias(uint64_t Value, int RegWidth) {