Skip to content

Commit 3815582

Browse files
authored
[DT] Implement LayoutMaterializerAttr for identity resolver. (#22337)
The identity resolver is one of the basic encoding resolvers that drops encodings. The revision implements the interface and retires the IREE::Codegen::EncodingNopLayoutAttr. Fixes #20846 --------- Signed-off-by: hanhanW <[email protected]>
1 parent b9054d2 commit 3815582

File tree

12 files changed

+129
-137
lines changed

12 files changed

+129
-137
lines changed

compiler/src/iree/compiler/Codegen/Common/MaterializeEncoding.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@
77
#include "iree/compiler/Codegen/Common/EncodingUtils.h"
88
#include "iree/compiler/Codegen/Common/Transforms.h"
99
#include "iree/compiler/Codegen/Dialect/CPU/IR/IREECPUDialect.h"
10-
#include "iree/compiler/Codegen/Dialect/Codegen/IR/IREECodegenAttrs.h"
1110
#include "iree/compiler/Codegen/Dialect/Codegen/IR/IREECodegenDialect.h"
1211
#include "iree/compiler/Codegen/Dialect/GPU/IR/IREEGPUAttrs.h"
1312
#include "iree/compiler/Codegen/Dialect/GPU/IR/IREEGPUDialect.h"
1413
#include "iree/compiler/Codegen/Utils/GPUUtils.h"
15-
#include "iree/compiler/Codegen/Utils/Utils.h"
1614
#include "iree/compiler/Dialect/Encoding/IR/EncodingTypes.h"
1715
#include "iree/compiler/Dialect/HAL/Analysis/DeviceAnalysis.h"
1816
#include "iree/compiler/Dialect/HAL/IR/HALTypes.h"
@@ -98,10 +96,10 @@ materializeFuncOpEncodings(FunctionOpInterface funcOp,
9896
IREE::GPU::GPUEncodingResolverAttr::get(
9997
ctx, DictionaryAttr::get(ctx, configItems)));
10098
}
101-
LDBG() << "Select EncodingNopLayoutAttr attribute as the layout "
99+
LDBG() << "Select IdentityResolverAttr attribute as the layout "
102100
"attribute (Encoding resolver unknown or unsupported).";
103101
return cast<IREE::Encoding::LayoutMaterializerAttr>(
104-
IREE::Codegen::EncodingNopLayoutAttr::get(ctx));
102+
IREE::Encoding::IdentityResolverAttr::get(ctx));
105103
};
106104

107105
// The layoutAttr should come in without any target info attached to it,

compiler/src/iree/compiler/Codegen/Common/MaterializeEncodingIntoNop.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#include "iree/compiler/Codegen/Common/EncodingUtils.h"
88
#include "iree/compiler/Codegen/Common/PassUtils.h"
99
#include "iree/compiler/Codegen/Common/Passes.h"
10-
#include "iree/compiler/Codegen/Dialect/Codegen/IR/IREECodegenAttrs.h"
1110
#include "iree/compiler/Codegen/Dialect/Codegen/IR/IREECodegenDialect.h"
1211
#include "mlir/Dialect/MemRef/Transforms/Transforms.h"
1312
#include "mlir/Dialect/Tensor/IR/Tensor.h"
@@ -38,7 +37,7 @@ struct MaterializeEncodingIntoNopPass final
3837

