[CIR][OpenCL] Lower kernel argument metadata to LLVM dialect metadata (#217835)
Lower CIR OpenCL kernel-argument metadata into `LLVMFuncOp`
`function_metadata` instead of mutating LLVM IR directly. Keep CIR
storage in source-level language address spaces while emitting the fixed
SPIR 2.0 metadata numbers.
Assisted-by: Codex / GPT-5.6 Sol
CodeGen: Use getVRegDef in DetectDeadLanes (#219520)
Look up the defining instruction of a single-def virtual register with
getVRegDef instead of the parent of its first def operand, so this no
longer depends on MachineOperand::getParent().
Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
[CIR] Record how far a bit-field's declared types reach on x86_64
A bit-field access unit is as wide as the compiler chooses, which can be
narrower than the types declared in it. The x86_64 ABI reads how far those
declarations reach to tell the bytes after a unit from padding, and CIR had no
way to say it, so the bridge refused any padded record holding a named unit.
CIRGen now records that reach as a zero-length member beside the unit, the
shape a zero-width bit-field uses. With the fact in the type, the bridge
drops the reject. It also stops refusing unions like `union { int x : 3; }`,
where no member on its own is as wide as the union.
Assisted-by: Cursor / claude-opus-5
[VPlan] Add VPlan printing test for epilogue vectorization (NFC). (#219578)
Print the final VPlans for the main and the epilogue vector loop, to
show what epilogue vectorization models in VPlan and what is left to be
patched up in the generated IR after executing the plans.
[flang][OpenACC] Changed memory management for private POINTERs. (#219052)
The motivating example:
```
!$acc parallel loop private(ptr) present(target_data)
do i = 1, 128
ptr => target_data(i)%array
ptr(...) = ...
```
The OpenACC privatization recipe was allocating private data
for `ptr`, storing it in `ptr` private descriptor and then
trying to deallocate `ptr->base_addr` at the end of the region.
`ptr->base_addr` is pointing to `target_data(i)%array` that is allocated
in device global memory and it is illegal to `free()` it in the device
code.
The `destroy` part of the recipe can only `free()` the private data
[43 lines not shown]
[M68k] Fix Instruction Verifier errors related to `MOVEM` and `PHI` lowering (#219011)
This fixes some errors reported by the Instruction Verifier when
building with `-verify-machineinstrs`.
- The `MOVM` pseudos are given an 8-bit variant so that the IV can
correctly see 8-bit physical registers being defined/used. Without this,
8-bit register spills fail IV by attempting to load/store an undefined
physical register (the 16-bit superclass of the 8-bit register). Codegen
is not affected by this change.
- During `CollapseMOVEMPass`, the implicit ops are now copied over from
the old deleted instructions into the new combined instruction. This
fixes IV failing in cases where an instruction wants to use registers
that were defined by the collapsed `MOVEM`. Codegen is not affected by
this change.
- CCR is now marked as non-allocatable (which is true anyway). The
custom inserter for `CMOV` (`emitLoweredSelect()`) has logic where CCR
is added as a live-in for the newly-created blocks that are expected to
use it. This would cause IV to fail, because IV doesn't allow non-entry
[3 lines not shown]
workflow/release-binaries: Hard-code Wix install path (#219328)
Searching for the candle.exe executable is very slow and we know the
install path will always be the same since we have version pinned the
install.