[vulkan] Update various targets to match current status (#10283)

* Used Android API level (e.g., 30) instead of the Android version
  (e.g., 11). This makes it consistent with how we specify Android
  targets on CPU side (e.g., aarch64-none-linux-android30).
  (Android API level to version mapping: https://apilevels.com/)
* Updated capabilties and extensions for mobile GPUs on Android 12.
* Changed benchmarking to track Android 12 (which is what the
  devices have for a long time).
diff --git a/benchmarks/TFLite/android-adreno.cmake b/benchmarks/TFLite/android-adreno.cmake
index ff540cc..d737ece 100644
--- a/benchmarks/TFLite/android-adreno.cmake
+++ b/benchmarks/TFLite/android-adreno.cmake
@@ -18,7 +18,7 @@
 
 set(ANDROID_ADRENO_GPU_COMPILATION_FLAGS
   "--iree-input-type=tosa"
-  "--iree-vulkan-target-triple=adreno-unknown-android11"
+  "--iree-vulkan-target-triple=adreno-unknown-android31"
 )
 
 # GPU, Vulkan, Adreno, full-inference
diff --git a/benchmarks/TFLite/android-mali.cmake b/benchmarks/TFLite/android-mali.cmake
index 805db83..766b5ff 100644
--- a/benchmarks/TFLite/android-mali.cmake
+++ b/benchmarks/TFLite/android-mali.cmake
@@ -18,7 +18,7 @@
 
 set(ANDROID_MALI_GPU_COMPILATION_FLAGS
   "--iree-input-type=tosa"
-  "--iree-vulkan-target-triple=valhall-unknown-android11"
+  "--iree-vulkan-target-triple=valhall-unknown-android31"
 )
 
 # GPU, Vulkan, Mali, full-inference
@@ -139,7 +139,7 @@
   COMPILATION_FLAGS
     "--iree-input-type=tosa"
     "--iree-flow-demote-f32-to-f16"
-    "--iree-vulkan-target-triple=valhall-unknown-android11"
+    "--iree-vulkan-target-triple=valhall-unknown-android31"
     "--iree-flow-enable-fuse-padding-into-consumer-ops"
   BENCHMARK_TOOL
     iree-benchmark-module
@@ -208,7 +208,7 @@
   COMPILATION_FLAGS
     "--iree-input-type=tosa"
     "--iree-flow-demote-f32-to-f16"
-    "--iree-vulkan-target-triple=valhall-unknown-android11"
+    "--iree-vulkan-target-triple=valhall-unknown-android31"
     "--iree-flow-enable-fuse-padding-into-consumer-ops"
     "--iree-hal-benchmark-dispatch-repeat-count=32"
   BENCHMARK_TOOL
diff --git a/build_tools/benchmarks/comparisons/setup_mobile.sh b/build_tools/benchmarks/comparisons/setup_mobile.sh
index 45f8422..9592879 100644
--- a/build_tools/benchmarks/comparisons/setup_mobile.sh
+++ b/build_tools/benchmarks/comparisons/setup_mobile.sh
@@ -103,7 +103,7 @@
     "${IREE_COMPILE_PATH}" \
       --iree-input-type=tosa \
       --iree-hal-target-backends=vulkan-spirv \
-      --iree-vulkan-target-triple=valhall-unknown-android11 \
+      --iree-vulkan-target-triple=valhall-unknown-android31 \
       --iree-llvm-debug-symbols=false \
       --iree-vm-bytecode-module-strip-source-map=true \
       --iree-vm-emit-polyglot-zip=false \
@@ -114,7 +114,7 @@
     "${IREE_COMPILE_PATH}" \
       --iree-input-type=tosa \
       --iree-hal-target-backends=vulkan-spirv \
-      --iree-vulkan-target-triple=adreno-unknown-android11 \
+      --iree-vulkan-target-triple=adreno-unknown-android31 \
       --iree-llvm-debug-symbols=false \
       --iree-vm-bytecode-module-strip-source-map=true \
       --iree-vm-emit-polyglot-zip=false \
diff --git a/compiler/src/iree/compiler/Dialect/Vulkan/IR/VulkanBase.td b/compiler/src/iree/compiler/Dialect/Vulkan/IR/VulkanBase.td
index 24657e8..a16adc0 100644
--- a/compiler/src/iree/compiler/Dialect/Vulkan/IR/VulkanBase.td
+++ b/compiler/src/iree/compiler/Dialect/Vulkan/IR/VulkanBase.td
@@ -78,9 +78,11 @@
 def VK_V_1_0 : I32EnumAttrCase<"V_1_0", 0, "v1.0">;
 def VK_V_1_1 : I32EnumAttrCase<"V_1_1", 1, "v1.1">;
 def VK_V_1_2 : I32EnumAttrCase<"V_1_2", 2, "v1.2">;
+def VK_V_1_3 : I32EnumAttrCase<"V_1_3", 3, "v1.3">;
 
 def VK_VersionAttr : VK_I32EnumAttr<"Version", "valid Vulkan version", [
-    VK_V_1_0, VK_V_1_1, VK_V_1_2]>;
+    VK_V_1_0, VK_V_1_1, VK_V_1_2, VK_V_1_3
+]>;
 
 def VK_KHR_16bit_storage : I32EnumAttrCase<"VK_KHR_16bit_storage", 0>;
 def VK_KHR_8bit_storage : I32EnumAttrCase<"VK_KHR_8bit_storage", 1>;
@@ -141,16 +143,19 @@
   ]>;
 
 def VK_TTOS_Unknown   : I32EnumAttrCase<"Unknown", 0, "unknown">;
