[orc-rt] Add C API for Errors, plus ORC_RT_C_ABI macro. (#178123)
This commit introduces a C interface for the ORC runtime's Error
handling system, enabling C clients and language bindings to work with
ORC errors.
The ORC_RT_C_ABI macro applies __attribute__((visibility("default")))
(on platforms that support it), ensuring C API symbols are exported when
building the ORC runtime as a shared library. In the future I expect
that this will be extended to support other platforms (e.g. dllexport on
Windows).
[IR2Vec] Change MIR2Vec vocab printer to not print non-zero entities (#178117)
This PR relaxes MIR2Vec tests, so that `reference_*_print.txt` files
need not be updated every time the list of MIR opcodes changes
[clang][bytecode] Fix crash in void functions returning non-void expr… (#176550)
The bytecode compiler was incorrectly emitting an
RVOPtr
opcode for void functions if the return expression had a non-void type
(e.g. from a conditional operator). This triggered an assertion in the
interpreter because void functions lack RVO metadata.
This patch updates
visitReturnStmt
to check the function’s return type and use
discard()
for the expression in void contexts, preventing erroneous RVO pathing.
Fixes #176536
[orc-rt] Add unit test for "re-throwing" errors in handleErrors. (#178112)
handleErrors supports several different handler signatures, including
handlers that take a unique_ptr<T> (where T is a descendant of
ErrorInfoBase) and return an Error: (std::unique_ptr<T>) -> Error. In
this case the handler should be able to create an Error value to wrap
the original ErrorInfoBase object without.
This functionality was not previously tested, and will be used in
upcoming commits. This commit adds the missing test coverage.
Disable interprocedural optimization
"ports-gcc is modern enough to support -flto but our binutils and ld in base
are not. So compiles break whenever lto is enabled on archs like sparc64."
-- claudio
OK tb@ claudio@
[TableGen][AsmMatcher] Fix optional operand mask indexing when HasMnemonicFirst is false (#176868)
### Summary
Fix optional operand mask indexing in the generated asm matcher when
HasMnemonicFirst is false.
cxgbe(4): Fix netmap rx behavior with nm_split_rss
The driver should look for active queues and one potential default-queue
in both halves of the split instead of stopping at the first valid
default-queue.
Fixes: a9f476580eb0cxgbe(4): fixes for netmap operation with only some queues active
MFC after: 1 week
Sponsored by: Chelsio Communications
[ShrinkWrap] Ensure we do not crash on unreachable blocks. (#178009)
Since we started optimizating always-true branches in the AArch64
backend (like cbz wzr), shrink wrap has been exposed to some block
structures that it does not handle correctly, usually with unreachable
blocks. This prevents the call to FindIDom/findNearestCommonDominator
from failing when looking at the predecessors of a loop if one is
unreachable.
Fixes: #177866
[OpenMP][MLIR] Add num_teams clause with dims modifier support (#169883)
PR adds support of openmp 6.1 feature `num_teams` with dims modifier.
llvmIR translation for num_teams with dims modifier is marked as NYI.
[RISCV] Replace riscv.clmul intrinsic with llvm.clmul (#178092)
I did not replace riscv.clmulh/clmulr since those require a multiple
instruction pattern match. I wanted to ensure that -O0 will select the
correct instructions without relying on combines.
[RISCV] Rename vd->rd in the MC layer for vfirst.m/vcpop.m/vmv.x.s/vfmv.f.s. (#178081)
Add a new class for instructions that write GPR/FPR. Sink
RVVConstraint=NoConstraint into this class.
[NFCI][SROA] reduce calls to getAllocatedType() (#177437)
Replace repeated calls with getAllocationSize() and cached NewAllocaTy.
In AllocaSliceRewriter, the allocated type is already stored in the
NewAllocaTy member variable and now passed directly there. This change
replaces the remaining direct calls to `NewAI.getAllocatedType()` with
the cached NewAllocaTy to simplify and DRY the code.
Co-authored-by: Claude Opus 4.5 <noreply at anthropic.com>
powerpc: add a best-effort SMP time base sync for G5's that need it
There's no timebase freeze platform routine registered on my dual 2.3GHz
G5 PPC970FX Apple PowerMac.
For platforms without an explicit timebase freeze/unfreeze, we'll have to
make do with what we have - which for now is an explicit hand-crafted
spinlock/rendezvous method.
* For existing platforms, they'll still continue to clock freeze /
rendezvous; albeit with some stronger atomic bits now (from jhibbits@.)
* Instead of the fallback being "no timesync", implement a
best-effort one which does a similar rendezvous barrier between
BSP and APs, but instead of freeze/unfreeze the first instruction
after the CPUs all register they're ready is to set the timebase.
This has resulted in many reboots of my Powermac G5 dual-socket device
correctly starting and running in SMP mode.
[2 lines not shown]
macCatalyst: add SDKSettings.json as a dependency file if its potentially needed by the compiler (#178077)
Co-authored-by: Alex Lorenz <arphaman at gmail.com>
[NFCI] Replace getAllocatedType with tracked value type in RewriteStatepointsForGC (#177440)
The allocas in RewriteStatepointsForGC are created with
LiveValue->getType(), so we can use Def->getType() (which equals the
alloca's type) instead of querying getAllocatedType().
Changes:
- Load instructions now use Def->getType() directly
- The ToClobber vector now stores (Type*, AllocaInst*) pairs to track
the original value's type for creating null constants
Co-authored-by: Claude Opus 4.5 <noreply at anthropic.com>
[FunctionSpecialization] Remove getAllocatedType() type check (#177439)
Change getConstantStackValue() to check the type of the promoted
constant rather than the alloca's declared type. This is more correct
semantically since we're interested in the actual stored value's type,
not what the alloca was declared as.
The change also handles type punning cases more conservatively - if an
alloca is declared as i64 but stores a float, the old code would pass
the integer type check but potentially return a non-integer constant.
The new code correctly rejects such cases.
Also remove a bit of dead code, since the argument is a pointer type, it
cannot also have been a constant integer (and this code would be wrong
if it was reachable). Originally introduced as dead code in
https://reviews.llvm.org/D10642630fbb06979077740961ebc46853e28ab1f999f9d.
Co-authored-by: Claude Opus 4.5 <noreply at anthropic.com>
[InstCombine] Replace getAllocatedType() with getAllocationSize() (#177435)
Replace uses of getAllocatedType() with the more semantic
getAllocationSize() method in the alloca dereferenceability check
and zero-size alloca merging logic.
This simplifies the code by:
- Eliminating manual isArrayAllocation() checks (handled by
getAllocationSize)
- Eliminating superfluous isSized() checks (the verifier rejects them
already)
- Using TypeSize::isScalable() for scalable vector handling (before
casting to uint64_t)
- Using TypeSize::isZero() for zero-size checks
Co-authored-by: Claude Opus 4.5 <noreply at anthropic.com>
Revert "textproc/libxml2*: update to 2.15.1, split -core"
The design of this update was repeatedly rejected in the linked PR
with a prescribed different design. This commit is therefore
unauthorised.
This reverts commit 099bd713e09ebdd02d73fde770c50706f980404f.
With hat: desktop (textproc/libxml2), gnome (USES=gnome)
PR: 291316
Make sure we can still write data to txg
The final txgs are used only to clear out any remaining deferred
frees, and we cannot write new data to them. Make sure we do not
try to do so.
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Signed-off-by: Mariusz Zaborski <mariusz.zaborski at klarasystems.com>
Closes #18139
Lock db_mtx around arc_release() in couple places
* Lock db_mtx around arc_release() in dbuf_release_bp()
While this function is called only in sync context, the same buffer
can be touched by dbuf_hold_impl() in open context, creating races.
All other accesses to arc_release() are already protected by db_mtx,
so just take it here too.
Signed-off-by: Alexander Motin <alexander.motin at TrueNAS.com>
* Lock db_mtx in sa_byteswap()
While SA code seems protected by sa_lock, there is a back door of
dmu_objset_userquota_get_ids(), that may hold and access the dbuf
without sa_lock, relying only on db_mtx. Taking db_mtx here should
protect both the arc_release() and the data for db_buf.
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
[2 lines not shown]