[Mlir-commits] [mlir] 0a1e569 - [mlir-c] Add getting fused loc
Jacques Pienaar
llvmlistbot at llvm.org
Sat Sep 18 06:58:15 PDT 2021
Author: Jacques Pienaar
Date: 2021-09-18T06:57:51-07:00
New Revision: 0a1e569d37e04c75632633d77c7d3f0fb5126b46
URL: https://github.com/llvm/llvm-project/commit/0a1e569d37e04c75632633d77c7d3f0fb5126b46
DIFF: https://github.com/llvm/llvm-project/commit/0a1e569d37e04c75632633d77c7d3f0fb5126b46.diff
LOG: [mlir-c] Add getting fused loc
For creating a fused loc using array of locations and metadata.
Differential Revision: https://reviews.llvm.org/D110022
Added:
Modified:
mlir/include/mlir-c/IR.h
mlir/lib/CAPI/IR/IR.cpp
mlir/test/CAPI/ir.c
Removed:
################################################################################
diff --git a/mlir/include/mlir-c/IR.h b/mlir/include/mlir-c/IR.h
index d875e3807bcc6..28a83cba0bbc0 100644
--- a/mlir/include/mlir-c/IR.h
+++ b/mlir/include/mlir-c/IR.h
@@ -162,6 +162,11 @@ MLIR_CAPI_EXPORTED MlirLocation mlirLocationFileLineColGet(
MLIR_CAPI_EXPORTED MlirLocation mlirLocationCallSiteGet(MlirLocation callee,
MlirLocation caller);
+/// Creates a fused location with an array of locations and metadata.
+MLIR_CAPI_EXPORTED MlirLocation
+mlirLocationFusedGet(MlirContext ctx, intptr_t nLocations,
+ MlirLocation const *locations, MlirAttribute metadata);
+
/// Creates a name location owned by the given context. Providing null location
/// for childLoc is allowed and if childLoc is null location, then the behavior
/// is the same as having unknown child location.
diff --git a/mlir/lib/CAPI/IR/IR.cpp b/mlir/lib/CAPI/IR/IR.cpp
index bbadc351d9779..eda176300dc30 100644
--- a/mlir/lib/CAPI/IR/IR.cpp
+++ b/mlir/lib/CAPI/IR/IR.cpp
@@ -132,6 +132,14 @@ MlirLocation mlirLocationCallSiteGet(MlirLocation callee, MlirLocation caller) {
return wrap(Location(CallSiteLoc::get(unwrap(callee), unwrap(caller))));
}
+MlirLocation mlirLocationFusedGet(MlirContext ctx, intptr_t nLocations,
+ MlirLocation const *locations,
+ MlirAttribute metadata) {
+ SmallVector<Location, 4> locs;
+ ArrayRef<Location> unwrappedLocs = unwrapList(nLocations, locations, locs);
+ return wrap(FusedLoc::get(unwrappedLocs, unwrap(metadata), unwrap(ctx)));
+}
+
MlirLocation mlirLocationNameGet(MlirContext context, MlirStringRef name,
MlirLocation childLoc) {
if (mlirLocationIsNull(childLoc))
diff --git a/mlir/test/CAPI/ir.c b/mlir/test/CAPI/ir.c
index d1bdb66f26722..ebb8b0f26e542 100644
--- a/mlir/test/CAPI/ir.c
+++ b/mlir/test/CAPI/ir.c
@@ -1708,6 +1708,10 @@ void testDiagnostics() {
MlirLocation nameLoc =
mlirLocationNameGet(ctx, mlirStringRefCreateFromCString("named"), null);
mlirEmitError(nameLoc, "test diagnostics");
+ MlirLocation locs[2] = {nameLoc, callSiteLoc};
+ MlirAttribute nullAttr = {0};
+ MlirLocation fusedLoc = mlirLocationFusedGet(ctx, 2, locs, nullAttr);
+ mlirEmitError(fusedLoc, "test diagnostics");
mlirContextDetachDiagnosticHandler(ctx, id);
mlirEmitError(unknownLoc, "more test diagnostics");
// CHECK-LABEL: @test_diagnostics
@@ -1727,6 +1731,9 @@ void testDiagnostics() {
// CHECK: test diagnostics
// CHECK: loc("named")
// CHECK: >> end of diagnostic (userData: 42)
+ // CHECK: processing diagnostic (userData: 42) <<
+ // CHECK: test diagnostics
+ // CHECK: loc(fused["named", callsite("other-file.c":2:3 at "file.c":1:2)])
// CHECK: deleting user data (userData: 42)
// CHECK-NOT: processing diagnostic
// CHECK: more test diagnostics
More information about the Mlir-commits
mailing list