-def VK_TTOS_Android11 : I32EnumAttrCase<"Android11", 2, "android11">;
-def VK_TTOS_iOS       : I32EnumAttrCase<"iOS", 3, "iOS">;
-def VK_TTOS_Linux     : I32EnumAttrCase<"Linux", 4, "linux">;
-def VK_TTOS_macOS     : I32EnumAttrCase<"macOS", 5, "macos">;
-def VK_TTOS_Windows   : I32EnumAttrCase<"Windows", 6, "windows">;
+def VK_TTOS_Linux     : I32EnumAttrCase<"Linux", 1, "linux">;
+def VK_TTOS_iOS       : I32EnumAttrCase<"iOS", 2, "iOS">;
+def VK_TTOS_macOS     : I32EnumAttrCase<"macOS", 3, "macos">;
+def VK_TTOS_Windows   : I32EnumAttrCase<"Windows", 4, "windows">;
+// API Level 30 => Android 11
+def VK_TTOS_Android30 : I32EnumAttrCase<"Android30", 5, "android30">;
+// API Level 31 => Android 12
+def VK_TTOS_Android31 : I32EnumAttrCase<"Android31", 6, "android31">;
 
 def VK_TargetOSAttr : VK_I32EnumAttr<
   "TargetTripleOS", "recognized target operating system", [
-    VK_TTOS_Unknown, VK_TTOS_Android11, VK_TTOS_iOS, VK_TTOS_Linux,
-    VK_TTOS_macOS, VK_TTOS_Windows,
+    VK_TTOS_Unknown, VK_TTOS_Linux, VK_TTOS_iOS, VK_TTOS_macOS,
+    VK_TTOS_Windows, VK_TTOS_Android30, VK_TTOS_Android31,
   ]>;
 
 //===----------------------------------------------------------------------===//
