diff --git a/.gitmodules b/.gitmodules
index 7b053e2..771ef9d 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -37,7 +37,7 @@
 	url = https://github.com/axboe/liburing.git
 [submodule "third_party/mlir-hlo"]
 	path = third_party/mlir-hlo
-	url = https://github.com/tensorflow/mlir-hlo.git
+	url = https://github.com/google/iree-llvm-fork.git
 [submodule "third_party/stblib"]
 	path = third_party/stblib
 	url = https://github.com/nothings/stb
diff --git a/build_tools/buildkite/cmake/android/arm64-v8a/pipeline.yml b/build_tools/buildkite/cmake/android/arm64-v8a/pipeline.yml
index 73a6973..211d4f3 100644
--- a/build_tools/buildkite/cmake/android/arm64-v8a/pipeline.yml
+++ b/build_tools/buildkite/cmake/android/arm64-v8a/pipeline.yml
@@ -7,7 +7,7 @@
 steps:
   - label: "build"
     commands:
-      - "git submodule update --init --jobs 8 --depth 1"
+      - "git submodule sync && git submodule update --init --jobs 8 --depth 1"
       - "docker run --user=$(id -u):$(id -g) --volume=\\$PWD:\\$IREE_DOCKER_WORKDIR --workdir=\\$IREE_DOCKER_WORKDIR --rm gcr.io/iree-oss/android@sha256:ffb02ab2a7c5ee7bb1bcae9fb08d0de70cdb3c42466a4951e48d9142cc9b8ca2 build_tools/cmake/build_android.sh arm64-v8a"
       - "tar --exclude='*.o' --exclude='*.a' -czvf build-artifacts.tgz build-android"
     agents:
diff --git a/build_tools/buildkite/cmake/build_configurations.yml b/build_tools/buildkite/cmake/build_configurations.yml
index 947bdfe..1e24b23 100644
--- a/build_tools/buildkite/cmake/build_configurations.yml
+++ b/build_tools/buildkite/cmake/build_configurations.yml
@@ -7,7 +7,7 @@
 steps:
   - label: ":zap: Build with tracing enabled"
     commands:
-      - "git submodule update --init --jobs 8 --depth 1"
+      - "git submodule sync && git submodule update --init --jobs 8 --depth 1"
       - "docker run --user=$(id -u):$(id -g) --volume=\\$PWD:\\$IREE_DOCKER_WORKDIR --workdir=\\$IREE_DOCKER_WORKDIR --rm gcr.io/iree-oss/base@sha256:61f948eb15c90596b9faabbca168de2c7d5008e5d2c0b9c5c26a0efe572198d6 ./build_tools/cmake/build_tracing.sh"
     env:
       IREE_DOCKER_WORKDIR: "/usr/src/github/iree"
@@ -16,7 +16,7 @@
 
   - label: ":hammer_and_wrench: Build the runtime only"
     commands:
-      - "git submodule update --init --jobs 8 --depth 1"
+      - "git submodule sync && git submodule update --init --jobs 8 --depth 1"
       - "docker run --user=$(id -u):$(id -g) --volume=\\$PWD:\\$IREE_DOCKER_WORKDIR --workdir=\\$IREE_DOCKER_WORKDIR --rm gcr.io/iree-oss/base@sha256:61f948eb15c90596b9faabbca168de2c7d5008e5d2c0b9c5c26a0efe572198d6 ./build_tools/cmake/build_runtime.sh"
     env:
       IREE_DOCKER_WORKDIR: "/usr/src/github/iree"
@@ -25,7 +25,7 @@
 
   - label: ":pinching_hand: Build the size-optimized runtime only"
     commands:
-      - "git submodule update --init --jobs 8 --depth 1"
+      - "git submodule sync && git submodule update --init --jobs 8 --depth 1"
       - "docker run --user=$(id -u):$(id -g) --volume=\\$PWD:\\$IREE_DOCKER_WORKDIR --workdir=\\$IREE_DOCKER_WORKDIR --rm gcr.io/iree-oss/base@sha256:61f948eb15c90596b9faabbca168de2c7d5008e5d2c0b9c5c26a0efe572198d6 ./build_tools/cmake/build_runtime_small.sh"
     env:
       IREE_DOCKER_WORKDIR: "/usr/src/github/iree"
@@ -35,7 +35,7 @@
   - label: ":gnu: Build with GCC"
     key: "build-gcc"
     commands:
-      - "git submodule update --init --jobs 8 --depth 1"
+      - "git submodule sync && git submodule update --init --jobs 8 --depth 1"
       - "docker run --env CC=/usr/bin/gcc-9 --env CXX=/usr/bin/g++-9 --user=$(id -u):$(id -g) --volume=\\$PWD:\\$IREE_DOCKER_WORKDIR --workdir=\\$IREE_DOCKER_WORKDIR --rm gcr.io/iree-oss/base@sha256:61f948eb15c90596b9faabbca168de2c7d5008e5d2c0b9c5c26a0efe572198d6 ./build_tools/cmake/clean_build.sh"
     env:
       IREE_DOCKER_WORKDIR: "/usr/src/github/iree"
@@ -45,7 +45,7 @@
   - label: ":linux: Build host install"
     key: "build-host-install"
     commands:
-      - "git submodule update --init --jobs 8 --depth 1"
+      - "git submodule sync && git submodule update --init --jobs 8 --depth 1"
       - "docker run --user=$(id -u):$(id -g) --volume=\\$PWD:\\$IREE_DOCKER_WORKDIR --workdir=\\$IREE_DOCKER_WORKDIR --rm gcr.io/iree-oss/base@sha256:61f948eb15c90596b9faabbca168de2c7d5008e5d2c0b9c5c26a0efe572198d6 ./build_tools/cmake/build_host_install.sh"
       - "tar -czvf build-artifacts.tgz build-host/install"
     artifact_paths: "build-artifacts.tgz"
