[StableHLO] Migrate samples to StableHLO (#13916)

Tested by running all notebooks locally.

The mnist model was converted using
`iree-opt --iree-convert-mhlo-to-stablehlo`.

Fixes: https://github.com/openxla/iree/issues/13869
diff --git a/experimental/web/sample_dynamic/build_sample.sh b/experimental/web/sample_dynamic/build_sample.sh
index 664b90f..f826200 100755
--- a/experimental/web/sample_dynamic/build_sample.sh
+++ b/experimental/web/sample_dynamic/build_sample.sh
@@ -61,7 +61,7 @@
 compile_sample() {
   echo "  Compiling '$1' sample..."
   "${COMPILE_TOOL}" "$2" \
-    --iree-input-type=mhlo_legacy \
+    --iree-input-type=stablehlo \
     --iree-hal-target-backends=llvm-cpu \
     --iree-llvmcpu-target-triple=wasm32-unknown-emscripten \
     --iree-llvmcpu-target-cpu-features=+atomics,+bulk-memory,+simd128 \
diff --git a/experimental/web/sample_static/build_sample.sh b/experimental/web/sample_static/build_sample.sh
index d7c9089..cc0b6cd 100755
--- a/experimental/web/sample_static/build_sample.sh
+++ b/experimental/web/sample_static/build_sample.sh
@@ -63,7 +63,7 @@
 
 echo "=== Compiling MLIR to static library output (.vmfb, .h, .o) ==="
 "${COMPILE_TOOL}" "${INPUT_PATH}" \
-  --iree-input-type=mhlo_legacy \
+  --iree-input-type=stablehlo \
   --iree-hal-target-backends=llvm-cpu \
   --iree-llvmcpu-target-triple=wasm32-unknown-unknown \
   --iree-llvmcpu-target-cpu-features=+simd128 \
diff --git a/samples/colab/edge_detection.ipynb b/samples/colab/edge_detection.ipynb
index 2e63bfa..e7f7486 100644
--- a/samples/colab/edge_detection.ipynb
+++ b/samples/colab/edge_detection.ipynb
@@ -307,9 +307,9 @@
         "\n",
         "Overview:\n",
         "\n",
-        "1.  Convert the `tf.Module` into an IREE compiler module (using `mhlo`)\n",
+        "1.  Convert the `tf.Module` into an IREE compiler module (using `stablehlo`)\n",
         "2.  Save the MLIR assembly from the module into a file (can stop here to use it from another application)\n",
-        "3.  Compile the `mhlo` MLIR into a VM module for IREE to execute\n",
+        "3.  Compile the `stablehlo` MLIR into a VM module for IREE to execute\n",
         "4.  Run the VM module through IREE's runtime to test the edge detection function"
       ]
     },