diff --git a/compiler/src/iree/compiler/Dialect/Vulkan/Utils/TargetEnvironment.cpp b/compiler/src/iree/compiler/Dialect/Vulkan/Utils/TargetEnvironment.cpp
index 839b6a6..15a30c6 100644
--- a/compiler/src/iree/compiler/Dialect/Vulkan/Utils/TargetEnvironment.cpp
+++ b/compiler/src/iree/compiler/Dialect/Vulkan/Utils/TargetEnvironment.cpp
@@ -21,25 +21,24 @@
 /// Gets the corresponding SPIR-V version for the ggiven Vulkan target
 /// environment.
 spirv::Version convertVersion(Vulkan::TargetEnvAttr vkTargetEnv) {
-  // Vulkan 1.2 supports up to SPIR-V 1.5 by default.
-  if (vkTargetEnv.getVersion() == Version::V_1_2) return spirv::Version::V_1_5;
-
   // Special extension to enable SPIR-V 1.4.
-  if (llvm::is_contained(vkTargetEnv.getExtensions(),
-                         Extension::VK_KHR_spirv_1_4))
-    return spirv::Version::V_1_4;
+  const bool has14Ext = (llvm::is_contained(vkTargetEnv.getExtensions(),
+                                            Extension::VK_KHR_spirv_1_4));
 
   switch (vkTargetEnv.getVersion()) {
     case Version::V_1_0:
       // Vulkan 1.0 only supports SPIR-V 1.0 by default.
-      return spirv::Version::V_1_0;
+      return has14Ext ? spirv::Version::V_1_4 : spirv::Version::V_1_0;
     case Version::V_1_1:
       // Vulkan 1.1 supports up to SPIR-V 1.3 by default.
-      return spirv::Version::V_1_3;
-    default:
-      break;
+      return has14Ext ? spirv::Version::V_1_4 : spirv::Version::V_1_3;
+    case Version::V_1_2:
+      // Vulkan 1.1 supports up to SPIR-V 1.5 by default.
+      return spirv::Version::V_1_5;
+    case Version::V_1_3:
+      // Vulkan 1.1 supports up to SPIR-V 1.6 by default.
+      return spirv::Version::V_1_6;
   }
-  assert(false && "unhandled Vulkan version!");
   return spirv::Version::V_1_0;
 }
 
diff --git a/compiler/src/iree/compiler/Dialect/Vulkan/Utils/TargetTriple.cpp b/compiler/src/iree/compiler/Dialect/Vulkan/Utils/TargetTriple.cpp
index 16510c1..d818eea 100644
--- a/compiler/src/iree/compiler/Dialect/Vulkan/Utils/TargetTriple.cpp
+++ b/compiler/src/iree/compiler/Dialect/Vulkan/Utils/TargetTriple.cpp
@@ -80,8 +80,9 @@
 
 /// Returns the Vulkan version for the given target `triple`.
 Vulkan::Version getVersion(const TargetTriple &triple) {
-  // Android 11 stays at Vulkan 1.1.
-  if (triple.getOS() == TargetTripleOS::Android11) {
+  // Android 11/12 (API level 30/31) stays at Vulkan 1.1.
+  if (triple.getOS() == TargetTripleOS::Android30 ||
+      triple.getOS() == TargetTripleOS::Android31) {
     return Version::V_1_1;
   }
 
@@ -91,7 +92,7 @@
     return Version::V_1_1;
   }
 
-  return Version::V_1_2;
+  return Version::V_1_3;
 }
 
 /// Writes the Vulkan extensions supported by the given `triple` into
@@ -130,7 +131,8 @@
       return extensions.append(list.begin(), list.end());
     }
     case TargetTripleArch::QC_Adreno: {
-      // Example: https://vulkan.gpuinfo.org/displayreport.php?id=10983
+      // Example: https://vulkan.gpuinfo.org/displayreport.php?id=10983 (11)
+      // Example: https://vulkan.gpuinfo.org/displayreport.php?id=16312 (12)
       const std::array<Extension, 5> list = {
           Extension::VK_KHR_16bit_storage,
           Extension::VK_KHR_shader_float16_int8,
@@ -138,7 +140,11 @@
           Extension::VK_KHR_storage_buffer_storage_class,
           Extension::VK_KHR_variable_pointers,
       };
-      return extensions.append(list.begin(), list.end());
+      extensions.append(list.begin(), list.end());
+      if (triple.getOS() == TargetTripleOS::Android31) {
+        extensions.push_back(Extension::VK_KHR_8bit_storage);
+      }
+      return;
     }
     default:
       break;
