Skip to content

Commit 2761d4c

Browse files
Revert "[MLIR][LLVMIR] Import unregistered intrinsics via llvm.intrinsic_call" (#128973)
Reverts #128626 Looks like the static definition broke some bots! Co-authored-by: Bruno Cardoso Lopes <bcardosolopes@users.noreply.github.com>
1 parent d708bfb commit 2761d4c

File tree

4 files changed

+14
-123
lines changed

4 files changed

+14
-123
lines changed

mlir/include/mlir/Target/LLVMIR/LLVMImportInterface.h

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -155,18 +155,9 @@ class LLVMImportInterface
155155
LogicalResult convertIntrinsic(OpBuilder &builder, llvm::CallInst *inst,
156156
LLVM::ModuleImport &moduleImport) const {
157157
// Lookup the dialect interface for the given intrinsic.
158-
// Verify the intrinsic identifier maps to an actual intrinsic.
159-
llvm::Intrinsic::ID intrinId = inst->getIntrinsicID();
160-
assert(intrinId != llvm::Intrinsic::not_intrinsic);
161-
162-
// First lookup the intrinsic across different dialects for known
163-
// supported conversions, examples include arm-neon, nvm-sve, etc.
164-
Dialect *dialect = intrinsicToDialect.lookup(intrinId);
165-
166-
// No specialized (supported) intrinsics, attempt to generate a generic
167-
// version via llvm.call_intrinsic (if available).
158+
Dialect *dialect = intrinsicToDialect.lookup(inst->getIntrinsicID());
168159
if (!dialect)
169-
return convertUnregisteredIntrinsic(builder, inst, moduleImport);
160+
return failure();
170161

171162
// Dispatch the conversion to the dialect interface.
172163
const LLVMImportDialectInterface *iface = getInterfaceFor(dialect);
@@ -233,11 +224,6 @@ class LLVMImportInterface
233224
}
234225

235226
private:
236-
/// Generate llvm.call_intrinsic when no supporting dialect available.
237-
static LogicalResult
238-
convertUnregisteredIntrinsic(OpBuilder &builder, llvm::CallInst *inst,
239-
LLVM::ModuleImport &moduleImport);
240-
241227
DenseMap<unsigned, Dialect *> intrinsicToDialect;
242228
DenseMap<unsigned, const LLVMImportDialectInterface *> instructionToDialect;
243229
DenseMap<unsigned, SmallVector<Dialect *, 1>> metadataToDialect;

mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -367,45 +367,6 @@ static LogicalResult setIntelReqdSubGroupSizeAttr(Builder &builder,
367367
return success();
368368
}
369369

370-
LogicalResult mlir::LLVMImportInterface::convertUnregisteredIntrinsic(
371-
OpBuilder &builder, llvm::CallInst *inst,
372-
LLVM::ModuleImport &moduleImport) {
373-
StringRef intrinName = inst->getCalledFunction()->getName();
374-
375-
SmallVector<llvm::Value *> args(inst->args());
376-
ArrayRef<llvm::Value *> llvmOperands(args);
377-
378-
SmallVector<llvm::OperandBundleUse> llvmOpBundles;
379-
llvmOpBundles.reserve(inst->getNumOperandBundles());
380-
for (unsigned i = 0; i < inst->getNumOperandBundles(); ++i)
381-
llvmOpBundles.push_back(inst->getOperandBundleAt(i));
382-
383-
SmallVector<Value> mlirOperands;
384-
SmallVector<NamedAttribute> mlirAttrs;
385-
if (failed(moduleImport.convertIntrinsicArguments(
386-
llvmOperands, llvmOpBundles, false, {}, {}, mlirOperands, mlirAttrs)))
387-
return failure();
388-
389-
Type results = moduleImport.convertType(inst->getType());
390-
auto op = builder.create<::mlir::LLVM::CallIntrinsicOp>(
391-
moduleImport.translateLoc(inst->getDebugLoc()), results,
392-
StringAttr::get(builder.getContext(), intrinName),
393-
ValueRange{mlirOperands}, FastmathFlagsAttr{});
394-
395-
moduleImport.setFastmathFlagsAttr(inst, op);
396-
397-
// Update importer tracking of results.
398-
unsigned numRes = op.getNumResults();
399-
if (numRes == 1)
400-
moduleImport.mapValue(inst) = op.getResult(0);
401-
else if (numRes == 0)
402-
moduleImport.mapNoResultOp(inst);
403-
else
404-
return op.emitError(
405-
"expected at most one result from target intrinsic call");
406-
407-
return success();
408-
}
409370
namespace {
410371

411372
/// Implementation of the dialect interface that converts operations belonging

mlir/test/Target/LLVMIR/Import/import-failure.ll

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,18 @@ bb1:
3838

3939
; // -----
4040

41+
declare void @llvm.gcroot(ptr %arg1, ptr %arg2)
42+
43+
; CHECK: <unknown>
44+
; CHECK-SAME: error: unhandled intrinsic: call void @llvm.gcroot(ptr %arg1, ptr null)
45+
define void @unhandled_intrinsic() gc "example" {
46+
%arg1 = alloca ptr
47+
call void @llvm.gcroot(ptr %arg1, ptr null)
48+
ret void
49+
}
50+
51+
; // -----
52+
4153
; Check that debug intrinsics with an unsupported argument are dropped.
4254

4355
declare void @llvm.dbg.value(metadata, metadata, metadata)

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

Lines changed: 0 additions & 68 deletions
This file was deleted.

0 commit comments

Comments
 (0)