[CIR] Lower pointer const_array globals without insertvalue chains (#198427)
`cir.global` initializers that are `const_array` of `global_view` (no
indices) or null pointers were lowered through an initializer region
full of `llvm.insertvalue` ops even though the elements are all
attribute-representable. That forced the O(N²) MLIR-to-LLVM IR path
on large tables (SPEC CPU 2026 `gcc/insn-automata.cc`).
When `lowerConstArrayAttr` can build the whole initializer, emit the
global with one aggregate attribute instead. String literals with
`trailing_zeros` are padded into `DenseElementsAttr` so C string tables
take the same bulk path. Indexed `global_view`, `#cir.zero` arrays, and
other non-bulk cases still use the insertvalue path.
MLIR prerequisite
[#198424](https://github.com/llvm/llvm-project/pull/198424) is merged on
`main`; this branch is rebased and CIR-only.
---------
Co-authored-by: Claude Sonnet 4.6 <noreply at anthropic.com>
Revert test expectations wrongly backported by NAS-141279
Commit 73131a9947 (NAS-141279, backport of master PR #19081) rewrote
test_utmp.py and test_api_key_keyring.py to match master's
implementations, but stable/26 differs, so the tests broke:
- InternalPamAuthenticator.authenticate() takes only (self, username) on
stable/26 -- auth.py:pam_authenticate() calls it with one arg. Master
added a password argument. Restore authenticate(username).
- api_key.convert_raw_key rejects wrong-length keys via the
RAW_KEY_PATTERN regex on stable/26 ("Not a valid raw API key"); the
separate "Unexpected key size" length check is only reachable on
master's non-length regex. Restore the regex-pattern expectation.
Reverts only the two broken test hunks to their pre-73131a9947 state;
the legitimate `assert self.ctx is not None` change in authenticator.py
is kept.
[CIR] NFC: Address sret review feedback in CallConvLowering
Apply andykaylor's second-round feedback on the sret lowering.
All source changes are behavior-preserving:
- Use llvm::append_range when copying arg_attrs into the sret
call's and the definition's attribute lists.
- Replace the manual pad loop in applySretSlotAttrs with an
assert plus resize to the rewritten operand count.
- Rename the Ignore-drop loop's index variables so the outer
one (argInfoIdx) indexes fc.argInfos and the inner one
(blockIdx) is the real block-argument index, matching the
convention insertArgCoercion already uses.
- Clarify the "hidden pointer" comments: the sret pointer is
synthesized by the ABI and is not part of the source-level
signature.
- Note why the llvm.sret attribute must carry the return type
explicitly, since LLVM pointers are opaque once lowered.
[6 lines not shown]
Pause failpoint: replace mtx_sleep with tsleep
Eliminate panic when re-setting a paused failpoint to pause
(address of feq_mtx changes whilst in mtx_sleep, triggering
assertion when reacquiring mtx).
Reviewed by: rlibby
Pull Request: https://github.com/freebsd/freebsd-src/pull/2267
[X86] Add aligned atomic vector store tests wider than 128 bits (NFC) (#202537)
These >128-bit stores are expanded to __atomic_store libcalls regardless
of alignment, since x86 caps atomic ops at 128 bits.
[SelectionDAG] Fold extracts of subvector inserts
Fold extract_subvector(insert_subvector(...)) when the extraction is
outside the inserted subvector or the inserted subvector only amends
the extracted
In particular,
1. vA extract_subvector (vB insert_subvector(vB X, vC Y, C1), C2) =>
vA extract_subvector(X, C2) when [C2, C2 + A) intersect [C1, C1 + C)
is the empty set
2. ... => extract_subvector(Y, C2 - C1) if [C2, C2 + Y) is a subset of
[C1, C1 + C) - an existing simplification
3. ... => vA insert_subvector(vA extract_subvector(vB X, C2), vC Y, C1 - C2)
if [C1, C1 + C) is a subset of [C2, C2 + A) - that is, if you're only
updating the extracted sub-part.
Adds a regresssion tests for an infinite SelectionDAG cycle that is
fixed by a stack of commits that ends with this one.
[3 lines not shown]
[bazel] Added targets for flang, flang-rt, and openmp (#202791)
This change adds the necessary targets for a fortran toolchain. `flang`
for the compiler itself, `flang-rt` for executable support, and `openmp`
for `!$omp` directives within fortran code.
[Demangle] Implement type D demangling and add all D basic type encodings (#202834)
This patch adds type name output to D demangler `parseType` and adds all
D basic type encodings to it.
[X86] Fix musttail miscompilation when arguments are passed on the stack (#199691)
After commit 782bf6a, a musttail call with matching CC was always
treated as a sibcall, which skips the stores of outgoing stack
arguments. Any non-forwarded stack argument was silently dropped.
Only treat musttail as a sibcall when every argument is in a register;
otherwise fall back to full tail-call lowering.
Fix #199224
---------
Co-authored-by: Reid Kleckner <rkleckner at nvidia.com>
[lldb] Remove ValueObjectRecognizerSynthesizedValue::IsSynthetic override (#199117)
Removes the `IsSynthetic` override on
`ValueObjectRecognizerSynthesizedValue`. This class does not also
override `GetNonSyntheticValue`.
There was a bug in which code assumed that when `IsSynthetic()` returned
true, that `GetNonSyntheticValue` would produce a different value
object. However the default behavior of `GetNonSyntheticValue` is to
return itself.
It seems to me that either:
1. `ValueObjectSynthetic` should be the only class to override
`IsSynthetic` to true
2. or, that classes which override `IsSynthetic` should also override
`GetNonSyntheticValue`
In either case, I think it's best to remove this `IsSynthetic` on
`ValueObjectRecognizerSynthesizedValue`.