diff --git a/mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp b/mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp index 79dd3e3069648..aab8d037cd8d2 100644 --- a/mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp +++ b/mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp @@ -643,9 +643,9 @@ static Value handleByValArgument(OpBuilder &builder, Operation *callable, return argument; } uint64_t targetAlignment = std::max(requestedAlignment, minimumAlignment); - return handleByValArgumentInit(builder, func.getLoc(), argument, elementType, - dataLayout.getTypeSize(elementType), - targetAlignment); + return handleByValArgumentInit( + builder, argument.getLoc(), argument, elementType, + dataLayout.getTypeSize(elementType), targetAlignment); } namespace { diff --git a/mlir/test/Dialect/LLVMIR/inlining-debuginfo.mlir b/mlir/test/Dialect/LLVMIR/inlining-debuginfo.mlir new file mode 100644 index 0000000000000..97a9f9f0a3d06 --- /dev/null +++ b/mlir/test/Dialect/LLVMIR/inlining-debuginfo.mlir @@ -0,0 +1,21 @@ +// RUN: mlir-opt %s -inline -mlir-print-debuginfo | FileCheck %s + +llvm.func @foo() -> !llvm.ptr + +llvm.func @with_byval_arg(%ptr : !llvm.ptr { llvm.byval = f64 }) { + llvm.return +} + +// CHECK-LABEL: llvm.func @test_byval +llvm.func @test_byval() { + // CHECK: %[[COPY:.+]] = llvm.alloca %{{.+}} x f64 + // CHECK-SAME: loc(#[[LOC:.+]]) + // CHECK: %[[ORIG:.+]] = llvm.call @foo() : () -> !llvm.ptr loc(#[[LOC]]) + %0 = llvm.call @foo() : () -> !llvm.ptr loc("inlining-debuginfo.mlir":14:2) + // CHECK: "llvm.intr.memcpy"(%[[COPY]], %[[ORIG]] + // CHECK-SAME: loc(#[[LOC]]) + llvm.call @with_byval_arg(%0) : (!llvm.ptr) -> () + llvm.return +} + +// CHECK: #[[LOC]] = loc("inlining-debuginfo.mlir":14:2)