All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/50] Introduce helper-to-tcg
@ 2026-07-30  3:09 Anton Johansson via qemu development
  2026-07-30  3:09 ` [PATCH v2 01/50] accel/tcg: Add bitreverse and funnel-shift runtime helper functions Anton Johansson via qemu development
                   ` (48 more replies)
  0 siblings, 49 replies; 64+ messages in thread
From: Anton Johansson via qemu development @ 2026-07-30  3:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: ale, brian.cain, pierrick.bouvier, philmd, Anton Johansson

Hi all, this patchset introduces helper-to-tcg, a LLVM based build-time
C to TCG translator, as a QEMU subproject.  The purpose of this tool is
to simplify implementation of instructions in TCG by automatically
translating helper functions for a given target to TCG.  It may also be
used as a standalone tool for getting a base TCG implementation for
complicated instructions.

See KVM forum 2023 and 2025 presentations which give an overview of its
application to Hexagon and RISCV: 

  - https://www.youtube.com/watch?v=Gwz0kp7IZPE
  - https://www.youtube.com/watch?v=7qIwraM3-4I

helper-to-tcg is also applied to the Hexagon frontend, managing to
translate 1280 instructions, 162 of which are HVX instructions.  In the current
patchset we translate 1240 instructions due to limiting emission of the heavier
vectorized instructions which requires larger TBs and more vector temporaries.
For the time being, idef-parser remains translating 281 instructions consisting
mostly of complicated load instructions.  This count will be reduced
over time until idef-parser can be deprecated.

As an example, consider the following helper function implementation of
a Hexagon instruction for performing a 2-element scalar product, using
signed saturated arithmetic

  void HELPER(V6_vdmpyhvsat)(CPUHexagonState *env,
                             void * restrict VdV_void,
                             void * restrict VuV_void,
                             void * restrict VvV_void)
  {
      fVFOREACH(32, i) {
          size8s_t accum = fMPY16SS(fGETHALF(0,VuV.w[i]),fGETHALF(0, VvV.w[i]));
          accum += fMPY16SS(fGETHALF(1,VuV.w[i]),fGETHALF(1, VvV.w[i]));
          VdV.w[i] = fVSATW(accum);
      }
  }

which at the end of the helper-to-tcg pipeline will have been converted
to the following LLVM IR

  define void @helper_V6_vdmpyhvsat(%struct.CPUArchState* %0,
                                    i8* %1, i8* %2, i8* %3) {
      %4 = bitcast i8* %2 to <32 x i32>*
      %wide.load = load <32 x i32>, <32 x i32>* %4
      %5 = call <32 x i32> @VecShlScalar(<32 x i32> %wide.load, i32 16)
      %6 = call <32 x i32> @VecAShrScalar(<32 x i32> %5, i32 16)
      %7 = bitcast i8* %3 to <32 x i32>*
      %wide.load23 = load <32 x i32>, <32 x i32>* %7
      %8 = call <32 x i32> @VecShlScalar(<32 x i32> %wide.load23, i32 16)
      %9 = call <32 x i32> @VecAShrScalar(<32 x i32> %8, i32 16)
      %10 = mul nsw <32 x i32> %9, %6
      %11 = call <32 x i32> @VecAShrScalar(<32 x i32> %wide.load, i32 16)
      %12 = call <32 x i32> @VecAShrScalar(<32 x i32> %wide.load23, i32 16)
      %13 = mul nsw <32 x i32> %12, %11
      %14 = bitcast i8* %1 to <32 x i32>*
      ret void
  }