@@ -249,7 +255,8 @@
       variablePointers = variablePointersStorageBuffer = true;
       break;
     case TargetTripleArch::ARM_Valhall:
-      // Example: https://vulkan.gpuinfo.org/displayreport.php?id=10312
+      // Example: https://vulkan.gpuinfo.org/displayreport.php?id=10312 (11)
+      // Example: https://vulkan.gpuinfo.org/displayreport.php?id=15142 (12)
       maxComputeSharedMemorySize = 32768;
       maxComputeWorkGroupInvocations = 512;
       maxComputeWorkGroupSize = {512, 512, 512};
@@ -259,6 +266,11 @@
                          SubgroupFeature::Arithmetic | SubgroupFeature::Ballot |
                          SubgroupFeature::Clustered | SubgroupFeature::Quad;
 
+      if (triple.getOS() == TargetTripleOS::Android31) {
+        subgroupFeatures = subgroupFeatures | SubgroupFeature::Shuffle |
+                           SubgroupFeature::ShuffleRelative;
+      }
+
       shaderFloat16 = shaderInt8 = shaderInt16 = true;
 
       storageBuffer16BitAccess = storagePushConstant16 = true;
@@ -324,7 +336,8 @@
           /*bType=*/f16t, /*cType=*/f32t, /*resultType=*/f32t, scope));
     } break;
     case TargetTripleArch::QC_Adreno:
-      // Example: https://vulkan.gpuinfo.org/displayreport.php?id=10983
+      // Example: https://vulkan.gpuinfo.org/displayreport.php?id=10983 (11)
+      // Example: https://vulkan.gpuinfo.org/displayreport.php?id=16312 (12)
       maxComputeSharedMemorySize = 32768;
       maxComputeWorkGroupInvocations = 1024;
       maxComputeWorkGroupSize = {1024, 1024, 64};
@@ -339,6 +352,10 @@
       shaderFloat16 = shaderInt8 = shaderInt16 = true;
 
       storageBuffer16BitAccess = true;
+      if (triple.getOS() == TargetTripleOS::Android31) {
+        storageBuffer8BitAccess = true;
+      }
+
       variablePointers = variablePointersStorageBuffer = true;
       break;
   }
diff --git a/compiler/src/iree/compiler/Dialect/Vulkan/Utils/TargetTriple.h b/compiler/src/iree/compiler/Dialect/Vulkan/Utils/TargetTriple.h
index 4012f56..4171a86 100644
--- a/compiler/src/iree/compiler/Dialect/Vulkan/Utils/TargetTriple.h
+++ b/compiler/src/iree/compiler/Dialect/Vulkan/Utils/TargetTriple.h
@@ -31,8 +31,8 @@
 /// For example:
 ///   ampere-rtx3080-windows
 ///   rdna1-5700xt-linux
-///   adreno-a650-android11
-///   valhall-unknown-android11
+///   adreno-a650-android30
+///   valhall-unknown-android30
 ///   cpu-swiftshader-unknown
 ///
 /// Vendor and architecture are combined together because:
diff --git a/compiler/src/iree/compiler/Dialect/Vulkan/Utils/test/target_env_conversion.mlir b/compiler/src/iree/compiler/Dialect/Vulkan/Utils/test/target_env_conversion.mlir
index 6e3fd39..4a1293a 100644
--- a/compiler/src/iree/compiler/Dialect/Vulkan/Utils/test/target_env_conversion.mlir
+++ b/compiler/src/iree/compiler/Dialect/Vulkan/Utils/test/target_env_conversion.mlir
@@ -1,6 +1,6 @@
 // RUN: iree-opt --pass-pipeline='iree-hal-transformation-pipeline{serialize-executables=false}' --iree-hal-target-backends=vulkan-spirv %s | FileCheck %s --check-prefix=DEFAULT
