mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 12:26:52 +08:00
[mlir][llvm] Add arm_streaming LLVM function attributes
This patch adds two optional attributes to 'llvm.func' op for the Armv9 Streaming SVE (SSVE) mode [1] that map 1-1 with LLVM function attributes [2]: * arm_streaming -> aarch64_pstate_sm_enabled * arm_locally_streaming -> aarch64_pstate_sm_body Streaming-mode is part of the interface (ABI) for functions with the first attribute and it's the responsibility of the caller to manage PSTATE.SM on entry/exit to functions with this attribute [3]. The LLVM backend will emit 'smstart sm' / 'smstop sm' [4] around calls to streaming functions. In locally streaming functions PSTATE.SM is kept internal and managed by the callee on entry/exit. The LLVM backend will emit 'smstart sm' / 'smstop sm' in the prologue / epilogue for functions with this attribute. The integration test for SSVE has been updated to no longer use the passthrough mechanism that's intended for prototyping. PATCH [1 / 2] in series for RFC: https://discourse.llvm.org/t/rfc-supporting-armv9-scalable-matrix-extension-sme-streaming-sve-ssve-mode-in-mlir/70678 [1] https://developer.arm.com/documentation/ddi0616/aa [2] https://llvm.org/docs/AArch64SME.html#introduction [3] https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst#671pstatesm-interfaces [4] https://developer.arm.com/documentation/ddi0602/2023-03/Base-Instructions/SMSTART--Enables-access-to-Streaming-SVE-mode-and-SME-architectural-state--an-alias-of-MSR--immediate-- Reviewed By: awarzynski, dcaballe, WanderAway Differential Revision: https://reviews.llvm.org/D150932
This commit is contained in:
@@ -881,6 +881,11 @@ LogicalResult ModuleTranslation::convertOneFunction(LLVMFuncOp func) {
|
||||
if (auto gc = func.getGarbageCollector())
|
||||
llvmFunc->setGC(gc->str());
|
||||
|
||||
if (auto armStreaming = func.getArmStreaming())
|
||||
llvmFunc->addFnAttr("aarch64_pstate_sm_enabled");
|
||||
else if (auto armLocallyStreaming = func.getArmLocallyStreaming())
|
||||
llvmFunc->addFnAttr("aarch64_pstate_sm_body");
|
||||
|
||||
// First, create all blocks so we can jump to them.
|
||||
llvm::LLVMContext &llvmContext = llvmFunc->getContext();
|
||||
for (auto &bb : func) {
|
||||
|
||||
Reference in New Issue
Block a user