v2-0003-jit-Fix-integer-constants-for-LLVM-22.patch
text/x-patch
Filename: v2-0003-jit-Fix-integer-constants-for-LLVM-22.patch
Type: text/x-patch
Part: 2
Message:
Re: LLVM 22
Patch
Format: format-patch
Series: patch v2-0003
Subject: jit: Fix integer constants for LLVM 22.
| File | + | − |
|---|---|---|
| src/include/jit/llvmjit_emit.h | 4 | 4 |
From e2551375e0093b8e24821a316edf42c6ff2d7ac7 Mon Sep 17 00:00:00 2001
From: Thomas Munro <thomas.munro@gmail.com>
Date: Sun, 11 Jan 2026 12:44:25 +1300
Subject: [PATCH v2 3/3] jit: Fix integer constants for LLVM 22.
LLVM 22 fails an assertion where we do:
l_int8_const(lc, 1 << ((attnum) & 0x07))
Assertion failed: (llvm::isUIntN(BitWidth, val) && "Value is not an
N-bit unsigned value")
That's because it no longer truncates values to fit the type[1].
Unfortunately our l_intN_const() wrapper functions take signed intN_t
arguments that are internally coerced to unsigned long long, triggering
sign extension. That was OK with automatic truncation, but now it fails
a bit-width test.
Cast to the corresponding unsigned type first to avoid that.
[1] https://github.com/llvm/llvm-project/commit/a83c89495ba6fe0134dcaa02372c320cc7ff0dbf
Backpatch-through: 14
Reviewed-by:
Discussion: https://postgr.es/m/CA%2BhUKGJTumad75o8Zao-LFseEbt%3DenbUFCM7LZVV%3Dc8yg2i7dg%40mail.gmail.com
---
src/include/jit/llvmjit_emit.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/include/jit/llvmjit_emit.h b/src/include/jit/llvmjit_emit.h
index 089945391ee..83b67dffd25 100644
--- a/src/include/jit/llvmjit_emit.h
+++ b/src/include/jit/llvmjit_emit.h
@@ -47,7 +47,7 @@ l_ptr(LLVMTypeRef t)
static inline LLVMValueRef
l_int8_const(LLVMContextRef lc, int8 i)
{
- return LLVMConstInt(LLVMInt8TypeInContext(lc), i, false);
+ return LLVMConstInt(LLVMInt8TypeInContext(lc), (uint8) i, false);
}
/*
@@ -56,7 +56,7 @@ l_int8_const(LLVMContextRef lc, int8 i)
static inline LLVMValueRef
l_int16_const(LLVMContextRef lc, int16 i)
{
- return LLVMConstInt(LLVMInt16TypeInContext(lc), i, false);
+ return LLVMConstInt(LLVMInt16TypeInContext(lc), (uint16) i, false);
}
/*
@@ -65,7 +65,7 @@ l_int16_const(LLVMContextRef lc, int16 i)
static inline LLVMValueRef
l_int32_const(LLVMContextRef lc, int32 i)
{
- return LLVMConstInt(LLVMInt32TypeInContext(lc), i, false);
+ return LLVMConstInt(LLVMInt32TypeInContext(lc), (uint32) i, false);
}
/*
@@ -74,7 +74,7 @@ l_int32_const(LLVMContextRef lc, int32 i)
static inline LLVMValueRef
l_int64_const(LLVMContextRef lc, int64 i)
{
- return LLVMConstInt(LLVMInt64TypeInContext(lc), i, false);
+ return LLVMConstInt(LLVMInt64TypeInContext(lc), (uint64) i, false);
}
/*
--
2.52.0