[ObjC] Support emission of selector stubs calls instead of objc_msgSend. (#183922)
This optimizes objc_msgSend calls by emitting "selector stubs" instead.
Usually, the linker redirects calls to external symbols to a symbol stub
it generates, which loads the target function's address from the GOT and
branches to it:
<symbol stub for _func:>
adrp x16, _func at GOTPAGE
ldr x16, [x16, _func at GOTPAGEOFF]
br x16
with msgSend selector stubs, we extend that to compute the selector as
well:
<selector stub for "foo":>
adrp x1, <selector ref for "foo">@PAGE
ldr x1, [x1, <selector ref for "foo">@PAGEOFF]
[35 lines not shown]
Make omp.iterator verify more robust and add tests
- Make sure
- step in omp.iterator is not zero
- when step > 0, lo < hi
- when step < 0, lo > hi
- Add negative test for above checks
- Add iterator lowering test to make sure negative step work
```
// OpenMP 5.2.6
The iterator value setof the iterator are the set ofvalues i_1,...,i_N where:
i_1 = begin
i_j = i_{j-1} + step, for j >= 2
If step > 0:
i_1 <= end
i_N <= end
i_N + step > end
[6 lines not shown]
Use findAllocaInsertPoint when possible and move the affinity packing logic to OpenMPToLLVMIRTranslation
- Move the omp.affinity_list packing logic from OMPIRBuilder to
OpenMPToLLVMIRTranslation so that we have all the omp.affinity_list
allocating logic inside the lambda defined in buildAffinityData
- all the allocation logic for affinity list is now using
findAllocaInsertPoint when possible (static count)
- `task_affinity_iterator_dynamic_tripcount` in
openmp-iterator.mlir is a regression test add previously for
dynamic tripcount
Fix affinity type, handle unexpected iterator loop body and accumulate affinity entry for one register call
- Generate kmpTaskAffinityInfoTy based on platform and create a helper
in OMPIRBuilder so that we can use it in OpenMPToLLVMIRTranslation and
OMPIRBuilder
- Handle invalid iterator loop body and add unit test
- Accumulate affinity info and only one register call for a task
construct
- remove `this->` in member fucntion
Refactor createIteratorLoop to use OMPIRBuilder utility functions and make end-of-block insertion robust.
- Replace manual splitBasicBlock/branch with splitBB
and redirectTo()
- When insertion point is at BB.end() and the block is terminated, split
before the terminator so the original successor path is preserved
through omp.it.cont
- Add test for unterminated blocks
[mlir][llvmir][OpenMP] Translate affinity clause in task construct to llvmir
Translate affinity entries to LLVMIR by passing affinity information to
createTask (__kmpc_omp_reg_task_with_affinity is created inside PostOutlineCB).
Refactor and support multiple affinity register for a task
- Support multiple affinity register for a task
- Move iterator loop generate logic to OMPIRBuilder
- Extract iterator loop body convertion logic
- Refactor buildAffinityData by hoisting the creation of affinity_list
- IteratorsOp -> IteratorOp
- Add mlir to llvmir test
Implement lowering for omp.iterator in affinity
Create IteratorLoopNestScope for building nested loop for iterator.
Take advantage of RAII so that we can have correct exit for each
level of the loop.
[PowerPC] Refactor immediate operand part 2 (#180289)
Contiue with immediate operand refactoring:
* consolidate printU##Imm into a template function resulting in simpler
class def
* separate imm and relocation classes to clearly reflect what they are
tex-tikzfill{,-doc}: add version 1.0.1
This is a collection of TikZ libraries which add further
options to fill TikZ paths with images and patterns. The
libraries comprise fillings with images from files and from
TikZ pictures. Also, patterns of hexagons and of rhombi are
provided.
NAS-140250 / 26.0.0-BETA.2 / Fix keepalived boot deadlock in configure_addresses_impl (by bmeagherix) (#18441)
ix-netif.service runs Before=network-pre.target, but keepalived requires
After=network-online.target. Starting keepalived from
configure_addresses_impl (called via ix-netif.service) caused systemd to
queue the start job for ~95s until network-online.target was eventually
satisfied after ix-netif.service completed - a structural deadlock.
Fix by guarding the keepalived START behind the ix-netif completion
sentinel. If keepalived is already running, RELOAD as before. If it is
not running and the sentinel exists (i.e. we are in a post-boot
interface.sync call), START it. If the sentinel does not exist we are in
the early boot call and skip keepalived entirely; it will be started
once the network is online.
Move NETIF_COMPLETE_SENTINEL from smb_/constants.py to the more
appropriate middlewared/utils/interface.py and update importers
accordingly.
[2 lines not shown]
NAS-140250 / 26.0.0-BETA.1 / Fix keepalived boot deadlock in configure_addresses_impl (by bmeagherix) (#18440)
ix-netif.service runs Before=network-pre.target, but keepalived requires
After=network-online.target. Starting keepalived from
configure_addresses_impl (called via ix-netif.service) caused systemd to
queue the start job for ~95s until network-online.target was eventually
satisfied after ix-netif.service completed - a structural deadlock.
Fix by guarding the keepalived START behind the ix-netif completion
sentinel. If keepalived is already running, RELOAD as before. If it is
not running and the sentinel exists (i.e. we are in a post-boot
interface.sync call), START it. If the sentinel does not exist we are in
the early boot call and skip keepalived entirely; it will be started
once the network is online.
Move NETIF_COMPLETE_SENTINEL from smb_/constants.py to the more
appropriate middlewared/utils/interface.py and update importers
accordingly.
[2 lines not shown]