diff --git a/iree/compiler/Bindings/TFLite/Transforms/WrapEntryPoints.cpp b/iree/compiler/Bindings/TFLite/Transforms/WrapEntryPoints.cpp
index a74fa5c..e73966e 100644
--- a/iree/compiler/Bindings/TFLite/Transforms/WrapEntryPoints.cpp
+++ b/iree/compiler/Bindings/TFLite/Transforms/WrapEntryPoints.cpp
@@ -641,7 +641,7 @@
       }
     }
     return NamedAttribute{
-        Identifier::get("tfl.io.names", &getContext()),
+        StringAttr::get(&getContext(), "tfl.io.names"),
         StringAttr::get(&getContext(), llvm::join(pieces, ";"))};
   }
 };
diff --git a/iree/compiler/Codegen/Common/DemoteF32ToF16.cpp b/iree/compiler/Codegen/Common/DemoteF32ToF16.cpp
index c96e44d..143daf8 100644
--- a/iree/compiler/Codegen/Common/DemoteF32ToF16.cpp
+++ b/iree/compiler/Codegen/Common/DemoteF32ToF16.cpp
@@ -133,7 +133,7 @@
     FloatTypeConverter converter;
     OwningRewritePatternList patterns(&getContext());
     patterns.insert<GenericTypeConvert>(context, converter);
-    populateFuncOpTypeConversionPattern(patterns, converter);
+    populateFunctionLikeTypeConversionPattern<FuncOp>(patterns, converter);
     ConversionTarget target(*context);
     // Operations are legal if they don't contain any illegal type.
     target.markUnknownOpDynamicallyLegal([](Operation *op) {
diff --git a/iree/compiler/Codegen/LLVMCPU/LLVMCPUTileAndVectorizeLinalgTensorOps.cpp b/iree/compiler/Codegen/LLVMCPU/LLVMCPUTileAndVectorizeLinalgTensorOps.cpp
index 73804b9..5e5aa11 100644
--- a/iree/compiler/Codegen/LLVMCPU/LLVMCPUTileAndVectorizeLinalgTensorOps.cpp
+++ b/iree/compiler/Codegen/LLVMCPU/LLVMCPUTileAndVectorizeLinalgTensorOps.cpp
@@ -85,8 +85,8 @@
                                   static_cast<unsigned>(TilingLevel::L1Tiles));
             }),
         linalg::LinalgTransformationFilter(
-            ArrayRef<Identifier>{},
-            Identifier::get(getWorkgroupL1TileMarker(), context)));
+            ArrayRef<StringAttr>{},
+            StringAttr::get(context, getWorkgroupL1TileMarker())));
 
     if (failed(applyPatternsAndFoldGreedily(funcOp, std::move(l1patterns)))) {
       return signalPassFailure();
@@ -130,8 +130,8 @@
                   builder, op, static_cast<unsigned>(TilingLevel::VectorTiles));
             }),
         linalg::LinalgTransformationFilter(
-            Identifier::get(getWorkgroupL1TileMarker(), context),
-            Identifier::get(getVectorizeMarker(), context)));
+            StringAttr::get(context, getWorkgroupL1TileMarker()),
+            StringAttr::get(context, getVectorizeMarker())));
 
     if (failed(applyPatternsAndFoldGreedily(funcOp, std::move(l2patterns)))) {
       return signalPassFailure();
@@ -183,7 +183,7 @@
     OwningRewritePatternList vectorizationPatterns(&getContext());
     linalg::LinalgVectorizationOptions opt;
     linalg::LinalgTransformationFilter f(
-        Identifier::get(getVectorizeMarker(), context));
+        StringAttr::get(context, getVectorizeMarker()));
     linalg::VectorizationPatterns<linalg::CopyOp, linalg::FillOp>::insert(
         vectorizationPatterns, opt, f);
     vectorizationPatterns.add<linalg::LinalgVectorizationPattern>(
diff --git a/iree/compiler/Codegen/LLVMCPU/LLVMCPUTileFuseAndVectorizeLinalgTensorOps.cpp b/iree/compiler/Codegen/LLVMCPU/LLVMCPUTileFuseAndVectorizeLinalgTensorOps.cpp
index bd3db13..35c989d 100644
--- a/iree/compiler/Codegen/LLVMCPU/LLVMCPUTileFuseAndVectorizeLinalgTensorOps.cpp
+++ b/iree/compiler/Codegen/LLVMCPU/LLVMCPUTileFuseAndVectorizeLinalgTensorOps.cpp
@@ -189,8 +189,8 @@
                 return std::move(reductionTiles);
               }),
           linalg::LinalgTransformationFilter(
-              ArrayRef<Identifier>{},
-              Identifier::get(getVectorizeMarker(), context)));
+              ArrayRef<StringAttr>{},
+              StringAttr::get(context, getVectorizeMarker())));
 
       if (failed(applyPatternsAndFoldGreedily(
               funcOp, std::move(tileReductionPatterns)))) {
@@ -231,8 +231,8 @@
                     static_cast<unsigned>(TilingLevel::VectorTiles));
               }),
           linalg::LinalgTransformationFilter(
-              Identifier::get(getWorkgroupL1TileMarker(), context),
-              Identifier::get(getVectorizeMarker(), context)));
+              StringAttr::get(context, getWorkgroupL1TileMarker()),
+              StringAttr::get(context, getVectorizeMarker())));
 
       if (failed(applyPatternsAndFoldGreedily(funcOp, std::move(l2patterns)))) {
         return signalPassFailure();
@@ -259,7 +259,7 @@
     OwningRewritePatternList vectorizationPatterns(&getContext());
     linalg::LinalgVectorizationOptions opt;
     linalg::LinalgTransformationFilter f(
-        Identifier::get(getVectorizeMarker(), context));
+        StringAttr::get(context, getVectorizeMarker()));
     linalg::VectorizationPatterns<linalg::GenericOp, linalg::CopyOp,
                                   linalg::FillOp>::insert(vectorizationPatterns,
                                                           opt, f);