-// RUN: iree-opt --pass-pipeline='iree-hal-transformation-pipeline{serialize-executables=false}' --iree-hal-target-backends=vulkan-spirv --iree-vulkan-target-triple=adreno-a650-android11 %s | FileCheck %s --check-prefix=ADRENO
-// RUN: iree-opt --pass-pipeline='iree-hal-transformation-pipeline{serialize-executables=false}' --iree-hal-target-backends=vulkan-spirv --iree-vulkan-target-triple=valhall-unknown-android11 %s | FileCheck %s --check-prefix=MALI
+// RUN: iree-opt --pass-pipeline='iree-hal-transformation-pipeline{serialize-executables=false}' --iree-hal-target-backends=vulkan-spirv --iree-vulkan-target-triple=adreno-a650-android30 %s | FileCheck %s --check-prefix=ADRENO
+// RUN: iree-opt --pass-pipeline='iree-hal-transformation-pipeline{serialize-executables=false}' --iree-hal-target-backends=vulkan-spirv --iree-vulkan-target-triple=valhall-unknown-android31 %s | FileCheck %s --check-prefix=MALI
 // RUN: iree-opt --pass-pipeline='iree-hal-transformation-pipeline{serialize-executables=false}' --iree-hal-target-backends=vulkan-spirv --iree-vulkan-target-triple=turing-t4-linux %s | FileCheck %s --check-prefix=TURINGT4
 // RUN: iree-opt --pass-pipeline='iree-hal-transformation-pipeline{serialize-executables=false}' --iree-hal-target-backends=vulkan-spirv --iree-vulkan-target-triple=rdna1-5700xt-windows %s | FileCheck %s --check-prefix=AMD5700XT
 // RUN: iree-opt --pass-pipeline='iree-hal-transformation-pipeline{serialize-executables=false}' --iree-hal-target-backends=vulkan-spirv --iree-vulkan-target-triple=m1-moltenvk-macos %s | FileCheck %s --check-prefix=M1
@@ -11,9 +11,9 @@
 
 // DEFAULT: #spv.target_env<#spv.vce<v1.3, [Shader, GroupNonUniform, GroupNonUniformVote, GroupNonUniformArithmetic, GroupNonUniformBallot, GroupNonUniformShuffle, GroupNonUniformShuffleRelative], [SPV_KHR_storage_buffer_storage_class]>, SwiftShader:CPU, #spv.resource_limits<max_compute_workgroup_size = [128, 128, 64], subgroup_size = 4, cooperative_matrix_properties_nv = []>>
 // ADRENO: #spv.target_env<#spv.vce<v1.4, [Shader, Float16, Int16, Int8, StorageBuffer16BitAccess, GroupNonUniform, GroupNonUniformVote, GroupNonUniformArithmetic, GroupNonUniformBallot, GroupNonUniformShuffle, GroupNonUniformShuffleRelative, GroupNonUniformQuad, VariablePointers, VariablePointersStorageBuffer], [SPV_KHR_16bit_storage, SPV_KHR_storage_buffer_storage_class, SPV_KHR_variable_pointers]>, Qualcomm:IntegratedGPU, #spv.resource_limits<max_compute_shared_memory_size = 32768, max_compute_workgroup_invocations = 1024, max_compute_workgroup_size = [1024, 1024, 64], subgroup_size = 64, cooperative_matrix_properties_nv = []>>
