[mlir][LLVM] Add alignment to LLVMFuncOp

Reviewed By: gysit

Differential Revision: https://reviews.llvm.org/D154410
This commit is contained in:
Christian Ulmann
2023-07-04 06:26:53 +00:00
parent 7e38ee6765
commit c55a8861f4
6 changed files with 43 additions and 2 deletions

View File

@@ -1648,7 +1648,8 @@ def LLVM_LLVMFuncOp : LLVM_Op<"func", [
OptionalAttr<UnitAttr>:$arm_streaming,
OptionalAttr<UnitAttr>:$arm_locally_streaming,
OptionalAttr<StrAttr>:$section,
OptionalAttr<UnnamedAddr>:$unnamed_addr
OptionalAttr<UnnamedAddr>:$unnamed_addr,
OptionalAttr<I64Attr>:$alignment
);
let regions = (region AnyRegion:$body);

View File

@@ -1749,6 +1749,9 @@ LogicalResult ModuleImport::processFunction(llvm::Function *func) {
if (func->hasComdat())
funcOp.setComdatAttr(comdatMapping.lookup(func->getComdat()));
if (llvm::MaybeAlign maybeAlign = func->getAlign())
funcOp.setAlignment(maybeAlign->value());
// Handle Function attributes.
processFunctionAttributes(func, funcOp);

View File

@@ -1044,6 +1044,9 @@ LogicalResult ModuleTranslation::convertFunctionSignatures() {
if (auto unnamedAddr = function.getUnnamedAddr())
llvmFunc->setUnnamedAddr(convertUnnamedAddrToLLVM(*unnamedAddr));
if (auto alignment = function.getAlignment())
llvmFunc->setAlignment(llvm::MaybeAlign(*alignment));
}
return success();

View File

@@ -207,7 +207,13 @@ module {
// CHECK-LABEL: local_unnamed_addr @local_unnamed_addr_func
llvm.func local_unnamed_addr @local_unnamed_addr_func() {
llvm.return
llvm.return
}
// CHECK-LABEL: @align_func
// CHECK-SAME: attributes {alignment = 2 : i64}
llvm.func @align_func() attributes {alignment = 2 : i64} {
llvm.return
}
// CHECK: llvm.comdat @__llvm_comdat

View File

@@ -229,3 +229,17 @@ define void @local_unnamed_addr_func() local_unnamed_addr {
; CHECK-LABEL: unnamed_addr @unnamed_addr_func
declare void @unnamed_addr_func() unnamed_addr
// -----
; CHECK-LABEL: @align_func
; CHECK-SAME: attributes {alignment = 2 : i64}
define void @align_func() align 2 {
ret void
}
// -----
; CHECK-LABEL: @align_decl
; CHECK-SAME: attributes {alignment = 64 : i64}
declare void @align_decl() align 64

View File

@@ -1656,6 +1656,20 @@ llvm.func unnamed_addr @unnamed_addr_func()
// -----
// CHECK-LABEL: @align_func
// CHECK-SAME: align 2
llvm.func @align_func() attributes {alignment = 2 : i64} {
llvm.return
}
// -----
// CHECK-LABEL: @align_decl
// CHECK-SAME: align 64
llvm.func @align_decl() attributes {alignment = 64 : i64}
// -----
// CHECK-LABEL: @callFreezeOp
llvm.func @callFreezeOp(%x : i32) {
// CHECK: freeze i32 %{{[0-9]+}}