Index: mlir/include/mlir/Dialect/ArmSME/IR/ArmSME.td =================================================================== --- mlir/include/mlir/Dialect/ArmSME/IR/ArmSME.td +++ mlir/include/mlir/Dialect/ArmSME/IR/ArmSME.td @@ -162,7 +162,7 @@ let hasCanonicalizeMethod = 1; } -def GetTileID : ArmSME_Op<"get_tile_id", [Pure]> { +def GetTileID : ArmSME_Op<"get_tile_id"> { let summary = "Returns an SME \"virtual tile\" id"; let description = [{ A `get_tile_id` operation returns a scalar integer representing an SME Index: mlir/test/Dialect/ArmSME/cse.mlir =================================================================== --- /dev/null +++ mlir/test/Dialect/ArmSME/cse.mlir @@ -0,0 +1,16 @@ +// RUN: mlir-opt -allow-unregistered-dialect %s -pass-pipeline='builtin.module(func.func(cse))' | FileCheck %s + +// This test is checking that CSE does not remove 'arm_sme.get_tile_id' ops as +// duplicates. +// CHECK-LABEL: @get_tile_id +// CHECK: %[[TILE_ID_0:.*]] = arm_sme.get_tile_id : i32 +// CHECK: %[[TILE_ID_1:.*]] = arm_sme.get_tile_id : i32 +// CHECK: "prevent.dce"(%[[TILE_ID_0]]) : (i32) -> () +// CHECK: "prevent.dce"(%[[TILE_ID_1]]) : (i32) -> () +func.func @get_tile_id() { + %tile_id_1 = arm_sme.get_tile_id : i32 + %tile_id_2 = arm_sme.get_tile_id : i32 + "prevent.dce"(%tile_id_1) : (i32) -> () + "prevent.dce"(%tile_id_2) : (i32) -> () + return +}