@@ -374,7 +374,7 @@
       "source": [
         "#@title Compile and prepare to test the edge detection module\n",
         "\n",
-        "flatbuffer_blob = compile_str(compiler_module, target_backends=[\"vmvx\"], input_type=\"mhlo\")\n",
+        "flatbuffer_blob = compile_str(compiler_module, target_backends=[\"vmvx\"], input_type=\"stablehlo\")\n",
         "\n",
         "# Register the module with a runtime context.\n",
         "config = ireert.Config(backend.driver)\n",
diff --git a/samples/colab/mnist_training.ipynb b/samples/colab/mnist_training.ipynb
index 2c3e53e..656182e 100644
--- a/samples/colab/mnist_training.ipynb
+++ b/samples/colab/mnist_training.ipynb
@@ -382,7 +382,7 @@
         "    TrainableDNN(),\n",
         "    target_backends=[backend_choice],\n",
         "    exported_names=exported_names,\n",
-        "    extra_args=[\"--iree-mhlo-demote-i64-to-i32=false\",\n",
+        "    extra_args=[\"--iree-stablehlo-demote-i64-to-i32=false\",\n",
         "                \"--iree-flow-demote-i64-to-i32\"])\n",
         "compiled_model = iree.runtime.load_vm_flatbuffer(\n",
         "    vm_flatbuffer,\n",
diff --git a/samples/dynamic_shapes/README.md b/samples/dynamic_shapes/README.md
index 042ae23..32a7dee 100644
--- a/samples/dynamic_shapes/README.md
+++ b/samples/dynamic_shapes/README.md
@@ -83,7 +83,7 @@
     ```
     ../iree-build/tools/iree-compile \
         --iree-hal-target-backends=llvm-cpu \
-        --iree-input-type=mhlo_legacy \
+        --iree-input-type=stablehlo \
         dynamic_shapes.mlir -o dynamic_shapes_cpu.vmfb
     ```
 
diff --git a/samples/dynamic_shapes/dynamic_shapes.ipynb b/samples/dynamic_shapes/dynamic_shapes.ipynb
index 88004a1..9364f51 100644
--- a/samples/dynamic_shapes/dynamic_shapes.ipynb
+++ b/samples/dynamic_shapes/dynamic_shapes.ipynb
@@ -280,7 +280,7 @@
         "# Note: we'll use the LLVM CPU backend since it has the best support\n",
         "# for dynamic shapes among our compiler targets.\n",
         "\n",
-        "flatbuffer_blob = compile_str(compiler_module, target_backends=[\"llvm-cpu\"], input_type=\"mhlo\")\n",
+        "flatbuffer_blob = compile_str(compiler_module, target_backends=[\"llvm-cpu\"], input_type=\"stablehlo\")\n",
         "\n",
         "# Save the compiled program to disk.\n",
         "flatbuffer_path = os.path.join(ARTIFACTS_DIR, \"dynamic_shapes_cpu.vmfb\")\n",
diff --git a/samples/dynamic_shapes/test.sh b/samples/dynamic_shapes/test.sh
index b31ef5a..dc302de 100755
--- a/samples/dynamic_shapes/test.sh
+++ b/samples/dynamic_shapes/test.sh
@@ -28,7 +28,7 @@
 # 3. Compile `dynamic_shapes.mlir` using `iree-compile`.
 ${BUILD_DIR}/tools/iree-compile \
   --iree-hal-target-backends=llvm-cpu \
-  --iree-input-type=mhlo_legacy \
+  --iree-input-type=stablehlo \
   ${ARTIFACTS_DIR}/dynamic_shapes.mlir -o ${ARTIFACTS_DIR}/dynamic_shapes_cpu.vmfb
 
 # 4. Build the `iree_samples_dynamic_shapes` CMake target.
diff --git a/samples/models/mnist.mlir b/samples/models/mnist.mlir
index 01953ac..98a2190 100644
--- a/samples/models/mnist.mlir
+++ b/samples/models/mnist.mlir
@@ -17,40 +17,41 @@
   util.global private @"__iree_flow___sm_node24__model.layer-2.kernel" = dense<"0x695C23BEBF4FA5BDFED4903E7B2AD2BC6EEAC6BED4DDF83DAEB7DCBDF725B9BD9065993DB077BE3D69CB79BEDADA32BEF5A00EBECB63B03EAB2238BD619285BEDA7BF5BDC1BAA0BE9CA5CB3E720E5DBE9A4EA6BE6AF28A3E279C63BD5A72C23D0985F23D42E1543ED355B5BEB359F83D16FEC13DC297423D1EA3583EC2CD46BE59B5C2BD73893C3D385F573D890D2CBE703FF5BD62934D3E9065153EA29407BE77AD883E740E5BBEAAF08A3E206042BECD0D003E7380843E1BE2AA3E9FE8A0BEFE6F6CBDF95D22BEBFD29ABC77BB4CBE3C97003E5F3B33BB39FA14BEF25A1ABED9A7F43E17CC4A3D078096BC771219BE24C0F4BDB48E983E327F393EA9041E3C6FC136BE62C1D4BE4219853E84D7D23EC43745BE739280BEBED991BED58E073DB9021BBECDB88B3E63FB4F3ED3A566BDB54202BE1D15B3BE945D8A3DC389FB3C7C8F9EBDD8C0F33D1BDF4B3E4BD3F8BB89C6F1BD25C5A2BDE30D15BE756EDD3D19E7CBBD47A684BC88B28EBD0C13963C714F253EE9B2DA3E0DF206BE5F193BBEF81F8BBE22D72E3D0AEB4ABBBCA4AA3D914C21BE19B255BE6DBC573E1A81463E33D30BBEAFABC7BD1B72A0BEA726D53E8133003E7367213E0D2F8BBEC1B746BEABCBA23D2ACAA33E96FF91BDC63FA7BC36790C3C9ECD1D3E983A7A3E0AFDEDBD17FE2A3ECEE74A3EC3C46ABE99702C3D5F2C12BEA29371BDBDEB923DBCDEDA39D8FAD836C50405BD150A14BE5FE854BCC621723C9C68263EBB7AC73EFF9281BEEFA56D3E137931BE6405BEBC5E1D103E43F425BE348150BEE8EB9CBB65FC223EF106B2BE1FE9E83D3CEC743E2D40ACBD856F0F3EEBB8273DBCD34A3E183206BEEEE5D33D05DC203EA1E2EA3D4D9087BC224335BDA2AC53BEB208DCBD54F3B43D3FD38CBD00D7263E911E9BBE9395AABE974F04BE5181003F1CD2753EB0DE50BED1CCF2BD97A879BC0B01BDBEF0F6813EDC4AC93EDC7821BEFA6293BE99F2963E782FAB3D25182E3E4BD275BAE91A90BE968065BEAE1398BDFE1002BEDACE05BE37E81DBCA3FE673E4CFC75BEB85C8EBD6BC376BEBD0B12BC58D021BD76F781BDEFCD933E8B65483D0FC4113E3757623C81869C3C802FCD3D82CE22BE9C59E8BADC2F263D5C140F3E01519E3EEBAD893D6DD9993DA767913D436608BE2147C13E918A223DE399173EEBB115BE926C803D44BC11BE83F52EBE14F1AD3C92E925BE67AA38BEBED1013ECC20893E86A8F5BDCD32553E173A683EA536013E6B2140BEAE1774BDB51D9DBEED7E103EBEAD463E914F8DBE52399F3D0F033B3EF5B7333E2D342CBED14B0EBE28EA7A3EA9C2983DFD75793E31844EBE0D7050BEF37FBEBE498D22BDEAC6D7BC4AD6B93DDE3949BEA7E6B8BDE5E1553ECC6E8DBD236ACBBD58D095BEAA88CCBD44352FBD952A6ABE240FC43ED9724F3C9D3668BE448D203F041E65BE0FB227BE3025D4BED1035DBE6FDDA13ED8AF90BCD4EAFE3DAD3F47BE137CD2BE068A7F3B7E9D203F05FFEFBE4ACB983EEF30A7BE238B0ABE0A287FBEF9956C3E47D5B5BC687B823DACAAC33CCEE10A3EA6C249BD056800BDF919A93EA852483DC204BBBD9840F03DF8BA0ABE83A9D13EB0EFFBBE511AE6BBE0DCBFBB1F4267BD5D9C343EE37B853D633FB4BDE2ACF6BC66D65EBEDA08BA3D7F7B1A3E1CA0A53D0EFDE5BA6638563E0B3E1CBEDA32ABBDCE70993C22BCB73D13F323BEA56A7B3E0E7C09BEBE4A65BDAC9FFA3ED6BCF0BEDA41DD3D79DBF33D37B7A2BDFDA448BE81CEC63D30C86BBE25CF93BE6D519DBE6728C33DF26B233EA3F6D63E5B9E0B3E6C31C9BE4F573CBED7944A3E5AE8AABE463586BD0AF5C2BE90C6DA3EE9A1803EB744C13EFE29133E458F7BBEB28C893EF14DBD3E3F59413E6C12333E67F689BE9D64AEBDB534153E5512393EB5827FBD28AA9E3D8C6B2CBE9ACCCE3D17CDB73D1565783ED86C57BD8CF3933EB7B91A3E007E3A3D003A6D3D1E3D463E0687853C8F36173EF4FB0A3E6446813E36411BBE6D16C7BDEAC31BBE47A73CBDD8500EBEBB019E3EB04A3BBA50251BBE445DB7BD8AEE9A3D02C8813AFAB29B3D8386C63DCBA0DBBCF6147C3CAED4243E4D93EA3E2E61ADBE87392EBE79F8C43D8E80BA3ED3AC37BE48FE383EE52095BE77FF7E3EDCB04B3EED0120BEA1D3A0BEAAF6973EA55C9DBE493C9EBDC745DB3ED3A585BE431435BCF414C5BC99FD4DBDE4AD3B3E7D5EC53D6ABC8ABE4C4BD9BE48C18CBD66F147BD077F093EF99FAFBD8F7C7E3EAFE4143DD405013FC3810A3F5365B1BE9B191ABD18E7B5BE8875D93EA6CFACBED292C2BE405AF5BD88F5C43D33FFA73EA8B20A3D9720023E5DDAE53C626681BE35BF88BEA6DD50BEF8A3623EFDC9903ECFCB823EDFEEA13E2D5058BD714A74BD7BB2FBBD92B4DE3D89560A3E5EC483BE455FCD3D8D9627BEF52431BDBE29FEBD177AAD3EC03F993EA34AC0BD201DEDBC277764BD763D92BE4240D6BDFD7C9D3DB589083DAC7FAABD325451BECED065BD4B05363EC207003EE74F843E931C60BE743450BE4AE6993E4E8B203E90E1963E5392BA3DB4D8F4BD9BF2933E7BB0863CBC9945BEEB3CF0BE11CF033E2C3AD2BE50499B3EF5968CBDFF2B3D3E6C8CB23C9045C03EC2CDE5BD8B71D3BE3E539B3E6A37C0BE3E8C203DFDE29A3E5E6B40BD1C38B8BDBFAF8BBDE934723EE11396BDBDF9EE3D8932BBBE53FBAABDFD69FD3CA722D5BD569C353DCA5DE43D1CF8B43D613D8A3E8855FABD78BF32BDAB8AC23D690B8DBE4A579A3E2288843ECE44C3BE79DD6BBEE44A39BE7E1B1A3DA120E73C16A8753D60209FBE35C3EA3E2621FF3D5CD9E7BB3F6A9C3E1EC8F5BDB1F38C3EF06E1D3EBEFCA5BD1A73373EFE13373ED99C58BDD3EB753E07EDE23C0045653E64C9ABBD2258C4BDBF18263D54C85FBE11A19B3E1ACF94BE2280BDBE2A24693E3A1B513D42355B3EE29876BD7C7DF1BEB1E9A63D61CA9CBEF609503E9AA4353EC3F5A03E5854AA3DA32D95BDC26C3A3E7DD85B3D59CAF33C0CC2173D27EE74BDB406313ECC9D83BEEB4476BEA1CE963C92D5B5BD707119BE4F45C33E096D48BE1020AF3EAEB9C8BD916CAF3EA71ECFBE8319B5BE36B30F3E9815463DDE8C8E3EE1FFB63E343B2C3E34FB483C58AAD0BC42AABDBD07C9963BA789FE3D9AAFD83DB491A13E93444B3E3CD8BF3E0476AFBE5B13263E04D768BD73087BBE72A8D83DF1E9313EBFFE283E92A7EA3E5104D63DE2FB483E55DD5EBEE606EC3CF66246BDB3F9BFBE83E6AE3EAD9B9ABE8DB5C0BC7484303E4AADC03EB09AE73D462380BEF1678B3DD26DA53CDC81B3BDBAFDB63DC93C5F3E67C5C4BE0A9A8D3E3F05493E2C1868BEBADE163EC492423E5F3173BE313266BE31B0343D52AED23D558BFFBC238AF4BD7CD1EEBDA21C883E0256BEBEC784C23E443D7FBE8EE6483E3B05E6BDC02B01BEC5402B3E448758BE7207583E9CFDACBE88821EBEA569BF3E25E841BE9D608B3E5CDC1B3E6E2EDBBE2EBD353CF5147E3D3E86D2BD67483A3E5AF14FBE824036BD273497BEB5946E3D84CA4FBE2F4D03BE7812433E64A4473E1783813E7F50C93C16FC703DD1503B3E1E28553EE062813EA32584BE0FA0D5BD397E423DEAD290BDEDA4373DA75D46BEB6C820BD4C55D13D15CD22BE5FF6803D44ED3D3E288B3EBE6D6B6CBE640880BDA0C2383E972C1B3E5D5B1A3ED054703E36BE8C3D43B01A3EDF045BBDA851F0BE67F26D3D0892583E578BBABE5A6C2E3EFD3B5B3D7197903E195C4B3E7F696CBE7D24D5BE3621883EB5FB833ECD44753E99CD34BE02FA88BEEEA10CBEB5B846BE1FA8E13D8F76E73CB307A5BE0A0E19BE2C6A413E3A9DF6BE2146BFBE2F008FBE52ADE33E9464B23DD1549F3E32F0ADBD8CD2EDBD2E3B993E358C633E817034BE83E035BE4CB330BE2827753DE043D0BEC5725EBEDA5F883C89E82FBE834DFF3DEE61DF3D90AFA53DC28F11BE03CB70BE809C8E3C01D481BE7EB822BE0669553E1D0EAABC3CDF04BE30FA86BE6E58B63E88BFBBBD5BB3383E67808EBE5A35F13D8D69253E57EE893DD9C2D43C2E37823E1958ABBE90F900BEB274C93DBE0BAC3D44486D3E4E96B1BEBB60463ED5A3583E6C59D7BDF4D9C73EAA4199BE55FA963EA823B2BDD6165BBE5326A4BE8349A93ECF6A62BDD802CD3EE15991BE8E2476BE800681BE1807DD3C044A68BEF3EE963EC9853FBDBA2AA23E70F6B5BE515789BC411E95BE7DE7BD3EC2100EBEF2A3E6BC65BD46BE9E3664BED10F293E420F103E062DDABC659C86BE5C0A7A3E598D1F3E375886BE9E45A33E482D9BBE116985BE78C0923E13ED463E02FB48BC4EDE833DE00CC53D586522BCE9AC54BDE1A86DBECBEA8BBE57C21ABECB20C53D5A64A53E82865BBE20ABCEBD76B5603E07AA233E23DD91BE60028BBD64B088BDECCFDFBE1DDEE13EC1C63F3E0814543E0F073F3EBC04D23E1C6F8E3E92EA83BC99E8373E6A0BA0BD56B584BC058B6E3D511445BE963B1BBCA0129A3D16E9EF3D42A86DBED763153EAF6480BC862C8CBEDCBB31BE8860EDBBB529013FD86E0CBE217C1BBE0EEA48BE63FAAF3D0838DBBD392D9E3ED42BDDBE18A98EBE191F33BD8032743ECA60933D00AB9CBBB4E95ABDAB9BBE3ED253D0BB8317B13CA555F9BD16DE59BC6F47153E94D67F3EF0C1403E2CB08BBDB379A53D2D182A3E48CF913EAB37573E19BED4BDA8E822BE38E65C3EC038433D36AB67BD8D586D3D1612E63DB20337BE212B823DF5BE0D3E03A70C3EC91752BE456E363DDF5E193C5504E13D964C573DEA1E143ED3C1433E9D2A813E2189ABBEDC6E6B3EF48E61BEC1DD75BEF2D9C5BC5FE3B63D7E3C34BE7A5BD1BD09B3F43D757BA6BE5CF6AEBE9BC6A63C77F48C3C67B2493E2AE7843E799C8FBC0D40A73E6B855A3ED0B9793D989390BE1B810ABDDF21B6BEB7DA0DBE01C4353E3C009A3DEA1395BE5F0244BED4F68E3E8AE0A93C5236843DE16A503ED4468FBE6740913E886F30BED70BF83D1F8B693EEA87383EA957E33D9E2B623B73A2833D9D28D23A101716BE814FB83D04935D3D5228853E40CF693E88461EBE97D48FBECE031F3EE2253B3E6E4E88BE1A81863E86502ABE7A808D3E437468BEF974323E43D3BEBE90086D3EB872183D6A9EC53DBCA6673EE40E8C3EFEBE5BBEDAFD083D299687BE92E91BBE6C5272BDF9B49DBD8EF8D3BD6F45863E389F12BCE322AA3D13A29D3EA6EF9DBE1208923EAD459CBE1FBF3B3EB4EBCFBEED7D013D1583373E0EC703BE56F902BC6E541B3E150E6EBEF7D0AF3EFDE92EBC8C6611BDA825223D895BAA3D1109D0BEA13E113D410210BEA699163E700AF83EE0EAE2BD9172233ED8DA77BE582F33BEE0DD663CA41E36BEC22F15BE084390BDD11C63BB44333B3E0D7B89BD543073BDDFCD113D07366ABD3D484E3E9595E43D2C20FD3DAACE8B3E419D86BE4FF4473EE2D9943DDA2C0A3EA60A573EBED1D13DD635B6BCE5AFDC3B913ED5BD5F950FBE5826D0BCA45A623E5F09CDBD22382BBE10D8253E60D3843E5BE9C4BD98AD25BE1D1E53BE27C3F0BC72E971BE37F5A8BDD04F6D3E1562593E401BAD3D585DD9BD0300B3BEA2EA43BE35CBBABC96D5683EAF436FBEB9AA933E9688C2BD29586BBEC29CD53CEE7990BEBA29ACBEF2311DBE7D1C1EBE2428E03DF548F7BBE62C5EBEC668D03D39F98FBDF29151BE691579BB973CAA3E3BB3C43D11670EBE74FC7BBE5BCC0E3E34ED1D3D25408A3E7E94613EE607913D9E2481BE5C890E3E87E1A13E9A048EBE31A48C3E96A417BDF3AD833E644E643E85E8B4BECFD8213E72094EBE734170BD1B12553EEF747CBE241F96BDB0C7B9BA043C943EF16C12BDE5F8383E298633BCD48AA1BE3C66F2BDB9C84BBE36236B3E02574EBC334F19BEAE515C3EBFADFD3C47DD83BE59C80B3EA3B44FBE749E833E6718163E112051BD1849AB3E014288BD24A10E3E6EE1AB3CE0A752BE536F833C3D604E3D3C0CF4BD4745C93E437AACBE6F9F17BE6D9376BE8EA841BEDE26DC3D798200BEA18814BE0B2B923E7B8C32BE2E683FBE84CE943DE9B310BE509EA8BDDBB1E73DA4A3A33E5B861E3EFDAE1ABE2417A03D48C258BE077CC63E929401BF577EF3BD6A19AF3CA26FD23C13F6203E6BC8D2BE914C4F3C8389CD3E1132593D7FA3EFBDB7414A3E42A89EBE31CD1CBEC54908BDE2C423BDE4D6ADBEABCBAC3E6CCB4ABD78BDB63EE6D998BDAE4144BE9FE238BE6C7F3C3EBB324A3E2E1CEEBDD10358BEC63704BEA6BD4ABC1C8FC93BEA2040BE4774D83D1119053DE7B0E03D4251DF3D715A8F3E185CA3BC99BE813DC165513B0763AABEA0D696BEEEAB5CBE3D576C3E9CDD9B3EB879B1BD1DADAEBEBC36EDBC00A160BDD4FC313CE62B9BBE9E83A7BE2D1FBD3D57AD5D3E0B510A3B4F06423C457EC2BE655D19BE1DAE443E2C8F143ED4FA8D3DCCA964BEBA8276BE2E89E23EE8B13E3E6368C9BE7049DDBDB8F481BEC3A9143D25695DBEDA6B74BD837A903D6F491ABEED3A0C3D197F07BECB2DE0BA610340BD29F87B3E5C97C1BB676C123E2797703D572F303E0134E5BDB1EC26BEC9A6B63E147BACBD6CB5503D198E37BE3E37D7BD616C22BE76C78CBDB84751BE72CA863E200336BE4E54F13D378573BEB6AA61BBC1D8863D4AD897BEF792903EAC18BCBC561F5BBDA07E7DBCBA1EA83D20C910BE459837BE3F67CF3D6497FC3D511531BE7B2344BE47A6303E01DA7A3E73B132BE00F0D03DD4A38CBC3EC48ABED9230F3EF71A68BEE8428DBD5E65BB3D2042B03ECFB7BC3E143F50BE4A37D73D54370C3DAAC138BE4C00873EFD6FA43DBBFD183E00DE3DBC995DBEBEFCE0C53C5500F23E9AC7E03D0360963D696ACF3EFF0B73BE31803B3E9D1B103E6513C6BE486770BE5A9DC6BC4E136BBD3C07223E83F3A73E33844F3C81269CBE8E2D853E522142BE998126BE669417BDE9EB90BE735FB3BD221796BE54074F3DCC278C3D665E09BD243D78BD82147B3D3C3F7D3EA26F9B3EAA743CBEA87F5CBE623D2BBEF91618BEF019DEBD682C8E3E4418893EB0C323BD737CB43D32225F3E4B7931BEF39D8D3EF07E99BE35A2803DD078263E201D7A3EFAEFBDBD82CE7EBE5A73623DC5EF463C54678DBE9C7970BD7B558CBD657C7E3D5DE0DD3C47806DBEC13CAC3E1A4CD53E27EBA3BE604B813DF38B8A3C834553BD76FA073EDA840EBEE9E5CABC98F04EBD8F4BF1BD50B7913EBC48ED3CDD1A4B3D"> : tensor<128x10xf32>
   util.global private @"__iree_flow___sm_node25__model.layer-2.bias" = dense<[-0.11818973, 0.115988247, 0.0210834835, -0.0308276638, 0.0101165017, 0.119799189, 0.00523598073, 0.117924452, -0.217200637, -0.0239296928]> : tensor<10xf32>
   func.func @predict(%arg0: tensor<1x28x28x1xf32>) -> tensor<1x10xf32> attributes {iree.module.export, iree.reflection = {abi = "sip", abiv = 1 : i32, sip = "I8!S5!k0_0R3!_0"}} {
-    %0 = util.global.address @"__iree_flow___sm_node17__model.layer-1.kernel" : !util.ptr<tensor<784x128xf32>>
-    %1 = util.global.address @"__iree_flow___sm_node18__model.layer-1.bias" : !util.ptr<tensor<128xf32>>
-    %2 = util.global.address @"__iree_flow___sm_node24__model.layer-2.kernel" : !util.ptr<tensor<128x10xf32>>
-    %3 = util.global.address @"__iree_flow___sm_node25__model.layer-2.bias" : !util.ptr<tensor<10xf32>>
-    %4 = mhlo.constant dense<0.000000e+00> : tensor<1x128xf32>
-    %5 = mhlo.constant dense<0xFF800000> : tensor<f32>
-    %6 = mhlo.constant dense<0.000000e+00> : tensor<f32>
-    %7 = util.global.load.indirect %3 : !util.ptr<tensor<10xf32>> -> tensor<10xf32>
-    %8 = util.global.load.indirect %2 : !util.ptr<tensor<128x10xf32>> -> tensor<128x10xf32>
-    %9 = util.global.load.indirect %1 : !util.ptr<tensor<128xf32>> -> tensor<128xf32>
-    %10 = util.global.load.indirect %0 : !util.ptr<tensor<784x128xf32>> -> tensor<784x128xf32>
-    %11 = "mhlo.reshape"(%arg0) : (tensor<1x28x28x1xf32>) -> tensor<1x784xf32>
-    %12 = "mhlo.dot"(%11, %10) : (tensor<1x784xf32>, tensor<784x128xf32>) -> tensor<1x128xf32>
-    %13 = "mhlo.broadcast_in_dim"(%9) {broadcast_dimensions = dense<1> : tensor<1xi64>} : (tensor<128xf32>) -> tensor<1x128xf32>
-    %14 = mhlo.add %12, %13 : tensor<1x128xf32>
-    %15 = mhlo.maximum %14, %4 : tensor<1x128xf32>
-    %16 = "mhlo.dot"(%15, %8) : (tensor<1x128xf32>, tensor<128x10xf32>) -> tensor<1x10xf32>
-    %17 = "mhlo.broadcast_in_dim"(%7) {broadcast_dimensions = dense<1> : tensor<1xi64>} : (tensor<10xf32>) -> tensor<1x10xf32>
-    %18 = mhlo.add %16, %17 : tensor<1x10xf32>
-    %19 = "mhlo.reduce"(%18, %5) ( {
-    ^bb0(%arg1: tensor<f32>, %arg2: tensor<f32>):  // no predecessors
-      %26 = mhlo.maximum %arg1, %arg2 : tensor<f32>
-      "mhlo.return"(%26) : (tensor<f32>) -> ()
-    }) {dimensions = dense<1> : tensor<1xi64>} : (tensor<1x10xf32>, tensor<f32>) -> tensor<1xf32>
-    %20 = "mhlo.broadcast_in_dim"(%19) {broadcast_dimensions = dense<0> : tensor<1xi64>} : (tensor<1xf32>) -> tensor<1x10xf32>
-    %21 = mhlo.subtract %18, %20 : tensor<1x10xf32>
-    %22 = "mhlo.exponential"(%21) : (tensor<1x10xf32>) -> tensor<1x10xf32>
-    %23 = "mhlo.reduce"(%22, %6) ( {
-    ^bb0(%arg1: tensor<f32>, %arg2: tensor<f32>):  // no predecessors
-      %26 = mhlo.add %arg1, %arg2 : tensor<f32>
-      "mhlo.return"(%26) : (tensor<f32>) -> ()
-    }) {dimensions = dense<1> : tensor<1xi64>} : (tensor<1x10xf32>, tensor<f32>) -> tensor<1xf32>
-    %24 = "mhlo.broadcast_in_dim"(%23) {broadcast_dimensions = dense<0> : tensor<1xi64>} : (tensor<1xf32>) -> tensor<1x10xf32>
-    %25 = mhlo.divide %22, %24 : tensor<1x10xf32>
-    return %25 : tensor<1x10xf32>
+    %ptr___iree_flow___sm_node17__model.layer-1.kernel = util.global.address @"__iree_flow___sm_node17__model.layer-1.kernel" : !util.ptr<tensor<784x128xf32>>
+    %ptr___iree_flow___sm_node18__model.layer-1.bias = util.global.address @"__iree_flow___sm_node18__model.layer-1.bias" : !util.ptr<tensor<128xf32>>
+    %ptr___iree_flow___sm_node24__model.layer-2.kernel = util.global.address @"__iree_flow___sm_node24__model.layer-2.kernel" : !util.ptr<tensor<128x10xf32>>
+    %ptr___iree_flow___sm_node25__model.layer-2.bias = util.global.address @"__iree_flow___sm_node25__model.layer-2.bias" : !util.ptr<tensor<10xf32>>
+    %0 = stablehlo.constant dense<0.000000e+00> : tensor<1x128xf32>
+    %1 = stablehlo.constant dense<0xFF800000> : tensor<f32>
+    %2 = stablehlo.constant dense<0.000000e+00> : tensor<f32>
+    %3 = util.global.load.indirect %ptr___iree_flow___sm_node25__model.layer-2.bias : !util.ptr<tensor<10xf32>> -> tensor<10xf32>
+    %4 = util.global.load.indirect %ptr___iree_flow___sm_node24__model.layer-2.kernel : !util.ptr<tensor<128x10xf32>> -> tensor<128x10xf32>
+    %5 = util.global.load.indirect %ptr___iree_flow___sm_node18__model.layer-1.bias : !util.ptr<tensor<128xf32>> -> tensor<128xf32>
+    %6 = util.global.load.indirect %ptr___iree_flow___sm_node17__model.layer-1.kernel : !util.ptr<tensor<784x128xf32>> -> tensor<784x128xf32>
+    %7 = stablehlo.reshape %arg0 : (tensor<1x28x28x1xf32>) -> tensor<1x784xf32>
+    %8 = stablehlo.dot %7, %6 : (tensor<1x784xf32>, tensor<784x128xf32>) -> tensor<1x128xf32>
+    %9 = stablehlo.broadcast_in_dim %5, dims = [1] : (tensor<128xf32>) -> tensor<1x128xf32>
+    %10 = stablehlo.add %8, %9 : tensor<1x128xf32>
+    %11 = stablehlo.maximum %10, %0 : tensor<1x128xf32>
+    %12 = stablehlo.dot %11, %4 : (tensor<1x128xf32>, tensor<128x10xf32>) -> tensor<1x10xf32>
+    %13 = stablehlo.broadcast_in_dim %3, dims = [1] : (tensor<10xf32>) -> tensor<1x10xf32>
+    %14 = stablehlo.add %12, %13 : tensor<1x10xf32>
+    %15 = stablehlo.reduce(%14 init: %1) across dimensions = [1] : (tensor<1x10xf32>, tensor<f32>) -> tensor<1xf32>
+     reducer(%arg1: tensor<f32>, %arg2: tensor<f32>)  {
+      %22 = stablehlo.maximum %arg1, %arg2 : tensor<f32>
+      stablehlo.return %22 : tensor<f32>
+    }
+    %16 = stablehlo.broadcast_in_dim %15, dims = [0] : (tensor<1xf32>) -> tensor<1x10xf32>
+    %17 = stablehlo.subtract %14, %16 : tensor<1x10xf32>
+    %18 = stablehlo.exponential %17 : tensor<1x10xf32>
+    %19 = stablehlo.reduce(%18 init: %2) across dimensions = [1] : (tensor<1x10xf32>, tensor<f32>) -> tensor<1xf32>
+     reducer(%arg1: tensor<f32>, %arg2: tensor<f32>)  {
+      %22 = stablehlo.add %arg1, %arg2 : tensor<f32>
+      stablehlo.return %22 : tensor<f32>
+    }
+    %20 = stablehlo.broadcast_in_dim %19, dims = [0] : (tensor<1xf32>) -> tensor<1x10xf32>
+    %21 = stablehlo.divide %18, %20 : tensor<1x10xf32>
+    return %21 : tensor<1x10xf32>
   }
 }