3938
RewritePatternSet materializeEncodingPattern(context);
4039
auto layoutAttr = cast<IREE::Encoding::LayoutMaterializerAttr>(
41-
IREE::Codegen::EncodingNopLayoutAttr::get(context));
40+
IREE::Encoding::IdentityResolverAttr::get(context));
4241
MaterializeEncodingTypeConverter typeConverter(layoutAttr);
4342
MaterializeEncodingConversionTarget target(*context);
4443
populateMaterializeEncodingPatterns(materializeEncodingPattern, target,

compiler/src/iree/compiler/Codegen/Common/MaterializeEncodingIntoPadding.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include "iree/compiler/Codegen/Common/EncodingUtils.h"
99
#include "iree/compiler/Codegen/Common/PassUtils.h"
1010
#include "iree/compiler/Codegen/Common/Passes.h"
11-
#include "iree/compiler/Codegen/Dialect/Codegen/IR/IREECodegenAttrs.h"
1211
#include "iree/compiler/Codegen/Dialect/Codegen/IR/IREECodegenDialect.h"
1312
#include "iree/compiler/Codegen/Dialect/GPU/IR/IREEGPUAttrs.h"
1413
#include "iree/compiler/Codegen/Dialect/GPU/TargetUtils/KnownTargets.h"
@@ -191,7 +190,7 @@ struct MaterializeEncodingIntoPaddingPass final
191190
resolverAttr.cloneWithSimplifiedConfig(targetConfig));
192191
} else {
193192
layoutAttr = cast<IREE::Encoding::LayoutMaterializerAttr>(
194-
IREE::Codegen::EncodingNopLayoutAttr::get(context));
193+
IREE::Encoding::IdentityResolverAttr::get(context));
195194
}
196195

197196
RewritePatternSet materializeEncodingPattern(context);

compiler/src/iree/compiler/Codegen/Common/test/materialize_encoding_for_iree_ops.mlir

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,78 @@
11
// RUN: iree-opt --pass-pipeline="builtin.module(func.func(iree-codegen-materialize-device-encoding))" --split-input-file %s | FileCheck %s
22

