CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
59 lines
2.0 KiB
TableGen
59 lines
2.0 KiB
TableGen
include "mlir/IR/PatternBase.td"
|
|
include "mlir/Dialect/Shape/IR/ShapeOps.td"
|
|
include "mlir/Dialect/Tensor/IR/TensorOps.td"
|
|
|
|
def AllInputShapesEq : Constraint<CPred< [{
|
|
llvm::all_equal($0)
|
|
}]>>;
|
|
|
|
def HasSingleElement : Constraint<CPred< [{
|
|
$0.size() == 1
|
|
}]>>;
|
|
|
|
def HasStaticShape : Constraint<CPred< [{
|
|
::llvm::dyn_cast<ShapedType>($0.getType()).hasStaticShape()
|
|
}]>>;
|
|
|
|
def IsTensorType : Constraint<CPred<"isa<TensorType>($0.getType())">,
|
|
"is a tensor type">;
|
|
|
|
// Helper that takes the first element of a range.
|
|
def TakeFront : NativeCodeCall<"$0.front()">;
|
|
|
|
// Canonicalization patterns.
|
|
|
|
def AssumingAllOneOp : Pat<(Shape_AssumingAllOp $args),
|
|
(replaceWithValue $args),
|
|
[(HasSingleElement $args)]>;
|
|
|
|
def CstrBroadcastableEqOps : Pat<(Shape_CstrBroadcastableOp:$op $shapes),
|
|
(Shape_ConstWitnessOp ConstBoolAttrTrue),
|
|
[(AllInputShapesEq $shapes)]>;
|
|
|
|
def CstrEqEqOps : Pat<(Shape_CstrEqOp:$op $shapes),
|
|
(Shape_ConstWitnessOp ConstBoolAttrTrue),
|
|
[(AllInputShapesEq $shapes)]>;
|
|
|
|
def IndexToSizeToIndexCanonicalization : Pat<
|
|
(Shape_SizeToIndexOp (Shape_IndexToSizeOp $arg)),
|
|
(replaceWithValue $arg)>;
|
|
|
|
def SizeToIndexToSizeCanonicalization : Pat<
|
|
(Shape_IndexToSizeOp (Shape_SizeToIndexOp $arg)),
|
|
(replaceWithValue $arg)>;
|
|
|
|
// Fold tensor.cast(const_shape) to const_shape. This changes the type of
|
|
// const_shape to the destination type of the cast.
|
|
def TensorCastConstShape : Pat <
|
|
(Tensor_CastOp:$res (Shape_ConstShapeOp $arg)), (Shape_ConstShapeOp $arg),
|
|
[(HasStaticShape $res)]>;
|
|
|
|
// tensor.extract from shape_of(tensor) -> tensor.dim. We can take the first
|
|
// index because shape_of always returns a 1D tensor. Only applies when $arg
|
|
// is a tensor; the memref case is not handled here (memref.dim would be
|
|
// needed, but adding a MemRef dependency to this file is not desirable).
|
|
def ExtractFromShapeOfExtentTensor : Pat<
|
|
(Tensor_ExtractOp (Shape_ShapeOfOp $arg), $indices),
|
|
(Tensor_DimOp $arg, (TakeFront $indices)),
|
|
[(IsTensorType $arg)]>;
|