+
diff --git a/samples/variables_and_state/variables_and_state.ipynb b/samples/variables_and_state/variables_and_state.ipynb
index 6980d4a..4ceb56e 100644
--- a/samples/variables_and_state/variables_and_state.ipynb
+++ b/samples/variables_and_state/variables_and_state.ipynb
@@ -278,7 +278,7 @@
         "\n",
         "from iree.compiler import compile_str\n",
         "\n",
-        "flatbuffer_blob = compile_str(compiler_module, target_backends=[\"vmvx\"], input_type=\"mhlo\")\n",
+        "flatbuffer_blob = compile_str(compiler_module, target_backends=[\"vmvx\"], input_type=\"stablehlo\")\n",
         "\n",
         "# Save the compiled program to disk.\n",
         "flatbuffer_path = os.path.join(ARTIFACTS_DIR, \"counter_vmvx.vmfb\")\n",
diff --git a/samples/vision_inference/README.md b/samples/vision_inference/README.md
index 5731a28..57c02b3 100644
--- a/samples/vision_inference/README.md
+++ b/samples/vision_inference/README.md
@@ -20,7 +20,7 @@
 # Compile the MNIST program.
 iree-compile \
     ../models/mnist.mlir \
-    --iree-input-type=mhlo_legacy \
+    --iree-input-type=stablehlo \
     --iree-hal-target-backends=llvm-cpu \
     -o /tmp/mnist_cpu.vmfb