-// MALI: #spv.target_env<#spv.vce<v1.4, [Shader, Float16, Int16, Int8, StorageBuffer16BitAccess, StorageUniform16, StoragePushConstant16, StorageBuffer8BitAccess, UniformAndStorageBuffer8BitAccess, StoragePushConstant8, GroupNonUniform, GroupNonUniformVote, GroupNonUniformArithmetic, GroupNonUniformBallot, GroupNonUniformClustered, GroupNonUniformQuad, VariablePointers, VariablePointersStorageBuffer], [SPV_KHR_16bit_storage, SPV_KHR_8bit_storage, SPV_KHR_storage_buffer_storage_class, SPV_KHR_variable_pointers]>, ARM:IntegratedGPU, #spv.resource_limits<max_compute_shared_memory_size = 32768, max_compute_workgroup_invocations = 512, max_compute_workgroup_size = [512, 512, 512], subgroup_size = 16, cooperative_matrix_properties_nv = []>>
-// TURINGT4: #spv.target_env<#spv.vce<v1.5, [Shader, Float64, Float16, Int64, Int16, Int8, StorageBuffer16BitAccess, StorageUniform16, StoragePushConstant16, StorageBuffer8BitAccess, UniformAndStorageBuffer8BitAccess, StoragePushConstant8, GroupNonUniform, GroupNonUniformVote, GroupNonUniformArithmetic, GroupNonUniformBallot, GroupNonUniformShuffle, GroupNonUniformShuffleRelative, GroupNonUniformClustered, GroupNonUniformQuad, VariablePointers, VariablePointersStorageBuffer, CooperativeMatrixNV], [SPV_KHR_16bit_storage, SPV_KHR_8bit_storage, SPV_KHR_storage_buffer_storage_class, SPV_KHR_variable_pointers, SPV_NV_cooperative_matrix]>, NVIDIA:DiscreteGPU, #spv.resource_limits<max_compute_shared_memory_size = 49152, max_compute_workgroup_invocations = 1024, max_compute_workgroup_size = [1024, 1024, 64], cooperative_matrix_properties_nv = [#spv.coop_matrix_props<m_size = 8, n_size = 8, k_size = 32, a_type = i8, b_type = i8, c_type = i32, result_type = i32, scope = <Subgroup>>, #spv.coop_matrix_props<m_size = 16, n_size = 16, k_size = 16, a_type = f16, b_type = f16, c_type = f16, result_type = f16, scope = <Subgroup>>, #spv.coop_matrix_props<m_size = 16, n_size = 16, k_size = 16, a_type = f16, b_type = f16, c_type = f32, result_type = f32, scope = <Subgroup>>]>>
-// AMD5700XT: #spv.target_env<#spv.vce<v1.5, [Shader, Float64, Float16, Int64, Int16, Int8, StorageBuffer16BitAccess, StorageUniform16, StoragePushConstant16, StorageBuffer8BitAccess, UniformAndStorageBuffer8BitAccess, StoragePushConstant8, GroupNonUniform, GroupNonUniformVote, GroupNonUniformArithmetic, GroupNonUniformBallot, GroupNonUniformShuffle, GroupNonUniformShuffleRelative, GroupNonUniformClustered, GroupNonUniformQuad, VariablePointers, VariablePointersStorageBuffer], [SPV_KHR_16bit_storage, SPV_KHR_8bit_storage, SPV_KHR_storage_buffer_storage_class, SPV_KHR_variable_pointers]>, AMD:DiscreteGPU, #spv.resource_limits<max_compute_shared_memory_size = 65536, max_compute_workgroup_invocations = 1024, max_compute_workgroup_size = [1024, 1024, 1024], subgroup_size = 64, cooperative_matrix_properties_nv = []>>
+// MALI: #spv.target_env<#spv.vce<v1.4, [Shader, Float16, Int16, Int8, StorageBuffer16BitAccess, StorageUniform16, StoragePushConstant16, StorageBuffer8BitAccess, UniformAndStorageBuffer8BitAccess, StoragePushConstant8, GroupNonUniform, GroupNonUniformVote, GroupNonUniformArithmetic, GroupNonUniformBallot, GroupNonUniformShuffle, GroupNonUniformShuffleRelative, GroupNonUniformClustered, GroupNonUniformQuad, VariablePointers, VariablePointersStorageBuffer], [SPV_KHR_16bit_storage, SPV_KHR_8bit_storage, SPV_KHR_storage_buffer_storage_class, SPV_KHR_variable_pointers]>, ARM:IntegratedGPU, #spv.resource_limits<max_compute_shared_memory_size = 32768, max_compute_workgroup_invocations = 512, max_compute_workgroup_size = [512, 512, 512], subgroup_size = 16, cooperative_matrix_properties_nv = []>>
+// TURINGT4: #spv.target_env<#spv.vce<v1.6, [Shader, Float64, Float16, Int64, Int16, Int8, StorageBuffer16BitAccess, StorageUniform16, StoragePushConstant16, StorageBuffer8BitAccess, UniformAndStorageBuffer8BitAccess, StoragePushConstant8, GroupNonUniform, GroupNonUniformVote, GroupNonUniformArithmetic, GroupNonUniformBallot, GroupNonUniformShuffle, GroupNonUniformShuffleRelative, GroupNonUniformClustered, GroupNonUniformQuad, VariablePointers, VariablePointersStorageBuffer, CooperativeMatrixNV], [SPV_KHR_16bit_storage, SPV_KHR_8bit_storage, SPV_KHR_storage_buffer_storage_class, SPV_KHR_variable_pointers, SPV_NV_cooperative_matrix]>, NVIDIA:DiscreteGPU, #spv.resource_limits<max_compute_shared_memory_size = 49152, max_compute_workgroup_invocations = 1024, max_compute_workgroup_size = [1024, 1024, 64], cooperative_matrix_properties_nv = [#spv.coop_matrix_props<m_size = 8, n_size = 8, k_size = 32, a_type = i8, b_type = i8, c_type = i32, result_type = i32, scope = <Subgroup>>, #spv.coop_matrix_props<m_size = 16, n_size = 16, k_size = 16, a_type = f16, b_type = f16, c_type = f16, result_type = f16, scope = <Subgroup>>, #spv.coop_matrix_props<m_size = 16, n_size = 16, k_size = 16, a_type = f16, b_type = f16, c_type = f32, result_type = f32, scope = <Subgroup>>]>>
+// AMD5700XT: #spv.target_env<#spv.vce<v1.6, [Shader, Float64, Float16, Int64, Int16, Int8, StorageBuffer16BitAccess, StorageUniform16, StoragePushConstant16, StorageBuffer8BitAccess, UniformAndStorageBuffer8BitAccess, StoragePushConstant8, GroupNonUniform, GroupNonUniformVote, GroupNonUniformArithmetic, GroupNonUniformBallot, GroupNonUniformShuffle, GroupNonUniformShuffleRelative, GroupNonUniformClustered, GroupNonUniformQuad, VariablePointers, VariablePointersStorageBuffer], [SPV_KHR_16bit_storage, SPV_KHR_8bit_storage, SPV_KHR_storage_buffer_storage_class, SPV_KHR_variable_pointers]>, AMD:DiscreteGPU, #spv.resource_limits<max_compute_shared_memory_size = 65536, max_compute_workgroup_invocations = 1024, max_compute_workgroup_size = [1024, 1024, 1024], subgroup_size = 64, cooperative_matrix_properties_nv = []>>
 // M1: #spv.target_env<#spv.vce<v1.3, [Shader, Float16, Int64, Int16, Int8, StorageBuffer16BitAccess, StorageUniform16, StoragePushConstant16, StorageBuffer8BitAccess, UniformAndStorageBuffer8BitAccess, StoragePushConstant8, GroupNonUniform, GroupNonUniformVote, GroupNonUniformArithmetic, GroupNonUniformBallot, GroupNonUniformShuffle, GroupNonUniformShuffleRelative, GroupNonUniformQuad, VariablePointers, VariablePointersStorageBuffer], [SPV_KHR_16bit_storage, SPV_KHR_8bit_storage, SPV_KHR_storage_buffer_storage_class, SPV_KHR_variable_pointers]>, Apple:IntegratedGPU, #spv.resource_limits<max_compute_shared_memory_size = 32768, max_compute_workgroup_invocations = 1024, max_compute_workgroup_size = [1024, 1024, 1024], cooperative_matrix_properties_nv = []>>
 
 