diff --git a/iree/compiler/Codegen/LLVMGPU/LLVMGPUDistributeSharedMemoryCopy.cpp b/iree/compiler/Codegen/LLVMGPU/LLVMGPUDistributeSharedMemoryCopy.cpp
index 1bfc229..2b6bf47 100644
--- a/iree/compiler/Codegen/LLVMGPU/LLVMGPUDistributeSharedMemoryCopy.cpp
+++ b/iree/compiler/Codegen/LLVMGPU/LLVMGPUDistributeSharedMemoryCopy.cpp
@@ -72,16 +72,16 @@
   patterns.insert<linalg::LinalgTilingPattern>(
       linalg::CopyOp::getOperationName(), patterns.getContext(), tilingOptions,
       linalg::LinalgTransformationFilter(
-          {Identifier::get(getCopyToWorkgroupMemoryMarker(),
-                           patterns.getContext())},
-          Identifier::get(getVectorizeMarker(), patterns.getContext())));
+          {StringAttr::get(patterns.getContext(),
+                           getCopyToWorkgroupMemoryMarker())},
+          StringAttr::get(patterns.getContext(), getVectorizeMarker())));
 }
 
 static void populateVectorizationPatterns(RewritePatternSet &patterns) {
   linalg::VectorizationPatterns<linalg::CopyOp>::insert(
       patterns, linalg::LinalgVectorizationOptions(),
-      linalg::LinalgTransformationFilter(Identifier::get(
-          getCopyToWorkgroupMemoryMarker(), patterns.getContext())));
+      linalg::LinalgTransformationFilter(StringAttr::get(
+          patterns.getContext(), getCopyToWorkgroupMemoryMarker())));
 }
 
 // TODO(thomasraoux): Extend this to support smaller vector size as well.
diff --git a/iree/compiler/Codegen/LLVMGPU/LLVMGPUTensorCoreVectorization.cpp b/iree/compiler/Codegen/LLVMGPU/LLVMGPUTensorCoreVectorization.cpp
index c7c57f0..2aec72d 100644
--- a/iree/compiler/Codegen/LLVMGPU/LLVMGPUTensorCoreVectorization.cpp
+++ b/iree/compiler/Codegen/LLVMGPU/LLVMGPUTensorCoreVectorization.cpp
@@ -24,7 +24,7 @@
 static void populateVectorizationPatterns(RewritePatternSet &patterns) {
   linalg::LinalgVectorizationOptions opt;
   linalg::LinalgTransformationFilter f(
-      Identifier::get(getVectorizeMarker(), patterns.getContext()));
+      StringAttr::get(patterns.getContext(), getVectorizeMarker()));
   linalg::VectorizationPatterns<linalg::FillOp, linalg::CopyOp,
                                 linalg::GenericOp>::insert(patterns, opt, f);
   patterns.add<linalg::LinalgVectorizationPattern>(
diff --git a/iree/compiler/Codegen/LLVMGPU/LLVMGPUTileAndDistribute.cpp b/iree/compiler/Codegen/LLVMGPU/LLVMGPUTileAndDistribute.cpp
index f526c62..051447c 100644
--- a/iree/compiler/Codegen/LLVMGPU/LLVMGPUTileAndDistribute.cpp
+++ b/iree/compiler/Codegen/LLVMGPU/LLVMGPUTileAndDistribute.cpp
@@ -53,8 +53,8 @@
   MLIRContext *context = patterns.getContext();
 
   linalg::LinalgTransformationFilter filter(
-      ArrayRef<Identifier>{},
-      Identifier::get(getWorkgroupKTiledMarker(), context));
+      ArrayRef<StringAttr>{},
+      StringAttr::get(context, getWorkgroupKTiledMarker()));
   linalg::TilingPatterns<linalg::MatmulOp, linalg::BatchMatmulOp,
                          linalg::GenericOp>::insert(patterns, tilingOptions,
                                                     filter);
@@ -109,9 +109,9 @@
                            .setDistributionOptions(warpDistributionOptions);
   MLIRContext *context = patterns.getContext();
   linalg::LinalgTransformationFilter filter(
-      {Identifier::get(getWorkgroupKTiledMarker(), context),
-       Identifier::get(getWorkgroupMemoryMarker(), context)},
-      Identifier::get(getVectorizeMarker(), context));
+      {StringAttr::get(context, getWorkgroupKTiledMarker()),
+       StringAttr::get(context, getWorkgroupMemoryMarker())},
+      StringAttr::get(context, getVectorizeMarker()));
   filter.setMatchByDefault();
   linalg::TilingPatterns<linalg::MatmulOp, linalg::FillOp, linalg::CopyOp,
                          linalg::BatchMatmulOp,
