Skip to content

windows: restore stable optimized conversion coverage under LLVM 21 #45

@qartik

Description

@qartik

Summary

Windows CI still avoids the normal optimized and cross-target qir_to_qis path because the LLVM 21 Windows lane can hard-crash during optimized codegen / target-machine work.

Current workaround

Windows validation is intentionally reduced to conservative host-target smoke coverage:

  • opt_level=0
  • host-target conversion (target="native" in the Windows smoke test)
  • conversion + bitcode parse smoke coverage instead of exact snapshot matching
  • no equivalent optimized aarch64 conversion coverage like Linux and macOS

This is a stability workaround, not the desired steady state.

Evidence

Historical repro from earlier CI rollout:

  • CI run: 23202614680
  • job: 67428980077
  • failure: process abort with 0xc0000005 (Invalid access to memory location)

Recent local Windows Arm64 repros still show that the optimized path is unstable:

  • cargo run -- tests/data/base.ll -> 0xc0000005
  • cargo run -- -O1 -t native tests/data/base.ll -> 0xc0000005

By contrast, the conservative workaround remains stable:

  • cargo test test_snapshot_conversion_windows_smoke -- --nocapture passes
  • cargo test -q passes on the Windows O0 path

We also observed earlier that, on Windows, even touching the module triple in the opt_level=0 path could reproduce similar crashes, so src/opt.rs intentionally keeps the Windows O0 path as a no-op after target validation.

Goal

Restore at least one stable Windows test that exercises the real optimized conversion path, ideally matching the non-Windows qir_to_qis(..., opt_level=2, target="aarch64") flow.

Good next steps

  • identify the smallest optimized Windows repro that still crashes
  • determine whether the fault is target-machine creation, triple/data-layout mutation, pass execution, or teardown
  • add a stable Windows optimized regression test if a narrower safe path exists
  • remove the platform split in src/convert.rs once Windows can reliably run the optimized path

Done when

  • Windows can run at least one stable end-to-end conversion test on the real optimized path
  • the host-target O0 workaround is no longer required for CI confidence
  • the limitation note can be removed from CI and code comments

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions