[llvm] [APFloat][Perf] Improve fp literal parsing speed + stack usage (PR #221701)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 7 04:02:45 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-adt
Author: Lewis Crawford (LewisCrawford)
<details>
<summary>Changes</summary>
Rewrite APFloat decimal conversion to reduce stack use and speed up floating-point literal parsing.
On an `llvm-as` test of 100k randomized half/float/double/fp128 global constants, assembly time fell from 666 ms to 551 ms (17.3%) and peak stack use fell from 25,912 B to 6,640 B (74.4%).
To achieve these results, there are several optimizations:
- Precomputing the powers-of-five factors, replacing a 1,205-word runtime workspace with a 601-word constant table sufficient to construct powers through 5^16383.
- Replacing the two fixed 600-word stack-based scratch/destination buffers with SmallVectors that are dynamically sized based on the input, drastically reducing stack usage.
- These SmallVectors allow for 16 64-bit words to be stored on the stack (enough to cover ordinary f16/f32 inputs, which only need 2-6 words), and larger doubles and fp128s get allocated on the heap instead.
---
Patch is 27.29 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/221701.diff
4 Files Affected:
- (modified) llvm/lib/Support/APFloat.cpp (+46-24)
- (added) llvm/lib/Support/APFloatPowerOfFiveTable.inc (+612)
- (modified) llvm/unittests/ADT/APFloatTest.cpp (+28)
- (added) llvm/utils/generate-apfloat-pow5-table.py (+48)
``````````diff
diff --git a/llvm/lib/Support/APFloat.cpp b/llvm/lib/Support/APFloat.cpp
index 59a6ba3867d40..8b1cc70ce734a 100644
--- a/llvm/lib/Support/APFloat.cpp
+++ b/llvm/lib/Support/APFloat.cpp
@@ -17,6 +17,7 @@
#include "llvm/ADT/FloatingPointMode.h"
#include "llvm/ADT/FoldingSet.h"
#include "llvm/ADT/Hashing.h"
+#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
@@ -27,6 +28,7 @@
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include <cstring>
+#include <iterator>
#include <limits.h>
/// Shared headers from LLVM libc
@@ -309,11 +311,21 @@ bool APFloatBase::isLosslesslyConvertibleTo(const fltSemantics &From,
requires two parts to hold the single-part result). So we add an
extra one to guarantee enough space whilst multiplying. */
const unsigned int maxExponent = 16383;
-const unsigned int maxPrecision = 113;
-const unsigned int maxPowerOfFiveExponent = maxExponent + maxPrecision - 1;
-const unsigned int maxPowerOfFiveParts =
- 2 +
- ((maxPowerOfFiveExponent * 815) / (351 * APFloatBase::integerPartWidth));
+
+// Decimal exponents in the f16 and f32 ranges need at most 2 and 6 parts.
+// Keep 16 parts (128 bytes) inline: enough for 5^413, but not a large stack
+// frame. Longer fractional spellings use heap storage.
+static constexpr unsigned NumPow5PartsOnStack = 16;
+
+static unsigned int powerOfFivePartsForExponent(unsigned int power) {
+ assert(power <= maxExponent);
+
+ // 815 / 351 is an upper bound on log2(5). Reserve an additional part for
+ // tcFullMultiply, which writes the full product width even when its most
+ // significant part is zero.
+ return 2 +
+ ((power * 815) / (351 * APFloatBase::integerPartWidth));
+}
unsigned int APFloatBase::semanticsPrecision(const fltSemantics &semantics) {
return semantics.precision;
@@ -764,36 +776,43 @@ ulpsFromBoundary(const APFloatBase::integerPart *parts, unsigned int bits,
return ~(APFloatBase::integerPart) 0; /* A lot. */
}
+static constexpr unsigned PowerOfFivePartCounts[] = {1, 1, 2, 3, 5, 10,
+ 19, 38, 75, 149, 298};
+
+static constexpr APFloatBase::integerPart PowerOfFiveParts[] = {
+#include "APFloatPowerOfFiveTable.inc"
+};
+
+static_assert([] {
+ unsigned Sum = 0;
+ for (unsigned Count : PowerOfFivePartCounts)
+ Sum += Count;
+ return Sum;
+}() == std::size(PowerOfFiveParts));
+
/* Place pow(5, power) in DST, and return the number of parts used.
DST must be at least one part larger than size of the answer. */
static unsigned int
powerOf5(APFloatBase::integerPart *dst, unsigned int power) {
static const APFloatBase::integerPart firstEightPowers[] = { 1, 5, 25, 125, 625, 3125, 15625, 78125 };
- APFloatBase::integerPart pow5s[maxPowerOfFiveParts * 2 + 5];
- pow5s[0] = 78125 * 5;
- unsigned int partsCount = 1;
- APFloatBase::integerPart scratch[maxPowerOfFiveParts], *p1, *p2, *pow5;
- assert(power <= maxExponent);
+ SmallVector<APFloatBase::integerPart, NumPow5PartsOnStack> scratch;
+ scratch.resize_for_overwrite(powerOfFivePartsForExponent(power));
+
+ APFloatBase::integerPart *p1, *p2;
+ const APFloatBase::integerPart *pow5;
p1 = dst;
- p2 = scratch;
+ p2 = scratch.data();
*p1 = firstEightPowers[power & 7];
power >>= 3;
unsigned result = 1;
- pow5 = pow5s;
+ pow5 = PowerOfFiveParts;
for (unsigned int n = 0; power; power >>= 1, n++) {
- /* Calculate pow(5,pow(2,n+3)) if we haven't yet. */
- if (n != 0) {
- APInt::tcFullMultiply(pow5, pow5 - partsCount, pow5 - partsCount,
- partsCount, partsCount);
- partsCount *= 2;
- if (pow5[partsCount - 1] == 0)
- partsCount--;
- }
+ unsigned partsCount = PowerOfFivePartCounts[n];
if (power & 1) {
APFloatBase::integerPart *tmp;
@@ -2967,7 +2986,10 @@ IEEEFloat::roundSignificandWithExponent(const integerPart *decSigParts,
unsigned sigPartCount, int exp,
roundingMode rounding_mode) {
fltSemantics calcSemantics = { 32767, -32767, 0, 0 };
- integerPart pow5Parts[maxPowerOfFiveParts];
+ unsigned int power = exp >= 0 ? exp : -exp;
+ unsigned int pow5PartCapacity = powerOfFivePartsForExponent(power);
+ SmallVector<integerPart, NumPow5PartsOnStack> pow5Parts;
+ pow5Parts.resize_for_overwrite(pow5PartCapacity);
bool isNearest = rounding_mode == rmNearestTiesToEven ||
rounding_mode == rmNearestTiesToAway;
@@ -2975,7 +2997,7 @@ IEEEFloat::roundSignificandWithExponent(const integerPart *decSigParts,
unsigned parts = partCountForBits(semantics->precision + 11);
/* Calculate pow(5, abs(exp)). */
- unsigned pow5PartCount = powerOf5(pow5Parts, exp >= 0 ? exp : -exp);
+ unsigned pow5PartCount = powerOf5(pow5Parts.data(), power);
for (;; parts *= 2) {
unsigned int excessPrecision, truncatedBits;
@@ -2990,8 +3012,8 @@ IEEEFloat::roundSignificandWithExponent(const integerPart *decSigParts,
opStatus sigStatus = decSig.convertFromUnsignedParts(
decSigParts, sigPartCount, rmNearestTiesToEven);
- opStatus powStatus = pow5.convertFromUnsignedParts(pow5Parts, pow5PartCount,
- rmNearestTiesToEven);
+ opStatus powStatus = pow5.convertFromUnsignedParts(
+ pow5Parts.data(), pow5PartCount, rmNearestTiesToEven);
/* Add exp, as 10^n = 5^n * 2^n. */
decSig.exponent += exp;
diff --git a/llvm/lib/Support/APFloatPowerOfFiveTable.inc b/llvm/lib/Support/APFloatPowerOfFiveTable.inc
new file mode 100644
index 0000000000000..4b8a8b5687761
--- /dev/null
+++ b/llvm/lib/Support/APFloatPowerOfFiveTable.inc
@@ -0,0 +1,612 @@
+// 5^8
+UINT64_C(0x000000000005F5E1),
+// 5^16
+UINT64_C(0x0000002386F26FC1),
+// 5^32
+UINT64_C(0x2D6D415B85ACEF81),
+UINT64_C(0x00000000000004EE),
+// 5^64
+UINT64_C(0x6E38ED64BF6A1F01),
+UINT64_C(0xE93FF9F4DAA797ED),
+UINT64_C(0x0000000000184F03),
+// 5^128
+UINT64_C(0x03DF99092E953E01),
+UINT64_C(0x2374E42F0F1538FD),
+UINT64_C(0xC404DC08D3CFF5EC),
+UINT64_C(0xA6337F19BCCDB0DA),
+UINT64_C(0x0000024EE91F2603),
+// 5^256
+UINT64_C(0xBED3875B982E7C01),
+UINT64_C(0x12152F87D8D99F72),
+UINT64_C(0xCF4A6E706BDE50C6),
+UINT64_C(0x26B2716ED595D80F),
+UINT64_C(0x1D153624ADC666B0),
+UINT64_C(0x63FF540E3C42D35A),
+UINT64_C(0x65F9EF17CC5573C0),
+UINT64_C(0x80DCC7F755BC28F2),
+UINT64_C(0x5FDCEFCEF46EEDDC),
+UINT64_C(0x00000000000553F7),
+// 5^512
+UINT64_C(0x77F27267FC6CF801),
+UINT64_C(0x5D96976F8F9546DC),
+UINT64_C(0xC31E1AD9B83A8A97),
+UINT64_C(0x94E6574746C40513),
+UINT64_C(0x4475B579C88976C1),
+UINT64_C(0xAA1DA1BF28F8733B),
+UINT64_C(0x1E25CFEA703ED321),
+UINT64_C(0xBC51FB2EB21A2F22),
+UINT64_C(0xBFA3EDAC96E14F5D),
+UINT64_C(0xE7FC7153329C57AE),
+UINT64_C(0x85A91924C3FC0695),
+UINT64_C(0xB2908EE0F95F635E),
+UINT64_C(0x1366732A93ABADE4),
+UINT64_C(0x69BE5B0E9449775C),
+UINT64_C(0xB099BC817343AFAC),
+UINT64_C(0xA269974845A71D46),
+UINT64_C(0x8A0B1F138CB07303),
+UINT64_C(0xC1D238D98CAB8A97),
+UINT64_C(0x0000001C633415D4),
+// 5^1024
+UINT64_C(0xF55B2B722919F001),
+UINT64_C(0x1EC29F866E7C215B),
+UINT64_C(0x15C51A88991C4E87),
+UINT64_C(0x4C7D1E1A140AC535),
+UINT64_C(0x0ED1440ECC2CD819),
+UINT64_C(0x7DE16CFB896634EE),
+UINT64_C(0x9FCE837D1E43F61F),
+UINT64_C(0x233E55C7231D2B9C),
+UINT64_C(0xF451218B65DC60D7),
+UINT64_C(0xC96359861C5CD134),
+UINT64_C(0xA7E89431922BBB9F),
+UINT64_C(0x62BE695A9F9F2A07),
+UINT64_C(0x045B7A748E1042C4),
+UINT64_C(0x8AD822A51ABE1DE3),
+UINT64_C(0xD814B505BA34C411),
+UINT64_C(0x8FC51A16BF3FDEB3),
+UINT64_C(0xF56DEEECB1B896BC),
+UINT64_C(0xB6F4654B31FB6BFD),
+UINT64_C(0x6B7595FB101A3616),
+UINT64_C(0x80D98089DC1A47FE),
+UINT64_C(0x9A20288280BDA5A5),
+UINT64_C(0xFC8F1F9031EB0F66),
+UINT64_C(0xE26A7B7E976A3310),
+UINT64_C(0x3CE3A0B8DF68368A),
+UINT64_C(0x75A351A28E4262CE),
+UINT64_C(0x445975836CB0B6C9),
+UINT64_C(0xC356E38A31B5653F),
+UINT64_C(0x0190FBA035FAABA6),
+UINT64_C(0x88BC491B9FC4ED52),
+UINT64_C(0x005B80411640114A),
+UINT64_C(0x1E8D4649F4F3235E),
+UINT64_C(0x73C5534936A8DE06),
+UINT64_C(0xC1A6970CA7E6BD2A),
+UINT64_C(0xD2DB49EF47187094),
+UINT64_C(0xAE6209D4926C3F5B),
+UINT64_C(0x34F4A3C62D433949),
+UINT64_C(0xD9D61A05D4305D94),
+UINT64_C(0x0000000000000325),
+// 5^2048
+UINT64_C(0xE30968651333E001),
+UINT64_C(0x49E28DCFB27D4D3F),
+UINT64_C(0xEE87E354EC2E4721),
+UINT64_C(0x368B8ABBB6067584),
+UINT64_C(0x2ED56D55A5E5A191),
+UINT64_C(0xEA50D142FD827773),
+UINT64_C(0x98342C9E51B78DB2),
+UINT64_C(0x866ED6F1C850DABC),
+UINT64_C(0x9279498719342C12),
+UINT64_C(0x66912E4AD2F869C2),
+UINT64_C(0x57A7842D71C7FD8F),
+UINT64_C(0xFB7FEDCC235552EB),
+UINT64_C(0x38209CE1F3861CE0),
+UINT64_C(0x34C101349713B449),
+UINT64_C(0xA7A8289C8C6C54DE),
+UINT64_C(0xE3CB64F32DBB6643),
+UINT64_C(0xE3892EE98074FF01),
+UINT64_C(0xA8F16F9210C17F94),
+UINT64_C(0x967ABBB3A8281ED6),
+UINT64_C(0x9952FBED5A151440),
+UINT64_C(0xAFE609C313B41E44),
+UINT64_C(0xF111821FA2BCA416),
+UINT64_C(0x91BAC974FB1264B4),
+UINT64_C(0x8E48FF35D6C7D6AB),
+UINT64_C(0xC4A656654419BD43),
+UINT64_C(0x33554C36685E5510),
+UINT64_C(0x0DBD21FEAB498697),
+UINT64_C(0x982DA4663CFE491D),
+UINT64_C(0x9E110C7BCBEA4CA7),
+UINT64_C(0x5FC5A04779C56B8A),
+UINT64_C(0x1AA9F44484D80E2E),
+UINT64_C(0x6A57B1AB730F203C),
+UINT64_C(0x87A7DC62D752F7A6),
+UINT64_C(0x40660460944545FF),
+UINT64_C(0xC9AC375D77C1A42F),
+UINT64_C(0x744695F0E866D7EF),
+UINT64_C(0xA1FC6B9681428C85),
+UINT64_C(0x7BF03C19D7917C7B),
+UINT64_C(0x5715F7915B33EB41),
+UINT64_C(0xDB0708FD8F6CAE5F),
+UINT64_C(0x785CE6B7B125AC8E),
+UINT64_C(0x6F46EADB56C6815B),
+UINT64_C(0x195355D84EEEBEEE),
+UINT64_C(0x9D7389C0A244DE3C),
+UINT64_C(0xCF99D01953761ABD),
+UINT64_C(0x0D76CE39DE9EC24B),
+UINT64_C(0x2E55ECEE70BEB181),
+UINT64_C(0xF56D9D4BD5F86079),
+UINT64_C(0x13EF5A83FB8886FB),
+UINT64_C(0x3F3389A4408F43C5),
+UINT64_C(0x58CCF45CFAD37943),
+UINT64_C(0x415C7F3EF82DF846),
+UINT64_C(0x8B3D5CF42915E818),
+UINT64_C(0xF8DBB57A6A445F27),
+UINT64_C(0x8AD803ECCA8F0070),
+UINT64_C(0x038F9245B2E87C34),
+UINT64_C(0xC7C9DEE0BEDD8A6C),
+UINT64_C(0x2AD3FA140EAC7D56),
+UINT64_C(0xF775677CE0DE0840),
+UINT64_C(0x92BE221EF1BD0AD5),
+UINT64_C(0xCE9D04A487FA1FB9),
+UINT64_C(0x3F6F7024D2C36FA9),
+UINT64_C(0x907855EEB028AF62),
+UINT64_C(0x4EFAC5DCD83E49D6),
+UINT64_C(0x77CD8C6BE7151AAB),
+UINT64_C(0x0AF908B40A753B7D),
+UINT64_C(0xE50F30278C983623),
+UINT64_C(0x1D08E2D694222771),
+UINT64_C(0xF2EE5CA6F7E928E6),
+UINT64_C(0x11EB962B1B61B93C),
+UINT64_C(0xCE2BCBA19648B21C),
+UINT64_C(0x7BBEBE3034F77154),
+UINT64_C(0x8CE329ACE526A319),
+UINT64_C(0xB5DC53D5DE4A74D2),
+UINT64_C(0x000000000009E8B3),
+// 5^4096
+UINT64_C(0xD4724E8D2A67C001),
+UINT64_C(0xF89A1E908EFE7AE7),
+UINT64_C(0x54E05154EF084117),
+UINT64_C(0x506BE82913B1BB51),
+UINT64_C(0xE599574EFB29B172),
+UINT64_C(0x806C0ED3F0DA6146),
+UINT64_C(0x45155E93B86AE5BE),
+UINT64_C(0x7E1E7C34C0591CC2),
+UINT64_C(0x1D1F4CCE7C4823DA),
+UINT64_C(0xD6BFDF759B8BA1E8),
+UINT64_C(0xC2DFAE78E341BE10),
+UINT64_C(0x0F237F1A016B67B2),
+UINT64_C(0xAF6A25743DBEABCD),
+UINT64_C(0x142E0E80CAB3E6D7),
+UINT64_C(0x2C23481161959127),
+UINT64_C(0xCB4BF98287009701),
+UINT64_C(0x88052F8CF8169C84),
+UINT64_C(0xBC13176168DDE6D4),
+UINT64_C(0x54AB9C41FF0B0905),
+UINT64_C(0x1A1C304E7613B224),
+UINT64_C(0x441C2D473BFE167B),
+UINT64_C(0x78F061814F6CEA9C),
+UINT64_C(0x30C7AE41EB659FB8),
+UINT64_C(0xA1EBCAD7947E0D0E),
+UINT64_C(0x2130504DD97D9556),
+UINT64_C(0xF2ACD5071A8309CB),
+UINT64_C(0xFD82373A3F8EC72A),
+UINT64_C(0x280F4D3295A842BC),
+UINT64_C(0x811A4F04F3618AC0),
+UINT64_C(0xD3967A1B6DC3A5B4),
+UINT64_C(0xDCFE388F15B8C898),
+UINT64_C(0x8738B909454EB2A0),
+UINT64_C(0x2BD9CC1110C4E996),
+UINT64_C(0x655FEC303297CD0C),
+UINT64_C(0xF4090EE8AE0725B1),
+UINT64_C(0x398C6FED037D19EE),
+UINT64_C(0xC994A4503B9AF26B),
+UINT64_C(0x75A697B2B5341743),
+UINT64_C(0x3CCB5B92AC50B9C1),
+UINT64_C(0xA8329761FFE06205),
+UINT64_C(0xEB83CADBDFEA5242),
+UINT64_C(0x3C20EE69E79DADF7),
+UINT64_C(0x7021B97A1E0A6817),
+UINT64_C(0x176CA776743074FA),
+UINT64_C(0xECA19BEB77FB8AF6),
+UINT64_C(0xAF63B71292BAF1DE),
+UINT64_C(0xA4EB8F8CDE35C88B),
+UINT64_C(0x40B464A0E137D5E9),
+UINT64_C(0x42923BBD87D1CDE8),
+UINT64_C(0x2E2690F3CD8F62FF),
+UINT64_C(0x59C89F1B095EDC16),
+UINT64_C(0x5138753D1FA8FD5D),
+UINT64_C(0x80152F18390A2B29),
+UINT64_C(0xF984D83E2DD8D925),
+UINT64_C(0xC19E1FAF7A872E74),
+UINT64_C(0xECF9B5D0ED4D542D),
+UINT64_C(0xC53C0ADF9462EA75),
+UINT64_C(0x37A2D4390CAEA134),
+UINT64_C(0x2181327EC8FA2E8A),
+UINT64_C(0x2D2408206E7BB827),
+UINT64_C(0x5893D4B850BE10E0),
+UINT64_C(0x1F2B2322AB312BB9),
+UINT64_C(0xBF627EDE440B3F25),
+UINT64_C(0xB608B89572DAC789),
+UINT64_C(0x86DEB3F078787E2A),
+UINT64_C(0xBB9373F46FEE7AAB),
+UINT64_C(0xF7D8B57E27ECF57B),
+UINT64_C(0x3D04E8D2FCA26A9F),
+UINT64_C(0x3172826AC9DF13CB),
+UINT64_C(0xA8FCD8E0CD9E8D7C),
+UINT64_C(0x307641D9B2C39497),
+UINT64_C(0x2608C4CF1CC939C1),
+UINT64_C(0x3D326A7EB6D1C7BF),
+UINT64_C(0x8E13E25FEEAF19E6),
+UINT64_C(0x2DFE6D97EE63302B),
+UINT64_C(0xE41D3CC425971D58),
+UINT64_C(0xAB8DB59A0A80627C),
+UINT64_C(0xE90AFB779EEA37C8),
+UINT64_C(0x9EE3352C90CA19CF),
+UINT64_C(0xFE78D6823613C850),
+UINT64_C(0x5B060904788F6E50),
+UINT64_C(0x3FECB534B71BD1A4),
+UINT64_C(0x20C33857B32C450C),
+UINT64_C(0x0239F4CEA6E9CFDA),
+UINT64_C(0xA19ADB9548497187),
+UINT64_C(0x95ACA6A8B492ED8A),
+UINT64_C(0xCF1B23504DCD6CD9),
+UINT64_C(0x1A67778CFBE8B12A),
+UINT64_C(0xC32DA38338EB3ACC),
+UINT64_C(0xA03F40A8FB126AB1),
+UINT64_C(0xE9CE4724ED5BF546),
+UINT64_C(0x73A130D84C4A74FD),
+UINT64_C(0xA2EBD6C1D9960E2D),
+UINT64_C(0x6F233B7C94AB6FEB),
+UINT64_C(0x8E7B9A7349126080),
+UINT64_C(0xD298F9994B8C9091),
+UINT64_C(0xA96DDEFF35E836B5),
+UINT64_C(0x6B0DD9BC96119B31),
+UINT64_C(0x282566FBC6CC3F8D),
+UINT64_C(0xD6769F3B72B882E7),
+UINT64_C(0x00FC509BA674343D),
+UINT64_C(0xD6266A3FDCBF7789),
+UINT64_C(0x4E89541BAE9641FD),
+UINT64_C(0x53400D0311953407),
+UINT64_C(0xE5B533458E0DD75A),
+UINT64_C(0x108B89BC108F19AD),
+UINT64_C(0xE03B2B6341A4C954),
+UINT64_C(0x97ACED8E437B3D7F),
+UINT64_C(0x2C5508C2CBD66670),
+UINT64_C(0x5C4F2EF0650EBC69),
+UINT64_C(0x9985A2DF904FF6BF),
+UINT64_C(0x5ED8D2399FADDD9E),
+UINT64_C(0xE3E51CB925585832),
+UINT64_C(0x56C02D9A0FF4F1D4),
+UINT64_C(0xC1A08A138C4EF804),
+UINT64_C(0xE6D2767113FD01C8),
+UINT64_C(0x9D0176CCA7C234F4),
+UINT64_C(0x4D8BFA89D0D73DF2),
+UINT64_C(0x2B17E0B2544F10CD),
+UINT64_C(0xFD86FE49B70A5C7D),
+UINT64_C(0x214495BBDF373F41),
+UINT64_C(0x00D313D584E857FD),
+UINT64_C(0xA4BA47440496FCBE),
+UINT64_C(0xAEC29E6EE8CAC982),
+UINT64_C(0x7000A51987EC7038),
+UINT64_C(0xFF66E42CAEEE333B),
+UINT64_C(0x03B4F63B8AFD6B25),
+UINT64_C(0x5AB8D9C7BD7991DC),
+UINT64_C(0x48741A6C2ED4684E),
+UINT64_C(0x2FDC6349AF06940D),
+UINT64_C(0xE974996FB03D7ECD),
+UINT64_C(0x52EC8721AC7867F9),
+UINT64_C(0x8EDD2D00BCDD9D4A),
+UINT64_C(0x41C759F83557DE06),
+UINT64_C(0xA75409F23956D4B9),
+UINT64_C(0xB6100FAB123CD8A1),
+UINT64_C(0x2E8D623B3E7B21E2),
+UINT64_C(0xBCA35F7792959DA2),
+UINT64_C(0x35FCB457200C03A5),
+UINT64_C(0xF74EB9281BB6C6E4),
+UINT64_C(0x87CC1D213D5D0B54),
+UINT64_C(0x18AE42404964046F),
+UINT64_C(0x8BD2B496D868B275),
+UINT64_C(0xC234D8F51C5563F4),
+UINT64_C(0xF9151FFFF868E970),
+UINT64_C(0x271133EEAE7BE4A2),
+UINT64_C(0x25254932BB0FD922),
+UINT64_C(0x104BCD64A60A9FC0),
+UINT64_C(0x0000006230290145),
+// 5^8192
+UINT64_C(0x9F34522664CF8001),
+UINT64_C(0x7B8D5053644963E5),
+UINT64_C(0xB945C82F49F0AA29),
+UINT64_C(0x933B6BB8430FF478),
+UINT64_C(0x64C501D45FF82D0A),
+UINT64_C(0x9EC1E1B373BBF174),
+UINT64_C(0xE90106893BFBE803),
+UINT64_C(0x3FEF8D80F7390D8E),
+UINT64_C(0x2C73446BF31D1325),
+UINT64_C(0x1C19E379F5CA7A92),
+UINT64_C(0xF52D9D9C270AF2BE),
+UINT64_C(0x3ABF72E1EB2BED48),
+UINT64_C(0x7ECF35084AC4FFC2),
+UINT64_C(0x38597A5A22019A82),
+UINT64_C(0x9A51FF6EBE6A7B3C),
+UINT64_C(0x0C0ABE9DA2D28437),
+UINT64_C(0xC79887FF7C9EC6EA),
+UINT64_C(0x436420D05851C899),
+UINT64_C(0x72B5547FEFEAD581),
+UINT64_C(0x077AD8F899B1D2B5),
+UINT64_C(0x3B4305ED5CDDBF5B),
+UINT64_C(0x2D88F3FDE3861AC7),
+UINT64_C(0x393220AA3D6B43BE),
+UINT64_C(0x1CD62095E5382405),
+UINT64_C(0x87A0D1E161A10C96),
+UINT64_C(0x68C933E6CA95A55D),
+UINT64_C(0x778089BB9EE082E2),
+UINT64_C(0xFBB6D8D441429EE9),
+UINT64_C(0x26CF5471C529500D),
+UINT64_C(0xD6C9B14068B9BE29),
+UINT64_C(0x8415185207BE635A),
+UINT64_C(0x83730335B5572182),
+UINT64_C(0xDD312D31EB2300B4),
+UINT64_C(0x488DA59C05D6DD9B),
+UINT64_C(0xDA2C2E4037784D25),
+UINT64_C(0x6A57D7206A8D92FA),
+UINT64_C(0xF07A8632950B41AC),
+UINT64_C(0x2ECAD06ACD55F062),
+UINT64_C(0x34C98BB0E6A3DFE7),
+UINT64_C(0xB60521B19C767D8F),
+UINT64_C(0xE87D16BE752AAFD1),
+UINT64_C(0xE58A8B0C9DE1D728),
+UINT64_C(0x2FA2C119C6013830),
+UINT64_C(0x519B40C83C4F9156),
+UINT64_C(0xAB78701B5058FC8F),
+UINT64_C(0xC502A554ADC59C47),
+UINT64_C(0x6647F04C0FB3286F),
+UINT64_C(0x5EA495C89DB4076E),
+UINT64_C(0xB4F00F8B9C74FAB1),
+UINT64_C(0xD092B4C6897C7A3C),
+UINT64_C(0x32F31FA8283E0340),
+UINT64_C(0x67B63DE2EEB708CC),
+UINT64_C(0xEF2BC02B4F7B3C8B),
+UINT64_C(0xC49344C0DA14BFE3),
+UINT64_C(0xB6C4E69EAABC85BE),
+UINT64_C(0x63A110162ECE8AA6),
+UINT64_C(0x726AE4D919CFBA4D),
+UINT64_C(0xEE6AE7070FC90B42),
+UINT64_C(0x4D9AABC54290B04A),
+UINT64_C(0xF34906CDFB2B070E),
+UINT64_C(0x52CA97091FF54B0A),
+UINT64_C(0x164315700B42BFE1),
+UINT64_C(0x6B5565BB980F3076),
+UINT64_C(0x9CE63C76EB8C4C4A),
+UINT64_C(0x3DA24C53B9E4C771),
+UINT64_C(0xB50E3C666F0266FA),
+UINT64_C(0x01BB4B9676E34F79),
+UINT64_C(0x0FBEA1249948CF3E),
+UINT64_C(0xA1FA4EDC86BEAD12),
+UINT64_C(0xC3B97BF9D11E901C),
+UINT64_C(0x370CA58E71730E03),
+UINT64_C(0x886467E248B19715),
+UINT64_C(0x3C727E24DB237497),
+UINT64_C(0x8E67D76E2116CCD2),
+UINT64_C(0x34BDEDD3F973AECF),
+UINT64_C(0xB042AB0531D680EC),
+UINT64_C(0xFC5C3C17770E96A0),
+UINT64_C(0xB8204ECEAB6F1874),
+UINT64_C(0x416C0CED5843F3A5),
+UINT64_C(0x9578018311DD112F),
+UINT64_C(0x7E0E8613B1C74BD8),
+UINT64_C(0xA79FFC1096C6453B),
+UINT64_C(0xFCD6DA0AB2157651),
+UINT64_C(0x3DD0CCAC836A34A7),
+UINT64_C(0x496049ED316E5A36),
+UINT64_C(0xDEA1A97D0322BCB2),
+UINT64_C(0x39578D53CDF2AA5A),
+UINT64_C(0x030565C91D1AA931),
+UINT64_C(0x324E0A27D198CBED),
+UINT64_C(0x284325345DB83E8A),
+UINT64_C(0x5CB134C090BF23E8),
+UINT64_C(0x009E5051DD0ADAB6),
+UINT64_C(0x7E36A6D7F8AD61DA),
+UINT64_C(0xBDFFE6AA84C75E57),
+UINT64_C(0x138D680EB5D5532E),
+UINT64_C(0x4A5F74A1BD84DDAC),
+UINT64_C(0x55538CFACCFF00D1),
+UINT64_C(0x48528011B0948B8C),
+UINT64_C(0x9E047AD7E345F82E),
+UINT64_C(0xEA77BEF06EE770FF),
+UINT64_C(0x2F1625670FC13669),
+UINT64_C(0x0614686C869426AC),
+UINT64_C(0x4263ED823A3FF464),
+UINT64_C(0x57205A7AB3589B47),
+UINT64_C(0xAE6FC46B213F24AD),
+UINT64_C(0xD92B133F3DE03E4E),
+UINT64_C(0x1B49C24A315A589B),
+UINT64_C(0x1641C13873381BCB),
+UINT64_C(0xBC680ADA7BC99425),
+UINT64_C(0x962E9884A5CFBC9A),
+UINT64_C(0xFC8D12F60A960D70),
+UINT64_C(0x60ACC868ED18EF4C),
+UINT64_C(0x131130369AEA5D14),
+UINT64_C(0x2D99A5B0C747C87E),
+UINT64_C(0x006B36583A369BB3),
+UINT64_C(0xE43FA6E6118A5135),
+UINT64_C(0xA13DC05EB4947190),
+UINT64_C(0x0DBD7170D7733DB8),
+UINT64_C(0x117ED7E7C3FB67D1),
+UINT64_C(0xC05FE99EE2D72A49),
+UINT64_C(0xD971A25B9638DB40),
+UINT64_C(0x1A1595594239D468),
+UINT64_C(0xC1117392850A223C),
+UINT64_C(0x567B5FC022D2DBD8),
+UINT64_C(0xC051007A92C5B4EB),
+UINT64_C(0xFB35572011CC0099),
+UINT64_C(0x398481616907810D),
+UINT64_C(0x61D19EF25E8534F4),
+UINT64_C(0x8A0AB03C2EE8C466),
+UINT64_C(0x879AA514C234AF76),
+UINT64_C(0x59E5DA579774A235),
+UINT64_C(0xF339BD5A9BC466B3),
+UINT64_C(0xBBB5FD6744AB026D),
+UINT64_C(0x3685C9F22B977202),
+UINT64_C(0x7054359E03E5DC00),
+UINT64_C(0x9BA11F085239CFB0),
+UINT64_C(0x9C258687F8237562),
+UINT64_C(0x52C7BF8FA3B510DD),
+UINT64_C(0x3245E079B31ED0CF),
+UINT64_C(0xBAEE38C7FF9FF8D3),
+UINT64_C(0xF702B3B9F17D5562),
+UINT64_C(0xCBCA275DCC4C8563),
+UINT64_C(0xE817DBACE005D9D1),
+UINT64_C(0x62CEE35005C6920A),
+UINT64_C(0x19E049B90F1DEAC0),
+UINT64_C(0xB2A27A1659599F74),
+UINT64_C(0x7DCEF00DF0911D5A),
+UINT64_C(0x375522513603DD66),
+UINT64_C(0x5FA022DA97813735),
+UINT64_C(0xEFBE57C20D849416),
+UINT64_C(0x5761929630A0E592),
+UINT64_C(0x11735043C953CC47),
+UINT64_C(0xC0444BE0A83526AD),
+UINT64_C(0x16FF5136B5F8463C),
+UINT64_C(0xF037572C2A0A6631),
+UINT64_C(0xB1BF8DAAD30464DA),
+UINT64_C(0x0F3E9E7E7F5718F7),
+UINT64_C(0xC26F2624E5A4CFE7),
+UINT64_C(0xDFE8F4858C9B5AE4),
+UINT64_C(0xC64A1509F6FA82E3),
+UINT64_C(0x3024B220ACB24AEA),
+UINT64_C(0xDDCDFEDDDDB02AC0),
+UINT64_C(0x384C86C3D834C574),
+UINT64_C(0xDD48A571D904E099),
+UINT64_C(0x77B35C744550A05F),
+UINT64_C(0xA...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/221701
More information about the llvm-commits
mailing list