From b10024bfc87cc8c97aa0b53f85ba73e9b29ed3a9 Mon Sep 17 00:00:00 2001 From: Andrea Gussoni Date: Wed, 13 May 2026 15:23:47 +0200 Subject: [PATCH] InlineHelpers: limit `loop-unroll` to x86 Only the x86 softfloat helpers iterate over the vector-register lanes with bounded `for` loops (e.g. the packed `helper_*p[sd]` operate on `XMM/ZMM_D(i)`). `fix-helpers` can only rewrite the per-lane CSV accesses once those loops are unrolled. This step is not needed on other archs, so we avoid it to save space on the generated libtcg helpers and build time. --- CMakeLists.txt | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index beabae320..a071330f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -246,20 +246,33 @@ foreach( # `analyze-helper-arguments` can understand. # * `analyze-helper-arguments` discovers, for every helper, which arguments # alias CSVs at the call site. - # * `loop-unroll` unrolls loops so the subsequent `fix-helpers` pass can - # rewrite the accesses contained in bounded loops bodies. + # * `loop-unroll` (x86 only, see below) unrolls loops so the subsequent + # `fix-helpers` pass can rewrite the accesses contained in bounded loop + # bodies. # * `fix-helpers` rewrites helper bodies to access CSVs via the env pointer, # switching on env-relative offsets. # * `detect-uninlinable-helpers` excludes not viable helpers from inlining. + + # Only the x86 softfloat helpers iterate over the vector-register lanes with + # bounded `for` loops (e.g. the packed `helper_*p[sd]` operate on + # `XMM/ZMM_D(i)`). `fix-helpers` can only rewrite the per-lane CSV accesses + # once those loops are unrolled. This step is not needed on other archs, so we + # avoid it to save space on the generated libtcg helpers and build time. + set(EXTRA_HELPER_PASSES "") + if(ARCH STREQUAL "x86_64" OR ARCH STREQUAL "i386") + set(EXTRA_HELPER_PASSES -loop-unroll) + endif() + add_custom_command( OUTPUT "${LIBTCG_HELPERS_FULL}" DEPENDS "${LIBTCG_HELPERS}" revng-all-binaries revngHelperArgumentsAnalysis revngHelperInliningAnalyses COMMAND ./bin/revng opt -mark-inline-helpers-up-to -sroa -instsimplify - -cpu-loop-exit -analyze-helper-arguments -loop-unroll -fix-helpers - -fix-helpers-architecture="${ARCH}" -dce -detect-uninlinable-helpers - "${LIBTCG_HELPERS}" -o "${LIBTCG_HELPERS_FULL}") + -cpu-loop-exit -analyze-helper-arguments ${EXTRA_HELPER_PASSES} + -fix-helpers -fix-helpers-architecture="${ARCH}" -dce + -detect-uninlinable-helpers "${LIBTCG_HELPERS}" -o + "${LIBTCG_HELPERS_FULL}") add_custom_target("annotated-libtcg-helpers-${ARCH}" ALL DEPENDS "${LIBTCG_HELPERS_FULL}")