Fix compile-time regression caused by rL371928
authorDaniel Sanders <daniel_l_sanders@apple.com>
Wed, 18 Sep 2019 18:14:42 +0000 (18:14 +0000)
committerDaniel Sanders <daniel_l_sanders@apple.com>
Wed, 18 Sep 2019 18:14:42 +0000 (18:14 +0000)
commit1723364a68487c1c070ca58799a0a5c39adca85d
treef0694c4e338256372f001cc4b97bdc85ca0cacd5
parent85e26f56cbf3e1ae3aed155b817912f02172bbef
Fix compile-time regression caused by rL371928

Summary:
Also fixup rL371928 for cases that occur on our out-of-tree backend

There were still quite a few intermediate APInts and this caused the
compile time of MCCodeEmitter for our target to jump from 16s up to
~5m40s. This patch, brings it back down to ~17s by eliminating pretty
much all of them using two new APInt functions (extractBitsAsZExtValue(),
insertBits() but with a uint64_t). The exact conditions for eliminating
them is that the field extracted/inserted must be <=64-bit which is
almost always true.

Note: The two new APInt API's assume that APInt::WordSize is at least
64-bit because that means they touch at most 2 APInt words. They
statically assert that's true. It seems very unlikely that someone
is patching it to be smaller so this should be fine.

Reviewers: jmolloy

Reviewed By: jmolloy

Subscribers: hiraditya, dexonsmith, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D67686

llvm-svn: 372243
llvm/include/llvm/ADT/APInt.h
llvm/lib/Support/APInt.cpp
llvm/test/TableGen/BigEncoder.td
llvm/unittests/ADT/APIntTest.cpp
llvm/utils/TableGen/CodeEmitterGen.cpp