Skip to content

Commit 29e4fb6

Browse files
[MLIR][LLVM] Importer: fix void returning intrinsic calls (llvm#138325)
1 parent 28934fe commit 29e4fb6

File tree

4 files changed

+16
-6
lines changed

4 files changed

+16
-6
lines changed

mlir/lib/Target/LLVMIR/LLVMImportInterface.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ LogicalResult mlir::LLVMImportInterface::convertUnregisteredIntrinsic(
3737
llvmOperands, llvmOpBundles, false, {}, {}, mlirOperands, mlirAttrs)))
3838
return failure();
3939

40-
Type results = moduleImport.convertType(inst->getType());
40+
Type resultType = moduleImport.convertType(inst->getType());
4141
auto op = builder.create<::mlir::LLVM::CallIntrinsicOp>(
42-
moduleImport.translateLoc(inst->getDebugLoc()), results,
42+
moduleImport.translateLoc(inst->getDebugLoc()),
43+
isa<LLVMVoidType>(resultType) ? TypeRange{} : TypeRange{resultType},
4344
StringAttr::get(builder.getContext(), intrinName),
4445
ValueRange{mlirOperands}, FastmathFlagsAttr{});
4546

mlir/test/Dialect/LLVMIR/roundtrip.mlir

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,3 +1033,12 @@ llvm.func @blockaddr_fn() {
10331033
// CHECK-NEXT: llvm.br ^bb1
10341034
// CHECK-NEXT:^bb1:
10351035
// CHECK-NEXT: llvm.blocktag <id = 0>
1036+
1037+
llvm.func @callintrin_voidret(%arg0: vector<8xi8>, %arg1: vector<8xi8>, %arg2: vector<8xi8>, %arg3: !llvm.ptr) {
1038+
llvm.call_intrinsic "llvm.aarch64.neon.st3.v8i8.p0"(%arg0, %arg1, %arg2, %arg3) : (vector<8xi8>, vector<8xi8>, vector<8xi8>, !llvm.ptr) -> ()
1039+
llvm.return
1040+
}
1041+
llvm.func @llvm.aarch64.neon.st3.v8i8.p0(vector<8xi8>, vector<8xi8>, vector<8xi8>, !llvm.ptr)
1042+
1043+
// CHECK-LABEL: llvm.func @callintrin_voidret
1044+
// CHECK-NEXT: llvm.call_intrinsic "llvm.aarch64.neon.st3.v8i8.p0"(%arg0, %arg1, %arg2, %arg3) : (vector<8xi8>, vector<8xi8>, vector<8xi8>, !llvm.ptr) -> ()

mlir/test/Target/LLVMIR/Import/intrinsic-prefer-unregistered.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
; CHECK-LABEL: llvm.func @lifetime
44
define void @lifetime(ptr %0) {
5-
; CHECK: llvm.call_intrinsic "llvm.lifetime.start.p0"({{.*}}, %arg0) : (i64, !llvm.ptr {llvm.nonnull}) -> !llvm.void
5+
; CHECK: llvm.call_intrinsic "llvm.lifetime.start.p0"({{.*}}, %arg0) : (i64, !llvm.ptr {llvm.nonnull}) -> ()
66
call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %0)
7-
; CHECK: llvm.call_intrinsic "llvm.lifetime.end.p0"({{.*}}, %arg0) : (i64, !llvm.ptr {llvm.nonnull}) -> !llvm.void
7+
; CHECK: llvm.call_intrinsic "llvm.lifetime.end.p0"({{.*}}, %arg0) : (i64, !llvm.ptr {llvm.nonnull}) -> ()
88
call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %0)
99
ret void
1010
}

mlir/test/Target/LLVMIR/Import/intrinsic-unregistered.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ define dso_local void @t2(<8 x i8> %lhs, <8 x i8> %rhs, ptr %a) {
3737
}
3838

3939
; CHECK: llvm.func @t2(%[[A0:.*]]: vector<8xi8>, %[[A1:.*]]: vector<8xi8>, %[[A2:.*]]: !llvm.ptr) {{.*}} {
40-
; CHECK: llvm.call_intrinsic "llvm.aarch64.neon.st2.v8i8.p0"(%[[A0]], %[[A1]], %[[A2]]) : (vector<8xi8>, vector<8xi8>, !llvm.ptr) -> !llvm.void
40+
; CHECK: llvm.call_intrinsic "llvm.aarch64.neon.st2.v8i8.p0"(%[[A0]], %[[A1]], %[[A2]]) : (vector<8xi8>, vector<8xi8>, !llvm.ptr) -> ()
4141
; CHECK: llvm.return
4242
; CHECK: }
4343

@@ -51,7 +51,7 @@ define void @gctest() gc "example" {
5151
}
5252

5353
; CHECK-LABEL: @gctest
54-
; CHECK: llvm.call_intrinsic "llvm.gcroot"({{.*}}, {{.*}}) : (!llvm.ptr, !llvm.ptr) -> !llvm.void
54+
; CHECK: llvm.call_intrinsic "llvm.gcroot"({{.*}}, {{.*}}) : (!llvm.ptr, !llvm.ptr) -> ()
5555

5656
; // -----
5757

0 commit comments

Comments
 (0)