Loading mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -1105,7 +1105,8 @@ LogicalResult ModuleTranslation::convertOneFunction(LLVMFuncOp func) { if (!argTy.isa<LLVM::LLVMPointerType>()) return func.emitError( "llvm.sret attribute attached to LLVM non-pointer argument"); llvmArg.addAttr(llvm::Attribute::AttrKind::StructRet); llvmArg.addAttrs(llvm::AttrBuilder().addStructRetAttr( llvmArg.getType()->getPointerElementType())); } if (auto attr = func.getArgAttrOfType<UnitAttr>(argIdx, "llvm.byval")) { Loading @@ -1113,7 +1114,8 @@ LogicalResult ModuleTranslation::convertOneFunction(LLVMFuncOp func) { if (!argTy.isa<LLVM::LLVMPointerType>()) return func.emitError( "llvm.byval attribute attached to LLVM non-pointer argument"); llvmArg.addAttr(llvm::Attribute::AttrKind::ByVal); llvmArg.addAttrs(llvm::AttrBuilder().addByValAttr( llvmArg.getType()->getPointerElementType())); } valueMapping[mlirArg] = &llvmArg; Loading mlir/test/Target/llvmir.mlir +10 −0 Original line number Diff line number Diff line Loading @@ -939,6 +939,16 @@ llvm.func @llvm_noalias(%arg0: !llvm.ptr<f32> {llvm.noalias = true}) { llvm.return } // CHECK-LABEL: define void @byvalattr(i32* byval(i32) % llvm.func @byvalattr(%arg0: !llvm.ptr<i32> {llvm.byval}) { llvm.return } // CHECK-LABEL: define void @sretattr(i32* sret(i32) % llvm.func @sretattr(%arg0: !llvm.ptr<i32> {llvm.sret}) { llvm.return } // CHECK-LABEL: define void @llvm_align(float* align 4 {{%*.}}) llvm.func @llvm_align(%arg0: !llvm.ptr<f32> {llvm.align = 4}) { llvm.return Loading Loading
mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -1105,7 +1105,8 @@ LogicalResult ModuleTranslation::convertOneFunction(LLVMFuncOp func) { if (!argTy.isa<LLVM::LLVMPointerType>()) return func.emitError( "llvm.sret attribute attached to LLVM non-pointer argument"); llvmArg.addAttr(llvm::Attribute::AttrKind::StructRet); llvmArg.addAttrs(llvm::AttrBuilder().addStructRetAttr( llvmArg.getType()->getPointerElementType())); } if (auto attr = func.getArgAttrOfType<UnitAttr>(argIdx, "llvm.byval")) { Loading @@ -1113,7 +1114,8 @@ LogicalResult ModuleTranslation::convertOneFunction(LLVMFuncOp func) { if (!argTy.isa<LLVM::LLVMPointerType>()) return func.emitError( "llvm.byval attribute attached to LLVM non-pointer argument"); llvmArg.addAttr(llvm::Attribute::AttrKind::ByVal); llvmArg.addAttrs(llvm::AttrBuilder().addByValAttr( llvmArg.getType()->getPointerElementType())); } valueMapping[mlirArg] = &llvmArg; Loading
mlir/test/Target/llvmir.mlir +10 −0 Original line number Diff line number Diff line Loading @@ -939,6 +939,16 @@ llvm.func @llvm_noalias(%arg0: !llvm.ptr<f32> {llvm.noalias = true}) { llvm.return } // CHECK-LABEL: define void @byvalattr(i32* byval(i32) % llvm.func @byvalattr(%arg0: !llvm.ptr<i32> {llvm.byval}) { llvm.return } // CHECK-LABEL: define void @sretattr(i32* sret(i32) % llvm.func @sretattr(%arg0: !llvm.ptr<i32> {llvm.sret}) { llvm.return } // CHECK-LABEL: define void @llvm_align(float* align 4 {{%*.}}) llvm.func @llvm_align(%arg0: !llvm.ptr<f32> {llvm.align = 4}) { llvm.return Loading