@@ -167,9 +167,9 @@
 
   MLIRContext *context = patterns.getContext();
   linalg::LinalgTransformationFilter f(
-      {Identifier::get(getWorkgroupKTiledMarker(), context),
-       Identifier::get(getWorkgroupMemoryMarker(), context)},
-      Identifier::get(getVectorizeMarker(), context));
+      {StringAttr::get(context, getWorkgroupKTiledMarker()),
+       StringAttr::get(context, getWorkgroupMemoryMarker())},
+      StringAttr::get(context, getVectorizeMarker()));
   f.addFilter([](Operation *op) {
      // FFT doesn't support second level of tiling yet.
      return success(!isa<IREE::LinalgExt::FftOp>(op));
@@ -249,8 +249,8 @@
           .setOperandsToPromote({0, 1})
           .setUseFullTileBuffers({false, false}),
       linalg::LinalgTransformationFilter(
-          {Identifier::get(getWorkgroupKTiledMarker(), context)},
-          Identifier::get(getWorkgroupMemoryMarker(), context)));
+          {StringAttr::get(context, getWorkgroupKTiledMarker())},
+          StringAttr::get(context, getWorkgroupMemoryMarker())));
 }
 
 namespace {
diff --git a/iree/compiler/Codegen/LLVMGPU/LLVMGPUVectorization.cpp b/iree/compiler/Codegen/LLVMGPU/LLVMGPUVectorization.cpp
index ddbeb14..9900f17 100644
--- a/iree/compiler/Codegen/LLVMGPU/LLVMGPUVectorization.cpp
+++ b/iree/compiler/Codegen/LLVMGPU/LLVMGPUVectorization.cpp
@@ -30,7 +30,7 @@
   MLIRContext *ctx = patterns.getContext();
   linalg::LinalgVectorizationOptions opt;
   linalg::LinalgTransformationFilter f(
-      Identifier::get(getVectorizeMarker(), ctx));
+      StringAttr::get(ctx, getVectorizeMarker()));
   linalg::VectorizationPatterns<linalg::FillOp, linalg::CopyOp,
                                 linalg::GenericOp>::insert(patterns, opt, f);
   patterns.add<linalg::LinalgVectorizationPattern>(
diff --git a/iree/compiler/Codegen/SPIRV/SPIRVCopyToWorkgroupMemory.cpp b/iree/compiler/Codegen/SPIRV/SPIRVCopyToWorkgroupMemory.cpp
index 142193b..427b148 100644
--- a/iree/compiler/Codegen/SPIRV/SPIRVCopyToWorkgroupMemory.cpp
+++ b/iree/compiler/Codegen/SPIRV/SPIRVCopyToWorkgroupMemory.cpp
@@ -300,7 +300,7 @@
   linalg::VectorizationPatterns<linalg::CopyOp>::insert(
       vectorizationPatterns, linalg::LinalgVectorizationOptions(),
       linalg::LinalgTransformationFilter(
-          Identifier::get(getVectorizeMarker(), context), {}));
+          StringAttr::get(context, getVectorizeMarker()), {}));
   if (failed(applyPatternsAndFoldGreedily(funcOp,
                                           std::move(vectorizationPatterns)))) {
     return signalPassFailure();
diff --git a/iree/compiler/Codegen/SPIRV/SPIRVTile.cpp b/iree/compiler/Codegen/SPIRV/SPIRVTile.cpp
index 356862e..c53ad55 100644
--- a/iree/compiler/Codegen/SPIRV/SPIRVTile.cpp
+++ b/iree/compiler/Codegen/SPIRV/SPIRVTile.cpp
@@ -40,7 +40,7 @@
   auto tilingOptions = linalg::LinalgTilingOptions()
                            .setLoopType(linalg::LinalgTilingLoopType::Loops)
                            .setTileSizeComputationFunction(getTileSizeFn);
-  auto marker = Identifier::get(getTileReductionMarker(), context);
+  auto marker = StringAttr::get(context, getTileReductionMarker());
   auto filter = linalg::LinalgTransformationFilter({marker}, llvm::None);
 
   linalg::TilingPatterns<linalg::BatchMatmulOp, linalg::Conv2DNhwcHwcfOp,
diff --git a/iree/compiler/Codegen/SPIRV/SPIRVTileAndDistribute.cpp b/iree/compiler/Codegen/SPIRV/SPIRVTileAndDistribute.cpp
index acb853c..1e39e89 100644
--- a/iree/compiler/Codegen/SPIRV/SPIRVTileAndDistribute.cpp
+++ b/iree/compiler/Codegen/SPIRV/SPIRVTileAndDistribute.cpp
@@ -53,14 +53,14 @@
 static linalg::LinalgTransformationFilter getLinalgMatchAndReplaceMarker(
     ArrayRef<StringRef> matchMarkers, Optional<StringRef> replaceMarker,
     MLIRContext *context) {
-  SmallVector<Identifier, 2> matchIds;
+  SmallVector<StringAttr, 2> matchIds;
   matchIds.reserve(matchMarkers.size());
   for (StringRef marker : matchMarkers) {
-    matchIds.emplace_back(Identifier::get(marker, context));
+    matchIds.emplace_back(StringAttr::get(context, marker));
   }
 
-  Optional<Identifier> replaceId;
-  if (replaceMarker) replaceId = Identifier::get(*replaceMarker, context);
+  Optional<StringAttr> replaceId;
+  if (replaceMarker) replaceId = StringAttr::get(context, *replaceMarker);
 
   return linalg::LinalgTransformationFilter(matchIds, replaceId);
 }
diff --git a/iree/compiler/Codegen/SPIRV/SPIRVTileAndVectorizeToCooperativeOps.cpp b/iree/compiler/Codegen/SPIRV/SPIRVTileAndVectorizeToCooperativeOps.cpp
index af8066c..d9fac5a 100644
--- a/iree/compiler/Codegen/SPIRV/SPIRVTileAndVectorizeToCooperativeOps.cpp
+++ b/iree/compiler/Codegen/SPIRV/SPIRVTileAndVectorizeToCooperativeOps.cpp
@@ -133,7 +133,7 @@
           .setDistributionOptions(distributionOptions);
 
   auto filter = linalg::LinalgTransformationFilter(
-      ArrayRef<Identifier>{}, Identifier::get(getVectorizeMarker(), context));
+      ArrayRef<StringAttr>{}, StringAttr::get(context, getVectorizeMarker()));
   linalg::TilingPatterns<linalg::FillOp, linalg::MatmulOp,
                          linalg::GenericOp>::insert(patterns, tilingOptions,
                                                     filter);
@@ -148,7 +148,7 @@
                                    RewritePatternSet &patterns) {
   linalg::LinalgVectorizationOptions opt;
   linalg::LinalgTransformationFilter f(
-      Identifier::get(getVectorizeMarker(), context));
+      StringAttr::get(context, getVectorizeMarker()));
   linalg::VectorizationPatterns<linalg::FillOp, linalg::GenericOp>::insert(
       patterns, opt, f);
   patterns.add<linalg::LinalgVectorizationPattern>(
diff --git a/iree/compiler/Codegen/SPIRV/test/vectorize_elementwise_ops.mlir b/iree/compiler/Codegen/SPIRV/test/vectorize_elementwise_ops.mlir
index cb6832e..07c5898 100644
--- a/iree/compiler/Codegen/SPIRV/test/vectorize_elementwise_ops.mlir
+++ b/iree/compiler/Codegen/SPIRV/test/vectorize_elementwise_ops.mlir
@@ -66,15 +66,11 @@
 //       CHECK:   %[[INSERT2:.+]] = vector.insert %[[READ]], %[[INSERT1]] [2] : vector<2xf32> into vector<4x2xf32>
 //       CHECK:   %[[INSERT3:.+]] = vector.insert %[[READ]], %[[INSERT2]] [3] : vector<2xf32> into vector<4x2xf32>
 //       CHECK:   %[[RT:.+]] = vector.transpose %[[INSERT3]], [1, 0] : vector<4x2xf32> to vector<2x4xf32>
-//       CHECK:   %[[SLICE0:.+]] = vector.extract_strided_slice %[[LT]] {offsets = [0, 0]
-//       CHECK:   %[[SLICE1:.+]] = vector.extract_strided_slice %[[RT]] {offsets = [0, 0]
-//       CHECK:   %[[EXTRACT0:.+]] = vector.extract %[[SLICE0]][0]
-//       CHECK:   %[[EXTRACT1:.+]] = vector.extract %[[SLICE1]][0]
+//       CHECK:   %[[EXTRACT0:.+]] = vector.extract %[[LT]][0]
+//       CHECK:   %[[EXTRACT1:.+]] = vector.extract %[[RT]][0]
 //       CHECK:   %[[ADD0:.+]] = arith.addf %[[EXTRACT0]], %[[EXTRACT1]] : vector<4xf32>
-//       CHECK:   %[[SLICE0:.+]] = vector.extract_strided_slice %[[LT]] {offsets = [1, 0]
-//       CHECK:   %[[SLICE1:.+]] = vector.extract_strided_slice %[[RT]] {offsets = [1, 0]
-//       CHECK:   %[[EXTRACT0:.+]] = vector.extract %[[SLICE0]][0]
-//       CHECK:   %[[EXTRACT1:.+]] = vector.extract %[[SLICE1]][0]
+//       CHECK:   %[[EXTRACT0:.+]] = vector.extract %[[LT]][1]
+//       CHECK:   %[[EXTRACT1:.+]] = vector.extract %[[RT]][1]
 //       CHECK:   %[[ADD1:.+]] = arith.addf %[[EXTRACT0]], %[[EXTRACT1]] : vector<4xf32>
 //       CHECK:   %[[WRITE0:.+]] = vector.transfer_write %[[ADD0]], %[[OINIT]][%[[C0]], %[[C0]]]
 //       CHECK:   %[[WRITE1:.+]] = vector.transfer_write %[[ADD1]], %[[WRITE0]][%[[C1]], %[[C0]]]
diff --git a/iree/compiler/Codegen/SPIRV/test/vectorize_matmul.mlir b/iree/compiler/Codegen/SPIRV/test/vectorize_matmul.mlir
index f2b2dcd..ea63bc7 100644
--- a/iree/compiler/Codegen/SPIRV/test/vectorize_matmul.mlir
+++ b/iree/compiler/Codegen/SPIRV/test/vectorize_matmul.mlir
@@ -63,21 +63,17 @@
 //       CHECK:       %[[RHS_1_VECTOR:.+]] = vector.transfer_read %[[RHS_TILE]][%[[C1]], %[[C0]]], %[[PAD]]
 //       CHECK:       %[[RHS_2_VECTOR:.+]] = vector.transfer_read %[[RHS_TILE]][%[[C2]], %[[C0]]], %[[PAD]]
 //       CHECK:       %[[RHS_3_VECTOR:.+]] = vector.transfer_read %[[RHS_TILE]][%[[C3]], %[[C0]]], %[[PAD]]
-//       CHECK:       %[[LHS_0:.+]] = vector.extract_strided_slice %[[LHS_VECTOR]] {offsets = [0], sizes = [1], strides = [1]}
-//       CHECK:       %[[LHS_0_SCALAR:.+]] = vector.extract %[[LHS_0]][0] : vector<1xf32>
+//       CHECK:       %[[LHS_0_SCALAR:.+]] = vector.extract %[[LHS_VECTOR]][0]
 //       CHECK:       %[[LHS_0_VECTOR:.+]] = splat %[[LHS_0_SCALAR]] : vector<4xf32>
 //       CHECK:       %[[ACC_0_VECTOR:.+]] = vector.extract %[[ZERO]][0] : vector<1x4xf32>
 //       CHECK:       %[[FMA_0:.+]] = vector.fma %[[LHS_0_VECTOR]], %[[RHS_0_VECTOR]], %[[ACC_0_VECTOR]] : vector<4xf32>
-//       CHECK:       %[[LHS_1:.+]] = vector.extract_strided_slice %[[LHS_VECTOR]] {offsets = [1], sizes = [1], strides = [1]}
-//       CHECK:       %[[LHS_1_SCALAR:.+]] = vector.extract %[[LHS_1]][0] : vector<1xf32>
+//       CHECK:       %[[LHS_1_SCALAR:.+]] = vector.extract %[[LHS_VECTOR]][1]
 //       CHECK:       %[[LHS_1_VECTOR:.+]] = splat %[[LHS_1_SCALAR]] : vector<4xf32>
 //       CHECK:       %[[FMA_1:.+]] = vector.fma %[[LHS_1_VECTOR]], %[[RHS_1_VECTOR]], %[[FMA_0]] : vector<4xf32>
-//       CHECK:       %[[LHS_2:.+]] = vector.extract_strided_slice %[[LHS_VECTOR]] {offsets = [2], sizes = [1], strides = [1]}
-//       CHECK:       %[[LHS_2_SCALAR:.+]] = vector.extract %[[LHS_2]][0] : vector<1xf32>
+//       CHECK:       %[[LHS_2_SCALAR:.+]] = vector.extract %[[LHS_VECTOR]][2]
 //       CHECK:       %[[LHS_2_VECTOR:.+]] = splat %[[LHS_2_SCALAR]] : vector<4xf32>
 //       CHECK:       %[[FMA_2:.+]] = vector.fma %[[LHS_2_VECTOR]], %[[RHS_2_VECTOR]], %[[FMA_1]] : vector<4xf32>
-//       CHECK:       %[[LHS_3:.+]] = vector.extract_strided_slice %[[LHS_VECTOR]] {offsets = [3], sizes = [1], strides = [1]}
-//       CHECK:       %[[LHS_3_SCALAR:.+]] = vector.extract %[[LHS_3]][0] : vector<1xf32>
+//       CHECK:       %[[LHS_3_SCALAR:.+]] = vector.extract %[[LHS_VECTOR]][3]
 //       CHECK:       %[[LHS_3_VECTOR:.+]] = splat %[[LHS_3_SCALAR]] : vector<4xf32>
 //       CHECK:       %[[FMA_3:.+]] = vector.fma %[[LHS_3_VECTOR]], %[[RHS_3_VECTOR]], %[[FMA_2]] : vector<4xf32>
 //       CHECK:       vector.transfer_write %[[FMA_3]], %[[ACC_TILE]][%[[IV_Y]], %[[IV_X]]]
diff --git a/iree/compiler/Dialect/Flow/Transforms/StripSignednessPass.cpp b/iree/compiler/Dialect/Flow/Transforms/StripSignednessPass.cpp
index 1586766..95d767e 100644
--- a/iree/compiler/Dialect/Flow/Transforms/StripSignednessPass.cpp
+++ b/iree/compiler/Dialect/Flow/Transforms/StripSignednessPass.cpp
@@ -115,7 +115,7 @@
 
   RewritePatternSet patterns(&getContext());
   patterns.insert<GenericTypeConvert>(ctx, converter);
-  populateFuncOpTypeConversionPattern(patterns, converter);
+  populateFunctionLikeTypeConversionPattern<FuncOp>(patterns, converter);
 
   if (failed(applyFullConversion(func, target, std::move(patterns)))) {
     signalPassFailure();
diff --git a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.cpp b/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.cpp
index 6e5bb5f..6257157 100644
--- a/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.cpp
+++ b/iree/compiler/Dialect/HAL/Target/LLVM/LLVMAOTTarget.cpp
@@ -151,7 +151,7 @@
     Builder b(context);
     SmallVector<NamedAttribute> configItems;
 
-    configItems.emplace_back(b.getIdentifier("executable_targets"),
+    configItems.emplace_back(b.getStringAttr("executable_targets"),
                              getExecutableTargets(context));
 
     auto configAttr = b.getDictionaryAttr(configItems);
diff --git a/iree/compiler/Dialect/HAL/Target/MetalSPIRV/MetalSPIRVTarget.cpp b/iree/compiler/Dialect/HAL/Target/MetalSPIRV/MetalSPIRVTarget.cpp
index 4ce238d..6919875 100644
--- a/iree/compiler/Dialect/HAL/Target/MetalSPIRV/MetalSPIRVTarget.cpp
+++ b/iree/compiler/Dialect/HAL/Target/MetalSPIRV/MetalSPIRVTarget.cpp
@@ -54,7 +54,7 @@
     Builder b(context);
     SmallVector<NamedAttribute> configItems;
 
-    configItems.emplace_back(b.getIdentifier("executable_targets"),
+    configItems.emplace_back(b.getStringAttr("executable_targets"),
                              getExecutableTargets(context));
 
     auto configAttr = b.getDictionaryAttr(configItems);
@@ -154,7 +154,7 @@
     Builder b(context);
     SmallVector<NamedAttribute> configItems;
 
-    configItems.emplace_back(b.getIdentifier(spirv::getTargetEnvAttrName()),
+    configItems.emplace_back(b.getStringAttr(spirv::getTargetEnvAttrName()),
                              targetEnv);
 
     auto configAttr = b.getDictionaryAttr(configItems);
diff --git a/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTarget.cpp b/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTarget.cpp
index 279ed1b..5033d18 100644
--- a/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTarget.cpp
+++ b/iree/compiler/Dialect/HAL/Target/ROCM/ROCMTarget.cpp
@@ -72,7 +72,7 @@
       MLIRContext *context) const override {
     Builder b(context);
     SmallVector<NamedAttribute> configItems;
-    configItems.emplace_back(b.getIdentifier("executable_targets"),
+    configItems.emplace_back(b.getStringAttr("executable_targets"),
                              getExecutableTargets(context));
 
     auto configAttr = b.getDictionaryAttr(configItems);
diff --git a/iree/compiler/Dialect/HAL/Target/VMVX/VMVXTarget.cpp b/iree/compiler/Dialect/HAL/Target/VMVX/VMVXTarget.cpp
index ee9870b..6acad1e 100644
--- a/iree/compiler/Dialect/HAL/Target/VMVX/VMVXTarget.cpp
+++ b/iree/compiler/Dialect/HAL/Target/VMVX/VMVXTarget.cpp
@@ -45,7 +45,7 @@
     Builder b(context);
     SmallVector<NamedAttribute> configItems;
 
-    configItems.emplace_back(b.getIdentifier("executable_targets"),
+    configItems.emplace_back(b.getStringAttr("executable_targets"),
                              getExecutableTargets(context));
 
     auto configAttr = b.getDictionaryAttr(configItems);
diff --git a/iree/compiler/Dialect/HAL/Target/VulkanSPIRV/VulkanSPIRVTarget.cpp b/iree/compiler/Dialect/HAL/Target/VulkanSPIRV/VulkanSPIRVTarget.cpp
index dffa3c9..4eaa840 100644
--- a/iree/compiler/Dialect/HAL/Target/VulkanSPIRV/VulkanSPIRVTarget.cpp
+++ b/iree/compiler/Dialect/HAL/Target/VulkanSPIRV/VulkanSPIRVTarget.cpp
@@ -141,13 +141,13 @@
     uint64_t maxBufferRange = 128 * 1024 * 1024ull;
     uint64_t minBufferRangeAlignment = 16ull;
     configItems.emplace_back(
-        b.getIdentifier("buffer_constraints"),
+        b.getStringAttr("buffer_constraints"),
         BufferConstraintsAttr::get(b.getIndexAttr(maxAllocationSize),
                                    b.getIndexAttr(minBufferOffsetAlignment),
                                    b.getIndexAttr(maxBufferRange),
                                    b.getIndexAttr(minBufferRangeAlignment)));
 
-    configItems.emplace_back(b.getIdentifier("executable_targets"),
+    configItems.emplace_back(b.getStringAttr("executable_targets"),
                              getExecutableTargets(context));
 
     auto configAttr = b.getDictionaryAttr(configItems);
@@ -334,7 +334,7 @@
     Builder b(context);
     SmallVector<NamedAttribute> configItems;
 
-    configItems.emplace_back(b.getIdentifier(spirv::getTargetEnvAttrName()),
+    configItems.emplace_back(b.getStringAttr(spirv::getTargetEnvAttrName()),
                              targetEnv);
 
     auto configAttr = b.getDictionaryAttr(configItems);
diff --git a/iree/compiler/Dialect/HAL/Target/WebGPU/WebGPUTarget.cpp b/iree/compiler/Dialect/HAL/Target/WebGPU/WebGPUTarget.cpp
index 8fd908d..606d19e 100644
--- a/iree/compiler/Dialect/HAL/Target/WebGPU/WebGPUTarget.cpp
+++ b/iree/compiler/Dialect/HAL/Target/WebGPU/WebGPUTarget.cpp
@@ -76,7 +76,7 @@
     Builder b(context);
     SmallVector<NamedAttribute> configItems;
 
-    configItems.emplace_back(b.getIdentifier("executable_targets"),
+    configItems.emplace_back(b.getStringAttr("executable_targets"),
                              getExecutableTargets(context));
 
     auto configAttr = b.getDictionaryAttr(configItems);
@@ -223,7 +223,7 @@
     Builder b(context);
     SmallVector<NamedAttribute> configItems;
 
-    configItems.emplace_back(b.getIdentifier(spirv::getTargetEnvAttrName()),
+    configItems.emplace_back(b.getStringAttr(spirv::getTargetEnvAttrName()),
                              targetEnv);
 
     auto configAttr = b.getDictionaryAttr(configItems);
diff --git a/iree/compiler/Dialect/Stream/IR/StreamTypes.cpp b/iree/compiler/Dialect/Stream/IR/StreamTypes.cpp
index 38135cf..40fc793 100644
--- a/iree/compiler/Dialect/Stream/IR/StreamTypes.cpp
+++ b/iree/compiler/Dialect/Stream/IR/StreamTypes.cpp
@@ -125,7 +125,7 @@
 // static
 ResourceConfigAttr ResourceConfigAttr::lookup(Operation *op) {
   auto *context = op->getContext();
-  auto attrId = Identifier::get("stream.resources", context);
+  auto attrId = StringAttr::get(context, "stream.resources");
   while (op) {
     if (auto affinityOp = llvm::dyn_cast<AffinityOpInterface>(op)) {
       auto affinityAttr = affinityOp.getAffinity();
@@ -172,7 +172,7 @@
 //===----------------------------------------------------------------------===//
 
 AffinityAttr AffinityAttr::lookup(Operation *op) {
-  auto attrId = Identifier::get("stream.affinity", op->getContext());
+  auto attrId = StringAttr::get(op->getContext(), "stream.affinity");
   while (op) {
     if (auto affinityOp = llvm::dyn_cast<AffinityOpInterface>(op)) {
       auto affinity = affinityOp.getAffinity();
@@ -228,7 +228,7 @@
 }
 
 PartitioningConfigAttr PartitioningConfigAttr::lookup(Operation *op) {
-  auto attrId = Identifier::get("stream.partitioning", op->getContext());
+  auto attrId = StringAttr::get(op->getContext(), "stream.partitioning");
   while (op) {
     auto attr = op->getAttrOfType<PartitioningConfigAttr>(attrId);
     if (attr) return attr;
diff --git a/iree/compiler/Dialect/Util/Transforms/FixedPointIterator.cpp b/iree/compiler/Dialect/Util/Transforms/FixedPointIterator.cpp
index dd9fbd8..508822c 100644
--- a/iree/compiler/Dialect/Util/Transforms/FixedPointIterator.cpp
+++ b/iree/compiler/Dialect/Util/Transforms/FixedPointIterator.cpp
@@ -87,9 +87,9 @@
 
 void FixedPointIteratorPass::runOnOperation() {
   MLIRContext *context = &getContext();
-  StringAttr markerName = StringAttr::get("iree.fixedpoint.iteration", context);
+  StringAttr markerName = StringAttr::get(context, "iree.fixedpoint.iteration");
   StringAttr modifiedName =
-      StringAttr::get("iree.fixedpoint.modified", context);
+      StringAttr::get(context, "iree.fixedpoint.modified");
 
   if (getOperation()->hasAttr(markerName)) {
     emitError(getOperation()->getLoc())
diff --git a/iree/compiler/Dialect/Util/Transforms/TestFloatRangeAnalysis.cpp b/iree/compiler/Dialect/Util/Transforms/TestFloatRangeAnalysis.cpp
index 6eb3921..bb06ca5 100644
--- a/iree/compiler/Dialect/Util/Transforms/TestFloatRangeAnalysis.cpp
+++ b/iree/compiler/Dialect/Util/Transforms/TestFloatRangeAnalysis.cpp
@@ -57,7 +57,7 @@
     // Update.
     for (auto &it : queryOps) {
       it.first->setAttr("analysis",
-                        StringAttr::get(it.second->getAsStr(), &getContext()));
+                        StringAttr::get(&getContext(), it.second->getAsStr()));
     }
   }
 };
diff --git a/iree/compiler/Dialect/VM/IR/VMOps.cpp b/iree/compiler/Dialect/VM/IR/VMOps.cpp
index ee5e558..864dc61 100644
--- a/iree/compiler/Dialect/VM/IR/VMOps.cpp
+++ b/iree/compiler/Dialect/VM/IR/VMOps.cpp
@@ -109,7 +109,7 @@
     }
   }
   if (!didFind) {
-    attrs.push_back(NamedAttribute(Identifier::get(name, getContext()), value));
+    attrs.push_back(NamedAttribute(StringAttr::get(getContext(), name), value));
     DictionaryAttr::sortInPlace(attrs);
   }
   getOperation()->setAttr("iree.reflection",
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Transforms/Tiling.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Transforms/Tiling.cpp
index 96201c5..2a624ab 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Transforms/Tiling.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Transforms/Tiling.cpp
@@ -282,24 +282,24 @@
   patterns.add<TiledOpInterfaceTilingPattern>(
       context, linalg::LinalgTilingOptions().setTileSizes({10, 20}),
       linalg::LinalgTransformationFilter(
-          Identifier::get("tiling_input", context),
-          Identifier::get("tiling_output", context)));
+          StringAttr::get(context, "tiling_input"),
+          StringAttr::get(context, "tiling_output")));
   patterns.add<TiledOpInterfaceTilingPattern>(
       context, linalg::LinalgTilingOptions().setTileSizes(ArrayRef<int64_t>{0}),
       linalg::LinalgTransformationFilter(
-          Identifier::get("no_tiling_input", context),
-          Identifier::get("no_tiling_output", context)));
+          StringAttr::get(context, "no_tiling_input"),
+          StringAttr::get(context, "no_tiling_output")));
 
   patterns.add<TiledOpInterfaceTilingPattern>(
       context, linalg::LinalgTilingOptions().setTileSizes({0, 20}),
       linalg::LinalgTransformationFilter(
-          Identifier::get("outer_reduce_input", context),
-          Identifier::get("outer_reduce_output", context)));
+          StringAttr::get(context, "outer_reduce_input"),
+          StringAttr::get(context, "outer_reduce_output")));
   patterns.add<TiledOpInterfaceTilingPattern>(
       context, linalg::LinalgTilingOptions().setTileSizes({10, 0, 0}),
       linalg::LinalgTransformationFilter(
-          Identifier::get("inner_reduce_input", context),
-          Identifier::get("inner_reduce_output", context)));
+          StringAttr::get(context, "inner_reduce_input"),
+          StringAttr::get(context, "inner_reduce_output")));
 
   static linalg::LinalgLoopDistributionOptions workgroupDistributionOptions = {
       [](OpBuilder &builder, Location loc, ArrayRef<Range> parallelLoopRanges) {
@@ -326,22 +326,22 @@
           .setTileSizes(ArrayRef<int64_t>{10, 0, 30})
           .setDistributionOptions(workgroupDistributionOptions),
       linalg::LinalgTransformationFilter(
-          Identifier::get("distribute_input", context),
-          Identifier::get("distribute_output", context)));
+          StringAttr::get(context, "distribute_input"),
+          StringAttr::get(context, "distribute_output")));
 
   patterns.add<TiledOpInterfaceTilingPattern>(
       context,
       linalg::LinalgTilingOptions().setTileSizes(ArrayRef<int64_t>{32}),
       linalg::LinalgTransformationFilter(
-          Identifier::get("tiling_1d_stage5_fft_input", context),
-          Identifier::get("tiling_1d_stage5_fft_output", context)));
+          StringAttr::get(context, "tiling_1d_stage5_fft_input"),
+          StringAttr::get(context, "tiling_1d_stage5_fft_output")));
 
   patterns.add<TiledOpInterfaceTilingPattern>(
       context,
       linalg::LinalgTilingOptions().setTileSizes(ArrayRef<int64_t>{10, 32}),
       linalg::LinalgTransformationFilter(
-          Identifier::get("tiling_2d_stage5_fft_input", context),
-          Identifier::get("tiling_2d_stage5_fft_output", context)));
+          StringAttr::get(context, "tiling_2d_stage5_fft_input"),
+          StringAttr::get(context, "tiling_2d_stage5_fft_output")));
 
   if (failed(applyPatternsAndFoldGreedily(funcOp, std::move(patterns)))) {
     return signalPassFailure();
diff --git a/third_party/llvm-project b/third_party/llvm-project
index c490f8f..c84b8be 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit c490f8feb71e837dd7011e7a7d8a7928507c9c76
+Subproject commit c84b8be516bcc4d021ff804169d58a7b3104e050
diff --git a/third_party/mlir-hlo b/third_party/mlir-hlo
index f9f6968..ec0760e 160000
--- a/third_party/mlir-hlo
+++ b/third_party/mlir-hlo
@@ -1 +1 @@
-Subproject commit f9f696890acbe198b6164a7ca43523e2bddd630a
+Subproject commit ec0760eb3c4d7c75ff26ab8b18e7f465d6d89aba
diff --git a/third_party/mlir-hlo.branch-pin b/third_party/mlir-hlo.branch-pin
new file mode 100644
index 0000000..47edf9d
--- /dev/null
+++ b/third_party/mlir-hlo.branch-pin
@@ -0,0 +1 @@
+patched-mlir-hlo-20220118
