From 7e30ef798b3472b42ea891dafeda3c3bc2f39ca6 Mon Sep 17 00:00:00 2001
From: zjgarvey <zjgarvey@gmail.com>
Date: Fri, 22 Nov 2024 16:55:03 -0600
Subject: [PATCH 1/4] Apply the trait NoMemoryEffect to most ReadOnly ops

---
 .../Dialect/Torch/IR/GeneratedTorchOps.td     | 1806 +++++++++++------
 .../build_tools/torch_ods_gen.py              |    7 +
 test/Dialect/Torch/canonicalize.mlir          |    2 -
 3 files changed, 1211 insertions(+), 604 deletions(-)

diff --git a/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td b/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td
index a3bad0e0423b..a7456b0d7d0f 100644
--- a/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td
+++ b/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td
@@ -22,7 +22,8 @@
 def Torch_AtenHardtanhOp : Torch_Op<"aten.hardtanh", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::hardtanh : (Tensor, Scalar, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -71,7 +72,8 @@ def Torch_AtenHardtanh_Op : Torch_Op<"aten.hardtanh_", [
 def Torch_AtenEluOp : Torch_Op<"aten.elu", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::elu : (Tensor, Scalar, Scalar, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -122,7 +124,8 @@ def Torch_AtenElu_Op : Torch_Op<"aten.elu_", [
 def Torch_AtenReluOp : Torch_Op<"aten.relu", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::relu : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -167,7 +170,8 @@ def Torch_AtenRelu_Op : Torch_Op<"aten.relu_", [
 def Torch_AtenRelu6Op : Torch_Op<"aten.relu6", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::relu6 : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -212,7 +216,8 @@ def Torch_AtenRelu6_Op : Torch_Op<"aten.relu6_", [
 def Torch_AtenLeakyReluOp : Torch_Op<"aten.leaky_relu", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::leaky_relu : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -259,7 +264,8 @@ def Torch_AtenLeakyRelu_Op : Torch_Op<"aten.leaky_relu_", [
 def Torch_AtenRreluOp : Torch_Op<"aten.rrelu", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::rrelu : (Tensor, Scalar, Scalar, bool, Generator?) -> (Tensor)`";
   let arguments = (ins
@@ -312,7 +318,8 @@ def Torch_AtenRrelu_Op : Torch_Op<"aten.rrelu_", [
 def Torch_AtenRreluWithNoiseOp : Torch_Op<"aten.rrelu_with_noise", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::rrelu_with_noise : (Tensor, Tensor, Scalar, Scalar, bool, Generator?) -> (Tensor)`";
   let arguments = (ins
@@ -367,7 +374,8 @@ def Torch_AtenRreluWithNoise_Op : Torch_Op<"aten.rrelu_with_noise_", [
 def Torch_AtenCeluOp : Torch_Op<"aten.celu", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::celu : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -414,7 +422,8 @@ def Torch_AtenCelu_Op : Torch_Op<"aten.celu_", [
 def Torch_AtenSeluOp : Torch_Op<"aten.selu", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::selu : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -459,7 +468,8 @@ def Torch_AtenSelu_Op : Torch_Op<"aten.selu_", [
 def Torch_AtenSigmoidOp : Torch_Op<"aten.sigmoid", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sigmoid : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -504,7 +514,8 @@ def Torch_AtenSigmoid_Op : Torch_Op<"aten.sigmoid_", [
 def Torch_AtenSinhOp : Torch_Op<"aten.sinh", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sinh : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -549,7 +560,8 @@ def Torch_AtenSinh_Op : Torch_Op<"aten.sinh_", [
 def Torch_AtenSgnOp : Torch_Op<"aten.sgn", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sgn : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -594,7 +606,8 @@ def Torch_AtenSgn_Op : Torch_Op<"aten.sgn_", [
 def Torch_AtenHardsigmoidOp : Torch_Op<"aten.hardsigmoid", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::hardsigmoid : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -639,7 +652,8 @@ def Torch_AtenHardsigmoid_Op : Torch_Op<"aten.hardsigmoid_", [
 def Torch_AtenHardswishOp : Torch_Op<"aten.hardswish", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::hardswish : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -684,7 +698,8 @@ def Torch_AtenHardswish_Op : Torch_Op<"aten.hardswish_", [
 def Torch_AtenErfOp : Torch_Op<"aten.erf", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::erf : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -729,7 +744,8 @@ def Torch_AtenErf_Op : Torch_Op<"aten.erf_", [
 def Torch_AtenErfinvOp : Torch_Op<"aten.erfinv", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::erfinv : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -774,7 +790,8 @@ def Torch_AtenErfinv_Op : Torch_Op<"aten.erfinv_", [
 def Torch_AtenSiluOp : Torch_Op<"aten.silu", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::silu : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -819,7 +836,8 @@ def Torch_AtenSilu_Op : Torch_Op<"aten.silu_", [
 def Torch_AtenSinOp : Torch_Op<"aten.sin", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sin : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -864,7 +882,8 @@ def Torch_AtenSin_Op : Torch_Op<"aten.sin_", [
 def Torch_AtenAsinOp : Torch_Op<"aten.asin", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::asin : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -909,7 +928,8 @@ def Torch_AtenAsin_Op : Torch_Op<"aten.asin_", [
 def Torch_AtenAsinhOp : Torch_Op<"aten.asinh", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::asinh : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -954,7 +974,8 @@ def Torch_AtenAsinh_Op : Torch_Op<"aten.asinh_", [
 def Torch_AtenExpOp : Torch_Op<"aten.exp", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::exp : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -999,7 +1020,8 @@ def Torch_AtenExp_Op : Torch_Op<"aten.exp_", [
 def Torch_AtenExp2Op : Torch_Op<"aten.exp2", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::exp2 : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1044,7 +1066,8 @@ def Torch_AtenExp2_Op : Torch_Op<"aten.exp2_", [
 def Torch_AtenExpm1Op : Torch_Op<"aten.expm1", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::expm1 : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1089,7 +1112,8 @@ def Torch_AtenExpm1_Op : Torch_Op<"aten.expm1_", [
 def Torch_AtenCosOp : Torch_Op<"aten.cos", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::cos : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1134,7 +1158,8 @@ def Torch_AtenCos_Op : Torch_Op<"aten.cos_", [
 def Torch_AtenCoshOp : Torch_Op<"aten.cosh", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::cosh : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1179,7 +1204,8 @@ def Torch_AtenCosh_Op : Torch_Op<"aten.cosh_", [
 def Torch_AtenAcosOp : Torch_Op<"aten.acos", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::acos : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1224,7 +1250,8 @@ def Torch_AtenAcos_Op : Torch_Op<"aten.acos_", [
 def Torch_AtenAcoshOp : Torch_Op<"aten.acosh", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::acosh : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1269,7 +1296,8 @@ def Torch_AtenAcosh_Op : Torch_Op<"aten.acosh_", [
 def Torch_AtenTanOp : Torch_Op<"aten.tan", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::tan : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1314,7 +1342,8 @@ def Torch_AtenTan_Op : Torch_Op<"aten.tan_", [
 def Torch_AtenTanhOp : Torch_Op<"aten.tanh", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::tanh : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1359,7 +1388,8 @@ def Torch_AtenTanh_Op : Torch_Op<"aten.tanh_", [
 def Torch_AtenAtanOp : Torch_Op<"aten.atan", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::atan : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1404,7 +1434,8 @@ def Torch_AtenAtan_Op : Torch_Op<"aten.atan_", [
 def Torch_AtenAtanhOp : Torch_Op<"aten.atanh", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::atanh : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1449,7 +1480,8 @@ def Torch_AtenAtanh_Op : Torch_Op<"aten.atanh_", [
 def Torch_AtenAtan2Op : Torch_Op<"aten.atan2", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::atan2 : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1496,7 +1528,8 @@ def Torch_AtenAtan2_Op : Torch_Op<"aten.atan2_", [
 def Torch_AtenNegOp : Torch_Op<"aten.neg", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::neg : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1541,7 +1574,8 @@ def Torch_AtenNeg_Op : Torch_Op<"aten.neg_", [
 def Torch_AtenFracOp : Torch_Op<"aten.frac", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::frac : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1586,7 +1620,8 @@ def Torch_AtenFrac_Op : Torch_Op<"aten.frac_", [
 def Torch_AtenBitwiseNotOp : Torch_Op<"aten.bitwise_not", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bitwise_not : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1631,7 +1666,8 @@ def Torch_AtenBitwiseNot_Op : Torch_Op<"aten.bitwise_not_", [
 def Torch_AtenDivTensorOp : Torch_Op<"aten.div.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::div.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1678,7 +1714,8 @@ def Torch_AtenDiv_TensorOp : Torch_Op<"aten.div_.Tensor", [
 def Torch_AtenLogicalOrOp : Torch_Op<"aten.logical_or", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::logical_or : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1725,7 +1762,8 @@ def Torch_AtenLogicalOr_Op : Torch_Op<"aten.logical_or_", [
 def Torch_AtenLogicalAndOp : Torch_Op<"aten.logical_and", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::logical_and : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1772,7 +1810,8 @@ def Torch_AtenLogicalAnd_Op : Torch_Op<"aten.logical_and_", [
 def Torch_AtenLogicalXorOp : Torch_Op<"aten.logical_xor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::logical_xor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1819,7 +1858,8 @@ def Torch_AtenLogicalXor_Op : Torch_Op<"aten.logical_xor_", [
 def Torch_AtenLogicalNotOp : Torch_Op<"aten.logical_not", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::logical_not : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1864,7 +1904,8 @@ def Torch_AtenLogicalNot_Op : Torch_Op<"aten.logical_not_", [
 def Torch_AtenLerpTensorOp : Torch_Op<"aten.lerp.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::lerp.Tensor : (Tensor, Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -1913,7 +1954,8 @@ def Torch_AtenLerp_TensorOp : Torch_Op<"aten.lerp_.Tensor", [
 def Torch_AtenLerpScalarOp : Torch_Op<"aten.lerp.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::lerp.Scalar : (Tensor, Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -1962,7 +2004,8 @@ def Torch_AtenLerp_ScalarOp : Torch_Op<"aten.lerp_.Scalar", [
 def Torch_AtenGtTensorOp : Torch_Op<"aten.gt.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::gt.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2009,7 +2052,8 @@ def Torch_AtenGt_TensorOp : Torch_Op<"aten.gt_.Tensor", [
 def Torch_AtenGeTensorOp : Torch_Op<"aten.ge.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ge.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2056,7 +2100,8 @@ def Torch_AtenGe_TensorOp : Torch_Op<"aten.ge_.Tensor", [
 def Torch_AtenLtTensorOp : Torch_Op<"aten.lt.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::lt.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2103,7 +2148,8 @@ def Torch_AtenLt_TensorOp : Torch_Op<"aten.lt_.Tensor", [
 def Torch_AtenLeTensorOp : Torch_Op<"aten.le.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::le.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2150,7 +2196,8 @@ def Torch_AtenLe_TensorOp : Torch_Op<"aten.le_.Tensor", [
 def Torch_AtenNeTensorOp : Torch_Op<"aten.ne.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ne.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2197,7 +2244,8 @@ def Torch_AtenNe_TensorOp : Torch_Op<"aten.ne_.Tensor", [
 def Torch_AtenDivScalarOp : Torch_Op<"aten.div.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::div.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -2244,7 +2292,8 @@ def Torch_AtenDiv_ScalarOp : Torch_Op<"aten.div_.Scalar", [
 def Torch_AtenFmodScalarOp : Torch_Op<"aten.fmod.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fmod.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -2291,7 +2340,8 @@ def Torch_AtenFmod_ScalarOp : Torch_Op<"aten.fmod_.Scalar", [
 def Torch_AtenMaskedFillScalarOp : Torch_Op<"aten.masked_fill.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::masked_fill.Scalar : (Tensor, Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -2340,7 +2390,8 @@ def Torch_AtenMaskedFill_ScalarOp : Torch_Op<"aten.masked_fill_.Scalar", [
 def Torch_AtenClampOp : Torch_Op<"aten.clamp", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::clamp : (Tensor, Scalar?, Scalar?) -> (Tensor)`";
   let arguments = (ins
@@ -2389,7 +2440,8 @@ def Torch_AtenClamp_Op : Torch_Op<"aten.clamp_", [
 def Torch_AtenClampTensorOp : Torch_Op<"aten.clamp.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::clamp.Tensor : (Tensor, Tensor?, Tensor?) -> (Tensor)`";
   let arguments = (ins
@@ -2438,7 +2490,8 @@ def Torch_AtenClamp_TensorOp : Torch_Op<"aten.clamp_.Tensor", [
 def Torch_AtenClampMinOp : Torch_Op<"aten.clamp_min", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::clamp_min : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -2485,7 +2538,8 @@ def Torch_AtenClampMin_Op : Torch_Op<"aten.clamp_min_", [
 def Torch_AtenClampMinTensorOp : Torch_Op<"aten.clamp_min.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::clamp_min.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2532,7 +2586,8 @@ def Torch_AtenClampMin_TensorOp : Torch_Op<"aten.clamp_min_.Tensor", [
 def Torch_AtenClampMaxOp : Torch_Op<"aten.clamp_max", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::clamp_max : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -2579,7 +2634,8 @@ def Torch_AtenClampMax_Op : Torch_Op<"aten.clamp_max_", [
 def Torch_AtenClampMaxTensorOp : Torch_Op<"aten.clamp_max.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::clamp_max.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2626,7 +2682,8 @@ def Torch_AtenClampMax_TensorOp : Torch_Op<"aten.clamp_max_.Tensor", [
 def Torch_AtenLog2Op : Torch_Op<"aten.log2", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::log2 : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2671,7 +2728,8 @@ def Torch_AtenLog2_Op : Torch_Op<"aten.log2_", [
 def Torch_AtenLog10Op : Torch_Op<"aten.log10", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::log10 : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2716,7 +2774,8 @@ def Torch_AtenLog10_Op : Torch_Op<"aten.log10_", [
 def Torch_AtenSqrtOp : Torch_Op<"aten.sqrt", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sqrt : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2761,7 +2820,8 @@ def Torch_AtenSqrt_Op : Torch_Op<"aten.sqrt_", [
 def Torch_AtenLog1pOp : Torch_Op<"aten.log1p", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::log1p : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2806,7 +2866,8 @@ def Torch_AtenLog1p_Op : Torch_Op<"aten.log1p_", [
 def Torch_AtenLogitOp : Torch_Op<"aten.logit", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::logit : (Tensor, float?) -> (Tensor)`";
   let arguments = (ins
@@ -2853,7 +2914,8 @@ def Torch_AtenLogit_Op : Torch_Op<"aten.logit_", [
 def Torch_AtenRsqrtOp : Torch_Op<"aten.rsqrt", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::rsqrt : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2898,7 +2960,8 @@ def Torch_AtenRsqrt_Op : Torch_Op<"aten.rsqrt_", [
 def Torch_AtenAbsOp : Torch_Op<"aten.abs", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::abs : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2943,7 +3006,8 @@ def Torch_AtenAbs_Op : Torch_Op<"aten.abs_", [
 def Torch_AtenReciprocalOp : Torch_Op<"aten.reciprocal", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::reciprocal : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -2988,7 +3052,8 @@ def Torch_AtenReciprocal_Op : Torch_Op<"aten.reciprocal_", [
 def Torch_AtenBitwiseAndTensorOp : Torch_Op<"aten.bitwise_and.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bitwise_and.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -3035,7 +3100,8 @@ def Torch_AtenBitwiseAnd_TensorOp : Torch_Op<"aten.bitwise_and_.Tensor", [
 def Torch_AtenBitwiseAndScalarOp : Torch_Op<"aten.bitwise_and.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bitwise_and.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -3082,7 +3148,8 @@ def Torch_AtenBitwiseAnd_ScalarOp : Torch_Op<"aten.bitwise_and_.Scalar", [
 def Torch_AtenBitwiseOrTensorOp : Torch_Op<"aten.bitwise_or.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bitwise_or.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -3129,7 +3196,8 @@ def Torch_AtenBitwiseOr_TensorOp : Torch_Op<"aten.bitwise_or_.Tensor", [
 def Torch_AtenBitwiseXorTensorOp : Torch_Op<"aten.bitwise_xor.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bitwise_xor.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -3176,7 +3244,8 @@ def Torch_AtenBitwiseXor_TensorOp : Torch_Op<"aten.bitwise_xor_.Tensor", [
 def Torch_AtenBitwiseLeftShiftTensorOp : Torch_Op<"aten.bitwise_left_shift.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bitwise_left_shift.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -3223,7 +3292,8 @@ def Torch_AtenBitwiseLeftShift_TensorOp : Torch_Op<"aten.bitwise_left_shift_.Ten
 def Torch_AtenBitwiseRightShiftTensorOp : Torch_Op<"aten.bitwise_right_shift.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bitwise_right_shift.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -3270,7 +3340,8 @@ def Torch_AtenBitwiseRightShift_TensorOp : Torch_Op<"aten.bitwise_right_shift_.T
 def Torch_AtenThresholdOp : Torch_Op<"aten.threshold", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::threshold : (Tensor, Scalar, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -3319,7 +3390,8 @@ def Torch_AtenThreshold_Op : Torch_Op<"aten.threshold_", [
 def Torch_AtenSquareOp : Torch_Op<"aten.square", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::square : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -3364,7 +3436,8 @@ def Torch_AtenSquare_Op : Torch_Op<"aten.square_", [
 def Torch_AtenZeroOp : Torch_Op<"aten.zero", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::zero : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -3409,7 +3482,8 @@ def Torch_AtenZero_Op : Torch_Op<"aten.zero_", [
 def Torch_AtenFillScalarOp : Torch_Op<"aten.fill.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fill.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -3456,7 +3530,8 @@ def Torch_AtenFill_ScalarOp : Torch_Op<"aten.fill_.Scalar", [
 def Torch_AtenFillTensorOp : Torch_Op<"aten.fill.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fill.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -3503,7 +3578,8 @@ def Torch_AtenFill_TensorOp : Torch_Op<"aten.fill_.Tensor", [
 def Torch_AtenCopysignTensorOp : Torch_Op<"aten.copysign.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::copysign.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -3549,7 +3625,8 @@ def Torch_AtenCopysign_TensorOp : Torch_Op<"aten.copysign_.Tensor", [
 
 def Torch_AtenUnsqueezeOp : Torch_Op<"aten.unsqueeze", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::unsqueeze : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -3597,7 +3674,8 @@ def Torch_AtenUnsqueeze_Op : Torch_Op<"aten.unsqueeze_", [
 def Torch_AtenDivTensorModeOp : Torch_Op<"aten.div.Tensor_mode", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::div.Tensor_mode : (Tensor, Tensor, str?) -> (Tensor)`";
   let arguments = (ins
@@ -3648,7 +3726,8 @@ def Torch_AtenDiv_TensorModeOp : Torch_Op<"aten.div_.Tensor_mode", [
 def Torch_AtenDivScalarModeOp : Torch_Op<"aten.div.Scalar_mode", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::div.Scalar_mode : (Tensor, Scalar, str?) -> (Tensor)`";
   let arguments = (ins
@@ -3698,7 +3777,8 @@ def Torch_AtenDiv_ScalarModeOp : Torch_Op<"aten.div_.Scalar_mode", [
 def Torch_AtenMulTensorOp : Torch_Op<"aten.mul.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mul.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -3747,7 +3827,8 @@ def Torch_AtenMul_TensorOp : Torch_Op<"aten.mul_.Tensor", [
 def Torch_AtenAddTensorOp : Torch_Op<"aten.add.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::add.Tensor : (Tensor, Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -3798,7 +3879,8 @@ def Torch_AtenAdd_TensorOp : Torch_Op<"aten.add_.Tensor", [
 def Torch_AtenSubTensorOp : Torch_Op<"aten.sub.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sub.Tensor : (Tensor, Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -3849,7 +3931,8 @@ def Torch_AtenSub_TensorOp : Torch_Op<"aten.sub_.Tensor", [
 def Torch_AtenAddScalarOp : Torch_Op<"aten.add.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::add.Scalar : (Tensor, Scalar, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -3900,7 +3983,8 @@ def Torch_AtenAdd_ScalarOp : Torch_Op<"aten.add_.Scalar", [
 def Torch_AtenSubScalarOp : Torch_Op<"aten.sub.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sub.Scalar : (Tensor, Scalar, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -3951,7 +4035,8 @@ def Torch_AtenSub_ScalarOp : Torch_Op<"aten.sub_.Scalar", [
 def Torch_AtenMulScalarOp : Torch_Op<"aten.mul.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mul.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -4000,7 +4085,8 @@ def Torch_AtenMul_ScalarOp : Torch_Op<"aten.mul_.Scalar", [
 def Torch_AtenLdexpTensorOp : Torch_Op<"aten.ldexp.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ldexp.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -4024,7 +4110,8 @@ def Torch_AtenLdexpTensorOp : Torch_Op<"aten.ldexp.Tensor", [
 def Torch_AtenSignbitOp : Torch_Op<"aten.signbit", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::signbit : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -4047,7 +4134,8 @@ def Torch_AtenSignbitOp : Torch_Op<"aten.signbit", [
 def Torch_AtenEqTensorOp : Torch_Op<"aten.eq.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::eq.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -4095,7 +4183,8 @@ def Torch_AtenEq_TensorOp : Torch_Op<"aten.eq_.Tensor", [
 def Torch_AtenLeScalarOp : Torch_Op<"aten.le.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::le.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -4143,7 +4232,8 @@ def Torch_AtenLe_ScalarOp : Torch_Op<"aten.le_.Scalar", [
 def Torch_AtenLtScalarOp : Torch_Op<"aten.lt.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::lt.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -4191,7 +4281,8 @@ def Torch_AtenLt_ScalarOp : Torch_Op<"aten.lt_.Scalar", [
 def Torch_AtenGtScalarOp : Torch_Op<"aten.gt.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::gt.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -4239,7 +4330,8 @@ def Torch_AtenGt_ScalarOp : Torch_Op<"aten.gt_.Scalar", [
 def Torch_AtenGeScalarOp : Torch_Op<"aten.ge.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ge.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -4287,7 +4379,8 @@ def Torch_AtenGe_ScalarOp : Torch_Op<"aten.ge_.Scalar", [
 def Torch_AtenEqScalarOp : Torch_Op<"aten.eq.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::eq.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -4335,7 +4428,8 @@ def Torch_AtenEq_ScalarOp : Torch_Op<"aten.eq_.Scalar", [
 def Torch_AtenNeScalarOp : Torch_Op<"aten.ne.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ne.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -4383,7 +4477,8 @@ def Torch_AtenNe_ScalarOp : Torch_Op<"aten.ne_.Scalar", [
 def Torch_AtenLogOp : Torch_Op<"aten.log", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::log : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -4429,7 +4524,8 @@ def Torch_AtenLog_Op : Torch_Op<"aten.log_", [
 def Torch_AtenFloorOp : Torch_Op<"aten.floor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::floor : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -4475,7 +4571,8 @@ def Torch_AtenFloor_Op : Torch_Op<"aten.floor_", [
 def Torch_AtenCeilOp : Torch_Op<"aten.ceil", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ceil : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -4521,7 +4618,8 @@ def Torch_AtenCeil_Op : Torch_Op<"aten.ceil_", [
 def Torch_AtenRoundOp : Torch_Op<"aten.round", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::round : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -4567,7 +4665,8 @@ def Torch_AtenRound_Op : Torch_Op<"aten.round_", [
 def Torch_AtenTruncOp : Torch_Op<"aten.trunc", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::trunc : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -4613,7 +4712,8 @@ def Torch_AtenTrunc_Op : Torch_Op<"aten.trunc_", [
 def Torch_AtenSignOp : Torch_Op<"aten.sign", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sign : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -4659,7 +4759,8 @@ def Torch_AtenSign_Op : Torch_Op<"aten.sign_", [
 def Torch_AtenMaskedFillTensorOp : Torch_Op<"aten.masked_fill.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::masked_fill.Tensor : (Tensor, Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -4709,7 +4810,8 @@ def Torch_AtenMaskedFill_TensorOp : Torch_Op<"aten.masked_fill_.Tensor", [
 def Torch_AtenAddcmulOp : Torch_Op<"aten.addcmul", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::addcmul : (Tensor, Tensor, Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -4760,7 +4862,8 @@ def Torch_AtenAddcmul_Op : Torch_Op<"aten.addcmul_", [
 def Torch_AtenAddcdivOp : Torch_Op<"aten.addcdiv", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::addcdiv : (Tensor, Tensor, Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -4811,7 +4914,8 @@ def Torch_AtenAddcdiv_Op : Torch_Op<"aten.addcdiv_", [
 def Torch_AtenFakeQuantizePerTensorAffineOp : Torch_Op<"aten.fake_quantize_per_tensor_affine", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fake_quantize_per_tensor_affine : (Tensor, float, int, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -4838,7 +4942,8 @@ def Torch_AtenFakeQuantizePerTensorAffineOp : Torch_Op<"aten.fake_quantize_per_t
 def Torch_AtenFakeQuantizePerTensorAffineCachemaskOp : Torch_Op<"aten.fake_quantize_per_tensor_affine_cachemask", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fake_quantize_per_tensor_affine_cachemask : (Tensor, float, int, int, int) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -4866,7 +4971,8 @@ def Torch_AtenFakeQuantizePerTensorAffineCachemaskOp : Torch_Op<"aten.fake_quant
 def Torch_AtenFakeQuantizePerTensorAffineTensorQparamsOp : Torch_Op<"aten.fake_quantize_per_tensor_affine.tensor_qparams", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fake_quantize_per_tensor_affine.tensor_qparams : (Tensor, Tensor, Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -4893,7 +4999,8 @@ def Torch_AtenFakeQuantizePerTensorAffineTensorQparamsOp : Torch_Op<"aten.fake_q
 def Torch_Aten_FakeQuantizePerTensorAffineCachemaskTensorQparamsOp : Torch_Op<"aten._fake_quantize_per_tensor_affine_cachemask_tensor_qparams", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_fake_quantize_per_tensor_affine_cachemask_tensor_qparams : (Tensor, Tensor, Tensor, Tensor, int, int) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -4922,7 +5029,8 @@ def Torch_Aten_FakeQuantizePerTensorAffineCachemaskTensorQparamsOp : Torch_Op<"a
 def Torch_AtenFakeQuantizePerChannelAffineOp : Torch_Op<"aten.fake_quantize_per_channel_affine", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fake_quantize_per_channel_affine : (Tensor, Tensor, Tensor, int, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -4950,7 +5058,8 @@ def Torch_AtenFakeQuantizePerChannelAffineOp : Torch_Op<"aten.fake_quantize_per_
 def Torch_AtenFakeQuantizePerChannelAffineCachemaskOp : Torch_Op<"aten.fake_quantize_per_channel_affine_cachemask", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fake_quantize_per_channel_affine_cachemask : (Tensor, Tensor, Tensor, int, int, int) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -4979,7 +5088,8 @@ def Torch_AtenFakeQuantizePerChannelAffineCachemaskOp : Torch_Op<"aten.fake_quan
 def Torch_AtenIsfiniteOp : Torch_Op<"aten.isfinite", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::isfinite : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5002,7 +5112,8 @@ def Torch_AtenIsfiniteOp : Torch_Op<"aten.isfinite", [
 def Torch_AtenMaximumOp : Torch_Op<"aten.maximum", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::maximum : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5026,7 +5137,8 @@ def Torch_AtenMaximumOp : Torch_Op<"aten.maximum", [
 def Torch_AtenMinimumOp : Torch_Op<"aten.minimum", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::minimum : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5050,7 +5162,8 @@ def Torch_AtenMinimumOp : Torch_Op<"aten.minimum", [
 def Torch_AtenFmaxOp : Torch_Op<"aten.fmax", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fmax : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5074,7 +5187,8 @@ def Torch_AtenFmaxOp : Torch_Op<"aten.fmax", [
 def Torch_AtenFminOp : Torch_Op<"aten.fmin", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fmin : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5098,7 +5212,8 @@ def Torch_AtenFminOp : Torch_Op<"aten.fmin", [
 def Torch_AtenMishOp : Torch_Op<"aten.mish", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mish : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5121,7 +5236,8 @@ def Torch_AtenMishOp : Torch_Op<"aten.mish", [
 def Torch_AtenXlogyTensorOp : Torch_Op<"aten.xlogy.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::xlogy.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5145,7 +5261,8 @@ def Torch_AtenXlogyTensorOp : Torch_Op<"aten.xlogy.Tensor", [
 def Torch_AtenRsubScalarOp : Torch_Op<"aten.rsub.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::rsub.Scalar : (Tensor, Scalar, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -5172,7 +5289,8 @@ def Torch_AtenRsubScalarOp : Torch_Op<"aten.rsub.Scalar", [
 def Torch_AtenGeluOp : Torch_Op<"aten.gelu", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::gelu : (Tensor, str) -> (Tensor)`";
   let arguments = (ins
@@ -5196,7 +5314,8 @@ def Torch_AtenGeluOp : Torch_Op<"aten.gelu", [
 def Torch_AtenPowTensorScalarOp : Torch_Op<"aten.pow.Tensor_Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::pow.Tensor_Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -5220,7 +5339,8 @@ def Torch_AtenPowTensorScalarOp : Torch_Op<"aten.pow.Tensor_Scalar", [
 def Torch_AtenPowTensorTensorOp : Torch_Op<"aten.pow.Tensor_Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::pow.Tensor_Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5244,7 +5364,8 @@ def Torch_AtenPowTensorTensorOp : Torch_Op<"aten.pow.Tensor_Tensor", [
 def Torch_AtenPowScalarOp : Torch_Op<"aten.pow.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::pow.Scalar : (Scalar, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5268,7 +5389,8 @@ def Torch_AtenPowScalarOp : Torch_Op<"aten.pow.Scalar", [
 def Torch_AtenFloatPowerTensorTensorOp : Torch_Op<"aten.float_power.Tensor_Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::float_power.Tensor_Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5292,7 +5414,8 @@ def Torch_AtenFloatPowerTensorTensorOp : Torch_Op<"aten.float_power.Tensor_Tenso
 def Torch_AtenThresholdBackwardOp : Torch_Op<"aten.threshold_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::threshold_backward : (Tensor, Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -5317,7 +5440,8 @@ def Torch_AtenThresholdBackwardOp : Torch_Op<"aten.threshold_backward", [
 def Torch_AtenFloorDivideOp : Torch_Op<"aten.floor_divide", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::floor_divide : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5341,7 +5465,8 @@ def Torch_AtenFloorDivideOp : Torch_Op<"aten.floor_divide", [
 def Torch_AtenSoftplusOp : Torch_Op<"aten.softplus", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::softplus : (Tensor, Scalar, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -5366,7 +5491,8 @@ def Torch_AtenSoftplusOp : Torch_Op<"aten.softplus", [
 def Torch_AtenPreluOp : Torch_Op<"aten.prelu", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::prelu : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5390,7 +5516,8 @@ def Torch_AtenPreluOp : Torch_Op<"aten.prelu", [
 def Torch_AtenRad2degOp : Torch_Op<"aten.rad2deg", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::rad2deg : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5413,7 +5540,8 @@ def Torch_AtenRad2degOp : Torch_Op<"aten.rad2deg", [
 def Torch_AtenComplexOp : Torch_Op<"aten.complex", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::complex : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5436,7 +5564,8 @@ def Torch_AtenComplexOp : Torch_Op<"aten.complex", [
 
 def Torch_AtenRealOp : Torch_Op<"aten.real", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::real : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5458,7 +5587,8 @@ def Torch_AtenRealOp : Torch_Op<"aten.real", [
 
 def Torch_AtenImagOp : Torch_Op<"aten.imag", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::imag : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5480,7 +5610,8 @@ def Torch_AtenImagOp : Torch_Op<"aten.imag", [
 
 def Torch_AtenViewAsComplexOp : Torch_Op<"aten.view_as_complex", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::view_as_complex : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5502,7 +5633,8 @@ def Torch_AtenViewAsComplexOp : Torch_Op<"aten.view_as_complex", [
 
 def Torch_AtenViewAsRealOp : Torch_Op<"aten.view_as_real", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::view_as_real : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5525,7 +5657,8 @@ def Torch_AtenViewAsRealOp : Torch_Op<"aten.view_as_real", [
 def Torch_AtenIscloseOp : Torch_Op<"aten.isclose", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::isclose : (Tensor, Tensor, float, float, bool) -> (Tensor)`";
   let arguments = (ins
@@ -5552,7 +5685,8 @@ def Torch_AtenIscloseOp : Torch_Op<"aten.isclose", [
 def Torch_AtenGluOp : Torch_Op<"aten.glu", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::glu : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -5576,7 +5710,8 @@ def Torch_AtenGluOp : Torch_Op<"aten.glu", [
 def Torch_AtenLogSigmoidOp : Torch_Op<"aten.log_sigmoid", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::log_sigmoid : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5599,7 +5734,8 @@ def Torch_AtenLogSigmoidOp : Torch_Op<"aten.log_sigmoid", [
 def Torch_AtenHardshrinkOp : Torch_Op<"aten.hardshrink", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::hardshrink : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -5623,7 +5759,8 @@ def Torch_AtenHardshrinkOp : Torch_Op<"aten.hardshrink", [
 def Torch_AtenSoftshrinkOp : Torch_Op<"aten.softshrink", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::softshrink : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -5647,7 +5784,8 @@ def Torch_AtenSoftshrinkOp : Torch_Op<"aten.softshrink", [
 def Torch_AtenPolarOp : Torch_Op<"aten.polar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::polar : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -5671,7 +5809,8 @@ def Torch_AtenPolarOp : Torch_Op<"aten.polar", [
 def Torch_AtenUnbindCopyIntOp : Torch_Op<"aten.unbind_copy.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::unbind_copy.int : (Tensor, int) -> (Tensor[])`";
   let arguments = (ins
@@ -5695,7 +5834,8 @@ def Torch_AtenUnbindCopyIntOp : Torch_Op<"aten.unbind_copy.int", [
 def Torch_AtenSplitCopyTensorOp : Torch_Op<"aten.split_copy.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::split_copy.Tensor : (Tensor, int, int) -> (Tensor[])`";
   let arguments = (ins
@@ -5720,7 +5860,8 @@ def Torch_AtenSplitCopyTensorOp : Torch_Op<"aten.split_copy.Tensor", [
 def Torch_AtenSplitWithSizesCopyOp : Torch_Op<"aten.split_with_sizes_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::split_with_sizes_copy : (Tensor, int[], int) -> (Tensor[])`";
   let arguments = (ins
@@ -5745,7 +5886,8 @@ def Torch_AtenSplitWithSizesCopyOp : Torch_Op<"aten.split_with_sizes_copy", [
 def Torch_AtenUniformOp : Torch_Op<"aten.uniform", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::uniform : (Tensor, float, float, Generator?) -> (Tensor)`";
   let arguments = (ins
@@ -5796,7 +5938,8 @@ def Torch_AtenUniform_Op : Torch_Op<"aten.uniform_", [
 def Torch_AtenRandLikeOp : Torch_Op<"aten.rand_like", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::rand_like : (Tensor, int?, int?, Device?, bool?, int?) -> (Tensor)`";
   let arguments = (ins
@@ -5824,7 +5967,8 @@ def Torch_AtenRandLikeOp : Torch_Op<"aten.rand_like", [
 def Torch_AtenRandOp : Torch_Op<"aten.rand", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::rand : (int[], int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -5851,7 +5995,8 @@ def Torch_AtenRandOp : Torch_Op<"aten.rand", [
 def Torch_AtenBernoulliOp : Torch_Op<"aten.bernoulli", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bernoulli : (Tensor, Generator?) -> (Tensor)`";
   let arguments = (ins
@@ -5898,7 +6043,8 @@ def Torch_AtenBernoulli_FloatOp : Torch_Op<"aten.bernoulli_.float", [
 def Torch_AtenBernoulliPOp : Torch_Op<"aten.bernoulli.p", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bernoulli.p : (Tensor, float, Generator?) -> (Tensor)`";
   let arguments = (ins
@@ -5923,7 +6069,8 @@ def Torch_AtenBernoulliPOp : Torch_Op<"aten.bernoulli.p", [
 def Torch_AtenExponentialOp : Torch_Op<"aten.exponential", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::exponential : (Tensor, float, Generator?) -> (Tensor)`";
   let arguments = (ins
@@ -5948,7 +6095,8 @@ def Torch_AtenExponentialOp : Torch_Op<"aten.exponential", [
 def Torch_AtenMultinomialOp : Torch_Op<"aten.multinomial", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::multinomial : (Tensor, int, bool, Generator?) -> (Tensor)`";
   let arguments = (ins
@@ -5974,7 +6122,8 @@ def Torch_AtenMultinomialOp : Torch_Op<"aten.multinomial", [
 def Torch_AtenRandintLowOp : Torch_Op<"aten.randint.low", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::randint.low : (int, int, int[], int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -6003,7 +6152,8 @@ def Torch_AtenRandintLowOp : Torch_Op<"aten.randint.low", [
 def Torch_AtenRandintOp : Torch_Op<"aten.randint", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::randint : (int, int[], int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -6031,7 +6181,8 @@ def Torch_AtenRandintOp : Torch_Op<"aten.randint", [
 def Torch_AtenBernoulliTensorOp : Torch_Op<"aten.bernoulli.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bernoulli.Tensor : (Tensor, Tensor, Generator?) -> (Tensor)`";
   let arguments = (ins
@@ -6080,7 +6231,8 @@ def Torch_AtenBernoulli_TensorOp : Torch_Op<"aten.bernoulli_.Tensor", [
 def Torch_AtenRandnOp : Torch_Op<"aten.randn", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::randn : (int[], int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -6107,7 +6259,8 @@ def Torch_AtenRandnOp : Torch_Op<"aten.randn", [
 def Torch_AtenRandnGeneratorOp : Torch_Op<"aten.randn.generator", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::randn.generator : (int[], Generator?, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -6135,7 +6288,8 @@ def Torch_AtenRandnGeneratorOp : Torch_Op<"aten.randn.generator", [
 def Torch_AtenRandnLikeOp : Torch_Op<"aten.randn_like", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::randn_like : (Tensor, int?, int?, Device?, bool?, int?) -> (Tensor)`";
   let arguments = (ins
@@ -6163,7 +6317,8 @@ def Torch_AtenRandnLikeOp : Torch_Op<"aten.randn_like", [
 def Torch_AtenRandomOp : Torch_Op<"aten.random", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::random : (Tensor, Generator?) -> (Tensor)`";
   let arguments = (ins
@@ -6187,7 +6342,8 @@ def Torch_AtenRandomOp : Torch_Op<"aten.random", [
 def Torch_AtenRandomFromOp : Torch_Op<"aten.random.from", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::random.from : (Tensor, int, int?, Generator?) -> (Tensor)`";
   let arguments = (ins
@@ -6213,7 +6369,8 @@ def Torch_AtenRandomFromOp : Torch_Op<"aten.random.from", [
 def Torch_AtenTriuOp : Torch_Op<"aten.triu", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::triu : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -6260,7 +6417,8 @@ def Torch_AtenTriu_Op : Torch_Op<"aten.triu_", [
 def Torch_AtenTrilOp : Torch_Op<"aten.tril", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::tril : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -6307,7 +6465,8 @@ def Torch_AtenTril_Op : Torch_Op<"aten.tril_", [
 def Torch_AtenIndexPutOp : Torch_Op<"aten.index_put", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::index_put : (Tensor, Tensor?[], Tensor, bool) -> (Tensor)`";
   let arguments = (ins
@@ -6358,7 +6517,8 @@ def Torch_AtenIndexPut_Op : Torch_Op<"aten.index_put_", [
 def Torch_AtenIndexPutHackedTwinOp : Torch_Op<"aten.index_put.hacked_twin", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::index_put.hacked_twin : (Tensor, Tensor[], Tensor, bool) -> (Tensor)`";
   let arguments = (ins
@@ -6409,7 +6569,8 @@ def Torch_AtenIndexPut_HackedTwinOp : Torch_Op<"aten.index_put_.hacked_twin", [
 def Torch_Aten_UnsafeIndexPutHackedTwinOp : Torch_Op<"aten._unsafe_index_put.hacked_twin", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_unsafe_index_put.hacked_twin : (Tensor, Tensor[], Tensor, bool) -> (Tensor)`";
   let arguments = (ins
@@ -6435,7 +6596,8 @@ def Torch_Aten_UnsafeIndexPutHackedTwinOp : Torch_Op<"aten._unsafe_index_put.hac
 def Torch_AtenLinearOp : Torch_Op<"aten.linear", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::linear : (Tensor, Tensor, Tensor?) -> (Tensor)`";
   let arguments = (ins
@@ -6460,7 +6622,8 @@ def Torch_AtenLinearOp : Torch_Op<"aten.linear", [
 def Torch_AtenMmOp : Torch_Op<"aten.mm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mm : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -6484,7 +6647,8 @@ def Torch_AtenMmOp : Torch_Op<"aten.mm", [
 def Torch_Aten_IntMmOp : Torch_Op<"aten._int_mm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_int_mm : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -6508,7 +6672,8 @@ def Torch_Aten_IntMmOp : Torch_Op<"aten._int_mm", [
 def Torch_AtenAddmmOp : Torch_Op<"aten.addmm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::addmm : (Tensor, Tensor, Tensor, Scalar, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -6535,7 +6700,8 @@ def Torch_AtenAddmmOp : Torch_Op<"aten.addmm", [
 def Torch_AtenMatmulOp : Torch_Op<"aten.matmul", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::matmul : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -6559,7 +6725,8 @@ def Torch_AtenMatmulOp : Torch_Op<"aten.matmul", [
 def Torch_AtenMvOp : Torch_Op<"aten.mv", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mv : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -6583,7 +6750,8 @@ def Torch_AtenMvOp : Torch_Op<"aten.mv", [
 def Torch_AtenDotOp : Torch_Op<"aten.dot", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::dot : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -6608,7 +6776,8 @@ def Torch_AtenDotOp : Torch_Op<"aten.dot", [
 def Torch_AtenOuterOp : Torch_Op<"aten.outer", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::outer : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -6632,7 +6801,8 @@ def Torch_AtenOuterOp : Torch_Op<"aten.outer", [
 def Torch_AtenCosineSimilarityOp : Torch_Op<"aten.cosine_similarity", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::cosine_similarity : (Tensor, Tensor, int, float) -> (Tensor)`";
   let arguments = (ins
@@ -6658,7 +6828,8 @@ def Torch_AtenCosineSimilarityOp : Torch_Op<"aten.cosine_similarity", [
 def Torch_AtenConv3dOp : Torch_Op<"aten.conv3d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::conv3d : (Tensor, Tensor, Tensor?, int[], int[], int[], int) -> (Tensor)`";
   let arguments = (ins
@@ -6687,7 +6858,8 @@ def Torch_AtenConv3dOp : Torch_Op<"aten.conv3d", [
 def Torch_AtenConv2dOp : Torch_Op<"aten.conv2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::conv2d : (Tensor, Tensor, Tensor?, int[], int[], int[], int) -> (Tensor)`";
   let arguments = (ins
@@ -6716,7 +6888,8 @@ def Torch_AtenConv2dOp : Torch_Op<"aten.conv2d", [
 def Torch_AtenConv1dOp : Torch_Op<"aten.conv1d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::conv1d : (Tensor, Tensor, Tensor?, int[], int[], int[], int) -> (Tensor)`";
   let arguments = (ins
@@ -6745,7 +6918,8 @@ def Torch_AtenConv1dOp : Torch_Op<"aten.conv1d", [
 def Torch_AtenConvTranspose1dOp : Torch_Op<"aten.conv_transpose1d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::conv_transpose1d : (Tensor, Tensor, Tensor?, int[], int[], int[], int, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -6775,7 +6949,8 @@ def Torch_AtenConvTranspose1dOp : Torch_Op<"aten.conv_transpose1d", [
 def Torch_AtenConvTranspose2dInputOp : Torch_Op<"aten.conv_transpose2d.input", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::conv_transpose2d.input : (Tensor, Tensor, Tensor?, int[], int[], int[], int, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -6805,7 +6980,8 @@ def Torch_AtenConvTranspose2dInputOp : Torch_Op<"aten.conv_transpose2d.input", [
 def Torch_AtenConvTranspose3dInputOp : Torch_Op<"aten.conv_transpose3d.input", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::conv_transpose3d.input : (Tensor, Tensor, Tensor?, int[], int[], int[], int, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -6835,7 +7011,8 @@ def Torch_AtenConvTranspose3dInputOp : Torch_Op<"aten.conv_transpose3d.input", [
 def Torch_AtenConvTbcOp : Torch_Op<"aten.conv_tbc", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::conv_tbc : (Tensor, Tensor, Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -6861,7 +7038,8 @@ def Torch_AtenConvTbcOp : Torch_Op<"aten.conv_tbc", [
 def Torch_AtenConvTbcBackwardOp : Torch_Op<"aten.conv_tbc_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::conv_tbc_backward : (Tensor, Tensor, Tensor, Tensor, int) -> (Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -6890,7 +7068,8 @@ def Torch_AtenConvTbcBackwardOp : Torch_Op<"aten.conv_tbc_backward", [
 def Torch_AtenConvolutionOp : Torch_Op<"aten.convolution", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::convolution : (Tensor, Tensor, Tensor?, int[], int[], int[], bool, int[], int) -> (Tensor)`";
   let arguments = (ins
@@ -6921,7 +7100,8 @@ def Torch_AtenConvolutionOp : Torch_Op<"aten.convolution", [
 def Torch_Aten_ConvolutionOp : Torch_Op<"aten._convolution", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_convolution : (Tensor, Tensor, Tensor?, int[], int[], int[], bool, int[], int, bool, bool, bool, bool) -> (Tensor)`";
   let arguments = (ins
@@ -6956,7 +7136,8 @@ def Torch_Aten_ConvolutionOp : Torch_Op<"aten._convolution", [
 def Torch_Aten_ConvolutionDeprecatedOp : Torch_Op<"aten._convolution.deprecated", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_convolution.deprecated : (Tensor, Tensor, Tensor?, int[], int[], int[], bool, int[], int, bool, bool, bool) -> (Tensor)`";
   let arguments = (ins
@@ -6990,7 +7171,8 @@ def Torch_Aten_ConvolutionDeprecatedOp : Torch_Op<"aten._convolution.deprecated"
 def Torch_AtenRollOp : Torch_Op<"aten.roll", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::roll : (Tensor, int[], int[]) -> (Tensor)`";
   let arguments = (ins
@@ -7015,7 +7197,8 @@ def Torch_AtenRollOp : Torch_Op<"aten.roll", [
 def Torch_AtenConvolutionBackwardOp : Torch_Op<"aten.convolution_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::convolution_backward : (Tensor, Tensor, Tensor, int[]?, int[], int[], int[], bool, int[], int, bool[]) -> (Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -7050,7 +7233,8 @@ def Torch_AtenConvolutionBackwardOp : Torch_Op<"aten.convolution_backward", [
 def Torch_AtenFlipOp : Torch_Op<"aten.flip", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::flip : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -7074,7 +7258,8 @@ def Torch_AtenFlipOp : Torch_Op<"aten.flip", [
 def Torch_AtenNativeBatchNormOp : Torch_Op<"aten.native_batch_norm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::native_batch_norm : (Tensor, Tensor?, Tensor?, Tensor?, Tensor?, bool, float, float) -> (Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -7106,7 +7291,8 @@ def Torch_AtenNativeBatchNormOp : Torch_Op<"aten.native_batch_norm", [
 def Torch_AtenBatchNormOp : Torch_Op<"aten.batch_norm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::batch_norm : (Tensor, Tensor?, Tensor?, Tensor?, Tensor?, bool, float, float, bool) -> (Tensor)`";
   let arguments = (ins
@@ -7137,7 +7323,8 @@ def Torch_AtenBatchNormOp : Torch_Op<"aten.batch_norm", [
 def Torch_AtenInstanceNormOp : Torch_Op<"aten.instance_norm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::instance_norm : (Tensor, Tensor?, Tensor?, Tensor?, Tensor?, bool, float, float, bool) -> (Tensor)`";
   let arguments = (ins
@@ -7168,7 +7355,8 @@ def Torch_AtenInstanceNormOp : Torch_Op<"aten.instance_norm", [
 def Torch_AtenNativeGroupNormOp : Torch_Op<"aten.native_group_norm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::native_group_norm : (Tensor, Tensor?, Tensor?, int, int, int, int, float) -> (Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -7200,7 +7388,8 @@ def Torch_AtenNativeGroupNormOp : Torch_Op<"aten.native_group_norm", [
 def Torch_AtenGroupNormOp : Torch_Op<"aten.group_norm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::group_norm : (Tensor, int, Tensor?, Tensor?, float, bool) -> (Tensor)`";
   let arguments = (ins
@@ -7228,7 +7417,8 @@ def Torch_AtenGroupNormOp : Torch_Op<"aten.group_norm", [
 def Torch_AtenLayerNormOp : Torch_Op<"aten.layer_norm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::layer_norm : (Tensor, int[], Tensor?, Tensor?, float, bool) -> (Tensor)`";
   let arguments = (ins
@@ -7256,7 +7446,8 @@ def Torch_AtenLayerNormOp : Torch_Op<"aten.layer_norm", [
 def Torch_AtenRenormOp : Torch_Op<"aten.renorm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::renorm : (Tensor, Scalar, int, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -7283,7 +7474,8 @@ def Torch_AtenRenormOp : Torch_Op<"aten.renorm", [
 def Torch_AtenNormScalarOp : Torch_Op<"aten.norm.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::norm.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -7308,7 +7500,8 @@ def Torch_AtenNormScalarOp : Torch_Op<"aten.norm.Scalar", [
 def Torch_AtenNormScalarOptDimOp : Torch_Op<"aten.norm.ScalarOpt_dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::norm.ScalarOpt_dim : (Tensor, Scalar?, int[], bool) -> (Tensor)`";
   let arguments = (ins
@@ -7334,7 +7527,8 @@ def Torch_AtenNormScalarOptDimOp : Torch_Op<"aten.norm.ScalarOpt_dim", [
 def Torch_AtenNormalFunctionalOp : Torch_Op<"aten.normal_functional", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::normal_functional : (Tensor, float, float, Generator?) -> (Tensor)`";
   let arguments = (ins
@@ -7360,7 +7554,8 @@ def Torch_AtenNormalFunctionalOp : Torch_Op<"aten.normal_functional", [
 def Torch_AtenNativeLayerNormOp : Torch_Op<"aten.native_layer_norm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::native_layer_norm : (Tensor, int[], Tensor?, Tensor?, float) -> (Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -7389,7 +7584,8 @@ def Torch_AtenNativeLayerNormOp : Torch_Op<"aten.native_layer_norm", [
 def Torch_AtenMaxPool1dOp : Torch_Op<"aten.max_pool1d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max_pool1d : (Tensor, int[], int[], int[], int[], bool) -> (Tensor)`";
   let arguments = (ins
@@ -7417,7 +7613,8 @@ def Torch_AtenMaxPool1dOp : Torch_Op<"aten.max_pool1d", [
 def Torch_AtenMaxPool1dWithIndicesOp : Torch_Op<"aten.max_pool1d_with_indices", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max_pool1d_with_indices : (Tensor, int[], int[], int[], int[], bool) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -7446,7 +7643,8 @@ def Torch_AtenMaxPool1dWithIndicesOp : Torch_Op<"aten.max_pool1d_with_indices",
 def Torch_AtenMaxPool2dOp : Torch_Op<"aten.max_pool2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max_pool2d : (Tensor, int[], int[], int[], int[], bool) -> (Tensor)`";
   let arguments = (ins
@@ -7474,7 +7672,8 @@ def Torch_AtenMaxPool2dOp : Torch_Op<"aten.max_pool2d", [
 def Torch_AtenMaxUnpool2dOp : Torch_Op<"aten.max_unpool2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max_unpool2d : (Tensor, Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -7499,7 +7698,8 @@ def Torch_AtenMaxUnpool2dOp : Torch_Op<"aten.max_unpool2d", [
 def Torch_AtenMaxPool2dWithIndicesOp : Torch_Op<"aten.max_pool2d_with_indices", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max_pool2d_with_indices : (Tensor, int[], int[], int[], int[], bool) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -7529,7 +7729,8 @@ def Torch_AtenMaxPool2dWithIndicesOp : Torch_Op<"aten.max_pool2d_with_indices",
 def Torch_AtenMaxPool2dWithIndicesBackwardOp : Torch_Op<"aten.max_pool2d_with_indices_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max_pool2d_with_indices_backward : (Tensor, Tensor, int[], int[], int[], int[], bool, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -7559,7 +7760,8 @@ def Torch_AtenMaxPool2dWithIndicesBackwardOp : Torch_Op<"aten.max_pool2d_with_in
 def Torch_AtenMaxPool3dOp : Torch_Op<"aten.max_pool3d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max_pool3d : (Tensor, int[], int[], int[], int[], bool) -> (Tensor)`";
   let arguments = (ins
@@ -7587,7 +7789,8 @@ def Torch_AtenMaxPool3dOp : Torch_Op<"aten.max_pool3d", [
 def Torch_AtenMaxUnpool3dOp : Torch_Op<"aten.max_unpool3d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max_unpool3d : (Tensor, Tensor, int[], int[], int[]) -> (Tensor)`";
   let arguments = (ins
@@ -7614,7 +7817,8 @@ def Torch_AtenMaxUnpool3dOp : Torch_Op<"aten.max_unpool3d", [
 def Torch_AtenMaxPool3dWithIndicesOp : Torch_Op<"aten.max_pool3d_with_indices", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max_pool3d_with_indices : (Tensor, int[], int[], int[], int[], bool) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -7644,7 +7848,8 @@ def Torch_AtenMaxPool3dWithIndicesOp : Torch_Op<"aten.max_pool3d_with_indices",
 def Torch_AtenMaxPool3dWithIndicesBackwardOp : Torch_Op<"aten.max_pool3d_with_indices_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max_pool3d_with_indices_backward : (Tensor, Tensor, int[], int[], int[], int[], bool, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -7674,7 +7879,8 @@ def Torch_AtenMaxPool3dWithIndicesBackwardOp : Torch_Op<"aten.max_pool3d_with_in
 def Torch_AtenAvgPool1dOp : Torch_Op<"aten.avg_pool1d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::avg_pool1d : (Tensor, int[], int[], int[], bool, bool) -> (Tensor)`";
   let arguments = (ins
@@ -7702,7 +7908,8 @@ def Torch_AtenAvgPool1dOp : Torch_Op<"aten.avg_pool1d", [
 def Torch_AtenAvgPool2dOp : Torch_Op<"aten.avg_pool2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::avg_pool2d : (Tensor, int[], int[], int[], bool, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -7731,7 +7938,8 @@ def Torch_AtenAvgPool2dOp : Torch_Op<"aten.avg_pool2d", [
 def Torch_AtenAvgPool2dBackwardOp : Torch_Op<"aten.avg_pool2d_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::avg_pool2d_backward : (Tensor, Tensor, int[], int[], int[], bool, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -7761,7 +7969,8 @@ def Torch_AtenAvgPool2dBackwardOp : Torch_Op<"aten.avg_pool2d_backward", [
 def Torch_AtenAvgPool3dOp : Torch_Op<"aten.avg_pool3d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::avg_pool3d : (Tensor, int[], int[], int[], bool, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -7790,7 +7999,8 @@ def Torch_AtenAvgPool3dOp : Torch_Op<"aten.avg_pool3d", [
 def Torch_AtenAvgPool3dBackwardOp : Torch_Op<"aten.avg_pool3d_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::avg_pool3d_backward : (Tensor, Tensor, int[], int[], int[], bool, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -7820,7 +8030,8 @@ def Torch_AtenAvgPool3dBackwardOp : Torch_Op<"aten.avg_pool3d_backward", [
 def Torch_AtenSoftmaxIntOp : Torch_Op<"aten.softmax.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::softmax.int : (Tensor, int, int?) -> (Tensor)`";
   let arguments = (ins
@@ -7845,7 +8056,8 @@ def Torch_AtenSoftmaxIntOp : Torch_Op<"aten.softmax.int", [
 def Torch_AtenLogSoftmaxIntOp : Torch_Op<"aten.log_softmax.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::log_softmax.int : (Tensor, int, int?) -> (Tensor)`";
   let arguments = (ins
@@ -7870,7 +8082,8 @@ def Torch_AtenLogSoftmaxIntOp : Torch_Op<"aten.log_softmax.int", [
 def Torch_Aten_LogSoftmaxOp : Torch_Op<"aten._log_softmax", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_log_softmax : (Tensor, int, bool) -> (Tensor)`";
   let arguments = (ins
@@ -7895,7 +8108,8 @@ def Torch_Aten_LogSoftmaxOp : Torch_Op<"aten._log_softmax", [
 def Torch_AtenScatterSrcOp : Torch_Op<"aten.scatter.src", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::scatter.src : (Tensor, int, Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -7946,7 +8160,8 @@ def Torch_AtenScatter_SrcOp : Torch_Op<"aten.scatter_.src", [
 def Torch_AtenScatterValueOp : Torch_Op<"aten.scatter.value", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::scatter.value : (Tensor, int, Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -7997,7 +8212,8 @@ def Torch_AtenScatter_ValueOp : Torch_Op<"aten.scatter_.value", [
 def Torch_AtenMaskedScatterOp : Torch_Op<"aten.masked_scatter", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::masked_scatter : (Tensor, Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -8046,7 +8262,8 @@ def Torch_AtenMaskedScatter_Op : Torch_Op<"aten.masked_scatter_", [
 def Torch_Aten__InterpolateSizeListScaleListOp : Torch_Op<"aten.__interpolate.size_list_scale_list", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__interpolate.size_list_scale_list : (Tensor, int[]?, float[]?, str, bool?, bool?, bool) -> (Tensor)`";
   let arguments = (ins
@@ -8075,7 +8292,8 @@ def Torch_Aten__InterpolateSizeListScaleListOp : Torch_Op<"aten.__interpolate.si
 def Torch_AtenAdaptiveAvgPool1dOp : Torch_Op<"aten.adaptive_avg_pool1d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::adaptive_avg_pool1d : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -8099,7 +8317,8 @@ def Torch_AtenAdaptiveAvgPool1dOp : Torch_Op<"aten.adaptive_avg_pool1d", [
 def Torch_AtenAdaptiveAvgPool2dOp : Torch_Op<"aten.adaptive_avg_pool2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::adaptive_avg_pool2d : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -8123,7 +8342,8 @@ def Torch_AtenAdaptiveAvgPool2dOp : Torch_Op<"aten.adaptive_avg_pool2d", [
 def Torch_Aten_AdaptiveAvgPool2dOp : Torch_Op<"aten._adaptive_avg_pool2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_adaptive_avg_pool2d : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -8148,7 +8368,8 @@ def Torch_Aten_AdaptiveAvgPool2dOp : Torch_Op<"aten._adaptive_avg_pool2d", [
 def Torch_Aten_AdaptiveAvgPool2dBackwardOp : Torch_Op<"aten._adaptive_avg_pool2d_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_adaptive_avg_pool2d_backward : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -8172,7 +8393,8 @@ def Torch_Aten_AdaptiveAvgPool2dBackwardOp : Torch_Op<"aten._adaptive_avg_pool2d
 def Torch_AtenAdaptiveAvgPool3dOp : Torch_Op<"aten.adaptive_avg_pool3d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::adaptive_avg_pool3d : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -8196,7 +8418,8 @@ def Torch_AtenAdaptiveAvgPool3dOp : Torch_Op<"aten.adaptive_avg_pool3d", [
 def Torch_Aten_AdaptiveAvgPool3dOp : Torch_Op<"aten._adaptive_avg_pool3d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_adaptive_avg_pool3d : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -8220,7 +8443,8 @@ def Torch_Aten_AdaptiveAvgPool3dOp : Torch_Op<"aten._adaptive_avg_pool3d", [
 def Torch_Aten_AdaptiveAvgPool3dBackwardOp : Torch_Op<"aten._adaptive_avg_pool3d_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_adaptive_avg_pool3d_backward : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -8244,7 +8468,8 @@ def Torch_Aten_AdaptiveAvgPool3dBackwardOp : Torch_Op<"aten._adaptive_avg_pool3d
 def Torch_AtenAdaptiveMaxPool1dOp : Torch_Op<"aten.adaptive_max_pool1d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::adaptive_max_pool1d : (Tensor, int[]) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -8269,7 +8494,8 @@ def Torch_AtenAdaptiveMaxPool1dOp : Torch_Op<"aten.adaptive_max_pool1d", [
 def Torch_AtenAdaptiveMaxPool2dOp : Torch_Op<"aten.adaptive_max_pool2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::adaptive_max_pool2d : (Tensor, int[]) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -8294,7 +8520,8 @@ def Torch_AtenAdaptiveMaxPool2dOp : Torch_Op<"aten.adaptive_max_pool2d", [
 def Torch_AtenAdaptiveMaxPool3dOp : Torch_Op<"aten.adaptive_max_pool3d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::adaptive_max_pool3d : (Tensor, int[]) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -8319,7 +8546,8 @@ def Torch_AtenAdaptiveMaxPool3dOp : Torch_Op<"aten.adaptive_max_pool3d", [
 def Torch_AtenTopkOp : Torch_Op<"aten.topk", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::topk : (Tensor, int, int, bool, bool) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -8346,7 +8574,8 @@ def Torch_AtenTopkOp : Torch_Op<"aten.topk", [
 
 def Torch_AtenTransposeIntOp : Torch_Op<"aten.transpose.int", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::transpose.int : (Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -8372,7 +8601,8 @@ def Torch_AtenTransposeIntOp : Torch_Op<"aten.transpose.int", [
 def Torch_AtenPixelShuffleOp : Torch_Op<"aten.pixel_shuffle", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::pixel_shuffle : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -8395,7 +8625,8 @@ def Torch_AtenPixelShuffleOp : Torch_Op<"aten.pixel_shuffle", [
 
 def Torch_AtenPermuteOp : Torch_Op<"aten.permute", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::permute : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -8419,7 +8650,8 @@ def Torch_AtenPermuteOp : Torch_Op<"aten.permute", [
 
 def Torch_AtenMovedimIntOp : Torch_Op<"aten.movedim.int", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::movedim.int : (Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -8444,7 +8676,8 @@ def Torch_AtenMovedimIntOp : Torch_Op<"aten.movedim.int", [
 def Torch_AtenBmmOp : Torch_Op<"aten.bmm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bmm : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -8468,7 +8701,8 @@ def Torch_AtenBmmOp : Torch_Op<"aten.bmm", [
 def Torch_AtenCumsumOp : Torch_Op<"aten.cumsum", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::cumsum : (Tensor, int, int?) -> (Tensor)`";
   let arguments = (ins
@@ -8493,7 +8727,8 @@ def Torch_AtenCumsumOp : Torch_Op<"aten.cumsum", [
 def Torch_AtenCumprodOp : Torch_Op<"aten.cumprod", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::cumprod : (Tensor, int, int?) -> (Tensor)`";
   let arguments = (ins
@@ -8518,7 +8753,8 @@ def Torch_AtenCumprodOp : Torch_Op<"aten.cumprod", [
 def Torch_AtenFloorDivideScalarOp : Torch_Op<"aten.floor_divide.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::floor_divide.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -8542,7 +8778,8 @@ def Torch_AtenFloorDivideScalarOp : Torch_Op<"aten.floor_divide.Scalar", [
 def Torch_AtenLogsumexpOp : Torch_Op<"aten.logsumexp", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::logsumexp : (Tensor, int[], bool) -> (Tensor)`";
   let arguments = (ins
@@ -8567,7 +8804,8 @@ def Torch_AtenLogsumexpOp : Torch_Op<"aten.logsumexp", [
 def Torch_AtenMeanDimOp : Torch_Op<"aten.mean.dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mean.dim : (Tensor, int[]?, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -8593,7 +8831,8 @@ def Torch_AtenMeanDimOp : Torch_Op<"aten.mean.dim", [
 def Torch_Aten__And__TensorOp : Torch_Op<"aten.__and__.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__and__.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -8617,7 +8856,8 @@ def Torch_Aten__And__TensorOp : Torch_Op<"aten.__and__.Tensor", [
 def Torch_Aten__And__ScalarOp : Torch_Op<"aten.__and__.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__and__.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -8642,7 +8882,8 @@ def Torch_Aten__And__ScalarOp : Torch_Op<"aten.__and__.Scalar", [
 def Torch_Aten__Or__TensorOp : Torch_Op<"aten.__or__.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__or__.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -8667,7 +8908,8 @@ def Torch_Aten__Or__TensorOp : Torch_Op<"aten.__or__.Tensor", [
 def Torch_Aten__Lshift__ScalarOp : Torch_Op<"aten.__lshift__.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__lshift__.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -8691,7 +8933,8 @@ def Torch_Aten__Lshift__ScalarOp : Torch_Op<"aten.__lshift__.Scalar", [
 def Torch_Aten__Rshift__ScalarOp : Torch_Op<"aten.__rshift__.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__rshift__.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -8715,7 +8958,8 @@ def Torch_Aten__Rshift__ScalarOp : Torch_Op<"aten.__rshift__.Scalar", [
 def Torch_Aten_SoftmaxOp : Torch_Op<"aten._softmax", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_softmax : (Tensor, int, bool) -> (Tensor)`";
   let arguments = (ins
@@ -8740,7 +8984,8 @@ def Torch_Aten_SoftmaxOp : Torch_Op<"aten._softmax", [
 def Torch_Aten_SafeSoftmaxOp : Torch_Op<"aten._safe_softmax", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_safe_softmax : (Tensor, int, int?) -> (Tensor)`";
   let arguments = (ins
@@ -8765,7 +9010,8 @@ def Torch_Aten_SafeSoftmaxOp : Torch_Op<"aten._safe_softmax", [
 def Torch_AtenMeanOp : Torch_Op<"aten.mean", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mean : (Tensor, int?) -> (Tensor)`";
   let arguments = (ins
@@ -8789,7 +9035,8 @@ def Torch_AtenMeanOp : Torch_Op<"aten.mean", [
 def Torch_AtenStdOp : Torch_Op<"aten.std", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::std : (Tensor, bool) -> (Tensor)`";
   let arguments = (ins
@@ -8813,7 +9060,8 @@ def Torch_AtenStdOp : Torch_Op<"aten.std", [
 def Torch_AtenStdDimOp : Torch_Op<"aten.std.dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::std.dim : (Tensor, int[]?, bool, bool) -> (Tensor)`";
   let arguments = (ins
@@ -8839,7 +9087,8 @@ def Torch_AtenStdDimOp : Torch_Op<"aten.std.dim", [
 def Torch_AtenStdCorrectionOp : Torch_Op<"aten.std.correction", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::std.correction : (Tensor, int[]?, Scalar?, bool) -> (Tensor)`";
   let arguments = (ins
@@ -8865,7 +9114,8 @@ def Torch_AtenStdCorrectionOp : Torch_Op<"aten.std.correction", [
 def Torch_AtenVarOp : Torch_Op<"aten.var", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::var : (Tensor, bool) -> (Tensor)`";
   let arguments = (ins
@@ -8889,7 +9139,8 @@ def Torch_AtenVarOp : Torch_Op<"aten.var", [
 def Torch_AtenVarDimOp : Torch_Op<"aten.var.dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::var.dim : (Tensor, int[]?, bool, bool) -> (Tensor)`";
   let arguments = (ins
@@ -8915,7 +9166,8 @@ def Torch_AtenVarDimOp : Torch_Op<"aten.var.dim", [
 def Torch_AtenVarCorrectionOp : Torch_Op<"aten.var.correction", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::var.correction : (Tensor, int[]?, Scalar?, bool) -> (Tensor)`";
   let arguments = (ins
@@ -8941,7 +9193,8 @@ def Torch_AtenVarCorrectionOp : Torch_Op<"aten.var.correction", [
 def Torch_AtenVarMeanCorrectionOp : Torch_Op<"aten.var_mean.correction", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::var_mean.correction : (Tensor, int[]?, Scalar?, bool) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -8968,7 +9221,8 @@ def Torch_AtenVarMeanCorrectionOp : Torch_Op<"aten.var_mean.correction", [
 def Torch_AtenVarMeanOp : Torch_Op<"aten.var_mean", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::var_mean : (Tensor, bool) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -8993,7 +9247,8 @@ def Torch_AtenVarMeanOp : Torch_Op<"aten.var_mean", [
 def Torch_AtenVarMeanDimOp : Torch_Op<"aten.var_mean.dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::var_mean.dim : (Tensor, int[]?, bool, bool) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -9020,7 +9275,8 @@ def Torch_AtenVarMeanDimOp : Torch_Op<"aten.var_mean.dim", [
 def Torch_AtenNllLoss2dForwardOp : Torch_Op<"aten.nll_loss2d_forward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::nll_loss2d_forward : (Tensor, Tensor, Tensor?, int, int) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -9048,7 +9304,8 @@ def Torch_AtenNllLoss2dForwardOp : Torch_Op<"aten.nll_loss2d_forward", [
 def Torch_AtenNllLoss2dBackwardOp : Torch_Op<"aten.nll_loss2d_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::nll_loss2d_backward : (Tensor, Tensor, Tensor, Tensor?, int, int, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -9077,7 +9334,8 @@ def Torch_AtenNllLoss2dBackwardOp : Torch_Op<"aten.nll_loss2d_backward", [
 def Torch_AtenNllLossForwardOp : Torch_Op<"aten.nll_loss_forward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::nll_loss_forward : (Tensor, Tensor, Tensor?, int, int) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -9105,7 +9363,8 @@ def Torch_AtenNllLossForwardOp : Torch_Op<"aten.nll_loss_forward", [
 def Torch_AtenNllLossBackwardOp : Torch_Op<"aten.nll_loss_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::nll_loss_backward : (Tensor, Tensor, Tensor, Tensor?, int, int, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -9134,7 +9393,8 @@ def Torch_AtenNllLossBackwardOp : Torch_Op<"aten.nll_loss_backward", [
 def Torch_AtenBincountOp : Torch_Op<"aten.bincount", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bincount : (Tensor, Tensor?, int) -> (Tensor)`";
   let arguments = (ins
@@ -9159,7 +9419,8 @@ def Torch_AtenBincountOp : Torch_Op<"aten.bincount", [
 def Torch_AtenLinalgVectorNormOp : Torch_Op<"aten.linalg_vector_norm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::linalg_vector_norm : (Tensor, Scalar, int[]?, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -9186,7 +9447,8 @@ def Torch_AtenLinalgVectorNormOp : Torch_Op<"aten.linalg_vector_norm", [
 def Torch_AtenLinalgNormOp : Torch_Op<"aten.linalg_norm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::linalg_norm : (Tensor, Scalar?, int[]?, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -9213,7 +9475,8 @@ def Torch_AtenLinalgNormOp : Torch_Op<"aten.linalg_norm", [
 def Torch_AtenLinalgQrOp : Torch_Op<"aten.linalg_qr", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::linalg_qr : (Tensor, str) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -9238,7 +9501,8 @@ def Torch_AtenLinalgQrOp : Torch_Op<"aten.linalg_qr", [
 def Torch_AtenLinalgDetOp : Torch_Op<"aten.linalg_det", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::linalg_det : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -9261,7 +9525,8 @@ def Torch_AtenLinalgDetOp : Torch_Op<"aten.linalg_det", [
 def Torch_Aten_LinalgDetOp : Torch_Op<"aten._linalg_det", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_linalg_det : (Tensor) -> (Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -9286,7 +9551,8 @@ def Torch_Aten_LinalgDetOp : Torch_Op<"aten._linalg_det", [
 def Torch_AtenLinalgSlogdetOp : Torch_Op<"aten.linalg_slogdet", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::linalg_slogdet : (Tensor) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -9310,7 +9576,8 @@ def Torch_AtenLinalgSlogdetOp : Torch_Op<"aten.linalg_slogdet", [
 def Torch_AtenFrobeniusNormDimOp : Torch_Op<"aten.frobenius_norm.dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::frobenius_norm.dim : (Tensor, int[], bool) -> (Tensor)`";
   let arguments = (ins
@@ -9335,7 +9602,8 @@ def Torch_AtenFrobeniusNormDimOp : Torch_Op<"aten.frobenius_norm.dim", [
 def Torch_AtenMseLossOp : Torch_Op<"aten.mse_loss", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mse_loss : (Tensor, Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -9360,7 +9628,8 @@ def Torch_AtenMseLossOp : Torch_Op<"aten.mse_loss", [
 def Torch_AtenMseLossBackwardOp : Torch_Op<"aten.mse_loss_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mse_loss_backward : (Tensor, Tensor, Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -9386,7 +9655,8 @@ def Torch_AtenMseLossBackwardOp : Torch_Op<"aten.mse_loss_backward", [
 def Torch_AtenL1LossOp : Torch_Op<"aten.l1_loss", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::l1_loss : (Tensor, Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -9411,7 +9681,8 @@ def Torch_AtenL1LossOp : Torch_Op<"aten.l1_loss", [
 def Torch_AtenUpsampleNearest2dBackwardOp : Torch_Op<"aten.upsample_nearest2d_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::upsample_nearest2d_backward : (Tensor, int[], int[], float?, float?) -> (Tensor)`";
   let arguments = (ins
@@ -9438,7 +9709,8 @@ def Torch_AtenUpsampleNearest2dBackwardOp : Torch_Op<"aten.upsample_nearest2d_ba
 def Torch_AtenCrossEntropyLossOp : Torch_Op<"aten.cross_entropy_loss", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::cross_entropy_loss : (Tensor, Tensor, Tensor?, int, int, float) -> (Tensor)`";
   let arguments = (ins
@@ -9466,7 +9738,8 @@ def Torch_AtenCrossEntropyLossOp : Torch_Op<"aten.cross_entropy_loss", [
 def Torch_AtenNonzeroOp : Torch_Op<"aten.nonzero", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::nonzero : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -9489,7 +9762,8 @@ def Torch_AtenNonzeroOp : Torch_Op<"aten.nonzero", [
 def Torch_AtenNonzeroNumpyOp : Torch_Op<"aten.nonzero_numpy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::nonzero_numpy : (Tensor) -> (Tensor[])`";
   let arguments = (ins
@@ -9512,7 +9786,8 @@ def Torch_AtenNonzeroNumpyOp : Torch_Op<"aten.nonzero_numpy", [
 def Torch_AtenNonzeroStaticOp : Torch_Op<"aten.nonzero_static", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::nonzero_static : (Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -9537,7 +9812,8 @@ def Torch_AtenNonzeroStaticOp : Torch_Op<"aten.nonzero_static", [
 def Torch_AtenBinaryCrossEntropyOp : Torch_Op<"aten.binary_cross_entropy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::binary_cross_entropy : (Tensor, Tensor, Tensor?, int) -> (Tensor)`";
   let arguments = (ins
@@ -9563,7 +9839,8 @@ def Torch_AtenBinaryCrossEntropyOp : Torch_Op<"aten.binary_cross_entropy", [
 def Torch_AtenBinaryCrossEntropyBackwardOp : Torch_Op<"aten.binary_cross_entropy_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::binary_cross_entropy_backward : (Tensor, Tensor, Tensor, Tensor?, int) -> (Tensor)`";
   let arguments = (ins
@@ -9590,7 +9867,8 @@ def Torch_AtenBinaryCrossEntropyBackwardOp : Torch_Op<"aten.binary_cross_entropy
 def Torch_AtenBinaryCrossEntropyWithLogitsOp : Torch_Op<"aten.binary_cross_entropy_with_logits", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::binary_cross_entropy_with_logits : (Tensor, Tensor, Tensor?, Tensor?, int) -> (Tensor)`";
   let arguments = (ins
@@ -9617,7 +9895,8 @@ def Torch_AtenBinaryCrossEntropyWithLogitsOp : Torch_Op<"aten.binary_cross_entro
 def Torch_AtenLogSigmoidForwardOp : Torch_Op<"aten.log_sigmoid_forward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::log_sigmoid_forward : (Tensor) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -9641,7 +9920,8 @@ def Torch_AtenLogSigmoidForwardOp : Torch_Op<"aten.log_sigmoid_forward", [
 def Torch_AtenLogSigmoidBackwardOp : Torch_Op<"aten.log_sigmoid_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::log_sigmoid_backward : (Tensor, Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -9666,7 +9946,8 @@ def Torch_AtenLogSigmoidBackwardOp : Torch_Op<"aten.log_sigmoid_backward", [
 def Torch_AtenSigmoidBackwardOp : Torch_Op<"aten.sigmoid_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sigmoid_backward : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -9690,7 +9971,8 @@ def Torch_AtenSigmoidBackwardOp : Torch_Op<"aten.sigmoid_backward", [
 def Torch_AtenCosineEmbeddingLossOp : Torch_Op<"aten.cosine_embedding_loss", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::cosine_embedding_loss : (Tensor, Tensor, Tensor, float, int) -> (Tensor)`";
   let arguments = (ins
@@ -9717,7 +9999,8 @@ def Torch_AtenCosineEmbeddingLossOp : Torch_Op<"aten.cosine_embedding_loss", [
 def Torch_AtenDiagEmbedOp : Torch_Op<"aten.diag_embed", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::diag_embed : (Tensor, int, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -9743,7 +10026,8 @@ def Torch_AtenDiagEmbedOp : Torch_Op<"aten.diag_embed", [
 def Torch_Aten_WeightNormInterfaceOp : Torch_Op<"aten._weight_norm_interface", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_weight_norm_interface : (Tensor, Tensor, int) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -9769,7 +10053,8 @@ def Torch_Aten_WeightNormInterfaceOp : Torch_Op<"aten._weight_norm_interface", [
 def Torch_AtenRot90Op : Torch_Op<"aten.rot90", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::rot90 : (Tensor, int, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -9795,7 +10080,8 @@ def Torch_AtenRot90Op : Torch_Op<"aten.rot90", [
 def Torch_AtenConstantPadNdOp : Torch_Op<"aten.constant_pad_nd", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::constant_pad_nd : (Tensor, int[], Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -9820,7 +10106,8 @@ def Torch_AtenConstantPadNdOp : Torch_Op<"aten.constant_pad_nd", [
 def Torch_AtenReplicationPad2dOp : Torch_Op<"aten.replication_pad2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::replication_pad2d : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -9844,7 +10131,8 @@ def Torch_AtenReplicationPad2dOp : Torch_Op<"aten.replication_pad2d", [
 def Torch_AtenReflectionPad1dOp : Torch_Op<"aten.reflection_pad1d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::reflection_pad1d : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -9868,7 +10156,8 @@ def Torch_AtenReflectionPad1dOp : Torch_Op<"aten.reflection_pad1d", [
 def Torch_AtenReflectionPad2dOp : Torch_Op<"aten.reflection_pad2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::reflection_pad2d : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -9892,7 +10181,8 @@ def Torch_AtenReflectionPad2dOp : Torch_Op<"aten.reflection_pad2d", [
 def Torch_AtenPadOp : Torch_Op<"aten.pad", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::pad : (Tensor, int[], str, float?) -> (Tensor)`";
   let arguments = (ins
@@ -9917,7 +10207,8 @@ def Torch_AtenPadOp : Torch_Op<"aten.pad", [
 
 def Torch_AtenSqueezeDimOp : Torch_Op<"aten.squeeze.dim", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::squeeze.dim : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -9941,7 +10232,8 @@ def Torch_AtenSqueezeDimOp : Torch_Op<"aten.squeeze.dim", [
 
 def Torch_AtenSqueezeOp : Torch_Op<"aten.squeeze", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::squeeze : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -9964,7 +10256,8 @@ def Torch_AtenSqueezeOp : Torch_Op<"aten.squeeze", [
 
 def Torch_AtenFlattenUsingIntsOp : Torch_Op<"aten.flatten.using_ints", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::flatten.using_ints : (Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -9989,7 +10282,8 @@ def Torch_AtenFlattenUsingIntsOp : Torch_Op<"aten.flatten.using_ints", [
 
 def Torch_AtenUnflattenIntOp : Torch_Op<"aten.unflatten.int", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::unflatten.int : (Tensor, int, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -10016,7 +10310,8 @@ def Torch_AtenUnflattenIntOp : Torch_Op<"aten.unflatten.int", [
 def Torch_AtenDimOp : Torch_Op<"aten.dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::dim : (Tensor) -> (int)`";
   let arguments = (ins
@@ -10040,7 +10335,8 @@ def Torch_AtenDimOp : Torch_Op<"aten.dim", [
 def Torch_AtenSizeOp : Torch_Op<"aten.size", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::size : (Tensor) -> (int[])`";
   let arguments = (ins
@@ -10064,7 +10360,8 @@ def Torch_AtenSizeOp : Torch_Op<"aten.size", [
 def Torch_AtenBoolTensorOp : Torch_Op<"aten.Bool.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::Bool.Tensor : (Tensor) -> (bool)`";
   let arguments = (ins
@@ -10087,7 +10384,8 @@ def Torch_AtenBoolTensorOp : Torch_Op<"aten.Bool.Tensor", [
 def Torch_AtenIsFloatingPointOp : Torch_Op<"aten.is_floating_point", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::is_floating_point : (Tensor) -> (bool)`";
   let arguments = (ins
@@ -10111,7 +10409,8 @@ def Torch_AtenIsFloatingPointOp : Torch_Op<"aten.is_floating_point", [
 def Torch_AtenOnesOp : Torch_Op<"aten.ones", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ones : (int[], int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -10139,7 +10438,8 @@ def Torch_AtenOnesOp : Torch_Op<"aten.ones", [
 def Torch_AtenNewOnesOp : Torch_Op<"aten.new_ones", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::new_ones : (Tensor, int[], int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -10167,7 +10467,8 @@ def Torch_AtenNewOnesOp : Torch_Op<"aten.new_ones", [
 def Torch_AtenZerosOp : Torch_Op<"aten.zeros", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::zeros : (int[], int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -10195,7 +10496,8 @@ def Torch_AtenZerosOp : Torch_Op<"aten.zeros", [
 def Torch_AtenNewZerosOp : Torch_Op<"aten.new_zeros", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::new_zeros : (Tensor, int[], int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -10223,7 +10525,8 @@ def Torch_AtenNewZerosOp : Torch_Op<"aten.new_zeros", [
 def Torch_AtenEyeOp : Torch_Op<"aten.eye", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::eye : (int, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -10250,7 +10553,8 @@ def Torch_AtenEyeOp : Torch_Op<"aten.eye", [
 def Torch_AtenEyeMOp : Torch_Op<"aten.eye.m", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::eye.m : (int, int, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -10278,7 +10582,8 @@ def Torch_AtenEyeMOp : Torch_Op<"aten.eye.m", [
 def Torch_AtenTensorOp : Torch_Op<"aten.tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::tensor : (t[], int?, Device?, bool) -> (Tensor)`";
   let arguments = (ins
@@ -10305,7 +10610,8 @@ def Torch_AtenTensorOp : Torch_Op<"aten.tensor", [
 def Torch_AtenTensorBoolOp : Torch_Op<"aten.tensor.bool", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::tensor.bool : (bool, int?, Device?, bool) -> (Tensor)`";
   let arguments = (ins
@@ -10331,7 +10637,8 @@ def Torch_AtenTensorBoolOp : Torch_Op<"aten.tensor.bool", [
 def Torch_AtenTensorIntOp : Torch_Op<"aten.tensor.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::tensor.int : (int, int?, Device?, bool) -> (Tensor)`";
   let arguments = (ins
@@ -10358,7 +10665,8 @@ def Torch_AtenTensorIntOp : Torch_Op<"aten.tensor.int", [
 def Torch_AtenScalarTensorOp : Torch_Op<"aten.scalar_tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::scalar_tensor : (Scalar, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -10385,7 +10693,8 @@ def Torch_AtenScalarTensorOp : Torch_Op<"aten.scalar_tensor", [
 def Torch_Aten_ShapeAsTensorOp : Torch_Op<"aten._shape_as_tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_shape_as_tensor : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -10409,7 +10718,8 @@ def Torch_Aten_ShapeAsTensorOp : Torch_Op<"aten._shape_as_tensor", [
 def Torch_AtenIsnanOp : Torch_Op<"aten.isnan", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::isnan : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -10432,7 +10742,8 @@ def Torch_AtenIsnanOp : Torch_Op<"aten.isnan", [
 def Torch_AtenIsinfOp : Torch_Op<"aten.isinf", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::isinf : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -10455,7 +10766,8 @@ def Torch_AtenIsinfOp : Torch_Op<"aten.isinf", [
 def Torch_AtenIsneginfOp : Torch_Op<"aten.isneginf", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::isneginf : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -10478,7 +10790,8 @@ def Torch_AtenIsneginfOp : Torch_Op<"aten.isneginf", [
 def Torch_AtenIsposinfOp : Torch_Op<"aten.isposinf", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::isposinf : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -10501,7 +10814,8 @@ def Torch_AtenIsposinfOp : Torch_Op<"aten.isposinf", [
 def Torch_AtenAllOp : Torch_Op<"aten.all", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::all : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -10524,7 +10838,8 @@ def Torch_AtenAllOp : Torch_Op<"aten.all", [
 def Torch_AtenAllBoolOp : Torch_Op<"aten.all.bool", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::all.bool : (bool[]) -> (bool)`";
   let arguments = (ins
@@ -10547,7 +10862,8 @@ def Torch_AtenAllBoolOp : Torch_Op<"aten.all.bool", [
 def Torch_AtenAllDimOp : Torch_Op<"aten.all.dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::all.dim : (Tensor, int, bool) -> (Tensor)`";
   let arguments = (ins
@@ -10572,7 +10888,8 @@ def Torch_AtenAllDimOp : Torch_Op<"aten.all.dim", [
 def Torch_AtenAnyOp : Torch_Op<"aten.any", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::any : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -10595,7 +10912,8 @@ def Torch_AtenAnyOp : Torch_Op<"aten.any", [
 def Torch_AtenAnyDimOp : Torch_Op<"aten.any.dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::any.dim : (Tensor, int, bool) -> (Tensor)`";
   let arguments = (ins
@@ -10620,7 +10938,8 @@ def Torch_AtenAnyDimOp : Torch_Op<"aten.any.dim", [
 def Torch_AtenArangeOp : Torch_Op<"aten.arange", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::arange : (Scalar, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -10647,7 +10966,8 @@ def Torch_AtenArangeOp : Torch_Op<"aten.arange", [
 def Torch_AtenArangeStartOp : Torch_Op<"aten.arange.start", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::arange.start : (Scalar, Scalar, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -10675,7 +10995,8 @@ def Torch_AtenArangeStartOp : Torch_Op<"aten.arange.start", [
 def Torch_AtenArangeStartStepOp : Torch_Op<"aten.arange.start_step", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::arange.start_step : (Scalar, Scalar, Scalar, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -10728,7 +11049,8 @@ def Torch_AtenArangeStartOutOp : Torch_Op<"aten.arange.start_out", [
 def Torch_AtenArgmaxOp : Torch_Op<"aten.argmax", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::argmax : (Tensor, int?, bool) -> (Tensor)`";
   let arguments = (ins
@@ -10753,7 +11075,8 @@ def Torch_AtenArgmaxOp : Torch_Op<"aten.argmax", [
 def Torch_AtenArgminOp : Torch_Op<"aten.argmin", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::argmin : (Tensor, int?, bool) -> (Tensor)`";
   let arguments = (ins
@@ -10778,7 +11101,8 @@ def Torch_AtenArgminOp : Torch_Op<"aten.argmin", [
 def Torch_AtenOneHotOp : Torch_Op<"aten.one_hot", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::one_hot : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -10802,7 +11126,8 @@ def Torch_AtenOneHotOp : Torch_Op<"aten.one_hot", [
 def Torch_AtenAtleast1dOp : Torch_Op<"aten.atleast_1d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::atleast_1d : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -10825,7 +11150,8 @@ def Torch_AtenAtleast1dOp : Torch_Op<"aten.atleast_1d", [
 def Torch_AtenAtleast2dOp : Torch_Op<"aten.atleast_2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::atleast_2d : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -10848,7 +11174,8 @@ def Torch_AtenAtleast2dOp : Torch_Op<"aten.atleast_2d", [
 def Torch_AtenEinsumOp : Torch_Op<"aten.einsum", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::einsum : (str, Tensor[], int[]?) -> (Tensor)`";
   let arguments = (ins
@@ -10873,7 +11200,8 @@ def Torch_AtenEinsumOp : Torch_Op<"aten.einsum", [
 def Torch_AtenTraceOp : Torch_Op<"aten.trace", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::trace : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -10896,7 +11224,8 @@ def Torch_AtenTraceOp : Torch_Op<"aten.trace", [
 def Torch_AtenBucketizeTensorOp : Torch_Op<"aten.bucketize.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::bucketize.Tensor : (Tensor, Tensor, bool, bool) -> (Tensor)`";
   let arguments = (ins
@@ -10922,7 +11251,8 @@ def Torch_AtenBucketizeTensorOp : Torch_Op<"aten.bucketize.Tensor", [
 def Torch_AtenCloneOp : Torch_Op<"aten.clone", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::clone : (Tensor, int?) -> (Tensor)`";
   let arguments = (ins
@@ -10947,7 +11277,8 @@ def Torch_AtenCloneOp : Torch_Op<"aten.clone", [
 def Torch_AtenLiftFreshCopyOp : Torch_Op<"aten.lift_fresh_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::lift_fresh_copy : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -10969,7 +11300,8 @@ def Torch_AtenLiftFreshCopyOp : Torch_Op<"aten.lift_fresh_copy", [
 
 def Torch_AtenContiguousOp : Torch_Op<"aten.contiguous", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::contiguous : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -10993,7 +11325,8 @@ def Torch_AtenContiguousOp : Torch_Op<"aten.contiguous", [
 def Torch_AtenCopyOp : Torch_Op<"aten.copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::copy : (Tensor, Tensor, bool) -> (Tensor)`";
   let arguments = (ins
@@ -11042,7 +11375,8 @@ def Torch_AtenCopy_Op : Torch_Op<"aten.copy_", [
 def Torch_Aten_ToCopyOp : Torch_Op<"aten._to_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_to_copy : (Tensor, int?, int?, Device?, bool?, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -11070,7 +11404,8 @@ def Torch_Aten_ToCopyOp : Torch_Op<"aten._to_copy", [
 
 def Torch_AtenDetachOp : Torch_Op<"aten.detach", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::detach : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -11094,7 +11429,8 @@ def Torch_AtenDetachOp : Torch_Op<"aten.detach", [
 def Torch_AtenDeviceWithIndexOp : Torch_Op<"aten.device.with_index", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::device.with_index : (str, int) -> (Device)`";
   let arguments = (ins
@@ -11118,7 +11454,8 @@ def Torch_AtenDeviceWithIndexOp : Torch_Op<"aten.device.with_index", [
 
 def Torch_AtenCudaOp : Torch_Op<"aten.cuda", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::cuda : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -11142,7 +11479,8 @@ def Torch_AtenCudaOp : Torch_Op<"aten.cuda", [
 def Torch_AtenEmbeddingOp : Torch_Op<"aten.embedding", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::embedding : (Tensor, Tensor, int, bool, bool) -> (Tensor)`";
   let arguments = (ins
@@ -11169,7 +11507,8 @@ def Torch_AtenEmbeddingOp : Torch_Op<"aten.embedding", [
 def Torch_AtenEmbeddingBagPaddingIdxOp : Torch_Op<"aten.embedding_bag.padding_idx", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::embedding_bag.padding_idx : (Tensor, Tensor, Tensor, bool, int, bool, Tensor?, bool, int?) -> (Tensor, Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -11203,7 +11542,8 @@ def Torch_AtenEmbeddingBagPaddingIdxOp : Torch_Op<"aten.embedding_bag.padding_id
 def Torch_Aten_EmbeddingBagOp : Torch_Op<"aten._embedding_bag", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_embedding_bag : (Tensor, Tensor, Tensor, bool, int, bool, Tensor?, bool, int) -> (Tensor, Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -11237,7 +11577,8 @@ def Torch_Aten_EmbeddingBagOp : Torch_Op<"aten._embedding_bag", [
 def Torch_AtenEmptyLikeOp : Torch_Op<"aten.empty_like", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::empty_like : (Tensor, int?, int?, Device?, bool?, int?) -> (Tensor)`";
   let arguments = (ins
@@ -11265,7 +11606,8 @@ def Torch_AtenEmptyLikeOp : Torch_Op<"aten.empty_like", [
 def Torch_AtenNewEmptyOp : Torch_Op<"aten.new_empty", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::new_empty : (Tensor, int[], int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -11293,7 +11635,8 @@ def Torch_AtenNewEmptyOp : Torch_Op<"aten.new_empty", [
 def Torch_AtenNewEmptyStridedOp : Torch_Op<"aten.new_empty_strided", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::new_empty_strided : (Tensor, int[], int[], int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -11322,7 +11665,8 @@ def Torch_AtenNewEmptyStridedOp : Torch_Op<"aten.new_empty_strided", [
 def Torch_AtenZerosLikeOp : Torch_Op<"aten.zeros_like", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::zeros_like : (Tensor, int?, int?, Device?, bool?, int?) -> (Tensor)`";
   let arguments = (ins
@@ -11350,7 +11694,8 @@ def Torch_AtenZerosLikeOp : Torch_Op<"aten.zeros_like", [
 def Torch_AtenOnesLikeOp : Torch_Op<"aten.ones_like", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ones_like : (Tensor, int?, int?, Device?, bool?, int?) -> (Tensor)`";
   let arguments = (ins
@@ -11378,7 +11723,8 @@ def Torch_AtenOnesLikeOp : Torch_Op<"aten.ones_like", [
 def Torch_AtenEmptyMemoryFormatOp : Torch_Op<"aten.empty.memory_format", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::empty.memory_format : (int[], int?, int?, Device?, bool?, int?) -> (Tensor)`";
   let arguments = (ins
@@ -11406,7 +11752,8 @@ def Torch_AtenEmptyMemoryFormatOp : Torch_Op<"aten.empty.memory_format", [
 def Torch_AtenEmptyStridedOp : Torch_Op<"aten.empty_strided", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::empty_strided : (int[], int[], int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -11433,7 +11780,8 @@ def Torch_AtenEmptyStridedOp : Torch_Op<"aten.empty_strided", [
 
 def Torch_AtenExpandOp : Torch_Op<"aten.expand", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::expand : (Tensor, int[], bool) -> (Tensor)`";
   let arguments = (ins
@@ -11457,7 +11805,8 @@ def Torch_AtenExpandOp : Torch_Op<"aten.expand", [
 
 def Torch_AtenExpandAsOp : Torch_Op<"aten.expand_as", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::expand_as : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -11480,7 +11829,8 @@ def Torch_AtenExpandAsOp : Torch_Op<"aten.expand_as", [
 
 def Torch_AtenBroadcastToOp : Torch_Op<"aten.broadcast_to", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::broadcast_to : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -11505,7 +11855,8 @@ def Torch_AtenBroadcastToOp : Torch_Op<"aten.broadcast_to", [
 def Torch_AtenIndexTensorOp : Torch_Op<"aten.index.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::index.Tensor : (Tensor, Tensor?[]) -> (Tensor)`";
   let arguments = (ins
@@ -11529,7 +11880,8 @@ def Torch_AtenIndexTensorOp : Torch_Op<"aten.index.Tensor", [
 def Torch_AtenIndexTensorHackedTwinOp : Torch_Op<"aten.index.Tensor_hacked_twin", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::index.Tensor_hacked_twin : (Tensor, Tensor[]) -> (Tensor)`";
   let arguments = (ins
@@ -11553,7 +11905,8 @@ def Torch_AtenIndexTensorHackedTwinOp : Torch_Op<"aten.index.Tensor_hacked_twin"
 def Torch_AtenIndexSelectOp : Torch_Op<"aten.index_select", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::index_select : (Tensor, int, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -11579,7 +11932,8 @@ def Torch_AtenIndexSelectOp : Torch_Op<"aten.index_select", [
 def Torch_Aten_IndexPutImplOp : Torch_Op<"aten._index_put_impl", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_index_put_impl : (Tensor, Tensor?[], Tensor, bool, bool) -> (Tensor)`";
   let arguments = (ins
@@ -11632,7 +11986,8 @@ def Torch_Aten_IndexPutImpl_Op : Torch_Op<"aten._index_put_impl_", [
 def Torch_AtenItemOp : Torch_Op<"aten.item", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::item : (Tensor) -> (Scalar)`";
   let arguments = (ins
@@ -11656,7 +12011,8 @@ def Torch_AtenItemOp : Torch_Op<"aten.item", [
 def Torch_AtenMaskedSelectOp : Torch_Op<"aten.masked_select", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::masked_select : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -11680,7 +12036,8 @@ def Torch_AtenMaskedSelectOp : Torch_Op<"aten.masked_select", [
 def Torch_AtenNumelOp : Torch_Op<"aten.numel", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::numel : (Tensor) -> (int)`";
   let arguments = (ins
@@ -11704,7 +12061,8 @@ def Torch_AtenNumelOp : Torch_Op<"aten.numel", [
 def Torch_AtenRepeatOp : Torch_Op<"aten.repeat", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::repeat : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -11728,7 +12086,8 @@ def Torch_AtenRepeatOp : Torch_Op<"aten.repeat", [
 def Torch_AtenRepeatInterleaveSelfIntOp : Torch_Op<"aten.repeat_interleave.self_int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::repeat_interleave.self_int : (Tensor, int, int?, int?) -> (Tensor)`";
   let arguments = (ins
@@ -11754,7 +12113,8 @@ def Torch_AtenRepeatInterleaveSelfIntOp : Torch_Op<"aten.repeat_interleave.self_
 def Torch_AtenTileOp : Torch_Op<"aten.tile", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::tile : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -11777,7 +12137,8 @@ def Torch_AtenTileOp : Torch_Op<"aten.tile", [
 
 def Torch_AtenReshapeOp : Torch_Op<"aten.reshape", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::reshape : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -11801,7 +12162,8 @@ def Torch_AtenReshapeOp : Torch_Op<"aten.reshape", [
 
 def Torch_AtenReshapeAsOp : Torch_Op<"aten.reshape_as", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::reshape_as : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -11824,7 +12186,8 @@ def Torch_AtenReshapeAsOp : Torch_Op<"aten.reshape_as", [
 
 def Torch_Aten_ReshapeAliasOp : Torch_Op<"aten._reshape_alias", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_reshape_alias : (Tensor, int[], int[]) -> (Tensor)`";
   let arguments = (ins
@@ -11849,7 +12212,8 @@ def Torch_Aten_ReshapeAliasOp : Torch_Op<"aten._reshape_alias", [
 def Torch_AtenResizeOp : Torch_Op<"aten.resize", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::resize : (Tensor, int[], int?) -> (Tensor)`";
   let arguments = (ins
@@ -11896,7 +12260,8 @@ def Torch_AtenResize_Op : Torch_Op<"aten.resize_", [
 
 def Torch_AtenSelectIntOp : Torch_Op<"aten.select.int", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::select.int : (Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -11922,7 +12287,8 @@ def Torch_AtenSelectIntOp : Torch_Op<"aten.select.int", [
 def Torch_AtenSizeIntOp : Torch_Op<"aten.size.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::size.int : (Tensor, int) -> (int)`";
   let arguments = (ins
@@ -11947,7 +12313,8 @@ def Torch_AtenSizeIntOp : Torch_Op<"aten.size.int", [
 def Torch_AtenSumOp : Torch_Op<"aten.sum", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sum : (Tensor, int?) -> (Tensor)`";
   let arguments = (ins
@@ -11971,7 +12338,8 @@ def Torch_AtenSumOp : Torch_Op<"aten.sum", [
 def Torch_AtenSumDimIntListOp : Torch_Op<"aten.sum.dim_IntList", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sum.dim_IntList : (Tensor, int[]?, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -11997,7 +12365,8 @@ def Torch_AtenSumDimIntListOp : Torch_Op<"aten.sum.dim_IntList", [
 def Torch_AtenProdDimIntOp : Torch_Op<"aten.prod.dim_int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::prod.dim_int : (Tensor, int, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -12023,7 +12392,8 @@ def Torch_AtenProdDimIntOp : Torch_Op<"aten.prod.dim_int", [
 def Torch_AtenProdOp : Torch_Op<"aten.prod", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::prod : (Tensor, int?) -> (Tensor)`";
   let arguments = (ins
@@ -12047,7 +12417,8 @@ def Torch_AtenProdOp : Torch_Op<"aten.prod", [
 def Torch_AtenMaxOp : Torch_Op<"aten.max", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -12070,7 +12441,8 @@ def Torch_AtenMaxOp : Torch_Op<"aten.max", [
 def Torch_AtenMaxOtherOp : Torch_Op<"aten.max.other", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max.other : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -12095,7 +12467,8 @@ def Torch_AtenMaxOtherOp : Torch_Op<"aten.max.other", [
 def Torch_AtenMaxDimOp : Torch_Op<"aten.max.dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::max.dim : (Tensor, int, bool) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -12121,7 +12494,8 @@ def Torch_AtenMaxDimOp : Torch_Op<"aten.max.dim", [
 def Torch_AtenAmaxOp : Torch_Op<"aten.amax", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::amax : (Tensor, int[], bool) -> (Tensor)`";
   let arguments = (ins
@@ -12146,7 +12520,8 @@ def Torch_AtenAmaxOp : Torch_Op<"aten.amax", [
 def Torch_AtenMinOp : Torch_Op<"aten.min", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::min : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -12169,7 +12544,8 @@ def Torch_AtenMinOp : Torch_Op<"aten.min", [
 def Torch_AtenMinOtherOp : Torch_Op<"aten.min.other", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::min.other : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -12194,7 +12570,8 @@ def Torch_AtenMinOtherOp : Torch_Op<"aten.min.other", [
 def Torch_AtenMinDimOp : Torch_Op<"aten.min.dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::min.dim : (Tensor, int, bool) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -12220,7 +12597,8 @@ def Torch_AtenMinDimOp : Torch_Op<"aten.min.dim", [
 def Torch_AtenAminOp : Torch_Op<"aten.amin", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::amin : (Tensor, int[], bool) -> (Tensor)`";
   let arguments = (ins
@@ -12245,7 +12623,8 @@ def Torch_AtenAminOp : Torch_Op<"aten.amin", [
 def Torch_AtenAminmaxOp : Torch_Op<"aten.aminmax", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::aminmax : (Tensor, int?, bool) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -12270,7 +12649,8 @@ def Torch_AtenAminmaxOp : Torch_Op<"aten.aminmax", [
 
 def Torch_AtenToDtypeOp : Torch_Op<"aten.to.dtype", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::to.dtype : (Tensor, int, bool, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -12297,7 +12677,8 @@ def Torch_AtenToDtypeOp : Torch_Op<"aten.to.dtype", [
 
 def Torch_AtenToDtypeLayoutOp : Torch_Op<"aten.to.dtype_layout", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::to.dtype_layout : (Tensor, int?, int?, Device?, bool?, bool, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -12328,7 +12709,8 @@ def Torch_AtenToDtypeLayoutOp : Torch_Op<"aten.to.dtype_layout", [
 
 def Torch_AtenToOtherOp : Torch_Op<"aten.to.other", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::to.other : (Tensor, Tensor, bool, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -12355,7 +12737,8 @@ def Torch_AtenToOtherOp : Torch_Op<"aten.to.other", [
 
 def Torch_AtenToPrimDeviceOp : Torch_Op<"aten.to.prim_Device", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::to.prim_Device : (Tensor, Device?, int?, bool, bool) -> (Tensor)`";
   let arguments = (ins
@@ -12381,7 +12764,8 @@ def Torch_AtenToPrimDeviceOp : Torch_Op<"aten.to.prim_Device", [
 
 def Torch_AtenToDeviceOp : Torch_Op<"aten.to.device", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::to.device : (Tensor, Device, int, bool, bool, int?) -> (Tensor)`";
   let arguments = (ins
@@ -12409,7 +12793,8 @@ def Torch_AtenToDeviceOp : Torch_Op<"aten.to.device", [
 def Torch_Aten_CastFloatOp : Torch_Op<"aten._cast_Float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_cast_Float : (Tensor, bool) -> (Tensor)`";
   let arguments = (ins
@@ -12434,7 +12819,8 @@ def Torch_Aten_CastFloatOp : Torch_Op<"aten._cast_Float", [
 def Torch_Aten_CastLongOp : Torch_Op<"aten._cast_Long", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_cast_Long : (Tensor, bool) -> (Tensor)`";
   let arguments = (ins
@@ -12459,7 +12845,8 @@ def Torch_Aten_CastLongOp : Torch_Op<"aten._cast_Long", [
 def Torch_AtenTypeAsOp : Torch_Op<"aten.type_as", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::type_as : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -12482,7 +12869,8 @@ def Torch_AtenTypeAsOp : Torch_Op<"aten.type_as", [
 
 def Torch_AtenViewOp : Torch_Op<"aten.view", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::view : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -12506,7 +12894,8 @@ def Torch_AtenViewOp : Torch_Op<"aten.view", [
 
 def Torch_AtenViewDtypeOp : Torch_Op<"aten.view.dtype", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::view.dtype : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -12530,7 +12919,8 @@ def Torch_AtenViewDtypeOp : Torch_Op<"aten.view.dtype", [
 def Torch_Aten_UnsafeViewOp : Torch_Op<"aten._unsafe_view", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_unsafe_view : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -12554,7 +12944,8 @@ def Torch_Aten_UnsafeViewOp : Torch_Op<"aten._unsafe_view", [
 def Torch_AtenWhereSelfOp : Torch_Op<"aten.where.self", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::where.self : (Tensor, Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -12580,7 +12971,8 @@ def Torch_AtenWhereSelfOp : Torch_Op<"aten.where.self", [
 def Torch_AtenWhereScalarOp : Torch_Op<"aten.where.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::where.Scalar : (Tensor, Scalar, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -12607,7 +12999,8 @@ def Torch_AtenWhereScalarOp : Torch_Op<"aten.where.Scalar", [
 def Torch_AtenWhereScalarOtherOp : Torch_Op<"aten.where.ScalarOther", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::where.ScalarOther : (Tensor, Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -12633,7 +13026,8 @@ def Torch_AtenWhereScalarOtherOp : Torch_Op<"aten.where.ScalarOther", [
 def Torch_AtenWhereScalarSelfOp : Torch_Op<"aten.where.ScalarSelf", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::where.ScalarSelf : (Tensor, Scalar, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -12659,7 +13053,8 @@ def Torch_AtenWhereScalarSelfOp : Torch_Op<"aten.where.ScalarSelf", [
 def Torch_AtenNanToNumOp : Torch_Op<"aten.nan_to_num", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::nan_to_num : (Tensor, float?, float?, float?) -> (Tensor)`";
   let arguments = (ins
@@ -12684,7 +13079,8 @@ def Torch_AtenNanToNumOp : Torch_Op<"aten.nan_to_num", [
 
 def Torch_AtenSliceTensorOp : Torch_Op<"aten.slice.Tensor", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::slice.Tensor : (Tensor, int, int?, int?, int) -> (Tensor)`";
   let arguments = (ins
@@ -12712,7 +13108,8 @@ def Torch_AtenSliceTensorOp : Torch_Op<"aten.slice.Tensor", [
 def Torch_AtenLenTensorOp : Torch_Op<"aten.len.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::len.Tensor : (Tensor) -> (int)`";
   let arguments = (ins
@@ -12734,7 +13131,8 @@ def Torch_AtenLenTensorOp : Torch_Op<"aten.len.Tensor", [
 
 def Torch_AtenCpuOp : Torch_Op<"aten.cpu", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::cpu : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -12757,7 +13155,8 @@ def Torch_AtenCpuOp : Torch_Op<"aten.cpu", [
 def Torch_AtenGatherOp : Torch_Op<"aten.gather", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::gather : (Tensor, int, Tensor, bool) -> (Tensor)`";
   let arguments = (ins
@@ -12783,7 +13182,8 @@ def Torch_AtenGatherOp : Torch_Op<"aten.gather", [
 def Torch_AtenScatterAddOp : Torch_Op<"aten.scatter_add", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::scatter_add : (Tensor, int, Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -12834,7 +13234,8 @@ def Torch_AtenScatterAdd_Op : Torch_Op<"aten.scatter_add_", [
 def Torch_AtenScatterReduceTwoOp : Torch_Op<"aten.scatter_reduce.two", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::scatter_reduce.two : (Tensor, int, Tensor, Tensor, str, bool) -> (Tensor)`";
   let arguments = (ins
@@ -12889,7 +13290,8 @@ def Torch_AtenScatterReduce_TwoOp : Torch_Op<"aten.scatter_reduce_.two", [
 def Torch_AtenIntImplicitOp : Torch_Op<"aten.IntImplicit", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::IntImplicit : (Tensor) -> (int)`";
   let arguments = (ins
@@ -12913,7 +13315,8 @@ def Torch_AtenIntImplicitOp : Torch_Op<"aten.IntImplicit", [
 def Torch_AtenFloatImplicitOp : Torch_Op<"aten.FloatImplicit", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::FloatImplicit : (Tensor) -> (float)`";
   let arguments = (ins
@@ -12937,7 +13340,8 @@ def Torch_AtenFloatImplicitOp : Torch_Op<"aten.FloatImplicit", [
 def Torch_AtenTensorFloatOp : Torch_Op<"aten.tensor.float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::tensor.float : (float, int?, Device?, bool) -> (Tensor)`";
   let arguments = (ins
@@ -12964,7 +13368,8 @@ def Torch_AtenTensorFloatOp : Torch_Op<"aten.tensor.float", [
 def Torch_AtenIntTensorOp : Torch_Op<"aten.Int.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::Int.Tensor : (Tensor) -> (int)`";
   let arguments = (ins
@@ -12989,7 +13394,8 @@ def Torch_AtenIntTensorOp : Torch_Op<"aten.Int.Tensor", [
 def Torch_AtenFloatTensorOp : Torch_Op<"aten.Float.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::Float.Tensor : (Tensor) -> (float)`";
   let arguments = (ins
@@ -13013,7 +13419,8 @@ def Torch_AtenFloatTensorOp : Torch_Op<"aten.Float.Tensor", [
 def Torch_AtenDropoutOp : Torch_Op<"aten.dropout", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::dropout : (Tensor, float, bool) -> (Tensor)`";
   let arguments = (ins
@@ -13062,7 +13469,8 @@ def Torch_AtenDropout_Op : Torch_Op<"aten.dropout_", [
 def Torch_AtenNativeDropoutOp : Torch_Op<"aten.native_dropout", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::native_dropout : (Tensor, float, bool?) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -13087,7 +13495,8 @@ def Torch_AtenNativeDropoutOp : Torch_Op<"aten.native_dropout", [
 
 def Torch_AtenTOp : Torch_Op<"aten.t", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::t : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -13109,7 +13518,8 @@ def Torch_AtenTOp : Torch_Op<"aten.t", [
 
 def Torch_AtenNumpyTOp : Torch_Op<"aten.numpy_T", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::numpy_T : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -13132,7 +13542,8 @@ def Torch_AtenNumpyTOp : Torch_Op<"aten.numpy_T", [
 def Torch_AtenFullOp : Torch_Op<"aten.full", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::full : (int[], Scalar, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -13161,7 +13572,8 @@ def Torch_AtenFullOp : Torch_Op<"aten.full", [
 def Torch_AtenFullLikeOp : Torch_Op<"aten.full_like", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::full_like : (Tensor, Scalar, int?, int?, Device?, bool?, int?) -> (Tensor)`";
   let arguments = (ins
@@ -13190,7 +13602,8 @@ def Torch_AtenFullLikeOp : Torch_Op<"aten.full_like", [
 def Torch_AtenNewFullOp : Torch_Op<"aten.new_full", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::new_full : (Tensor, int[], Scalar, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -13219,7 +13632,8 @@ def Torch_AtenNewFullOp : Torch_Op<"aten.new_full", [
 def Torch_AtenBaddbmmOp : Torch_Op<"aten.baddbmm", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::baddbmm : (Tensor, Tensor, Tensor, Scalar, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -13272,7 +13686,8 @@ def Torch_AtenBaddbmm_Op : Torch_Op<"aten.baddbmm_", [
 def Torch_AtenHannWindowPeriodicOp : Torch_Op<"aten.hann_window.periodic", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::hann_window.periodic : (int, bool, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -13300,7 +13715,8 @@ def Torch_AtenHannWindowPeriodicOp : Torch_Op<"aten.hann_window.periodic", [
 def Torch_AtenFftFftOp : Torch_Op<"aten.fft_fft", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fft_fft : (Tensor, int?, int, str?) -> (Tensor)`";
   let arguments = (ins
@@ -13326,7 +13742,8 @@ def Torch_AtenFftFftOp : Torch_Op<"aten.fft_fft", [
 def Torch_AtenFftIfftOp : Torch_Op<"aten.fft_ifft", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fft_ifft : (Tensor, int?, int, str?) -> (Tensor)`";
   let arguments = (ins
@@ -13352,7 +13769,8 @@ def Torch_AtenFftIfftOp : Torch_Op<"aten.fft_ifft", [
 def Torch_AtenFmodTensorOp : Torch_Op<"aten.fmod.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fmod.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -13376,7 +13794,8 @@ def Torch_AtenFmodTensorOp : Torch_Op<"aten.fmod.Tensor", [
 def Torch_AtenUniqueConsecutiveOp : Torch_Op<"aten.unique_consecutive", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::unique_consecutive : (Tensor, bool, bool, int?) -> (Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -13404,7 +13823,8 @@ def Torch_AtenUniqueConsecutiveOp : Torch_Op<"aten.unique_consecutive", [
 def Torch_AtenUniqueDimOp : Torch_Op<"aten.unique_dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::unique_dim : (Tensor, int, bool, bool, bool) -> (Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -13433,7 +13853,8 @@ def Torch_AtenUniqueDimOp : Torch_Op<"aten.unique_dim", [
 def Torch_AtenLinspaceOp : Torch_Op<"aten.linspace", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::linspace : (Scalar, Scalar, int, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -13462,7 +13883,8 @@ def Torch_AtenLinspaceOp : Torch_Op<"aten.linspace", [
 def Torch_AtenLinalgCrossOp : Torch_Op<"aten.linalg_cross", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::linalg_cross : (Tensor, Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -13488,7 +13910,8 @@ def Torch_AtenLinalgCrossOp : Torch_Op<"aten.linalg_cross", [
 def Torch_AtenCol2imOp : Torch_Op<"aten.col2im", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::col2im : (Tensor, int[], int[], int[], int[], int[]) -> (Tensor)`";
   let arguments = (ins
@@ -13516,7 +13939,8 @@ def Torch_AtenCol2imOp : Torch_Op<"aten.col2im", [
 def Torch_AtenKthvalueOp : Torch_Op<"aten.kthvalue", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::kthvalue : (Tensor, int, int, bool) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -13544,7 +13968,8 @@ def Torch_AtenKthvalueOp : Torch_Op<"aten.kthvalue", [
 def Torch_AtenStftOp : Torch_Op<"aten.stft", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::stft : (Tensor, int, int?, int?, Tensor?, bool, bool?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -13574,7 +13999,8 @@ def Torch_AtenStftOp : Torch_Op<"aten.stft", [
 def Torch_AtenAliasCopyOp : Torch_Op<"aten.alias_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::alias_copy : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -13596,7 +14022,8 @@ def Torch_AtenAliasCopyOp : Torch_Op<"aten.alias_copy", [
 
 def Torch_AtenAliasOp : Torch_Op<"aten.alias", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::alias : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -13620,7 +14047,8 @@ def Torch_AtenAliasOp : Torch_Op<"aten.alias", [
 def Torch_AtenAsStridedCopyOp : Torch_Op<"aten.as_strided_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::as_strided_copy : (Tensor, int[], int[], int?) -> (Tensor)`";
   let arguments = (ins
@@ -13645,7 +14073,8 @@ def Torch_AtenAsStridedCopyOp : Torch_Op<"aten.as_strided_copy", [
 
 def Torch_AtenAsStridedOp : Torch_Op<"aten.as_strided", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::as_strided : (Tensor, int[], int[], int?) -> (Tensor)`";
   let arguments = (ins
@@ -13670,7 +14099,8 @@ def Torch_AtenAsStridedOp : Torch_Op<"aten.as_strided", [
 
 def Torch_AtenDiagonalOp : Torch_Op<"aten.diagonal", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::diagonal : (Tensor, int, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -13696,7 +14126,8 @@ def Torch_AtenDiagonalOp : Torch_Op<"aten.diagonal", [
 def Torch_AtenDiagonalCopyOp : Torch_Op<"aten.diagonal_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::diagonal_copy : (Tensor, int, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -13722,7 +14153,8 @@ def Torch_AtenDiagonalCopyOp : Torch_Op<"aten.diagonal_copy", [
 def Torch_AtenExpandCopyOp : Torch_Op<"aten.expand_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::expand_copy : (Tensor, int[], bool) -> (Tensor)`";
   let arguments = (ins
@@ -13747,7 +14179,8 @@ def Torch_AtenExpandCopyOp : Torch_Op<"aten.expand_copy", [
 def Torch_AtenPermuteCopyOp : Torch_Op<"aten.permute_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::permute_copy : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -13771,7 +14204,8 @@ def Torch_AtenPermuteCopyOp : Torch_Op<"aten.permute_copy", [
 def Torch_Aten_ReshapeAliasCopyOp : Torch_Op<"aten._reshape_alias_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_reshape_alias_copy : (Tensor, int[], int[]) -> (Tensor)`";
   let arguments = (ins
@@ -13796,7 +14230,8 @@ def Torch_Aten_ReshapeAliasCopyOp : Torch_Op<"aten._reshape_alias_copy", [
 def Torch_AtenSelectCopyIntOp : Torch_Op<"aten.select_copy.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::select_copy.int : (Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -13821,7 +14256,8 @@ def Torch_AtenSelectCopyIntOp : Torch_Op<"aten.select_copy.int", [
 def Torch_AtenDetachCopyOp : Torch_Op<"aten.detach_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::detach_copy : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -13844,7 +14280,8 @@ def Torch_AtenDetachCopyOp : Torch_Op<"aten.detach_copy", [
 def Torch_AtenSliceCopyTensorOp : Torch_Op<"aten.slice_copy.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::slice_copy.Tensor : (Tensor, int, int?, int?, int) -> (Tensor)`";
   let arguments = (ins
@@ -13871,7 +14308,8 @@ def Torch_AtenSliceCopyTensorOp : Torch_Op<"aten.slice_copy.Tensor", [
 def Torch_AtenSqueezeCopyOp : Torch_Op<"aten.squeeze_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::squeeze_copy : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -13894,7 +14332,8 @@ def Torch_AtenSqueezeCopyOp : Torch_Op<"aten.squeeze_copy", [
 def Torch_AtenSqueezeCopyDimOp : Torch_Op<"aten.squeeze_copy.dim", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::squeeze_copy.dim : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -13918,7 +14357,8 @@ def Torch_AtenSqueezeCopyDimOp : Torch_Op<"aten.squeeze_copy.dim", [
 def Torch_AtenTCopyOp : Torch_Op<"aten.t_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::t_copy : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -13941,7 +14381,8 @@ def Torch_AtenTCopyOp : Torch_Op<"aten.t_copy", [
 def Torch_AtenTransposeCopyIntOp : Torch_Op<"aten.transpose_copy.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::transpose_copy.int : (Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -13966,7 +14407,8 @@ def Torch_AtenTransposeCopyIntOp : Torch_Op<"aten.transpose_copy.int", [
 def Torch_AtenUnsqueezeCopyOp : Torch_Op<"aten.unsqueeze_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::unsqueeze_copy : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -13990,7 +14432,8 @@ def Torch_AtenUnsqueezeCopyOp : Torch_Op<"aten.unsqueeze_copy", [
 def Torch_AtenViewCopyOp : Torch_Op<"aten.view_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::view_copy : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -14014,7 +14457,8 @@ def Torch_AtenViewCopyOp : Torch_Op<"aten.view_copy", [
 def Torch_AtenViewCopyDtypeOp : Torch_Op<"aten.view_copy.dtype", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::view_copy.dtype : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -14037,7 +14481,8 @@ def Torch_AtenViewCopyDtypeOp : Torch_Op<"aten.view_copy.dtype", [
 
 def Torch_AtenUnfoldOp : Torch_Op<"aten.unfold", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::unfold : (Tensor, int, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -14063,7 +14508,8 @@ def Torch_AtenUnfoldOp : Torch_Op<"aten.unfold", [
 def Torch_AtenUnfoldCopyOp : Torch_Op<"aten.unfold_copy", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::unfold_copy : (Tensor, int, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -14089,7 +14535,8 @@ def Torch_AtenUnfoldCopyOp : Torch_Op<"aten.unfold_copy", [
 def Torch_AtenIm2colOp : Torch_Op<"aten.im2col", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::im2col : (Tensor, int[], int[], int[], int[]) -> (Tensor)`";
   let arguments = (ins
@@ -14116,7 +14563,8 @@ def Torch_AtenIm2colOp : Torch_Op<"aten.im2col", [
 def Torch_AtenScatterReduceOp : Torch_Op<"aten.scatter.reduce", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::scatter.reduce : (Tensor, int, Tensor, Tensor, str) -> (Tensor)`";
   let arguments = (ins
@@ -14143,7 +14591,8 @@ def Torch_AtenScatterReduceOp : Torch_Op<"aten.scatter.reduce", [
 def Torch_AtenSelectScatterOp : Torch_Op<"aten.select_scatter", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::select_scatter : (Tensor, Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -14169,7 +14618,8 @@ def Torch_AtenSelectScatterOp : Torch_Op<"aten.select_scatter", [
 def Torch_AtenSliceScatterOp : Torch_Op<"aten.slice_scatter", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::slice_scatter : (Tensor, Tensor, int, int?, int?, int) -> (Tensor)`";
   let arguments = (ins
@@ -14197,7 +14647,8 @@ def Torch_AtenSliceScatterOp : Torch_Op<"aten.slice_scatter", [
 def Torch_AtenDiagonalScatterOp : Torch_Op<"aten.diagonal_scatter", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::diagonal_scatter : (Tensor, Tensor, int, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -14224,7 +14675,8 @@ def Torch_AtenDiagonalScatterOp : Torch_Op<"aten.diagonal_scatter", [
 def Torch_AtenAsStridedScatterOp : Torch_Op<"aten.as_strided_scatter", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::as_strided_scatter : (Tensor, Tensor, int[], int[], int?) -> (Tensor)`";
   let arguments = (ins
@@ -14251,7 +14703,8 @@ def Torch_AtenAsStridedScatterOp : Torch_Op<"aten.as_strided_scatter", [
 def Torch_AtenUpsampleNearest1dOp : Torch_Op<"aten.upsample_nearest1d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::upsample_nearest1d : (Tensor, int[], float?) -> (Tensor)`";
   let arguments = (ins
@@ -14276,7 +14729,8 @@ def Torch_AtenUpsampleNearest1dOp : Torch_Op<"aten.upsample_nearest1d", [
 def Torch_AtenUpsampleNearest1dVecOp : Torch_Op<"aten.upsample_nearest1d.vec", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::upsample_nearest1d.vec : (Tensor, int[]?, float[]?) -> (Tensor)`";
   let arguments = (ins
@@ -14301,7 +14755,8 @@ def Torch_AtenUpsampleNearest1dVecOp : Torch_Op<"aten.upsample_nearest1d.vec", [
 def Torch_AtenUpsampleNearest2dOp : Torch_Op<"aten.upsample_nearest2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::upsample_nearest2d : (Tensor, int[], float?, float?) -> (Tensor)`";
   let arguments = (ins
@@ -14327,7 +14782,8 @@ def Torch_AtenUpsampleNearest2dOp : Torch_Op<"aten.upsample_nearest2d", [
 def Torch_AtenUpsampleNearest2dVecOp : Torch_Op<"aten.upsample_nearest2d.vec", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::upsample_nearest2d.vec : (Tensor, int[]?, float[]?) -> (Tensor)`";
   let arguments = (ins
@@ -14352,7 +14808,8 @@ def Torch_AtenUpsampleNearest2dVecOp : Torch_Op<"aten.upsample_nearest2d.vec", [
 def Torch_AtenUpsampleBilinear2dOp : Torch_Op<"aten.upsample_bilinear2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::upsample_bilinear2d : (Tensor, int[], bool, float?, float?) -> (Tensor)`";
   let arguments = (ins
@@ -14379,7 +14836,8 @@ def Torch_AtenUpsampleBilinear2dOp : Torch_Op<"aten.upsample_bilinear2d", [
 def Torch_AtenUpsampleBilinear2dVecOp : Torch_Op<"aten.upsample_bilinear2d.vec", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::upsample_bilinear2d.vec : (Tensor, int[]?, bool, float[]?) -> (Tensor)`";
   let arguments = (ins
@@ -14405,7 +14863,8 @@ def Torch_AtenUpsampleBilinear2dVecOp : Torch_Op<"aten.upsample_bilinear2d.vec",
 def Torch_AtenScaledDotProductAttentionOp : Torch_Op<"aten.scaled_dot_product_attention", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::scaled_dot_product_attention : (Tensor, Tensor, Tensor, Tensor?, float, bool, float?, bool) -> (Tensor)`";
   let arguments = (ins
@@ -14435,7 +14894,8 @@ def Torch_AtenScaledDotProductAttentionOp : Torch_Op<"aten.scaled_dot_product_at
 def Torch_AtenGridSamplerOp : Torch_Op<"aten.grid_sampler", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::grid_sampler : (Tensor, Tensor, int, int, bool) -> (Tensor)`";
   let arguments = (ins
@@ -14462,7 +14922,8 @@ def Torch_AtenGridSamplerOp : Torch_Op<"aten.grid_sampler", [
 def Torch_Aten_TrilinearOp : Torch_Op<"aten._trilinear", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_trilinear : (Tensor, Tensor, Tensor, int[], int[], int[], int[], int) -> (Tensor)`";
   let arguments = (ins
@@ -14492,7 +14953,8 @@ def Torch_Aten_TrilinearOp : Torch_Op<"aten._trilinear", [
 def Torch_Aten__Contains__StrOp : Torch_Op<"aten.__contains__.str", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__contains__.str : (Dict(str, t), str) -> (bool)`";
   let arguments = (ins
@@ -14517,7 +14979,8 @@ def Torch_Aten__Contains__StrOp : Torch_Op<"aten.__contains__.str", [
 def Torch_Aten__Contains__IntListOp : Torch_Op<"aten.__contains__.int_list", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__contains__.int_list : (int[], int) -> (bool)`";
   let arguments = (ins
@@ -14541,7 +15004,8 @@ def Torch_Aten__Contains__IntListOp : Torch_Op<"aten.__contains__.int_list", [
 
 def Torch_Aten__Getitem__DictStrOp : Torch_Op<"aten.__getitem__.Dict_str", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__getitem__.Dict_str : (Dict(str, t), str) -> (t)`";
   let arguments = (ins
@@ -14587,7 +15051,8 @@ def Torch_Aten_SetItemStrOp : Torch_Op<"aten._set_item.str", [
 
 def Torch_AtenKeysStrOp : Torch_Op<"aten.keys.str", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::keys.str : (Dict(str, t)) -> (str[])`";
   let arguments = (ins
@@ -14609,7 +15074,8 @@ def Torch_AtenKeysStrOp : Torch_Op<"aten.keys.str", [
 
 def Torch_AtenGetDefaultStrOp : Torch_Op<"aten.get.default_str", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::get.default_str : (Dict(str, t), str, t) -> (t)`";
   let arguments = (ins
@@ -14655,7 +15121,8 @@ def Torch_AtenDeleteDictStrOp : Torch_Op<"aten.Delete.Dict_str", [
 def Torch_AtenCatOp : Torch_Op<"aten.cat", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::cat : (Tensor[], int) -> (Tensor)`";
   let arguments = (ins
@@ -14681,7 +15148,8 @@ def Torch_AtenCatOp : Torch_Op<"aten.cat", [
 def Torch_AtenStackOp : Torch_Op<"aten.stack", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::stack : (Tensor[], int) -> (Tensor)`";
   let arguments = (ins
@@ -14705,7 +15173,8 @@ def Torch_AtenStackOp : Torch_Op<"aten.stack", [
 def Torch_AtenHstackOp : Torch_Op<"aten.hstack", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::hstack : (Tensor[]) -> (Tensor)`";
   let arguments = (ins
@@ -14728,7 +15197,8 @@ def Torch_AtenHstackOp : Torch_Op<"aten.hstack", [
 def Torch_AtenColumnStackOp : Torch_Op<"aten.column_stack", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::column_stack : (Tensor[]) -> (Tensor)`";
   let arguments = (ins
@@ -14773,7 +15243,8 @@ def Torch_AtenAppendTOp : Torch_Op<"aten.append.t", [
 def Torch_AtenAddTOp : Torch_Op<"aten.add.t", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::add.t : (t[], t[]) -> (t[])`";
   let arguments = (ins
@@ -14798,7 +15269,8 @@ def Torch_AtenAddTOp : Torch_Op<"aten.add.t", [
 def Torch_AtenEqIntListOp : Torch_Op<"aten.eq.int_list", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::eq.int_list : (int[], int[]) -> (bool)`";
   let arguments = (ins
@@ -14823,7 +15295,8 @@ def Torch_AtenEqIntListOp : Torch_Op<"aten.eq.int_list", [
 def Torch_AtenListTOp : Torch_Op<"aten.list.t", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::list.t : (t[]) -> (t[])`";
   let arguments = (ins
@@ -14846,7 +15319,8 @@ def Torch_AtenListTOp : Torch_Op<"aten.list.t", [
 def Torch_AtenSliceTOp : Torch_Op<"aten.slice.t", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::slice.t : (t[], int?, int?, int) -> (t[])`";
   let arguments = (ins
@@ -14895,7 +15369,8 @@ def Torch_AtenInsertTOp : Torch_Op<"aten.insert.t", [
 def Torch_AtenNeIntListOp : Torch_Op<"aten.ne.int_list", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ne.int_list : (int[], int[]) -> (bool)`";
   let arguments = (ins
@@ -14919,7 +15394,8 @@ def Torch_AtenNeIntListOp : Torch_Op<"aten.ne.int_list", [
 def Torch_AtenAnyBoolOp : Torch_Op<"aten.any.bool", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::any.bool : (bool[]) -> (bool)`";
   let arguments = (ins
@@ -14965,7 +15441,8 @@ def Torch_AtenSortIntOp : Torch_Op<"aten.sort.int", [
 def Torch_AtenSortOp : Torch_Op<"aten.sort", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sort : (Tensor, int, bool) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -14991,7 +15468,8 @@ def Torch_AtenSortOp : Torch_Op<"aten.sort", [
 
 def Torch_AtenSplitTensorOp : Torch_Op<"aten.split.Tensor", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::split.Tensor : (Tensor, int, int) -> (Tensor[])`";
   let arguments = (ins
@@ -15015,7 +15493,8 @@ def Torch_AtenSplitTensorOp : Torch_Op<"aten.split.Tensor", [
 
 def Torch_AtenSplitWithSizesOp : Torch_Op<"aten.split_with_sizes", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::split_with_sizes : (Tensor, int[], int) -> (Tensor[])`";
   let arguments = (ins
@@ -15039,7 +15518,8 @@ def Torch_AtenSplitWithSizesOp : Torch_Op<"aten.split_with_sizes", [
 
 def Torch_AtenSplitSizesOp : Torch_Op<"aten.split.sizes", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::split.sizes : (Tensor, int[], int) -> (Tensor[])`";
   let arguments = (ins
@@ -15064,7 +15544,8 @@ def Torch_AtenSplitSizesOp : Torch_Op<"aten.split.sizes", [
 
 def Torch_AtenTensorSplitSectionsOp : Torch_Op<"aten.tensor_split.sections", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::tensor_split.sections : (Tensor, int, int) -> (Tensor[])`";
   let arguments = (ins
@@ -15088,7 +15569,8 @@ def Torch_AtenTensorSplitSectionsOp : Torch_Op<"aten.tensor_split.sections", [
 
 def Torch_AtenUnbindIntOp : Torch_Op<"aten.unbind.int", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::unbind.int : (Tensor, int) -> (Tensor[])`";
   let arguments = (ins
@@ -15111,7 +15593,8 @@ def Torch_AtenUnbindIntOp : Torch_Op<"aten.unbind.int", [
 
 def Torch_AtenChunkOp : Torch_Op<"aten.chunk", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::chunk : (Tensor, int, int) -> (Tensor[])`";
   let arguments = (ins
@@ -15136,7 +15619,8 @@ def Torch_AtenChunkOp : Torch_Op<"aten.chunk", [
 def Torch_AtenMeshgridOp : Torch_Op<"aten.meshgrid", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::meshgrid : (Tensor[]) -> (Tensor[])`";
   let arguments = (ins
@@ -15160,7 +15644,8 @@ def Torch_AtenMeshgridOp : Torch_Op<"aten.meshgrid", [
 def Torch_AtenMeshgridIndexingOp : Torch_Op<"aten.meshgrid.indexing", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::meshgrid.indexing : (Tensor[], str) -> (Tensor[])`";
   let arguments = (ins
@@ -15184,7 +15669,8 @@ def Torch_AtenMeshgridIndexingOp : Torch_Op<"aten.meshgrid.indexing", [
 def Torch_AtenAddStrOp : Torch_Op<"aten.add.str", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::add.str : (str, str) -> (str)`";
   let arguments = (ins
@@ -15208,7 +15694,8 @@ def Torch_AtenAddStrOp : Torch_Op<"aten.add.str", [
 def Torch_AtenEqStrOp : Torch_Op<"aten.eq.str", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::eq.str : (str, str) -> (bool)`";
   let arguments = (ins
@@ -15233,7 +15720,8 @@ def Torch_AtenEqStrOp : Torch_Op<"aten.eq.str", [
 def Torch_AtenNeStrOp : Torch_Op<"aten.ne.str", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ne.str : (str, str) -> (bool)`";
   let arguments = (ins
@@ -15258,7 +15746,8 @@ def Torch_AtenNeStrOp : Torch_Op<"aten.ne.str", [
 def Torch_AtenLenStrOp : Torch_Op<"aten.len.str", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::len.str : (str) -> (int)`";
   let arguments = (ins
@@ -15282,7 +15771,8 @@ def Torch_AtenLenStrOp : Torch_Op<"aten.len.str", [
 def Torch_AtenStrOp : Torch_Op<"aten.str", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::str : (t) -> (str)`";
   let arguments = (ins
@@ -15304,7 +15794,8 @@ def Torch_AtenStrOp : Torch_Op<"aten.str", [
 
 def Torch_AtenFormatOp : Torch_Op<"aten.format", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::format : (...) -> (str)`";
   let arguments = (ins
@@ -15319,7 +15810,8 @@ def Torch_AtenFormatOp : Torch_Op<"aten.format", [
 def Torch_AtenJoinOp : Torch_Op<"aten.join", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::join : (str, str[]) -> (str)`";
   let arguments = (ins
@@ -15366,7 +15858,8 @@ def Torch_AtenWarnOp : Torch_Op<"aten.warn", [
 def Torch_Aten__Contains__StrListOp : Torch_Op<"aten.__contains__.str_list", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__contains__.str_list : (str[], str) -> (bool)`";
   let arguments = (ins
@@ -15391,7 +15884,8 @@ def Torch_Aten__Contains__StrListOp : Torch_Op<"aten.__contains__.str_list", [
 def Torch_AtenFloatScalarOp : Torch_Op<"aten.Float.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::Float.Scalar : (Scalar) -> (float)`";
   let arguments = (ins
@@ -15415,7 +15909,8 @@ def Torch_AtenFloatScalarOp : Torch_Op<"aten.Float.Scalar", [
 def Torch_AtenFloatStrOp : Torch_Op<"aten.Float.str", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::Float.str : (str) -> (float)`";
   let arguments = (ins
@@ -15438,7 +15933,8 @@ def Torch_AtenFloatStrOp : Torch_Op<"aten.Float.str", [
 def Torch_AtenIntFloatOp : Torch_Op<"aten.Int.float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::Int.float : (float) -> (int)`";
   let arguments = (ins
@@ -15462,7 +15958,8 @@ def Torch_AtenIntFloatOp : Torch_Op<"aten.Int.float", [
 def Torch_AtenIntScalarOp : Torch_Op<"aten.Int.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::Int.Scalar : (Scalar) -> (int)`";
   let arguments = (ins
@@ -15486,7 +15983,8 @@ def Torch_AtenIntScalarOp : Torch_Op<"aten.Int.Scalar", [
 def Torch_AtenIntBoolOp : Torch_Op<"aten.Int.bool", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::Int.bool : (bool) -> (int)`";
   let arguments = (ins
@@ -15510,7 +16008,8 @@ def Torch_AtenIntBoolOp : Torch_Op<"aten.Int.bool", [
 def Torch_Aten__RangeLengthOp : Torch_Op<"aten.__range_length", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__range_length : (int, int, int) -> (int)`";
   let arguments = (ins
@@ -15536,7 +16035,8 @@ def Torch_Aten__RangeLengthOp : Torch_Op<"aten.__range_length", [
 def Torch_Aten__DeriveIndexOp : Torch_Op<"aten.__derive_index", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__derive_index : (int, int, int) -> (int)`";
   let arguments = (ins
@@ -15562,7 +16062,8 @@ def Torch_Aten__DeriveIndexOp : Torch_Op<"aten.__derive_index", [
 def Torch_AtenGtIntOp : Torch_Op<"aten.gt.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::gt.int : (int, int) -> (bool)`";
   let arguments = (ins
@@ -15587,7 +16088,8 @@ def Torch_AtenGtIntOp : Torch_Op<"aten.gt.int", [
 def Torch_AtenGeIntOp : Torch_Op<"aten.ge.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ge.int : (int, int) -> (bool)`";
   let arguments = (ins
@@ -15612,7 +16114,8 @@ def Torch_AtenGeIntOp : Torch_Op<"aten.ge.int", [
 def Torch_AtenLtIntOp : Torch_Op<"aten.lt.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::lt.int : (int, int) -> (bool)`";
   let arguments = (ins
@@ -15637,7 +16140,8 @@ def Torch_AtenLtIntOp : Torch_Op<"aten.lt.int", [
 def Torch_AtenLeIntOp : Torch_Op<"aten.le.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::le.int : (int, int) -> (bool)`";
   let arguments = (ins
@@ -15662,7 +16166,8 @@ def Torch_AtenLeIntOp : Torch_Op<"aten.le.int", [
 def Torch_AtenNeIntOp : Torch_Op<"aten.ne.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ne.int : (int, int) -> (bool)`";
   let arguments = (ins
@@ -15687,7 +16192,8 @@ def Torch_AtenNeIntOp : Torch_Op<"aten.ne.int", [
 def Torch_AtenEqIntOp : Torch_Op<"aten.eq.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::eq.int : (int, int) -> (bool)`";
   let arguments = (ins
@@ -15712,7 +16218,8 @@ def Torch_AtenEqIntOp : Torch_Op<"aten.eq.int", [
 def Torch_AtenFloordivIntOp : Torch_Op<"aten.floordiv.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::floordiv.int : (int, int) -> (int)`";
   let arguments = (ins
@@ -15738,7 +16245,8 @@ def Torch_AtenFloordivIntOp : Torch_Op<"aten.floordiv.int", [
 def Torch_AtenRemainderIntOp : Torch_Op<"aten.remainder.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::remainder.int : (int, int) -> (int)`";
   let arguments = (ins
@@ -15763,7 +16271,8 @@ def Torch_AtenRemainderIntOp : Torch_Op<"aten.remainder.int", [
 def Torch_AtenRemainderScalarOp : Torch_Op<"aten.remainder.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::remainder.Scalar : (Tensor, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -15788,7 +16297,8 @@ def Torch_AtenRemainderScalarOp : Torch_Op<"aten.remainder.Scalar", [
 def Torch_AtenRemainderTensorOp : Torch_Op<"aten.remainder.Tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::remainder.Tensor : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -15812,7 +16322,8 @@ def Torch_AtenRemainderTensorOp : Torch_Op<"aten.remainder.Tensor", [
 def Torch_AtenAddIntOp : Torch_Op<"aten.add.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::add.int : (int, int) -> (int)`";
   let arguments = (ins
@@ -15837,7 +16348,8 @@ def Torch_AtenAddIntOp : Torch_Op<"aten.add.int", [
 def Torch_AtenSubIntOp : Torch_Op<"aten.sub.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sub.int : (int, int) -> (int)`";
   let arguments = (ins
@@ -15862,7 +16374,8 @@ def Torch_AtenSubIntOp : Torch_Op<"aten.sub.int", [
 def Torch_AtenMulIntOp : Torch_Op<"aten.mul.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mul.int : (int, int) -> (int)`";
   let arguments = (ins
@@ -15888,7 +16401,8 @@ def Torch_AtenMulIntOp : Torch_Op<"aten.mul.int", [
 def Torch_AtenMulIntFloatOp : Torch_Op<"aten.mul.int_float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mul.int_float : (int, float) -> (float)`";
   let arguments = (ins
@@ -15913,7 +16427,8 @@ def Torch_AtenMulIntFloatOp : Torch_Op<"aten.mul.int_float", [
 def Torch_AtenDivIntOp : Torch_Op<"aten.div.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::div.int : (int, int) -> (float)`";
   let arguments = (ins
@@ -15938,7 +16453,8 @@ def Torch_AtenDivIntOp : Torch_Op<"aten.div.int", [
 def Torch_AtenNegIntOp : Torch_Op<"aten.neg.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::neg.int : (int) -> (int)`";
   let arguments = (ins
@@ -15962,7 +16478,8 @@ def Torch_AtenNegIntOp : Torch_Op<"aten.neg.int", [
 def Torch_AtenLogIntOp : Torch_Op<"aten.log.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::log.int : (int) -> (float)`";
   let arguments = (ins
@@ -15985,7 +16502,8 @@ def Torch_AtenLogIntOp : Torch_Op<"aten.log.int", [
 def Torch_AtenAddFloatIntOp : Torch_Op<"aten.add.float_int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::add.float_int : (float, int) -> (float)`";
   let arguments = (ins
@@ -16010,7 +16528,8 @@ def Torch_AtenAddFloatIntOp : Torch_Op<"aten.add.float_int", [
 def Torch_AtenSubFloatOp : Torch_Op<"aten.sub.float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sub.float : (float, float) -> (float)`";
   let arguments = (ins
@@ -16035,7 +16554,8 @@ def Torch_AtenSubFloatOp : Torch_Op<"aten.sub.float", [
 def Torch_AtenMulFloatOp : Torch_Op<"aten.mul.float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mul.float : (float, float) -> (float)`";
   let arguments = (ins
@@ -16060,7 +16580,8 @@ def Torch_AtenMulFloatOp : Torch_Op<"aten.mul.float", [
 def Torch_AtenDivFloatOp : Torch_Op<"aten.div.float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::div.float : (float, float) -> (float)`";
   let arguments = (ins
@@ -16085,7 +16606,8 @@ def Torch_AtenDivFloatOp : Torch_Op<"aten.div.float", [
 def Torch_AtenNegFloatOp : Torch_Op<"aten.neg.float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::neg.float : (float) -> (float)`";
   let arguments = (ins
@@ -16109,7 +16631,8 @@ def Torch_AtenNegFloatOp : Torch_Op<"aten.neg.float", [
 def Torch_AtenEqFloatOp : Torch_Op<"aten.eq.float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::eq.float : (float, float) -> (bool)`";
   let arguments = (ins
@@ -16134,7 +16657,8 @@ def Torch_AtenEqFloatOp : Torch_Op<"aten.eq.float", [
 def Torch_AtenGtFloatOp : Torch_Op<"aten.gt.float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::gt.float : (float, float) -> (bool)`";
   let arguments = (ins
@@ -16159,7 +16683,8 @@ def Torch_AtenGtFloatOp : Torch_Op<"aten.gt.float", [
 def Torch_AtenGeFloatOp : Torch_Op<"aten.ge.float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ge.float : (float, float) -> (bool)`";
   let arguments = (ins
@@ -16184,7 +16709,8 @@ def Torch_AtenGeFloatOp : Torch_Op<"aten.ge.float", [
 def Torch_AtenLtFloatOp : Torch_Op<"aten.lt.float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::lt.float : (float, float) -> (bool)`";
   let arguments = (ins
@@ -16209,7 +16735,8 @@ def Torch_AtenLtFloatOp : Torch_Op<"aten.lt.float", [
 def Torch_AtenLtFloatIntOp : Torch_Op<"aten.lt.float_int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::lt.float_int : (float, int) -> (bool)`";
   let arguments = (ins
@@ -16233,7 +16760,8 @@ def Torch_AtenLtFloatIntOp : Torch_Op<"aten.lt.float_int", [
 def Torch_AtenGeFloatIntOp : Torch_Op<"aten.ge.float_int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ge.float_int : (float, int) -> (bool)`";
   let arguments = (ins
@@ -16257,7 +16785,8 @@ def Torch_AtenGeFloatIntOp : Torch_Op<"aten.ge.float_int", [
 def Torch_AtenNeFloatIntOp : Torch_Op<"aten.ne.float_int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ne.float_int : (float, int) -> (bool)`";
   let arguments = (ins
@@ -16281,7 +16810,8 @@ def Torch_AtenNeFloatIntOp : Torch_Op<"aten.ne.float_int", [
 def Torch_AtenGtFloatIntOp : Torch_Op<"aten.gt.float_int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::gt.float_int : (float, int) -> (bool)`";
   let arguments = (ins
@@ -16305,7 +16835,8 @@ def Torch_AtenGtFloatIntOp : Torch_Op<"aten.gt.float_int", [
 def Torch_AtenPowIntFloatOp : Torch_Op<"aten.pow.int_float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::pow.int_float : (int, float) -> (float)`";
   let arguments = (ins
@@ -16330,7 +16861,8 @@ def Torch_AtenPowIntFloatOp : Torch_Op<"aten.pow.int_float", [
 def Torch_Aten__And__BoolOp : Torch_Op<"aten.__and__.bool", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__and__.bool : (bool, bool) -> (bool)`";
   let arguments = (ins
@@ -16354,7 +16886,8 @@ def Torch_Aten__And__BoolOp : Torch_Op<"aten.__and__.bool", [
 def Torch_AtenEqBoolOp : Torch_Op<"aten.eq.bool", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::eq.bool : (bool, bool) -> (bool)`";
   let arguments = (ins
@@ -16379,7 +16912,8 @@ def Torch_AtenEqBoolOp : Torch_Op<"aten.eq.bool", [
 def Torch_AtenNeBoolOp : Torch_Op<"aten.ne.bool", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ne.bool : (bool, bool) -> (bool)`";
   let arguments = (ins
@@ -16403,7 +16937,8 @@ def Torch_AtenNeBoolOp : Torch_Op<"aten.ne.bool", [
 
 def Torch_Aten__Is__Op : Torch_Op<"aten.__is__", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__is__ : (t1, t2) -> (bool)`";
   let arguments = (ins
@@ -16427,7 +16962,8 @@ def Torch_Aten__Is__Op : Torch_Op<"aten.__is__", [
 
 def Torch_Aten__Isnot__Op : Torch_Op<"aten.__isnot__", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__isnot__ : (t1, t2) -> (bool)`";
   let arguments = (ins
@@ -16452,7 +16988,8 @@ def Torch_Aten__Isnot__Op : Torch_Op<"aten.__isnot__", [
 def Torch_Aten__Not__Op : Torch_Op<"aten.__not__", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__not__ : (bool) -> (bool)`";
   let arguments = (ins
@@ -16476,7 +17013,8 @@ def Torch_Aten__Not__Op : Torch_Op<"aten.__not__", [
 def Torch_Aten__Or__BoolOp : Torch_Op<"aten.__or__.bool", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__or__.bool : (bool, bool) -> (bool)`";
   let arguments = (ins
@@ -16501,7 +17039,8 @@ def Torch_Aten__Or__BoolOp : Torch_Op<"aten.__or__.bool", [
 def Torch_AtenLenTOp : Torch_Op<"aten.len.t", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::len.t : (t[]) -> (int)`";
   let arguments = (ins
@@ -16526,7 +17065,8 @@ def Torch_AtenLenTOp : Torch_Op<"aten.len.t", [
 def Torch_AtenMulLeftTOp : Torch_Op<"aten.mul.left_t", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mul.left_t : (t[], int) -> (t[])`";
   let arguments = (ins
@@ -16550,7 +17090,8 @@ def Torch_AtenMulLeftTOp : Torch_Op<"aten.mul.left_t", [
 
 def Torch_Aten__Getitem__TOp : Torch_Op<"aten.__getitem__.t", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::__getitem__.t : (t[], int) -> (t)`";
   let arguments = (ins
@@ -16598,7 +17139,8 @@ def Torch_Aten_SetItemTOp : Torch_Op<"aten._set_item.t", [
 def Torch_AtenMulOp : Torch_Op<"aten.mul", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mul : (Scalar, Scalar) -> (Scalar)`";
   let arguments = (ins
@@ -16623,7 +17165,8 @@ def Torch_AtenMulOp : Torch_Op<"aten.mul", [
 def Torch_AtenDivOp : Torch_Op<"aten.div", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::div : (Scalar, Scalar) -> (float)`";
   let arguments = (ins
@@ -16648,7 +17191,8 @@ def Torch_AtenDivOp : Torch_Op<"aten.div", [
 def Torch_AtenAddOp : Torch_Op<"aten.add", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::add : (Scalar, Scalar) -> (Scalar)`";
   let arguments = (ins
@@ -16673,7 +17217,8 @@ def Torch_AtenAddOp : Torch_Op<"aten.add", [
 def Torch_AtenSubOp : Torch_Op<"aten.sub", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sub : (Scalar, Scalar) -> (Scalar)`";
   let arguments = (ins
@@ -16698,7 +17243,8 @@ def Torch_AtenSubOp : Torch_Op<"aten.sub", [
 def Torch_AtenCeilScalarOp : Torch_Op<"aten.ceil.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ceil.Scalar : (Scalar) -> (Scalar)`";
   let arguments = (ins
@@ -16722,7 +17268,8 @@ def Torch_AtenCeilScalarOp : Torch_Op<"aten.ceil.Scalar", [
 def Torch_AtenSqrtIntOp : Torch_Op<"aten.sqrt.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::sqrt.int : (int) -> (float)`";
   let arguments = (ins
@@ -16746,7 +17293,8 @@ def Torch_AtenSqrtIntOp : Torch_Op<"aten.sqrt.int", [
 def Torch_AtenBoolFloatOp : Torch_Op<"aten.Bool.float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::Bool.float : (float) -> (bool)`";
   let arguments = (ins
@@ -16770,7 +17318,8 @@ def Torch_AtenBoolFloatOp : Torch_Op<"aten.Bool.float", [
 def Torch_AtenBoolIntOp : Torch_Op<"aten.Bool.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::Bool.int : (int) -> (bool)`";
   let arguments = (ins
@@ -16794,7 +17343,8 @@ def Torch_AtenBoolIntOp : Torch_Op<"aten.Bool.int", [
 def Torch_AtenEqDeviceOp : Torch_Op<"aten.eq.device", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::eq.device : (Device, Device) -> (bool)`";
   let arguments = (ins
@@ -16818,7 +17368,8 @@ def Torch_AtenEqDeviceOp : Torch_Op<"aten.eq.device", [
 def Torch_AtenCeilFloatOp : Torch_Op<"aten.ceil.float", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ceil.float : (float) -> (int)`";
   let arguments = (ins
@@ -16841,7 +17392,8 @@ def Torch_AtenCeilFloatOp : Torch_Op<"aten.ceil.float", [
 
 def Torch_AtenNarrowOp : Torch_Op<"aten.narrow", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::narrow : (Tensor, int, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -16866,7 +17418,8 @@ def Torch_AtenNarrowOp : Torch_Op<"aten.narrow", [
 
 def Torch_AtenNarrowTensorOp : Torch_Op<"aten.narrow.Tensor", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::narrow.Tensor : (Tensor, int, Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -16892,7 +17445,8 @@ def Torch_AtenNarrowTensorOp : Torch_Op<"aten.narrow.Tensor", [
 def Torch_AtenScalarImplicitOp : Torch_Op<"aten.ScalarImplicit", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::ScalarImplicit : (Tensor) -> (Scalar)`";
   let arguments = (ins
@@ -16916,7 +17470,8 @@ def Torch_AtenScalarImplicitOp : Torch_Op<"aten.ScalarImplicit", [
 def Torch_AtenTriuIndicesOp : Torch_Op<"aten.triu_indices", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::triu_indices : (int, int, int, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -16946,7 +17501,8 @@ def Torch_AtenTriuIndicesOp : Torch_Op<"aten.triu_indices", [
 def Torch_AtenTrilIndicesOp : Torch_Op<"aten.tril_indices", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::tril_indices : (int, int, int, int?, int?, Device?, bool?) -> (Tensor)`";
   let arguments = (ins
@@ -16976,7 +17532,8 @@ def Torch_AtenTrilIndicesOp : Torch_Op<"aten.tril_indices", [
 def Torch_AtenDeg2radOp : Torch_Op<"aten.deg2rad", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::deg2rad : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -16999,7 +17556,8 @@ def Torch_AtenDeg2radOp : Torch_Op<"aten.deg2rad", [
 def Torch_Aten_SoftmaxBackwardDataOp : Torch_Op<"aten._softmax_backward_data", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_softmax_backward_data : (Tensor, Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -17025,7 +17583,8 @@ def Torch_Aten_SoftmaxBackwardDataOp : Torch_Op<"aten._softmax_backward_data", [
 def Torch_AtenTanhBackwardOp : Torch_Op<"aten.tanh_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::tanh_backward : (Tensor, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -17049,7 +17608,8 @@ def Torch_AtenTanhBackwardOp : Torch_Op<"aten.tanh_backward", [
 def Torch_AtenHardtanhBackwardOp : Torch_Op<"aten.hardtanh_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::hardtanh_backward : (Tensor, Tensor, Scalar, Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -17075,7 +17635,8 @@ def Torch_AtenHardtanhBackwardOp : Torch_Op<"aten.hardtanh_backward", [
 def Torch_AtenGeluBackwardOp : Torch_Op<"aten.gelu_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::gelu_backward : (Tensor, Tensor, str) -> (Tensor)`";
   let arguments = (ins
@@ -17100,7 +17661,8 @@ def Torch_AtenGeluBackwardOp : Torch_Op<"aten.gelu_backward", [
 def Torch_Aten_LogSoftmaxBackwardDataOp : Torch_Op<"aten._log_softmax_backward_data", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_log_softmax_backward_data : (Tensor, Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -17126,7 +17688,8 @@ def Torch_Aten_LogSoftmaxBackwardDataOp : Torch_Op<"aten._log_softmax_backward_d
 def Torch_AtenNativeLayerNormBackwardOp : Torch_Op<"aten.native_layer_norm_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::native_layer_norm_backward : (Tensor, Tensor, int[], Tensor, Tensor, Tensor?, Tensor?, bool[]) -> (Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -17158,7 +17721,8 @@ def Torch_AtenNativeLayerNormBackwardOp : Torch_Op<"aten.native_layer_norm_backw
 def Torch_AtenEmbeddingDenseBackwardOp : Torch_Op<"aten.embedding_dense_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::embedding_dense_backward : (Tensor, Tensor, int, int, bool) -> (Tensor)`";
   let arguments = (ins
@@ -17185,7 +17749,8 @@ def Torch_AtenEmbeddingDenseBackwardOp : Torch_Op<"aten.embedding_dense_backward
 def Torch_AtenNativeBatchNormBackwardOp : Torch_Op<"aten.native_batch_norm_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::native_batch_norm_backward : (Tensor, Tensor, Tensor?, Tensor?, Tensor?, Tensor?, Tensor?, bool, float, bool[]) -> (Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -17219,7 +17784,8 @@ def Torch_AtenNativeBatchNormBackwardOp : Torch_Op<"aten.native_batch_norm_backw
 def Torch_AtenNativeGroupNormBackwardOp : Torch_Op<"aten.native_group_norm_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::native_group_norm_backward : (Tensor, Tensor, Tensor, Tensor, Tensor?, int, int, int, int, bool[]) -> (Tensor, Tensor, Tensor)`";
   let arguments = (ins
@@ -17253,7 +17819,8 @@ def Torch_AtenNativeGroupNormBackwardOp : Torch_Op<"aten.native_group_norm_backw
 def Torch_AtenNativeDropoutBackwardOp : Torch_Op<"aten.native_dropout_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::native_dropout_backward : (Tensor, Tensor, float) -> (Tensor)`";
   let arguments = (ins
@@ -17278,7 +17845,8 @@ def Torch_AtenNativeDropoutBackwardOp : Torch_Op<"aten.native_dropout_backward",
 def Torch_AtenEluBackwardOp : Torch_Op<"aten.elu_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::elu_backward : (Tensor, Scalar, Scalar, Scalar, bool, Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -17306,7 +17874,8 @@ def Torch_AtenEluBackwardOp : Torch_Op<"aten.elu_backward", [
 def Torch_AtenLeakyReluBackwardOp : Torch_Op<"aten.leaky_relu_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::leaky_relu_backward : (Tensor, Tensor, Scalar, bool) -> (Tensor)`";
   let arguments = (ins
@@ -17332,7 +17901,8 @@ def Torch_AtenLeakyReluBackwardOp : Torch_Op<"aten.leaky_relu_backward", [
 def Torch_AtenRreluWithNoiseBackwardOp : Torch_Op<"aten.rrelu_with_noise_backward", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::rrelu_with_noise_backward : (Tensor, Tensor, Tensor, Scalar, Scalar, bool, bool) -> (Tensor)`";
   let arguments = (ins
@@ -17361,7 +17931,8 @@ def Torch_AtenRreluWithNoiseBackwardOp : Torch_Op<"aten.rrelu_with_noise_backwar
 def Torch_AtenQuantizePerChannelOp : Torch_Op<"aten.quantize_per_channel", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::quantize_per_channel : (Tensor, Tensor, Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -17388,7 +17959,8 @@ def Torch_AtenQuantizePerChannelOp : Torch_Op<"aten.quantize_per_channel", [
 def Torch_AtenQuantizePerTensorOp : Torch_Op<"aten.quantize_per_tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::quantize_per_tensor : (Tensor, float, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -17414,7 +17986,8 @@ def Torch_AtenQuantizePerTensorOp : Torch_Op<"aten.quantize_per_tensor", [
 def Torch_AtenDequantizeSelfOp : Torch_Op<"aten.dequantize.self", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::dequantize.self : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -17437,7 +18010,8 @@ def Torch_AtenDequantizeSelfOp : Torch_Op<"aten.dequantize.self", [
 def Torch_AtenDequantizeTensorOp : Torch_Op<"aten.dequantize.tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::dequantize.tensor : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -17460,7 +18034,8 @@ def Torch_AtenDequantizeTensorOp : Torch_Op<"aten.dequantize.tensor", [
 def Torch_AtenIntReprOp : Torch_Op<"aten.int_repr", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::int_repr : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -17483,7 +18058,8 @@ def Torch_AtenIntReprOp : Torch_Op<"aten.int_repr", [
 def Torch_Aten_MakePerChannelQuantizedTensorOp : Torch_Op<"aten._make_per_channel_quantized_tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_make_per_channel_quantized_tensor : (Tensor, Tensor, Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -17509,7 +18085,8 @@ def Torch_Aten_MakePerChannelQuantizedTensorOp : Torch_Op<"aten._make_per_channe
 def Torch_Aten_MakePerTensorQuantizedTensorOp : Torch_Op<"aten._make_per_tensor_quantized_tensor", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::_make_per_tensor_quantized_tensor : (Tensor, float, int) -> (Tensor)`";
   let arguments = (ins
@@ -17534,7 +18111,8 @@ def Torch_Aten_MakePerTensorQuantizedTensorOp : Torch_Op<"aten._make_per_tensor_
 def Torch_PrimLayoutOp : Torch_Op<"prim.layout", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prim::layout : (Tensor) -> (int)`";
   let arguments = (ins
@@ -17557,7 +18135,8 @@ def Torch_PrimLayoutOp : Torch_Op<"prim.layout", [
 def Torch_PrimTupleIndexOp : Torch_Op<"prim.TupleIndex", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prim::TupleIndex : (Any, int) -> (Any)`";
   let arguments = (ins
@@ -17582,7 +18161,8 @@ def Torch_PrimTupleIndexOp : Torch_Op<"prim.TupleIndex", [
 def Torch_PrimDeviceOp : Torch_Op<"prim.device", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prim::device : (Tensor) -> (Device)`";
   let arguments = (ins
@@ -17606,7 +18186,8 @@ def Torch_PrimDeviceOp : Torch_Op<"prim.device", [
 def Torch_PrimDtypeOp : Torch_Op<"prim.dtype", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prim::dtype : (Tensor) -> (int)`";
   let arguments = (ins
@@ -17645,7 +18226,8 @@ def Torch_PrimTupleUnpackOp : Torch_Op<"prim.TupleUnpack", [
 def Torch_PrimNumToTensorScalarOp : Torch_Op<"prim.NumToTensor.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prim::NumToTensor.Scalar : (Scalar) -> (Tensor)`";
   let arguments = (ins
@@ -17669,7 +18251,8 @@ def Torch_PrimNumToTensorScalarOp : Torch_Op<"prim.NumToTensor.Scalar", [
 def Torch_PrimMinSelfIntOp : Torch_Op<"prim.min.self_int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prim::min.self_int : (int[]) -> (int)`";
   let arguments = (ins
@@ -17693,7 +18276,8 @@ def Torch_PrimMinSelfIntOp : Torch_Op<"prim.min.self_int", [
 def Torch_PrimMinIntOp : Torch_Op<"prim.min.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prim::min.int : (int, int) -> (int)`";
   let arguments = (ins
@@ -17718,7 +18302,8 @@ def Torch_PrimMinIntOp : Torch_Op<"prim.min.int", [
 def Torch_PrimMaxSelfIntOp : Torch_Op<"prim.max.self_int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prim::max.self_int : (int[]) -> (int)`";
   let arguments = (ins
@@ -17741,7 +18326,8 @@ def Torch_PrimMaxSelfIntOp : Torch_Op<"prim.max.self_int", [
 def Torch_PrimMaxIntOp : Torch_Op<"prim.max.int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prim::max.int : (int, int) -> (int)`";
   let arguments = (ins
@@ -17790,7 +18376,8 @@ def Torch_PrimUninitializedOp : Torch_Op<"prim.Uninitialized", [
     Pure,
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prim::Uninitialized : () -> (Any)`";
   let arguments = (ins
@@ -17813,7 +18400,8 @@ def Torch_PrimUninitializedOp : Torch_Op<"prim.Uninitialized", [
 def Torch_PrimUncheckedCastOp : Torch_Op<"prim.unchecked_cast", [
     DeclareOpInterfaceMethods<CastOpInterface>,
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prim::unchecked_cast : (t) -> (t)`";
   let arguments = (ins
@@ -17864,7 +18452,8 @@ def Torch_PrimTolistOp : Torch_Op<"prim.tolist", [
 def Torch_PrimAbsScalarOp : Torch_Op<"prim.abs.Scalar", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prim::abs.Scalar : (Scalar) -> (Scalar)`";
   let arguments = (ins
@@ -17887,7 +18476,8 @@ def Torch_PrimAbsScalarOp : Torch_Op<"prim.abs.Scalar", [
 def Torch_PrimsConvertElementTypeOp : Torch_Op<"prims.convert_element_type", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prims::convert_element_type : (Tensor, int) -> (Tensor)`";
   let arguments = (ins
@@ -17912,7 +18502,8 @@ def Torch_PrimsConvertElementTypeOp : Torch_Op<"prims.convert_element_type", [
 def Torch_PrimsVarOp : Torch_Op<"prims.var", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prims::var : (Tensor, int[]?, float?, int?) -> (Tensor)`";
   let arguments = (ins
@@ -17938,7 +18529,8 @@ def Torch_PrimsVarOp : Torch_Op<"prims.var", [
 def Torch_PrimsSqrtOp : Torch_Op<"prims.sqrt", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prims::sqrt : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -17961,7 +18553,8 @@ def Torch_PrimsSqrtOp : Torch_Op<"prims.sqrt", [
 def Torch_PrimsCollapseOp : Torch_Op<"prims.collapse", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prims::collapse : (Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -17985,7 +18578,8 @@ def Torch_PrimsCollapseOp : Torch_Op<"prims.collapse", [
 
 def Torch_PrimsSplitDimOp : Torch_Op<"prims.split_dim", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prims::split_dim : (Tensor, int, int) -> (Tensor)`";
   let arguments = (ins
@@ -18009,7 +18603,8 @@ def Torch_PrimsSplitDimOp : Torch_Op<"prims.split_dim", [
 
 def Torch_PrimsSqueezeOp : Torch_Op<"prims.squeeze", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prims::squeeze : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -18032,7 +18627,8 @@ def Torch_PrimsSqueezeOp : Torch_Op<"prims.squeeze", [
 
 def Torch_PrimsViewOfOp : Torch_Op<"prims.view_of", [
     AllowsTypeRefinement,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prims::view_of : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -18056,7 +18652,8 @@ def Torch_PrimsViewOfOp : Torch_Op<"prims.view_of", [
 def Torch_PrimsIotaOp : Torch_Op<"prims.iota", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `prims::iota : (int, int, int, int, Device, bool) -> (Tensor)`";
   let arguments = (ins
@@ -18085,7 +18682,8 @@ def Torch_QuantizedLinearOp : Torch_Op<"quantized.linear", [
     HasValueSemantics,
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `quantized::linear : (Tensor, __torch__.torch.classes.quantized.LinearPackedParamsBase, float, int) -> (Tensor)`";
   let arguments = (ins
@@ -18111,7 +18709,8 @@ def Torch_QuantizedLinearOp : Torch_Op<"quantized.linear", [
 def Torch_TorchvisionDeformConv2dOp : Torch_Op<"torchvision.deform_conv2d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `torchvision::deform_conv2d : (Tensor, Tensor, Tensor, Tensor, Tensor, int, int, int, int, int, int, int, int, bool) -> (Tensor)`";
   let arguments = (ins
@@ -18147,7 +18746,8 @@ def Torch_TorchvisionDeformConv2dOp : Torch_Op<"torchvision.deform_conv2d", [
 def Torch_TorchvisionRoiAlignOp : Torch_Op<"torchvision.roi_align", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `torchvision::roi_align : (Tensor, Tensor, float, int, int, int, bool) -> (Tensor)`";
   let arguments = (ins
@@ -18176,7 +18776,8 @@ def Torch_TorchvisionRoiAlignOp : Torch_Op<"torchvision.roi_align", [
 def Torch_TorchvisionRoiPoolOp : Torch_Op<"torchvision.roi_pool", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `torchvision::roi_pool : (Tensor, Tensor, float, int, int) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -18204,7 +18805,8 @@ def Torch_TorchvisionRoiPoolOp : Torch_Op<"torchvision.roi_pool", [
 def Torch_TorchvisionNmsOp : Torch_Op<"torchvision.nms", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `torchvision::nms : (Tensor, Tensor, float) -> (Tensor)`";
   let arguments = (ins
diff --git a/projects/pt1/python/torch_mlir/jit_ir_importer/build_tools/torch_ods_gen.py b/projects/pt1/python/torch_mlir/jit_ir_importer/build_tools/torch_ods_gen.py
index 07029d0894ee..c59edd7ab5d1 100644
--- a/projects/pt1/python/torch_mlir/jit_ir_importer/build_tools/torch_ods_gen.py
+++ b/projects/pt1/python/torch_mlir/jit_ir_importer/build_tools/torch_ods_gen.py
@@ -242,6 +242,7 @@ def emit_op(
     has_folder: bool = False,
     has_canonicalizer: bool = False,
     has_verifier: bool = False,
+    has_memory_effects: bool = False,
 ):
     """Main entry point for op emission.
 
@@ -257,6 +258,12 @@ def emit_op(
         traits += ["HasValueSemantics"]
     if operator.is_readonly():
         traits += ["ReadOnly"]
+    # If a ReadOnly op has no returns, it is likely to have side effects.
+    # E.g. `prim.RaiseException` and `prim.Print`
+    # Besides ops with no returned values, there may be other ReadOnly ops with memory effects.
+    # In such cases, these ops can be emitted with `has_memory_effects=True` to avoid this trait.
+    if operator.is_readonly() and len(operator.returns) != 0 and not has_memory_effects:
+        traits += ["NoMemoryEffect"]
 
     raw_emit_op(
         operator,
diff --git a/test/Dialect/Torch/canonicalize.mlir b/test/Dialect/Torch/canonicalize.mlir
index 12778f4017e8..3334066ed0f9 100644
--- a/test/Dialect/Torch/canonicalize.mlir
+++ b/test/Dialect/Torch/canonicalize.mlir
@@ -1557,7 +1557,6 @@ func.func @torch.prim.unchecked_cast$derefine(%arg0: !torch.list<int>) -> !torch
 
 // CHECK-LABEL:   func.func @torch.aten.Int.Tensor(
 // CHECK-SAME:            %[[NUM:.*]]: !torch.int) -> !torch.int {
-// CHECK:           %[[T:.*]] = torch.prim.NumToTensor.Scalar %[[NUM]] : !torch.int -> !torch.vtensor<[],si64>
 // CHECK:           return %[[NUM]] : !torch.int
 func.func @torch.aten.Int.Tensor(%arg0: !torch.int) -> !torch.int {
   %tensor = torch.prim.NumToTensor.Scalar %arg0: !torch.int -> !torch.vtensor<[],si64>
@@ -1585,7 +1584,6 @@ func.func @torch.aten.Int.float() -> !torch.int {
 
 // CHECK-LABEL:   func.func @torch.aten.Float.Tensor(
 // CHECK-SAME:            %[[NUM:.*]]: !torch.float) -> !torch.float {
-// CHECK:           %[[T:.*]] = torch.prim.NumToTensor.Scalar %[[NUM]] : !torch.float -> !torch.vtensor<[],f64>
 // CHECK:           return %[[NUM]] : !torch.float
 func.func @torch.aten.Float.Tensor(%arg0: !torch.float) -> !torch.float {
   %tensor = torch.prim.NumToTensor.Scalar %arg0: !torch.float -> !torch.vtensor<[],f64>

From c4f1e49a687d2bb5636c342877fb70d99674a6d4 Mon Sep 17 00:00:00 2001
From: zjgarvey <zjgarvey@gmail.com>
Date: Fri, 22 Nov 2024 17:52:01 -0600
Subject: [PATCH 2/4] Remove unused RemoveUnused patterns

---
 .../Dialect/Torch/IR/GeneratedTorchOps.td     |  1 -
 lib/Dialect/Torch/IR/TorchOps.cpp             | 25 ------------
 .../Transforms/AbstractInterpLibrary.cpp      | 38 +++++++------------
 .../Torch/Transforms/FuseQuantizedOps.cpp     | 25 ------------
 .../Torch/Transforms/ScalarizeShapes.cpp      | 34 -----------------
 .../build_tools/torch_ods_gen.py              |  2 +-
 6 files changed, 15 insertions(+), 110 deletions(-)

diff --git a/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td b/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td
index a7456b0d7d0f..48b2a4138910 100644
--- a/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td
+++ b/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td
@@ -18394,7 +18394,6 @@ def Torch_PrimUninitializedOp : Torch_Op<"prim.Uninitialized", [
       printDefaultTorchOp(printer, *this, 0, 1);
     }
   }];
-  let hasCanonicalizer = 1;
 }
 
 def Torch_PrimUncheckedCastOp : Torch_Op<"prim.unchecked_cast", [
diff --git a/lib/Dialect/Torch/IR/TorchOps.cpp b/lib/Dialect/Torch/IR/TorchOps.cpp
index 87d1464e245c..eee37302a256 100644
--- a/lib/Dialect/Torch/IR/TorchOps.cpp
+++ b/lib/Dialect/Torch/IR/TorchOps.cpp
@@ -2288,17 +2288,6 @@ void AtenSizeOp::getCanonicalizationPatterns(RewritePatternSet &patterns,
         listElements);
     return success();
   });
-  // One-off pattern to erase if dead.
-  // TODO: Use the effects infra to express the semantics of this op and enable
-  // a centralized "erase if dead" canonicalization.
-  // Specifically, we need to mark the op as only MemoryEffects::Allocate
-  // so that `mlir::wouldOpBeTriviallyDead` does the right thing.
-  patterns.add(+[](AtenSizeOp op, PatternRewriter &rewriter) {
-    if (!op.use_empty())
-      return failure();
-    rewriter.eraseOp(op);
-    return failure();
-  });
 }
 
 //===----------------------------------------------------------------------===//
@@ -3490,20 +3479,6 @@ void PrimTupleIndexOp::getCanonicalizationPatterns(RewritePatternSet &patterns,
   });
 }
 
-//===----------------------------------------------------------------------===//
-// PrimUninitializedOp
-//===----------------------------------------------------------------------===//
-
-void PrimUninitializedOp::getCanonicalizationPatterns(
-    RewritePatternSet &patterns, MLIRContext *context) {
-  patterns.add(+[](PrimUninitializedOp op, PatternRewriter &rewriter) {
-    if (!op.use_empty())
-      return failure();
-    rewriter.eraseOp(op);
-    return success();
-  });
-}
-
 //===----------------------------------------------------------------------===//
 // PrimTupleUnpackOp
 //===----------------------------------------------------------------------===//
diff --git a/lib/Dialect/Torch/Transforms/AbstractInterpLibrary.cpp b/lib/Dialect/Torch/Transforms/AbstractInterpLibrary.cpp
index a8ce5ed20c6b..6ca393798e7c 100644
--- a/lib/Dialect/Torch/Transforms/AbstractInterpLibrary.cpp
+++ b/lib/Dialect/Torch/Transforms/AbstractInterpLibrary.cpp
@@ -4892,17 +4892,15 @@ StringRef mlir::torch::Torch::getAbstractInterpLibrary() {
 "    } else {\n"
 "      %12 = torch.aten.__isnot__ %5#1, %none : !torch.optional<int>, !torch.none -> !torch.bool\n"
 "      %13 = torch.prim.If %12 -> (!torch.bool) {\n"
-"        %15 = torch.prim.unchecked_cast %5#1 : !torch.optional<int> -> !torch.int\n"
-"        %16 = torch.aten.gt.int %5#0, %int0 : !torch.int, !torch.int -> !torch.bool\n"
-"        torch.prim.If.yield %16 : !torch.bool\n"
+"        %15 = torch.aten.gt.int %5#0, %int0 : !torch.int, !torch.int -> !torch.bool\n"
+"        torch.prim.If.yield %15 : !torch.bool\n"
 "      } else {\n"
 "        torch.prim.If.yield %false : !torch.bool\n"
 "      }\n"
 "      %14 = torch.prim.If %13 -> (!torch.bool) {\n"
-"        %15 = torch.prim.unchecked_cast %5#1 : !torch.optional<int> -> !torch.int\n"
-"        %16 = torch.aten.remainder.int %1, %5#0 : !torch.int, !torch.int -> !torch.int\n"
-"        %17 = torch.aten.eq.int %16, %int0 : !torch.int, !torch.int -> !torch.bool\n"
-"        torch.prim.If.yield %17 : !torch.bool\n"
+"        %15 = torch.aten.remainder.int %1, %5#0 : !torch.int, !torch.int -> !torch.int\n"
+"        %16 = torch.aten.eq.int %15, %int0 : !torch.int, !torch.int -> !torch.bool\n"
+"        torch.prim.If.yield %16 : !torch.bool\n"
 "      } else {\n"
 "        torch.prim.If.yield %false : !torch.bool\n"
 "      }\n"
@@ -4982,17 +4980,15 @@ StringRef mlir::torch::Torch::getAbstractInterpLibrary() {
 "    } else {\n"
 "      %9 = torch.aten.__isnot__ %3#1, %none : !torch.optional<int>, !torch.none -> !torch.bool\n"
 "      %10 = torch.prim.If %9 -> (!torch.bool) {\n"
-"        %12 = torch.prim.unchecked_cast %3#1 : !torch.optional<int> -> !torch.int\n"
-"        %13 = torch.aten.gt.int %3#0, %int0 : !torch.int, !torch.int -> !torch.bool\n"
-"        torch.prim.If.yield %13 : !torch.bool\n"
+"        %12 = torch.aten.gt.int %3#0, %int0 : !torch.int, !torch.int -> !torch.bool\n"
+"        torch.prim.If.yield %12 : !torch.bool\n"
 "      } else {\n"
 "        torch.prim.If.yield %false : !torch.bool\n"
 "      }\n"
 "      %11 = torch.prim.If %10 -> (!torch.bool) {\n"
-"        %12 = torch.prim.unchecked_cast %3#1 : !torch.optional<int> -> !torch.int\n"
-"        %13 = torch.aten.remainder.int %arg1, %3#0 : !torch.int, !torch.int -> !torch.int\n"
-"        %14 = torch.aten.eq.int %13, %int0 : !torch.int, !torch.int -> !torch.bool\n"
-"        torch.prim.If.yield %14 : !torch.bool\n"
+"        %12 = torch.aten.remainder.int %arg1, %3#0 : !torch.int, !torch.int -> !torch.int\n"
+"        %13 = torch.aten.eq.int %12, %int0 : !torch.int, !torch.int -> !torch.bool\n"
+"        torch.prim.If.yield %13 : !torch.bool\n"
 "      } else {\n"
 "        torch.prim.If.yield %false : !torch.bool\n"
 "      }\n"
@@ -5452,7 +5448,6 @@ StringRef mlir::torch::Torch::getAbstractInterpLibrary() {
 "      %11 = torch.aten.__is__ %arg1, %none : !torch.optional<list<int>>, !torch.none -> !torch.bool\n"
 "      torch.prim.If.yield %11 : !torch.bool\n"
 "    } else {\n"
-"      %11 = torch.prim.unchecked_cast %arg2 : !torch.optional<list<float>> -> !torch.list<float>\n"
 "      torch.prim.If.yield %false : !torch.bool\n"
 "    }\n"
 "    torch.prim.If %7 -> () {\n"
@@ -7444,7 +7439,6 @@ StringRef mlir::torch::Torch::getAbstractInterpLibrary() {
 "    %1 = torch.prim.If %0 -> (!torch.bool) {\n"
 "      torch.prim.If.yield %arg2 : !torch.bool\n"
 "    } else {\n"
-"      %3 = torch.prim.unchecked_cast %arg1 : !torch.optional<int> -> !torch.int\n"
 "      torch.prim.If.yield %false : !torch.bool\n"
 "    }\n"
 "    %2 = torch.prim.If %1 -> (!torch.list<int>) {\n"
@@ -11138,9 +11132,8 @@ StringRef mlir::torch::Torch::getAbstractInterpLibrary() {
 "    %4 = torch.prim.If %3 -> (!torch.bool) {\n"
 "      torch.prim.If.yield %true : !torch.bool\n"
 "    } else {\n"
-"      %11 = torch.prim.unchecked_cast %arg1 : !torch.optional<list<int>> -> !torch.list<int>\n"
-"      %12 = torch.aten.__is__ %arg2, %none : !torch.optional<list<float>>, !torch.none -> !torch.bool\n"
-"      torch.prim.If.yield %12 : !torch.bool\n"
+"      %11 = torch.aten.__is__ %arg2, %none : !torch.optional<list<float>>, !torch.none -> !torch.bool\n"
+"      torch.prim.If.yield %11 : !torch.bool\n"
 "    }\n"
 "    %5:2 = torch.prim.If %4 -> (!torch.optional<list<int>>, !torch.optional<list<float>>) {\n"
 "      torch.prim.If.yield %arg1, %arg2 : !torch.optional<list<int>>, !torch.optional<list<float>>\n"
@@ -11153,7 +11146,6 @@ StringRef mlir::torch::Torch::getAbstractInterpLibrary() {
 "      %11 = torch.aten.__is__ %5#1, %none : !torch.optional<list<float>>, !torch.none -> !torch.bool\n"
 "      torch.prim.If.yield %11 : !torch.bool\n"
 "    } else {\n"
-"      %11 = torch.prim.unchecked_cast %5#0 : !torch.optional<list<int>> -> !torch.list<int>\n"
 "      torch.prim.If.yield %false : !torch.bool\n"
 "    }\n"
 "    %8 = torch.aten.__not__ %7 : !torch.bool -> !torch.bool\n"
@@ -11217,9 +11209,8 @@ StringRef mlir::torch::Torch::getAbstractInterpLibrary() {
 "    %4 = torch.prim.If %3 -> (!torch.bool) {\n"
 "      torch.prim.If.yield %true : !torch.bool\n"
 "    } else {\n"
-"      %11 = torch.prim.unchecked_cast %arg1 : !torch.optional<list<int>> -> !torch.list<int>\n"
-"      %12 = torch.aten.__is__ %arg2, %none : !torch.optional<list<float>>, !torch.none -> !torch.bool\n"
-"      torch.prim.If.yield %12 : !torch.bool\n"
+"      %11 = torch.aten.__is__ %arg2, %none : !torch.optional<list<float>>, !torch.none -> !torch.bool\n"
+"      torch.prim.If.yield %11 : !torch.bool\n"
 "    }\n"
 "    %5:2 = torch.prim.If %4 -> (!torch.optional<list<int>>, !torch.optional<list<float>>) {\n"
 "      torch.prim.If.yield %arg1, %arg2 : !torch.optional<list<int>>, !torch.optional<list<float>>\n"
@@ -11232,7 +11223,6 @@ StringRef mlir::torch::Torch::getAbstractInterpLibrary() {
 "      %11 = torch.aten.__is__ %5#1, %none : !torch.optional<list<float>>, !torch.none -> !torch.bool\n"
 "      torch.prim.If.yield %11 : !torch.bool\n"
 "    } else {\n"
-"      %11 = torch.prim.unchecked_cast %5#0 : !torch.optional<list<int>> -> !torch.list<int>\n"
 "      torch.prim.If.yield %false : !torch.bool\n"
 "    }\n"
 "    %8 = torch.aten.__not__ %7 : !torch.bool -> !torch.bool\n"
diff --git a/lib/Dialect/Torch/Transforms/FuseQuantizedOps.cpp b/lib/Dialect/Torch/Transforms/FuseQuantizedOps.cpp
index 5da8217f6940..c56b1cad0f32 100644
--- a/lib/Dialect/Torch/Transforms/FuseQuantizedOps.cpp
+++ b/lib/Dialect/Torch/Transforms/FuseQuantizedOps.cpp
@@ -37,8 +37,6 @@ template <> struct QuantInfo<AtenReluOp> {
 // where MPTQT = "Aten_MakePerTensorQuantizedTensorOp"
 // and Dequant = "AtenDequantizeSelfOp" or "AtenDequantizeTensorOp"
 bool isQCommutingOp(mlir::Operation *op) {
-  // if adding a new commuting op here, be sure to add a
-  // RemoveUnused pattern for that op to clean up afterwards
   return llvm::isa<AtenTransposeIntOp, AtenReshapeOp, AtenSliceTensorOp,
                    PrimsCollapseOp, AtenViewOp, AtenPadOp, AtenConstantPadNdOp>(
       op);
@@ -419,35 +417,12 @@ class QuantizeResultLikeOperand : public OpRewritePattern<SrcOp> {
   }
 };
 
-template <typename SrcOp> class RemoveUnused : public OpRewritePattern<SrcOp> {
-public:
-  using OpRewritePattern<SrcOp>::OpRewritePattern;
-
-  LogicalResult matchAndRewrite(SrcOp op,
-                                PatternRewriter &rewriter) const override {
-    auto result = op.getResult();
-    if (result.use_empty()) {
-      op.erase();
-      return success();
-    }
-    return failure();
-  }
-};
-
 class FuseQuantizedOpsPass : public FuseQuantizedOpsBase<FuseQuantizedOpsPass> {
 public:
   void runOnOperation() override {
     MLIRContext *context = &getContext();
     RewritePatternSet patterns(context);
     patterns.insert<
-        RemoveUnused<AtenDequantizeSelfOp>,
-        RemoveUnused<AtenDequantizeTensorOp>,
-        RemoveUnused<AtenQuantizePerTensorOp>,
-        RemoveUnused<Aten_MakePerTensorQuantizedTensorOp>,
-        RemoveUnused<AtenTransposeIntOp>, RemoveUnused<AtenSliceTensorOp>,
-        RemoveUnused<AtenReshapeOp>, RemoveUnused<PrimsCollapseOp>,
-        RemoveUnused<AtenViewOp>, RemoveUnused<AtenPadOp>,
-        RemoveUnused<AtenConstantPadNdOp>,
         QuantizeOperandsPastCommutingOps<AtenConvolutionOp, 5>,
         QuantizeOperandsPastCommutingOps<AtenReluOp, 0>,
         QuantizeOperandsPastCommutingOps<AtenMatmulOp, 2>,
diff --git a/lib/Dialect/Torch/Transforms/ScalarizeShapes.cpp b/lib/Dialect/Torch/Transforms/ScalarizeShapes.cpp
index 634e910d4c32..c7eeaf5b2354 100644
--- a/lib/Dialect/Torch/Transforms/ScalarizeShapes.cpp
+++ b/lib/Dialect/Torch/Transforms/ScalarizeShapes.cpp
@@ -1396,22 +1396,6 @@ class CanonicalizeAtenViewPattern : public OpRewritePattern<AtenViewOp> {
 };
 } // namespace
 
-namespace {
-template <typename T> class RemoveUnusedPattern : public OpRewritePattern<T> {
-public:
-  using OpRewritePattern<T>::OpRewritePattern;
-  LogicalResult matchAndRewrite(T op,
-                                PatternRewriter &rewriter) const override {
-    for (auto use : op->getResults())
-      if (!use.use_empty())
-        return failure();
-
-    rewriter.eraseOp(op);
-    return success();
-  }
-};
-} // namespace
-
 namespace {
 
 bool isItemForSliceOp(Operation *op) {
@@ -1512,23 +1496,6 @@ void populateScalarizationPropagationPatterns(RewritePatternSet &patterns) {
       patterns.getContext());
 }
 
-void populateScalarizationRemovePatterns(RewritePatternSet &patterns) {
-  patterns.insert<RemoveUnusedPattern<Torch::AtenIntBoolOp>,
-                  RemoveUnusedPattern<Torch::AtenEqIntOp>,
-                  RemoveUnusedPattern<Torch::AtenToDtypeOp>,
-                  RemoveUnusedPattern<Torch::PrimNumToTensorScalarOp>,
-                  RemoveUnusedPattern<Torch::AtenFullOp>,
-                  RemoveUnusedPattern<Torch::AtenUnsqueezeOp>,
-                  RemoveUnusedPattern<Torch::AtenSqueezeDimOp>,
-                  RemoveUnusedPattern<Torch::AtenSizeIntOp>,
-                  RemoveUnusedPattern<Torch::AtenSliceTensorOp>,
-                  RemoveUnusedPattern<Torch::AtenTensorOp>,
-                  RemoveUnusedPattern<Torch::AtenFloatScalarOp>,
-                  RemoveUnusedPattern<Torch::AtenIntScalarOp>,
-                  RemoveUnusedPattern<Torch::PrimListConstructOp>>(
-      patterns.getContext());
-}
-
 } // namespace
 namespace {
 class ScalarizeShapesPass : public ScalarizeShapesBase<ScalarizeShapesPass> {
@@ -1545,7 +1512,6 @@ class ScalarizeShapesPass : public ScalarizeShapesBase<ScalarizeShapesPass> {
     populateScalarizationPropagationPatterns(patterns);
     populateScalarizationFoldPatterns(patterns);
     populateScalarizationCanonicalizePatterns(patterns);
-    populateScalarizationRemovePatterns(patterns);
     context->getLoadedDialect<mlir::arith::ArithDialect>()
         ->getCanonicalizationPatterns(patterns);
     // don't load torch canonicalization patterns, since these may lead to
diff --git a/projects/pt1/python/torch_mlir/jit_ir_importer/build_tools/torch_ods_gen.py b/projects/pt1/python/torch_mlir/jit_ir_importer/build_tools/torch_ods_gen.py
index c59edd7ab5d1..dee65579c913 100644
--- a/projects/pt1/python/torch_mlir/jit_ir_importer/build_tools/torch_ods_gen.py
+++ b/projects/pt1/python/torch_mlir/jit_ir_importer/build_tools/torch_ods_gen.py
@@ -1234,7 +1234,7 @@ def emit_with_mutating_variants(key, **kwargs):
     emit("prim::max.self_int : (int[]) -> (int)")
     emit("prim::max.int : (int, int) -> (int)", has_folder=True)
     emit("prim::RaiseException : (str, str?) -> ()")
-    emit("prim::Uninitialized : () -> (Any)", has_canonicalizer=True, traits=["Pure"])
+    emit("prim::Uninitialized : () -> (Any)", traits=["Pure"])
     emit(
         "prim::unchecked_cast : (t) -> (t)",
         has_folder=True,

From 76787e82599fd895209646ee2e3bb9a947233382 Mon Sep 17 00:00:00 2001
From: zjgarvey <zjgarvey@gmail.com>
Date: Mon, 9 Dec 2024 11:16:22 -0600
Subject: [PATCH 3/4] Update torch-ods for new op

---
 .../Dialect/Torch/IR/GeneratedTorchOps.td         | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td b/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td
index a3482d29cd24..952e48554822 100644
--- a/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td
+++ b/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td
@@ -6858,7 +6858,8 @@ def Torch_AtenConv3dOp : Torch_Op<"aten.conv3d", [
 def Torch_AtenConv3dPaddingOp : Torch_Op<"aten.conv3d.padding", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::conv3d.padding : (Tensor, Tensor, Tensor?, int[], str, int[], int) -> (Tensor)`";
   let arguments = (ins
@@ -6917,7 +6918,8 @@ def Torch_AtenConv2dOp : Torch_Op<"aten.conv2d", [
 def Torch_AtenConv2dPaddingOp : Torch_Op<"aten.conv2d.padding", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::conv2d.padding : (Tensor, Tensor, Tensor?, int[], str, int[], int) -> (Tensor)`";
   let arguments = (ins
@@ -6976,7 +6978,8 @@ def Torch_AtenConv1dOp : Torch_Op<"aten.conv1d", [
 def Torch_AtenConv1dPaddingOp : Torch_Op<"aten.conv1d.padding", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::conv1d.padding : (Tensor, Tensor, Tensor?, int[], str, int[], int) -> (Tensor)`";
   let arguments = (ins
@@ -13829,7 +13832,8 @@ def Torch_AtenFftFftOp : Torch_Op<"aten.fft_fft", [
 def Torch_AtenFftRfftOp : Torch_Op<"aten.fft_rfft", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::fft_rfft : (Tensor, int?, int, str?) -> (Tensor)`";
   let arguments = (ins
@@ -16641,7 +16645,8 @@ def Torch_AtenAddFloatIntOp : Torch_Op<"aten.add.float_int", [
 def Torch_AtenMulFloatIntOp : Torch_Op<"aten.mul.float_int", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::mul.float_int : (float, int) -> (float)`";
   let arguments = (ins

From 38f3adad1bada3b94240886e78de0a4f92327559 Mon Sep 17 00:00:00 2001
From: zjgarvey <zjgarvey@gmail.com>
Date: Thu, 13 Feb 2025 10:42:22 -0600
Subject: [PATCH 4/4] rerun tablegen gen

---
 .../Dialect/Torch/IR/GeneratedTorchOps.td     | 183 +-----------------
 1 file changed, 6 insertions(+), 177 deletions(-)

diff --git a/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td b/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td
index 280894aa78e0..acb2fceed874 100644
--- a/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td
+++ b/include/torch-mlir/Dialect/Torch/IR/GeneratedTorchOps.td
@@ -4709,30 +4709,8 @@ def Torch_AtenTrunc_Op : Torch_Op<"aten.trunc_", [
 def Torch_AtenSpecialExpm1Op : Torch_Op<"aten.special_expm1", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
-  ]> {
-  let summary = "Generated op for `aten::special_expm1 : (Tensor) -> (Tensor)`";
-  let arguments = (ins
-    AnyTorchTensorType:$self
-  );
-  let results = (outs
-    AnyTorchOptionalTensorType:$result
-  );
-  let hasCustomAssemblyFormat = 1;
-  let extraClassDefinition = [{
-    ParseResult AtenSpecialExpm1Op::parse(OpAsmParser &parser, OperationState &result) {
-      return parseDefaultTorchOp(parser, result, 1, 1);
-    }
-    void AtenSpecialExpm1Op::print(OpAsmPrinter &printer) {
-      printDefaultTorchOp(printer, *this, 1, 1);
-    }
-  }];
-}
-
-def Torch_AtenSpecialExpm1Op : Torch_Op<"aten.special_expm1", [
-    AllowsTypeRefinement,
-    HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::special_expm1 : (Tensor) -> (Tensor)`";
   let arguments = (ins
@@ -10314,31 +10292,8 @@ def Torch_AtenReflectionPad2dOp : Torch_Op<"aten.reflection_pad2d", [
 def Torch_AtenReflectionPad3dOp : Torch_Op<"aten.reflection_pad3d", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
-  ]> {
-  let summary = "Generated op for `aten::reflection_pad3d : (Tensor, int[]) -> (Tensor)`";
-  let arguments = (ins
-    AnyTorchTensorType:$self,
-    AnyTorchListOfTorchIntType:$padding
-  );
-  let results = (outs
-    AnyTorchOptionalTensorType:$result
-  );
-  let hasCustomAssemblyFormat = 1;
-  let extraClassDefinition = [{
-    ParseResult AtenReflectionPad3dOp::parse(OpAsmParser &parser, OperationState &result) {
-      return parseDefaultTorchOp(parser, result, 2, 1);
-    }
-    void AtenReflectionPad3dOp::print(OpAsmPrinter &printer) {
-      printDefaultTorchOp(printer, *this, 2, 1);
-    }
-  }];
-}
-
-def Torch_AtenReflectionPad3dOp : Torch_Op<"aten.reflection_pad3d", [
-    AllowsTypeRefinement,
-    HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::reflection_pad3d : (Tensor, int[]) -> (Tensor)`";
   let arguments = (ins
@@ -14333,33 +14288,6 @@ def Torch_Aten_AssertTensorMetadataOp : Torch_Op<"aten._assert_tensor_metadata",
   let hasFolder = 1;
 }
 
-def Torch_Aten_AssertTensorMetadataOp : Torch_Op<"aten._assert_tensor_metadata", [
-    AllowsTypeRefinement,
-    ReadOnly
-  ]> {
-  let summary = "Generated op for `aten::_assert_tensor_metadata : (Tensor, int[]?, int[]?, int?, Device?, int?) -> ()`";
-  let arguments = (ins
-    AnyTorchTensorType:$a,
-    AnyTorchOptionalListOfTorchIntType:$size,
-    AnyTorchOptionalListOfTorchIntType:$stride,
-    AnyTorchOptionalIntType:$dtype,
-    AnyTorchOptionalDeviceType:$device,
-    AnyTorchOptionalIntType:$layout
-  );
-  let results = (outs
-  );
-  let hasCustomAssemblyFormat = 1;
-  let extraClassDefinition = [{
-    ParseResult Aten_AssertTensorMetadataOp::parse(OpAsmParser &parser, OperationState &result) {
-      return parseDefaultTorchOp(parser, result, 6, 0);
-    }
-    void Aten_AssertTensorMetadataOp::print(OpAsmPrinter &printer) {
-      printDefaultTorchOp(printer, *this, 6, 0);
-    }
-  }];
-  let hasFolder = 1;
-}
-
 def Torch_AtenDiagonalOp : Torch_Op<"aten.diagonal", [
     AllowsTypeRefinement,
     ReadOnly,
@@ -18220,36 +18148,8 @@ def Torch_AtenRreluWithNoiseBackwardOp : Torch_Op<"aten.rrelu_with_noise_backwar
 def Torch_AtenRreluWithNoiseFunctionalOp : Torch_Op<"aten.rrelu_with_noise_functional", [
     AllowsTypeRefinement,
     HasValueSemantics,
-    ReadOnly
-  ]> {
-  let summary = "Generated op for `aten::rrelu_with_noise_functional : (Tensor, Tensor, Scalar, Scalar, bool, Generator?) -> (Tensor, Tensor)`";
-  let arguments = (ins
-    AnyTorchTensorType:$self,
-    AnyTorchTensorType:$noise,
-    AnyTorchScalarType:$lower,
-    AnyTorchScalarType:$upper,
-    Torch_BoolType:$training,
-    AnyTorchOptionalGeneratorType:$generator
-  );
-  let results = (outs
-    AnyTorchOptionalTensorType:$result0,
-    AnyTorchOptionalTensorType:$noise_out
-  );
-  let hasCustomAssemblyFormat = 1;
-  let extraClassDefinition = [{
-    ParseResult AtenRreluWithNoiseFunctionalOp::parse(OpAsmParser &parser, OperationState &result) {
-      return parseDefaultTorchOp(parser, result, 6, 2);
-    }
-    void AtenRreluWithNoiseFunctionalOp::print(OpAsmPrinter &printer) {
-      printDefaultTorchOp(printer, *this, 6, 2);
-    }
-  }];
-}
-
-def Torch_AtenRreluWithNoiseFunctionalOp : Torch_Op<"aten.rrelu_with_noise_functional", [
-    AllowsTypeRefinement,
-    HasValueSemantics,
-    ReadOnly
+    ReadOnly,
+    NoMemoryEffect
   ]> {
   let summary = "Generated op for `aten::rrelu_with_noise_functional : (Tensor, Tensor, Scalar, Scalar, bool, Generator?) -> (Tensor, Tensor)`";
   let arguments = (ins
@@ -18526,77 +18426,6 @@ def Torch_Aten_AssertScalarOp : Torch_Op<"aten._assert_scalar", [
   }];
 }
 
-def Torch_AtenSymConstrainRangeOp : Torch_Op<"aten.sym_constrain_range", [
-    AllowsTypeRefinement,
-    HasValueSemantics,
-    ReadOnly
-  ]> {
-  let summary = "Generated op for `aten::sym_constrain_range : (Scalar, int?, int?) -> ()`";
-  let arguments = (ins
-    AnyTorchScalarType:$size,
-    AnyTorchOptionalIntType:$min,
-    AnyTorchOptionalIntType:$max
-  );
-  let results = (outs
-  );
-  let hasCustomAssemblyFormat = 1;
-  let extraClassDefinition = [{
-    ParseResult AtenSymConstrainRangeOp::parse(OpAsmParser &parser, OperationState &result) {
-      return parseDefaultTorchOp(parser, result, 3, 0);
-    }
-    void AtenSymConstrainRangeOp::print(OpAsmPrinter &printer) {
-      printDefaultTorchOp(printer, *this, 3, 0);
-    }
-  }];
-}
-
-def Torch_AtenSymConstrainRangeForSizeOp : Torch_Op<"aten.sym_constrain_range_for_size", [
-    AllowsTypeRefinement,
-    HasValueSemantics,
-    ReadOnly
-  ]> {
-  let summary = "Generated op for `aten::sym_constrain_range_for_size : (Scalar, int?, int?) -> ()`";
-  let arguments = (ins
-    AnyTorchScalarType:$size,
-    AnyTorchOptionalIntType:$min,
-    AnyTorchOptionalIntType:$max
-  );
-  let results = (outs
-  );
-  let hasCustomAssemblyFormat = 1;
-  let extraClassDefinition = [{
-    ParseResult AtenSymConstrainRangeForSizeOp::parse(OpAsmParser &parser, OperationState &result) {
-      return parseDefaultTorchOp(parser, result, 3, 0);
-    }
-    void AtenSymConstrainRangeForSizeOp::print(OpAsmPrinter &printer) {
-      printDefaultTorchOp(printer, *this, 3, 0);
-    }
-  }];
-}
-
-def Torch_Aten_AssertScalarOp : Torch_Op<"aten._assert_scalar", [
-    AllowsTypeRefinement,
-    HasValueSemantics,
-    ReadOnly
-  ]> {
-  let summary = "Generated op for `aten::_assert_scalar : (Scalar, str) -> ()`";
-  let arguments = (ins
-    AnyTorchScalarType:$self,
-    Torch_StringType:$assert_msg
-  );
-  let results = (outs
-  );
-  let hasCustomAssemblyFormat = 1;
-  let extraClassDefinition = [{
-    ParseResult Aten_AssertScalarOp::parse(OpAsmParser &parser, OperationState &result) {
-      return parseDefaultTorchOp(parser, result, 2, 0);
-    }
-    void Aten_AssertScalarOp::print(OpAsmPrinter &printer) {
-      printDefaultTorchOp(printer, *this, 2, 0);
-    }
-  }];
-}
-
 def Torch_PrimLayoutOp : Torch_Op<"prim.layout", [
     AllowsTypeRefinement,
     HasValueSemantics,