diff --git a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp --- a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp @@ -220,12 +220,10 @@ moduleTranslation.setTBAAMetadata(callOp, call); // If the called function has a result, remap the corresponding value. Note // that LLVM IR dialect CallOp has either 0 or 1 result. - if (opInst.getNumResults() != 0) { + if (opInst.getNumResults() != 0) moduleTranslation.mapValue(opInst.getResult(0), call); - return success(); - } // Check that LLVM call returns void for 0-result functions. - if (!call->getType()->isVoidTy()) + else if (!call->getType()->isVoidTy()) return failure(); moduleTranslation.mapCall(callOp, call); return success(); diff --git a/mlir/test/Target/LLVMIR/llvmir.mlir b/mlir/test/Target/LLVMIR/llvmir.mlir --- a/mlir/test/Target/LLVMIR/llvmir.mlir +++ b/mlir/test/Target/LLVMIR/llvmir.mlir @@ -1838,6 +1838,19 @@ // ----- +llvm.func @fn() -> i32 + +// CHECK-LABEL: @call_branch_weights +llvm.func @call_branch_weights() { + // CHECK: !prof ![[NODE:[0-9]+]] + %res = llvm.call @fn() {branch_weights = array} : () -> i32 + llvm.return +} + +// CHECK: ![[NODE]] = !{!"branch_weights", i32 42} + +// ----- + llvm.func @foo() llvm.func @__gxx_personality_v0(...) -> i32