From: Nick Lewycky Date: Fri, 3 Jun 2011 08:25:39 +0000 (+0000) Subject: Rework the logic to not rely on undefined behaviour (1LL << 64). Also simplify. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=b2afe8759dbbed1d74da361ef0db1a4aaafefdb3;p=oota-llvm.git Rework the logic to not rely on undefined behaviour (1LL << 64). Also simplify. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132537 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/utils/TableGen/Record.cpp b/utils/TableGen/Record.cpp index c427b761d8d..8ac8cd9716e 100644 --- a/utils/TableGen/Record.cpp +++ b/utils/TableGen/Record.cpp @@ -68,14 +68,9 @@ Init *BitsRecTy::convertValue(BitInit *UI) { /// canFitInBitfield - Return true if the number of bits is large enough to hold /// the integer value. static bool canFitInBitfield(int64_t Value, unsigned NumBits) { - if (Value >= 0) { - if (Value & ~((1LL << NumBits) - 1)) - return false; - } else if ((Value >> NumBits) != -1 || (Value & (1LL << (NumBits-1))) == 0) { - return false; - } - - return true; + // For example, with NumBits == 4, we permit Values from [-7 .. 15]. + return (NumBits >= sizeof(Value) * 8) || + (Value >> NumBits == 0) || (Value >> (NumBits-1) == -1); } /// convertValue from Int initializer to bits type: Split the integer up into the