diff --git a/docs/website/docs/deployment-configurations/gpu-vulkan.md b/docs/website/docs/deployment-configurations/gpu-vulkan.md
index 0ffc239..799cdf9 100644
--- a/docs/website/docs/deployment-configurations/gpu-vulkan.md
+++ b/docs/website/docs/deployment-configurations/gpu-vulkan.md
@@ -161,8 +161,8 @@
 
 GPU Vendor | Target Triple
 :--------: | :-----------:
-ARM Mali GPU | `valhall-g78-android11`
-Qualcomm Adreno GPU | `adreno-unknown-android11`
+ARM Mali GPU | `valhall-g78-android30`
+Qualcomm Adreno GPU | `adreno-unknown-android30`
 AMD GPU | e.g., `rdna1-5700xt-linux`
 NVIDIA GPU | e..g, `ampere-rtx3080-windows`
 SwiftShader CPU | `cpu-swiftshader-unknown`
diff --git a/tests/e2e/matmul/BUILD b/tests/e2e/matmul/BUILD
index c19fe3a..743a048 100644
--- a/tests/e2e/matmul/BUILD
+++ b/tests/e2e/matmul/BUILD
@@ -235,7 +235,7 @@
     ],
     trace_runner = "//tools:iree-e2e-matmul-test",
 ) for vulkan_target in [
-    "valhall-unknown-android11",
+    "valhall-unknown-android31",
     "ampere-unknown-linux",
 ]]
 
