From c84d8396f21d349bb4e1fbafd35c73ad5bd249e3 Mon Sep 17 00:00:00 2001 From: donneypr Date: Fri, 17 Oct 2025 00:06:46 -0400 Subject: [PATCH 1/3] added trailing type for ffs, missed in pr llvm#162346 for llvm#160288 --- clang/lib/AST/ByteCode/InterpBuiltin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp index 922d67940e22f..517c51a5f7de1 100644 --- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp +++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp @@ -3173,7 +3173,7 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, case Builtin::BI__builtin_ffsl: case Builtin::BI__builtin_ffsll: return interp__builtin_elementwise_int_unaryop( - S, OpPC, Call, [](const APSInt &Val) { + S, OpPC, Call, [](const APSInt &Val) -> APInt { return APInt(Val.getBitWidth(), Val.isZero() ? 0u : Val.countTrailingZeros() + 1u); }); From 6261a0574664b199903e69af1d81b668dfc93ec2 Mon Sep 17 00:00:00 2001 From: donneypr Date: Fri, 17 Oct 2025 00:16:42 -0400 Subject: [PATCH 2/3] addded trailing type to other interp__builtin_elementwise_int_unaryop callbacks for uniformity --- clang/lib/AST/ByteCode/InterpBuiltin.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp index 517c51a5f7de1..35812d4e25981 100644 --- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp +++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp @@ -3319,7 +3319,7 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, case clang::X86::BI__builtin_ia32_lzcnt_u32: case clang::X86::BI__builtin_ia32_lzcnt_u64: return interp__builtin_elementwise_int_unaryop( - S, OpPC, Call, [](const APSInt &Src) { + S, OpPC, Call, [](const APSInt &Src) -> APInt { return APInt(Src.getBitWidth(), Src.countLeadingZeros()); }); @@ -3327,7 +3327,7 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, case clang::X86::BI__builtin_ia32_tzcnt_u32: case clang::X86::BI__builtin_ia32_tzcnt_u64: return interp__builtin_elementwise_int_unaryop( - S, OpPC, Call, [](const APSInt &Src) { + S, OpPC, Call, [](const APSInt &Src) -> APInt { return APInt(Src.getBitWidth(), Src.countTrailingZeros()); }); @@ -3799,7 +3799,7 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, case X86::BI__builtin_ia32_knotsi: case X86::BI__builtin_ia32_knotdi: return interp__builtin_elementwise_int_unaryop( - S, OpPC, Call, [](const APSInt &Src) { return ~Src; }); + S, OpPC, Call, [](const APSInt &Src) -> APInt { return ~Src; }); case X86::BI__builtin_ia32_kaddqi: case X86::BI__builtin_ia32_kaddhi: From 10b9c681d6850e3f7eefb2abe6f53310fdafb96d Mon Sep 17 00:00:00 2001 From: donneypr Date: Fri, 17 Oct 2025 11:00:37 -0400 Subject: [PATCH 3/3] removed trailing types for all interp__builtin_elementwise_int_unaryop callbacks --- clang/lib/AST/ByteCode/InterpBuiltin.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp index 35812d4e25981..7d088aea88746 100644 --- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp +++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp @@ -3115,14 +3115,14 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, case Builtin::BI__builtin_parityl: case Builtin::BI__builtin_parityll: return interp__builtin_elementwise_int_unaryop( - S, OpPC, Call, [](const APSInt &Val) -> APInt { + S, OpPC, Call, [](const APSInt &Val) { return APInt(Val.getBitWidth(), Val.popcount() % 2); }); case Builtin::BI__builtin_clrsb: case Builtin::BI__builtin_clrsbl: case Builtin::BI__builtin_clrsbll: return interp__builtin_elementwise_int_unaryop( - S, OpPC, Call, [](const APSInt &Val) -> APInt { + S, OpPC, Call, [](const APSInt &Val) { return APInt(Val.getBitWidth(), Val.getBitWidth() - Val.getSignificantBits()); }); @@ -3131,8 +3131,7 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, case Builtin::BI__builtin_bitreverse32: case Builtin::BI__builtin_bitreverse64: return interp__builtin_elementwise_int_unaryop( - S, OpPC, Call, - [](const APSInt &Val) -> APInt { return Val.reverseBits(); }); + S, OpPC, Call, [](const APSInt &Val) { return Val.reverseBits(); }); case Builtin::BI__builtin_classify_type: return interp__builtin_classify_type(S, OpPC, Frame, Call); @@ -3173,7 +3172,7 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, case Builtin::BI__builtin_ffsl: case Builtin::BI__builtin_ffsll: return interp__builtin_elementwise_int_unaryop( - S, OpPC, Call, [](const APSInt &Val) -> APInt { + S, OpPC, Call, [](const APSInt &Val) { return APInt(Val.getBitWidth(), Val.isZero() ? 0u : Val.countTrailingZeros() + 1u); }); @@ -3319,7 +3318,7 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, case clang::X86::BI__builtin_ia32_lzcnt_u32: case clang::X86::BI__builtin_ia32_lzcnt_u64: return interp__builtin_elementwise_int_unaryop( - S, OpPC, Call, [](const APSInt &Src) -> APInt { + S, OpPC, Call, [](const APSInt &Src) { return APInt(Src.getBitWidth(), Src.countLeadingZeros()); }); @@ -3327,7 +3326,7 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, case clang::X86::BI__builtin_ia32_tzcnt_u32: case clang::X86::BI__builtin_ia32_tzcnt_u64: return interp__builtin_elementwise_int_unaryop( - S, OpPC, Call, [](const APSInt &Src) -> APInt { + S, OpPC, Call, [](const APSInt &Src) { return APInt(Src.getBitWidth(), Src.countTrailingZeros()); }); @@ -3799,7 +3798,7 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, case X86::BI__builtin_ia32_knotsi: case X86::BI__builtin_ia32_knotdi: return interp__builtin_elementwise_int_unaryop( - S, OpPC, Call, [](const APSInt &Src) -> APInt { return ~Src; }); + S, OpPC, Call, [](const APSInt &Src) { return ~Src; }); case X86::BI__builtin_ia32_kaddqi: case X86::BI__builtin_ia32_kaddhi: