Integrate LLVM at llvm/llvm-project@bcbdeafa9c
Updates LLVM usage to match [bcbdeafa9cb3](https://github.com/llvm/llvm-project/commit/bcbdeafa9cb3) PiperOrigin-RevId: 350763293 Change-Id: Ib2e8a2d7fa3d296e2e1912987afa0eceeb9fa09e
This commit is contained in:
parent
16696c7587
commit
cccd2f2d7e
tensorflow
compiler
mlir
hlo/include/mlir-hlo/Dialect/mhlo/IR
lite/ir
tools/kernel_gen
xla/service/gpu/ir
third_party/mlir
@ -26,7 +26,7 @@ def DotDimensionNumbers : StructAttr<"DotDimensionNumbers", HLO_Dialect, [
|
||||
StructFieldAttr<"lhs_contracting_dimensions", I64ElementsAttr>,
|
||||
StructFieldAttr<"rhs_contracting_dimensions", I64ElementsAttr>
|
||||
]> {
|
||||
let description = "Structure of dimension information for dot product";
|
||||
let summary = "Structure of dimension information for dot product";
|
||||
}
|
||||
|
||||
def ScatterDimensionNumbers : StructAttr<
|
||||
@ -35,7 +35,7 @@ def ScatterDimensionNumbers : StructAttr<
|
||||
StructFieldAttr<"inserted_window_dims", I64ElementsAttr>,
|
||||
StructFieldAttr<"scatter_dims_to_operand_dims", I64ElementsAttr>,
|
||||
StructFieldAttr<"index_vector_dim", I64Attr>]> {
|
||||
let description = "Structure of dimension information for scatter";
|
||||
let summary = "Structure of dimension information for scatter";
|
||||
}
|
||||
|
||||
def ConvDimensionNumbers : StructAttr<"ConvDimensionNumbers", HLO_Dialect, [
|
||||
@ -49,7 +49,7 @@ def ConvDimensionNumbers : StructAttr<"ConvDimensionNumbers", HLO_Dialect, [
|
||||
StructFieldAttr<"output_feature_dimension", I64Attr>,
|
||||
StructFieldAttr<"output_spatial_dimensions", I64ElementsAttr>] > {
|
||||
|
||||
let description = "Structure of dimension information for conv op";
|
||||
let summary = "Structure of dimension information for conv op";
|
||||
}
|
||||
|
||||
def GatherDimensionNumbers : StructAttr<"GatherDimensionNumbers", HLO_Dialect,
|
||||
@ -57,7 +57,7 @@ def GatherDimensionNumbers : StructAttr<"GatherDimensionNumbers", HLO_Dialect,
|
||||
StructFieldAttr<"collapsed_slice_dims", I64ElementsAttr>,
|
||||
StructFieldAttr<"start_index_map", I64ElementsAttr>,
|
||||
StructFieldAttr<"index_vector_dim", I64Attr>]> {
|
||||
let description = "Structure of dimension information for gather";
|
||||
let summary = "Structure of dimension information for gather";
|
||||
}
|
||||
|
||||
|
||||
@ -67,7 +67,7 @@ def GatherDimensionNumbers : StructAttr<"GatherDimensionNumbers", HLO_Dialect,
|
||||
def ChannelHandle : StructAttr<"ChannelHandle", HLO_Dialect, [
|
||||
StructFieldAttr<"handle", I64Attr>,
|
||||
StructFieldAttr<"type", I64Attr>]> {
|
||||
let description = "two 64-bit integers 'handle' and 'type'";
|
||||
let summary = "two 64-bit integers 'handle' and 'type'";
|
||||
}
|
||||
|
||||
#endif // HLO_OPS_BASE_STRUCTS
|
||||
|
@ -32,7 +32,7 @@ def ConvolutionBackendConfigAttr : StructAttr<"ConvolutionBackendConfig",
|
||||
StructFieldAttr<"operand_0_layout", I64ArrayAttr>,
|
||||
StructFieldAttr<"operand_1_layout", I64ArrayAttr>,
|
||||
StructFieldAttr<"result_layout", I64ArrayAttr>]> {
|
||||
let description = "GPU Convolution backend configuration";
|
||||
let summary = "GPU Convolution backend configuration";
|
||||
}
|
||||
|
||||
#endif // LHLO_GPU_OPS_STRUCTS
|
||||
|
@ -143,7 +143,7 @@ class TFL_OperandsHaveSameShapesOrBroadcastableShape<
|
||||
// TFL Runtime type predicate.
|
||||
class TFL_RuntimeType<TypeConstraint t> {
|
||||
Pred tflRuntimeTypePredicate = t.predicate;
|
||||
string tflRuntimeTypeDescription = t.description;
|
||||
string tflRuntimeTypeDescription = t.summary;
|
||||
}
|
||||
|
||||
class TFL_AnyTypeOf<list<Type> allowedRuntimeTypes, string description = "",
|
||||
@ -806,7 +806,7 @@ def DimensionMetadataAttr : StructAttr<"DimensionMetadataAttr", TFL_Dialect, [
|
||||
StructFieldAttr<"dense_size", I32Attr>,
|
||||
StructFieldAttr<"segments", I32ArrayAttr>,
|
||||
StructFieldAttr<"indices", I32ArrayAttr>] > {
|
||||
let description = "Dimension metadata.";
|
||||
let summary = "Dimension metadata.";
|
||||
}
|
||||
|
||||
def DimensionMetadataArrayAttr : TypedArrayAttrBase<DimensionMetadataAttr,
|
||||
@ -816,7 +816,7 @@ def SparsityParameterAttr : StructAttr<"SparsityParameterAttr", TFL_Dialect, [
|
||||
StructFieldAttr<"traversal_order", I32ArrayAttr>,
|
||||
StructFieldAttr<"block_map", I32ArrayAttr>,
|
||||
StructFieldAttr<"dim_metadata", DimensionMetadataArrayAttr>]> {
|
||||
let description = "Sparsity parameter.";
|
||||
let summary = "Sparsity parameter.";
|
||||
let storageType = [{ TFL::SparsityParameterAttr }];
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@ def TFFramework_OpKernelContextType : DialectType<TFFramework_Dialect,
|
||||
CPred<"$_self.isa<::mlir::kernel_gen::tf_framework::OpKernelContextType>()">,
|
||||
"op_kernel_construction">,
|
||||
BuildableType<"$_builder.getType<::mlir::kernel_gen::tf_framework::OpKernelContextType>()"> {
|
||||
let typeDescription = [{
|
||||
let description = [{
|
||||
OpKernelContextType corresponds to C++ class OpKernelContext defined in
|
||||
tensorflow/core/framework/op_kernel.h
|
||||
}];
|
||||
|
@ -26,10 +26,10 @@ module attributes {gpu.container_module} {
|
||||
gpu.module @abs_kernel {
|
||||
// CHECK-LABEL: llvm.func @abs_kernel
|
||||
// ABI-SAME: %[[ARG0:.*]]: !llvm.ptr<float>, %[[ARG1:.*]]: !llvm.ptr<float> {llvm.align = 16 : index},
|
||||
// ABI-SAME: %[[ARG2:.*]]: !llvm.i64, %[[ARG3:.*]]: !llvm.i64, %[[ARG4:.*]]: !llvm.i64, %[[ARG5:.*]]: !llvm.ptr<float>, %[[ARG6:.*]]: !llvm.ptr<float> {llvm.align = 16 : index, llvm.noalias = true},
|
||||
// ABI-SAME: %[[ARG7:.*]]: !llvm.i64, %[[ARG8:.*]]: !llvm.i64, %[[ARG9:.*]]: !llvm.i64
|
||||
// SHAPE-SAME: %[[ARG0:.*]]: !llvm.ptr<float>, %[[ARG1:.*]]: !llvm.ptr<float>, %[[ARG2:.*]]: !llvm.i64, %[[ARG3:.*]]: !llvm.i64, %[[ARG4:.*]]: !llvm.i64, %[[ARG5:.*]]: !llvm.ptr<float>, %[[ARG6:.*]]: !llvm.ptr<float>, %[[ARG7:.*]]: !llvm.i64, %[[ARG8:.*]]: !llvm.i64, %[[ARG9:.*]]: !llvm.i64
|
||||
llvm.func @abs_kernel(%arg0: !llvm.ptr<float>, %arg1: !llvm.ptr<float>, %arg2: !llvm.i64, %arg3: !llvm.i64, %arg4: !llvm.i64, %arg5: !llvm.ptr<float>, %arg6: !llvm.ptr<float>, %arg7: !llvm.i64, %arg8: !llvm.i64, %arg9: !llvm.i64) attributes {gpu.kernel} {
|
||||
// ABI-SAME: %[[ARG2:.*]]: i64, %[[ARG3:.*]]: i64, %[[ARG4:.*]]: i64, %[[ARG5:.*]]: !llvm.ptr<float>, %[[ARG6:.*]]: !llvm.ptr<float> {llvm.align = 16 : index, llvm.noalias = true},
|
||||
// ABI-SAME: %[[ARG7:.*]]: i64, %[[ARG8:.*]]: i64, %[[ARG9:.*]]: i64
|
||||
// SHAPE-SAME: %[[ARG0:.*]]: !llvm.ptr<float>, %[[ARG1:.*]]: !llvm.ptr<float>, %[[ARG2:.*]]: i64, %[[ARG3:.*]]: i64, %[[ARG4:.*]]: i64, %[[ARG5:.*]]: !llvm.ptr<float>, %[[ARG6:.*]]: !llvm.ptr<float>, %[[ARG7:.*]]: i64, %[[ARG8:.*]]: i64, %[[ARG9:.*]]: i64
|
||||
llvm.func @abs_kernel(%arg0: !llvm.ptr<float>, %arg1: !llvm.ptr<float>, %arg2: i64, %arg3: i64, %arg4: i64, %arg5: !llvm.ptr<float>, %arg6: !llvm.ptr<float>, %arg7: i64, %arg8: i64, %arg9: i64) attributes {gpu.kernel} {
|
||||
// ABI: %[[ZERO:.*]] = llvm.mlir.constant(0 : index)
|
||||
// ABI: %[[ONE:.*]] = llvm.mlir.constant(1 : index)
|
||||
// CHECK: llvm.mlir.undef
|
||||
@ -93,9 +93,9 @@ module attributes {gpu.container_module} {
|
||||
// ABI-SAME: {llvm.align = 16 : index}
|
||||
// ABI-SAME: {llvm.align = 16 : index}
|
||||
// ABI-SAME: {llvm.align = 16 : index, llvm.noalias = true}
|
||||
llvm.func @AddV2_kernel(%arg0: !llvm.i64, %arg1: !llvm.ptr<float>, %arg2: !llvm.ptr<float>, %arg3: !llvm.i64, %arg4: !llvm.i64, %arg5: !llvm.i64, %arg6: !llvm.ptr<float>, %arg7: !llvm.ptr<float>, %arg8: !llvm.i64, %arg9: !llvm.i64, %arg10: !llvm.i64, %arg11: !llvm.ptr<float>, %arg12: !llvm.ptr<float>, %arg13: !llvm.i64, %arg14: !llvm.i64, %arg15: !llvm.i64) attributes {gpu.kernel} {
|
||||
// ABI: %[[C0:.*]] = llvm.mlir.constant(0 : index) : !llvm.i64
|
||||
// ABI: %[[C1:.*]] = llvm.mlir.constant(1 : index) : !llvm.i64
|
||||
llvm.func @AddV2_kernel(%arg0: i64, %arg1: !llvm.ptr<float>, %arg2: !llvm.ptr<float>, %arg3: i64, %arg4: i64, %arg5: i64, %arg6: !llvm.ptr<float>, %arg7: !llvm.ptr<float>, %arg8: i64, %arg9: i64, %arg10: i64, %arg11: !llvm.ptr<float>, %arg12: !llvm.ptr<float>, %arg13: i64, %arg14: i64, %arg15: i64) attributes {gpu.kernel} {
|
||||
// ABI: %[[C0:.*]] = llvm.mlir.constant(0 : index) : i64
|
||||
// ABI: %[[C1:.*]] = llvm.mlir.constant(1 : index) : i64
|
||||
%0 = llvm.mlir.undef : !llvm.struct<(ptr<float>, ptr<float>, i64, array<1 x i64>, array<1 x i64>)>
|
||||
%1 = llvm.insertvalue %arg1, %0[0] : !llvm.struct<(ptr<float>, ptr<float>, i64, array<1 x i64>, array<1 x i64>)>
|
||||
%2 = llvm.insertvalue %arg2, %1[1] : !llvm.struct<(ptr<float>, ptr<float>, i64, array<1 x i64>, array<1 x i64>)>
|
||||
@ -181,9 +181,9 @@ module attributes {gpu.container_module} {
|
||||
// ABI-SAME: {llvm.align = 16 : index, llvm.noalias = true}
|
||||
// ABI-SAME: {llvm.align = 16 : index}
|
||||
// ABI-SAME: {llvm.align = 16 : index}
|
||||
llvm.func @AddV2_kernel(%arg0: !llvm.i64, %arg1: !llvm.i64, %arg2: !llvm.ptr<float>, %arg3: !llvm.ptr<float> {llvm.align = 16 : index, llvm.noalias = true}, %arg4: !llvm.i64, %arg5: !llvm.i64, %arg6: !llvm.i64, %arg7: !llvm.i64, %arg8: !llvm.i64, %arg9: !llvm.ptr<float>, %arg10: !llvm.ptr<float> {llvm.align = 16 : index}, %arg11: !llvm.i64, %arg12: !llvm.i64, %arg13: !llvm.i64, %arg14: !llvm.i64, %arg15: !llvm.i64, %arg16: !llvm.ptr<float>, %arg17: !llvm.ptr<float> {llvm.align = 16 : index}, %arg18: !llvm.i64, %arg19: !llvm.i64, %arg20: !llvm.i64, %arg21: !llvm.i64, %arg22: !llvm.i64) attributes {gpu.kernel} {
|
||||
// ABI: %[[C0:.*]] = llvm.mlir.constant(0 : index) : !llvm.i64
|
||||
// ABI: %[[C1:.*]] = llvm.mlir.constant(1 : index) : !llvm.i64
|
||||
llvm.func @AddV2_kernel(%arg0: i64, %arg1: i64, %arg2: !llvm.ptr<float>, %arg3: !llvm.ptr<float> {llvm.align = 16 : index, llvm.noalias = true}, %arg4: i64, %arg5: i64, %arg6: i64, %arg7: i64, %arg8: i64, %arg9: !llvm.ptr<float>, %arg10: !llvm.ptr<float> {llvm.align = 16 : index}, %arg11: i64, %arg12: i64, %arg13: i64, %arg14: i64, %arg15: i64, %arg16: !llvm.ptr<float>, %arg17: !llvm.ptr<float> {llvm.align = 16 : index}, %arg18: i64, %arg19: i64, %arg20: i64, %arg21: i64, %arg22: i64) attributes {gpu.kernel} {
|
||||
// ABI: %[[C0:.*]] = llvm.mlir.constant(0 : index) : i64
|
||||
// ABI: %[[C1:.*]] = llvm.mlir.constant(1 : index) : i64
|
||||
%0 = llvm.mlir.undef : !llvm.struct<(ptr<float>, ptr<float>, i64, array<2 x i64>, array<2 x i64>)>
|
||||
%1 = llvm.insertvalue %arg2, %0[0] : !llvm.struct<(ptr<float>, ptr<float>, i64, array<2 x i64>, array<2 x i64>)>
|
||||
%2 = llvm.insertvalue %arg3, %1[1] : !llvm.struct<(ptr<float>, ptr<float>, i64, array<2 x i64>, array<2 x i64>)>
|
||||
@ -289,9 +289,9 @@ module attributes {gpu.container_module} {
|
||||
// ABI-SAME: {llvm.align = 16 : index, llvm.noalias = true}
|
||||
// ABI-SAME: {llvm.align = 16 : index}
|
||||
// ABI-SAME: {llvm.align = 16 : index}
|
||||
llvm.func @AddV2_kernel(%arg0: !llvm.i64, %arg1: !llvm.ptr<float>, %arg2: !llvm.ptr<float>, %arg3: !llvm.i64, %arg4: !llvm.i64, %arg5: !llvm.i64, %arg6: !llvm.ptr<float>, %arg7: !llvm.ptr<float>, %arg8: !llvm.i64, %arg9: !llvm.i64, %arg10: !llvm.i64, %arg11: !llvm.ptr<float>, %arg12: !llvm.ptr<float>, %arg13: !llvm.i64, %arg14: !llvm.i64, %arg15: !llvm.i64) attributes {gpu.kernel} {
|
||||
// ABI: %[[C0:.*]] = llvm.mlir.constant(0 : index) : !llvm.i64
|
||||
// ABI: %[[C1:.*]] = llvm.mlir.constant(1 : index) : !llvm.i64
|
||||
llvm.func @AddV2_kernel(%arg0: i64, %arg1: !llvm.ptr<float>, %arg2: !llvm.ptr<float>, %arg3: i64, %arg4: i64, %arg5: i64, %arg6: !llvm.ptr<float>, %arg7: !llvm.ptr<float>, %arg8: i64, %arg9: i64, %arg10: i64, %arg11: !llvm.ptr<float>, %arg12: !llvm.ptr<float>, %arg13: i64, %arg14: i64, %arg15: i64) attributes {gpu.kernel} {
|
||||
// ABI: %[[C0:.*]] = llvm.mlir.constant(0 : index) : i64
|
||||
// ABI: %[[C1:.*]] = llvm.mlir.constant(1 : index) : i64
|
||||
%0 = llvm.mlir.undef : !llvm.struct<(ptr<float>, ptr<float>, i64, array<1 x i64>, array<1 x i64>)>
|
||||
%1 = llvm.insertvalue %arg1, %0[0] : !llvm.struct<(ptr<float>, ptr<float>, i64, array<1 x i64>, array<1 x i64>)>
|
||||
%2 = llvm.insertvalue %arg2, %1[1] : !llvm.struct<(ptr<float>, ptr<float>, i64, array<1 x i64>, array<1 x i64>)>
|
||||
|
@ -1,33 +1,33 @@
|
||||
// RUN: kernel-gen-opt %s -tf-kernel-to-llvm -split-input-file | FileCheck %s
|
||||
|
||||
// CHECK: llvm.func @_mlir_ciface_tf_alloc
|
||||
// CHECK-SAME: (!llvm.ptr<i8>, !llvm.i64, !llvm.i64, !llvm.i32, !llvm.i32, !llvm.ptr<i32>) -> !llvm.ptr<i8>
|
||||
// CHECK-SAME: (!llvm.ptr<i8>, i64, i64, i32, i32, !llvm.ptr<i32>) -> !llvm.ptr<i8>
|
||||
|
||||
// CHECK-LABEL: llvm.func @alloc(
|
||||
// CHECK-SAME: [[TF_CTX:%.*]]: !llvm.ptr<i8>,
|
||||
// CHECK-SAME: [[SIZE_0:%.*]]: !llvm.i64,
|
||||
// CHECK-SAME: [[SIZE_2:%.*]]: !llvm.i64) -> [[DESC_TY:!.*]] {
|
||||
// CHECK-SAME: [[SIZE_0:%.*]]: i64,
|
||||
// CHECK-SAME: [[SIZE_2:%.*]]: i64) -> [[DESC_TY:!.*]] {
|
||||
func @alloc(%ctx: !tf_framework.op_kernel_context,
|
||||
%size_0 : index , %size_2 : index) -> memref<?x10x?xf32> {
|
||||
%buf = tf_framework.alloc(%ctx, %size_0, %size_2) : memref<?x10x?xf32>
|
||||
std.return %buf : memref<?x10x?xf32>
|
||||
}
|
||||
// Compute number of elements.
|
||||
// CHECK: [[SIZE_1:%.*]] = llvm.mlir.constant(10 : index) : !llvm.i64
|
||||
// CHECK: [[NUM_ELEM_0:%.*]] = llvm.mul [[SIZE_0]], [[SIZE_1]] : !llvm.i64
|
||||
// CHECK: [[NUM_ELEMS:%.*]] = llvm.mul [[NUM_ELEM_0]], [[SIZE_2]] : !llvm.i64
|
||||
// CHECK: [[SIZE_1:%.*]] = llvm.mlir.constant(10 : index) : i64
|
||||
// CHECK: [[NUM_ELEM_0:%.*]] = llvm.mul [[SIZE_0]], [[SIZE_1]] : i64
|
||||
// CHECK: [[NUM_ELEMS:%.*]] = llvm.mul [[NUM_ELEM_0]], [[SIZE_2]] : i64
|
||||
|
||||
// Compute the size of an individual element.
|
||||
// CHECK: [[NULL:%.*]] = llvm.mlir.null : !llvm.ptr<float>
|
||||
// CHECK: [[C1:%.*]] = llvm.mlir.constant(1 : index) : !llvm.i64
|
||||
// CHECK: [[C1:%.*]] = llvm.mlir.constant(1 : index) : i64
|
||||
// CHECK: [[GEP:%.*]] = llvm.getelementptr [[NULL]]{{\[}}[[C1]]]
|
||||
// CHECK-SAME: (!llvm.ptr<float>, !llvm.i64) -> !llvm.ptr<float>
|
||||
// CHECK-SAME: (!llvm.ptr<float>, i64) -> !llvm.ptr<float>
|
||||
// CHECK: [[SIZE_OF_FLOAT:%.*]] = llvm.ptrtoint [[GEP]]
|
||||
// CHECK-SAME: !llvm.ptr<float> to !llvm.i64
|
||||
// CHECK-SAME: !llvm.ptr<float> to i64
|
||||
|
||||
// Compute output index (-1) and candidate indices (0, NULL).
|
||||
// CHECK: [[OUTPUT_INDEX:%.*]] = llvm.mlir.constant(-1 : i32) : !llvm.i32
|
||||
// CHECK-NEXT: [[NUM_CANDIDATES:%.*]] = llvm.mlir.constant(0 : i32) : !llvm.i32
|
||||
// CHECK: [[OUTPUT_INDEX:%.*]] = llvm.mlir.constant(-1 : i32) : i32
|
||||
// CHECK-NEXT: [[NUM_CANDIDATES:%.*]] = llvm.mlir.constant(0 : i32) : i32
|
||||
// CHECK-NEXT: [[CANDIDATES_PTR:%.*]] = llvm.mlir.null : !llvm.ptr<i32>
|
||||
|
||||
// Allocate memory.
|
||||
@ -43,17 +43,17 @@ func @alloc(%ctx: !tf_framework.op_kernel_context,
|
||||
// CHECK-SAME: !llvm.ptr<i8> to !llvm.ptr<float>
|
||||
// CHECK: [[DESC_1:%.*]] = llvm.insertvalue [[FLOAT_PTR]], [[DESC_0]][0]
|
||||
// CHECK: [[DESC_2:%.*]] = llvm.insertvalue [[FLOAT_PTR]], [[DESC_1]][1]
|
||||
// CHECK: [[C0:%.*]] = llvm.mlir.constant(0 : index) : !llvm.i64
|
||||
// CHECK: [[C0:%.*]] = llvm.mlir.constant(0 : index) : i64
|
||||
// CHECK: [[DESC_3:%.*]] = llvm.insertvalue [[C0]], [[DESC_2]][2] : [[DESC_TY]]
|
||||
|
||||
// Set sizes and strides.
|
||||
// CHECK: [[STRIDE_2:%.*]] = llvm.mlir.constant(1 : index) : !llvm.i64
|
||||
// CHECK: [[STRIDE_2:%.*]] = llvm.mlir.constant(1 : index) : i64
|
||||
// CHECK: [[DESC_4:%.*]] = llvm.insertvalue [[SIZE_2]], [[DESC_3]][3, 2]
|
||||
// CHECK: [[DESC_5:%.*]] = llvm.insertvalue [[STRIDE_2]], [[DESC_4]][4, 2]
|
||||
// CHECK: [[STRIDE_1:%.*]] = llvm.mul [[STRIDE_2]], [[SIZE_2]] : !llvm.i64
|
||||
// CHECK: [[STRIDE_1:%.*]] = llvm.mul [[STRIDE_2]], [[SIZE_2]] : i64
|
||||
// CHECK: [[DESC_6:%.*]] = llvm.insertvalue [[SIZE_1]], [[DESC_5]][3, 1]
|
||||
// CHECK: [[DESC_7:%.*]] = llvm.insertvalue [[STRIDE_1]], [[DESC_6]][4, 1]
|
||||
// CHECK: [[STRIDE_0:%.*]] = llvm.mul [[STRIDE_1]], [[SIZE_1]] : !llvm.i64
|
||||
// CHECK: [[STRIDE_0:%.*]] = llvm.mul [[STRIDE_1]], [[SIZE_1]] : i64
|
||||
// CHECK: [[DESC_8:%.*]] = llvm.insertvalue [[SIZE_0]], [[DESC_7]][3, 0]
|
||||
// CHECK: [[DESC_9:%.*]] = llvm.insertvalue [[STRIDE_0]], [[DESC_8]][4, 0]
|
||||
// CHECK: llvm.return [[DESC_9]] : [[DESC_TY]]
|
||||
@ -81,7 +81,7 @@ func @dealloc(%ctx: !tf_framework.op_kernel_context,
|
||||
|
||||
// -----
|
||||
|
||||
// CHECK-LABEL: llvm.func @_mlir_ciface_tf_report_error(!llvm.ptr<i8>, !llvm.i32, !llvm.ptr<i8>)
|
||||
// CHECK-LABEL: llvm.func @_mlir_ciface_tf_report_error(!llvm.ptr<i8>, i32, !llvm.ptr<i8>)
|
||||
// CHECK: llvm.mlir.global internal constant [[MSG_CONST:@error_message_[0-9]+]]
|
||||
|
||||
func @report_error(%ctx: !tf_framework.op_kernel_context) {
|
||||
@ -91,7 +91,7 @@ func @report_error(%ctx: !tf_framework.op_kernel_context) {
|
||||
// CHECK: llvm.func @report_error([[CTX:%.*]]: !llvm.ptr<i8>)
|
||||
// CHECK-NEXT: [[ADDR:%.*]] = llvm.mlir.addressof [[MSG_CONST]]
|
||||
// CHECK: [[MSG:%.*]] = llvm.getelementptr [[ADDR]]
|
||||
// CHECK: [[CODE:%.*]] = llvm.mlir.constant({{.*}}) : !llvm.i32
|
||||
// CHECK: [[CODE:%.*]] = llvm.mlir.constant({{.*}}) : i32
|
||||
// CHECK: llvm.call @{{.*}}_tf_report_error([[CTX]], [[CODE]], [[MSG]])
|
||||
|
||||
// ----
|
||||
@ -102,7 +102,7 @@ func @null_memref() {
|
||||
return
|
||||
}
|
||||
// CHECK: [[DESC_0:%.*]] = llvm.mlir.undef : !llvm.struct<(i64, ptr<i8>)>
|
||||
// CHECK: [[C0:%.*]] = llvm.mlir.constant(0 : index) : !llvm.i64
|
||||
// CHECK: [[C0:%.*]] = llvm.mlir.constant(0 : index) : i64
|
||||
// CHECK: [[DESC_1:%.*]] = llvm.insertvalue [[C0]], [[DESC_0]][0]
|
||||
// CHECK: [[PTR:%.*]] = llvm.alloca {{.*}} x !llvm.i8
|
||||
// CHECK: [[PTR:%.*]] = llvm.alloca {{.*}} x i8
|
||||
// CHECK: [[DESC_2:%.*]] = llvm.insertvalue [[PTR]], [[DESC_1]][1]
|
||||
|
@ -10,22 +10,22 @@ gpu.module @kernel_module attributes {gpu.binary_blob = "BLOB!"} {
|
||||
}
|
||||
}
|
||||
|
||||
// CHECK: llvm.func @tfKernelGenLaunchKernel(!llvm.ptr<i8>, !llvm.ptr<i8>, !llvm.ptr<i8>, !llvm.i64, !llvm.i64, !llvm.i64, !llvm.i64, !llvm.i64, !llvm.i64, !llvm.ptr<ptr<i8>>)
|
||||
// CHECK: llvm.func @tfKernelGenLaunchKernel(!llvm.ptr<i8>, !llvm.ptr<i8>, !llvm.ptr<i8>, i64, i64, i64, i64, i64, i64, !llvm.ptr<ptr<i8>>)
|
||||
// CHECK: llvm.mlir.global internal constant @kernel_module_the_kernel_kernel_name("the_kernel\00")
|
||||
// CHECK: llvm.mlir.global internal constant @kernel_module_blob("BLOB!")
|
||||
|
||||
// CHECK-LABEL: llvm.func @launch
|
||||
// CHECK-SAME: (%[[CTX:.*]]: !llvm.ptr<i8>, %{{.*}}: !llvm.ptr<float>, %arg2: !llvm.ptr<float>, %arg3: !llvm.i64, %arg4: !llvm.i64, %arg5: !llvm.i64, %arg6: !llvm.i64, %arg7: !llvm.i64
|
||||
// CHECK-SAME: (%[[CTX:.*]]: !llvm.ptr<i8>, %{{.*}}: !llvm.ptr<float>, %arg2: !llvm.ptr<float>, %arg3: i64, %arg4: i64, %arg5: i64, %arg6: i64, %arg7: i64
|
||||
func @launch(%ctx: !tf_framework.op_kernel_context, %memref: memref<?x10xf32>) {
|
||||
// CHECK: %[[C1:.*]] = llvm.mlir.constant(1 : index) : !llvm.i64
|
||||
// CHECK: %[[C1:.*]] = llvm.mlir.constant(1 : index) : i64
|
||||
// CHECK: %[[BLOB:.*]] = llvm.mlir.addressof @kernel_module_blob : !llvm.ptr<array<5 x i8>>
|
||||
// CHECK: %[[C0:.*]] = llvm.mlir.constant(0 : index) : !llvm.i64
|
||||
// CHECK: %[[BLOB_PTR:.*]] = llvm.getelementptr %[[BLOB]][%[[C0]], %[[C0]]] : (!llvm.ptr<array<5 x i8>>, !llvm.i64, !llvm.i64) -> !llvm.ptr<i8>
|
||||
// CHECK: %[[C0:.*]] = llvm.mlir.constant(0 : index) : i64
|
||||
// CHECK: %[[BLOB_PTR:.*]] = llvm.getelementptr %[[BLOB]][%[[C0]], %[[C0]]] : (!llvm.ptr<array<5 x i8>>, i64, i64) -> !llvm.ptr<i8>
|
||||
// CHECK: %[[NAME:.*]] = llvm.mlir.addressof @kernel_module_the_kernel_kernel_name : !llvm.ptr<array<11 x i8>>
|
||||
// CHECK: %[[C0_1:.*]] = llvm.mlir.constant(0 : index) : !llvm.i64
|
||||
// CHECK: %[[NAME_PTR:.*]] = llvm.getelementptr %[[NAME]][%[[C0_1]], %[[C0_1]]] : (!llvm.ptr<array<11 x i8>>, !llvm.i64, !llvm.i64) -> !llvm.ptr<i8>
|
||||
// CHECK: %[[C7:.*]] = llvm.mlir.constant(7 : i32) : !llvm.i32
|
||||
// CHECK: %[[ARGS:.*]] = llvm.alloca %24 x !llvm.ptr<i8> : (!llvm.i32) -> !llvm.ptr<ptr<i8>>
|
||||
// CHECK: %[[C0_1:.*]] = llvm.mlir.constant(0 : index) : i64
|
||||
// CHECK: %[[NAME_PTR:.*]] = llvm.getelementptr %[[NAME]][%[[C0_1]], %[[C0_1]]] : (!llvm.ptr<array<11 x i8>>, i64, i64) -> !llvm.ptr<i8>
|
||||
// CHECK: %[[C7:.*]] = llvm.mlir.constant(7 : i32) : i32
|
||||
// CHECK: %[[ARGS:.*]] = llvm.alloca %24 x !llvm.ptr<i8> : (i32) -> !llvm.ptr<ptr<i8>>
|
||||
// CHECK: llvm.call @tfKernelGenLaunchKernel(%[[CTX]], %[[BLOB_PTR]], %[[NAME_PTR]], %[[C1]], %[[C1]], %[[C1]], %[[C1]], %[[C1]], %[[C1]], %[[ARGS]])
|
||||
%c1 = constant 1 : index
|
||||
gpu.launch_func @kernel_module::@the_kernel
|
||||
|
@ -91,7 +91,7 @@ class TFAllocOpConverter : public ConvertToLLVMCallOpPattern<TFAllocOp> {
|
||||
getSizeInBytes(loc, memref_type.getElementType(), rewriter);
|
||||
|
||||
// Convert `output_index` or set it to -1 if the attribute is missing.
|
||||
Type llvmInt32Type = LLVM::LLVMIntegerType::get(rewriter.getContext(), 32);
|
||||
Type llvmInt32Type = IntegerType::get(rewriter.getContext(), 32);
|
||||
Value output_index = rewriter.create<LLVM::ConstantOp>(
|
||||
loc, llvmInt32Type,
|
||||
rewriter.getI32IntegerAttr(tf_alloc_op.output_index().hasValue()
|
||||
@ -126,8 +126,7 @@ class TFAllocOpConverter : public ConvertToLLVMCallOpPattern<TFAllocOp> {
|
||||
StringRef GetFuncName() const override { return kCInterfaceAlloc; }
|
||||
|
||||
Type GetFuncType() const override {
|
||||
Type llvm_i32_type =
|
||||
LLVM::LLVMIntegerType::get(getDialect().getContext(), 32);
|
||||
Type llvm_i32_type = IntegerType::get(getDialect().getContext(), 32);
|
||||
Type llvm_i32_ptr_type = LLVM::LLVMPointerType::get(llvm_i32_type);
|
||||
Type llvm_void_ptr_type = getVoidPtrType();
|
||||
return LLVM::LLVMFunctionType::get(
|
||||
@ -179,8 +178,7 @@ class TFAllocOpConverter : public ConvertToLLVMCallOpPattern<TFAllocOp> {
|
||||
std::pair<Value, Value> ConvertI32ArrayAttrToStackAllocatedArray(
|
||||
Location loc, llvm::Optional<ArrayAttr> attr,
|
||||
ConversionPatternRewriter *rewriter) const {
|
||||
Type llvm_i32_type =
|
||||
LLVM::LLVMIntegerType::get(getDialect().getContext(), 32);
|
||||
Type llvm_i32_type = IntegerType::get(getDialect().getContext(), 32);
|
||||
Type llvm_i32_ptr_type = LLVM::LLVMPointerType::get(llvm_i32_type);
|
||||
|
||||
// If the attribute is missing or empty, set the element count to 0 and
|
||||
@ -276,9 +274,8 @@ class ReportErrorOpConverter
|
||||
StringRef GetFuncName() const override { return kCInterfaceReportError; }
|
||||
Type GetFuncType() const override {
|
||||
MLIRContext *ctx = &getTypeConverter()->getContext();
|
||||
auto i8_ptr_type =
|
||||
LLVM::LLVMPointerType::get(LLVM::LLVMIntegerType::get(ctx, 8));
|
||||
auto i32_type = LLVM::LLVMIntegerType::get(ctx, 32);
|
||||
auto i8_ptr_type = LLVM::LLVMPointerType::get(IntegerType::get(ctx, 8));
|
||||
auto i32_type = IntegerType::get(ctx, 32);
|
||||
return LLVM::LLVMFunctionType::get(
|
||||
getVoidType(), {getVoidPtrType(), i32_type, i8_ptr_type});
|
||||
}
|
||||
@ -308,11 +305,11 @@ class ReportErrorOpConverter
|
||||
|
||||
MLIRContext *ctx = &getTypeConverter()->getContext();
|
||||
Value c0 = builder.create<LLVM::ConstantOp>(
|
||||
loc, LLVM::LLVMIntegerType::get(ctx, 64),
|
||||
loc, IntegerType::get(ctx, 64),
|
||||
builder.getIntegerAttr(builder.getIndexType(), 0));
|
||||
return builder.create<LLVM::GEPOp>(
|
||||
loc, LLVM::LLVMPointerType::get(LLVM::LLVMIntegerType::get(ctx, 8)),
|
||||
globalPtr, ValueRange{c0, c0});
|
||||
loc, LLVM::LLVMPointerType::get(IntegerType::get(ctx, 8)), globalPtr,
|
||||
ValueRange{c0, c0});
|
||||
}
|
||||
return LLVM::createGlobalString(loc, builder, global_name, generated_error,
|
||||
LLVM::Linkage::Internal);
|
||||
|
@ -65,13 +65,13 @@ class ConvertLaunchFuncOpToTfRuntimeCallPattern
|
||||
|
||||
Type llvm_void_type_ = LLVM::LLVMVoidType::get(context_);
|
||||
Type llvm_pointer_type_ =
|
||||
LLVM::LLVMPointerType::get(LLVM::LLVMIntegerType::get(context_, 8));
|
||||
LLVM::LLVMPointerType::get(IntegerType::get(context_, 8));
|
||||
Type llvm_pointer_pointer_type_ =
|
||||
LLVM::LLVMPointerType::get(llvm_pointer_type_);
|
||||
Type llvm_int8_type_ = LLVM::LLVMIntegerType::get(context_, 8);
|
||||
Type llvm_int32_type_ = LLVM::LLVMIntegerType::get(context_, 32);
|
||||
Type llvm_int64_type_ = LLVM::LLVMIntegerType::get(context_, 64);
|
||||
Type llvm_intptr_type_ = LLVM::LLVMIntegerType::get(
|
||||
Type llvm_int8_type_ = IntegerType::get(context_, 8);
|
||||
Type llvm_int32_type_ = IntegerType::get(context_, 32);
|
||||
Type llvm_int64_type_ = IntegerType::get(context_, 64);
|
||||
Type llvm_intptr_type_ = IntegerType::get(
|
||||
context_, this->getTypeConverter()->getPointerBitwidth(0));
|
||||
|
||||
llvm::SmallString<32> gpu_binary_annotation_;
|
||||
@ -245,7 +245,7 @@ class TFKernelToLLVMPass : public TFKernelToLLVMPassBase<TFKernelToLLVMPass> {
|
||||
MLIRContext *ctx = m.getContext();
|
||||
LLVMTypeConverter type_converter(ctx);
|
||||
type_converter.addConversion([&](tf_framework::OpKernelContextType type) {
|
||||
return LLVM::LLVMPointerType::get(LLVM::LLVMIntegerType::get(ctx, 8));
|
||||
return LLVM::LLVMPointerType::get(IntegerType::get(ctx, 8));
|
||||
});
|
||||
|
||||
// Populate patterns.
|
||||
|
@ -34,7 +34,7 @@ def AllocationSlice : StructAttr<"AllocationSlice", XLAThunks_Dialect, [
|
||||
StructFieldAttr<"offset", I64Attr>,
|
||||
StructFieldAttr<"size", I64Attr>,
|
||||
]> {
|
||||
let description = "Defines a slice of an allocation for XLA thunk ops";
|
||||
let summary = "Defines a slice of an allocation for XLA thunk ops";
|
||||
}
|
||||
|
||||
def MemzeroThunkOp : ThunkOp<"execute_memzero_thunk"> {
|
||||
|
@ -685,8 +685,8 @@ def tf_repositories(path_prefix = "", tf_repo_name = ""):
|
||||
)
|
||||
|
||||
# Check out LLVM and MLIR from llvm-project.
|
||||
LLVM_COMMIT = "7f7b0dc4e15fac5f91f8f6dcc7f91c9025f41ae0"
|
||||
LLVM_SHA256 = "75ffa7e33d60354629934af3bf527d52bf29881166486695cf89b1ec9df45061"
|
||||
LLVM_COMMIT = "bcbdeafa9cb3469a7bf367c17f32d913076a4d55"
|
||||
LLVM_SHA256 = "934072cb0c757cb3852f330a8d54807506e1dc45fe2bed53e69fb6923b2d8d83"
|
||||
LLVM_URLS = [
|
||||
"https://storage.googleapis.com/mirror.tensorflow.org/github.com/llvm/llvm-project/archive/{commit}.tar.gz".format(commit = LLVM_COMMIT),
|
||||
"https://github.com/llvm/llvm-project/archive/{commit}.tar.gz".format(commit = LLVM_COMMIT),
|
||||
|
22
third_party/mlir/BUILD
vendored
22
third_party/mlir/BUILD
vendored
@ -1720,6 +1720,26 @@ cc_library(
|
||||
],
|
||||
)
|
||||
|
||||
gentbl(
|
||||
name = "LLVMDialectInterfaceIncGen",
|
||||
strip_include_prefix = "include",
|
||||
tbl_outs = [
|
||||
(
|
||||
"-gen-op-interface-decls",
|
||||
"include/mlir/Dialect/LLVMIR/LLVMOpsInterfaces.h.inc",
|
||||
),
|
||||
(
|
||||
"-gen-op-interface-defs",
|
||||
"include/mlir/Dialect/LLVMIR/LLVMOpsInterfaces.cpp.inc",
|
||||
),
|
||||
],
|
||||
tblgen = ":mlir-tblgen",
|
||||
td_file = "include/mlir/Dialect/LLVMIR/LLVMOpsInterfaces.td",
|
||||
td_srcs = [
|
||||
":LLVMOpsTdFiles",
|
||||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "LLVMDialect",
|
||||
srcs = glob(
|
||||
@ -1756,6 +1776,7 @@ cc_library(
|
||||
deps = [
|
||||
":ControlFlowInterfaces",
|
||||
":IR",
|
||||
":LLVMDialectInterfaceIncGen",
|
||||
":LLVMOpsIncGen",
|
||||
":SideEffectInterfaces",
|
||||
":Support",
|
||||
@ -1960,6 +1981,7 @@ filegroup(
|
||||
srcs = [
|
||||
"include/mlir/Dialect/LLVMIR/LLVMOpBase.td",
|
||||
"include/mlir/Dialect/LLVMIR/LLVMOps.td",
|
||||
"include/mlir/Dialect/LLVMIR/LLVMOpsInterfaces.td",
|
||||
"include/mlir/IR/SymbolInterfaces.td",
|
||||
"include/mlir/Interfaces/ControlFlowInterfaces.td",
|
||||
":OpBaseTdFiles",
|
||||
|
Loading…
Reference in New Issue
Block a user