diff --git a/tests/e2e/matmul/CMakeLists.txt b/tests/e2e/matmul/CMakeLists.txt
index 5a68326..52b6a39 100644
--- a/tests/e2e/matmul/CMakeLists.txt
+++ b/tests/e2e/matmul/CMakeLists.txt
@@ -320,7 +320,7 @@
 
 iree_generated_trace_runner_test(
   NAME
-    e2e_matmul_direct_f32_gpu_large_valhall-unknown-android11
+    e2e_matmul_direct_f32_gpu_large_valhall-unknown-android31
   GENERATOR
     "generate_e2e_matmul_tests.py"
   GENERATOR_ARGS
@@ -334,7 +334,7 @@
   DRIVERS
     "vulkan"
   COMPILER_FLAGS
-    "--iree-vulkan-target-triple=valhall-unknown-android11"
+    "--iree-vulkan-target-triple=valhall-unknown-android31"
   LABELS
     "requires-gpu-nvidia"
 )
diff --git a/tests/e2e/vulkan_specific/BUILD b/tests/e2e/vulkan_specific/BUILD
index b8421f0..ba2715b 100644
--- a/tests/e2e/vulkan_specific/BUILD
+++ b/tests/e2e/vulkan_specific/BUILD
@@ -21,7 +21,7 @@
     ],
     compiler_flags = [
         "--iree-input-type=mhlo",
-        "--iree-vulkan-target-triple=valhall-unknown-android11",
+        "--iree-vulkan-target-triple=valhall-unknown-android31",
     ],
     driver = "vulkan",
     tags = [
@@ -39,7 +39,7 @@
     ],
     compiler_flags = [
         "--iree-input-type=mhlo",
-        "--iree-vulkan-target-triple=valhall-unknown-android11",
+        "--iree-vulkan-target-triple=valhall-unknown-android31",
     ],
     driver = "vulkan",
     target_backend = "vulkan-spirv",
diff --git a/tests/e2e/vulkan_specific/CMakeLists.txt b/tests/e2e/vulkan_specific/CMakeLists.txt
index 240fcc2..71367ad 100644
--- a/tests/e2e/vulkan_specific/CMakeLists.txt
+++ b/tests/e2e/vulkan_specific/CMakeLists.txt
@@ -22,7 +22,7 @@
     "vulkan"
   COMPILER_FLAGS
     "--iree-input-type=mhlo"
-    "--iree-vulkan-target-triple=valhall-unknown-android11"
+    "--iree-vulkan-target-triple=valhall-unknown-android31"
   LABELS
     "manual"
     "notap"
@@ -40,7 +40,7 @@
     "vulkan"
   COMPILER_FLAGS
     "--iree-input-type=mhlo"
-    "--iree-vulkan-target-triple=valhall-unknown-android11"
+    "--iree-vulkan-target-triple=valhall-unknown-android31"
 )
 
 ### BAZEL_TO_CMAKE_PRESERVES_ALL_CONTENT_BELOW_THIS_LINE ###