[libc] Implement dual freestore rotation for baremetal heap (#209811)
Implement dual FreeStore rotation in FreeListHeap under
LIBC_COPT_BAREMETAL_HEAP_ENABLE_FREESTORE_ROTATION option for baremetal
targets.
- Allocations pull from active store; free() quarantines blocks into
non-active store (1 - active).
- On allocation failure in active store, rotate() flips active index and
migrates/coalesces quarantined blocks into the new active store.
- Added 2-bit prev_free tracking in BlockRef metadata to distinguish
freestore indices.
- Added unit smoke tests and updated fuzzer for dual freestore rotation.
Assisted-by: Gemini and Claude based automation tool (human-in-the-loop)
---------
Co-authored-by: Yifan Zhu <yfzhu at google.com>
Co-authored-by: Claude Fable 5.1 <noreply at anthropic.com>
[lldb] Consistently use "null-terminated" across LLDB (NFC) (#224801)
It appears that both spellings are correct, but "null terminator" is far
more common, while "NUL terminator" is technically precise regarding the
ASCII character name. Most common in LLDB was "NULL terminated" which is
the worst of both worlds. This rallies around "null-terminated".
- Adjective -> null-terminated
- Verb -> null-terminate
- Nouns left unhyphenated but lowercased: null terminator, null
termination
[SLP]Fix crash in bool bitmask reduction match after tree vectorization
The known bits of the narrowed reduction leaves were computed after the
tree vectorization, which drops the operands of the vectorized scalars,
so the analysis dereferenced null operands. Match the bitmask form before
the vectorization and pass the result to the emission.
Fixes #225538
Reviewers:
Pull Request: https://github.com/llvm/llvm-project/pull/225568
[mlir][memref] Reject empty collapse_shape and expand_shape reassociation groups (#225348)
`memref.collapse_shape` and `memref.expand_shape` both accept an empty
reassociation group, which is not a valid reassociation: every group
must be a
non-empty, contiguous segment of dimensions.
* `memref.collapse_shape` with an empty group aborts the compiler for a
non-identity source layout. `CollapseShapeOp::verify` forwards the
reassociation to `computeCollapsedLayoutMap`, which calls
`ArrayRef::back()`
on each group and asserts on the empty one:
mlir-opt: llvm/include/llvm/ADT/ArrayRef.h:151:
const T& llvm::ArrayRef<T>::back() const [with T = long int]:
Assertion `!empty()' failed.
With an identity source layout the op is instead silently accepted.
[18 lines not shown]
[RegAlloc] [X86] Enable callee saved register optimization for x86 (#220090)
Enable callee saved register optimization implemented in
RAGreedy::tryAssignCSRFirstTime() for x86. It can replace save/restore
instructions in prologue/epilogue with register spill/reload in cold
blocks or register splits.
Spec cpu 2006 int result with fdo on skylake.
```
regalloc-csr-cost-scale 0 30
400.perlbench 42.0 42.7
401.bzip2 25.5 26.3
403.gcc 42.1 41.4
429.mcf 45.0 44.4
456.hmmer 38.2 38.2
458.sjeng 32.3 32.0
462.libquantum 68.0 68.9
471.omnetpp 26.9 27.3
[5 lines not shown]
[SelectionDAG] Add ISD::ARITH_FENCE to SelectionDAGDumper. (#225485)
We seem to have no consistency on CamelCase or snake_case in node
naming. I've gone with CamelCase to match the nearby nodes, but happy to
change.
[clang] Return early if a value dependent recovery init appeared in constant evaluation context in legacy constant evaluator (#225027)
A recovery default member initializer can be value-dependent even when
the expression referring to the variable is not. Clang should return
early to avoid crash.
This fix the issue found in
https://github.com/llvm/llvm-project/issues/185874#issuecomment-4058045596.
---------
Signed-off-by: yronglin <yronglin777 at gmail.com>
18447 header-tests ALL environment omits XPG3 and XPG4
Reviewed by: Robert Mustacchi <rm at fingolfin.org>
Reviewed by: Toomas Soome <tsoome at me.com>
Approved by: Dan McDonald <danmcd at oxidecomputer.com>
18392 Fill in header-tests sys_timeb.h config
Reviewed by: Robert Mustacchi <rm at fingolfin.org>
Reviewed by: Toomas Soome <tsoome at me.com>
Approved by: Dan McDonald <danmcd at oxidecomputer.com>
18389 Fill in header-tests strings.h config
Reviewed by: Robert Mustacchi <rm at fingolfin.org>
Reviewed by: Toomas Soome <tsoome at me.com>
Approved by: Dan McDonald <danmcd at oxidecomputer.com>
18445 header test missing SUSv5 in some environments
Reviewed by: Robert Mustacchi <rm at fingolfin.org>
Reviewed by: Toomas Soome <tsoome at me.com>
Approved by: Dan McDonald <danmcd at oxidecomputer.com>
[orc-rt] Simplify bit.h countl_zero and bit_width (#225547)
The old countl_zero algorithm wasn't recognized / optimized by clang on
arm64 or x86-64. Switch to a simpler loop that clang recognizes and
rewrite bit_width in terms of countl_zero. NFCI.
[Driver] Link ubsan_loop_detect with --whole-archive (#225498)
`addSanitizerRuntimes` places sanitizer archives before user object
files on the linker command line.
Because `ubsan_loop_detect` was in `NonWholeStaticRuntimes` without `-u`
symbols, single-pass linkers like GNU `ld.bfd` discarded
`libclang_rt.ubsan_loop_detect.a` before seeing references to
`__ubsan_install_trap_loop_detection` or `__ubsan_is_trap_loop`. Move
`ubsan_loop_detect` to `StaticRuntimes` so it is linked with
`--whole-archive`.
[CIR] Use cleanup active flag with logical operators (#225554)
When temporary expressions are created within a logical binary
operation, we need to use a "cleanup active" flag to guard any cleanups
that are created in the right-hand side of the expression because the
expression may short-circuit and not evaluate the RHS. Failure to do so
had been leading to destructors being called for objects that had never
been constructed.
This fix introduces a regression in destructor call ordering when both
sides of a logical operation create temporaries that require cleanup.
This is a known ordering bug that preceeded this PR but was incidentally
avoided by the previous incorrect handling. The orderig bug will be
fixed in a follow-up change.
Assisted-by: Cursor / various models
[CIR] Fix 'cir.not' lowering behavior for >64 bit size (#225541)
We were only inverting the lower 64 bits because we used the
int64_t/uint64_t overload, which only filled in 64 bits. This patch
replaces that with a 'getAllOnes' of the right size.
[CIR] Lower nobuiltin attribute (#225545)
This causes a problem in tests for global allocation functions, but we
are not currently lowering the 'nobuiltin' attribute to LLVM-IR. This
patch adds the lowering.
[CIR] Fix lambda explicit object parameters (#225518)
We seem to have diverged significantly from classic compiler here,
likely because the incubator missed these changes. The result was the
exmaple given in the test would crash because the 'this' argument wasn't
set right.
This patch copy/pastes/lightly modifies classic codegen to get these
lambdas done correctly.
[CIR] Implement lowering for BitInt that needs to be an array (#225470)
On bitint types that are not powers of 2, we have to represent them as
an array. This patch modifies 'convertTypeForMemory' to do that.
However, that ends up causing a couple of problems, that this also ends
up fixing:
First: constant init needs to also lower to this type/get that correct,
so this introduces 'getBitIntStorageAttr' to manage that
Second: The 'copy' op lowering was getting its layout from the lowered
type, which is no longer correct. Since this is suposed to be the same
as what we get from CIR, this is jsut switched to use that instead.
Third: this ran into an issue with cir.copy in LoweringPrepare where we
didn't properly copy the alignment over. The result was our copy
operation didn't get alignment correct. This patch fixes that too.
Fourth: Load/Store/VecMaskedLoad all had to change how they got the type
[10 lines not shown]
lang/ocam/ocaml.mk: Limit findlib bl3 to build phase
This is used to find libraries; it's more or less pkg-config for
ocaml. There's no logical basis for it to be used at runtime by any
ocaml package that uses it to build.