which, in TCG, gets emitted as

  void emit_V6_vdmpyhvsat(TCGv_env env, intptr_t vec3,
                          intptr_t vec7, intptr_t vec6) {
      VectorMem mem = {0};
      intptr_t vec0 = temp_new_gvec(&mem, 128);
      tcg_gen_gvec_shli(MO_32, vec0, vec7, 16, 128, 128);
      intptr_t vec5 = temp_new_gvec(&mem, 128);
      tcg_gen_gvec_sari(MO_32, vec5, vec0, 16, 128, 128);
      intptr_t vec1 = temp_new_gvec(&mem, 128);
      tcg_gen_gvec_shli(MO_32, vec1, vec6, 16, 128, 128);
      tcg_gen_gvec_sari(MO_32, vec1, vec1, 16, 128, 128);
      tcg_gen_gvec_mul(MO_32, vec1, vec1, vec5, 128, 128);
      intptr_t vec2 = temp_new_gvec(&mem, 128);
      tcg_gen_gvec_sari(MO_32, vec2, vec7, 16, 128, 128);
      tcg_gen_gvec_sari(MO_32, vec0, vec6, 16, 128, 128);
      tcg_gen_gvec_mul(MO_32, vec2, vec0, vec2, 128, 128);
      tcg_gen_gvec_ssadd(MO_32, vec3, vec1, vec2, 128, 128);
  }

consisting of a few vectorized shifts, multiplications, and a signed
saturated add.

For a more in-depth usage guide see `subprojects/helper-to-tcg/README.md`.

Limitations:
  - Does not handle functions with multiple return values. On Hexagon,
    a large set of instructions still translated by idef-parser fall
    into this category.

  - Can emit complicated vector operations that are not the most
    host-friendly, identifying and emitting custom GVec patterns would
    be interesting.

Patchset overview:
  1. helper-to-tcg (patches 6-40) - Introduces the actual translator as
     a QEMU subproject.

  2. Fills gaps in TCG instructions (patches 1,2,5) - Since the tool is
     LLVM based it allows for translation of vector instructions to gvec
     instructions in Tinycode. This requires the introduction of a few
     new tcg_gen_gvec_*() functions for dealing with sign- and
     zero-extension, along with a function for initializing a vector to
     a constant, and functions for bitreversal and funnel shift.

  3. Mapping of cpu state (patch 3) - helper-to-tcg needs information
     about the offsets of fields in the cpu state that correspond to TCG
     globals, so these can be emitted in the output code.  For this
     purpose, a target may define an array of `struct cpu_tcg_mapping`
     to map fields in the cpu state to TCG globals in a declarative way.
     This global array can be parsed by helper-to-tcg, and replaces
     manually calling tcg_global_mem_new*() in frontend.

  4. Increases max size of generated TB code (patch 4) - Due to the
     power of the LLVM auto-vectorizer, helper-to-tcg can emit quite
     complicated vectorized gvec code.  Particularly for Hexagon where a
     single instruction packet can consist of multiple vector
     instructions.  A single instruction packet can in rare cases exceed
     the TB buffer size of 128 longs.

  5. Applies helper-to-tcg to Hexagon (patches 41-50) - helper-to-tcg is
     used on the Hexagon frontend to translate a majority of helper
     functions in place of idef-parser.  For the time being idef-parser
     will remain in use to translate instructions with multiple return
     values that are not representable as helper functions and therefore
     translatable with helper-to-tcg.

Changes in v2:
  - Use QEMU_ANNOTATE over introducing LLVM_ANNOTATE (Philippe);
  - Move .h -> .hpp to avoid checkpatch (Philppe);
  - Meson changes (Paolo);
  - Gvec size changing operations (zext/sext/trunc) along with constant
    vector creation has been moved from general gvec operations to being
    emitted by helper-to-tcg on demand. A simple interface for specifying
    the target vector layout is available through commandline
    options (Richard);
  - Constant vectors initialized from arrays now vectorized;
  - Introduced a model of target vector layouts;
  - Shifted LLVM version support from 10-14 to 15-21;
  - Improved end-to-end testing, now verifies output across LLVM versions,
    currently these tests along with their expected output serve as usage
    examples;
  - Added docker tests for supported LLVM versions;
  - Dropped the tcg_gen_callN dispatcher in favour of emitting gen_helper_*()
    definitions directly;
  - Optionally allow calls to declarations, custom jump instructions, and propagation of
    DisasContext to better slot into existing frontends;
  - Limit vector usage for hexagon to 8 temporaries and 16 gvec
    instructions, also use existing `tmp_VRegs[]` memory.
  - Many cleanups and bugfixes.