3+
//----------------------------------------------------------------------------//
4+
// Test suite using generic encoding resolvers, that are defined in Encoding
5+
// dialect.
6+
//----------------------------------------------------------------------------//
7+
8+
#pipeline_layout = #hal.pipeline.layout<constants = 3, bindings = [
9+
#hal.pipeline.binding<storage_buffer>,
10+
#hal.pipeline.binding<storage_buffer>,
11+
#hal.pipeline.binding<storage_buffer>
12+
]>
13+
#map = affine_map<(d0, d1, d2) -> (d0, d2)>
14+
#map1 = affine_map<(d0, d1, d2) -> (d2, d1)>
15+
#map2 = affine_map<(d0, d1, d2) -> (d0, d1)>
16+
#encoding_lhs = #iree_encoding.encoding<operand_index = 0, op_type = matmul, element_types = [f32, f32, f32], user_indexing_maps = [#map, #map1, #map2], iteration_sizes = [?, ?, ?]>
17+
#encoding_rhs = #iree_encoding.encoding<operand_index = 1, op_type = matmul, element_types = [f32, f32, f32], user_indexing_maps = [#map, #map1, #map2], iteration_sizes = [?, ?, ?]>
18+
#encoding_result = #iree_encoding.encoding<operand_index = 2, op_type = matmul, element_types = [f32, f32, f32], user_indexing_maps = [#map, #map1, #map2], iteration_sizes = [?, ?, ?]>
19+
func.func @matmul_lowering_f32f32f32_identity_resolver() attributes {
20+
hal.executable.target = #hal.executable.target<"llvm-cpu", "whatever", {iree.encoding.resolver = #iree_encoding.identity_resolver<>}>
21+
} {
22+
%c0 = arith.constant 0 : index
23+
%M = hal.interface.constant.load layout(#pipeline_layout) ordinal(0) : index
24+
%N = hal.interface.constant.load layout(#pipeline_layout) ordinal(1) : index
25+
%K = hal.interface.constant.load layout(#pipeline_layout) ordinal(2) : index
26+
%0 = hal.interface.binding.subspan layout(#pipeline_layout) binding(0) alignment(64) offset(%c0)
27+
: !iree_tensor_ext.dispatch.tensor<readonly:tensor<?x?xf32, #encoding_lhs>>{%M, %K}
28+
%1 = hal.interface.binding.subspan layout(#pipeline_layout) binding(1) alignment(64) offset(%c0)
29+
: !iree_tensor_ext.dispatch.tensor<readonly:tensor<?x?xf32, #encoding_rhs>>{%K, %N}
30+
%2 = hal.interface.binding.subspan layout(#pipeline_layout) binding(2) alignment(64) offset(%c0)
31+
: !iree_tensor_ext.dispatch.tensor<readwrite:tensor<?x?xf32, #encoding_result>>{%M, %N}
32+
%3 = iree_tensor_ext.dispatch.tensor.load %0, offsets = [0, 0], sizes = [%M, %K], strides = [1, 1]
33+
: !iree_tensor_ext.dispatch.tensor<readonly:tensor<?x?xf32, #encoding_lhs>>{%M, %K}
34+
-> tensor<?x?xf32, #encoding_lhs>
35+
%4 = iree_tensor_ext.dispatch.tensor.load %1, offsets = [0, 0], sizes = [%K, %N], strides = [1, 1]
36+
: !iree_tensor_ext.dispatch.tensor<readonly:tensor<?x?xf32, #encoding_rhs>>{%K, %N}
37+
-> tensor<?x?xf32, #encoding_rhs>
38+
%5 = iree_tensor_ext.dispatch.tensor.load %2, offsets = [0, 0], sizes = [%M, %N], strides = [1, 1]
39+
: !iree_tensor_ext.dispatch.tensor<readwrite:tensor<?x?xf32, #encoding_result>>{%M, %N}
40+
-> tensor<?x?xf32, #encoding_result>
41+
%6 = linalg.matmul
42+
ins(%3, %4 : tensor<?x?xf32, #encoding_lhs>,
43+
tensor<?x?xf32, #encoding_rhs>)
44+
outs(%5 : tensor<?x?xf32, #encoding_result>)
45+
-> tensor<?x?xf32, #encoding_result>
46+
iree_tensor_ext.dispatch.tensor.store %6, %2, offsets = [0, 0], sizes = [%M, %N], strides = [1, 1]
47+
: tensor<?x?xf32, #encoding_result>
48+
-> !iree_tensor_ext.dispatch.tensor<readwrite:tensor<?x?xf32, #encoding_result>>{%M, %N}
49+
return
50+
}
51+
// CHECK-LABEL: func @matmul_lowering_f32f32f32_identity_resolver()
52+
// CHECK-DAG: %[[C0:.+]] = arith.constant 0 : index
53+
// CHECK-DAG: %[[M:.+]] = hal.interface.constant.load layout(#pipeline_layout) ordinal(0)
54+
// CHECK-DAG: %[[N:.+]] = hal.interface.constant.load layout(#pipeline_layout) ordinal(1)
55+
// CHECK-DAG: %[[K:.+]] = hal.interface.constant.load layout(#pipeline_layout) ordinal(2)
56+
// CHECK: %[[LHS_BINDING:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(0)
57+
// CHECK-SAME: !iree_tensor_ext.dispatch.tensor<readonly:tensor<?x?xf32>>{%[[M]], %[[K]]}
58+
// CHECK: %[[RHS_BINDING:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(1)
59+
// CHECK-SAME: !iree_tensor_ext.dispatch.tensor<readonly:tensor<?x?xf32>>{%[[K]], %[[N]]}
60+
// CHECK: %[[OUTS_BINDING:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(2)
61+
// CHECK-SAME: !iree_tensor_ext.dispatch.tensor<readwrite:tensor<?x?xf32>>{%[[M]], %[[N]]}
62+
// CHECK: %[[LHS:.+]] = iree_tensor_ext.dispatch.tensor.load %[[LHS_BINDING]]
63+
// CHECK-SAME: offsets = [0, 0], sizes = [%[[M]], %[[K]]], strides = [1, 1]
64+
// CHECK: %[[RHS:.+]] = iree_tensor_ext.dispatch.tensor.load %[[RHS_BINDING]]
65+
// CHECK-SAME: offsets = [0, 0], sizes = [%[[K]], %[[N]]], strides = [1, 1]
66+
// CHECK: %[[OUTS:.+]] = iree_tensor_ext.dispatch.tensor.load %[[OUTS_BINDING]]
67+
// CHECK-SAME: offsets = [0, 0], sizes = [%[[M]], %[[N]]], strides = [1, 1]
68+
// CHECK: %[[RES:.+]] = linalg.matmul
69+
// CHECK-SAME: ins(%[[LHS]], %[[RHS]] :
70+
// CHECK-SAME: outs(%[[OUTS]] :
71+
// CHECK: iree_tensor_ext.dispatch.tensor.store %[[RES]], %[[OUTS_BINDING]]
72+
// CHECK-SAME: offsets = [0, 0], sizes = [%[[M]], %[[N]]], strides = [1, 1]
73+
74+
// -----
75+
376
//----------------------------------------------------------------------------//
477
// Test suite using CPU encoding resolvers.
578
//----------------------------------------------------------------------------//

compiler/src/iree/compiler/Codegen/Dialect/Codegen/IR/IREECodegenAttrs.td

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -424,21 +424,6 @@ def IREECodegen_ExportConfig : AttrDef<IREECodegen_Dialect, "ExportConfig", []>
424424
let genVerifyDecl = 1;
425425
}
426426

427-
//===---------------------------------------------------------------------===//
428-
// iree_codegen.encoding_nop_layout
429-
//===---------------------------------------------------------------------===//
430-
431-
def IREECodegen_EncodingNopLayoutAttr :
432-
AttrDef<IREECodegen_Dialect, "EncodingNopLayout"> {
433-
let mnemonic = "encoding_nop_layout";
434-
let summary = [{An attribute with implementation that treats encoding as nop.}];
435-
let description = [{
436-
An attribute that implements the interface methods that discards the
437-
encodings. It can be a default attribute when a backend does not implement
438-
encoding details.
439-
}];
440-
}
441-
442427
//===---------------------------------------------------------------------===//
443428
// iree_codegen.rotate_rows
444429
//===---------------------------------------------------------------------===//

compiler/src/iree/compiler/Codegen/ExternalInterfaces/BUILD.bazel

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@ iree_compiler_cc_library(
1616
name = "ExternalModels",
1717
srcs = [
1818
"CPUEncodingExternalModels.cpp",
19-
"CodegenExternalModels.cpp",
2019
"GPUEncodingExternalModels.cpp",
2120
"Interfaces.cpp",
2221
"Utils.cpp",
2322
],
2423
hdrs = [
2524
"CPUEncodingExternalModels.h",
26-
"CodegenExternalModels.h",
2725
"GPUEncodingExternalModels.h",
2826
"Interfaces.h",
2927
"Utils.h",

compiler/src/iree/compiler/Codegen/ExternalInterfaces/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,11 @@ iree_cc_library(
1515
ExternalModels
1616
HDRS
1717
"CPUEncodingExternalModels.h"
18-
"CodegenExternalModels.h"
1918
"GPUEncodingExternalModels.h"
2019
"Interfaces.h"
2120
"Utils.h"
2221
SRCS
2322
"CPUEncodingExternalModels.cpp"
24-
"CodegenExternalModels.cpp"
2523
"GPUEncodingExternalModels.cpp"
2624
"Interfaces.cpp"
2725
"Utils.cpp"

compiler/src/iree/compiler/Codegen/ExternalInterfaces/CodegenExternalModels.cpp

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

compiler/src/iree/compiler/Codegen/ExternalInterfaces/CodegenExternalModels.h

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

compiler/src/iree/compiler/Codegen/ExternalInterfaces/Interfaces.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@
77
#include "iree/compiler/Codegen/ExternalInterfaces/Interfaces.h"
88

99
#include "iree/compiler/Codegen/ExternalInterfaces/CPUEncodingExternalModels.h"
10-
#include "iree/compiler/Codegen/ExternalInterfaces/CodegenExternalModels.h"
1110
#include "iree/compiler/Codegen/ExternalInterfaces/GPUEncodingExternalModels.h"
1211

1312
namespace mlir::iree_compiler {
1413

1514
void registerCodegenExternalInterfaces(DialectRegistry &registry) {
16-
IREE::Codegen::registerCodegenExternalModels(registry);
1715
IREE::CPU::registerCPUEncodingExternalModels(registry);
1816
IREE::GPU::registerGPUEncodingExternalModels(registry);
1917
}

0 commit comments

Comments
 (0)