[AMDGPU] Let LDSDMA ops cross a sched_barrier when the mask allows it (#203255)
A mask allowing LDSDMA (0x800) still kept LDSDMA ops pinned, because
canAddMI matched them as VMEM and invertSchedBarrierMask left the DS bit
set
[lit] Add --wtt-output option to report results in WTT (.wtl) format (#211066)
Adds a WttReport reporter and a --wtt-output <file> option that writes a
WTT (Windows Test Technology) .wtl log. This lets lit report test
specific pass/fail results in a format consumable by Windows lab
infrastructure.
The reporter follows the existing pattern in reports.py (ResultDBReport,
XunitReport, TimeTraceReport) and is wired through cl_arguments.py like
the other output options. PASS/XFAIL map to Pass and everything else to
Fail. UNSUPPORTED tests are reported as Pass with a summary of skipped
tests.
Note: AI was used to help create the file.write commands and for
creating the testing content based on issues humans and AI resolved
during development.
Associated RFC:
https://discourse.llvm.org/t/rfc-add-a-wtt-output-format-for-reporting-lit-results-to-windows-test-infrastructure/91215
[BOLT] Default heatmap block sizes to cache line, pages and hugepage
The defaults were 64, 4K, 256K. 4K is the page size only on x86-64 and on
AArch64 kernels built that way; AArch64 also runs 16K and 64K base pages, and
256K corresponds to nothing in particular on either.
Use 64, 4K, 16K, 64K, 2M: the cache line, the three base page sizes in use, and
the PMD hugepage above a 4K base page. Each granularity then maps onto a real
capacity, which is what makes the working set numbers comparable to one -- L1i
lines, iTLB and L2 TLB entries, frontend region-table entries.
Two more granularities cost two more passes over an already-built map, no extra
decoding.
[BOLT] Keep the spelling of each heatmap block size
The block-size parser turns "64K" into 65536 and discards the original text,
keeping it only for error messages. The working set log then has to either
reprint the raw value or reformat it back, and reformatting invents a spelling
the user did not choose: "1MiB" comes back as "1M".
Store the spelling next to the value and echo it. Heatmap file names keep using
the numeric value, matching the existing "dumping heatmap with bucket size N"
message and the -<size> suffix that tests already expect.
Test Plan:
updated heatmap-preagg.test
[BOLT] Report working set size from the heatmap (#215429)
The heatmap produces a CDF (code coverage @ given sample pct), but only
writes it out as a table. Add two things:
1. Recompute CDF with scaled bucket sizes,
2. Log CDF at given sample pct (`-heatmap-cdf-pct` default p99) + total.
This effectively reports the code working set size (p99 and total),
expressed in units that map to uarch sizes: cache line (64B), base page
(4/16/64K), region table (2M), huge page (2M for PMD w/4K base), etc.
Sizes of interest can be specified using `-block-size=size1,size2,...`
Test Plan:
updated heatmap.test
[lit] Stop bare env from short-circuiting the pipeline (#214512)
env with no trailing subcommand returns early from _executeShCmd,
skipping the rest of the pipeline. A RUN line like env | FileCheck never
runs FileCheck.
Runs it as an in-process pipeline stage instead, reusing the existing
InProcessPipe implementation.
Fixes #115578.
Also fixes six Inputs/shtest-env-positive fixtures that could never have
passed once FileCheck actually ran. Five expected KEY = VALUE from
FileCheck while env has always printed KEY=VALUE. Two RUN lines used a
check-prefix that matched no CHECK line in the file. One needed
--allow-empty since env -i produces no output at all.
[ORC] Standardize dylib manager on NativeDylibManager names (#215441)
The in-tree SimpleExecutorDylibManager now publishes a single controller
interface -- the ORC runtime's NativeDylibManager symbol names -- which
EPCGenericDylibManager targets, dropping the parallel LLVM-style
SimpleExecutorDylibManager_* names and the Create path that used them.
Follow-up to the EPCGenericDylibManager proxy refactor, which already
routed both name sets through the same code.
Details:
* Remove EPCGenericDylibManager::CreateWithDefaultBootstrapSymbols.
SimpleRemoteEPC and lli now construct via Create(ExecutionSession&),
which resolves the NativeDylibManager names in the session's bootstrap
JITDylib.
* Remove the SimpleExecutorDylibManager{Instance,Open,Resolve}
bootstrap-name constants from OrcRTBridge. SimpleExecutorDylibManager
previously published both name sets and now publishes only the
[4 lines not shown]
[DWARFCFIChecker] Changing register initial status as undefined (#209032)
As per DWARF spec 6.4.1. Users can overwrite this default assumption inside the prologue.
[mlir][SPIR-V] Fix swapped select operands in index.floordivs lowering (#214770)
Fix ConvertIndexFloorDivSPattern to select `negRes` when `cmp` is true
Previously operands were reversed, producing the wrong sign for the
floordiv result whenever the negative result branch should've been taken
[CIR] Drop the call-conv lowering flag from the new CodeGen tests
The two CodeGen tests this branch adds ask for the pass with
`-clangir-enable-call-conv-lowering`, which no longer exists. The pass
now runs by default, so the RUN lines do not need a flag at all and get
the same lowering without one.
Assisted-by: Cursor / claude-opus-5
[CIR] Enable x86_64 calling-convention lowering by default (#215026)
x86_64 calling-convention lowering has been opt-in behind
`-clangir-enable-call-conv-lowering` since it landed, so nothing reaches
the pass unless a test asks for it. The ClangIR default path therefore
emits high-level signatures that do not match SysV: a 32-byte struct
return stays first-class instead of going out through `sret`, and a
one-eightbyte struct argument is passed as a record instead of being
coerced to `i64`.
This change turns the pass on by default for x86_64 and renames the flag
to a `BoolFOption` pair, `-fclangir-call-conv-lowering` and
`-fno-clangir-call-conv-lowering`. The last flag on the command line
wins, so a build can disable the pass globally and re-enable it for one
translation unit.
Flipping the default breaks 147 of 949 CIR tests. 37 tests are CHECK
regenerations where lowering moved toward classic CodeGen. 110 tests are
quarantined by adding the disable flag to the RUN lines that turn the
[12 lines not shown]
[SimplifyLibCalls] Shrink llvm.sincos.f64 to llvm.sincos.f32 (#211218)
The double -> float shrink in LibCallSimplifier::optimizeCall only knows
about Intrinsic::sin and Intrinsic::cos, so once InstCombine combines a
sin/cos pair into llvm.sincos the fpext/fptrunc pair is left in place
and the work is done at double precision.
Handle Intrinsic::sincos too, behind the same UnsafeFPShrink gate. It
needs its own helper rather than optimizeDoubleFP because sincos returns
a struct: the results are read back through extractvalue instead of
being used directly, and the narrowed call has to be rebuilt as a
struct. InstCombine folds the resulting extractvalue/insertvalue pairs
away, so the sin/cos pair in the reported case now ends up as a single
llvm.sincos.f32 call.
NOTE: reported as a 2-2.5% regression on SPEC17 526.blender with -flto
-ffast-math on neoverse-v2 in #194616.
Assisted-by: Opus 4.8
[libc++][CI] Add a cron job to trigger benchmarking jobs (#212859)
This patch introduces a GitHub workflow that runs on a schedule and
determines which benchmarking jobs to trigger to fill the LNT instances
with performance data.
As a drive-by, it also consolidates the information describing libc++
LNT machines into a single JSON file.
The added cron workflow will run every hour, but since the benchmarks
typically take more than an hour to run, it is expected that some of
those triggers will not actually trigger new jobs.
[Test][CAS] Fix PluginCASTest DLL discovery on Windows multi-config generators and MinGW config (#215099)
The test was computing the plugin path by walking up 3 directory levels
from the test executable to reach the build root, then appending
bin/CASPluginTest.dll. This fails on MSVC multi-config builds where an
extra Release/ subdirectory exists. Place the plugin library next to
the test executable instead, matching the pattern used by the Passes
plugin tests.
Also fix MinGW config, in mingw build configurations, the plugin is
named libCASTestPlugin.dll, while it resides in the bin directory.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply at anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply at anthropic.com>
[ORC] Reimplement EPCGenericDylibManager on RTBridge proxies (#215256)
Reimplement EPCGenericDylibManager's open/resolve operations using
rt::Proxy objects rather than direct
ExecutorProcessControl::callSPSWrapper* calls, bringing it in line with
the other RTBridge-based executor accessors. Behavior is unchanged; the
public open/lookup surface is the same aside from the removals noted
below.
Implementation details:
* The SymbolAddrs struct (three ExecutorAddrs) becomes Bindings: the
manager instance address plus rt::Proxy handles for open and resolve.
Bindings members are protocol-agnostic, so a client can build their own
for another protocol and pass them to the constructor; Create resolves
them via buildProxies against a JITDylib / the bootstrap JITDylib.
* open/resolve return SPSExpected, so this relies on the proxy layer's
Error/Expected support to deliver a single flattened Expected, replacing
[14 lines not shown]
[Hexagon] Fix reg class for C2_cmoveit/cmoveif cext lowering (#212911)
HexagonConstExtenders::getDirectRegReplacement mapped C2_cmoveit and
C2_cmoveif (32-bit predicated immediate moves into IntRegs) to A2_tfrpt
/ A2_tfrpf - the 64-bit DoubleRegs predicated transfers. When the
const-extender pass found a shared extended immediate profitable to
hoist into a register, it rewrote
%d:intregs = C2_cmoveit %p:predregs, #imm
into
%d:intregs = A2_tfrpt %p:predregs, %hoisted:intregs (BAD)
producing a paired-register transfer with IntRegs operands and tripping
the machine verifier:
Bad machine code: Illegal virtual register for instruction
Expected a DoubleRegs register, but got a IntRegs register
[9 lines not shown]
[SandboxVec][SeedCollector] Fix seed insert if can't determine mem access distance (#213807)
Up until now we would insert a memory instruction in a MemSeedBundle
even if we could not determine the access distance against the existing
bundle instructionss. This was causing a crash in the invocation of
upper_bound() as the vector could no longer be partitioned.
The fix is to extend the functions that check the memory access ordering
to return nullopt when the access difference can't be determined.
[lldb] Use StringRef when creating Listeners (#214863)
This is primarily motivated to remove the last ConstString from
Debugger.cpp. It would have been possible to write this change without
changing Listener, but then I noticed a few places where we would have
benefitted from changing the interface.
[docs] Finish MyST migration for selected LLVM docs (#214618)
Tracking issue: #201242
See the [migration guide] for more information.
[migration guide]:
https://llvm.org/docs/SphinxQuickstartTemplate.html#markdown-migration-guidelines
This is a stacked PR based on #214616 , which will be a standalone
commit that
renames *.rst -> *.md before this PR lands for history preservation
purposes.
This was prepared with rst2myst plus LLM-assisted cleanup. I paged
through all the generated HTML looking for migration artifacts, and all
of the differences I could find appear to be formatting error
corrections.