Anton Johansson (50):
  accel/tcg: Add bitreverse and funnel-shift runtime helper functions
  accel/tcg: Add getpc helper
  tcg: Introduce tcg-global-mappings
  tcg: Increase maximum TB size
  tcg: Expose tcg_gen_ussub_sat()
  Add helper-to-tcg subproject
  helper-to-tcg: Introduce get-llvm-ir.py
  helper-to-tcg: Handle LLVM version compatibility
  helper-to-tcg: Introduce custom LLVM pipeline
  helper-to-tcg: Add pipeline --debug and --debug-only
  helper-to-tcg: Add simple error creation helper
  helper-to-tcg: Introduce PrepareForOptPass
  helper-to-tcg: PrepareForOptPass, demangle function names
  helper-to-tcg: PrepareForOptPass, map annotations
  helper-to-tcg: PrepareForOptPass, cull unused functions
  helper-to-tcg: PrepareForOptPass, undef llvm.returnaddress
  helper-to-tcg: PrepareForOptPass, fixup inline attributes
  helper-to-tcg: PrepareForOptPass, collect debuginfo
  helper-to-tcg: Pipeline, run optimization pass
  helper-to-tcg: Introduce pseudo instructions
  helper-to-tcg: Add guest vector layout description
  helper-to-tcg: Introduce PrepareForTcgPass
  helper-to-tcg: PrepareForTcgPass, remove functions with cycles
  helper-to-tcg: PrepareForTcgPass, demote PHI nodes
  helper-to-tcg: PrepareForTcgPass, map TCG globals
  helper-to-tcg: PrepareForTcgPass, transform GEPs
  helper-to-tcg: PrepareForTcgPass, canonicalize IR
  helper-to-tcg: PrepareForTcgPass, identity map trivial expressions
  helper-to-tcg: Introduce TcgV structure
  helper-to-tcg: Introduce TcgGenPass
  helper-to-tcg: TcgGenPass, linearize basic blocks
  helper-to-tcg: TcgGenPass, introduce Value <-> TcgV map
  helper-to-tcg: TcgGenPass, add structs for string emission
  helper-to-tcg: TcgGenPass, map arguments to TCG
  helper-to-tcg: TcgGenPass, propagate constant expresssions
  helper-to-tcg: TcgGenPass, allocate TCG registers
  helper-to-tcg: TcgGenPass, emit TCG strings
  helper-to-tcg: Add README
  helper-to-tcg: Add end-to-end tests
  test: helper-to-tcg docker tests
  target/hexagon: Add get_tb_mmu_index()
  target/hexagon: Increase VECTOR_TEMPS_MAX
  target/hexagon: Provide env to tcg global mapping
  target/hexagon: Keep gen_slotval/check_noshuf for helper-to-tcg
  target/hexagon: Emit annotations for helpers
  target/hexagon: Split probe_and_commit helper
  target/hexagon: Use helper-to-tcg helper calls
  target/hexagon: Manually call generated HVX instructions
  target/hexagon: Use idef-parser as a fallback
  target/hexagon: Use helper-to-tcg

 accel/tcg/tcg-runtime.c                       |   33 +
 accel/tcg/tcg-runtime.h                       |    8 +
 configs/targets/hexagon-linux-user.mak        |    1 +
 configs/targets/hexagon-softmmu.mak           |    1 +
 include/tcg/tcg-global-mappings.h             |  118 ++
 include/tcg/tcg-op-common.h                   |    2 +
 include/tcg/tcg.h                             |    2 +-
 meson.build                                   |   10 +
 meson_options.txt                             |    2 +
 scripts/meson-buildoptions.sh                 |    5 +
 subprojects/helper-to-tcg/README.md           |  297 ++++
 subprojects/helper-to-tcg/get-llvm-ir.py      |  145 ++
 .../helper-to-tcg/include/CmdLineOptions.hpp  |   46 +
 .../helper-to-tcg/include/DebugInfo.hpp       |   46 +
 subprojects/helper-to-tcg/include/Error.hpp   |   38 +
 .../include/FunctionAnnotation.hpp            |  104 ++
 .../helper-to-tcg/include/LlvmCompat.hpp      |  124 ++
 .../include/PrepareForOptPass.hpp             |   42 +
 .../include/PrepareForTcgPass.hpp             |   37 +
 .../helper-to-tcg/include/PseudoInst.hpp      |   75 +
 .../helper-to-tcg/include/PseudoInst.inc      |   78 ++
 .../helper-to-tcg/include/TcgGenPass.hpp      |   63 +
 .../helper-to-tcg/include/TcgGlobalMap.hpp    |   40 +
 subprojects/helper-to-tcg/include/TcgType.hpp |  276 ++++
 .../helper-to-tcg/include/VectorLayout.hpp    |  116 ++
 subprojects/helper-to-tcg/meson.build         |   86 ++
 subprojects/helper-to-tcg/meson_options.txt   |    2 +
 subprojects/helper-to-tcg/src/LlvmCompat.cpp  |   89 ++
 subprojects/helper-to-tcg/src/Pipeline.cpp    |  399 ++++++
 .../PrepareForOptPass/PrepareForOptPass.cpp   |  363 +++++
 .../src/PrepareForTcgPass/CanonicalizeIR.cpp  | 1193 ++++++++++++++++
 .../src/PrepareForTcgPass/CanonicalizeIR.hpp  |   24 +
 .../src/PrepareForTcgPass/IdentityMap.cpp     |   91 ++
 .../src/PrepareForTcgPass/IdentityMap.hpp     |   39 +
 .../PrepareForTcgPass/PrepareForTcgPass.cpp   |  150 ++
 .../src/PrepareForTcgPass/TransformGEPs.cpp   |  355 +++++
 .../src/PrepareForTcgPass/TransformGEPs.hpp   |   45 +
 subprojects/helper-to-tcg/src/PseudoInst.cpp  |  183 +++
 .../src/TcgGenPass/LinearizeBlocks.cpp        |  140 ++
 .../src/TcgGenPass/LinearizeBlocks.hpp        |   32 +
 .../src/TcgGenPass/MapArguments.cpp           |  122 ++
 .../src/TcgGenPass/MapConstantExpressions.cpp |  328 +++++
 .../src/TcgGenPass/MapTcgOperations.cpp       |  988 ++++++++++++++
 .../src/TcgGenPass/MapTemporaries.cpp         |  619 +++++++++
 .../helper-to-tcg/src/TcgGenPass/TcgEmit.cpp  | 1203 +++++++++++++++++
 .../helper-to-tcg/src/TcgGenPass/TcgEmit.hpp  |  315 +++++
 .../src/TcgGenPass/TcgGenPass.cpp             |  385 ++++++
 .../src/TcgGenPass/ValueMapping.hpp           |  110 ++
 .../helper-to-tcg/tests/call-to-declaration.c |   33 +
 .../helper-to-tcg/tests/call-translation.c    |   35 +
 subprojects/helper-to-tcg/tests/cpustate.c    |   44 +
 .../helper-to-tcg/tests/forward-context.c     |   21 +
 subprojects/helper-to-tcg/tests/ldst.c        |   17 +
 subprojects/helper-to-tcg/tests/meson.build   |  121 ++
 .../tests/ref/15/call-to-declaration.c        |   26 +
 .../tests/ref/15/call-translation.c           |   28 +
 .../helper-to-tcg/tests/ref/15/cpustate.c     |   36 +
 .../tests/ref/15/forward-context.c            |   30 +
 subprojects/helper-to-tcg/tests/ref/15/ldst.c |   21 +
 .../helper-to-tcg/tests/ref/15/scalar.c       |   21 +
 .../tests/ref/15/user-pcrel-jump.c            |   33 +
 .../tests/ref/15/vector-layout-f16L.c         |  527 ++++++++
 .../tests/ref/15/vector-layout-f16M.c         |  527 ++++++++
 .../tests/ref/15/vector-layout-f32L.c         |  527 ++++++++
 .../tests/ref/15/vector-layout-f32M.c         |  527 ++++++++
 .../tests/ref/15/vector-layout-f64L.c         |  527 ++++++++
 .../tests/ref/15/vector-layout-f64M.c         |  527 ++++++++
 .../tests/ref/15/vector-layout-f8L.c          |  527 ++++++++
 .../tests/ref/15/vector-layout-f8M.c          |  527 ++++++++
 .../tests/ref/15/vector-layout-t16L.c         |  527 ++++++++
 .../tests/ref/15/vector-layout-t16M.c         |  527 ++++++++
 .../tests/ref/15/vector-layout-t32L.c         |  527 ++++++++
 .../tests/ref/15/vector-layout-t32M.c         |  527 ++++++++
 .../tests/ref/15/vector-layout-t64L.c         |  527 ++++++++
 .../tests/ref/15/vector-layout-t64M.c         |  527 ++++++++
 .../tests/ref/15/vector-layout-t8L.c          |  527 ++++++++
 .../tests/ref/15/vector-layout-t8M.c          |  527 ++++++++
 .../helper-to-tcg/tests/ref/15/vector.c       |   31 +
 .../tests/ref/21/call-to-declaration.c        |   26 +
 .../tests/ref/21/call-translation.c           |   28 +
 .../helper-to-tcg/tests/ref/21/cpustate.c     |   36 +
 .../tests/ref/21/forward-context.c            |   30 +
 subprojects/helper-to-tcg/tests/ref/21/ldst.c |   21 +
 .../helper-to-tcg/tests/ref/21/scalar.c       |   21 +
 .../tests/ref/21/user-pcrel-jump.c            |   33 +
 .../tests/ref/21/vector-layout-f16L.c         |  527 ++++++++
 .../tests/ref/21/vector-layout-f16M.c         |  527 ++++++++
 .../tests/ref/21/vector-layout-f32L.c         |  527 ++++++++
 .../tests/ref/21/vector-layout-f32M.c         |  527 ++++++++
 .../tests/ref/21/vector-layout-f64L.c         |  527 ++++++++
 .../tests/ref/21/vector-layout-f64M.c         |  527 ++++++++
 .../tests/ref/21/vector-layout-f8L.c          |  527 ++++++++
 .../tests/ref/21/vector-layout-f8M.c          |  527 ++++++++
 .../tests/ref/21/vector-layout-t16L.c         |  527 ++++++++
 .../tests/ref/21/vector-layout-t16M.c         |  527 ++++++++
 .../tests/ref/21/vector-layout-t32L.c         |  527 ++++++++
 .../tests/ref/21/vector-layout-t32M.c         |  527 ++++++++
 .../tests/ref/21/vector-layout-t64L.c         |  527 ++++++++
 .../tests/ref/21/vector-layout-t64M.c         |  527 ++++++++
 .../tests/ref/21/vector-layout-t8L.c          |  527 ++++++++
 .../tests/ref/21/vector-layout-t8M.c          |  527 ++++++++
 .../helper-to-tcg/tests/ref/21/vector.c       |   31 +
 subprojects/helper-to-tcg/tests/scalar.c      |   15 +
 .../helper-to-tcg/tests/tcg-global-mappings.h |  118 ++
 .../helper-to-tcg/tests/user-pcrel-jump.c     |   28 +
 .../helper-to-tcg/tests/vector-layout.c       |   51 +
 subprojects/helper-to-tcg/tests/vector.c      |   34 +
 target/hexagon/cpu.h                          |    6 +-
 target/hexagon/gen_helper_funcs.py            |   17 +-
 target/hexagon/gen_helper_protos.py           |    2 +-
 target/hexagon/gen_idef_parser_funcs.py       |    9 +
 target/hexagon/gen_tcg_funcs.py               |   16 +-
 target/hexagon/genptr.c                       |    6 +-
 target/hexagon/helper.h                       |    9 +
 target/hexagon/hex_common.py                  |  103 +-
 target/hexagon/meson.build                    |  148 +-
 target/hexagon/op_helper.c                    |   17 +-
 target/hexagon/translate.c                    |  139 +-
 target/hexagon/translate.h                    |    4 +
 tcg/meson.build                               |    1 +
 tcg/tcg-global-mappings.c                     |   62 +
 tcg/tcg-op-gvec.c                             |    4 +-
 tests/docker/dockerfiles/debian-llvm.docker   |   38 +
 tests/docker/test-helper-to-tcg               |   41 +
 124 files changed, 27303 insertions(+), 122 deletions(-)
 create mode 100644 include/tcg/tcg-global-mappings.h
 create mode 100644 subprojects/helper-to-tcg/README.md
 create mode 100755 subprojects/helper-to-tcg/get-llvm-ir.py
 create mode 100644 subprojects/helper-to-tcg/include/CmdLineOptions.hpp
 create mode 100644 subprojects/helper-to-tcg/include/DebugInfo.hpp
 create mode 100644 subprojects/helper-to-tcg/include/Error.hpp
 create mode 100644 subprojects/helper-to-tcg/include/FunctionAnnotation.hpp
 create mode 100644 subprojects/helper-to-tcg/include/LlvmCompat.hpp
 create mode 100644 subprojects/helper-to-tcg/include/PrepareForOptPass.hpp
 create mode 100644 subprojects/helper-to-tcg/include/PrepareForTcgPass.hpp
 create mode 100644 subprojects/helper-to-tcg/include/PseudoInst.hpp
 create mode 100644 subprojects/helper-to-tcg/include/PseudoInst.inc
 create mode 100644 subprojects/helper-to-tcg/include/TcgGenPass.hpp
 create mode 100644 subprojects/helper-to-tcg/include/TcgGlobalMap.hpp
 create mode 100644 subprojects/helper-to-tcg/include/TcgType.hpp
 create mode 100644 subprojects/helper-to-tcg/include/VectorLayout.hpp
 create mode 100644 subprojects/helper-to-tcg/meson.build
 create mode 100644 subprojects/helper-to-tcg/meson_options.txt
 create mode 100644 subprojects/helper-to-tcg/src/LlvmCompat.cpp
 create mode 100644 subprojects/helper-to-tcg/src/Pipeline.cpp
 create mode 100644 subprojects/helper-to-tcg/src/PrepareForOptPass/PrepareForOptPass.cpp
 create mode 100644 subprojects/helper-to-tcg/src/PrepareForTcgPass/CanonicalizeIR.cpp
 create mode 100644 subprojects/helper-to-tcg/src/PrepareForTcgPass/CanonicalizeIR.hpp
 create mode 100644 subprojects/helper-to-tcg/src/PrepareForTcgPass/IdentityMap.cpp
 create mode 100644 subprojects/helper-to-tcg/src/PrepareForTcgPass/IdentityMap.hpp
 create mode 100644 subprojects/helper-to-tcg/src/PrepareForTcgPass/PrepareForTcgPass.cpp
 create mode 100644 subprojects/helper-to-tcg/src/PrepareForTcgPass/TransformGEPs.cpp
 create mode 100644 subprojects/helper-to-tcg/src/PrepareForTcgPass/TransformGEPs.hpp
 create mode 100644 subprojects/helper-to-tcg/src/PseudoInst.cpp
 create mode 100644 subprojects/helper-to-tcg/src/TcgGenPass/LinearizeBlocks.cpp
 create mode 100644 subprojects/helper-to-tcg/src/TcgGenPass/LinearizeBlocks.hpp
 create mode 100644 subprojects/helper-to-tcg/src/TcgGenPass/MapArguments.cpp
 create mode 100644 subprojects/helper-to-tcg/src/TcgGenPass/MapConstantExpressions.cpp
 create mode 100644 subprojects/helper-to-tcg/src/TcgGenPass/MapTcgOperations.cpp
 create mode 100644 subprojects/helper-to-tcg/src/TcgGenPass/MapTemporaries.cpp
 create mode 100644 subprojects/helper-to-tcg/src/TcgGenPass/TcgEmit.cpp
 create mode 100644 subprojects/helper-to-tcg/src/TcgGenPass/TcgEmit.hpp
 create mode 100644 subprojects/helper-to-tcg/src/TcgGenPass/TcgGenPass.cpp
 create mode 100644 subprojects/helper-to-tcg/src/TcgGenPass/ValueMapping.hpp
 create mode 100644 subprojects/helper-to-tcg/tests/call-to-declaration.c
 create mode 100644 subprojects/helper-to-tcg/tests/call-translation.c
 create mode 100644 subprojects/helper-to-tcg/tests/cpustate.c
 create mode 100644 subprojects/helper-to-tcg/tests/forward-context.c
 create mode 100644 subprojects/helper-to-tcg/tests/ldst.c
 create mode 100644 subprojects/helper-to-tcg/tests/meson.build
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/call-to-declaration.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/call-translation.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/cpustate.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/forward-context.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/ldst.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/scalar.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/user-pcrel-jump.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-f16L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-f16M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-f32L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-f32M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-f64L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-f64M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-f8L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-f8M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-t16L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-t16M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-t32L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-t32M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-t64L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-t64M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-t8L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector-layout-t8M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/15/vector.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/call-to-declaration.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/call-translation.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/cpustate.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/forward-context.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/ldst.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/scalar.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/user-pcrel-jump.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-f16L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-f16M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-f32L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-f32M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-f64L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-f64M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-f8L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-f8M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-t16L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-t16M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-t32L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-t32M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-t64L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-t64M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-t8L.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector-layout-t8M.c
 create mode 100644 subprojects/helper-to-tcg/tests/ref/21/vector.c
 create mode 100644 subprojects/helper-to-tcg/tests/scalar.c
 create mode 100644 subprojects/helper-to-tcg/tests/tcg-global-mappings.h
 create mode 100644 subprojects/helper-to-tcg/tests/user-pcrel-jump.c
 create mode 100644 subprojects/helper-to-tcg/tests/vector-layout.c
 create mode 100644 subprojects/helper-to-tcg/tests/vector.c
 create mode 100644 tcg/tcg-global-mappings.c
 create mode 100644 tests/docker/dockerfiles/debian-llvm.docker
 create mode 100755 tests/docker/test-helper-to-tcg

-- 
2.52.0



^ permalink raw reply	[flat|nested] 64+ messages in thread

end of thread, other threads:[~2026-07-31 11:49 UTC | newest]

Thread overview: 64+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-30  3:09 [PATCH v2 00/50] Introduce helper-to-tcg Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 01/50] accel/tcg: Add bitreverse and funnel-shift runtime helper functions Anton Johansson via qemu development
2026-07-30  8:04   ` Philippe Mathieu-Daudé
2026-07-30 14:43   ` Richard Henderson
2026-07-30  3:09 ` [PATCH v2 02/50] accel/tcg: Add getpc helper Anton Johansson via qemu development
2026-07-30 14:48   ` Richard Henderson
2026-07-30  3:09 ` [PATCH v2 03/50] tcg: Introduce tcg-global-mappings Anton Johansson via qemu development
2026-07-30 16:11   ` Richard Henderson
2026-07-30  3:09 ` [PATCH v2 04/50] tcg: Increase maximum TB size Anton Johansson via qemu development
2026-07-30 16:13   ` Richard Henderson
2026-07-30  3:09 ` [PATCH v2 05/50] tcg: Expose tcg_gen_ussub_sat() Anton Johansson via qemu development
2026-07-30  7:52   ` Philippe Mathieu-Daudé
2026-07-30 16:17   ` Richard Henderson
2026-07-30  3:09 ` [PATCH v2 06/50] Add helper-to-tcg subproject Anton Johansson via qemu development
2026-07-30 15:56   ` Alessandro Di Federico via qemu development
2026-07-30  3:09 ` [PATCH v2 07/50] helper-to-tcg: Introduce get-llvm-ir.py Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 08/50] helper-to-tcg: Handle LLVM version compatibility Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 09/50] helper-to-tcg: Introduce custom LLVM pipeline Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 10/50] helper-to-tcg: Add pipeline --debug and --debug-only Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 11/50] helper-to-tcg: Add simple error creation helper Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 12/50] helper-to-tcg: Introduce PrepareForOptPass Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 13/50] helper-to-tcg: PrepareForOptPass, demangle function names Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 14/50] helper-to-tcg: PrepareForOptPass, map annotations Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 15/50] helper-to-tcg: PrepareForOptPass, cull unused functions Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 16/50] helper-to-tcg: PrepareForOptPass, undef llvm.returnaddress Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 17/50] helper-to-tcg: PrepareForOptPass, fixup inline attributes Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 18/50] helper-to-tcg: PrepareForOptPass, collect debuginfo Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 19/50] helper-to-tcg: Pipeline, run optimization pass Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 20/50] helper-to-tcg: Introduce pseudo instructions Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 21/50] helper-to-tcg: Add guest vector layout description Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 22/50] helper-to-tcg: Introduce PrepareForTcgPass Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 23/50] helper-to-tcg: PrepareForTcgPass, remove functions with cycles Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 24/50] helper-to-tcg: PrepareForTcgPass, demote PHI nodes Anton Johansson via qemu development
2026-07-30  3:09 ` [PATCH v2 25/50] helper-to-tcg: PrepareForTcgPass, map TCG globals Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 26/50] helper-to-tcg: PrepareForTcgPass, transform GEPs Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 27/50] helper-to-tcg: PrepareForTcgPass, canonicalize IR Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 28/50] helper-to-tcg: PrepareForTcgPass, identity map trivial expressions Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 29/50] helper-to-tcg: Introduce TcgV structure Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 30/50] helper-to-tcg: Introduce TcgGenPass Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 31/50] helper-to-tcg: TcgGenPass, linearize basic blocks Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 32/50] helper-to-tcg: TcgGenPass, introduce Value <-> TcgV map Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 33/50] helper-to-tcg: TcgGenPass, add structs for string emission Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 34/50] helper-to-tcg: TcgGenPass, map arguments to TCG Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 35/50] helper-to-tcg: TcgGenPass, propagate constant expresssions Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 36/50] helper-to-tcg: TcgGenPass, allocate TCG registers Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 37/50] helper-to-tcg: TcgGenPass, emit TCG strings Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 38/50] helper-to-tcg: Add README Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 40/50] test: helper-to-tcg docker tests Anton Johansson via qemu development
2026-07-31 11:46   ` Alessandro Di Federico via qemu development
2026-07-31 11:48   ` Alessandro Di Federico via qemu development
2026-07-30  3:10 ` [PATCH v2 41/50] target/hexagon: Add get_tb_mmu_index() Anton Johansson via qemu development
2026-07-30  7:49   ` Philippe Mathieu-Daudé
2026-07-30  3:10 ` [PATCH v2 42/50] target/hexagon: Increase VECTOR_TEMPS_MAX Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 43/50] target/hexagon: Provide env to tcg global mapping Anton Johansson via qemu development
2026-07-30 16:28   ` Richard Henderson
2026-07-30  3:10 ` [PATCH v2 44/50] target/hexagon: Keep gen_slotval/check_noshuf for helper-to-tcg Anton Johansson via qemu development
2026-07-31 11:46   ` Alessandro Di Federico via qemu development
2026-07-30  3:10 ` [PATCH v2 45/50] target/hexagon: Emit annotations for helpers Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 46/50] target/hexagon: Split probe_and_commit helper Anton Johansson via qemu development
2026-07-30  7:50   ` Philippe Mathieu-Daudé
2026-07-30  3:10 ` [PATCH v2 47/50] target/hexagon: Use helper-to-tcg helper calls Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 48/50] target/hexagon: Manually call generated HVX instructions Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 49/50] target/hexagon: Use idef-parser as a fallback Anton Johansson via qemu development
2026-07-30  3:10 ` [PATCH v2 50/50] target/hexagon: Use helper-to-tcg Anton Johansson via qemu development

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.