Update from master branch.
diff --git a/.travis.yml b/.travis.yml
index 04394cf..3856b71 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,13 +2,11 @@
 
 # macOS and Xcode Version
 os: osx
-osx_image: xcode11.3
+osx_image: xcode11.5
 
-# Build dependencies
-# Travis has trouble with python3, which SPIRV-Tools requires,
-# so skip the SPIRV-Tools build, and use templeted headers instead.
+# Build dependencies with verbose logging to avoid Travis timing out.
 install:
-  - ./fetchDependencies -v --skip-spirv-tools-build
+  - ./fetchDependencies -v
 
 script:
   - xcodebuild -project MoltenVKPackaging.xcodeproj -scheme "MoltenVK Package"
diff --git a/Common/MVKOSExtensions.h b/Common/MVKOSExtensions.h
index 8e7e821..83adaae 100644
--- a/Common/MVKOSExtensions.h
+++ b/Common/MVKOSExtensions.h
@@ -18,12 +18,17 @@
 
 #pragma once
 
+#include "MVKCommonEnvironment.h"
 #include <dispatch/dispatch.h>
 #include <string>
+#include <limits>
 
 
 typedef float MVKOSVersion;
 
+/*** Constant indicating unsupported functionality in an OS. */
+static const MVKOSVersion kMVKOSVersionUnsupported = std::numeric_limits<MVKOSVersion>::max();
+
 /**
  * Returns the operating system version as an MVKOSVersion, which is a float in which the
  * whole number portion indicates the major version, and the fractional portion indicates 
@@ -33,10 +38,30 @@
  */
 MVKOSVersion mvkOSVersion();
 
+/** Returns a MVKOSVersion built from the version components. */
+inline MVKOSVersion mvkMakeOSVersion(uint32_t major, uint32_t minor, uint32_t patch) {
+	return (float)major + ((float)minor / 100.0f) + ((float)patch / 10000.0f);
+}
+
 /** Returns whether the operating system version is at least minVer. */
 inline bool mvkOSVersionIsAtLeast(MVKOSVersion minVer) { return mvkOSVersion() >= minVer; }
 
 /**
+ * Returns whether the operating system version is at least the appropriate min version.
+ * The constant kMVKOSVersionUnsupported can be used for either value to cause the test
+ * to always fail on that OS, which is useful for indidicating functionalty guarded by
+ * this test is not supported on that OS.
+ */
+inline bool mvkOSVersionIsAtLeast(MVKOSVersion macOSMinVer, MVKOSVersion iOSMinVer) {
+#if MVK_MACOS
+	return mvkOSVersionIsAtLeast(macOSMinVer);
+#endif
+#if MVK_IOS
+	return mvkOSVersionIsAtLeast(iOSMinVer);
+#endif
+}
+
+/**
  * Returns a monotonic timestamp value for use in Vulkan and performance timestamping.
  *
  * The returned value corresponds to the number of CPU "ticks" since the app was initialized.
diff --git a/Common/MVKOSExtensions.mm b/Common/MVKOSExtensions.mm
index f04484c..2783777 100644
--- a/Common/MVKOSExtensions.mm
+++ b/Common/MVKOSExtensions.mm
@@ -29,17 +29,13 @@
 
 using namespace std;
 
-static const MVKOSVersion kMVKOSVersionUnknown = 0.0f;
-static MVKOSVersion _mvkOSVersion = kMVKOSVersionUnknown;
 MVKOSVersion mvkOSVersion() {
-    if (_mvkOSVersion == kMVKOSVersionUnknown) {
-        NSOperatingSystemVersion osVer = [[NSProcessInfo processInfo] operatingSystemVersion];
-        float maj = osVer.majorVersion;
-        float min = osVer.minorVersion;
-        float pat = osVer.patchVersion;
-        _mvkOSVersion = maj + (min / 100.0f) +  + (pat / 10000.0f);
-    }
-    return _mvkOSVersion;
+	static MVKOSVersion _mvkOSVersion = 0;
+	if ( !_mvkOSVersion ) {
+		NSOperatingSystemVersion osVer = [[NSProcessInfo processInfo] operatingSystemVersion];
+		_mvkOSVersion = mvkMakeOSVersion((uint32_t)osVer.majorVersion, (uint32_t)osVer.minorVersion, (uint32_t)osVer.patchVersion);
+	}
+	return _mvkOSVersion;
 }
 
 static uint64_t _mvkTimestampBase;
diff --git a/Demos/LunarG-VulkanSamples/API-Samples/API-Samples.xcodeproj/project.pbxproj b/Demos/LunarG-VulkanSamples/API-Samples/API-Samples.xcodeproj/project.pbxproj
index adb88b3..145fcef 100644
--- a/Demos/LunarG-VulkanSamples/API-Samples/API-Samples.xcodeproj/project.pbxproj
+++ b/Demos/LunarG-VulkanSamples/API-Samples/API-Samples.xcodeproj/project.pbxproj
@@ -659,7 +659,6 @@
 				PRODUCT_NAME = "API-Samples";
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALID_ARCHS = arm64;
 			};
 			name = Debug;
 		};
@@ -681,7 +680,6 @@
 				PRODUCT_NAME = "API-Samples";
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALID_ARCHS = arm64;
 			};
 			name = Release;
 		};
@@ -738,6 +736,7 @@
 		C01FCF4F08A954540054247B /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = YES;
@@ -768,6 +767,7 @@
 		C01FCF5008A954540054247B /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = YES;
diff --git a/Demos/LunarG-VulkanSamples/API-Samples/generateSPIRVShaders b/Demos/LunarG-VulkanSamples/API-Samples/generateSPIRVShaders
index b234111..3233861 100755
--- a/Demos/LunarG-VulkanSamples/API-Samples/generateSPIRVShaders
+++ b/Demos/LunarG-VulkanSamples/API-Samples/generateSPIRVShaders
@@ -10,27 +10,14 @@
 set -e
 
 echo
-echo ========== Building MoltenVKShaderConverter tool ==========
+echo ========== Converting API-Samples shader files ==========
 echo
 
 cd "../../.."
 
-XC_PROJ="MoltenVKPackaging.xcodeproj"
-XC_SCHEME="MVKShaderConverterTool Package"
-
-xcodebuild  \
-	-project "MoltenVKPackaging.xcodeproj"  \
-	-scheme "MVKShaderConverterTool Package"  \
-	-quiet  \
-	build
-
-echo
-echo ========== Converting API-Samples shader files ==========
-echo
-
 "Package/Latest/MoltenVKShaderConverter/Tools/MoltenVKShaderConverter"  \
  -r -gi -so -oh -xs . -q  \
- -d "Demos/LunarG-VulkanSamples/VulkanSamples/API-Samples"
+ -d "Demos/LunarG-VulkanSamples/VulkanSamples/API-Samples" > /dev/null
 
 cd -  > /dev/null
 
diff --git a/Demos/LunarG-VulkanSamples/Cube/Cube.xcodeproj/project.pbxproj b/Demos/LunarG-VulkanSamples/Cube/Cube.xcodeproj/project.pbxproj
index 75030f0..2766dab 100644
--- a/Demos/LunarG-VulkanSamples/Cube/Cube.xcodeproj/project.pbxproj
+++ b/Demos/LunarG-VulkanSamples/Cube/Cube.xcodeproj/project.pbxproj
@@ -359,7 +359,6 @@
 				PRODUCT_NAME = Cube;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALID_ARCHS = arm64;
 			};
 			name = Debug;
 		};
@@ -380,13 +379,13 @@
 				PRODUCT_NAME = Cube;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALID_ARCHS = arm64;
 			};
 			name = Release;
 		};
 		C01FCF4F08A954540054247B /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = YES;
@@ -417,6 +416,7 @@
 		C01FCF5008A954540054247B /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = YES;
diff --git a/Demos/LunarG-VulkanSamples/Hologram/Hologram.xcodeproj/project.pbxproj b/Demos/LunarG-VulkanSamples/Hologram/Hologram.xcodeproj/project.pbxproj
index 9129ae3..3f77a1b 100644
--- a/Demos/LunarG-VulkanSamples/Hologram/Hologram.xcodeproj/project.pbxproj
+++ b/Demos/LunarG-VulkanSamples/Hologram/Hologram.xcodeproj/project.pbxproj
@@ -360,7 +360,6 @@
 				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../MoltenVK/iOS/static\"";
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALID_ARCHS = arm64;
 			};
 			name = Debug;
 		};
@@ -375,7 +374,6 @@
 				LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../MoltenVK/iOS/static\"";
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALID_ARCHS = arm64;
 			};
 			name = Release;
 		};
@@ -416,6 +414,7 @@
 		C01FCF4F08A954540054247B /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = YES;
@@ -448,6 +447,7 @@
 		C01FCF5008A954540054247B /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = YES;
diff --git a/Docs/MoltenVK_Runtime_UserGuide.md b/Docs/MoltenVK_Runtime_UserGuide.md
index 826bfee..80528d5 100644
--- a/Docs/MoltenVK_Runtime_UserGuide.md
+++ b/Docs/MoltenVK_Runtime_UserGuide.md
@@ -63,7 +63,7 @@
 *Vulkan*, which uses *SPIR-V*. **MoltenVK** automatically converts your *SPIR-V* shaders 
 to their *MSL* equivalents. This can be performed transparently at run time, using the 
 **Runtime Shader Conversion** feature of **MoltenVK**, or at development time using the 
-[**MoltenVKShaderConverter**] (#shader_converter_tool) tool provided with this **MoltenVK** 
+[**MoltenVKShaderConverter**](#shader_converter_tool) tool provided with this **MoltenVK** 
 distribution package.
 
 To provide *Vulkan* capability to the *iOS* and *macOS* platforms, **MoltenVK** uses *Apple's* 
@@ -256,6 +256,7 @@
 - `VK_KHR_push_descriptor`
 - `VK_KHR_relaxed_block_layout`
 - `VK_KHR_sampler_mirror_clamp_to_edge` *(macOS)*
+- `VK_KHR_sampler_ycbcr_conversion`
 - `VK_KHR_shader_draw_parameters`
 - `VK_KHR_shader_float16_int8`
 - `VK_KHR_storage_buffer_storage_class`
diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md
index 9afd2df..10448f5 100644
--- a/Docs/Whats_New.md
+++ b/Docs/Whats_New.md
@@ -13,6 +13,31 @@
 
 
 
+MoltenVK 1.0.44
+---------------
+
+Released TBD
+
+- Remove use of `@available()` directive as it was causing issues in some build environments
+- Refactor **MoltenVK** *Xcode* build architectures
+- Demo `API-Samples generateSPIRVShaders` no longer builds `MoltenVKShaderController` tool.
+
+
+MoltenVK 1.0.43
+---------------
+
+Released 2020/06/09
+
+- Fix issue in reporting properties of substitutable `VkFormats`.
+- Fix vertex attribute offset adjustments when vertex buffer stride is zero.
+- Update `fetchDependencies` script to use pre-built `spirv-tools` files by default.
+- Update `maxVertexInputBindingStride` and `maxVertexInputAttributeOffset` 
+  to minimum Vulkan values.
+- Numerous documentation typo corrections.
+- Update `VK_MVK_MOLTENVK_SPEC_VERSION` to `26`.
+- Update Travis CI to Xcode 11.5.
+
+
 
 MoltenVK 1.0.42
 ---------------
@@ -20,22 +45,58 @@
 Released 2020/06/01
 
 - Add support for extensions:
+	- `VK_GOOGLE_display_timing`
 	- `VK_KHR_external_memory` (non-functional groundwork for future 
 	  Metal-resource Vulkan extension).
 	- `VK_KHR_external_memory_capabilities` (non-functional groundwork 
 	   for future Metal-resource Vulkan extension).
-- Memory consumption improvements.
+- Memory consumption improvements in command handling and vector pre-allocation optimizations.
+- `vkQueuePresentKHR()` returns a `VkResult` for each swapchain.
+- `MVKPipeline` disable fragment shader outputs for unused attachments.
+- `MVKBuffer` support texel buffers in host-coherent memory on Mac.
+- `MVKDescriptor` pass buffers to shaders that do atomic image accesses.
+- Support vertex attribute offsets larger than the vertex buffer stride.
+- Fix crash when more than two GPUs.
+- Fix issue where `vkGetPhysicalDeviceFormatProperties()` incorrectly returned 
+  properties for unsupported formats.
+- Fix stack overflow in when logging and reporting very long messages.
+- Fix situation where compute pipeline state not retained across copy and renderpass operations.
+- Fix buffer offset calculation.
+- Fixes to maximum FPS calculations.
+- Fix buffer size passed to shaders when `VkDescriptorBufferInfo.range` set to `VK_WHOLE_SIZE`.
+- Update maximum number of framebuffer layers to 2048.
+- Support stencil only image formats in identity swizzle case.
+- Enables format atomic capabilities only when format supports it.
+- Add `MVKSmallVector` as a more memory efficient substitute of `MVKVector`.
 - Reinstate `VulkanSamples API-Samples` demo apps and add 
   `input_attachment` and `push_descriptors` demos.
-- `vkQueuePresentKHR()` returns a `VkResult` for each swapchain.
+- Add `MVK_CONFIG_AUTO_GPU_CAPTURE_OUTPUT_FILE` environment variable 
+  to support capturing GPU traces to a file.
 - Consolidate frame and non-frame performance reporting.
 	- Remove `vkGetSwapchainPerformanceMVK()` from API.
 	- Swapchain performance can be retrieved with other activity performance 
 	  through `vkGetPerformanceStatisticsMVK()`.
 	- Add `MVK_CONFIG_PERFORMANCE_LOGGING_INLINE` env var to enable/disable
 	  logging of performance of each activity when it happens. 
-- Fix crash when more than two GPUs.
+	- Reduce thread locking on performance statistics collection.
+- Numerous documentation typo corrections.
 - Support Xcode 11.5.
+- Update dependency libraries to match *Vulkan SDK 1.2.141*.
+- Update to latest SPIRV-Cross version:
+	- MSL: mark `BuiltInFragCoord` as implicitly used for subpass reads.
+	- MSL: Deal with cases where builtin is implicitly needed, declared, but unused.
+	- MSL: Do not use base expression with PhysicalTypeID `OpCompositeExtract`.
+	- MSL: Add options to control emission of fragment outputs.
+	- MSL: Force disabled fragment builtins to have the right name.
+	- MSL: Allow removing clip distance user varyings.
+	- MSL: Support edge case with DX layout in scalar block layout.
+	- MSL: Deal correctly with initializers on Private variables.
+	- MSL: Fix case where `subpassInput` is passed to leaf functions.
+	- MSL: Redirect member indices when buffer has been sorted by Offset.
+	- MSL: If the packed type is scalar, don't emit "pack_" prefix.
+	- MSL: Avoid packed arrays in more cases.
+	- Do not add NonWritable/NonReadable decorations for regular images.
+	- Expose a query if samplers or images are comparison resources.
 
 
 
diff --git a/ExternalDependencies.xcodeproj/project.pbxproj b/ExternalDependencies.xcodeproj/project.pbxproj
index 1b0f51c..578b93f 100644
--- a/ExternalDependencies.xcodeproj/project.pbxproj
+++ b/ExternalDependencies.xcodeproj/project.pbxproj
@@ -54,776 +54,6 @@
 		450A4F66221C5A95007203D7 /* spirv_reflect.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 450A4F63221C5A95007203D7 /* spirv_reflect.hpp */; };
 		450A4F67221C5A95007203D7 /* spirv_reflect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 450A4F64221C5A95007203D7 /* spirv_reflect.cpp */; };
 		450A4F68221C5A95007203D7 /* spirv_reflect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 450A4F64221C5A95007203D7 /* spirv_reflect.cpp */; };
-		A9415A87243667F700566F16 /* spirv_target_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941583F243667F600566F16 /* spirv_target_env.cpp */; };
-		A9415A88243667F700566F16 /* spirv_target_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941583F243667F600566F16 /* spirv_target_env.cpp */; };
-		A9415A89243667F700566F16 /* spirv_fuzzer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415841243667F600566F16 /* spirv_fuzzer_options.h */; };
-		A9415A8A243667F700566F16 /* spirv_fuzzer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415841243667F600566F16 /* spirv_fuzzer_options.h */; };
-		A9415A8B243667F700566F16 /* assembly_grammar.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415842243667F600566F16 /* assembly_grammar.h */; };
-		A9415A8C243667F700566F16 /* assembly_grammar.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415842243667F600566F16 /* assembly_grammar.h */; };
-		A9415A8D243667F700566F16 /* enum_set.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415843243667F600566F16 /* enum_set.h */; };
-		A9415A8E243667F700566F16 /* enum_set.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415843243667F600566F16 /* enum_set.h */; };
-		A9415A8F243667F700566F16 /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415846243667F600566F16 /* text.cpp */; };
-		A9415A90243667F700566F16 /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415846243667F600566F16 /* text.cpp */; };
-		A9415A91243667F700566F16 /* assembly_grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415847243667F600566F16 /* assembly_grammar.cpp */; };
-		A9415A92243667F700566F16 /* assembly_grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415847243667F600566F16 /* assembly_grammar.cpp */; };
-		A9415A93243667F700566F16 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415848243667F600566F16 /* text.h */; };
-		A9415A94243667F700566F16 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415848243667F600566F16 /* text.h */; };
-		A9415A95243667F700566F16 /* extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415849243667F600566F16 /* extensions.cpp */; };
-		A9415A96243667F700566F16 /* extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415849243667F600566F16 /* extensions.cpp */; };
-		A9415A97243667F700566F16 /* pch_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941584A243667F600566F16 /* pch_source.cpp */; };
-		A9415A98243667F700566F16 /* pch_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941584A243667F600566F16 /* pch_source.cpp */; };
-		A9415A99243667F700566F16 /* parse_number.h in Headers */ = {isa = PBXBuildFile; fileRef = A941584C243667F600566F16 /* parse_number.h */; };
-		A9415A9A243667F700566F16 /* parse_number.h in Headers */ = {isa = PBXBuildFile; fileRef = A941584C243667F600566F16 /* parse_number.h */; };
-		A9415A9B243667F700566F16 /* ilist_node.h in Headers */ = {isa = PBXBuildFile; fileRef = A941584D243667F600566F16 /* ilist_node.h */; };
-		A9415A9C243667F700566F16 /* ilist_node.h in Headers */ = {isa = PBXBuildFile; fileRef = A941584D243667F600566F16 /* ilist_node.h */; };
-		A9415A9D243667F700566F16 /* make_unique.h in Headers */ = {isa = PBXBuildFile; fileRef = A941584E243667F600566F16 /* make_unique.h */; };
-		A9415A9E243667F700566F16 /* make_unique.h in Headers */ = {isa = PBXBuildFile; fileRef = A941584E243667F600566F16 /* make_unique.h */; };
-		A9415A9F243667F700566F16 /* string_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A941584F243667F600566F16 /* string_utils.h */; };
-		A9415AA0243667F700566F16 /* string_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A941584F243667F600566F16 /* string_utils.h */; };
-		A9415AA1243667F700566F16 /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415850243667F600566F16 /* small_vector.h */; };
-		A9415AA2243667F700566F16 /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415850243667F600566F16 /* small_vector.h */; };
-		A9415AA3243667F700566F16 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415851243667F600566F16 /* timer.cpp */; };
-		A9415AA4243667F700566F16 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415851243667F600566F16 /* timer.cpp */; };
-		A9415AA5243667F700566F16 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415852243667F600566F16 /* timer.h */; };
-		A9415AA6243667F700566F16 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415852243667F600566F16 /* timer.h */; };
-		A9415AA7243667F700566F16 /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415853243667F600566F16 /* string_utils.cpp */; };
-		A9415AA8243667F700566F16 /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415853243667F600566F16 /* string_utils.cpp */; };
-		A9415AA9243667F700566F16 /* bit_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415854243667F600566F16 /* bit_vector.h */; };
-		A9415AAA243667F700566F16 /* bit_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415854243667F600566F16 /* bit_vector.h */; };
-		A9415AAB243667F700566F16 /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415855243667F600566F16 /* bitutils.h */; };
-		A9415AAC243667F700566F16 /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415855243667F600566F16 /* bitutils.h */; };
-		A9415AAD243667F700566F16 /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415856243667F600566F16 /* hex_float.h */; };
-		A9415AAE243667F700566F16 /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415856243667F600566F16 /* hex_float.h */; };
-		A9415AAF243667F700566F16 /* parse_number.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415857243667F600566F16 /* parse_number.cpp */; };
-		A9415AB0243667F700566F16 /* parse_number.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415857243667F600566F16 /* parse_number.cpp */; };
-		A9415AB1243667F700566F16 /* bit_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415858243667F600566F16 /* bit_vector.cpp */; };
-		A9415AB2243667F700566F16 /* bit_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415858243667F600566F16 /* bit_vector.cpp */; };
-		A9415AB3243667F700566F16 /* ilist.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415859243667F600566F16 /* ilist.h */; };
-		A9415AB4243667F700566F16 /* ilist.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415859243667F600566F16 /* ilist.h */; };
-		A9415AB5243667F700566F16 /* spirv_target_env.h in Headers */ = {isa = PBXBuildFile; fileRef = A941585A243667F600566F16 /* spirv_target_env.h */; };
-		A9415AB6243667F700566F16 /* spirv_target_env.h in Headers */ = {isa = PBXBuildFile; fileRef = A941585A243667F600566F16 /* spirv_target_env.h */; };
-		A9415AB7243667F700566F16 /* table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941585B243667F600566F16 /* table.cpp */; };
-		A9415AB8243667F700566F16 /* table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941585B243667F600566F16 /* table.cpp */; };
-		A9415AB9243667F700566F16 /* operand_to_undef_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A941585E243667F600566F16 /* operand_to_undef_reduction_opportunity_finder.h */; };
-		A9415ABA243667F700566F16 /* operand_to_undef_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A941585E243667F600566F16 /* operand_to_undef_reduction_opportunity_finder.h */; };
-		A9415ABB243667F700566F16 /* remove_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941585F243667F600566F16 /* remove_selection_reduction_opportunity.cpp */; };
-		A9415ABC243667F700566F16 /* remove_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941585F243667F600566F16 /* remove_selection_reduction_opportunity.cpp */; };
-		A9415ABD243667F700566F16 /* remove_block_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415860243667F600566F16 /* remove_block_reduction_opportunity.h */; };
-		A9415ABE243667F700566F16 /* remove_block_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415860243667F600566F16 /* remove_block_reduction_opportunity.h */; };
-		A9415ABF243667F700566F16 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415861243667F600566F16 /* operand_to_dominating_id_reduction_opportunity_finder.h */; };
-		A9415AC0243667F700566F16 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415861243667F600566F16 /* operand_to_dominating_id_reduction_opportunity_finder.h */; };
-		A9415AC1243667F700566F16 /* reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415862243667F600566F16 /* reduction_pass.cpp */; };
-		A9415AC2243667F700566F16 /* reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415862243667F600566F16 /* reduction_pass.cpp */; };
-		A9415AC3243667F700566F16 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415863243667F600566F16 /* operand_to_const_reduction_opportunity_finder.cpp */; };
-		A9415AC4243667F700566F16 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415863243667F600566F16 /* operand_to_const_reduction_opportunity_finder.cpp */; };
-		A9415AC5243667F700566F16 /* operand_to_const_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415864243667F600566F16 /* operand_to_const_reduction_opportunity_finder.h */; };
-		A9415AC6243667F700566F16 /* operand_to_const_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415864243667F600566F16 /* operand_to_const_reduction_opportunity_finder.h */; };
-		A9415AC7243667F700566F16 /* reduction_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415866243667F600566F16 /* reduction_util.cpp */; };
-		A9415AC8243667F700566F16 /* reduction_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415866243667F600566F16 /* reduction_util.cpp */; };
-		A9415AC9243667F700566F16 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415867243667F600566F16 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */; };
-		A9415ACA243667F700566F16 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415867243667F600566F16 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */; };
-		A9415ACB243667F700566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415868243667F600566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.h */; };
-		A9415ACC243667F700566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415868243667F600566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.h */; };
-		A9415ACD243667F700566F16 /* remove_function_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415869243667F600566F16 /* remove_function_reduction_opportunity_finder.cpp */; };
-		A9415ACE243667F700566F16 /* remove_function_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415869243667F600566F16 /* remove_function_reduction_opportunity_finder.cpp */; };
-		A9415ACF243667F700566F16 /* remove_instruction_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A941586A243667F600566F16 /* remove_instruction_reduction_opportunity.h */; };
-		A9415AD0243667F700566F16 /* remove_instruction_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A941586A243667F600566F16 /* remove_instruction_reduction_opportunity.h */; };
-		A9415AD1243667F700566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A941586B243667F600566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */; };
-		A9415AD2243667F700566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A941586B243667F600566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */; };
-		A9415AD3243667F700566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941586C243667F600566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */; };
-		A9415AD4243667F700566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941586C243667F600566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */; };
-		A9415AD5243667F700566F16 /* remove_function_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941586D243667F600566F16 /* remove_function_reduction_opportunity.cpp */; };
-		A9415AD6243667F700566F16 /* remove_function_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941586D243667F600566F16 /* remove_function_reduction_opportunity.cpp */; };
-		A9415AD7243667F700566F16 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941586E243667F600566F16 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */; };
-		A9415AD8243667F700566F16 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941586E243667F600566F16 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */; };
-		A9415AD9243667F700566F16 /* remove_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941586F243667F600566F16 /* remove_selection_reduction_opportunity_finder.cpp */; };
-		A9415ADA243667F700566F16 /* remove_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941586F243667F600566F16 /* remove_selection_reduction_opportunity_finder.cpp */; };
-		A9415ADB243667F700566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415870243667F600566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */; };
-		A9415ADC243667F700566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415870243667F600566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */; };
-		A9415ADD243667F700566F16 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415871243667F600566F16 /* simple_conditional_branch_to_branch_opportunity_finder.h */; };
-		A9415ADE243667F700566F16 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415871243667F600566F16 /* simple_conditional_branch_to_branch_opportunity_finder.h */; };
-		A9415ADF243667F700566F16 /* merge_blocks_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415872243667F600566F16 /* merge_blocks_reduction_opportunity.cpp */; };
-		A9415AE0243667F700566F16 /* merge_blocks_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415872243667F600566F16 /* merge_blocks_reduction_opportunity.cpp */; };
-		A9415AE1243667F700566F16 /* change_operand_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415873243667F600566F16 /* change_operand_reduction_opportunity.cpp */; };
-		A9415AE2243667F700566F16 /* change_operand_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415873243667F600566F16 /* change_operand_reduction_opportunity.cpp */; };
-		A9415AE3243667F700566F16 /* structured_loop_to_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415874243667F600566F16 /* structured_loop_to_selection_reduction_opportunity.h */; };
-		A9415AE4243667F700566F16 /* structured_loop_to_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415874243667F600566F16 /* structured_loop_to_selection_reduction_opportunity.h */; };
-		A9415AE5243667F700566F16 /* remove_function_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415875243667F600566F16 /* remove_function_reduction_opportunity.h */; };
-		A9415AE6243667F700566F16 /* remove_function_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415875243667F600566F16 /* remove_function_reduction_opportunity.h */; };
-		A9415AE7243667F700566F16 /* change_operand_to_undef_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415876243667F600566F16 /* change_operand_to_undef_reduction_opportunity.h */; };
-		A9415AE8243667F700566F16 /* change_operand_to_undef_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415876243667F600566F16 /* change_operand_to_undef_reduction_opportunity.h */; };
-		A9415AE9243667F700566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415877243667F600566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */; };
-		A9415AEA243667F700566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415877243667F600566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */; };
-		A9415AEB243667F700566F16 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415878243667F600566F16 /* structured_loop_to_selection_reduction_opportunity_finder.h */; };
-		A9415AEC243667F700566F16 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415878243667F600566F16 /* structured_loop_to_selection_reduction_opportunity_finder.h */; };
-		A9415AED243667F700566F16 /* remove_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415879243667F600566F16 /* remove_selection_reduction_opportunity.h */; };
-		A9415AEE243667F700566F16 /* remove_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415879243667F600566F16 /* remove_selection_reduction_opportunity.h */; };
-		A9415AEF243667F700566F16 /* remove_instruction_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941587A243667F600566F16 /* remove_instruction_reduction_opportunity.cpp */; };
-		A9415AF0243667F700566F16 /* remove_instruction_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941587A243667F600566F16 /* remove_instruction_reduction_opportunity.cpp */; };
-		A9415AF1243667F700566F16 /* remove_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A941587B243667F600566F16 /* remove_selection_reduction_opportunity_finder.h */; };
-		A9415AF2243667F700566F16 /* remove_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A941587B243667F600566F16 /* remove_selection_reduction_opportunity_finder.h */; };
-		A9415AF3243667F700566F16 /* merge_blocks_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A941587C243667F600566F16 /* merge_blocks_reduction_opportunity_finder.h */; };
-		A9415AF4243667F700566F16 /* merge_blocks_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A941587C243667F600566F16 /* merge_blocks_reduction_opportunity_finder.h */; };
-		A9415AF5243667F700566F16 /* pch_source_reduce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941587D243667F600566F16 /* pch_source_reduce.cpp */; };
-		A9415AF6243667F700566F16 /* pch_source_reduce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941587D243667F600566F16 /* pch_source_reduce.cpp */; };
-		A9415AF7243667F700566F16 /* reducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941587E243667F600566F16 /* reducer.cpp */; };
-		A9415AF8243667F700566F16 /* reducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941587E243667F600566F16 /* reducer.cpp */; };
-		A9415AF9243667F700566F16 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941587F243667F600566F16 /* operand_to_undef_reduction_opportunity_finder.cpp */; };
-		A9415AFA243667F700566F16 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941587F243667F600566F16 /* operand_to_undef_reduction_opportunity_finder.cpp */; };
-		A9415AFB243667F700566F16 /* remove_function_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415880243667F600566F16 /* remove_function_reduction_opportunity_finder.h */; };
-		A9415AFC243667F700566F16 /* remove_function_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415880243667F600566F16 /* remove_function_reduction_opportunity_finder.h */; };
-		A9415AFD243667F700566F16 /* pch_source_reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415881243667F600566F16 /* pch_source_reduce.h */; };
-		A9415AFE243667F700566F16 /* pch_source_reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415881243667F600566F16 /* pch_source_reduce.h */; };
-		A9415AFF243667F700566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415882243667F600566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.h */; };
-		A9415B00243667F700566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415882243667F600566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.h */; };
-		A9415B01243667F700566F16 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415883243667F600566F16 /* merge_blocks_reduction_opportunity_finder.cpp */; };
-		A9415B02243667F700566F16 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415883243667F600566F16 /* merge_blocks_reduction_opportunity_finder.cpp */; };
-		A9415B03243667F700566F16 /* reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415884243667F600566F16 /* reduction_opportunity.cpp */; };
-		A9415B04243667F700566F16 /* reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415884243667F600566F16 /* reduction_opportunity.cpp */; };
-		A9415B05243667F700566F16 /* reducer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415885243667F600566F16 /* reducer.h */; };
-		A9415B06243667F700566F16 /* reducer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415885243667F600566F16 /* reducer.h */; };
-		A9415B07243667F700566F16 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415886243667F600566F16 /* change_operand_to_undef_reduction_opportunity.cpp */; };
-		A9415B08243667F700566F16 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415886243667F600566F16 /* change_operand_to_undef_reduction_opportunity.cpp */; };
-		A9415B09243667F700566F16 /* reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415887243667F600566F16 /* reduction_opportunity.h */; };
-		A9415B0A243667F700566F16 /* reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415887243667F600566F16 /* reduction_opportunity.h */; };
-		A9415B0B243667F700566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415888243667F600566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */; };
-		A9415B0C243667F700566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415888243667F600566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */; };
-		A9415B0D243667F700566F16 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415889243667F600566F16 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */; };
-		A9415B0E243667F700566F16 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415889243667F600566F16 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */; };
-		A9415B0F243667F700566F16 /* reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A941588A243667F600566F16 /* reduction_opportunity_finder.h */; };
-		A9415B10243667F700566F16 /* reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A941588A243667F600566F16 /* reduction_opportunity_finder.h */; };
-		A9415B11243667F700566F16 /* change_operand_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A941588B243667F600566F16 /* change_operand_reduction_opportunity.h */; };
-		A9415B12243667F700566F16 /* change_operand_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A941588B243667F600566F16 /* change_operand_reduction_opportunity.h */; };
-		A9415B13243667F700566F16 /* remove_block_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A941588C243667F600566F16 /* remove_block_reduction_opportunity_finder.h */; };
-		A9415B14243667F700566F16 /* remove_block_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A941588C243667F600566F16 /* remove_block_reduction_opportunity_finder.h */; };
-		A9415B15243667F700566F16 /* remove_block_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941588D243667F600566F16 /* remove_block_reduction_opportunity_finder.cpp */; };
-		A9415B16243667F700566F16 /* remove_block_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941588D243667F600566F16 /* remove_block_reduction_opportunity_finder.cpp */; };
-		A9415B17243667F700566F16 /* reduction_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A941588E243667F600566F16 /* reduction_util.h */; };
-		A9415B18243667F700566F16 /* reduction_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A941588E243667F600566F16 /* reduction_util.h */; };
-		A9415B19243667F700566F16 /* merge_blocks_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A941588F243667F600566F16 /* merge_blocks_reduction_opportunity.h */; };
-		A9415B1A243667F700566F16 /* merge_blocks_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A941588F243667F600566F16 /* merge_blocks_reduction_opportunity.h */; };
-		A9415B1B243667F700566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415890243667F600566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */; };
-		A9415B1C243667F700566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415890243667F600566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */; };
-		A9415B1D243667F700566F16 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415891243667F600566F16 /* structured_loop_to_selection_reduction_opportunity.cpp */; };
-		A9415B1E243667F700566F16 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415891243667F600566F16 /* structured_loop_to_selection_reduction_opportunity.cpp */; };
-		A9415B1F243667F700566F16 /* remove_block_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415892243667F600566F16 /* remove_block_reduction_opportunity.cpp */; };
-		A9415B20243667F700566F16 /* remove_block_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415892243667F600566F16 /* remove_block_reduction_opportunity.cpp */; };
-		A9415B21243667F700566F16 /* reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415893243667F600566F16 /* reduction_pass.h */; };
-		A9415B22243667F700566F16 /* reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415893243667F600566F16 /* reduction_pass.h */; };
-		A9415B23243667F700566F16 /* latest_version_opencl_std_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415894243667F600566F16 /* latest_version_opencl_std_header.h */; };
-		A9415B24243667F700566F16 /* latest_version_opencl_std_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415894243667F600566F16 /* latest_version_opencl_std_header.h */; };
-		A9415B25243667F700566F16 /* spirv_optimizer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415895243667F600566F16 /* spirv_optimizer_options.cpp */; };
-		A9415B26243667F700566F16 /* spirv_optimizer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415895243667F600566F16 /* spirv_optimizer_options.cpp */; };
-		A9415B27243667F700566F16 /* cfa.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415896243667F600566F16 /* cfa.h */; };
-		A9415B28243667F800566F16 /* cfa.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415896243667F600566F16 /* cfa.h */; };
-		A9415B29243667F800566F16 /* pch_source.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415897243667F600566F16 /* pch_source.h */; };
-		A9415B2A243667F800566F16 /* pch_source.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415897243667F600566F16 /* pch_source.h */; };
-		A9415B2B243667F800566F16 /* enum_string_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415898243667F600566F16 /* enum_string_mapping.h */; };
-		A9415B2C243667F800566F16 /* enum_string_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415898243667F600566F16 /* enum_string_mapping.h */; };
-		A9415B2D243667F800566F16 /* spirv_fuzzer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415899243667F600566F16 /* spirv_fuzzer_options.cpp */; };
-		A9415B2E243667F800566F16 /* spirv_fuzzer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415899243667F600566F16 /* spirv_fuzzer_options.cpp */; };
-		A9415B2F243667F800566F16 /* spirv_reducer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A941589A243667F600566F16 /* spirv_reducer_options.h */; };
-		A9415B30243667F800566F16 /* spirv_reducer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A941589A243667F600566F16 /* spirv_reducer_options.h */; };
-		A9415B31243667F800566F16 /* spirv_validator_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941589B243667F600566F16 /* spirv_validator_options.cpp */; };
-		A9415B32243667F800566F16 /* spirv_validator_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941589B243667F600566F16 /* spirv_validator_options.cpp */; };
-		A9415B33243667F800566F16 /* print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941589D243667F600566F16 /* print.cpp */; };
-		A9415B34243667F800566F16 /* print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941589D243667F600566F16 /* print.cpp */; };
-		A9415B35243667F800566F16 /* spirv_definition.h in Headers */ = {isa = PBXBuildFile; fileRef = A941589E243667F600566F16 /* spirv_definition.h */; };
-		A9415B36243667F800566F16 /* spirv_definition.h in Headers */ = {isa = PBXBuildFile; fileRef = A941589E243667F600566F16 /* spirv_definition.h */; };
-		A9415B37243667F800566F16 /* operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A941589F243667F600566F16 /* operand.h */; };
-		A9415B38243667F800566F16 /* operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A941589F243667F600566F16 /* operand.h */; };
-		A9415B39243667F800566F16 /* spirv_endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158A0243667F600566F16 /* spirv_endian.cpp */; };
-		A9415B3A243667F800566F16 /* spirv_endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158A0243667F600566F16 /* spirv_endian.cpp */; };
-		A9415B3B243667F800566F16 /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158A1243667F600566F16 /* macro.h */; };
-		A9415B3C243667F800566F16 /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158A1243667F600566F16 /* macro.h */; };
-		A9415B3D243667F800566F16 /* spirv_constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158A2243667F600566F16 /* spirv_constant.h */; };
-		A9415B3E243667F800566F16 /* spirv_constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158A2243667F600566F16 /* spirv_constant.h */; };
-		A9415B3F243667F800566F16 /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158A4243667F600566F16 /* binary.cpp */; };
-		A9415B40243667F800566F16 /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158A4243667F600566F16 /* binary.cpp */; };
-		A9415B41243667F800566F16 /* spirv_validator_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158A5243667F600566F16 /* spirv_validator_options.h */; };
-		A9415B42243667F800566F16 /* spirv_validator_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158A5243667F600566F16 /* spirv_validator_options.h */; };
-		A9415B43243667F800566F16 /* enum_string_mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158A6243667F600566F16 /* enum_string_mapping.cpp */; };
-		A9415B44243667F800566F16 /* enum_string_mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158A6243667F600566F16 /* enum_string_mapping.cpp */; };
-		A9415B45243667F800566F16 /* text_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158A7243667F600566F16 /* text_handler.h */; };
-		A9415B46243667F800566F16 /* text_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158A7243667F600566F16 /* text_handler.h */; };
-		A9415B47243667F800566F16 /* parsed_operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158A8243667F600566F16 /* parsed_operand.h */; };
-		A9415B48243667F800566F16 /* parsed_operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158A8243667F600566F16 /* parsed_operand.h */; };
-		A9415B49243667F800566F16 /* name_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158A9243667F600566F16 /* name_mapper.h */; };
-		A9415B4A243667F800566F16 /* name_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158A9243667F600566F16 /* name_mapper.h */; };
-		A9415B4B243667F800566F16 /* spirv_reducer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158AA243667F600566F16 /* spirv_reducer_options.cpp */; };
-		A9415B4C243667F800566F16 /* spirv_reducer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158AA243667F600566F16 /* spirv_reducer_options.cpp */; };
-		A9415B4D243667F800566F16 /* parsed_operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158AB243667F600566F16 /* parsed_operand.cpp */; };
-		A9415B4E243667F800566F16 /* parsed_operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158AB243667F600566F16 /* parsed_operand.cpp */; };
-		A9415B4F243667F800566F16 /* diagnostic.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158AC243667F600566F16 /* diagnostic.h */; };
-		A9415B50243667F800566F16 /* diagnostic.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158AC243667F600566F16 /* diagnostic.h */; };
-		A9415B51243667F800566F16 /* spirv_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158AD243667F600566F16 /* spirv_endian.h */; };
-		A9415B52243667F800566F16 /* spirv_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158AD243667F600566F16 /* spirv_endian.h */; };
-		A9415B53243667F800566F16 /* name_mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158AE243667F600566F16 /* name_mapper.cpp */; };
-		A9415B54243667F800566F16 /* name_mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158AE243667F600566F16 /* name_mapper.cpp */; };
-		A9415B55243667F800566F16 /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158B2243667F600566F16 /* linker.cpp */; };
-		A9415B56243667F800566F16 /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158B2243667F600566F16 /* linker.cpp */; };
-		A9415B57243667F800566F16 /* software_version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158B3243667F600566F16 /* software_version.cpp */; };
-		A9415B58243667F800566F16 /* software_version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158B3243667F600566F16 /* software_version.cpp */; };
-		A9415B59243667F800566F16 /* opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158B4243667F600566F16 /* opcode.cpp */; };
-		A9415B5A243667F800566F16 /* opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158B4243667F600566F16 /* opcode.cpp */; };
-		A9415B5B243667F800566F16 /* print.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158B5243667F600566F16 /* print.h */; };
-		A9415B5C243667F800566F16 /* print.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158B5243667F600566F16 /* print.h */; };
-		A9415B5D243667F800566F16 /* ext_inst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158B6243667F600566F16 /* ext_inst.cpp */; };
-		A9415B5E243667F800566F16 /* ext_inst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158B6243667F600566F16 /* ext_inst.cpp */; };
-		A9415B5F243667F800566F16 /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158B7243667F600566F16 /* disassemble.h */; };
-		A9415B60243667F800566F16 /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158B7243667F600566F16 /* disassemble.h */; };
-		A9415B61243667F800566F16 /* optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158B9243667F600566F16 /* optimizer.cpp */; };
-		A9415B62243667F800566F16 /* optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158B9243667F600566F16 /* optimizer.cpp */; };
-		A9415B63243667F800566F16 /* if_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158BA243667F600566F16 /* if_conversion.h */; };
-		A9415B64243667F800566F16 /* if_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158BA243667F600566F16 /* if_conversion.h */; };
-		A9415B65243667F800566F16 /* register_pressure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158BB243667F600566F16 /* register_pressure.cpp */; };
-		A9415B66243667F800566F16 /* register_pressure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158BB243667F600566F16 /* register_pressure.cpp */; };
-		A9415B67243667F800566F16 /* loop_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158BC243667F600566F16 /* loop_utils.cpp */; };
-		A9415B68243667F800566F16 /* loop_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158BC243667F600566F16 /* loop_utils.cpp */; };
-		A9415B69243667F800566F16 /* merge_return_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158BD243667F600566F16 /* merge_return_pass.h */; };
-		A9415B6A243667F800566F16 /* merge_return_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158BD243667F600566F16 /* merge_return_pass.h */; };
-		A9415B6B243667F800566F16 /* inline_opaque_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158BE243667F600566F16 /* inline_opaque_pass.h */; };
-		A9415B6C243667F800566F16 /* inline_opaque_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158BE243667F600566F16 /* inline_opaque_pass.h */; };
-		A9415B6D243667F800566F16 /* loop_fusion.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158BF243667F600566F16 /* loop_fusion.h */; };
-		A9415B6E243667F800566F16 /* loop_fusion.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158BF243667F600566F16 /* loop_fusion.h */; };
-		A9415B6F243667F800566F16 /* combine_access_chains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158C0243667F600566F16 /* combine_access_chains.cpp */; };
-		A9415B70243667F800566F16 /* combine_access_chains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158C0243667F600566F16 /* combine_access_chains.cpp */; };
-		A9415B71243667F800566F16 /* build_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158C1243667F600566F16 /* build_module.cpp */; };
-		A9415B72243667F800566F16 /* build_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158C1243667F600566F16 /* build_module.cpp */; };
-		A9415B73243667F800566F16 /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C2243667F600566F16 /* composite.h */; };
-		A9415B74243667F800566F16 /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C2243667F600566F16 /* composite.h */; };
-		A9415B75243667F800566F16 /* compact_ids_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C3243667F600566F16 /* compact_ids_pass.h */; };
-		A9415B76243667F800566F16 /* compact_ids_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C3243667F600566F16 /* compact_ids_pass.h */; };
-		A9415B77243667F800566F16 /* register_pressure.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C4243667F600566F16 /* register_pressure.h */; };
-		A9415B78243667F800566F16 /* register_pressure.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C4243667F600566F16 /* register_pressure.h */; };
-		A9415B79243667F800566F16 /* tree_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C5243667F600566F16 /* tree_iterator.h */; };
-		A9415B7A243667F800566F16 /* tree_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C5243667F600566F16 /* tree_iterator.h */; };
-		A9415B7B243667F800566F16 /* graphics_robust_access_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C6243667F600566F16 /* graphics_robust_access_pass.h */; };
-		A9415B7C243667F800566F16 /* graphics_robust_access_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C6243667F600566F16 /* graphics_robust_access_pass.h */; };
-		A9415B7D243667F800566F16 /* strip_atomic_counter_memory_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C7243667F600566F16 /* strip_atomic_counter_memory_pass.h */; };
-		A9415B7E243667F800566F16 /* strip_atomic_counter_memory_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C7243667F600566F16 /* strip_atomic_counter_memory_pass.h */; };
-		A9415B7F243667F800566F16 /* legalize_vector_shuffle_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C8243667F600566F16 /* legalize_vector_shuffle_pass.h */; };
-		A9415B80243667F800566F16 /* legalize_vector_shuffle_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C8243667F600566F16 /* legalize_vector_shuffle_pass.h */; };
-		A9415B81243667F800566F16 /* local_single_store_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C9243667F600566F16 /* local_single_store_elim_pass.h */; };
-		A9415B82243667F800566F16 /* local_single_store_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158C9243667F600566F16 /* local_single_store_elim_pass.h */; };
-		A9415B83243667F800566F16 /* reduce_load_size.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158CA243667F600566F16 /* reduce_load_size.h */; };
-		A9415B84243667F800566F16 /* reduce_load_size.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158CA243667F600566F16 /* reduce_load_size.h */; };
-		A9415B85243667F800566F16 /* code_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158CB243667F600566F16 /* code_sink.cpp */; };
-		A9415B86243667F800566F16 /* code_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158CB243667F600566F16 /* code_sink.cpp */; };
-		A9415B87243667F800566F16 /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158CC243667F600566F16 /* types.cpp */; };
-		A9415B88243667F800566F16 /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158CC243667F600566F16 /* types.cpp */; };
-		A9415B89243667F800566F16 /* scalar_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158CD243667F600566F16 /* scalar_analysis.h */; };
-		A9415B8A243667F800566F16 /* scalar_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158CD243667F600566F16 /* scalar_analysis.h */; };
-		A9415B8B243667F800566F16 /* strip_debug_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158CE243667F600566F16 /* strip_debug_info_pass.h */; };
-		A9415B8C243667F800566F16 /* strip_debug_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158CE243667F600566F16 /* strip_debug_info_pass.h */; };
-		A9415B8D243667F800566F16 /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158CF243667F600566F16 /* cfg.cpp */; };
-		A9415B8E243667F800566F16 /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158CF243667F600566F16 /* cfg.cpp */; };
-		A9415B8F243667F800566F16 /* strip_atomic_counter_memory_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D0243667F600566F16 /* strip_atomic_counter_memory_pass.cpp */; };
-		A9415B90243667F800566F16 /* strip_atomic_counter_memory_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D0243667F600566F16 /* strip_atomic_counter_memory_pass.cpp */; };
-		A9415B91243667F800566F16 /* decoration_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D1243667F600566F16 /* decoration_manager.cpp */; };
-		A9415B92243667F800566F16 /* decoration_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D1243667F600566F16 /* decoration_manager.cpp */; };
-		A9415B93243667F800566F16 /* local_single_block_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D2243667F600566F16 /* local_single_block_elim_pass.cpp */; };
-		A9415B94243667F800566F16 /* local_single_block_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D2243667F600566F16 /* local_single_block_elim_pass.cpp */; };
-		A9415B95243667F800566F16 /* freeze_spec_constant_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D3243667F600566F16 /* freeze_spec_constant_value_pass.cpp */; };
-		A9415B96243667F800566F16 /* freeze_spec_constant_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D3243667F600566F16 /* freeze_spec_constant_value_pass.cpp */; };
-		A9415B97243667F800566F16 /* replace_invalid_opc.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158D4243667F600566F16 /* replace_invalid_opc.h */; };
-		A9415B98243667F800566F16 /* replace_invalid_opc.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158D4243667F600566F16 /* replace_invalid_opc.h */; };
-		A9415B99243667F800566F16 /* local_access_chain_convert_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158D5243667F600566F16 /* local_access_chain_convert_pass.h */; };
-		A9415B9A243667F800566F16 /* local_access_chain_convert_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158D5243667F600566F16 /* local_access_chain_convert_pass.h */; };
-		A9415B9B243667F800566F16 /* inst_bindless_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D6243667F600566F16 /* inst_bindless_check_pass.cpp */; };
-		A9415B9C243667F800566F16 /* inst_bindless_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D6243667F600566F16 /* inst_bindless_check_pass.cpp */; };
-		A9415B9D243667F800566F16 /* local_redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D7243667F600566F16 /* local_redundancy_elimination.cpp */; };
-		A9415B9E243667F800566F16 /* local_redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D7243667F600566F16 /* local_redundancy_elimination.cpp */; };
-		A9415B9F243667F800566F16 /* instrument_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D9243667F600566F16 /* instrument_pass.cpp */; };
-		A9415BA0243667F800566F16 /* instrument_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158D9243667F600566F16 /* instrument_pass.cpp */; };
-		A9415BA1243667F800566F16 /* propagator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158DA243667F600566F16 /* propagator.h */; };
-		A9415BA2243667F800566F16 /* propagator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158DA243667F600566F16 /* propagator.h */; };
-		A9415BA3243667F800566F16 /* instruction_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158DB243667F600566F16 /* instruction_list.h */; };
-		A9415BA4243667F800566F16 /* instruction_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158DB243667F600566F16 /* instruction_list.h */; };
-		A9415BA5243667F800566F16 /* feature_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158DC243667F600566F16 /* feature_manager.cpp */; };
-		A9415BA6243667F800566F16 /* feature_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158DC243667F600566F16 /* feature_manager.cpp */; };
-		A9415BA7243667F800566F16 /* pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158DD243667F600566F16 /* pass.cpp */; };
-		A9415BA8243667F800566F16 /* pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158DD243667F600566F16 /* pass.cpp */; };
-		A9415BA9243667F800566F16 /* loop_fission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158DE243667F600566F16 /* loop_fission.cpp */; };
-		A9415BAA243667F800566F16 /* loop_fission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158DE243667F600566F16 /* loop_fission.cpp */; };
-		A9415BAB243667F800566F16 /* dominator_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158DF243667F600566F16 /* dominator_tree.cpp */; };
-		A9415BAC243667F800566F16 /* dominator_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158DF243667F600566F16 /* dominator_tree.cpp */; };
-		A9415BAD243667F800566F16 /* amd_ext_to_khr.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158E0243667F600566F16 /* amd_ext_to_khr.h */; };
-		A9415BAE243667F800566F16 /* amd_ext_to_khr.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158E0243667F600566F16 /* amd_ext_to_khr.h */; };
-		A9415BAF243667F800566F16 /* merge_return_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E1243667F600566F16 /* merge_return_pass.cpp */; };
-		A9415BB0243667F800566F16 /* merge_return_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E1243667F600566F16 /* merge_return_pass.cpp */; };
-		A9415BB1243667F800566F16 /* ir_context.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158E2243667F600566F16 /* ir_context.h */; };
-		A9415BB2243667F800566F16 /* ir_context.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158E2243667F600566F16 /* ir_context.h */; };
-		A9415BB3243667F800566F16 /* eliminate_dead_constant_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E3243667F600566F16 /* eliminate_dead_constant_pass.cpp */; };
-		A9415BB4243667F800566F16 /* eliminate_dead_constant_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E3243667F600566F16 /* eliminate_dead_constant_pass.cpp */; };
-		A9415BB5243667F800566F16 /* cfg_cleanup_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E4243667F600566F16 /* cfg_cleanup_pass.cpp */; };
-		A9415BB6243667F800566F16 /* cfg_cleanup_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E4243667F600566F16 /* cfg_cleanup_pass.cpp */; };
-		A9415BB7243667F800566F16 /* wrap_opkill.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E5243667F600566F16 /* wrap_opkill.cpp */; };
-		A9415BB8243667F800566F16 /* wrap_opkill.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E5243667F600566F16 /* wrap_opkill.cpp */; };
-		A9415BB9243667F800566F16 /* const_folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E6243667F600566F16 /* const_folding_rules.cpp */; };
-		A9415BBA243667F800566F16 /* const_folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E6243667F600566F16 /* const_folding_rules.cpp */; };
-		A9415BBB243667F800566F16 /* loop_unroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158E7243667F600566F16 /* loop_unroller.h */; };
-		A9415BBC243667F800566F16 /* loop_unroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158E7243667F600566F16 /* loop_unroller.h */; };
-		A9415BBD243667F800566F16 /* strip_debug_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E8243667F600566F16 /* strip_debug_info_pass.cpp */; };
-		A9415BBE243667F800566F16 /* strip_debug_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E8243667F600566F16 /* strip_debug_info_pass.cpp */; };
-		A9415BBF243667F800566F16 /* ssa_rewrite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E9243667F600566F16 /* ssa_rewrite_pass.cpp */; };
-		A9415BC0243667F800566F16 /* ssa_rewrite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158E9243667F600566F16 /* ssa_rewrite_pass.cpp */; };
-		A9415BC1243667F800566F16 /* loop_dependence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158EA243667F600566F16 /* loop_dependence.cpp */; };
-		A9415BC2243667F800566F16 /* loop_dependence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158EA243667F600566F16 /* loop_dependence.cpp */; };
-		A9415BC3243667F800566F16 /* unify_const_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158EB243667F600566F16 /* unify_const_pass.h */; };
-		A9415BC4243667F800566F16 /* unify_const_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158EB243667F600566F16 /* unify_const_pass.h */; };
-		A9415BC5243667F800566F16 /* ir_loader.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158EC243667F600566F16 /* ir_loader.h */; };
-		A9415BC6243667F800566F16 /* ir_loader.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158EC243667F600566F16 /* ir_loader.h */; };
-		A9415BC7243667F800566F16 /* inst_debug_printf_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158ED243667F600566F16 /* inst_debug_printf_pass.cpp */; };
-		A9415BC8243667F800566F16 /* inst_debug_printf_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158ED243667F600566F16 /* inst_debug_printf_pass.cpp */; };
-		A9415BC9243667F800566F16 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158EE243667F600566F16 /* types.h */; };
-		A9415BCA243667F800566F16 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158EE243667F600566F16 /* types.h */; };
-		A9415BCB243667F800566F16 /* fold_spec_constant_op_and_composite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158EF243667F600566F16 /* fold_spec_constant_op_and_composite_pass.h */; };
-		A9415BCC243667F800566F16 /* fold_spec_constant_op_and_composite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158EF243667F600566F16 /* fold_spec_constant_op_and_composite_pass.h */; };
-		A9415BCD243667F800566F16 /* mem_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F0243667F600566F16 /* mem_pass.cpp */; };
-		A9415BCE243667F800566F16 /* mem_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F0243667F600566F16 /* mem_pass.cpp */; };
-		A9415BCF243667F800566F16 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158F1243667F600566F16 /* basic_block.h */; };
-		A9415BD0243667F800566F16 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158F1243667F600566F16 /* basic_block.h */; };
-		A9415BD1243667F800566F16 /* remove_duplicates_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F2243667F600566F16 /* remove_duplicates_pass.cpp */; };
-		A9415BD2243667F800566F16 /* remove_duplicates_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F2243667F600566F16 /* remove_duplicates_pass.cpp */; };
-		A9415BD3243667F800566F16 /* dead_variable_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F3243667F600566F16 /* dead_variable_elimination.cpp */; };
-		A9415BD4243667F800566F16 /* dead_variable_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F3243667F600566F16 /* dead_variable_elimination.cpp */; };
-		A9415BD5243667F800566F16 /* block_merge_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158F4243667F600566F16 /* block_merge_pass.h */; };
-		A9415BD6243667F800566F16 /* block_merge_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158F4243667F600566F16 /* block_merge_pass.h */; };
-		A9415BD7243667F800566F16 /* module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F5243667F600566F16 /* module.cpp */; };
-		A9415BD8243667F800566F16 /* module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F5243667F600566F16 /* module.cpp */; };
-		A9415BD9243667F800566F16 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F6243667F600566F16 /* fold_spec_constant_op_and_composite_pass.cpp */; };
-		A9415BDA243667F800566F16 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F6243667F600566F16 /* fold_spec_constant_op_and_composite_pass.cpp */; };
-		A9415BDB243667F800566F16 /* loop_unswitch_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F7243667F600566F16 /* loop_unswitch_pass.cpp */; };
-		A9415BDC243667F800566F16 /* loop_unswitch_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F7243667F600566F16 /* loop_unswitch_pass.cpp */; };
-		A9415BDD243667F800566F16 /* unify_const_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F8243667F600566F16 /* unify_const_pass.cpp */; };
-		A9415BDE243667F800566F16 /* unify_const_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F8243667F600566F16 /* unify_const_pass.cpp */; };
-		A9415BDF243667F800566F16 /* type_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F9243667F600566F16 /* type_manager.cpp */; };
-		A9415BE0243667F800566F16 /* type_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158F9243667F600566F16 /* type_manager.cpp */; };
-		A9415BE1243667F800566F16 /* generate_webgpu_initializers_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158FA243667F600566F16 /* generate_webgpu_initializers_pass.cpp */; };
-		A9415BE2243667F800566F16 /* generate_webgpu_initializers_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158FA243667F600566F16 /* generate_webgpu_initializers_pass.cpp */; };
-		A9415BE3243667F800566F16 /* private_to_local_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158FB243667F600566F16 /* private_to_local_pass.h */; };
-		A9415BE4243667F800566F16 /* private_to_local_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158FB243667F600566F16 /* private_to_local_pass.h */; };
-		A9415BE5243667F800566F16 /* convert_to_half_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158FC243667F600566F16 /* convert_to_half_pass.h */; };
-		A9415BE6243667F800566F16 /* convert_to_half_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158FC243667F600566F16 /* convert_to_half_pass.h */; };
-		A9415BE7243667F800566F16 /* relax_float_ops_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158FD243667F600566F16 /* relax_float_ops_pass.h */; };
-		A9415BE8243667F800566F16 /* relax_float_ops_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158FD243667F600566F16 /* relax_float_ops_pass.h */; };
-		A9415BE9243667F800566F16 /* inline_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158FE243667F600566F16 /* inline_pass.cpp */; };
-		A9415BEA243667F800566F16 /* inline_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94158FE243667F600566F16 /* inline_pass.cpp */; };
-		A9415BEB243667F800566F16 /* def_use_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158FF243667F600566F16 /* def_use_manager.h */; };
-		A9415BEC243667F800566F16 /* def_use_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94158FF243667F600566F16 /* def_use_manager.h */; };
-		A9415BED243667F800566F16 /* ir_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415900243667F600566F16 /* ir_loader.cpp */; };
-		A9415BEE243667F800566F16 /* ir_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415900243667F600566F16 /* ir_loader.cpp */; };
-		A9415BEF243667F800566F16 /* cfg_cleanup_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415901243667F600566F16 /* cfg_cleanup_pass.h */; };
-		A9415BF0243667F800566F16 /* cfg_cleanup_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415901243667F600566F16 /* cfg_cleanup_pass.h */; };
-		A9415BF1243667F800566F16 /* licm_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415902243667F600566F16 /* licm_pass.cpp */; };
-		A9415BF2243667F800566F16 /* licm_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415902243667F600566F16 /* licm_pass.cpp */; };
-		A9415BF3243667F800566F16 /* eliminate_dead_functions_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415903243667F600566F16 /* eliminate_dead_functions_pass.cpp */; };
-		A9415BF4243667F800566F16 /* eliminate_dead_functions_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415903243667F600566F16 /* eliminate_dead_functions_pass.cpp */; };
-		A9415BF5243667F800566F16 /* local_redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415904243667F600566F16 /* local_redundancy_elimination.h */; };
-		A9415BF6243667F800566F16 /* local_redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415904243667F600566F16 /* local_redundancy_elimination.h */; };
-		A9415BF7243667F800566F16 /* split_invalid_unreachable_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415905243667F600566F16 /* split_invalid_unreachable_pass.cpp */; };
-		A9415BF8243667F800566F16 /* split_invalid_unreachable_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415905243667F600566F16 /* split_invalid_unreachable_pass.cpp */; };
-		A9415BF9243667F800566F16 /* loop_peeling.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415906243667F600566F16 /* loop_peeling.h */; };
-		A9415BFA243667F800566F16 /* loop_peeling.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415906243667F600566F16 /* loop_peeling.h */; };
-		A9415BFB243667F800566F16 /* vector_dce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415907243667F600566F16 /* vector_dce.cpp */; };
-		A9415BFC243667F800566F16 /* vector_dce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415907243667F600566F16 /* vector_dce.cpp */; };
-		A9415BFD243667F800566F16 /* block_merge_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415908243667F600566F16 /* block_merge_util.h */; };
-		A9415BFE243667F800566F16 /* block_merge_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415908243667F600566F16 /* block_merge_util.h */; };
-		A9415BFF243667F800566F16 /* loop_unroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415909243667F600566F16 /* loop_unroller.cpp */; };
-		A9415C00243667F800566F16 /* loop_unroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415909243667F600566F16 /* loop_unroller.cpp */; };
-		A9415C01243667F800566F16 /* desc_sroa.h in Headers */ = {isa = PBXBuildFile; fileRef = A941590A243667F600566F16 /* desc_sroa.h */; };
-		A9415C02243667F800566F16 /* desc_sroa.h in Headers */ = {isa = PBXBuildFile; fileRef = A941590A243667F600566F16 /* desc_sroa.h */; };
-		A9415C03243667F800566F16 /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941590B243667F600566F16 /* constants.cpp */; };
-		A9415C04243667F800566F16 /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941590B243667F600566F16 /* constants.cpp */; };
-		A9415C05243667F800566F16 /* loop_fusion_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941590C243667F600566F16 /* loop_fusion_pass.h */; };
-		A9415C06243667F800566F16 /* loop_fusion_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941590C243667F600566F16 /* loop_fusion_pass.h */; };
-		A9415C07243667F800566F16 /* struct_cfg_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A941590D243667F600566F16 /* struct_cfg_analysis.h */; };
-		A9415C08243667F800566F16 /* struct_cfg_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A941590D243667F600566F16 /* struct_cfg_analysis.h */; };
-		A9415C09243667F800566F16 /* inst_buff_addr_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941590E243667F600566F16 /* inst_buff_addr_check_pass.cpp */; };
-		A9415C0A243667F800566F16 /* inst_buff_addr_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941590E243667F600566F16 /* inst_buff_addr_check_pass.cpp */; };
-		A9415C0B243667F800566F16 /* def_use_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941590F243667F600566F16 /* def_use_manager.cpp */; };
-		A9415C0C243667F800566F16 /* def_use_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941590F243667F600566F16 /* def_use_manager.cpp */; };
-		A9415C0D243667F800566F16 /* wrap_opkill.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415910243667F600566F16 /* wrap_opkill.h */; };
-		A9415C0E243667F800566F16 /* wrap_opkill.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415910243667F600566F16 /* wrap_opkill.h */; };
-		A9415C0F243667F800566F16 /* strip_reflect_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415911243667F600566F16 /* strip_reflect_info_pass.cpp */; };
-		A9415C10243667F800566F16 /* strip_reflect_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415911243667F600566F16 /* strip_reflect_info_pass.cpp */; };
-		A9415C11243667F800566F16 /* decoration_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415912243667F600566F16 /* decoration_manager.h */; };
-		A9415C12243667F800566F16 /* decoration_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415912243667F600566F16 /* decoration_manager.h */; };
-		A9415C13243667F800566F16 /* ccp_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415913243667F600566F16 /* ccp_pass.cpp */; };
-		A9415C14243667F800566F16 /* ccp_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415913243667F600566F16 /* ccp_pass.cpp */; };
-		A9415C15243667F800566F16 /* process_lines_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415914243667F600566F16 /* process_lines_pass.h */; };
-		A9415C16243667F800566F16 /* process_lines_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415914243667F600566F16 /* process_lines_pass.h */; };
-		A9415C17243667F800566F16 /* local_single_block_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415915243667F600566F16 /* local_single_block_elim_pass.h */; };
-		A9415C18243667F800566F16 /* local_single_block_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415915243667F600566F16 /* local_single_block_elim_pass.h */; };
-		A9415C19243667F800566F16 /* pch_source_opt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415916243667F600566F16 /* pch_source_opt.cpp */; };
-		A9415C1A243667F800566F16 /* pch_source_opt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415916243667F600566F16 /* pch_source_opt.cpp */; };
-		A9415C1B243667F800566F16 /* inst_buff_addr_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415917243667F600566F16 /* inst_buff_addr_check_pass.h */; };
-		A9415C1C243667F800566F16 /* inst_buff_addr_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415917243667F600566F16 /* inst_buff_addr_check_pass.h */; };
-		A9415C1D243667F800566F16 /* strength_reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415918243667F600566F16 /* strength_reduction_pass.h */; };
-		A9415C1E243667F800566F16 /* strength_reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415918243667F600566F16 /* strength_reduction_pass.h */; };
-		A9415C1F243667F800566F16 /* aggressive_dead_code_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415919243667F600566F16 /* aggressive_dead_code_elim_pass.cpp */; };
-		A9415C20243667F800566F16 /* aggressive_dead_code_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415919243667F600566F16 /* aggressive_dead_code_elim_pass.cpp */; };
-		A9415C21243667F800566F16 /* eliminate_dead_functions_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941591A243667F600566F16 /* eliminate_dead_functions_util.cpp */; };
-		A9415C22243667F800566F16 /* eliminate_dead_functions_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941591A243667F600566F16 /* eliminate_dead_functions_util.cpp */; };
-		A9415C23243667F800566F16 /* inst_debug_printf_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941591B243667F600566F16 /* inst_debug_printf_pass.h */; };
-		A9415C24243667F800566F16 /* inst_debug_printf_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941591B243667F600566F16 /* inst_debug_printf_pass.h */; };
-		A9415C25243667F800566F16 /* simplification_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941591C243667F600566F16 /* simplification_pass.cpp */; };
-		A9415C26243667F800566F16 /* simplification_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941591C243667F600566F16 /* simplification_pass.cpp */; };
-		A9415C27243667F800566F16 /* dead_branch_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941591D243667F600566F16 /* dead_branch_elim_pass.cpp */; };
-		A9415C28243667F800566F16 /* dead_branch_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941591D243667F600566F16 /* dead_branch_elim_pass.cpp */; };
-		A9415C29243667F800566F16 /* flatten_decoration_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941591E243667F600566F16 /* flatten_decoration_pass.cpp */; };
-		A9415C2A243667F800566F16 /* flatten_decoration_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941591E243667F600566F16 /* flatten_decoration_pass.cpp */; };
-		A9415C2B243667F800566F16 /* dead_insert_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941591F243667F600566F16 /* dead_insert_elim_pass.h */; };
-		A9415C2C243667F800566F16 /* dead_insert_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941591F243667F600566F16 /* dead_insert_elim_pass.h */; };
-		A9415C2D243667F800566F16 /* folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415920243667F600566F16 /* folding_rules.cpp */; };
-		A9415C2E243667F800566F16 /* folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415920243667F600566F16 /* folding_rules.cpp */; };
-		A9415C2F243667F800566F16 /* freeze_spec_constant_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415921243667F600566F16 /* freeze_spec_constant_value_pass.h */; };
-		A9415C30243667F800566F16 /* freeze_spec_constant_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415921243667F600566F16 /* freeze_spec_constant_value_pass.h */; };
-		A9415C31243667F800566F16 /* ir_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415922243667F600566F16 /* ir_context.cpp */; };
-		A9415C32243667F800566F16 /* ir_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415922243667F600566F16 /* ir_context.cpp */; };
-		A9415C33243667F800566F16 /* instrument_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415923243667F600566F16 /* instrument_pass.h */; };
-		A9415C34243667F800566F16 /* instrument_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415923243667F600566F16 /* instrument_pass.h */; };
-		A9415C35243667F800566F16 /* mem_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415924243667F600566F16 /* mem_pass.h */; };
-		A9415C36243667F800566F16 /* mem_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415924243667F600566F16 /* mem_pass.h */; };
-		A9415C37243667F800566F16 /* loop_descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415925243667F600566F16 /* loop_descriptor.cpp */; };
-		A9415C38243667F800566F16 /* loop_descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415925243667F600566F16 /* loop_descriptor.cpp */; };
-		A9415C39243667F800566F16 /* eliminate_dead_members_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415926243667F600566F16 /* eliminate_dead_members_pass.h */; };
-		A9415C3A243667F800566F16 /* eliminate_dead_members_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415926243667F600566F16 /* eliminate_dead_members_pass.h */; };
-		A9415C3B243667F800566F16 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415927243667F600566F16 /* function.cpp */; };
-		A9415C3C243667F800566F16 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415927243667F600566F16 /* function.cpp */; };
-		A9415C3D243667F800566F16 /* instruction_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415928243667F600566F16 /* instruction_list.cpp */; };
-		A9415C3E243667F800566F16 /* instruction_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415928243667F600566F16 /* instruction_list.cpp */; };
-		A9415C3F243667F800566F16 /* composite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415929243667F600566F16 /* composite.cpp */; };
-		A9415C40243667F800566F16 /* composite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415929243667F600566F16 /* composite.cpp */; };
-		A9415C41243667F800566F16 /* convert_to_half_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941592A243667F600566F16 /* convert_to_half_pass.cpp */; };
-		A9415C42243667F800566F16 /* convert_to_half_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941592A243667F600566F16 /* convert_to_half_pass.cpp */; };
-		A9415C43243667F800566F16 /* process_lines_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941592B243667F600566F16 /* process_lines_pass.cpp */; };
-		A9415C44243667F800566F16 /* process_lines_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941592B243667F600566F16 /* process_lines_pass.cpp */; };
-		A9415C45243667F800566F16 /* inline_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941592C243667F600566F16 /* inline_pass.h */; };
-		A9415C46243667F800566F16 /* inline_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941592C243667F600566F16 /* inline_pass.h */; };
-		A9415C47243667F800566F16 /* loop_dependence.h in Headers */ = {isa = PBXBuildFile; fileRef = A941592D243667F600566F16 /* loop_dependence.h */; };
-		A9415C48243667F800566F16 /* loop_dependence.h in Headers */ = {isa = PBXBuildFile; fileRef = A941592D243667F600566F16 /* loop_dependence.h */; };
-		A9415C49243667F800566F16 /* value_number_table.h in Headers */ = {isa = PBXBuildFile; fileRef = A941592E243667F600566F16 /* value_number_table.h */; };
-		A9415C4A243667F800566F16 /* value_number_table.h in Headers */ = {isa = PBXBuildFile; fileRef = A941592E243667F600566F16 /* value_number_table.h */; };
-		A9415C4B243667F800566F16 /* flatten_decoration_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941592F243667F600566F16 /* flatten_decoration_pass.h */; };
-		A9415C4C243667F800566F16 /* flatten_decoration_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941592F243667F600566F16 /* flatten_decoration_pass.h */; };
-		A9415C4D243667F800566F16 /* if_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415930243667F600566F16 /* if_conversion.cpp */; };
-		A9415C4E243667F800566F16 /* if_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415930243667F600566F16 /* if_conversion.cpp */; };
-		A9415C4F243667F800566F16 /* inline_exhaustive_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415931243667F600566F16 /* inline_exhaustive_pass.h */; };
-		A9415C50243667F800566F16 /* inline_exhaustive_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415931243667F600566F16 /* inline_exhaustive_pass.h */; };
-		A9415C51243667F800566F16 /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415932243667F600566F16 /* constants.h */; };
-		A9415C52243667F800566F16 /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415932243667F600566F16 /* constants.h */; };
-		A9415C53243667F800566F16 /* eliminate_dead_members_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415933243667F600566F16 /* eliminate_dead_members_pass.cpp */; };
-		A9415C54243667F800566F16 /* eliminate_dead_members_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415933243667F600566F16 /* eliminate_dead_members_pass.cpp */; };
-		A9415C55243667F800566F16 /* strength_reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415934243667F600566F16 /* strength_reduction_pass.cpp */; };
-		A9415C56243667F800566F16 /* strength_reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415934243667F600566F16 /* strength_reduction_pass.cpp */; };
-		A9415C57243667F800566F16 /* desc_sroa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415935243667F600566F16 /* desc_sroa.cpp */; };
-		A9415C58243667F800566F16 /* desc_sroa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415935243667F600566F16 /* desc_sroa.cpp */; };
-		A9415C59243667F800566F16 /* block_merge_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415936243667F600566F16 /* block_merge_util.cpp */; };
-		A9415C5A243667F800566F16 /* block_merge_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415936243667F600566F16 /* block_merge_util.cpp */; };
-		A9415C5B243667F800566F16 /* upgrade_memory_model.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415937243667F600566F16 /* upgrade_memory_model.h */; };
-		A9415C5C243667F800566F16 /* upgrade_memory_model.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415937243667F600566F16 /* upgrade_memory_model.h */; };
-		A9415C5D243667F800566F16 /* copy_prop_arrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415938243667F600566F16 /* copy_prop_arrays.cpp */; };
-		A9415C5E243667F800566F16 /* copy_prop_arrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415938243667F600566F16 /* copy_prop_arrays.cpp */; };
-		A9415C5F243667F800566F16 /* pass_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415939243667F600566F16 /* pass_manager.cpp */; };
-		A9415C60243667F800566F16 /* pass_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415939243667F600566F16 /* pass_manager.cpp */; };
-		A9415C61243667F800566F16 /* inline_exhaustive_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941593A243667F600566F16 /* inline_exhaustive_pass.cpp */; };
-		A9415C62243667F800566F16 /* inline_exhaustive_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941593A243667F600566F16 /* inline_exhaustive_pass.cpp */; };
-		A9415C63243667F800566F16 /* loop_fission.h in Headers */ = {isa = PBXBuildFile; fileRef = A941593B243667F600566F16 /* loop_fission.h */; };
-		A9415C64243667F800566F16 /* loop_fission.h in Headers */ = {isa = PBXBuildFile; fileRef = A941593B243667F600566F16 /* loop_fission.h */; };
-		A9415C65243667F800566F16 /* workaround1209.h in Headers */ = {isa = PBXBuildFile; fileRef = A941593C243667F600566F16 /* workaround1209.h */; };
-		A9415C66243667F800566F16 /* workaround1209.h in Headers */ = {isa = PBXBuildFile; fileRef = A941593C243667F600566F16 /* workaround1209.h */; };
-		A9415C67243667F800566F16 /* loop_fusion_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941593D243667F600566F16 /* loop_fusion_pass.cpp */; };
-		A9415C68243667F800566F16 /* loop_fusion_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941593D243667F600566F16 /* loop_fusion_pass.cpp */; };
-		A9415C69243667F800566F16 /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = A941593E243667F600566F16 /* log.h */; };
-		A9415C6A243667F800566F16 /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = A941593E243667F600566F16 /* log.h */; };
-		A9415C6B243667F800566F16 /* split_invalid_unreachable_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941593F243667F600566F16 /* split_invalid_unreachable_pass.h */; };
-		A9415C6C243667F800566F16 /* split_invalid_unreachable_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941593F243667F600566F16 /* split_invalid_unreachable_pass.h */; };
-		A9415C6D243667F800566F16 /* copy_prop_arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415940243667F600566F16 /* copy_prop_arrays.h */; };
-		A9415C6E243667F800566F16 /* copy_prop_arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415940243667F600566F16 /* copy_prop_arrays.h */; };
-		A9415C6F243667F800566F16 /* eliminate_dead_constant_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415941243667F600566F16 /* eliminate_dead_constant_pass.h */; };
-		A9415C70243667F800566F16 /* eliminate_dead_constant_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415941243667F600566F16 /* eliminate_dead_constant_pass.h */; };
-		A9415C71243667F800566F16 /* dead_insert_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415942243667F600566F16 /* dead_insert_elim_pass.cpp */; };
-		A9415C72243667F800566F16 /* dead_insert_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415942243667F600566F16 /* dead_insert_elim_pass.cpp */; };
-		A9415C73243667F800566F16 /* ssa_rewrite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415943243667F600566F16 /* ssa_rewrite_pass.h */; };
-		A9415C74243667F800566F16 /* ssa_rewrite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415943243667F600566F16 /* ssa_rewrite_pass.h */; };
-		A9415C75243667F800566F16 /* scalar_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415944243667F600566F16 /* scalar_analysis.cpp */; };
-		A9415C76243667F800566F16 /* scalar_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415944243667F600566F16 /* scalar_analysis.cpp */; };
-		A9415C77243667F800566F16 /* dead_variable_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415945243667F600566F16 /* dead_variable_elimination.h */; };
-		A9415C78243667F800566F16 /* dead_variable_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415945243667F600566F16 /* dead_variable_elimination.h */; };
-		A9415C79243667F800566F16 /* block_merge_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415946243667F600566F16 /* block_merge_pass.cpp */; };
-		A9415C7A243667F800566F16 /* block_merge_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415946243667F600566F16 /* block_merge_pass.cpp */; };
-		A9415C7B243667F800566F16 /* dominator_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415947243667F600566F16 /* dominator_analysis.h */; };
-		A9415C7C243667F800566F16 /* dominator_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415947243667F600566F16 /* dominator_analysis.h */; };
-		A9415C7D243667F800566F16 /* pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415948243667F600566F16 /* pass.h */; };
-		A9415C7E243667F800566F16 /* pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415948243667F600566F16 /* pass.h */; };
-		A9415C7F243667F800566F16 /* folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415949243667F600566F16 /* folding_rules.h */; };
-		A9415C80243667F800566F16 /* folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415949243667F600566F16 /* folding_rules.h */; };
-		A9415C81243667F800566F16 /* eliminate_dead_functions_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941594A243667F600566F16 /* eliminate_dead_functions_pass.h */; };
-		A9415C82243667F800566F16 /* eliminate_dead_functions_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941594A243667F600566F16 /* eliminate_dead_functions_pass.h */; };
-		A9415C83243667F800566F16 /* eliminate_dead_functions_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A941594B243667F600566F16 /* eliminate_dead_functions_util.h */; };
-		A9415C84243667F800566F16 /* eliminate_dead_functions_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A941594B243667F600566F16 /* eliminate_dead_functions_util.h */; };
-		A9415C85243667F800566F16 /* fold.h in Headers */ = {isa = PBXBuildFile; fileRef = A941594C243667F600566F16 /* fold.h */; };
-		A9415C86243667F800566F16 /* fold.h in Headers */ = {isa = PBXBuildFile; fileRef = A941594C243667F600566F16 /* fold.h */; };
-		A9415C87243667F800566F16 /* local_single_store_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941594D243667F600566F16 /* local_single_store_elim_pass.cpp */; };
-		A9415C88243667F800566F16 /* local_single_store_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941594D243667F600566F16 /* local_single_store_elim_pass.cpp */; };
-		A9415C89243667F800566F16 /* dead_branch_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941594E243667F600566F16 /* dead_branch_elim_pass.h */; };
-		A9415C8A243667F800566F16 /* dead_branch_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941594E243667F600566F16 /* dead_branch_elim_pass.h */; };
-		A9415C8B243667F800566F16 /* private_to_local_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941594F243667F600566F16 /* private_to_local_pass.cpp */; };
-		A9415C8C243667F800566F16 /* private_to_local_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941594F243667F600566F16 /* private_to_local_pass.cpp */; };
-		A9415C8D243667F800566F16 /* scalar_analysis_nodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415950243667F600566F16 /* scalar_analysis_nodes.h */; };
-		A9415C8E243667F800566F16 /* scalar_analysis_nodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415950243667F600566F16 /* scalar_analysis_nodes.h */; };
-		A9415C8F243667F800566F16 /* propagator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415951243667F600566F16 /* propagator.cpp */; };
-		A9415C90243667F800566F16 /* propagator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415951243667F600566F16 /* propagator.cpp */; };
-		A9415C91243667F800566F16 /* fix_storage_class.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415952243667F600566F16 /* fix_storage_class.h */; };
-		A9415C92243667F800566F16 /* fix_storage_class.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415952243667F600566F16 /* fix_storage_class.h */; };
-		A9415C93243667F800566F16 /* loop_dependence_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415953243667F600566F16 /* loop_dependence_helpers.cpp */; };
-		A9415C94243667F800566F16 /* loop_dependence_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415953243667F600566F16 /* loop_dependence_helpers.cpp */; };
-		A9415C95243667F800566F16 /* set_spec_constant_default_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415954243667F600566F16 /* set_spec_constant_default_value_pass.cpp */; };
-		A9415C96243667F800566F16 /* set_spec_constant_default_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415954243667F600566F16 /* set_spec_constant_default_value_pass.cpp */; };
-		A9415C97243667F800566F16 /* passes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415955243667F600566F16 /* passes.h */; };
-		A9415C98243667F800566F16 /* passes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415955243667F600566F16 /* passes.h */; };
-		A9415C99243667F800566F16 /* fold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415956243667F600566F16 /* fold.cpp */; };
-		A9415C9A243667F800566F16 /* fold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415956243667F600566F16 /* fold.cpp */; };
-		A9415C9B243667F800566F16 /* amd_ext_to_khr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415957243667F600566F16 /* amd_ext_to_khr.cpp */; };
-		A9415C9C243667F800566F16 /* amd_ext_to_khr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415957243667F600566F16 /* amd_ext_to_khr.cpp */; };
-		A9415C9D243667F800566F16 /* strip_reflect_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415958243667F600566F16 /* strip_reflect_info_pass.h */; };
-		A9415C9E243667F800566F16 /* strip_reflect_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415958243667F600566F16 /* strip_reflect_info_pass.h */; };
-		A9415C9F243667F800566F16 /* scalar_replacement_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415959243667F600566F16 /* scalar_replacement_pass.cpp */; };
-		A9415CA0243667F800566F16 /* scalar_replacement_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415959243667F600566F16 /* scalar_replacement_pass.cpp */; };
-		A9415CA1243667F800566F16 /* simplification_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941595A243667F600566F16 /* simplification_pass.h */; };
-		A9415CA2243667F800566F16 /* simplification_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941595A243667F600566F16 /* simplification_pass.h */; };
-		A9415CA3243667F800566F16 /* remove_duplicates_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941595B243667F600566F16 /* remove_duplicates_pass.h */; };
-		A9415CA4243667F800566F16 /* remove_duplicates_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941595B243667F600566F16 /* remove_duplicates_pass.h */; };
-		A9415CA5243667F800566F16 /* redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941595C243667F600566F16 /* redundancy_elimination.cpp */; };
-		A9415CA6243667F800566F16 /* redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941595C243667F600566F16 /* redundancy_elimination.cpp */; };
-		A9415CA7243667F800566F16 /* reflect.h in Headers */ = {isa = PBXBuildFile; fileRef = A941595D243667F600566F16 /* reflect.h */; };
-		A9415CA8243667F800566F16 /* reflect.h in Headers */ = {isa = PBXBuildFile; fileRef = A941595D243667F600566F16 /* reflect.h */; };
-		A9415CA9243667F800566F16 /* workaround1209.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941595E243667F600566F16 /* workaround1209.cpp */; };
-		A9415CAA243667F800566F16 /* workaround1209.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941595E243667F600566F16 /* workaround1209.cpp */; };
-		A9415CAB243667F800566F16 /* null_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941595F243667F600566F16 /* null_pass.h */; };
-		A9415CAC243667F800566F16 /* null_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941595F243667F600566F16 /* null_pass.h */; };
-		A9415CAD243667F800566F16 /* relax_float_ops_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415960243667F600566F16 /* relax_float_ops_pass.cpp */; };
-		A9415CAE243667F800566F16 /* relax_float_ops_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415960243667F600566F16 /* relax_float_ops_pass.cpp */; };
-		A9415CAF243667F800566F16 /* const_folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415961243667F600566F16 /* const_folding_rules.h */; };
-		A9415CB0243667F800566F16 /* const_folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415961243667F600566F16 /* const_folding_rules.h */; };
-		A9415CB1243667F800566F16 /* scalar_replacement_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415962243667F600566F16 /* scalar_replacement_pass.h */; };
-		A9415CB2243667F800566F16 /* scalar_replacement_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415962243667F600566F16 /* scalar_replacement_pass.h */; };
-		A9415CB3243667F800566F16 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415963243667F600566F16 /* instruction.cpp */; };
-		A9415CB4243667F800566F16 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415963243667F600566F16 /* instruction.cpp */; };
-		A9415CB5243667F800566F16 /* pch_source_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415964243667F600566F16 /* pch_source_opt.h */; };
-		A9415CB6243667F800566F16 /* pch_source_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415964243667F600566F16 /* pch_source_opt.h */; };
-		A9415CB7243667F800566F16 /* reduce_load_size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415965243667F600566F16 /* reduce_load_size.cpp */; };
-		A9415CB8243667F800566F16 /* reduce_load_size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415965243667F600566F16 /* reduce_load_size.cpp */; };
-		A9415CB9243667F800566F16 /* redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415966243667F600566F16 /* redundancy_elimination.h */; };
-		A9415CBA243667F800566F16 /* redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415966243667F600566F16 /* redundancy_elimination.h */; };
-		A9415CBB243667F800566F16 /* fix_storage_class.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415967243667F600566F16 /* fix_storage_class.cpp */; };
-		A9415CBC243667F800566F16 /* fix_storage_class.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415967243667F600566F16 /* fix_storage_class.cpp */; };
-		A9415CBD243667F800566F16 /* value_number_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415968243667F600566F16 /* value_number_table.cpp */; };
-		A9415CBE243667F800566F16 /* value_number_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415968243667F600566F16 /* value_number_table.cpp */; };
-		A9415CBF243667F800566F16 /* inline_opaque_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415969243667F600566F16 /* inline_opaque_pass.cpp */; };
-		A9415CC0243667F800566F16 /* inline_opaque_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415969243667F600566F16 /* inline_opaque_pass.cpp */; };
-		A9415CC1243667F800566F16 /* replace_invalid_opc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941596A243667F600566F16 /* replace_invalid_opc.cpp */; };
-		A9415CC2243667F800566F16 /* replace_invalid_opc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941596A243667F600566F16 /* replace_invalid_opc.cpp */; };
-		A9415CC3243667F800566F16 /* loop_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A941596B243667F600566F16 /* loop_utils.h */; };
-		A9415CC4243667F800566F16 /* loop_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A941596B243667F600566F16 /* loop_utils.h */; };
-		A9415CC5243667F800566F16 /* module.h in Headers */ = {isa = PBXBuildFile; fileRef = A941596C243667F700566F16 /* module.h */; };
-		A9415CC6243667F800566F16 /* module.h in Headers */ = {isa = PBXBuildFile; fileRef = A941596C243667F700566F16 /* module.h */; };
-		A9415CC7243667F800566F16 /* dominator_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941596D243667F700566F16 /* dominator_analysis.cpp */; };
-		A9415CC8243667F800566F16 /* dominator_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941596D243667F700566F16 /* dominator_analysis.cpp */; };
-		A9415CC9243667F800566F16 /* decompose_initialized_variables_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941596E243667F700566F16 /* decompose_initialized_variables_pass.cpp */; };
-		A9415CCA243667F800566F16 /* decompose_initialized_variables_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941596E243667F700566F16 /* decompose_initialized_variables_pass.cpp */; };
-		A9415CCB243667F800566F16 /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = A941596F243667F700566F16 /* ir_builder.h */; };
-		A9415CCC243667F800566F16 /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = A941596F243667F700566F16 /* ir_builder.h */; };
-		A9415CCD243667F800566F16 /* loop_unswitch_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415970243667F700566F16 /* loop_unswitch_pass.h */; };
-		A9415CCE243667F800566F16 /* loop_unswitch_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415970243667F700566F16 /* loop_unswitch_pass.h */; };
-		A9415CCF243667F800566F16 /* cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415971243667F700566F16 /* cfg.h */; };
-		A9415CD0243667F800566F16 /* cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415971243667F700566F16 /* cfg.h */; };
-		A9415CD1243667F800566F16 /* code_sink.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415972243667F700566F16 /* code_sink.h */; };
-		A9415CD2243667F800566F16 /* code_sink.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415972243667F700566F16 /* code_sink.h */; };
-		A9415CD3243667F800566F16 /* loop_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415973243667F700566F16 /* loop_descriptor.h */; };
-		A9415CD4243667F800566F16 /* loop_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415973243667F700566F16 /* loop_descriptor.h */; };
-		A9415CD5243667F800566F16 /* generate_webgpu_initializers_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415974243667F700566F16 /* generate_webgpu_initializers_pass.h */; };
-		A9415CD6243667F800566F16 /* generate_webgpu_initializers_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415974243667F700566F16 /* generate_webgpu_initializers_pass.h */; };
-		A9415CD7243667F800566F16 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415975243667F700566F16 /* instruction.h */; };
-		A9415CD8243667F800566F16 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415975243667F700566F16 /* instruction.h */; };
-		A9415CD9243667F800566F16 /* aggressive_dead_code_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415976243667F700566F16 /* aggressive_dead_code_elim_pass.h */; };
-		A9415CDA243667F800566F16 /* aggressive_dead_code_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415976243667F700566F16 /* aggressive_dead_code_elim_pass.h */; };
-		A9415CDB243667F800566F16 /* struct_cfg_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415977243667F700566F16 /* struct_cfg_analysis.cpp */; };
-		A9415CDC243667F800566F16 /* struct_cfg_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415977243667F700566F16 /* struct_cfg_analysis.cpp */; };
-		A9415CDD243667F800566F16 /* vector_dce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415978243667F700566F16 /* vector_dce.h */; };
-		A9415CDE243667F800566F16 /* vector_dce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415978243667F700566F16 /* vector_dce.h */; };
-		A9415CDF243667F800566F16 /* combine_access_chains.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415979243667F700566F16 /* combine_access_chains.h */; };
-		A9415CE0243667F800566F16 /* combine_access_chains.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415979243667F700566F16 /* combine_access_chains.h */; };
-		A9415CE1243667F800566F16 /* pass_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A941597A243667F700566F16 /* pass_manager.h */; };
-		A9415CE2243667F800566F16 /* pass_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A941597A243667F700566F16 /* pass_manager.h */; };
-		A9415CE3243667F800566F16 /* local_access_chain_convert_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941597B243667F700566F16 /* local_access_chain_convert_pass.cpp */; };
-		A9415CE4243667F800566F16 /* local_access_chain_convert_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941597B243667F700566F16 /* local_access_chain_convert_pass.cpp */; };
-		A9415CE5243667F800566F16 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941597C243667F700566F16 /* basic_block.cpp */; };
-		A9415CE6243667F800566F16 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941597C243667F700566F16 /* basic_block.cpp */; };
-		A9415CE7243667F800566F16 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A941597D243667F700566F16 /* iterator.h */; };
-		A9415CE8243667F800566F16 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A941597D243667F700566F16 /* iterator.h */; };
-		A9415CE9243667F800566F16 /* licm_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941597E243667F700566F16 /* licm_pass.h */; };
-		A9415CEA243667F800566F16 /* licm_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A941597E243667F700566F16 /* licm_pass.h */; };
-		A9415CEB243667F800566F16 /* build_module.h in Headers */ = {isa = PBXBuildFile; fileRef = A941597F243667F700566F16 /* build_module.h */; };
-		A9415CEC243667F800566F16 /* build_module.h in Headers */ = {isa = PBXBuildFile; fileRef = A941597F243667F700566F16 /* build_module.h */; };
-		A9415CED243667F800566F16 /* ccp_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415980243667F700566F16 /* ccp_pass.h */; };
-		A9415CEE243667F800566F16 /* ccp_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415980243667F700566F16 /* ccp_pass.h */; };
-		A9415CEF243667F800566F16 /* graphics_robust_access_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415981243667F700566F16 /* graphics_robust_access_pass.cpp */; };
-		A9415CF0243667F800566F16 /* graphics_robust_access_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415981243667F700566F16 /* graphics_robust_access_pass.cpp */; };
-		A9415CF1243667F800566F16 /* decompose_initialized_variables_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415982243667F700566F16 /* decompose_initialized_variables_pass.h */; };
-		A9415CF2243667F800566F16 /* decompose_initialized_variables_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415982243667F700566F16 /* decompose_initialized_variables_pass.h */; };
-		A9415CF3243667F800566F16 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415983243667F700566F16 /* function.h */; };
-		A9415CF4243667F800566F16 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415983243667F700566F16 /* function.h */; };
-		A9415CF5243667F800566F16 /* loop_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415984243667F700566F16 /* loop_fusion.cpp */; };
-		A9415CF6243667F800566F16 /* loop_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415984243667F700566F16 /* loop_fusion.cpp */; };
-		A9415CF7243667F800566F16 /* upgrade_memory_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415985243667F700566F16 /* upgrade_memory_model.cpp */; };
-		A9415CF8243667F800566F16 /* upgrade_memory_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415985243667F700566F16 /* upgrade_memory_model.cpp */; };
-		A9415CF9243667F800566F16 /* feature_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415986243667F700566F16 /* feature_manager.h */; };
-		A9415CFA243667F800566F16 /* feature_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415986243667F700566F16 /* feature_manager.h */; };
-		A9415CFB243667F800566F16 /* inst_bindless_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415987243667F700566F16 /* inst_bindless_check_pass.h */; };
-		A9415CFC243667F800566F16 /* inst_bindless_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415987243667F700566F16 /* inst_bindless_check_pass.h */; };
-		A9415CFD243667F800566F16 /* scalar_analysis_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415988243667F700566F16 /* scalar_analysis_simplification.cpp */; };
-		A9415CFE243667F800566F16 /* scalar_analysis_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415988243667F700566F16 /* scalar_analysis_simplification.cpp */; };
-		A9415CFF243667F800566F16 /* set_spec_constant_default_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415989243667F700566F16 /* set_spec_constant_default_value_pass.h */; };
-		A9415D00243667F800566F16 /* set_spec_constant_default_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415989243667F700566F16 /* set_spec_constant_default_value_pass.h */; };
-		A9415D01243667F800566F16 /* dominator_tree.h in Headers */ = {isa = PBXBuildFile; fileRef = A941598A243667F700566F16 /* dominator_tree.h */; };
-		A9415D02243667F800566F16 /* dominator_tree.h in Headers */ = {isa = PBXBuildFile; fileRef = A941598A243667F700566F16 /* dominator_tree.h */; };
-		A9415D03243667F800566F16 /* legalize_vector_shuffle_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941598B243667F700566F16 /* legalize_vector_shuffle_pass.cpp */; };
-		A9415D04243667F800566F16 /* legalize_vector_shuffle_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941598B243667F700566F16 /* legalize_vector_shuffle_pass.cpp */; };
-		A9415D05243667F800566F16 /* type_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A941598C243667F700566F16 /* type_manager.h */; };
-		A9415D06243667F800566F16 /* type_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A941598C243667F700566F16 /* type_manager.h */; };
-		A9415D07243667F800566F16 /* compact_ids_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941598D243667F700566F16 /* compact_ids_pass.cpp */; };
-		A9415D08243667F800566F16 /* compact_ids_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941598D243667F700566F16 /* compact_ids_pass.cpp */; };
-		A9415D09243667F800566F16 /* loop_peeling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941598E243667F700566F16 /* loop_peeling.cpp */; };
-		A9415D0A243667F800566F16 /* loop_peeling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A941598E243667F700566F16 /* loop_peeling.cpp */; };
-		A9415D0B243667F800566F16 /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = A941598F243667F700566F16 /* table.h */; };
-		A9415D0C243667F800566F16 /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = A941598F243667F700566F16 /* table.h */; };
-		A9415E77243667F900566F16 /* ext_inst.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A48243667F700566F16 /* ext_inst.h */; };
-		A9415E78243667F900566F16 /* ext_inst.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A48243667F700566F16 /* ext_inst.h */; };
-		A9415E79243667F900566F16 /* diagnostic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A49243667F700566F16 /* diagnostic.cpp */; };
-		A9415E7A243667F900566F16 /* diagnostic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A49243667F700566F16 /* diagnostic.cpp */; };
-		A9415E7B243667F900566F16 /* latest_version_spirv_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A4A243667F700566F16 /* latest_version_spirv_header.h */; };
-		A9415E7C243667F900566F16 /* latest_version_spirv_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A4A243667F700566F16 /* latest_version_spirv_header.h */; };
-		A9415E7D243667F900566F16 /* libspirv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A4B243667F700566F16 /* libspirv.cpp */; };
-		A9415E7E243667F900566F16 /* libspirv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A4B243667F700566F16 /* libspirv.cpp */; };
-		A9415E7F243667F900566F16 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A4C243667F700566F16 /* instruction.h */; };
-		A9415E80243667F900566F16 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A4C243667F700566F16 /* instruction.h */; };
-		A9415E81243667F900566F16 /* spirv_optimizer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A4D243667F700566F16 /* spirv_optimizer_options.h */; };
-		A9415E82243667F900566F16 /* spirv_optimizer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A4D243667F700566F16 /* spirv_optimizer_options.h */; };
-		A9415E83243667F900566F16 /* opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A4E243667F700566F16 /* opcode.h */; };
-		A9415E84243667F900566F16 /* opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A4E243667F700566F16 /* opcode.h */; };
-		A9415E85243667F900566F16 /* operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A4F243667F700566F16 /* operand.cpp */; };
-		A9415E86243667F900566F16 /* operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A4F243667F700566F16 /* operand.cpp */; };
-		A9415E87243667F900566F16 /* latest_version_glsl_std_450_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A50243667F700566F16 /* latest_version_glsl_std_450_header.h */; };
-		A9415E88243667F900566F16 /* latest_version_glsl_std_450_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A50243667F700566F16 /* latest_version_glsl_std_450_header.h */; };
-		A9415E89243667F900566F16 /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A51243667F700566F16 /* extensions.h */; };
-		A9415E8A243667F900566F16 /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A51243667F700566F16 /* extensions.h */; };
-		A9415E8B243667F900566F16 /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A52243667F700566F16 /* disassemble.cpp */; };
-		A9415E8C243667F900566F16 /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A52243667F700566F16 /* disassemble.cpp */; };
-		A9415E8D243667F900566F16 /* binary.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A53243667F700566F16 /* binary.h */; };
-		A9415E8E243667F900566F16 /* binary.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A53243667F700566F16 /* binary.h */; };
-		A9415E8F243667F900566F16 /* text_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A54243667F700566F16 /* text_handler.cpp */; };
-		A9415E90243667F900566F16 /* text_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A54243667F700566F16 /* text_handler.cpp */; };
-		A9415E91243667F900566F16 /* validate_annotation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A56243667F700566F16 /* validate_annotation.cpp */; };
-		A9415E92243667F900566F16 /* validate_annotation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A56243667F700566F16 /* validate_annotation.cpp */; };
-		A9415E93243667F900566F16 /* validate_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A57243667F700566F16 /* validate_misc.cpp */; };
-		A9415E94243667F900566F16 /* validate_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A57243667F700566F16 /* validate_misc.cpp */; };
-		A9415E95243667F900566F16 /* validate_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A58243667F700566F16 /* validate_cfg.cpp */; };
-		A9415E96243667F900566F16 /* validate_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A58243667F700566F16 /* validate_cfg.cpp */; };
-		A9415E97243667F900566F16 /* validate_capability.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A59243667F700566F16 /* validate_capability.cpp */; };
-		A9415E98243667F900566F16 /* validate_capability.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A59243667F700566F16 /* validate_capability.cpp */; };
-		A9415E99243667F900566F16 /* construct.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A5A243667F700566F16 /* construct.h */; };
-		A9415E9A243667F900566F16 /* construct.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A5A243667F700566F16 /* construct.h */; };
-		A9415E9B243667F900566F16 /* validate_barriers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A5B243667F700566F16 /* validate_barriers.cpp */; };
-		A9415E9C243667F900566F16 /* validate_barriers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A5B243667F700566F16 /* validate_barriers.cpp */; };
-		A9415E9D243667F900566F16 /* validate_non_uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A5C243667F700566F16 /* validate_non_uniform.cpp */; };
-		A9415E9E243667F900566F16 /* validate_non_uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A5C243667F700566F16 /* validate_non_uniform.cpp */; };
-		A9415E9F243667F900566F16 /* validate_scopes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A5D243667F700566F16 /* validate_scopes.cpp */; };
-		A9415EA0243667F900566F16 /* validate_scopes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A5D243667F700566F16 /* validate_scopes.cpp */; };
-		A9415EA1243667F900566F16 /* validate_atomics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A5E243667F700566F16 /* validate_atomics.cpp */; };
-		A9415EA2243667F900566F16 /* validate_atomics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A5E243667F700566F16 /* validate_atomics.cpp */; };
-		A9415EA3243667F900566F16 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A5F243667F700566F16 /* basic_block.h */; };
-		A9415EA4243667F900566F16 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A5F243667F700566F16 /* basic_block.h */; };
-		A9415EA5243667F900566F16 /* validate_instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A60243667F700566F16 /* validate_instruction.cpp */; };
-		A9415EA6243667F900566F16 /* validate_instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A60243667F700566F16 /* validate_instruction.cpp */; };
-		A9415EA7243667F900566F16 /* validate_decorations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A61243667F700566F16 /* validate_decorations.cpp */; };
-		A9415EA8243667F900566F16 /* validate_decorations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A61243667F700566F16 /* validate_decorations.cpp */; };
-		A9415EA9243667F900566F16 /* validate_debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A62243667F700566F16 /* validate_debug.cpp */; };
-		A9415EAA243667F900566F16 /* validate_debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A62243667F700566F16 /* validate_debug.cpp */; };
-		A9415EAB243667F900566F16 /* validate_builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A63243667F700566F16 /* validate_builtins.cpp */; };
-		A9415EAC243667F900566F16 /* validate_builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A63243667F700566F16 /* validate_builtins.cpp */; };
-		A9415EAD243667F900566F16 /* validate_interfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A64243667F700566F16 /* validate_interfaces.cpp */; };
-		A9415EAE243667F900566F16 /* validate_interfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A64243667F700566F16 /* validate_interfaces.cpp */; };
-		A9415EAF243667F900566F16 /* validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A65243667F700566F16 /* validate.cpp */; };
-		A9415EB0243667F900566F16 /* validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A65243667F700566F16 /* validate.cpp */; };
-		A9415EB1243667F900566F16 /* validation_state.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A66243667F700566F16 /* validation_state.h */; };
-		A9415EB2243667F900566F16 /* validation_state.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A66243667F700566F16 /* validation_state.h */; };
-		A9415EB3243667F900566F16 /* validate_constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A67243667F700566F16 /* validate_constants.cpp */; };
-		A9415EB4243667F900566F16 /* validate_constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A67243667F700566F16 /* validate_constants.cpp */; };
-		A9415EB5243667F900566F16 /* validate_bitwise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A68243667F700566F16 /* validate_bitwise.cpp */; };
-		A9415EB6243667F900566F16 /* validate_bitwise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A68243667F700566F16 /* validate_bitwise.cpp */; };
-		A9415EB7243667F900566F16 /* validate_extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A69243667F700566F16 /* validate_extensions.cpp */; };
-		A9415EB8243667F900566F16 /* validate_extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A69243667F700566F16 /* validate_extensions.cpp */; };
-		A9415EB9243667F900566F16 /* construct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A6A243667F700566F16 /* construct.cpp */; };
-		A9415EBA243667F900566F16 /* construct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A6A243667F700566F16 /* construct.cpp */; };
-		A9415EBB243667F900566F16 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A6B243667F700566F16 /* function.cpp */; };
-		A9415EBC243667F900566F16 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A6B243667F700566F16 /* function.cpp */; };
-		A9415EBD243667F900566F16 /* validate.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A6C243667F700566F16 /* validate.h */; };
-		A9415EBE243667F900566F16 /* validate.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A6C243667F700566F16 /* validate.h */; };
-		A9415EBF243667F900566F16 /* validate_adjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A6D243667F700566F16 /* validate_adjacency.cpp */; };
-		A9415EC0243667F900566F16 /* validate_adjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A6D243667F700566F16 /* validate_adjacency.cpp */; };
-		A9415EC1243667F900566F16 /* validate_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A6E243667F700566F16 /* validate_conversion.cpp */; };
-		A9415EC2243667F900566F16 /* validate_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A6E243667F700566F16 /* validate_conversion.cpp */; };
-		A9415EC3243667F900566F16 /* validate_small_type_uses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A6F243667F700566F16 /* validate_small_type_uses.cpp */; };
-		A9415EC4243667F900566F16 /* validate_small_type_uses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A6F243667F700566F16 /* validate_small_type_uses.cpp */; };
-		A9415EC5243667F900566F16 /* validate_scopes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A70243667F700566F16 /* validate_scopes.h */; };
-		A9415EC6243667F900566F16 /* validate_scopes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A70243667F700566F16 /* validate_scopes.h */; };
-		A9415EC7243667F900566F16 /* validate_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A71243667F700566F16 /* validate_id.cpp */; };
-		A9415EC8243667F900566F16 /* validate_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A71243667F700566F16 /* validate_id.cpp */; };
-		A9415EC9243667F900566F16 /* validate_memory_semantics.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A72243667F700566F16 /* validate_memory_semantics.h */; };
-		A9415ECA243667F900566F16 /* validate_memory_semantics.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A72243667F700566F16 /* validate_memory_semantics.h */; };
-		A9415ECB243667F900566F16 /* validate_arithmetics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A73243667F700566F16 /* validate_arithmetics.cpp */; };
-		A9415ECC243667F900566F16 /* validate_arithmetics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A73243667F700566F16 /* validate_arithmetics.cpp */; };
-		A9415ECD243667F900566F16 /* validate_mode_setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A74243667F700566F16 /* validate_mode_setting.cpp */; };
-		A9415ECE243667F900566F16 /* validate_mode_setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A74243667F700566F16 /* validate_mode_setting.cpp */; };
-		A9415ECF243667F900566F16 /* validate_memory_semantics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A75243667F700566F16 /* validate_memory_semantics.cpp */; };
-		A9415ED0243667F900566F16 /* validate_memory_semantics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A75243667F700566F16 /* validate_memory_semantics.cpp */; };
-		A9415ED1243667F900566F16 /* validate_logicals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A76243667F700566F16 /* validate_logicals.cpp */; };
-		A9415ED2243667F900566F16 /* validate_logicals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A76243667F700566F16 /* validate_logicals.cpp */; };
-		A9415ED3243667F900566F16 /* validate_derivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A77243667F700566F16 /* validate_derivatives.cpp */; };
-		A9415ED4243667F900566F16 /* validate_derivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A77243667F700566F16 /* validate_derivatives.cpp */; };
-		A9415ED5243667F900566F16 /* validate_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A78243667F700566F16 /* validate_memory.cpp */; };
-		A9415ED6243667F900566F16 /* validate_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A78243667F700566F16 /* validate_memory.cpp */; };
-		A9415ED7243667F900566F16 /* validate_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A79243667F700566F16 /* validate_image.cpp */; };
-		A9415ED8243667F900566F16 /* validate_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A79243667F700566F16 /* validate_image.cpp */; };
-		A9415ED9243667F900566F16 /* validate_literals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A7A243667F700566F16 /* validate_literals.cpp */; };
-		A9415EDA243667F900566F16 /* validate_literals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A7A243667F700566F16 /* validate_literals.cpp */; };
-		A9415EDB243667F900566F16 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A7B243667F700566F16 /* instruction.cpp */; };
-		A9415EDC243667F900566F16 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A7B243667F700566F16 /* instruction.cpp */; };
-		A9415EDD243667F900566F16 /* validate_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A7C243667F700566F16 /* validate_type.cpp */; };
-		A9415EDE243667F900566F16 /* validate_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A7C243667F700566F16 /* validate_type.cpp */; };
-		A9415EDF243667F900566F16 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A7D243667F700566F16 /* instruction.h */; };
-		A9415EE0243667F900566F16 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A7D243667F700566F16 /* instruction.h */; };
-		A9415EE1243667F900566F16 /* validate_execution_limitations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A7E243667F700566F16 /* validate_execution_limitations.cpp */; };
-		A9415EE2243667F900566F16 /* validate_execution_limitations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A7E243667F700566F16 /* validate_execution_limitations.cpp */; };
-		A9415EE3243667F900566F16 /* validate_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A7F243667F700566F16 /* validate_layout.cpp */; };
-		A9415EE4243667F900566F16 /* validate_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A7F243667F700566F16 /* validate_layout.cpp */; };
-		A9415EE5243667F900566F16 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A80243667F700566F16 /* basic_block.cpp */; };
-		A9415EE6243667F900566F16 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A80243667F700566F16 /* basic_block.cpp */; };
-		A9415EE7243667F900566F16 /* validate_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A81243667F700566F16 /* validate_function.cpp */; };
-		A9415EE8243667F900566F16 /* validate_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A81243667F700566F16 /* validate_function.cpp */; };
-		A9415EE9243667F900566F16 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A82243667F700566F16 /* function.h */; };
-		A9415EEA243667F900566F16 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A82243667F700566F16 /* function.h */; };
-		A9415EEB243667F900566F16 /* validate_composites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A83243667F700566F16 /* validate_composites.cpp */; };
-		A9415EEC243667F900566F16 /* validate_composites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A83243667F700566F16 /* validate_composites.cpp */; };
-		A9415EED243667F900566F16 /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A84243667F700566F16 /* validation_state.cpp */; };
-		A9415EEE243667F900566F16 /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A84243667F700566F16 /* validation_state.cpp */; };
-		A9415EEF243667F900566F16 /* validate_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A85243667F700566F16 /* validate_primitives.cpp */; };
-		A9415EF0243667F900566F16 /* validate_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9415A85243667F700566F16 /* validate_primitives.cpp */; };
-		A9415EF1243667F900566F16 /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A86243667F700566F16 /* decoration.h */; };
-		A9415EF2243667F900566F16 /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A9415A86243667F700566F16 /* decoration.h */; };
 		A95D911C23A7F1E500CBCC60 /* glslang.js.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A95D90AD23A7F1E500CBCC60 /* glslang.js.cpp */; };
 		A95D911D23A7F1E500CBCC60 /* glslang.js.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A95D90AD23A7F1E500CBCC60 /* glslang.js.cpp */; };
 		A95D911E23A7F1E500CBCC60 /* ossource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A95D90AF23A7F1E500CBCC60 /* ossource.cpp */; };
@@ -1034,6 +264,788 @@
 		A976292621CC60BC00B52A68 /* spirv_msl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A976290D21CC60BC00B52A68 /* spirv_msl.cpp */; };
 		A976292721CC60BC00B52A68 /* spirv_cross_parsed_ir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A976290E21CC60BC00B52A68 /* spirv_cross_parsed_ir.cpp */; };
 		A976292821CC60BC00B52A68 /* spirv_cross_parsed_ir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A976290E21CC60BC00B52A68 /* spirv_cross_parsed_ir.cpp */; };
+		A9765DF12485758500FDD115 /* spirv_target_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765B9B2485758300FDD115 /* spirv_target_env.cpp */; };
+		A9765DF22485758500FDD115 /* spirv_target_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765B9B2485758300FDD115 /* spirv_target_env.cpp */; };
+		A9765DF32485758500FDD115 /* spirv_fuzzer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765B9D2485758300FDD115 /* spirv_fuzzer_options.h */; };
+		A9765DF42485758500FDD115 /* spirv_fuzzer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765B9D2485758300FDD115 /* spirv_fuzzer_options.h */; };
+		A9765DF52485758500FDD115 /* assembly_grammar.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765B9E2485758300FDD115 /* assembly_grammar.h */; };
+		A9765DF62485758500FDD115 /* assembly_grammar.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765B9E2485758300FDD115 /* assembly_grammar.h */; };
+		A9765DF72485758500FDD115 /* enum_set.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765B9F2485758300FDD115 /* enum_set.h */; };
+		A9765DF82485758500FDD115 /* enum_set.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765B9F2485758300FDD115 /* enum_set.h */; };
+		A9765DF92485758500FDD115 /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BA22485758300FDD115 /* text.cpp */; };
+		A9765DFA2485758500FDD115 /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BA22485758300FDD115 /* text.cpp */; };
+		A9765DFB2485758500FDD115 /* assembly_grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BA32485758300FDD115 /* assembly_grammar.cpp */; };
+		A9765DFC2485758500FDD115 /* assembly_grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BA32485758300FDD115 /* assembly_grammar.cpp */; };
+		A9765DFD2485758500FDD115 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BA42485758300FDD115 /* text.h */; };
+		A9765DFE2485758500FDD115 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BA42485758300FDD115 /* text.h */; };
+		A9765DFF2485758500FDD115 /* extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BA52485758300FDD115 /* extensions.cpp */; };
+		A9765E002485758500FDD115 /* extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BA52485758300FDD115 /* extensions.cpp */; };
+		A9765E012485758500FDD115 /* pch_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BA62485758300FDD115 /* pch_source.cpp */; };
+		A9765E022485758500FDD115 /* pch_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BA62485758300FDD115 /* pch_source.cpp */; };
+		A9765E032485758500FDD115 /* parse_number.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BA82485758300FDD115 /* parse_number.h */; };
+		A9765E042485758500FDD115 /* parse_number.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BA82485758300FDD115 /* parse_number.h */; };
+		A9765E052485758500FDD115 /* ilist_node.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BA92485758300FDD115 /* ilist_node.h */; };
+		A9765E062485758500FDD115 /* ilist_node.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BA92485758300FDD115 /* ilist_node.h */; };
+		A9765E072485758500FDD115 /* make_unique.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BAA2485758300FDD115 /* make_unique.h */; };
+		A9765E082485758500FDD115 /* make_unique.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BAA2485758300FDD115 /* make_unique.h */; };
+		A9765E092485758500FDD115 /* string_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BAB2485758300FDD115 /* string_utils.h */; };
+		A9765E0A2485758500FDD115 /* string_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BAB2485758300FDD115 /* string_utils.h */; };
+		A9765E0B2485758500FDD115 /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BAC2485758300FDD115 /* small_vector.h */; };
+		A9765E0C2485758500FDD115 /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BAC2485758300FDD115 /* small_vector.h */; };
+		A9765E0D2485758500FDD115 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BAD2485758300FDD115 /* timer.cpp */; };
+		A9765E0E2485758500FDD115 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BAD2485758300FDD115 /* timer.cpp */; };
+		A9765E0F2485758500FDD115 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BAE2485758300FDD115 /* timer.h */; };
+		A9765E102485758500FDD115 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BAE2485758300FDD115 /* timer.h */; };
+		A9765E112485758500FDD115 /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BAF2485758300FDD115 /* string_utils.cpp */; };
+		A9765E122485758500FDD115 /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BAF2485758300FDD115 /* string_utils.cpp */; };
+		A9765E132485758500FDD115 /* bit_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BB02485758300FDD115 /* bit_vector.h */; };
+		A9765E142485758500FDD115 /* bit_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BB02485758300FDD115 /* bit_vector.h */; };
+		A9765E152485758500FDD115 /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BB12485758300FDD115 /* bitutils.h */; };
+		A9765E162485758500FDD115 /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BB12485758300FDD115 /* bitutils.h */; };
+		A9765E172485758500FDD115 /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BB22485758300FDD115 /* hex_float.h */; };
+		A9765E182485758500FDD115 /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BB22485758300FDD115 /* hex_float.h */; };
+		A9765E192485758500FDD115 /* parse_number.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BB32485758300FDD115 /* parse_number.cpp */; };
+		A9765E1A2485758500FDD115 /* parse_number.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BB32485758300FDD115 /* parse_number.cpp */; };
+		A9765E1B2485758500FDD115 /* bit_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BB42485758300FDD115 /* bit_vector.cpp */; };
+		A9765E1C2485758500FDD115 /* bit_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BB42485758300FDD115 /* bit_vector.cpp */; };
+		A9765E1D2485758500FDD115 /* ilist.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BB52485758300FDD115 /* ilist.h */; };
+		A9765E1E2485758500FDD115 /* ilist.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BB52485758300FDD115 /* ilist.h */; };
+		A9765E1F2485758500FDD115 /* spirv_target_env.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BB62485758300FDD115 /* spirv_target_env.h */; };
+		A9765E202485758500FDD115 /* spirv_target_env.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BB62485758300FDD115 /* spirv_target_env.h */; };
+		A9765E212485758500FDD115 /* table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BB72485758300FDD115 /* table.cpp */; };
+		A9765E222485758500FDD115 /* table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BB72485758300FDD115 /* table.cpp */; };
+		A9765E232485758500FDD115 /* operand_to_undef_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BBA2485758300FDD115 /* operand_to_undef_reduction_opportunity_finder.h */; };
+		A9765E242485758500FDD115 /* operand_to_undef_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BBA2485758300FDD115 /* operand_to_undef_reduction_opportunity_finder.h */; };
+		A9765E252485758500FDD115 /* remove_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BBB2485758300FDD115 /* remove_selection_reduction_opportunity.cpp */; };
+		A9765E262485758500FDD115 /* remove_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BBB2485758300FDD115 /* remove_selection_reduction_opportunity.cpp */; };
+		A9765E272485758500FDD115 /* remove_block_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BBC2485758300FDD115 /* remove_block_reduction_opportunity.h */; };
+		A9765E282485758500FDD115 /* remove_block_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BBC2485758300FDD115 /* remove_block_reduction_opportunity.h */; };
+		A9765E292485758500FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BBD2485758300FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.h */; };
+		A9765E2A2485758500FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BBD2485758300FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.h */; };
+		A9765E2B2485758500FDD115 /* reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BBE2485758300FDD115 /* reduction_pass.cpp */; };
+		A9765E2C2485758500FDD115 /* reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BBE2485758300FDD115 /* reduction_pass.cpp */; };
+		A9765E2D2485758500FDD115 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BBF2485758300FDD115 /* operand_to_const_reduction_opportunity_finder.cpp */; };
+		A9765E2E2485758500FDD115 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BBF2485758300FDD115 /* operand_to_const_reduction_opportunity_finder.cpp */; };
+		A9765E2F2485758500FDD115 /* operand_to_const_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BC02485758300FDD115 /* operand_to_const_reduction_opportunity_finder.h */; };
+		A9765E302485758500FDD115 /* operand_to_const_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BC02485758300FDD115 /* operand_to_const_reduction_opportunity_finder.h */; };
+		A9765E312485758500FDD115 /* reduction_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BC22485758300FDD115 /* reduction_util.cpp */; };
+		A9765E322485758500FDD115 /* reduction_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BC22485758300FDD115 /* reduction_util.cpp */; };
+		A9765E332485758500FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BC32485758300FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */; };
+		A9765E342485758500FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BC32485758300FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */; };
+		A9765E352485758500FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BC42485758300FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.h */; };
+		A9765E362485758500FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BC42485758300FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.h */; };
+		A9765E372485758500FDD115 /* remove_function_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BC52485758300FDD115 /* remove_function_reduction_opportunity_finder.cpp */; };
+		A9765E382485758500FDD115 /* remove_function_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BC52485758300FDD115 /* remove_function_reduction_opportunity_finder.cpp */; };
+		A9765E392485758500FDD115 /* remove_instruction_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BC62485758300FDD115 /* remove_instruction_reduction_opportunity.h */; };
+		A9765E3A2485758500FDD115 /* remove_instruction_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BC62485758300FDD115 /* remove_instruction_reduction_opportunity.h */; };
+		A9765E3B2485758500FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BC72485758300FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */; };
+		A9765E3C2485758500FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BC72485758300FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */; };
+		A9765E3D2485758500FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BC82485758300FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */; };
+		A9765E3E2485758500FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BC82485758300FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */; };
+		A9765E3F2485758500FDD115 /* remove_function_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BC92485758300FDD115 /* remove_function_reduction_opportunity.cpp */; };
+		A9765E402485758500FDD115 /* remove_function_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BC92485758300FDD115 /* remove_function_reduction_opportunity.cpp */; };
+		A9765E412485758500FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BCA2485758300FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */; };
+		A9765E422485758500FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BCA2485758300FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */; };
+		A9765E432485758500FDD115 /* remove_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BCB2485758300FDD115 /* remove_selection_reduction_opportunity_finder.cpp */; };
+		A9765E442485758600FDD115 /* remove_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BCB2485758300FDD115 /* remove_selection_reduction_opportunity_finder.cpp */; };
+		A9765E452485758600FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BCC2485758300FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */; };
+		A9765E462485758600FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BCC2485758300FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */; };
+		A9765E472485758600FDD115 /* remove_struct_member_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BCD2485758300FDD115 /* remove_struct_member_reduction_opportunity.h */; };
+		A9765E482485758600FDD115 /* remove_struct_member_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BCD2485758300FDD115 /* remove_struct_member_reduction_opportunity.h */; };
+		A9765E492485758600FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BCE2485758300FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.h */; };
+		A9765E4A2485758600FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BCE2485758300FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.h */; };
+		A9765E4B2485758600FDD115 /* merge_blocks_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BCF2485758300FDD115 /* merge_blocks_reduction_opportunity.cpp */; };
+		A9765E4C2485758600FDD115 /* merge_blocks_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BCF2485758300FDD115 /* merge_blocks_reduction_opportunity.cpp */; };
+		A9765E4D2485758600FDD115 /* change_operand_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BD02485758300FDD115 /* change_operand_reduction_opportunity.cpp */; };
+		A9765E4E2485758600FDD115 /* change_operand_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BD02485758300FDD115 /* change_operand_reduction_opportunity.cpp */; };
+		A9765E4F2485758600FDD115 /* structured_loop_to_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD12485758300FDD115 /* structured_loop_to_selection_reduction_opportunity.h */; };
+		A9765E502485758600FDD115 /* structured_loop_to_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD12485758300FDD115 /* structured_loop_to_selection_reduction_opportunity.h */; };
+		A9765E512485758600FDD115 /* remove_function_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD22485758300FDD115 /* remove_function_reduction_opportunity.h */; };
+		A9765E522485758600FDD115 /* remove_function_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD22485758300FDD115 /* remove_function_reduction_opportunity.h */; };
+		A9765E532485758600FDD115 /* remove_unused_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD32485758300FDD115 /* remove_unused_instruction_reduction_opportunity_finder.h */; };
+		A9765E542485758600FDD115 /* remove_unused_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD32485758300FDD115 /* remove_unused_instruction_reduction_opportunity_finder.h */; };
+		A9765E552485758600FDD115 /* change_operand_to_undef_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD42485758300FDD115 /* change_operand_to_undef_reduction_opportunity.h */; };
+		A9765E562485758600FDD115 /* change_operand_to_undef_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD42485758300FDD115 /* change_operand_to_undef_reduction_opportunity.h */; };
+		A9765E572485758600FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD52485758300FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.h */; };
+		A9765E582485758600FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD52485758300FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.h */; };
+		A9765E592485758600FDD115 /* remove_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD62485758300FDD115 /* remove_selection_reduction_opportunity.h */; };
+		A9765E5A2485758600FDD115 /* remove_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD62485758300FDD115 /* remove_selection_reduction_opportunity.h */; };
+		A9765E5B2485758600FDD115 /* remove_instruction_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BD72485758300FDD115 /* remove_instruction_reduction_opportunity.cpp */; };
+		A9765E5C2485758600FDD115 /* remove_instruction_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BD72485758300FDD115 /* remove_instruction_reduction_opportunity.cpp */; };
+		A9765E5D2485758600FDD115 /* remove_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD82485758300FDD115 /* remove_selection_reduction_opportunity_finder.h */; };
+		A9765E5E2485758600FDD115 /* remove_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD82485758300FDD115 /* remove_selection_reduction_opportunity_finder.h */; };
+		A9765E5F2485758600FDD115 /* merge_blocks_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD92485758300FDD115 /* merge_blocks_reduction_opportunity_finder.h */; };
+		A9765E602485758600FDD115 /* merge_blocks_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BD92485758300FDD115 /* merge_blocks_reduction_opportunity_finder.h */; };
+		A9765E612485758600FDD115 /* pch_source_reduce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BDA2485758300FDD115 /* pch_source_reduce.cpp */; };
+		A9765E622485758600FDD115 /* pch_source_reduce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BDA2485758300FDD115 /* pch_source_reduce.cpp */; };
+		A9765E632485758600FDD115 /* remove_struct_member_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BDB2485758300FDD115 /* remove_struct_member_reduction_opportunity.cpp */; };
+		A9765E642485758600FDD115 /* remove_struct_member_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BDB2485758300FDD115 /* remove_struct_member_reduction_opportunity.cpp */; };
+		A9765E652485758600FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BDC2485758300FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.h */; };
+		A9765E662485758600FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BDC2485758300FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.h */; };
+		A9765E672485758600FDD115 /* remove_unused_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BDD2485758300FDD115 /* remove_unused_instruction_reduction_opportunity_finder.cpp */; };
+		A9765E682485758600FDD115 /* remove_unused_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BDD2485758300FDD115 /* remove_unused_instruction_reduction_opportunity_finder.cpp */; };
+		A9765E692485758600FDD115 /* reducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BDE2485758300FDD115 /* reducer.cpp */; };
+		A9765E6A2485758600FDD115 /* reducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BDE2485758300FDD115 /* reducer.cpp */; };
+		A9765E6B2485758600FDD115 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BDF2485758300FDD115 /* operand_to_undef_reduction_opportunity_finder.cpp */; };
+		A9765E6C2485758600FDD115 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BDF2485758300FDD115 /* operand_to_undef_reduction_opportunity_finder.cpp */; };
+		A9765E6D2485758600FDD115 /* remove_function_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BE02485758300FDD115 /* remove_function_reduction_opportunity_finder.h */; };
+		A9765E6E2485758600FDD115 /* remove_function_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BE02485758300FDD115 /* remove_function_reduction_opportunity_finder.h */; };
+		A9765E6F2485758600FDD115 /* pch_source_reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BE12485758300FDD115 /* pch_source_reduce.h */; };
+		A9765E702485758600FDD115 /* pch_source_reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BE12485758300FDD115 /* pch_source_reduce.h */; };
+		A9765E712485758600FDD115 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BE22485758300FDD115 /* merge_blocks_reduction_opportunity_finder.cpp */; };
+		A9765E722485758600FDD115 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BE22485758300FDD115 /* merge_blocks_reduction_opportunity_finder.cpp */; };
+		A9765E732485758600FDD115 /* reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BE32485758300FDD115 /* reduction_opportunity.cpp */; };
+		A9765E742485758600FDD115 /* reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BE32485758300FDD115 /* reduction_opportunity.cpp */; };
+		A9765E752485758600FDD115 /* reducer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BE42485758300FDD115 /* reducer.h */; };
+		A9765E762485758600FDD115 /* reducer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BE42485758300FDD115 /* reducer.h */; };
+		A9765E772485758600FDD115 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BE52485758300FDD115 /* change_operand_to_undef_reduction_opportunity.cpp */; };
+		A9765E782485758600FDD115 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BE52485758300FDD115 /* change_operand_to_undef_reduction_opportunity.cpp */; };
+		A9765E792485758600FDD115 /* reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BE62485758300FDD115 /* reduction_opportunity.h */; };
+		A9765E7A2485758600FDD115 /* reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BE62485758300FDD115 /* reduction_opportunity.h */; };
+		A9765E7B2485758600FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BE72485758300FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */; };
+		A9765E7C2485758600FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BE72485758300FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */; };
+		A9765E7D2485758600FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BE82485758300FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */; };
+		A9765E7E2485758600FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BE82485758300FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */; };
+		A9765E7F2485758600FDD115 /* reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BE92485758300FDD115 /* reduction_opportunity_finder.h */; };
+		A9765E802485758600FDD115 /* reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BE92485758300FDD115 /* reduction_opportunity_finder.h */; };
+		A9765E812485758600FDD115 /* change_operand_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BEA2485758300FDD115 /* change_operand_reduction_opportunity.h */; };
+		A9765E822485758600FDD115 /* change_operand_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BEA2485758300FDD115 /* change_operand_reduction_opportunity.h */; };
+		A9765E832485758600FDD115 /* remove_block_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BEB2485758300FDD115 /* remove_block_reduction_opportunity_finder.h */; };
+		A9765E842485758600FDD115 /* remove_block_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BEB2485758300FDD115 /* remove_block_reduction_opportunity_finder.h */; };
+		A9765E852485758600FDD115 /* remove_block_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BEC2485758300FDD115 /* remove_block_reduction_opportunity_finder.cpp */; };
+		A9765E862485758600FDD115 /* remove_block_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BEC2485758300FDD115 /* remove_block_reduction_opportunity_finder.cpp */; };
+		A9765E872485758600FDD115 /* reduction_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BED2485758300FDD115 /* reduction_util.h */; };
+		A9765E882485758600FDD115 /* reduction_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BED2485758300FDD115 /* reduction_util.h */; };
+		A9765E892485758600FDD115 /* merge_blocks_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BEE2485758300FDD115 /* merge_blocks_reduction_opportunity.h */; };
+		A9765E8A2485758600FDD115 /* merge_blocks_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BEE2485758300FDD115 /* merge_blocks_reduction_opportunity.h */; };
+		A9765E8B2485758600FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BEF2485758300FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */; };
+		A9765E8C2485758600FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BEF2485758300FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */; };
+		A9765E8D2485758600FDD115 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BF02485758300FDD115 /* structured_loop_to_selection_reduction_opportunity.cpp */; };
+		A9765E8E2485758600FDD115 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BF02485758300FDD115 /* structured_loop_to_selection_reduction_opportunity.cpp */; };
+		A9765E8F2485758600FDD115 /* remove_block_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BF12485758300FDD115 /* remove_block_reduction_opportunity.cpp */; };
+		A9765E902485758600FDD115 /* remove_block_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BF12485758300FDD115 /* remove_block_reduction_opportunity.cpp */; };
+		A9765E912485758600FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BF22485758300FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.cpp */; };
+		A9765E922485758600FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BF22485758300FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.cpp */; };
+		A9765E932485758600FDD115 /* reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BF32485758300FDD115 /* reduction_pass.h */; };
+		A9765E942485758600FDD115 /* reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BF32485758300FDD115 /* reduction_pass.h */; };
+		A9765E952485758600FDD115 /* latest_version_opencl_std_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BF42485758300FDD115 /* latest_version_opencl_std_header.h */; };
+		A9765E962485758600FDD115 /* latest_version_opencl_std_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BF42485758300FDD115 /* latest_version_opencl_std_header.h */; };
+		A9765E972485758600FDD115 /* spirv_optimizer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BF52485758300FDD115 /* spirv_optimizer_options.cpp */; };
+		A9765E982485758600FDD115 /* spirv_optimizer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BF52485758300FDD115 /* spirv_optimizer_options.cpp */; };
+		A9765E992485758600FDD115 /* cfa.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BF62485758300FDD115 /* cfa.h */; };
+		A9765E9A2485758600FDD115 /* cfa.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BF62485758300FDD115 /* cfa.h */; };
+		A9765E9B2485758600FDD115 /* pch_source.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BF72485758300FDD115 /* pch_source.h */; };
+		A9765E9C2485758600FDD115 /* pch_source.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BF72485758300FDD115 /* pch_source.h */; };
+		A9765E9D2485758600FDD115 /* enum_string_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BF82485758300FDD115 /* enum_string_mapping.h */; };
+		A9765E9E2485758600FDD115 /* enum_string_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BF82485758300FDD115 /* enum_string_mapping.h */; };
+		A9765E9F2485758600FDD115 /* spirv_fuzzer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BF92485758300FDD115 /* spirv_fuzzer_options.cpp */; };
+		A9765EA02485758600FDD115 /* spirv_fuzzer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BF92485758300FDD115 /* spirv_fuzzer_options.cpp */; };
+		A9765EA12485758600FDD115 /* spirv_reducer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BFA2485758300FDD115 /* spirv_reducer_options.h */; };
+		A9765EA22485758600FDD115 /* spirv_reducer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BFA2485758300FDD115 /* spirv_reducer_options.h */; };
+		A9765EA32485758600FDD115 /* spirv_validator_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BFB2485758300FDD115 /* spirv_validator_options.cpp */; };
+		A9765EA42485758600FDD115 /* spirv_validator_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BFB2485758300FDD115 /* spirv_validator_options.cpp */; };
+		A9765EA52485758600FDD115 /* print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BFD2485758300FDD115 /* print.cpp */; };
+		A9765EA62485758600FDD115 /* print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765BFD2485758300FDD115 /* print.cpp */; };
+		A9765EA72485758600FDD115 /* spirv_definition.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BFE2485758300FDD115 /* spirv_definition.h */; };
+		A9765EA82485758600FDD115 /* spirv_definition.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BFE2485758300FDD115 /* spirv_definition.h */; };
+		A9765EA92485758600FDD115 /* operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BFF2485758300FDD115 /* operand.h */; };
+		A9765EAA2485758600FDD115 /* operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765BFF2485758300FDD115 /* operand.h */; };
+		A9765EAB2485758600FDD115 /* spirv_endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C002485758300FDD115 /* spirv_endian.cpp */; };
+		A9765EAC2485758600FDD115 /* spirv_endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C002485758300FDD115 /* spirv_endian.cpp */; };
+		A9765EAD2485758600FDD115 /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C012485758300FDD115 /* macro.h */; };
+		A9765EAE2485758600FDD115 /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C012485758300FDD115 /* macro.h */; };
+		A9765EAF2485758600FDD115 /* spirv_constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C022485758300FDD115 /* spirv_constant.h */; };
+		A9765EB02485758600FDD115 /* spirv_constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C022485758300FDD115 /* spirv_constant.h */; };
+		A9765EB12485758600FDD115 /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C042485758300FDD115 /* binary.cpp */; };
+		A9765EB22485758600FDD115 /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C042485758300FDD115 /* binary.cpp */; };
+		A9765EB32485758600FDD115 /* spirv_validator_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C052485758300FDD115 /* spirv_validator_options.h */; };
+		A9765EB42485758600FDD115 /* spirv_validator_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C052485758300FDD115 /* spirv_validator_options.h */; };
+		A9765EB52485758600FDD115 /* enum_string_mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C062485758300FDD115 /* enum_string_mapping.cpp */; };
+		A9765EB62485758600FDD115 /* enum_string_mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C062485758300FDD115 /* enum_string_mapping.cpp */; };
+		A9765EB72485758600FDD115 /* text_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C072485758300FDD115 /* text_handler.h */; };
+		A9765EB82485758600FDD115 /* text_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C072485758300FDD115 /* text_handler.h */; };
+		A9765EB92485758600FDD115 /* parsed_operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C082485758300FDD115 /* parsed_operand.h */; };
+		A9765EBA2485758600FDD115 /* parsed_operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C082485758300FDD115 /* parsed_operand.h */; };
+		A9765EBB2485758600FDD115 /* name_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C092485758300FDD115 /* name_mapper.h */; };
+		A9765EBC2485758600FDD115 /* name_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C092485758300FDD115 /* name_mapper.h */; };
+		A9765EBD2485758600FDD115 /* spirv_reducer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C0A2485758300FDD115 /* spirv_reducer_options.cpp */; };
+		A9765EBE2485758600FDD115 /* spirv_reducer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C0A2485758300FDD115 /* spirv_reducer_options.cpp */; };
+		A9765EBF2485758600FDD115 /* parsed_operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C0B2485758300FDD115 /* parsed_operand.cpp */; };
+		A9765EC02485758600FDD115 /* parsed_operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C0B2485758300FDD115 /* parsed_operand.cpp */; };
+		A9765EC12485758600FDD115 /* diagnostic.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C0C2485758300FDD115 /* diagnostic.h */; };
+		A9765EC22485758600FDD115 /* diagnostic.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C0C2485758300FDD115 /* diagnostic.h */; };
+		A9765EC32485758600FDD115 /* spirv_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C0D2485758300FDD115 /* spirv_endian.h */; };
+		A9765EC42485758600FDD115 /* spirv_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C0D2485758300FDD115 /* spirv_endian.h */; };
+		A9765EC52485758600FDD115 /* name_mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C0E2485758300FDD115 /* name_mapper.cpp */; };
+		A9765EC62485758600FDD115 /* name_mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C0E2485758300FDD115 /* name_mapper.cpp */; };
+		A9765EC72485758600FDD115 /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C122485758300FDD115 /* linker.cpp */; };
+		A9765EC82485758600FDD115 /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C122485758300FDD115 /* linker.cpp */; };
+		A9765EC92485758600FDD115 /* software_version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C132485758300FDD115 /* software_version.cpp */; };
+		A9765ECA2485758600FDD115 /* software_version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C132485758300FDD115 /* software_version.cpp */; };
+		A9765ECB2485758600FDD115 /* opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C142485758300FDD115 /* opcode.cpp */; };
+		A9765ECC2485758600FDD115 /* opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C142485758300FDD115 /* opcode.cpp */; };
+		A9765ECD2485758600FDD115 /* print.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C152485758300FDD115 /* print.h */; };
+		A9765ECE2485758600FDD115 /* print.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C152485758300FDD115 /* print.h */; };
+		A9765ECF2485758600FDD115 /* ext_inst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C162485758300FDD115 /* ext_inst.cpp */; };
+		A9765ED02485758600FDD115 /* ext_inst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C162485758300FDD115 /* ext_inst.cpp */; };
+		A9765ED12485758600FDD115 /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C172485758300FDD115 /* disassemble.h */; };
+		A9765ED22485758600FDD115 /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C172485758300FDD115 /* disassemble.h */; };
+		A9765ED32485758600FDD115 /* optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C192485758300FDD115 /* optimizer.cpp */; };
+		A9765ED42485758600FDD115 /* optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C192485758300FDD115 /* optimizer.cpp */; };
+		A9765ED52485758600FDD115 /* if_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C1A2485758300FDD115 /* if_conversion.h */; };
+		A9765ED62485758600FDD115 /* if_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C1A2485758300FDD115 /* if_conversion.h */; };
+		A9765ED72485758600FDD115 /* register_pressure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C1B2485758300FDD115 /* register_pressure.cpp */; };
+		A9765ED82485758600FDD115 /* register_pressure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C1B2485758300FDD115 /* register_pressure.cpp */; };
+		A9765ED92485758600FDD115 /* loop_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C1C2485758300FDD115 /* loop_utils.cpp */; };
+		A9765EDA2485758600FDD115 /* loop_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C1C2485758300FDD115 /* loop_utils.cpp */; };
+		A9765EDB2485758600FDD115 /* merge_return_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C1D2485758300FDD115 /* merge_return_pass.h */; };
+		A9765EDC2485758600FDD115 /* merge_return_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C1D2485758300FDD115 /* merge_return_pass.h */; };
+		A9765EDD2485758600FDD115 /* inline_opaque_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C1E2485758300FDD115 /* inline_opaque_pass.h */; };
+		A9765EDE2485758600FDD115 /* inline_opaque_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C1E2485758300FDD115 /* inline_opaque_pass.h */; };
+		A9765EDF2485758600FDD115 /* loop_fusion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C1F2485758300FDD115 /* loop_fusion.h */; };
+		A9765EE02485758600FDD115 /* loop_fusion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C1F2485758300FDD115 /* loop_fusion.h */; };
+		A9765EE12485758600FDD115 /* combine_access_chains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C202485758300FDD115 /* combine_access_chains.cpp */; };
+		A9765EE22485758600FDD115 /* combine_access_chains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C202485758300FDD115 /* combine_access_chains.cpp */; };
+		A9765EE32485758600FDD115 /* build_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C212485758300FDD115 /* build_module.cpp */; };
+		A9765EE42485758600FDD115 /* build_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C212485758300FDD115 /* build_module.cpp */; };
+		A9765EE52485758600FDD115 /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C222485758300FDD115 /* composite.h */; };
+		A9765EE62485758600FDD115 /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C222485758300FDD115 /* composite.h */; };
+		A9765EE72485758600FDD115 /* compact_ids_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C232485758300FDD115 /* compact_ids_pass.h */; };
+		A9765EE82485758600FDD115 /* compact_ids_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C232485758300FDD115 /* compact_ids_pass.h */; };
+		A9765EE92485758600FDD115 /* register_pressure.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C242485758300FDD115 /* register_pressure.h */; };
+		A9765EEA2485758600FDD115 /* register_pressure.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C242485758300FDD115 /* register_pressure.h */; };
+		A9765EEB2485758600FDD115 /* tree_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C252485758300FDD115 /* tree_iterator.h */; };
+		A9765EEC2485758600FDD115 /* tree_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C252485758300FDD115 /* tree_iterator.h */; };
+		A9765EED2485758600FDD115 /* graphics_robust_access_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C262485758300FDD115 /* graphics_robust_access_pass.h */; };
+		A9765EEE2485758600FDD115 /* graphics_robust_access_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C262485758300FDD115 /* graphics_robust_access_pass.h */; };
+		A9765EEF2485758600FDD115 /* strip_atomic_counter_memory_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C272485758300FDD115 /* strip_atomic_counter_memory_pass.h */; };
+		A9765EF02485758600FDD115 /* strip_atomic_counter_memory_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C272485758300FDD115 /* strip_atomic_counter_memory_pass.h */; };
+		A9765EF12485758600FDD115 /* legalize_vector_shuffle_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C282485758300FDD115 /* legalize_vector_shuffle_pass.h */; };
+		A9765EF22485758600FDD115 /* legalize_vector_shuffle_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C282485758300FDD115 /* legalize_vector_shuffle_pass.h */; };
+		A9765EF32485758600FDD115 /* local_single_store_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C292485758300FDD115 /* local_single_store_elim_pass.h */; };
+		A9765EF42485758600FDD115 /* local_single_store_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C292485758300FDD115 /* local_single_store_elim_pass.h */; };
+		A9765EF52485758600FDD115 /* reduce_load_size.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C2A2485758300FDD115 /* reduce_load_size.h */; };
+		A9765EF62485758600FDD115 /* reduce_load_size.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C2A2485758300FDD115 /* reduce_load_size.h */; };
+		A9765EF72485758600FDD115 /* code_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C2B2485758300FDD115 /* code_sink.cpp */; };
+		A9765EF82485758600FDD115 /* code_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C2B2485758300FDD115 /* code_sink.cpp */; };
+		A9765EF92485758600FDD115 /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C2C2485758300FDD115 /* types.cpp */; };
+		A9765EFA2485758600FDD115 /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C2C2485758300FDD115 /* types.cpp */; };
+		A9765EFB2485758600FDD115 /* scalar_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C2D2485758300FDD115 /* scalar_analysis.h */; };
+		A9765EFC2485758600FDD115 /* scalar_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C2D2485758300FDD115 /* scalar_analysis.h */; };
+		A9765EFD2485758600FDD115 /* strip_debug_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C2E2485758300FDD115 /* strip_debug_info_pass.h */; };
+		A9765EFE2485758600FDD115 /* strip_debug_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C2E2485758300FDD115 /* strip_debug_info_pass.h */; };
+		A9765EFF2485758600FDD115 /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C2F2485758300FDD115 /* cfg.cpp */; };
+		A9765F002485758600FDD115 /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C2F2485758300FDD115 /* cfg.cpp */; };
+		A9765F012485758600FDD115 /* strip_atomic_counter_memory_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C302485758300FDD115 /* strip_atomic_counter_memory_pass.cpp */; };
+		A9765F022485758600FDD115 /* strip_atomic_counter_memory_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C302485758300FDD115 /* strip_atomic_counter_memory_pass.cpp */; };
+		A9765F032485758600FDD115 /* decoration_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C312485758300FDD115 /* decoration_manager.cpp */; };
+		A9765F042485758600FDD115 /* decoration_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C312485758300FDD115 /* decoration_manager.cpp */; };
+		A9765F052485758600FDD115 /* local_single_block_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C322485758300FDD115 /* local_single_block_elim_pass.cpp */; };
+		A9765F062485758600FDD115 /* local_single_block_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C322485758300FDD115 /* local_single_block_elim_pass.cpp */; };
+		A9765F072485758600FDD115 /* freeze_spec_constant_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C332485758300FDD115 /* freeze_spec_constant_value_pass.cpp */; };
+		A9765F082485758600FDD115 /* freeze_spec_constant_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C332485758300FDD115 /* freeze_spec_constant_value_pass.cpp */; };
+		A9765F092485758600FDD115 /* replace_invalid_opc.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C342485758300FDD115 /* replace_invalid_opc.h */; };
+		A9765F0A2485758600FDD115 /* replace_invalid_opc.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C342485758300FDD115 /* replace_invalid_opc.h */; };
+		A9765F0B2485758600FDD115 /* local_access_chain_convert_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C352485758300FDD115 /* local_access_chain_convert_pass.h */; };
+		A9765F0C2485758600FDD115 /* local_access_chain_convert_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C352485758300FDD115 /* local_access_chain_convert_pass.h */; };
+		A9765F0D2485758600FDD115 /* inst_bindless_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C362485758300FDD115 /* inst_bindless_check_pass.cpp */; };
+		A9765F0E2485758600FDD115 /* inst_bindless_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C362485758300FDD115 /* inst_bindless_check_pass.cpp */; };
+		A9765F0F2485758600FDD115 /* local_redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C372485758300FDD115 /* local_redundancy_elimination.cpp */; };
+		A9765F102485758600FDD115 /* local_redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C372485758300FDD115 /* local_redundancy_elimination.cpp */; };
+		A9765F112485758600FDD115 /* instrument_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C392485758300FDD115 /* instrument_pass.cpp */; };
+		A9765F122485758600FDD115 /* instrument_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C392485758300FDD115 /* instrument_pass.cpp */; };
+		A9765F132485758600FDD115 /* propagator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C3A2485758300FDD115 /* propagator.h */; };
+		A9765F142485758600FDD115 /* propagator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C3A2485758300FDD115 /* propagator.h */; };
+		A9765F152485758600FDD115 /* instruction_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C3B2485758300FDD115 /* instruction_list.h */; };
+		A9765F162485758600FDD115 /* instruction_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C3B2485758300FDD115 /* instruction_list.h */; };
+		A9765F172485758600FDD115 /* feature_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C3C2485758300FDD115 /* feature_manager.cpp */; };
+		A9765F182485758600FDD115 /* feature_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C3C2485758300FDD115 /* feature_manager.cpp */; };
+		A9765F192485758600FDD115 /* pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C3D2485758300FDD115 /* pass.cpp */; };
+		A9765F1A2485758600FDD115 /* pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C3D2485758300FDD115 /* pass.cpp */; };
+		A9765F1B2485758600FDD115 /* loop_fission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C3E2485758300FDD115 /* loop_fission.cpp */; };
+		A9765F1C2485758600FDD115 /* loop_fission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C3E2485758300FDD115 /* loop_fission.cpp */; };
+		A9765F1D2485758600FDD115 /* dominator_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C3F2485758300FDD115 /* dominator_tree.cpp */; };
+		A9765F1E2485758600FDD115 /* dominator_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C3F2485758300FDD115 /* dominator_tree.cpp */; };
+		A9765F1F2485758600FDD115 /* amd_ext_to_khr.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C402485758300FDD115 /* amd_ext_to_khr.h */; };
+		A9765F202485758600FDD115 /* amd_ext_to_khr.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C402485758300FDD115 /* amd_ext_to_khr.h */; };
+		A9765F212485758600FDD115 /* merge_return_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C412485758300FDD115 /* merge_return_pass.cpp */; };
+		A9765F222485758600FDD115 /* merge_return_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C412485758300FDD115 /* merge_return_pass.cpp */; };
+		A9765F232485758600FDD115 /* ir_context.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C422485758300FDD115 /* ir_context.h */; };
+		A9765F242485758600FDD115 /* ir_context.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C422485758300FDD115 /* ir_context.h */; };
+		A9765F252485758600FDD115 /* eliminate_dead_constant_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C432485758300FDD115 /* eliminate_dead_constant_pass.cpp */; };
+		A9765F262485758600FDD115 /* eliminate_dead_constant_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C432485758300FDD115 /* eliminate_dead_constant_pass.cpp */; };
+		A9765F272485758600FDD115 /* cfg_cleanup_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C442485758300FDD115 /* cfg_cleanup_pass.cpp */; };
+		A9765F282485758600FDD115 /* cfg_cleanup_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C442485758300FDD115 /* cfg_cleanup_pass.cpp */; };
+		A9765F292485758600FDD115 /* wrap_opkill.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C452485758300FDD115 /* wrap_opkill.cpp */; };
+		A9765F2A2485758600FDD115 /* wrap_opkill.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C452485758300FDD115 /* wrap_opkill.cpp */; };
+		A9765F2B2485758600FDD115 /* const_folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C462485758300FDD115 /* const_folding_rules.cpp */; };
+		A9765F2C2485758600FDD115 /* const_folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C462485758300FDD115 /* const_folding_rules.cpp */; };
+		A9765F2D2485758600FDD115 /* loop_unroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C472485758300FDD115 /* loop_unroller.h */; };
+		A9765F2E2485758600FDD115 /* loop_unroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C472485758300FDD115 /* loop_unroller.h */; };
+		A9765F2F2485758600FDD115 /* strip_debug_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C482485758300FDD115 /* strip_debug_info_pass.cpp */; };
+		A9765F302485758600FDD115 /* strip_debug_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C482485758300FDD115 /* strip_debug_info_pass.cpp */; };
+		A9765F312485758600FDD115 /* ssa_rewrite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C492485758300FDD115 /* ssa_rewrite_pass.cpp */; };
+		A9765F322485758600FDD115 /* ssa_rewrite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C492485758300FDD115 /* ssa_rewrite_pass.cpp */; };
+		A9765F332485758600FDD115 /* loop_dependence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C4A2485758300FDD115 /* loop_dependence.cpp */; };
+		A9765F342485758600FDD115 /* loop_dependence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C4A2485758300FDD115 /* loop_dependence.cpp */; };
+		A9765F352485758600FDD115 /* unify_const_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C4B2485758300FDD115 /* unify_const_pass.h */; };
+		A9765F362485758600FDD115 /* unify_const_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C4B2485758300FDD115 /* unify_const_pass.h */; };
+		A9765F372485758600FDD115 /* ir_loader.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C4C2485758300FDD115 /* ir_loader.h */; };
+		A9765F382485758600FDD115 /* ir_loader.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C4C2485758300FDD115 /* ir_loader.h */; };
+		A9765F392485758600FDD115 /* inst_debug_printf_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C4D2485758300FDD115 /* inst_debug_printf_pass.cpp */; };
+		A9765F3A2485758600FDD115 /* inst_debug_printf_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C4D2485758300FDD115 /* inst_debug_printf_pass.cpp */; };
+		A9765F3B2485758600FDD115 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C4E2485758300FDD115 /* types.h */; };
+		A9765F3C2485758600FDD115 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C4E2485758300FDD115 /* types.h */; };
+		A9765F3D2485758600FDD115 /* fold_spec_constant_op_and_composite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C4F2485758300FDD115 /* fold_spec_constant_op_and_composite_pass.h */; };
+		A9765F3E2485758600FDD115 /* fold_spec_constant_op_and_composite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C4F2485758300FDD115 /* fold_spec_constant_op_and_composite_pass.h */; };
+		A9765F3F2485758600FDD115 /* mem_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C502485758300FDD115 /* mem_pass.cpp */; };
+		A9765F402485758600FDD115 /* mem_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C502485758300FDD115 /* mem_pass.cpp */; };
+		A9765F412485758600FDD115 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C512485758300FDD115 /* basic_block.h */; };
+		A9765F422485758600FDD115 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C512485758300FDD115 /* basic_block.h */; };
+		A9765F432485758600FDD115 /* remove_duplicates_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C522485758300FDD115 /* remove_duplicates_pass.cpp */; };
+		A9765F442485758600FDD115 /* remove_duplicates_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C522485758300FDD115 /* remove_duplicates_pass.cpp */; };
+		A9765F452485758600FDD115 /* dead_variable_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C532485758300FDD115 /* dead_variable_elimination.cpp */; };
+		A9765F462485758600FDD115 /* dead_variable_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C532485758300FDD115 /* dead_variable_elimination.cpp */; };
+		A9765F472485758600FDD115 /* block_merge_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C542485758300FDD115 /* block_merge_pass.h */; };
+		A9765F482485758600FDD115 /* block_merge_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C542485758300FDD115 /* block_merge_pass.h */; };
+		A9765F492485758600FDD115 /* module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C552485758400FDD115 /* module.cpp */; };
+		A9765F4A2485758600FDD115 /* module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C552485758400FDD115 /* module.cpp */; };
+		A9765F4B2485758600FDD115 /* debug_info_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C562485758400FDD115 /* debug_info_manager.h */; };
+		A9765F4C2485758600FDD115 /* debug_info_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C562485758400FDD115 /* debug_info_manager.h */; };
+		A9765F4D2485758600FDD115 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C572485758400FDD115 /* fold_spec_constant_op_and_composite_pass.cpp */; };
+		A9765F4E2485758600FDD115 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C572485758400FDD115 /* fold_spec_constant_op_and_composite_pass.cpp */; };
+		A9765F4F2485758600FDD115 /* loop_unswitch_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C582485758400FDD115 /* loop_unswitch_pass.cpp */; };
+		A9765F502485758600FDD115 /* loop_unswitch_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C582485758400FDD115 /* loop_unswitch_pass.cpp */; };
+		A9765F512485758600FDD115 /* unify_const_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C592485758400FDD115 /* unify_const_pass.cpp */; };
+		A9765F522485758600FDD115 /* unify_const_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C592485758400FDD115 /* unify_const_pass.cpp */; };
+		A9765F532485758600FDD115 /* type_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C5A2485758400FDD115 /* type_manager.cpp */; };
+		A9765F542485758600FDD115 /* type_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C5A2485758400FDD115 /* type_manager.cpp */; };
+		A9765F552485758600FDD115 /* generate_webgpu_initializers_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C5B2485758400FDD115 /* generate_webgpu_initializers_pass.cpp */; };
+		A9765F562485758600FDD115 /* generate_webgpu_initializers_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C5B2485758400FDD115 /* generate_webgpu_initializers_pass.cpp */; };
+		A9765F572485758600FDD115 /* private_to_local_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C5C2485758400FDD115 /* private_to_local_pass.h */; };
+		A9765F582485758600FDD115 /* private_to_local_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C5C2485758400FDD115 /* private_to_local_pass.h */; };
+		A9765F592485758600FDD115 /* convert_to_half_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C5D2485758400FDD115 /* convert_to_half_pass.h */; };
+		A9765F5A2485758600FDD115 /* convert_to_half_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C5D2485758400FDD115 /* convert_to_half_pass.h */; };
+		A9765F5B2485758600FDD115 /* relax_float_ops_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C5E2485758400FDD115 /* relax_float_ops_pass.h */; };
+		A9765F5C2485758600FDD115 /* relax_float_ops_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C5E2485758400FDD115 /* relax_float_ops_pass.h */; };
+		A9765F5D2485758600FDD115 /* inline_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C5F2485758400FDD115 /* inline_pass.cpp */; };
+		A9765F5E2485758600FDD115 /* inline_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C5F2485758400FDD115 /* inline_pass.cpp */; };
+		A9765F5F2485758600FDD115 /* def_use_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C602485758400FDD115 /* def_use_manager.h */; };
+		A9765F602485758600FDD115 /* def_use_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C602485758400FDD115 /* def_use_manager.h */; };
+		A9765F612485758600FDD115 /* ir_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C612485758400FDD115 /* ir_loader.cpp */; };
+		A9765F622485758600FDD115 /* ir_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C612485758400FDD115 /* ir_loader.cpp */; };
+		A9765F632485758600FDD115 /* cfg_cleanup_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C622485758400FDD115 /* cfg_cleanup_pass.h */; };
+		A9765F642485758600FDD115 /* cfg_cleanup_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C622485758400FDD115 /* cfg_cleanup_pass.h */; };
+		A9765F652485758600FDD115 /* licm_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C632485758400FDD115 /* licm_pass.cpp */; };
+		A9765F662485758600FDD115 /* licm_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C632485758400FDD115 /* licm_pass.cpp */; };
+		A9765F672485758600FDD115 /* eliminate_dead_functions_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C642485758400FDD115 /* eliminate_dead_functions_pass.cpp */; };
+		A9765F682485758600FDD115 /* eliminate_dead_functions_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C642485758400FDD115 /* eliminate_dead_functions_pass.cpp */; };
+		A9765F692485758600FDD115 /* local_redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C652485758400FDD115 /* local_redundancy_elimination.h */; };
+		A9765F6A2485758600FDD115 /* local_redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C652485758400FDD115 /* local_redundancy_elimination.h */; };
+		A9765F6B2485758600FDD115 /* split_invalid_unreachable_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C662485758400FDD115 /* split_invalid_unreachable_pass.cpp */; };
+		A9765F6C2485758600FDD115 /* split_invalid_unreachable_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C662485758400FDD115 /* split_invalid_unreachable_pass.cpp */; };
+		A9765F6D2485758600FDD115 /* loop_peeling.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C672485758400FDD115 /* loop_peeling.h */; };
+		A9765F6E2485758600FDD115 /* loop_peeling.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C672485758400FDD115 /* loop_peeling.h */; };
+		A9765F6F2485758600FDD115 /* vector_dce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C682485758400FDD115 /* vector_dce.cpp */; };
+		A9765F702485758600FDD115 /* vector_dce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C682485758400FDD115 /* vector_dce.cpp */; };
+		A9765F712485758600FDD115 /* block_merge_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C692485758400FDD115 /* block_merge_util.h */; };
+		A9765F722485758600FDD115 /* block_merge_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C692485758400FDD115 /* block_merge_util.h */; };
+		A9765F732485758600FDD115 /* loop_unroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C6A2485758400FDD115 /* loop_unroller.cpp */; };
+		A9765F742485758600FDD115 /* loop_unroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C6A2485758400FDD115 /* loop_unroller.cpp */; };
+		A9765F752485758600FDD115 /* desc_sroa.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C6B2485758400FDD115 /* desc_sroa.h */; };
+		A9765F762485758600FDD115 /* desc_sroa.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C6B2485758400FDD115 /* desc_sroa.h */; };
+		A9765F772485758600FDD115 /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C6C2485758400FDD115 /* constants.cpp */; };
+		A9765F782485758600FDD115 /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C6C2485758400FDD115 /* constants.cpp */; };
+		A9765F792485758600FDD115 /* loop_fusion_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C6D2485758400FDD115 /* loop_fusion_pass.h */; };
+		A9765F7A2485758600FDD115 /* loop_fusion_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C6D2485758400FDD115 /* loop_fusion_pass.h */; };
+		A9765F7B2485758600FDD115 /* struct_cfg_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C6E2485758400FDD115 /* struct_cfg_analysis.h */; };
+		A9765F7C2485758600FDD115 /* struct_cfg_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C6E2485758400FDD115 /* struct_cfg_analysis.h */; };
+		A9765F7D2485758600FDD115 /* inst_buff_addr_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C6F2485758400FDD115 /* inst_buff_addr_check_pass.cpp */; };
+		A9765F7E2485758600FDD115 /* inst_buff_addr_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C6F2485758400FDD115 /* inst_buff_addr_check_pass.cpp */; };
+		A9765F7F2485758600FDD115 /* def_use_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C702485758400FDD115 /* def_use_manager.cpp */; };
+		A9765F802485758600FDD115 /* def_use_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C702485758400FDD115 /* def_use_manager.cpp */; };
+		A9765F812485758600FDD115 /* wrap_opkill.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C712485758400FDD115 /* wrap_opkill.h */; };
+		A9765F822485758600FDD115 /* wrap_opkill.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C712485758400FDD115 /* wrap_opkill.h */; };
+		A9765F832485758600FDD115 /* strip_reflect_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C722485758400FDD115 /* strip_reflect_info_pass.cpp */; };
+		A9765F842485758600FDD115 /* strip_reflect_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C722485758400FDD115 /* strip_reflect_info_pass.cpp */; };
+		A9765F852485758600FDD115 /* decoration_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C732485758400FDD115 /* decoration_manager.h */; };
+		A9765F862485758600FDD115 /* decoration_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C732485758400FDD115 /* decoration_manager.h */; };
+		A9765F872485758600FDD115 /* ccp_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C742485758400FDD115 /* ccp_pass.cpp */; };
+		A9765F882485758600FDD115 /* ccp_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C742485758400FDD115 /* ccp_pass.cpp */; };
+		A9765F892485758600FDD115 /* process_lines_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C752485758400FDD115 /* process_lines_pass.h */; };
+		A9765F8A2485758600FDD115 /* process_lines_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C752485758400FDD115 /* process_lines_pass.h */; };
+		A9765F8B2485758600FDD115 /* local_single_block_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C762485758400FDD115 /* local_single_block_elim_pass.h */; };
+		A9765F8C2485758600FDD115 /* local_single_block_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C762485758400FDD115 /* local_single_block_elim_pass.h */; };
+		A9765F8D2485758600FDD115 /* pch_source_opt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C772485758400FDD115 /* pch_source_opt.cpp */; };
+		A9765F8E2485758600FDD115 /* pch_source_opt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C772485758400FDD115 /* pch_source_opt.cpp */; };
+		A9765F8F2485758600FDD115 /* inst_buff_addr_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C782485758400FDD115 /* inst_buff_addr_check_pass.h */; };
+		A9765F902485758600FDD115 /* inst_buff_addr_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C782485758400FDD115 /* inst_buff_addr_check_pass.h */; };
+		A9765F912485758600FDD115 /* strength_reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C792485758400FDD115 /* strength_reduction_pass.h */; };
+		A9765F922485758600FDD115 /* strength_reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C792485758400FDD115 /* strength_reduction_pass.h */; };
+		A9765F932485758600FDD115 /* aggressive_dead_code_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C7A2485758400FDD115 /* aggressive_dead_code_elim_pass.cpp */; };
+		A9765F942485758600FDD115 /* aggressive_dead_code_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C7A2485758400FDD115 /* aggressive_dead_code_elim_pass.cpp */; };
+		A9765F952485758600FDD115 /* eliminate_dead_functions_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C7B2485758400FDD115 /* eliminate_dead_functions_util.cpp */; };
+		A9765F962485758600FDD115 /* eliminate_dead_functions_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C7B2485758400FDD115 /* eliminate_dead_functions_util.cpp */; };
+		A9765F972485758600FDD115 /* inst_debug_printf_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C7C2485758400FDD115 /* inst_debug_printf_pass.h */; };
+		A9765F982485758600FDD115 /* inst_debug_printf_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C7C2485758400FDD115 /* inst_debug_printf_pass.h */; };
+		A9765F992485758600FDD115 /* simplification_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C7D2485758400FDD115 /* simplification_pass.cpp */; };
+		A9765F9A2485758600FDD115 /* simplification_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C7D2485758400FDD115 /* simplification_pass.cpp */; };
+		A9765F9B2485758600FDD115 /* dead_branch_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C7E2485758400FDD115 /* dead_branch_elim_pass.cpp */; };
+		A9765F9C2485758600FDD115 /* dead_branch_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C7E2485758400FDD115 /* dead_branch_elim_pass.cpp */; };
+		A9765F9D2485758600FDD115 /* flatten_decoration_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C7F2485758400FDD115 /* flatten_decoration_pass.cpp */; };
+		A9765F9E2485758600FDD115 /* flatten_decoration_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C7F2485758400FDD115 /* flatten_decoration_pass.cpp */; };
+		A9765F9F2485758600FDD115 /* dead_insert_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C802485758400FDD115 /* dead_insert_elim_pass.h */; };
+		A9765FA02485758600FDD115 /* dead_insert_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C802485758400FDD115 /* dead_insert_elim_pass.h */; };
+		A9765FA12485758600FDD115 /* folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C812485758400FDD115 /* folding_rules.cpp */; };
+		A9765FA22485758600FDD115 /* folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C812485758400FDD115 /* folding_rules.cpp */; };
+		A9765FA32485758600FDD115 /* freeze_spec_constant_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C822485758400FDD115 /* freeze_spec_constant_value_pass.h */; };
+		A9765FA42485758600FDD115 /* freeze_spec_constant_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C822485758400FDD115 /* freeze_spec_constant_value_pass.h */; };
+		A9765FA52485758600FDD115 /* ir_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C832485758400FDD115 /* ir_context.cpp */; };
+		A9765FA62485758600FDD115 /* ir_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C832485758400FDD115 /* ir_context.cpp */; };
+		A9765FA72485758600FDD115 /* instrument_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C842485758400FDD115 /* instrument_pass.h */; };
+		A9765FA82485758600FDD115 /* instrument_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C842485758400FDD115 /* instrument_pass.h */; };
+		A9765FA92485758600FDD115 /* mem_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C852485758400FDD115 /* mem_pass.h */; };
+		A9765FAA2485758600FDD115 /* mem_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C852485758400FDD115 /* mem_pass.h */; };
+		A9765FAB2485758600FDD115 /* loop_descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C862485758400FDD115 /* loop_descriptor.cpp */; };
+		A9765FAC2485758600FDD115 /* loop_descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C862485758400FDD115 /* loop_descriptor.cpp */; };
+		A9765FAD2485758600FDD115 /* eliminate_dead_members_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C872485758400FDD115 /* eliminate_dead_members_pass.h */; };
+		A9765FAE2485758600FDD115 /* eliminate_dead_members_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C872485758400FDD115 /* eliminate_dead_members_pass.h */; };
+		A9765FAF2485758600FDD115 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C882485758400FDD115 /* function.cpp */; };
+		A9765FB02485758600FDD115 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C882485758400FDD115 /* function.cpp */; };
+		A9765FB12485758600FDD115 /* instruction_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C892485758400FDD115 /* instruction_list.cpp */; };
+		A9765FB22485758600FDD115 /* instruction_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C892485758400FDD115 /* instruction_list.cpp */; };
+		A9765FB32485758600FDD115 /* composite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C8A2485758400FDD115 /* composite.cpp */; };
+		A9765FB42485758600FDD115 /* composite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C8A2485758400FDD115 /* composite.cpp */; };
+		A9765FB52485758600FDD115 /* convert_to_half_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C8B2485758400FDD115 /* convert_to_half_pass.cpp */; };
+		A9765FB62485758600FDD115 /* convert_to_half_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C8B2485758400FDD115 /* convert_to_half_pass.cpp */; };
+		A9765FB72485758600FDD115 /* process_lines_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C8C2485758400FDD115 /* process_lines_pass.cpp */; };
+		A9765FB82485758600FDD115 /* process_lines_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C8C2485758400FDD115 /* process_lines_pass.cpp */; };
+		A9765FB92485758600FDD115 /* inline_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C8D2485758400FDD115 /* inline_pass.h */; };
+		A9765FBA2485758600FDD115 /* inline_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C8D2485758400FDD115 /* inline_pass.h */; };
+		A9765FBB2485758600FDD115 /* loop_dependence.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C8E2485758400FDD115 /* loop_dependence.h */; };
+		A9765FBC2485758600FDD115 /* loop_dependence.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C8E2485758400FDD115 /* loop_dependence.h */; };
+		A9765FBD2485758600FDD115 /* value_number_table.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C8F2485758400FDD115 /* value_number_table.h */; };
+		A9765FBE2485758600FDD115 /* value_number_table.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C8F2485758400FDD115 /* value_number_table.h */; };
+		A9765FBF2485758600FDD115 /* flatten_decoration_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C902485758400FDD115 /* flatten_decoration_pass.h */; };
+		A9765FC02485758600FDD115 /* flatten_decoration_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C902485758400FDD115 /* flatten_decoration_pass.h */; };
+		A9765FC12485758600FDD115 /* if_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C912485758400FDD115 /* if_conversion.cpp */; };
+		A9765FC22485758600FDD115 /* if_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C912485758400FDD115 /* if_conversion.cpp */; };
+		A9765FC32485758600FDD115 /* debug_info_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C922485758400FDD115 /* debug_info_manager.cpp */; };
+		A9765FC42485758600FDD115 /* debug_info_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C922485758400FDD115 /* debug_info_manager.cpp */; };
+		A9765FC52485758600FDD115 /* inline_exhaustive_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C932485758400FDD115 /* inline_exhaustive_pass.h */; };
+		A9765FC62485758600FDD115 /* inline_exhaustive_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C932485758400FDD115 /* inline_exhaustive_pass.h */; };
+		A9765FC72485758600FDD115 /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C942485758400FDD115 /* constants.h */; };
+		A9765FC82485758600FDD115 /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C942485758400FDD115 /* constants.h */; };
+		A9765FC92485758600FDD115 /* eliminate_dead_members_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C952485758400FDD115 /* eliminate_dead_members_pass.cpp */; };
+		A9765FCA2485758600FDD115 /* eliminate_dead_members_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C952485758400FDD115 /* eliminate_dead_members_pass.cpp */; };
+		A9765FCB2485758600FDD115 /* strength_reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C962485758400FDD115 /* strength_reduction_pass.cpp */; };
+		A9765FCC2485758600FDD115 /* strength_reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C962485758400FDD115 /* strength_reduction_pass.cpp */; };
+		A9765FCD2485758600FDD115 /* desc_sroa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C972485758400FDD115 /* desc_sroa.cpp */; };
+		A9765FCE2485758600FDD115 /* desc_sroa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C972485758400FDD115 /* desc_sroa.cpp */; };
+		A9765FCF2485758600FDD115 /* block_merge_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C982485758400FDD115 /* block_merge_util.cpp */; };
+		A9765FD02485758600FDD115 /* block_merge_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C982485758400FDD115 /* block_merge_util.cpp */; };
+		A9765FD12485758600FDD115 /* upgrade_memory_model.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C992485758400FDD115 /* upgrade_memory_model.h */; };
+		A9765FD22485758600FDD115 /* upgrade_memory_model.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C992485758400FDD115 /* upgrade_memory_model.h */; };
+		A9765FD32485758600FDD115 /* copy_prop_arrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C9A2485758400FDD115 /* copy_prop_arrays.cpp */; };
+		A9765FD42485758600FDD115 /* copy_prop_arrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C9A2485758400FDD115 /* copy_prop_arrays.cpp */; };
+		A9765FD52485758600FDD115 /* pass_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C9B2485758400FDD115 /* pass_manager.cpp */; };
+		A9765FD62485758600FDD115 /* pass_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C9B2485758400FDD115 /* pass_manager.cpp */; };
+		A9765FD72485758600FDD115 /* inline_exhaustive_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C9C2485758400FDD115 /* inline_exhaustive_pass.cpp */; };
+		A9765FD82485758600FDD115 /* inline_exhaustive_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C9C2485758400FDD115 /* inline_exhaustive_pass.cpp */; };
+		A9765FD92485758600FDD115 /* loop_fission.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C9D2485758400FDD115 /* loop_fission.h */; };
+		A9765FDA2485758600FDD115 /* loop_fission.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C9D2485758400FDD115 /* loop_fission.h */; };
+		A9765FDB2485758600FDD115 /* workaround1209.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C9E2485758400FDD115 /* workaround1209.h */; };
+		A9765FDC2485758600FDD115 /* workaround1209.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765C9E2485758400FDD115 /* workaround1209.h */; };
+		A9765FDD2485758600FDD115 /* loop_fusion_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C9F2485758400FDD115 /* loop_fusion_pass.cpp */; };
+		A9765FDE2485758600FDD115 /* loop_fusion_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765C9F2485758400FDD115 /* loop_fusion_pass.cpp */; };
+		A9765FDF2485758600FDD115 /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA02485758400FDD115 /* log.h */; };
+		A9765FE02485758600FDD115 /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA02485758400FDD115 /* log.h */; };
+		A9765FE12485758600FDD115 /* split_invalid_unreachable_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA12485758400FDD115 /* split_invalid_unreachable_pass.h */; };
+		A9765FE22485758600FDD115 /* split_invalid_unreachable_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA12485758400FDD115 /* split_invalid_unreachable_pass.h */; };
+		A9765FE32485758600FDD115 /* copy_prop_arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA22485758400FDD115 /* copy_prop_arrays.h */; };
+		A9765FE42485758600FDD115 /* copy_prop_arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA22485758400FDD115 /* copy_prop_arrays.h */; };
+		A9765FE52485758600FDD115 /* eliminate_dead_constant_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA32485758400FDD115 /* eliminate_dead_constant_pass.h */; };
+		A9765FE62485758600FDD115 /* eliminate_dead_constant_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA32485758400FDD115 /* eliminate_dead_constant_pass.h */; };
+		A9765FE72485758600FDD115 /* dead_insert_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CA42485758400FDD115 /* dead_insert_elim_pass.cpp */; };
+		A9765FE82485758600FDD115 /* dead_insert_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CA42485758400FDD115 /* dead_insert_elim_pass.cpp */; };
+		A9765FE92485758600FDD115 /* ssa_rewrite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA52485758400FDD115 /* ssa_rewrite_pass.h */; };
+		A9765FEA2485758600FDD115 /* ssa_rewrite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA52485758400FDD115 /* ssa_rewrite_pass.h */; };
+		A9765FEB2485758600FDD115 /* scalar_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CA62485758400FDD115 /* scalar_analysis.cpp */; };
+		A9765FEC2485758600FDD115 /* scalar_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CA62485758400FDD115 /* scalar_analysis.cpp */; };
+		A9765FED2485758600FDD115 /* dead_variable_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA72485758400FDD115 /* dead_variable_elimination.h */; };
+		A9765FEE2485758600FDD115 /* dead_variable_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA72485758400FDD115 /* dead_variable_elimination.h */; };
+		A9765FEF2485758600FDD115 /* block_merge_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CA82485758400FDD115 /* block_merge_pass.cpp */; };
+		A9765FF02485758600FDD115 /* block_merge_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CA82485758400FDD115 /* block_merge_pass.cpp */; };
+		A9765FF12485758600FDD115 /* dominator_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA92485758400FDD115 /* dominator_analysis.h */; };
+		A9765FF22485758600FDD115 /* dominator_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CA92485758400FDD115 /* dominator_analysis.h */; };
+		A9765FF32485758600FDD115 /* pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CAA2485758400FDD115 /* pass.h */; };
+		A9765FF42485758600FDD115 /* pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CAA2485758400FDD115 /* pass.h */; };
+		A9765FF52485758600FDD115 /* folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CAB2485758400FDD115 /* folding_rules.h */; };
+		A9765FF62485758600FDD115 /* folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CAB2485758400FDD115 /* folding_rules.h */; };
+		A9765FF72485758600FDD115 /* eliminate_dead_functions_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CAC2485758400FDD115 /* eliminate_dead_functions_pass.h */; };
+		A9765FF82485758600FDD115 /* eliminate_dead_functions_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CAC2485758400FDD115 /* eliminate_dead_functions_pass.h */; };
+		A9765FF92485758600FDD115 /* eliminate_dead_functions_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CAD2485758400FDD115 /* eliminate_dead_functions_util.h */; };
+		A9765FFA2485758600FDD115 /* eliminate_dead_functions_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CAD2485758400FDD115 /* eliminate_dead_functions_util.h */; };
+		A9765FFB2485758600FDD115 /* fold.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CAE2485758400FDD115 /* fold.h */; };
+		A9765FFC2485758600FDD115 /* fold.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CAE2485758400FDD115 /* fold.h */; };
+		A9765FFD2485758600FDD115 /* local_single_store_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CAF2485758400FDD115 /* local_single_store_elim_pass.cpp */; };
+		A9765FFE2485758600FDD115 /* local_single_store_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CAF2485758400FDD115 /* local_single_store_elim_pass.cpp */; };
+		A9765FFF2485758600FDD115 /* dead_branch_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CB02485758400FDD115 /* dead_branch_elim_pass.h */; };
+		A97660002485758600FDD115 /* dead_branch_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CB02485758400FDD115 /* dead_branch_elim_pass.h */; };
+		A97660012485758600FDD115 /* private_to_local_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CB12485758400FDD115 /* private_to_local_pass.cpp */; };
+		A97660022485758600FDD115 /* private_to_local_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CB12485758400FDD115 /* private_to_local_pass.cpp */; };
+		A97660032485758600FDD115 /* scalar_analysis_nodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CB22485758400FDD115 /* scalar_analysis_nodes.h */; };
+		A97660042485758600FDD115 /* scalar_analysis_nodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CB22485758400FDD115 /* scalar_analysis_nodes.h */; };
+		A97660052485758600FDD115 /* propagator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CB32485758400FDD115 /* propagator.cpp */; };
+		A97660062485758600FDD115 /* propagator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CB32485758400FDD115 /* propagator.cpp */; };
+		A97660072485758600FDD115 /* fix_storage_class.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CB42485758400FDD115 /* fix_storage_class.h */; };
+		A97660082485758600FDD115 /* fix_storage_class.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CB42485758400FDD115 /* fix_storage_class.h */; };
+		A97660092485758600FDD115 /* loop_dependence_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CB52485758400FDD115 /* loop_dependence_helpers.cpp */; };
+		A976600A2485758600FDD115 /* loop_dependence_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CB52485758400FDD115 /* loop_dependence_helpers.cpp */; };
+		A976600B2485758600FDD115 /* set_spec_constant_default_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CB62485758400FDD115 /* set_spec_constant_default_value_pass.cpp */; };
+		A976600C2485758600FDD115 /* set_spec_constant_default_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CB62485758400FDD115 /* set_spec_constant_default_value_pass.cpp */; };
+		A976600D2485758600FDD115 /* passes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CB72485758400FDD115 /* passes.h */; };
+		A976600E2485758600FDD115 /* passes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CB72485758400FDD115 /* passes.h */; };
+		A976600F2485758600FDD115 /* fold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CB82485758400FDD115 /* fold.cpp */; };
+		A97660102485758600FDD115 /* fold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CB82485758400FDD115 /* fold.cpp */; };
+		A97660112485758600FDD115 /* amd_ext_to_khr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CB92485758400FDD115 /* amd_ext_to_khr.cpp */; };
+		A97660122485758600FDD115 /* amd_ext_to_khr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CB92485758400FDD115 /* amd_ext_to_khr.cpp */; };
+		A97660132485758600FDD115 /* strip_reflect_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CBA2485758400FDD115 /* strip_reflect_info_pass.h */; };
+		A97660142485758600FDD115 /* strip_reflect_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CBA2485758400FDD115 /* strip_reflect_info_pass.h */; };
+		A97660152485758600FDD115 /* scalar_replacement_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CBB2485758400FDD115 /* scalar_replacement_pass.cpp */; };
+		A97660162485758600FDD115 /* scalar_replacement_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CBB2485758400FDD115 /* scalar_replacement_pass.cpp */; };
+		A97660172485758600FDD115 /* simplification_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CBC2485758400FDD115 /* simplification_pass.h */; };
+		A97660182485758600FDD115 /* simplification_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CBC2485758400FDD115 /* simplification_pass.h */; };
+		A97660192485758600FDD115 /* remove_duplicates_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CBD2485758400FDD115 /* remove_duplicates_pass.h */; };
+		A976601A2485758600FDD115 /* remove_duplicates_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CBD2485758400FDD115 /* remove_duplicates_pass.h */; };
+		A976601B2485758600FDD115 /* redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CBE2485758400FDD115 /* redundancy_elimination.cpp */; };
+		A976601C2485758600FDD115 /* redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CBE2485758400FDD115 /* redundancy_elimination.cpp */; };
+		A976601D2485758600FDD115 /* reflect.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CBF2485758400FDD115 /* reflect.h */; };
+		A976601E2485758600FDD115 /* reflect.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CBF2485758400FDD115 /* reflect.h */; };
+		A976601F2485758600FDD115 /* workaround1209.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CC02485758400FDD115 /* workaround1209.cpp */; };
+		A97660202485758600FDD115 /* workaround1209.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CC02485758400FDD115 /* workaround1209.cpp */; };
+		A97660212485758600FDD115 /* null_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CC12485758400FDD115 /* null_pass.h */; };
+		A97660222485758600FDD115 /* null_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CC12485758400FDD115 /* null_pass.h */; };
+		A97660232485758600FDD115 /* relax_float_ops_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CC22485758400FDD115 /* relax_float_ops_pass.cpp */; };
+		A97660242485758600FDD115 /* relax_float_ops_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CC22485758400FDD115 /* relax_float_ops_pass.cpp */; };
+		A97660252485758600FDD115 /* const_folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CC32485758400FDD115 /* const_folding_rules.h */; };
+		A97660262485758600FDD115 /* const_folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CC32485758400FDD115 /* const_folding_rules.h */; };
+		A97660272485758600FDD115 /* scalar_replacement_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CC42485758400FDD115 /* scalar_replacement_pass.h */; };
+		A97660282485758600FDD115 /* scalar_replacement_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CC42485758400FDD115 /* scalar_replacement_pass.h */; };
+		A97660292485758600FDD115 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CC52485758400FDD115 /* instruction.cpp */; };
+		A976602A2485758600FDD115 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CC52485758400FDD115 /* instruction.cpp */; };
+		A976602B2485758600FDD115 /* pch_source_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CC62485758400FDD115 /* pch_source_opt.h */; };
+		A976602C2485758600FDD115 /* pch_source_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CC62485758400FDD115 /* pch_source_opt.h */; };
+		A976602D2485758600FDD115 /* reduce_load_size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CC72485758400FDD115 /* reduce_load_size.cpp */; };
+		A976602E2485758600FDD115 /* reduce_load_size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CC72485758400FDD115 /* reduce_load_size.cpp */; };
+		A976602F2485758600FDD115 /* redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CC82485758400FDD115 /* redundancy_elimination.h */; };
+		A97660302485758600FDD115 /* redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CC82485758400FDD115 /* redundancy_elimination.h */; };
+		A97660312485758600FDD115 /* fix_storage_class.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CC92485758400FDD115 /* fix_storage_class.cpp */; };
+		A97660322485758600FDD115 /* fix_storage_class.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CC92485758400FDD115 /* fix_storage_class.cpp */; };
+		A97660332485758600FDD115 /* value_number_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CCA2485758400FDD115 /* value_number_table.cpp */; };
+		A97660342485758600FDD115 /* value_number_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CCA2485758400FDD115 /* value_number_table.cpp */; };
+		A97660352485758600FDD115 /* inline_opaque_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CCB2485758400FDD115 /* inline_opaque_pass.cpp */; };
+		A97660362485758600FDD115 /* inline_opaque_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CCB2485758400FDD115 /* inline_opaque_pass.cpp */; };
+		A97660372485758600FDD115 /* replace_invalid_opc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CCC2485758400FDD115 /* replace_invalid_opc.cpp */; };
+		A97660382485758600FDD115 /* replace_invalid_opc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CCC2485758400FDD115 /* replace_invalid_opc.cpp */; };
+		A97660392485758600FDD115 /* loop_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CCD2485758400FDD115 /* loop_utils.h */; };
+		A976603A2485758600FDD115 /* loop_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CCD2485758400FDD115 /* loop_utils.h */; };
+		A976603B2485758600FDD115 /* module.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CCE2485758400FDD115 /* module.h */; };
+		A976603C2485758600FDD115 /* module.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CCE2485758400FDD115 /* module.h */; };
+		A976603D2485758600FDD115 /* dominator_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CCF2485758400FDD115 /* dominator_analysis.cpp */; };
+		A976603E2485758600FDD115 /* dominator_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CCF2485758400FDD115 /* dominator_analysis.cpp */; };
+		A976603F2485758600FDD115 /* decompose_initialized_variables_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CD02485758400FDD115 /* decompose_initialized_variables_pass.cpp */; };
+		A97660402485758600FDD115 /* decompose_initialized_variables_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CD02485758400FDD115 /* decompose_initialized_variables_pass.cpp */; };
+		A97660412485758600FDD115 /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD12485758400FDD115 /* ir_builder.h */; };
+		A97660422485758600FDD115 /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD12485758400FDD115 /* ir_builder.h */; };
+		A97660432485758600FDD115 /* loop_unswitch_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD22485758400FDD115 /* loop_unswitch_pass.h */; };
+		A97660442485758600FDD115 /* loop_unswitch_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD22485758400FDD115 /* loop_unswitch_pass.h */; };
+		A97660452485758600FDD115 /* cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD32485758400FDD115 /* cfg.h */; };
+		A97660462485758600FDD115 /* cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD32485758400FDD115 /* cfg.h */; };
+		A97660472485758600FDD115 /* code_sink.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD42485758400FDD115 /* code_sink.h */; };
+		A97660482485758600FDD115 /* code_sink.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD42485758400FDD115 /* code_sink.h */; };
+		A97660492485758600FDD115 /* loop_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD52485758400FDD115 /* loop_descriptor.h */; };
+		A976604A2485758600FDD115 /* loop_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD52485758400FDD115 /* loop_descriptor.h */; };
+		A976604B2485758600FDD115 /* generate_webgpu_initializers_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD62485758400FDD115 /* generate_webgpu_initializers_pass.h */; };
+		A976604C2485758600FDD115 /* generate_webgpu_initializers_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD62485758400FDD115 /* generate_webgpu_initializers_pass.h */; };
+		A976604D2485758600FDD115 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD72485758400FDD115 /* instruction.h */; };
+		A976604E2485758600FDD115 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD72485758400FDD115 /* instruction.h */; };
+		A976604F2485758600FDD115 /* aggressive_dead_code_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD82485758400FDD115 /* aggressive_dead_code_elim_pass.h */; };
+		A97660502485758600FDD115 /* aggressive_dead_code_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CD82485758400FDD115 /* aggressive_dead_code_elim_pass.h */; };
+		A97660512485758600FDD115 /* struct_cfg_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CD92485758400FDD115 /* struct_cfg_analysis.cpp */; };
+		A97660522485758600FDD115 /* struct_cfg_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CD92485758400FDD115 /* struct_cfg_analysis.cpp */; };
+		A97660532485758600FDD115 /* vector_dce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CDA2485758400FDD115 /* vector_dce.h */; };
+		A97660542485758600FDD115 /* vector_dce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CDA2485758400FDD115 /* vector_dce.h */; };
+		A97660552485758600FDD115 /* combine_access_chains.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CDB2485758400FDD115 /* combine_access_chains.h */; };
+		A97660562485758600FDD115 /* combine_access_chains.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CDB2485758400FDD115 /* combine_access_chains.h */; };
+		A97660572485758600FDD115 /* pass_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CDC2485758400FDD115 /* pass_manager.h */; };
+		A97660582485758600FDD115 /* pass_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CDC2485758400FDD115 /* pass_manager.h */; };
+		A97660592485758600FDD115 /* local_access_chain_convert_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CDD2485758400FDD115 /* local_access_chain_convert_pass.cpp */; };
+		A976605A2485758600FDD115 /* local_access_chain_convert_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CDD2485758400FDD115 /* local_access_chain_convert_pass.cpp */; };
+		A976605B2485758600FDD115 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CDE2485758400FDD115 /* basic_block.cpp */; };
+		A976605C2485758600FDD115 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CDE2485758400FDD115 /* basic_block.cpp */; };
+		A976605D2485758600FDD115 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CDF2485758400FDD115 /* iterator.h */; };
+		A976605E2485758600FDD115 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CDF2485758400FDD115 /* iterator.h */; };
+		A976605F2485758600FDD115 /* licm_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE02485758400FDD115 /* licm_pass.h */; };
+		A97660602485758600FDD115 /* licm_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE02485758400FDD115 /* licm_pass.h */; };
+		A97660612485758600FDD115 /* build_module.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE12485758400FDD115 /* build_module.h */; };
+		A97660622485758600FDD115 /* build_module.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE12485758400FDD115 /* build_module.h */; };
+		A97660632485758600FDD115 /* ccp_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE22485758400FDD115 /* ccp_pass.h */; };
+		A97660642485758600FDD115 /* ccp_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE22485758400FDD115 /* ccp_pass.h */; };
+		A97660652485758600FDD115 /* graphics_robust_access_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CE32485758400FDD115 /* graphics_robust_access_pass.cpp */; };
+		A97660662485758600FDD115 /* graphics_robust_access_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CE32485758400FDD115 /* graphics_robust_access_pass.cpp */; };
+		A97660672485758600FDD115 /* decompose_initialized_variables_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE42485758400FDD115 /* decompose_initialized_variables_pass.h */; };
+		A97660682485758600FDD115 /* decompose_initialized_variables_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE42485758400FDD115 /* decompose_initialized_variables_pass.h */; };
+		A97660692485758600FDD115 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE52485758400FDD115 /* function.h */; };
+		A976606A2485758600FDD115 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE52485758400FDD115 /* function.h */; };
+		A976606B2485758600FDD115 /* loop_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CE62485758400FDD115 /* loop_fusion.cpp */; };
+		A976606C2485758600FDD115 /* loop_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CE62485758400FDD115 /* loop_fusion.cpp */; };
+		A976606D2485758600FDD115 /* upgrade_memory_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CE72485758400FDD115 /* upgrade_memory_model.cpp */; };
+		A976606E2485758600FDD115 /* upgrade_memory_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CE72485758400FDD115 /* upgrade_memory_model.cpp */; };
+		A976606F2485758600FDD115 /* feature_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE82485758400FDD115 /* feature_manager.h */; };
+		A97660702485758600FDD115 /* feature_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE82485758400FDD115 /* feature_manager.h */; };
+		A97660712485758600FDD115 /* inst_bindless_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE92485758400FDD115 /* inst_bindless_check_pass.h */; };
+		A97660722485758600FDD115 /* inst_bindless_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CE92485758400FDD115 /* inst_bindless_check_pass.h */; };
+		A97660732485758600FDD115 /* scalar_analysis_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CEA2485758400FDD115 /* scalar_analysis_simplification.cpp */; };
+		A97660742485758600FDD115 /* scalar_analysis_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CEA2485758400FDD115 /* scalar_analysis_simplification.cpp */; };
+		A97660752485758600FDD115 /* set_spec_constant_default_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CEB2485758400FDD115 /* set_spec_constant_default_value_pass.h */; };
+		A97660762485758600FDD115 /* set_spec_constant_default_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CEB2485758400FDD115 /* set_spec_constant_default_value_pass.h */; };
+		A97660772485758600FDD115 /* dominator_tree.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CEC2485758400FDD115 /* dominator_tree.h */; };
+		A97660782485758600FDD115 /* dominator_tree.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CEC2485758400FDD115 /* dominator_tree.h */; };
+		A97660792485758600FDD115 /* legalize_vector_shuffle_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CED2485758400FDD115 /* legalize_vector_shuffle_pass.cpp */; };
+		A976607A2485758600FDD115 /* legalize_vector_shuffle_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CED2485758400FDD115 /* legalize_vector_shuffle_pass.cpp */; };
+		A976607B2485758600FDD115 /* type_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CEE2485758400FDD115 /* type_manager.h */; };
+		A976607C2485758600FDD115 /* type_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CEE2485758400FDD115 /* type_manager.h */; };
+		A976607D2485758600FDD115 /* compact_ids_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CEF2485758400FDD115 /* compact_ids_pass.cpp */; };
+		A976607E2485758600FDD115 /* compact_ids_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CEF2485758400FDD115 /* compact_ids_pass.cpp */; };
+		A976607F2485758600FDD115 /* loop_peeling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CF02485758400FDD115 /* loop_peeling.cpp */; };
+		A97660802485758600FDD115 /* loop_peeling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765CF02485758400FDD115 /* loop_peeling.cpp */; };
+		A97660812485758600FDD115 /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CF12485758400FDD115 /* table.h */; };
+		A97660822485758600FDD115 /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765CF12485758400FDD115 /* table.h */; };
+		A97661FD2485758700FDD115 /* ext_inst.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DB22485758500FDD115 /* ext_inst.h */; };
+		A97661FE2485758700FDD115 /* ext_inst.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DB22485758500FDD115 /* ext_inst.h */; };
+		A97661FF2485758700FDD115 /* diagnostic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DB32485758500FDD115 /* diagnostic.cpp */; };
+		A97662002485758700FDD115 /* diagnostic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DB32485758500FDD115 /* diagnostic.cpp */; };
+		A97662012485758700FDD115 /* latest_version_spirv_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DB42485758500FDD115 /* latest_version_spirv_header.h */; };
+		A97662022485758700FDD115 /* latest_version_spirv_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DB42485758500FDD115 /* latest_version_spirv_header.h */; };
+		A97662032485758700FDD115 /* libspirv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DB52485758500FDD115 /* libspirv.cpp */; };
+		A97662042485758700FDD115 /* libspirv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DB52485758500FDD115 /* libspirv.cpp */; };
+		A97662052485758700FDD115 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DB62485758500FDD115 /* instruction.h */; };
+		A97662062485758700FDD115 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DB62485758500FDD115 /* instruction.h */; };
+		A97662072485758700FDD115 /* spirv_optimizer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DB72485758500FDD115 /* spirv_optimizer_options.h */; };
+		A97662082485758700FDD115 /* spirv_optimizer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DB72485758500FDD115 /* spirv_optimizer_options.h */; };
+		A97662092485758700FDD115 /* opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DB82485758500FDD115 /* opcode.h */; };
+		A976620A2485758700FDD115 /* opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DB82485758500FDD115 /* opcode.h */; };
+		A976620B2485758700FDD115 /* operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DB92485758500FDD115 /* operand.cpp */; };
+		A976620C2485758700FDD115 /* operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DB92485758500FDD115 /* operand.cpp */; };
+		A976620D2485758700FDD115 /* latest_version_glsl_std_450_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DBA2485758500FDD115 /* latest_version_glsl_std_450_header.h */; };
+		A976620E2485758700FDD115 /* latest_version_glsl_std_450_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DBA2485758500FDD115 /* latest_version_glsl_std_450_header.h */; };
+		A976620F2485758700FDD115 /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DBB2485758500FDD115 /* extensions.h */; };
+		A97662102485758700FDD115 /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DBB2485758500FDD115 /* extensions.h */; };
+		A97662112485758700FDD115 /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DBC2485758500FDD115 /* disassemble.cpp */; };
+		A97662122485758700FDD115 /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DBC2485758500FDD115 /* disassemble.cpp */; };
+		A97662132485758700FDD115 /* binary.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DBD2485758500FDD115 /* binary.h */; };
+		A97662142485758700FDD115 /* binary.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DBD2485758500FDD115 /* binary.h */; };
+		A97662152485758700FDD115 /* text_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DBE2485758500FDD115 /* text_handler.cpp */; };
+		A97662162485758700FDD115 /* text_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DBE2485758500FDD115 /* text_handler.cpp */; };
+		A97662172485758700FDD115 /* validate_annotation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC02485758500FDD115 /* validate_annotation.cpp */; };
+		A97662182485758700FDD115 /* validate_annotation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC02485758500FDD115 /* validate_annotation.cpp */; };
+		A97662192485758700FDD115 /* validate_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC12485758500FDD115 /* validate_misc.cpp */; };
+		A976621A2485758700FDD115 /* validate_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC12485758500FDD115 /* validate_misc.cpp */; };
+		A976621B2485758700FDD115 /* validate_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC22485758500FDD115 /* validate_cfg.cpp */; };
+		A976621C2485758700FDD115 /* validate_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC22485758500FDD115 /* validate_cfg.cpp */; };
+		A976621D2485758700FDD115 /* validate_capability.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC32485758500FDD115 /* validate_capability.cpp */; };
+		A976621E2485758700FDD115 /* validate_capability.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC32485758500FDD115 /* validate_capability.cpp */; };
+		A976621F2485758700FDD115 /* construct.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DC42485758500FDD115 /* construct.h */; };
+		A97662202485758700FDD115 /* construct.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DC42485758500FDD115 /* construct.h */; };
+		A97662212485758700FDD115 /* validate_barriers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC52485758500FDD115 /* validate_barriers.cpp */; };
+		A97662222485758700FDD115 /* validate_barriers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC52485758500FDD115 /* validate_barriers.cpp */; };
+		A97662232485758700FDD115 /* validate_non_uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC62485758500FDD115 /* validate_non_uniform.cpp */; };
+		A97662242485758700FDD115 /* validate_non_uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC62485758500FDD115 /* validate_non_uniform.cpp */; };
+		A97662252485758700FDD115 /* validate_scopes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC72485758500FDD115 /* validate_scopes.cpp */; };
+		A97662262485758700FDD115 /* validate_scopes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC72485758500FDD115 /* validate_scopes.cpp */; };
+		A97662272485758700FDD115 /* validate_atomics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC82485758500FDD115 /* validate_atomics.cpp */; };
+		A97662282485758700FDD115 /* validate_atomics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DC82485758500FDD115 /* validate_atomics.cpp */; };
+		A97662292485758700FDD115 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DC92485758500FDD115 /* basic_block.h */; };
+		A976622A2485758700FDD115 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DC92485758500FDD115 /* basic_block.h */; };
+		A976622B2485758700FDD115 /* validate_instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DCA2485758500FDD115 /* validate_instruction.cpp */; };
+		A976622C2485758700FDD115 /* validate_instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DCA2485758500FDD115 /* validate_instruction.cpp */; };
+		A976622D2485758700FDD115 /* validate_decorations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DCB2485758500FDD115 /* validate_decorations.cpp */; };
+		A976622E2485758700FDD115 /* validate_decorations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DCB2485758500FDD115 /* validate_decorations.cpp */; };
+		A976622F2485758700FDD115 /* validate_debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DCC2485758500FDD115 /* validate_debug.cpp */; };
+		A97662302485758700FDD115 /* validate_debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DCC2485758500FDD115 /* validate_debug.cpp */; };
+		A97662312485758700FDD115 /* validate_builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DCD2485758500FDD115 /* validate_builtins.cpp */; };
+		A97662322485758700FDD115 /* validate_builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DCD2485758500FDD115 /* validate_builtins.cpp */; };
+		A97662332485758700FDD115 /* validate_interfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DCE2485758500FDD115 /* validate_interfaces.cpp */; };
+		A97662342485758700FDD115 /* validate_interfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DCE2485758500FDD115 /* validate_interfaces.cpp */; };
+		A97662352485758700FDD115 /* validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DCF2485758500FDD115 /* validate.cpp */; };
+		A97662362485758700FDD115 /* validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DCF2485758500FDD115 /* validate.cpp */; };
+		A97662372485758700FDD115 /* validation_state.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DD02485758500FDD115 /* validation_state.h */; };
+		A97662382485758700FDD115 /* validation_state.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DD02485758500FDD115 /* validation_state.h */; };
+		A97662392485758700FDD115 /* validate_constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD12485758500FDD115 /* validate_constants.cpp */; };
+		A976623A2485758700FDD115 /* validate_constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD12485758500FDD115 /* validate_constants.cpp */; };
+		A976623B2485758700FDD115 /* validate_bitwise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD22485758500FDD115 /* validate_bitwise.cpp */; };
+		A976623C2485758700FDD115 /* validate_bitwise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD22485758500FDD115 /* validate_bitwise.cpp */; };
+		A976623D2485758700FDD115 /* validate_extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD32485758500FDD115 /* validate_extensions.cpp */; };
+		A976623E2485758700FDD115 /* validate_extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD32485758500FDD115 /* validate_extensions.cpp */; };
+		A976623F2485758700FDD115 /* construct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD42485758500FDD115 /* construct.cpp */; };
+		A97662402485758700FDD115 /* construct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD42485758500FDD115 /* construct.cpp */; };
+		A97662412485758700FDD115 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD52485758500FDD115 /* function.cpp */; };
+		A97662422485758700FDD115 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD52485758500FDD115 /* function.cpp */; };
+		A97662432485758700FDD115 /* validate.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DD62485758500FDD115 /* validate.h */; };
+		A97662442485758700FDD115 /* validate.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DD62485758500FDD115 /* validate.h */; };
+		A97662452485758700FDD115 /* validate_adjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD72485758500FDD115 /* validate_adjacency.cpp */; };
+		A97662462485758700FDD115 /* validate_adjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD72485758500FDD115 /* validate_adjacency.cpp */; };
+		A97662472485758700FDD115 /* validate_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD82485758500FDD115 /* validate_conversion.cpp */; };
+		A97662482485758700FDD115 /* validate_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD82485758500FDD115 /* validate_conversion.cpp */; };
+		A97662492485758700FDD115 /* validate_small_type_uses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD92485758500FDD115 /* validate_small_type_uses.cpp */; };
+		A976624A2485758700FDD115 /* validate_small_type_uses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DD92485758500FDD115 /* validate_small_type_uses.cpp */; };
+		A976624B2485758700FDD115 /* validate_scopes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DDA2485758500FDD115 /* validate_scopes.h */; };
+		A976624C2485758700FDD115 /* validate_scopes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DDA2485758500FDD115 /* validate_scopes.h */; };
+		A976624D2485758700FDD115 /* validate_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DDB2485758500FDD115 /* validate_id.cpp */; };
+		A976624E2485758700FDD115 /* validate_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DDB2485758500FDD115 /* validate_id.cpp */; };
+		A976624F2485758700FDD115 /* validate_memory_semantics.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DDC2485758500FDD115 /* validate_memory_semantics.h */; };
+		A97662502485758700FDD115 /* validate_memory_semantics.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DDC2485758500FDD115 /* validate_memory_semantics.h */; };
+		A97662512485758700FDD115 /* validate_arithmetics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DDD2485758500FDD115 /* validate_arithmetics.cpp */; };
+		A97662522485758700FDD115 /* validate_arithmetics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DDD2485758500FDD115 /* validate_arithmetics.cpp */; };
+		A97662532485758700FDD115 /* validate_mode_setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DDE2485758500FDD115 /* validate_mode_setting.cpp */; };
+		A97662542485758700FDD115 /* validate_mode_setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DDE2485758500FDD115 /* validate_mode_setting.cpp */; };
+		A97662552485758700FDD115 /* validate_memory_semantics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DDF2485758500FDD115 /* validate_memory_semantics.cpp */; };
+		A97662562485758700FDD115 /* validate_memory_semantics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DDF2485758500FDD115 /* validate_memory_semantics.cpp */; };
+		A97662572485758700FDD115 /* validate_logicals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE02485758500FDD115 /* validate_logicals.cpp */; };
+		A97662582485758700FDD115 /* validate_logicals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE02485758500FDD115 /* validate_logicals.cpp */; };
+		A97662592485758700FDD115 /* validate_derivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE12485758500FDD115 /* validate_derivatives.cpp */; };
+		A976625A2485758700FDD115 /* validate_derivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE12485758500FDD115 /* validate_derivatives.cpp */; };
+		A976625B2485758700FDD115 /* validate_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE22485758500FDD115 /* validate_memory.cpp */; };
+		A976625C2485758700FDD115 /* validate_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE22485758500FDD115 /* validate_memory.cpp */; };
+		A976625D2485758700FDD115 /* validate_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE32485758500FDD115 /* validate_image.cpp */; };
+		A976625E2485758700FDD115 /* validate_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE32485758500FDD115 /* validate_image.cpp */; };
+		A976625F2485758700FDD115 /* validate_literals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE42485758500FDD115 /* validate_literals.cpp */; };
+		A97662602485758700FDD115 /* validate_literals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE42485758500FDD115 /* validate_literals.cpp */; };
+		A97662612485758700FDD115 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE52485758500FDD115 /* instruction.cpp */; };
+		A97662622485758700FDD115 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE52485758500FDD115 /* instruction.cpp */; };
+		A97662632485758700FDD115 /* validate_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE62485758500FDD115 /* validate_type.cpp */; };
+		A97662642485758700FDD115 /* validate_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE62485758500FDD115 /* validate_type.cpp */; };
+		A97662652485758700FDD115 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DE72485758500FDD115 /* instruction.h */; };
+		A97662662485758700FDD115 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DE72485758500FDD115 /* instruction.h */; };
+		A97662672485758700FDD115 /* validate_execution_limitations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE82485758500FDD115 /* validate_execution_limitations.cpp */; };
+		A97662682485758700FDD115 /* validate_execution_limitations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE82485758500FDD115 /* validate_execution_limitations.cpp */; };
+		A97662692485758700FDD115 /* validate_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE92485758500FDD115 /* validate_layout.cpp */; };
+		A976626A2485758700FDD115 /* validate_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DE92485758500FDD115 /* validate_layout.cpp */; };
+		A976626B2485758700FDD115 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DEA2485758500FDD115 /* basic_block.cpp */; };
+		A976626C2485758700FDD115 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DEA2485758500FDD115 /* basic_block.cpp */; };
+		A976626D2485758700FDD115 /* validate_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DEB2485758500FDD115 /* validate_function.cpp */; };
+		A976626E2485758700FDD115 /* validate_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DEB2485758500FDD115 /* validate_function.cpp */; };
+		A976626F2485758700FDD115 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DEC2485758500FDD115 /* function.h */; };
+		A97662702485758700FDD115 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DEC2485758500FDD115 /* function.h */; };
+		A97662712485758700FDD115 /* validate_composites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DED2485758500FDD115 /* validate_composites.cpp */; };
+		A97662722485758700FDD115 /* validate_composites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DED2485758500FDD115 /* validate_composites.cpp */; };
+		A97662732485758700FDD115 /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DEE2485758500FDD115 /* validation_state.cpp */; };
+		A97662742485758700FDD115 /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DEE2485758500FDD115 /* validation_state.cpp */; };
+		A97662752485758700FDD115 /* validate_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DEF2485758500FDD115 /* validate_primitives.cpp */; };
+		A97662762485758700FDD115 /* validate_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9765DEF2485758500FDD115 /* validate_primitives.cpp */; };
+		A97662772485758700FDD115 /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DF02485758500FDD115 /* decoration.h */; };
+		A97662782485758700FDD115 /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A9765DF02485758500FDD115 /* decoration.h */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -1101,401 +1113,6 @@
 		A90FD89F21CC4EAB00B92BB2 /* libSPIRVCross.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSPIRVCross.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		A90FD9E421CC4EB900B92BB2 /* libSPIRVCross.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSPIRVCross.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		A91BF011235F9C510039B7DE /* gen_spirv_cross_rev_hdr.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = gen_spirv_cross_rev_hdr.sh; sourceTree = "<group>"; };
-		A941583F243667F600566F16 /* spirv_target_env.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_target_env.cpp; sourceTree = "<group>"; };
-		A9415840243667F600566F16 /* extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json"; sourceTree = "<group>"; };
-		A9415841243667F600566F16 /* spirv_fuzzer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_fuzzer_options.h; sourceTree = "<group>"; };
-		A9415842243667F600566F16 /* assembly_grammar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assembly_grammar.h; sourceTree = "<group>"; };
-		A9415843243667F600566F16 /* enum_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum_set.h; sourceTree = "<group>"; };
-		A9415844243667F600566F16 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
-		A9415845243667F600566F16 /* extinst.spv-amd-shader-ballot.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-ballot.grammar.json"; sourceTree = "<group>"; };
-		A9415846243667F600566F16 /* text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text.cpp; sourceTree = "<group>"; };
-		A9415847243667F600566F16 /* assembly_grammar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = assembly_grammar.cpp; sourceTree = "<group>"; };
-		A9415848243667F600566F16 /* text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text.h; sourceTree = "<group>"; };
-		A9415849243667F600566F16 /* extensions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extensions.cpp; sourceTree = "<group>"; };
-		A941584A243667F600566F16 /* pch_source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source.cpp; sourceTree = "<group>"; };
-		A941584C243667F600566F16 /* parse_number.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parse_number.h; sourceTree = "<group>"; };
-		A941584D243667F600566F16 /* ilist_node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ilist_node.h; sourceTree = "<group>"; };
-		A941584E243667F600566F16 /* make_unique.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = make_unique.h; sourceTree = "<group>"; };
-		A941584F243667F600566F16 /* string_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = string_utils.h; sourceTree = "<group>"; };
-		A9415850243667F600566F16 /* small_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = small_vector.h; sourceTree = "<group>"; };
-		A9415851243667F600566F16 /* timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = timer.cpp; sourceTree = "<group>"; };
-		A9415852243667F600566F16 /* timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timer.h; sourceTree = "<group>"; };
-		A9415853243667F600566F16 /* string_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = string_utils.cpp; sourceTree = "<group>"; };
-		A9415854243667F600566F16 /* bit_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bit_vector.h; sourceTree = "<group>"; };
-		A9415855243667F600566F16 /* bitutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitutils.h; sourceTree = "<group>"; };
-		A9415856243667F600566F16 /* hex_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hex_float.h; sourceTree = "<group>"; };
-		A9415857243667F600566F16 /* parse_number.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parse_number.cpp; sourceTree = "<group>"; };
-		A9415858243667F600566F16 /* bit_vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bit_vector.cpp; sourceTree = "<group>"; };
-		A9415859243667F600566F16 /* ilist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ilist.h; sourceTree = "<group>"; };
-		A941585A243667F600566F16 /* spirv_target_env.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_target_env.h; sourceTree = "<group>"; };
-		A941585B243667F600566F16 /* table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = table.cpp; sourceTree = "<group>"; };
-		A941585C243667F600566F16 /* extinst.opencl.debuginfo.100.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = extinst.opencl.debuginfo.100.grammar.json; sourceTree = "<group>"; };
-		A941585E243667F600566F16 /* operand_to_undef_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand_to_undef_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A941585F243667F600566F16 /* remove_selection_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_selection_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A9415860243667F600566F16 /* remove_block_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_block_reduction_opportunity.h; sourceTree = "<group>"; };
-		A9415861243667F600566F16 /* operand_to_dominating_id_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand_to_dominating_id_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A9415862243667F600566F16 /* reduction_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_pass.cpp; sourceTree = "<group>"; };
-		A9415863243667F600566F16 /* operand_to_const_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand_to_const_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A9415864243667F600566F16 /* operand_to_const_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand_to_const_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A9415865243667F600566F16 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
-		A9415866243667F600566F16 /* reduction_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_util.cpp; sourceTree = "<group>"; };
-		A9415867243667F600566F16 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = structured_loop_to_selection_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A9415868243667F600566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simple_conditional_branch_to_branch_reduction_opportunity.h; sourceTree = "<group>"; };
-		A9415869243667F600566F16 /* remove_function_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_function_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A941586A243667F600566F16 /* remove_instruction_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_instruction_reduction_opportunity.h; sourceTree = "<group>"; };
-		A941586B243667F600566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conditional_branch_to_simple_conditional_branch_reduction_opportunity.h; sourceTree = "<group>"; };
-		A941586C243667F600566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_conditional_branch_to_branch_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A941586D243667F600566F16 /* remove_function_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_function_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A941586E243667F600566F16 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_conditional_branch_to_branch_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A941586F243667F600566F16 /* remove_selection_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_selection_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A9415870243667F600566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A9415871243667F600566F16 /* simple_conditional_branch_to_branch_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simple_conditional_branch_to_branch_opportunity_finder.h; sourceTree = "<group>"; };
-		A9415872243667F600566F16 /* merge_blocks_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_blocks_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A9415873243667F600566F16 /* change_operand_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = change_operand_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A9415874243667F600566F16 /* structured_loop_to_selection_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = structured_loop_to_selection_reduction_opportunity.h; sourceTree = "<group>"; };
-		A9415875243667F600566F16 /* remove_function_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_function_reduction_opportunity.h; sourceTree = "<group>"; };
-		A9415876243667F600566F16 /* change_operand_to_undef_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = change_operand_to_undef_reduction_opportunity.h; sourceTree = "<group>"; };
-		A9415877243667F600566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_unreferenced_instruction_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A9415878243667F600566F16 /* structured_loop_to_selection_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = structured_loop_to_selection_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A9415879243667F600566F16 /* remove_selection_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_selection_reduction_opportunity.h; sourceTree = "<group>"; };
-		A941587A243667F600566F16 /* remove_instruction_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_instruction_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A941587B243667F600566F16 /* remove_selection_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_selection_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A941587C243667F600566F16 /* merge_blocks_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_blocks_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A941587D243667F600566F16 /* pch_source_reduce.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source_reduce.cpp; sourceTree = "<group>"; };
-		A941587E243667F600566F16 /* reducer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reducer.cpp; sourceTree = "<group>"; };
-		A941587F243667F600566F16 /* operand_to_undef_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand_to_undef_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A9415880243667F600566F16 /* remove_function_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_function_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A9415881243667F600566F16 /* pch_source_reduce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source_reduce.h; sourceTree = "<group>"; };
-		A9415882243667F600566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_unreferenced_instruction_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A9415883243667F600566F16 /* merge_blocks_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_blocks_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A9415884243667F600566F16 /* reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A9415885243667F600566F16 /* reducer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reducer.h; sourceTree = "<group>"; };
-		A9415886243667F600566F16 /* change_operand_to_undef_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = change_operand_to_undef_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A9415887243667F600566F16 /* reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_opportunity.h; sourceTree = "<group>"; };
-		A9415888243667F600566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conditional_branch_to_simple_conditional_branch_opportunity_finder.h; sourceTree = "<group>"; };
-		A9415889243667F600566F16 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand_to_dominating_id_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A941588A243667F600566F16 /* reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A941588B243667F600566F16 /* change_operand_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = change_operand_reduction_opportunity.h; sourceTree = "<group>"; };
-		A941588C243667F600566F16 /* remove_block_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_block_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A941588D243667F600566F16 /* remove_block_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_block_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A941588E243667F600566F16 /* reduction_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_util.h; sourceTree = "<group>"; };
-		A941588F243667F600566F16 /* merge_blocks_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_blocks_reduction_opportunity.h; sourceTree = "<group>"; };
-		A9415890243667F600566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A9415891243667F600566F16 /* structured_loop_to_selection_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = structured_loop_to_selection_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A9415892243667F600566F16 /* remove_block_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_block_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A9415893243667F600566F16 /* reduction_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_pass.h; sourceTree = "<group>"; };
-		A9415894243667F600566F16 /* latest_version_opencl_std_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_opencl_std_header.h; sourceTree = "<group>"; };
-		A9415895243667F600566F16 /* spirv_optimizer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_optimizer_options.cpp; sourceTree = "<group>"; };
-		A9415896243667F600566F16 /* cfa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfa.h; sourceTree = "<group>"; };
-		A9415897243667F600566F16 /* pch_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source.h; sourceTree = "<group>"; };
-		A9415898243667F600566F16 /* enum_string_mapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum_string_mapping.h; sourceTree = "<group>"; };
-		A9415899243667F600566F16 /* spirv_fuzzer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_fuzzer_options.cpp; sourceTree = "<group>"; };
-		A941589A243667F600566F16 /* spirv_reducer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_reducer_options.h; sourceTree = "<group>"; };
-		A941589B243667F600566F16 /* spirv_validator_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_validator_options.cpp; sourceTree = "<group>"; };
-		A941589C243667F600566F16 /* extinst.spv-amd-shader-trinary-minmax.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-trinary-minmax.grammar.json"; sourceTree = "<group>"; };
-		A941589D243667F600566F16 /* print.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = print.cpp; sourceTree = "<group>"; };
-		A941589E243667F600566F16 /* spirv_definition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_definition.h; sourceTree = "<group>"; };
-		A941589F243667F600566F16 /* operand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand.h; sourceTree = "<group>"; };
-		A94158A0243667F600566F16 /* spirv_endian.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_endian.cpp; sourceTree = "<group>"; };
-		A94158A1243667F600566F16 /* macro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = macro.h; sourceTree = "<group>"; };
-		A94158A2243667F600566F16 /* spirv_constant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_constant.h; sourceTree = "<group>"; };
-		A94158A3243667F600566F16 /* extinst.spv-amd-gcn-shader.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-gcn-shader.grammar.json"; sourceTree = "<group>"; };
-		A94158A4243667F600566F16 /* binary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = binary.cpp; sourceTree = "<group>"; };
-		A94158A5243667F600566F16 /* spirv_validator_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_validator_options.h; sourceTree = "<group>"; };
-		A94158A6243667F600566F16 /* enum_string_mapping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = enum_string_mapping.cpp; sourceTree = "<group>"; };
-		A94158A7243667F600566F16 /* text_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text_handler.h; sourceTree = "<group>"; };
-		A94158A8243667F600566F16 /* parsed_operand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parsed_operand.h; sourceTree = "<group>"; };
-		A94158A9243667F600566F16 /* name_mapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = name_mapper.h; sourceTree = "<group>"; };
-		A94158AA243667F600566F16 /* spirv_reducer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_reducer_options.cpp; sourceTree = "<group>"; };
-		A94158AB243667F600566F16 /* parsed_operand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parsed_operand.cpp; sourceTree = "<group>"; };
-		A94158AC243667F600566F16 /* diagnostic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diagnostic.h; sourceTree = "<group>"; };
-		A94158AD243667F600566F16 /* spirv_endian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_endian.h; sourceTree = "<group>"; };
-		A94158AE243667F600566F16 /* name_mapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = name_mapper.cpp; sourceTree = "<group>"; };
-		A94158AF243667F600566F16 /* extinst.debuginfo.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = extinst.debuginfo.grammar.json; sourceTree = "<group>"; };
-		A94158B1243667F600566F16 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
-		A94158B2243667F600566F16 /* linker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linker.cpp; sourceTree = "<group>"; };
-		A94158B3243667F600566F16 /* software_version.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = software_version.cpp; sourceTree = "<group>"; };
-		A94158B4243667F600566F16 /* opcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opcode.cpp; sourceTree = "<group>"; };
-		A94158B5243667F600566F16 /* print.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = print.h; sourceTree = "<group>"; };
-		A94158B6243667F600566F16 /* ext_inst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ext_inst.cpp; sourceTree = "<group>"; };
-		A94158B7243667F600566F16 /* disassemble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = disassemble.h; sourceTree = "<group>"; };
-		A94158B9243667F600566F16 /* optimizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = optimizer.cpp; sourceTree = "<group>"; };
-		A94158BA243667F600566F16 /* if_conversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = if_conversion.h; sourceTree = "<group>"; };
-		A94158BB243667F600566F16 /* register_pressure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = register_pressure.cpp; sourceTree = "<group>"; };
-		A94158BC243667F600566F16 /* loop_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_utils.cpp; sourceTree = "<group>"; };
-		A94158BD243667F600566F16 /* merge_return_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_return_pass.h; sourceTree = "<group>"; };
-		A94158BE243667F600566F16 /* inline_opaque_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_opaque_pass.h; sourceTree = "<group>"; };
-		A94158BF243667F600566F16 /* loop_fusion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fusion.h; sourceTree = "<group>"; };
-		A94158C0243667F600566F16 /* combine_access_chains.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = combine_access_chains.cpp; sourceTree = "<group>"; };
-		A94158C1243667F600566F16 /* build_module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = build_module.cpp; sourceTree = "<group>"; };
-		A94158C2243667F600566F16 /* composite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = composite.h; sourceTree = "<group>"; };
-		A94158C3243667F600566F16 /* compact_ids_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compact_ids_pass.h; sourceTree = "<group>"; };
-		A94158C4243667F600566F16 /* register_pressure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = register_pressure.h; sourceTree = "<group>"; };
-		A94158C5243667F600566F16 /* tree_iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree_iterator.h; sourceTree = "<group>"; };
-		A94158C6243667F600566F16 /* graphics_robust_access_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = graphics_robust_access_pass.h; sourceTree = "<group>"; };
-		A94158C7243667F600566F16 /* strip_atomic_counter_memory_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_atomic_counter_memory_pass.h; sourceTree = "<group>"; };
-		A94158C8243667F600566F16 /* legalize_vector_shuffle_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = legalize_vector_shuffle_pass.h; sourceTree = "<group>"; };
-		A94158C9243667F600566F16 /* local_single_store_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_single_store_elim_pass.h; sourceTree = "<group>"; };
-		A94158CA243667F600566F16 /* reduce_load_size.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduce_load_size.h; sourceTree = "<group>"; };
-		A94158CB243667F600566F16 /* code_sink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = code_sink.cpp; sourceTree = "<group>"; };
-		A94158CC243667F600566F16 /* types.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = types.cpp; sourceTree = "<group>"; };
-		A94158CD243667F600566F16 /* scalar_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_analysis.h; sourceTree = "<group>"; };
-		A94158CE243667F600566F16 /* strip_debug_info_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_debug_info_pass.h; sourceTree = "<group>"; };
-		A94158CF243667F600566F16 /* cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfg.cpp; sourceTree = "<group>"; };
-		A94158D0243667F600566F16 /* strip_atomic_counter_memory_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_atomic_counter_memory_pass.cpp; sourceTree = "<group>"; };
-		A94158D1243667F600566F16 /* decoration_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoration_manager.cpp; sourceTree = "<group>"; };
-		A94158D2243667F600566F16 /* local_single_block_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_single_block_elim_pass.cpp; sourceTree = "<group>"; };
-		A94158D3243667F600566F16 /* freeze_spec_constant_value_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = freeze_spec_constant_value_pass.cpp; sourceTree = "<group>"; };
-		A94158D4243667F600566F16 /* replace_invalid_opc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = replace_invalid_opc.h; sourceTree = "<group>"; };
-		A94158D5243667F600566F16 /* local_access_chain_convert_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_access_chain_convert_pass.h; sourceTree = "<group>"; };
-		A94158D6243667F600566F16 /* inst_bindless_check_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inst_bindless_check_pass.cpp; sourceTree = "<group>"; };
-		A94158D7243667F600566F16 /* local_redundancy_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_redundancy_elimination.cpp; sourceTree = "<group>"; };
-		A94158D8243667F600566F16 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
-		A94158D9243667F600566F16 /* instrument_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instrument_pass.cpp; sourceTree = "<group>"; };
-		A94158DA243667F600566F16 /* propagator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = propagator.h; sourceTree = "<group>"; };
-		A94158DB243667F600566F16 /* instruction_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction_list.h; sourceTree = "<group>"; };
-		A94158DC243667F600566F16 /* feature_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_manager.cpp; sourceTree = "<group>"; };
-		A94158DD243667F600566F16 /* pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pass.cpp; sourceTree = "<group>"; };
-		A94158DE243667F600566F16 /* loop_fission.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fission.cpp; sourceTree = "<group>"; };
-		A94158DF243667F600566F16 /* dominator_tree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dominator_tree.cpp; sourceTree = "<group>"; };
-		A94158E0243667F600566F16 /* amd_ext_to_khr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = amd_ext_to_khr.h; sourceTree = "<group>"; };
-		A94158E1243667F600566F16 /* merge_return_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_return_pass.cpp; sourceTree = "<group>"; };
-		A94158E2243667F600566F16 /* ir_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_context.h; sourceTree = "<group>"; };
-		A94158E3243667F600566F16 /* eliminate_dead_constant_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_constant_pass.cpp; sourceTree = "<group>"; };
-		A94158E4243667F600566F16 /* cfg_cleanup_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfg_cleanup_pass.cpp; sourceTree = "<group>"; };
-		A94158E5243667F600566F16 /* wrap_opkill.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_opkill.cpp; sourceTree = "<group>"; };
-		A94158E6243667F600566F16 /* const_folding_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = const_folding_rules.cpp; sourceTree = "<group>"; };
-		A94158E7243667F600566F16 /* loop_unroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_unroller.h; sourceTree = "<group>"; };
-		A94158E8243667F600566F16 /* strip_debug_info_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_debug_info_pass.cpp; sourceTree = "<group>"; };
-		A94158E9243667F600566F16 /* ssa_rewrite_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ssa_rewrite_pass.cpp; sourceTree = "<group>"; };
-		A94158EA243667F600566F16 /* loop_dependence.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_dependence.cpp; sourceTree = "<group>"; };
-		A94158EB243667F600566F16 /* unify_const_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unify_const_pass.h; sourceTree = "<group>"; };
-		A94158EC243667F600566F16 /* ir_loader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_loader.h; sourceTree = "<group>"; };
-		A94158ED243667F600566F16 /* inst_debug_printf_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inst_debug_printf_pass.cpp; sourceTree = "<group>"; };
-		A94158EE243667F600566F16 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
-		A94158EF243667F600566F16 /* fold_spec_constant_op_and_composite_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fold_spec_constant_op_and_composite_pass.h; sourceTree = "<group>"; };
-		A94158F0243667F600566F16 /* mem_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mem_pass.cpp; sourceTree = "<group>"; };
-		A94158F1243667F600566F16 /* basic_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic_block.h; sourceTree = "<group>"; };
-		A94158F2243667F600566F16 /* remove_duplicates_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_duplicates_pass.cpp; sourceTree = "<group>"; };
-		A94158F3243667F600566F16 /* dead_variable_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_variable_elimination.cpp; sourceTree = "<group>"; };
-		A94158F4243667F600566F16 /* block_merge_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block_merge_pass.h; sourceTree = "<group>"; };
-		A94158F5243667F600566F16 /* module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = module.cpp; sourceTree = "<group>"; };
-		A94158F6243667F600566F16 /* fold_spec_constant_op_and_composite_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fold_spec_constant_op_and_composite_pass.cpp; sourceTree = "<group>"; };
-		A94158F7243667F600566F16 /* loop_unswitch_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_unswitch_pass.cpp; sourceTree = "<group>"; };
-		A94158F8243667F600566F16 /* unify_const_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unify_const_pass.cpp; sourceTree = "<group>"; };
-		A94158F9243667F600566F16 /* type_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = type_manager.cpp; sourceTree = "<group>"; };
-		A94158FA243667F600566F16 /* generate_webgpu_initializers_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = generate_webgpu_initializers_pass.cpp; sourceTree = "<group>"; };
-		A94158FB243667F600566F16 /* private_to_local_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = private_to_local_pass.h; sourceTree = "<group>"; };
-		A94158FC243667F600566F16 /* convert_to_half_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = convert_to_half_pass.h; sourceTree = "<group>"; };
-		A94158FD243667F600566F16 /* relax_float_ops_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = relax_float_ops_pass.h; sourceTree = "<group>"; };
-		A94158FE243667F600566F16 /* inline_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_pass.cpp; sourceTree = "<group>"; };
-		A94158FF243667F600566F16 /* def_use_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = def_use_manager.h; sourceTree = "<group>"; };
-		A9415900243667F600566F16 /* ir_loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ir_loader.cpp; sourceTree = "<group>"; };
-		A9415901243667F600566F16 /* cfg_cleanup_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfg_cleanup_pass.h; sourceTree = "<group>"; };
-		A9415902243667F600566F16 /* licm_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = licm_pass.cpp; sourceTree = "<group>"; };
-		A9415903243667F600566F16 /* eliminate_dead_functions_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_functions_pass.cpp; sourceTree = "<group>"; };
-		A9415904243667F600566F16 /* local_redundancy_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_redundancy_elimination.h; sourceTree = "<group>"; };
-		A9415905243667F600566F16 /* split_invalid_unreachable_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = split_invalid_unreachable_pass.cpp; sourceTree = "<group>"; };
-		A9415906243667F600566F16 /* loop_peeling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_peeling.h; sourceTree = "<group>"; };
-		A9415907243667F600566F16 /* vector_dce.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vector_dce.cpp; sourceTree = "<group>"; };
-		A9415908243667F600566F16 /* block_merge_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block_merge_util.h; sourceTree = "<group>"; };
-		A9415909243667F600566F16 /* loop_unroller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_unroller.cpp; sourceTree = "<group>"; };
-		A941590A243667F600566F16 /* desc_sroa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = desc_sroa.h; sourceTree = "<group>"; };
-		A941590B243667F600566F16 /* constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = constants.cpp; sourceTree = "<group>"; };
-		A941590C243667F600566F16 /* loop_fusion_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fusion_pass.h; sourceTree = "<group>"; };
-		A941590D243667F600566F16 /* struct_cfg_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = struct_cfg_analysis.h; sourceTree = "<group>"; };
-		A941590E243667F600566F16 /* inst_buff_addr_check_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inst_buff_addr_check_pass.cpp; sourceTree = "<group>"; };
-		A941590F243667F600566F16 /* def_use_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = def_use_manager.cpp; sourceTree = "<group>"; };
-		A9415910243667F600566F16 /* wrap_opkill.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_opkill.h; sourceTree = "<group>"; };
-		A9415911243667F600566F16 /* strip_reflect_info_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_reflect_info_pass.cpp; sourceTree = "<group>"; };
-		A9415912243667F600566F16 /* decoration_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration_manager.h; sourceTree = "<group>"; };
-		A9415913243667F600566F16 /* ccp_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ccp_pass.cpp; sourceTree = "<group>"; };
-		A9415914243667F600566F16 /* process_lines_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = process_lines_pass.h; sourceTree = "<group>"; };
-		A9415915243667F600566F16 /* local_single_block_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_single_block_elim_pass.h; sourceTree = "<group>"; };
-		A9415916243667F600566F16 /* pch_source_opt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source_opt.cpp; sourceTree = "<group>"; };
-		A9415917243667F600566F16 /* inst_buff_addr_check_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inst_buff_addr_check_pass.h; sourceTree = "<group>"; };
-		A9415918243667F600566F16 /* strength_reduction_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strength_reduction_pass.h; sourceTree = "<group>"; };
-		A9415919243667F600566F16 /* aggressive_dead_code_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aggressive_dead_code_elim_pass.cpp; sourceTree = "<group>"; };
-		A941591A243667F600566F16 /* eliminate_dead_functions_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_functions_util.cpp; sourceTree = "<group>"; };
-		A941591B243667F600566F16 /* inst_debug_printf_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inst_debug_printf_pass.h; sourceTree = "<group>"; };
-		A941591C243667F600566F16 /* simplification_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simplification_pass.cpp; sourceTree = "<group>"; };
-		A941591D243667F600566F16 /* dead_branch_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_branch_elim_pass.cpp; sourceTree = "<group>"; };
-		A941591E243667F600566F16 /* flatten_decoration_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flatten_decoration_pass.cpp; sourceTree = "<group>"; };
-		A941591F243667F600566F16 /* dead_insert_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_insert_elim_pass.h; sourceTree = "<group>"; };
-		A9415920243667F600566F16 /* folding_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = folding_rules.cpp; sourceTree = "<group>"; };
-		A9415921243667F600566F16 /* freeze_spec_constant_value_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = freeze_spec_constant_value_pass.h; sourceTree = "<group>"; };
-		A9415922243667F600566F16 /* ir_context.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ir_context.cpp; sourceTree = "<group>"; };
-		A9415923243667F600566F16 /* instrument_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instrument_pass.h; sourceTree = "<group>"; };
-		A9415924243667F600566F16 /* mem_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem_pass.h; sourceTree = "<group>"; };
-		A9415925243667F600566F16 /* loop_descriptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_descriptor.cpp; sourceTree = "<group>"; };
-		A9415926243667F600566F16 /* eliminate_dead_members_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_members_pass.h; sourceTree = "<group>"; };
-		A9415927243667F600566F16 /* function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cpp; sourceTree = "<group>"; };
-		A9415928243667F600566F16 /* instruction_list.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction_list.cpp; sourceTree = "<group>"; };
-		A9415929243667F600566F16 /* composite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = composite.cpp; sourceTree = "<group>"; };
-		A941592A243667F600566F16 /* convert_to_half_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = convert_to_half_pass.cpp; sourceTree = "<group>"; };
-		A941592B243667F600566F16 /* process_lines_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = process_lines_pass.cpp; sourceTree = "<group>"; };
-		A941592C243667F600566F16 /* inline_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_pass.h; sourceTree = "<group>"; };
-		A941592D243667F600566F16 /* loop_dependence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_dependence.h; sourceTree = "<group>"; };
-		A941592E243667F600566F16 /* value_number_table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = value_number_table.h; sourceTree = "<group>"; };
-		A941592F243667F600566F16 /* flatten_decoration_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flatten_decoration_pass.h; sourceTree = "<group>"; };
-		A9415930243667F600566F16 /* if_conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = if_conversion.cpp; sourceTree = "<group>"; };
-		A9415931243667F600566F16 /* inline_exhaustive_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_exhaustive_pass.h; sourceTree = "<group>"; };
-		A9415932243667F600566F16 /* constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = constants.h; sourceTree = "<group>"; };
-		A9415933243667F600566F16 /* eliminate_dead_members_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_members_pass.cpp; sourceTree = "<group>"; };
-		A9415934243667F600566F16 /* strength_reduction_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strength_reduction_pass.cpp; sourceTree = "<group>"; };
-		A9415935243667F600566F16 /* desc_sroa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = desc_sroa.cpp; sourceTree = "<group>"; };
-		A9415936243667F600566F16 /* block_merge_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = block_merge_util.cpp; sourceTree = "<group>"; };
-		A9415937243667F600566F16 /* upgrade_memory_model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = upgrade_memory_model.h; sourceTree = "<group>"; };
-		A9415938243667F600566F16 /* copy_prop_arrays.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = copy_prop_arrays.cpp; sourceTree = "<group>"; };
-		A9415939243667F600566F16 /* pass_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pass_manager.cpp; sourceTree = "<group>"; };
-		A941593A243667F600566F16 /* inline_exhaustive_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_exhaustive_pass.cpp; sourceTree = "<group>"; };
-		A941593B243667F600566F16 /* loop_fission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fission.h; sourceTree = "<group>"; };
-		A941593C243667F600566F16 /* workaround1209.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = workaround1209.h; sourceTree = "<group>"; };
-		A941593D243667F600566F16 /* loop_fusion_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fusion_pass.cpp; sourceTree = "<group>"; };
-		A941593E243667F600566F16 /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
-		A941593F243667F600566F16 /* split_invalid_unreachable_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = split_invalid_unreachable_pass.h; sourceTree = "<group>"; };
-		A9415940243667F600566F16 /* copy_prop_arrays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = copy_prop_arrays.h; sourceTree = "<group>"; };
-		A9415941243667F600566F16 /* eliminate_dead_constant_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_constant_pass.h; sourceTree = "<group>"; };
-		A9415942243667F600566F16 /* dead_insert_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_insert_elim_pass.cpp; sourceTree = "<group>"; };
-		A9415943243667F600566F16 /* ssa_rewrite_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssa_rewrite_pass.h; sourceTree = "<group>"; };
-		A9415944243667F600566F16 /* scalar_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_analysis.cpp; sourceTree = "<group>"; };
-		A9415945243667F600566F16 /* dead_variable_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_variable_elimination.h; sourceTree = "<group>"; };
-		A9415946243667F600566F16 /* block_merge_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = block_merge_pass.cpp; sourceTree = "<group>"; };
-		A9415947243667F600566F16 /* dominator_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dominator_analysis.h; sourceTree = "<group>"; };
-		A9415948243667F600566F16 /* pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pass.h; sourceTree = "<group>"; };
-		A9415949243667F600566F16 /* folding_rules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = folding_rules.h; sourceTree = "<group>"; };
-		A941594A243667F600566F16 /* eliminate_dead_functions_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_functions_pass.h; sourceTree = "<group>"; };
-		A941594B243667F600566F16 /* eliminate_dead_functions_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_functions_util.h; sourceTree = "<group>"; };
-		A941594C243667F600566F16 /* fold.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fold.h; sourceTree = "<group>"; };
-		A941594D243667F600566F16 /* local_single_store_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_single_store_elim_pass.cpp; sourceTree = "<group>"; };
-		A941594E243667F600566F16 /* dead_branch_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_branch_elim_pass.h; sourceTree = "<group>"; };
-		A941594F243667F600566F16 /* private_to_local_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = private_to_local_pass.cpp; sourceTree = "<group>"; };
-		A9415950243667F600566F16 /* scalar_analysis_nodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_analysis_nodes.h; sourceTree = "<group>"; };
-		A9415951243667F600566F16 /* propagator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = propagator.cpp; sourceTree = "<group>"; };
-		A9415952243667F600566F16 /* fix_storage_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fix_storage_class.h; sourceTree = "<group>"; };
-		A9415953243667F600566F16 /* loop_dependence_helpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_dependence_helpers.cpp; sourceTree = "<group>"; };
-		A9415954243667F600566F16 /* set_spec_constant_default_value_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = set_spec_constant_default_value_pass.cpp; sourceTree = "<group>"; };
-		A9415955243667F600566F16 /* passes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = passes.h; sourceTree = "<group>"; };
-		A9415956243667F600566F16 /* fold.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fold.cpp; sourceTree = "<group>"; };
-		A9415957243667F600566F16 /* amd_ext_to_khr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = amd_ext_to_khr.cpp; sourceTree = "<group>"; };
-		A9415958243667F600566F16 /* strip_reflect_info_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_reflect_info_pass.h; sourceTree = "<group>"; };
-		A9415959243667F600566F16 /* scalar_replacement_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_replacement_pass.cpp; sourceTree = "<group>"; };
-		A941595A243667F600566F16 /* simplification_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simplification_pass.h; sourceTree = "<group>"; };
-		A941595B243667F600566F16 /* remove_duplicates_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_duplicates_pass.h; sourceTree = "<group>"; };
-		A941595C243667F600566F16 /* redundancy_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = redundancy_elimination.cpp; sourceTree = "<group>"; };
-		A941595D243667F600566F16 /* reflect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reflect.h; sourceTree = "<group>"; };
-		A941595E243667F600566F16 /* workaround1209.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = workaround1209.cpp; sourceTree = "<group>"; };
-		A941595F243667F600566F16 /* null_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = null_pass.h; sourceTree = "<group>"; };
-		A9415960243667F600566F16 /* relax_float_ops_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = relax_float_ops_pass.cpp; sourceTree = "<group>"; };
-		A9415961243667F600566F16 /* const_folding_rules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = const_folding_rules.h; sourceTree = "<group>"; };
-		A9415962243667F600566F16 /* scalar_replacement_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_replacement_pass.h; sourceTree = "<group>"; };
-		A9415963243667F600566F16 /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = "<group>"; };
-		A9415964243667F600566F16 /* pch_source_opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source_opt.h; sourceTree = "<group>"; };
-		A9415965243667F600566F16 /* reduce_load_size.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduce_load_size.cpp; sourceTree = "<group>"; };
-		A9415966243667F600566F16 /* redundancy_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = redundancy_elimination.h; sourceTree = "<group>"; };
-		A9415967243667F600566F16 /* fix_storage_class.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fix_storage_class.cpp; sourceTree = "<group>"; };
-		A9415968243667F600566F16 /* value_number_table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = value_number_table.cpp; sourceTree = "<group>"; };
-		A9415969243667F600566F16 /* inline_opaque_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_opaque_pass.cpp; sourceTree = "<group>"; };
-		A941596A243667F600566F16 /* replace_invalid_opc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = replace_invalid_opc.cpp; sourceTree = "<group>"; };
-		A941596B243667F600566F16 /* loop_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_utils.h; sourceTree = "<group>"; };
-		A941596C243667F700566F16 /* module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = module.h; sourceTree = "<group>"; };
-		A941596D243667F700566F16 /* dominator_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dominator_analysis.cpp; sourceTree = "<group>"; };
-		A941596E243667F700566F16 /* decompose_initialized_variables_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decompose_initialized_variables_pass.cpp; sourceTree = "<group>"; };
-		A941596F243667F700566F16 /* ir_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_builder.h; sourceTree = "<group>"; };
-		A9415970243667F700566F16 /* loop_unswitch_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_unswitch_pass.h; sourceTree = "<group>"; };
-		A9415971243667F700566F16 /* cfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfg.h; sourceTree = "<group>"; };
-		A9415972243667F700566F16 /* code_sink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = code_sink.h; sourceTree = "<group>"; };
-		A9415973243667F700566F16 /* loop_descriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_descriptor.h; sourceTree = "<group>"; };
-		A9415974243667F700566F16 /* generate_webgpu_initializers_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = generate_webgpu_initializers_pass.h; sourceTree = "<group>"; };
-		A9415975243667F700566F16 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
-		A9415976243667F700566F16 /* aggressive_dead_code_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aggressive_dead_code_elim_pass.h; sourceTree = "<group>"; };
-		A9415977243667F700566F16 /* struct_cfg_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = struct_cfg_analysis.cpp; sourceTree = "<group>"; };
-		A9415978243667F700566F16 /* vector_dce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector_dce.h; sourceTree = "<group>"; };
-		A9415979243667F700566F16 /* combine_access_chains.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = combine_access_chains.h; sourceTree = "<group>"; };
-		A941597A243667F700566F16 /* pass_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pass_manager.h; sourceTree = "<group>"; };
-		A941597B243667F700566F16 /* local_access_chain_convert_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_access_chain_convert_pass.cpp; sourceTree = "<group>"; };
-		A941597C243667F700566F16 /* basic_block.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic_block.cpp; sourceTree = "<group>"; };
-		A941597D243667F700566F16 /* iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iterator.h; sourceTree = "<group>"; };
-		A941597E243667F700566F16 /* licm_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = licm_pass.h; sourceTree = "<group>"; };
-		A941597F243667F700566F16 /* build_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = build_module.h; sourceTree = "<group>"; };
-		A9415980243667F700566F16 /* ccp_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ccp_pass.h; sourceTree = "<group>"; };
-		A9415981243667F700566F16 /* graphics_robust_access_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = graphics_robust_access_pass.cpp; sourceTree = "<group>"; };
-		A9415982243667F700566F16 /* decompose_initialized_variables_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decompose_initialized_variables_pass.h; sourceTree = "<group>"; };
-		A9415983243667F700566F16 /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
-		A9415984243667F700566F16 /* loop_fusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fusion.cpp; sourceTree = "<group>"; };
-		A9415985243667F700566F16 /* upgrade_memory_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = upgrade_memory_model.cpp; sourceTree = "<group>"; };
-		A9415986243667F700566F16 /* feature_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = feature_manager.h; sourceTree = "<group>"; };
-		A9415987243667F700566F16 /* inst_bindless_check_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inst_bindless_check_pass.h; sourceTree = "<group>"; };
-		A9415988243667F700566F16 /* scalar_analysis_simplification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_analysis_simplification.cpp; sourceTree = "<group>"; };
-		A9415989243667F700566F16 /* set_spec_constant_default_value_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = set_spec_constant_default_value_pass.h; sourceTree = "<group>"; };
-		A941598A243667F700566F16 /* dominator_tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dominator_tree.h; sourceTree = "<group>"; };
-		A941598B243667F700566F16 /* legalize_vector_shuffle_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = legalize_vector_shuffle_pass.cpp; sourceTree = "<group>"; };
-		A941598C243667F700566F16 /* type_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = type_manager.h; sourceTree = "<group>"; };
-		A941598D243667F700566F16 /* compact_ids_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = compact_ids_pass.cpp; sourceTree = "<group>"; };
-		A941598E243667F700566F16 /* loop_peeling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_peeling.cpp; sourceTree = "<group>"; };
-		A941598F243667F700566F16 /* table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = table.h; sourceTree = "<group>"; };
-		A9415A48243667F700566F16 /* ext_inst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ext_inst.h; sourceTree = "<group>"; };
-		A9415A49243667F700566F16 /* diagnostic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = diagnostic.cpp; sourceTree = "<group>"; };
-		A9415A4A243667F700566F16 /* latest_version_spirv_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_spirv_header.h; sourceTree = "<group>"; };
-		A9415A4B243667F700566F16 /* libspirv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = libspirv.cpp; sourceTree = "<group>"; };
-		A9415A4C243667F700566F16 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
-		A9415A4D243667F700566F16 /* spirv_optimizer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_optimizer_options.h; sourceTree = "<group>"; };
-		A9415A4E243667F700566F16 /* opcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opcode.h; sourceTree = "<group>"; };
-		A9415A4F243667F700566F16 /* operand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand.cpp; sourceTree = "<group>"; };
-		A9415A50243667F700566F16 /* latest_version_glsl_std_450_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_glsl_std_450_header.h; sourceTree = "<group>"; };
-		A9415A51243667F700566F16 /* extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = extensions.h; sourceTree = "<group>"; };
-		A9415A52243667F700566F16 /* disassemble.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = disassemble.cpp; sourceTree = "<group>"; };
-		A9415A53243667F700566F16 /* binary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = binary.h; sourceTree = "<group>"; };
-		A9415A54243667F700566F16 /* text_handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text_handler.cpp; sourceTree = "<group>"; };
-		A9415A56243667F700566F16 /* validate_annotation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_annotation.cpp; sourceTree = "<group>"; };
-		A9415A57243667F700566F16 /* validate_misc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_misc.cpp; sourceTree = "<group>"; };
-		A9415A58243667F700566F16 /* validate_cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_cfg.cpp; sourceTree = "<group>"; };
-		A9415A59243667F700566F16 /* validate_capability.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_capability.cpp; sourceTree = "<group>"; };
-		A9415A5A243667F700566F16 /* construct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = construct.h; sourceTree = "<group>"; };
-		A9415A5B243667F700566F16 /* validate_barriers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_barriers.cpp; sourceTree = "<group>"; };
-		A9415A5C243667F700566F16 /* validate_non_uniform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_non_uniform.cpp; sourceTree = "<group>"; };
-		A9415A5D243667F700566F16 /* validate_scopes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_scopes.cpp; sourceTree = "<group>"; };
-		A9415A5E243667F700566F16 /* validate_atomics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_atomics.cpp; sourceTree = "<group>"; };
-		A9415A5F243667F700566F16 /* basic_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic_block.h; sourceTree = "<group>"; };
-		A9415A60243667F700566F16 /* validate_instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_instruction.cpp; sourceTree = "<group>"; };
-		A9415A61243667F700566F16 /* validate_decorations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_decorations.cpp; sourceTree = "<group>"; };
-		A9415A62243667F700566F16 /* validate_debug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_debug.cpp; sourceTree = "<group>"; };
-		A9415A63243667F700566F16 /* validate_builtins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_builtins.cpp; sourceTree = "<group>"; };
-		A9415A64243667F700566F16 /* validate_interfaces.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_interfaces.cpp; sourceTree = "<group>"; };
-		A9415A65243667F700566F16 /* validate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate.cpp; sourceTree = "<group>"; };
-		A9415A66243667F700566F16 /* validation_state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validation_state.h; sourceTree = "<group>"; };
-		A9415A67243667F700566F16 /* validate_constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_constants.cpp; sourceTree = "<group>"; };
-		A9415A68243667F700566F16 /* validate_bitwise.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_bitwise.cpp; sourceTree = "<group>"; };
-		A9415A69243667F700566F16 /* validate_extensions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_extensions.cpp; sourceTree = "<group>"; };
-		A9415A6A243667F700566F16 /* construct.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = construct.cpp; sourceTree = "<group>"; };
-		A9415A6B243667F700566F16 /* function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cpp; sourceTree = "<group>"; };
-		A9415A6C243667F700566F16 /* validate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate.h; sourceTree = "<group>"; };
-		A9415A6D243667F700566F16 /* validate_adjacency.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_adjacency.cpp; sourceTree = "<group>"; };
-		A9415A6E243667F700566F16 /* validate_conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_conversion.cpp; sourceTree = "<group>"; };
-		A9415A6F243667F700566F16 /* validate_small_type_uses.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_small_type_uses.cpp; sourceTree = "<group>"; };
-		A9415A70243667F700566F16 /* validate_scopes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate_scopes.h; sourceTree = "<group>"; };
-		A9415A71243667F700566F16 /* validate_id.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_id.cpp; sourceTree = "<group>"; };
-		A9415A72243667F700566F16 /* validate_memory_semantics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate_memory_semantics.h; sourceTree = "<group>"; };
-		A9415A73243667F700566F16 /* validate_arithmetics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_arithmetics.cpp; sourceTree = "<group>"; };
-		A9415A74243667F700566F16 /* validate_mode_setting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_mode_setting.cpp; sourceTree = "<group>"; };
-		A9415A75243667F700566F16 /* validate_memory_semantics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_memory_semantics.cpp; sourceTree = "<group>"; };
-		A9415A76243667F700566F16 /* validate_logicals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_logicals.cpp; sourceTree = "<group>"; };
-		A9415A77243667F700566F16 /* validate_derivatives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_derivatives.cpp; sourceTree = "<group>"; };
-		A9415A78243667F700566F16 /* validate_memory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_memory.cpp; sourceTree = "<group>"; };
-		A9415A79243667F700566F16 /* validate_image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_image.cpp; sourceTree = "<group>"; };
-		A9415A7A243667F700566F16 /* validate_literals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_literals.cpp; sourceTree = "<group>"; };
-		A9415A7B243667F700566F16 /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = "<group>"; };
-		A9415A7C243667F700566F16 /* validate_type.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_type.cpp; sourceTree = "<group>"; };
-		A9415A7D243667F700566F16 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
-		A9415A7E243667F700566F16 /* validate_execution_limitations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_execution_limitations.cpp; sourceTree = "<group>"; };
-		A9415A7F243667F700566F16 /* validate_layout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_layout.cpp; sourceTree = "<group>"; };
-		A9415A80243667F700566F16 /* basic_block.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic_block.cpp; sourceTree = "<group>"; };
-		A9415A81243667F700566F16 /* validate_function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_function.cpp; sourceTree = "<group>"; };
-		A9415A82243667F700566F16 /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
-		A9415A83243667F700566F16 /* validate_composites.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_composites.cpp; sourceTree = "<group>"; };
-		A9415A84243667F700566F16 /* validation_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validation_state.cpp; sourceTree = "<group>"; };
-		A9415A85243667F700566F16 /* validate_primitives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_primitives.cpp; sourceTree = "<group>"; };
-		A9415A86243667F700566F16 /* decoration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration.h; sourceTree = "<group>"; };
 		A9415EF624366B0E00566F16 /* packagePregenSpirvToolsHeaders */ = {isa = PBXFileReference; lastKnownFileType = text; path = packagePregenSpirvToolsHeaders; sourceTree = "<group>"; };
 		A95D90A723A7F1E500CBCC60 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
 		A95D90AA23A7F1E500CBCC60 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
@@ -1619,6 +1236,407 @@
 		A976290C21CC60BC00B52A68 /* spirv_parser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = spirv_parser.hpp; sourceTree = "<group>"; };
 		A976290D21CC60BC00B52A68 /* spirv_msl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_msl.cpp; sourceTree = "<group>"; };
 		A976290E21CC60BC00B52A68 /* spirv_cross_parsed_ir.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_cross_parsed_ir.cpp; sourceTree = "<group>"; };
+		A9765B9B2485758300FDD115 /* spirv_target_env.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_target_env.cpp; sourceTree = "<group>"; };
+		A9765B9C2485758300FDD115 /* extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json"; sourceTree = "<group>"; };
+		A9765B9D2485758300FDD115 /* spirv_fuzzer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_fuzzer_options.h; sourceTree = "<group>"; };
+		A9765B9E2485758300FDD115 /* assembly_grammar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assembly_grammar.h; sourceTree = "<group>"; };
+		A9765B9F2485758300FDD115 /* enum_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum_set.h; sourceTree = "<group>"; };
+		A9765BA02485758300FDD115 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+		A9765BA12485758300FDD115 /* extinst.spv-amd-shader-ballot.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-ballot.grammar.json"; sourceTree = "<group>"; };
+		A9765BA22485758300FDD115 /* text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text.cpp; sourceTree = "<group>"; };
+		A9765BA32485758300FDD115 /* assembly_grammar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = assembly_grammar.cpp; sourceTree = "<group>"; };
+		A9765BA42485758300FDD115 /* text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text.h; sourceTree = "<group>"; };
+		A9765BA52485758300FDD115 /* extensions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extensions.cpp; sourceTree = "<group>"; };
+		A9765BA62485758300FDD115 /* pch_source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source.cpp; sourceTree = "<group>"; };
+		A9765BA82485758300FDD115 /* parse_number.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parse_number.h; sourceTree = "<group>"; };
+		A9765BA92485758300FDD115 /* ilist_node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ilist_node.h; sourceTree = "<group>"; };
+		A9765BAA2485758300FDD115 /* make_unique.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = make_unique.h; sourceTree = "<group>"; };
+		A9765BAB2485758300FDD115 /* string_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = string_utils.h; sourceTree = "<group>"; };
+		A9765BAC2485758300FDD115 /* small_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = small_vector.h; sourceTree = "<group>"; };
+		A9765BAD2485758300FDD115 /* timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = timer.cpp; sourceTree = "<group>"; };
+		A9765BAE2485758300FDD115 /* timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timer.h; sourceTree = "<group>"; };
+		A9765BAF2485758300FDD115 /* string_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = string_utils.cpp; sourceTree = "<group>"; };
+		A9765BB02485758300FDD115 /* bit_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bit_vector.h; sourceTree = "<group>"; };
+		A9765BB12485758300FDD115 /* bitutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitutils.h; sourceTree = "<group>"; };
+		A9765BB22485758300FDD115 /* hex_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hex_float.h; sourceTree = "<group>"; };
+		A9765BB32485758300FDD115 /* parse_number.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parse_number.cpp; sourceTree = "<group>"; };
+		A9765BB42485758300FDD115 /* bit_vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bit_vector.cpp; sourceTree = "<group>"; };
+		A9765BB52485758300FDD115 /* ilist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ilist.h; sourceTree = "<group>"; };
+		A9765BB62485758300FDD115 /* spirv_target_env.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_target_env.h; sourceTree = "<group>"; };
+		A9765BB72485758300FDD115 /* table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = table.cpp; sourceTree = "<group>"; };
+		A9765BB82485758300FDD115 /* extinst.opencl.debuginfo.100.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = extinst.opencl.debuginfo.100.grammar.json; sourceTree = "<group>"; };
+		A9765BBA2485758300FDD115 /* operand_to_undef_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand_to_undef_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BBB2485758300FDD115 /* remove_selection_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_selection_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9765BBC2485758300FDD115 /* remove_block_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_block_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9765BBD2485758300FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand_to_dominating_id_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BBE2485758300FDD115 /* reduction_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_pass.cpp; sourceTree = "<group>"; };
+		A9765BBF2485758300FDD115 /* operand_to_const_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand_to_const_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9765BC02485758300FDD115 /* operand_to_const_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand_to_const_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BC12485758300FDD115 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+		A9765BC22485758300FDD115 /* reduction_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_util.cpp; sourceTree = "<group>"; };
+		A9765BC32485758300FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = structured_loop_to_selection_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9765BC42485758300FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simple_conditional_branch_to_branch_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9765BC52485758300FDD115 /* remove_function_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_function_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9765BC62485758300FDD115 /* remove_instruction_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_instruction_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9765BC72485758300FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conditional_branch_to_simple_conditional_branch_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9765BC82485758300FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_conditional_branch_to_branch_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9765BC92485758300FDD115 /* remove_function_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_function_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9765BCA2485758300FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_conditional_branch_to_branch_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9765BCB2485758300FDD115 /* remove_selection_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_selection_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9765BCC2485758300FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9765BCD2485758300FDD115 /* remove_struct_member_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_struct_member_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9765BCE2485758300FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simple_conditional_branch_to_branch_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BCF2485758300FDD115 /* merge_blocks_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_blocks_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9765BD02485758300FDD115 /* change_operand_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = change_operand_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9765BD12485758300FDD115 /* structured_loop_to_selection_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = structured_loop_to_selection_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9765BD22485758300FDD115 /* remove_function_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_function_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9765BD32485758300FDD115 /* remove_unused_instruction_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_unused_instruction_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BD42485758300FDD115 /* change_operand_to_undef_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = change_operand_to_undef_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9765BD52485758300FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = structured_loop_to_selection_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BD62485758300FDD115 /* remove_selection_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_selection_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9765BD72485758300FDD115 /* remove_instruction_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_instruction_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9765BD82485758300FDD115 /* remove_selection_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_selection_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BD92485758300FDD115 /* merge_blocks_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_blocks_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BDA2485758300FDD115 /* pch_source_reduce.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source_reduce.cpp; sourceTree = "<group>"; };
+		A9765BDB2485758300FDD115 /* remove_struct_member_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_struct_member_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9765BDC2485758300FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_unused_struct_member_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BDD2485758300FDD115 /* remove_unused_instruction_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_unused_instruction_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9765BDE2485758300FDD115 /* reducer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reducer.cpp; sourceTree = "<group>"; };
+		A9765BDF2485758300FDD115 /* operand_to_undef_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand_to_undef_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9765BE02485758300FDD115 /* remove_function_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_function_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BE12485758300FDD115 /* pch_source_reduce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source_reduce.h; sourceTree = "<group>"; };
+		A9765BE22485758300FDD115 /* merge_blocks_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_blocks_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9765BE32485758300FDD115 /* reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9765BE42485758300FDD115 /* reducer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reducer.h; sourceTree = "<group>"; };
+		A9765BE52485758300FDD115 /* change_operand_to_undef_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = change_operand_to_undef_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9765BE62485758300FDD115 /* reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_opportunity.h; sourceTree = "<group>"; };
+		A9765BE72485758300FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conditional_branch_to_simple_conditional_branch_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BE82485758300FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand_to_dominating_id_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9765BE92485758300FDD115 /* reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BEA2485758300FDD115 /* change_operand_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = change_operand_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9765BEB2485758300FDD115 /* remove_block_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_block_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9765BEC2485758300FDD115 /* remove_block_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_block_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9765BED2485758300FDD115 /* reduction_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_util.h; sourceTree = "<group>"; };
+		A9765BEE2485758300FDD115 /* merge_blocks_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_blocks_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9765BEF2485758300FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9765BF02485758300FDD115 /* structured_loop_to_selection_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = structured_loop_to_selection_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9765BF12485758300FDD115 /* remove_block_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_block_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9765BF22485758300FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_unused_struct_member_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9765BF32485758300FDD115 /* reduction_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_pass.h; sourceTree = "<group>"; };
+		A9765BF42485758300FDD115 /* latest_version_opencl_std_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_opencl_std_header.h; sourceTree = "<group>"; };
+		A9765BF52485758300FDD115 /* spirv_optimizer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_optimizer_options.cpp; sourceTree = "<group>"; };
+		A9765BF62485758300FDD115 /* cfa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfa.h; sourceTree = "<group>"; };
+		A9765BF72485758300FDD115 /* pch_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source.h; sourceTree = "<group>"; };
+		A9765BF82485758300FDD115 /* enum_string_mapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum_string_mapping.h; sourceTree = "<group>"; };
+		A9765BF92485758300FDD115 /* spirv_fuzzer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_fuzzer_options.cpp; sourceTree = "<group>"; };
+		A9765BFA2485758300FDD115 /* spirv_reducer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_reducer_options.h; sourceTree = "<group>"; };
+		A9765BFB2485758300FDD115 /* spirv_validator_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_validator_options.cpp; sourceTree = "<group>"; };
+		A9765BFC2485758300FDD115 /* extinst.spv-amd-shader-trinary-minmax.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-trinary-minmax.grammar.json"; sourceTree = "<group>"; };
+		A9765BFD2485758300FDD115 /* print.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = print.cpp; sourceTree = "<group>"; };
+		A9765BFE2485758300FDD115 /* spirv_definition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_definition.h; sourceTree = "<group>"; };
+		A9765BFF2485758300FDD115 /* operand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand.h; sourceTree = "<group>"; };
+		A9765C002485758300FDD115 /* spirv_endian.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_endian.cpp; sourceTree = "<group>"; };
+		A9765C012485758300FDD115 /* macro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = macro.h; sourceTree = "<group>"; };
+		A9765C022485758300FDD115 /* spirv_constant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_constant.h; sourceTree = "<group>"; };
+		A9765C032485758300FDD115 /* extinst.spv-amd-gcn-shader.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-gcn-shader.grammar.json"; sourceTree = "<group>"; };
+		A9765C042485758300FDD115 /* binary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = binary.cpp; sourceTree = "<group>"; };
+		A9765C052485758300FDD115 /* spirv_validator_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_validator_options.h; sourceTree = "<group>"; };
+		A9765C062485758300FDD115 /* enum_string_mapping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = enum_string_mapping.cpp; sourceTree = "<group>"; };
+		A9765C072485758300FDD115 /* text_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text_handler.h; sourceTree = "<group>"; };
+		A9765C082485758300FDD115 /* parsed_operand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parsed_operand.h; sourceTree = "<group>"; };
+		A9765C092485758300FDD115 /* name_mapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = name_mapper.h; sourceTree = "<group>"; };
+		A9765C0A2485758300FDD115 /* spirv_reducer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_reducer_options.cpp; sourceTree = "<group>"; };
+		A9765C0B2485758300FDD115 /* parsed_operand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parsed_operand.cpp; sourceTree = "<group>"; };
+		A9765C0C2485758300FDD115 /* diagnostic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diagnostic.h; sourceTree = "<group>"; };
+		A9765C0D2485758300FDD115 /* spirv_endian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_endian.h; sourceTree = "<group>"; };
+		A9765C0E2485758300FDD115 /* name_mapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = name_mapper.cpp; sourceTree = "<group>"; };
+		A9765C0F2485758300FDD115 /* extinst.debuginfo.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = extinst.debuginfo.grammar.json; sourceTree = "<group>"; };
+		A9765C112485758300FDD115 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+		A9765C122485758300FDD115 /* linker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linker.cpp; sourceTree = "<group>"; };
+		A9765C132485758300FDD115 /* software_version.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = software_version.cpp; sourceTree = "<group>"; };
+		A9765C142485758300FDD115 /* opcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opcode.cpp; sourceTree = "<group>"; };
+		A9765C152485758300FDD115 /* print.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = print.h; sourceTree = "<group>"; };
+		A9765C162485758300FDD115 /* ext_inst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ext_inst.cpp; sourceTree = "<group>"; };
+		A9765C172485758300FDD115 /* disassemble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = disassemble.h; sourceTree = "<group>"; };
+		A9765C192485758300FDD115 /* optimizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = optimizer.cpp; sourceTree = "<group>"; };
+		A9765C1A2485758300FDD115 /* if_conversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = if_conversion.h; sourceTree = "<group>"; };
+		A9765C1B2485758300FDD115 /* register_pressure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = register_pressure.cpp; sourceTree = "<group>"; };
+		A9765C1C2485758300FDD115 /* loop_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_utils.cpp; sourceTree = "<group>"; };
+		A9765C1D2485758300FDD115 /* merge_return_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_return_pass.h; sourceTree = "<group>"; };
+		A9765C1E2485758300FDD115 /* inline_opaque_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_opaque_pass.h; sourceTree = "<group>"; };
+		A9765C1F2485758300FDD115 /* loop_fusion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fusion.h; sourceTree = "<group>"; };
+		A9765C202485758300FDD115 /* combine_access_chains.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = combine_access_chains.cpp; sourceTree = "<group>"; };
+		A9765C212485758300FDD115 /* build_module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = build_module.cpp; sourceTree = "<group>"; };
+		A9765C222485758300FDD115 /* composite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = composite.h; sourceTree = "<group>"; };
+		A9765C232485758300FDD115 /* compact_ids_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compact_ids_pass.h; sourceTree = "<group>"; };
+		A9765C242485758300FDD115 /* register_pressure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = register_pressure.h; sourceTree = "<group>"; };
+		A9765C252485758300FDD115 /* tree_iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree_iterator.h; sourceTree = "<group>"; };
+		A9765C262485758300FDD115 /* graphics_robust_access_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = graphics_robust_access_pass.h; sourceTree = "<group>"; };
+		A9765C272485758300FDD115 /* strip_atomic_counter_memory_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_atomic_counter_memory_pass.h; sourceTree = "<group>"; };
+		A9765C282485758300FDD115 /* legalize_vector_shuffle_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = legalize_vector_shuffle_pass.h; sourceTree = "<group>"; };
+		A9765C292485758300FDD115 /* local_single_store_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_single_store_elim_pass.h; sourceTree = "<group>"; };
+		A9765C2A2485758300FDD115 /* reduce_load_size.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduce_load_size.h; sourceTree = "<group>"; };
+		A9765C2B2485758300FDD115 /* code_sink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = code_sink.cpp; sourceTree = "<group>"; };
+		A9765C2C2485758300FDD115 /* types.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = types.cpp; sourceTree = "<group>"; };
+		A9765C2D2485758300FDD115 /* scalar_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_analysis.h; sourceTree = "<group>"; };
+		A9765C2E2485758300FDD115 /* strip_debug_info_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_debug_info_pass.h; sourceTree = "<group>"; };
+		A9765C2F2485758300FDD115 /* cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfg.cpp; sourceTree = "<group>"; };
+		A9765C302485758300FDD115 /* strip_atomic_counter_memory_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_atomic_counter_memory_pass.cpp; sourceTree = "<group>"; };
+		A9765C312485758300FDD115 /* decoration_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoration_manager.cpp; sourceTree = "<group>"; };
+		A9765C322485758300FDD115 /* local_single_block_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_single_block_elim_pass.cpp; sourceTree = "<group>"; };
+		A9765C332485758300FDD115 /* freeze_spec_constant_value_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = freeze_spec_constant_value_pass.cpp; sourceTree = "<group>"; };
+		A9765C342485758300FDD115 /* replace_invalid_opc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = replace_invalid_opc.h; sourceTree = "<group>"; };
+		A9765C352485758300FDD115 /* local_access_chain_convert_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_access_chain_convert_pass.h; sourceTree = "<group>"; };
+		A9765C362485758300FDD115 /* inst_bindless_check_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inst_bindless_check_pass.cpp; sourceTree = "<group>"; };
+		A9765C372485758300FDD115 /* local_redundancy_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_redundancy_elimination.cpp; sourceTree = "<group>"; };
+		A9765C382485758300FDD115 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+		A9765C392485758300FDD115 /* instrument_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instrument_pass.cpp; sourceTree = "<group>"; };
+		A9765C3A2485758300FDD115 /* propagator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = propagator.h; sourceTree = "<group>"; };
+		A9765C3B2485758300FDD115 /* instruction_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction_list.h; sourceTree = "<group>"; };
+		A9765C3C2485758300FDD115 /* feature_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_manager.cpp; sourceTree = "<group>"; };
+		A9765C3D2485758300FDD115 /* pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pass.cpp; sourceTree = "<group>"; };
+		A9765C3E2485758300FDD115 /* loop_fission.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fission.cpp; sourceTree = "<group>"; };
+		A9765C3F2485758300FDD115 /* dominator_tree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dominator_tree.cpp; sourceTree = "<group>"; };
+		A9765C402485758300FDD115 /* amd_ext_to_khr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = amd_ext_to_khr.h; sourceTree = "<group>"; };
+		A9765C412485758300FDD115 /* merge_return_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_return_pass.cpp; sourceTree = "<group>"; };
+		A9765C422485758300FDD115 /* ir_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_context.h; sourceTree = "<group>"; };
+		A9765C432485758300FDD115 /* eliminate_dead_constant_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_constant_pass.cpp; sourceTree = "<group>"; };
+		A9765C442485758300FDD115 /* cfg_cleanup_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfg_cleanup_pass.cpp; sourceTree = "<group>"; };
+		A9765C452485758300FDD115 /* wrap_opkill.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_opkill.cpp; sourceTree = "<group>"; };
+		A9765C462485758300FDD115 /* const_folding_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = const_folding_rules.cpp; sourceTree = "<group>"; };
+		A9765C472485758300FDD115 /* loop_unroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_unroller.h; sourceTree = "<group>"; };
+		A9765C482485758300FDD115 /* strip_debug_info_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_debug_info_pass.cpp; sourceTree = "<group>"; };
+		A9765C492485758300FDD115 /* ssa_rewrite_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ssa_rewrite_pass.cpp; sourceTree = "<group>"; };
+		A9765C4A2485758300FDD115 /* loop_dependence.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_dependence.cpp; sourceTree = "<group>"; };
+		A9765C4B2485758300FDD115 /* unify_const_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unify_const_pass.h; sourceTree = "<group>"; };
+		A9765C4C2485758300FDD115 /* ir_loader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_loader.h; sourceTree = "<group>"; };
+		A9765C4D2485758300FDD115 /* inst_debug_printf_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inst_debug_printf_pass.cpp; sourceTree = "<group>"; };
+		A9765C4E2485758300FDD115 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
+		A9765C4F2485758300FDD115 /* fold_spec_constant_op_and_composite_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fold_spec_constant_op_and_composite_pass.h; sourceTree = "<group>"; };
+		A9765C502485758300FDD115 /* mem_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mem_pass.cpp; sourceTree = "<group>"; };
+		A9765C512485758300FDD115 /* basic_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic_block.h; sourceTree = "<group>"; };
+		A9765C522485758300FDD115 /* remove_duplicates_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_duplicates_pass.cpp; sourceTree = "<group>"; };
+		A9765C532485758300FDD115 /* dead_variable_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_variable_elimination.cpp; sourceTree = "<group>"; };
+		A9765C542485758300FDD115 /* block_merge_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block_merge_pass.h; sourceTree = "<group>"; };
+		A9765C552485758400FDD115 /* module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = module.cpp; sourceTree = "<group>"; };
+		A9765C562485758400FDD115 /* debug_info_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debug_info_manager.h; sourceTree = "<group>"; };
+		A9765C572485758400FDD115 /* fold_spec_constant_op_and_composite_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fold_spec_constant_op_and_composite_pass.cpp; sourceTree = "<group>"; };
+		A9765C582485758400FDD115 /* loop_unswitch_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_unswitch_pass.cpp; sourceTree = "<group>"; };
+		A9765C592485758400FDD115 /* unify_const_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unify_const_pass.cpp; sourceTree = "<group>"; };
+		A9765C5A2485758400FDD115 /* type_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = type_manager.cpp; sourceTree = "<group>"; };
+		A9765C5B2485758400FDD115 /* generate_webgpu_initializers_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = generate_webgpu_initializers_pass.cpp; sourceTree = "<group>"; };
+		A9765C5C2485758400FDD115 /* private_to_local_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = private_to_local_pass.h; sourceTree = "<group>"; };
+		A9765C5D2485758400FDD115 /* convert_to_half_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = convert_to_half_pass.h; sourceTree = "<group>"; };
+		A9765C5E2485758400FDD115 /* relax_float_ops_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = relax_float_ops_pass.h; sourceTree = "<group>"; };
+		A9765C5F2485758400FDD115 /* inline_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_pass.cpp; sourceTree = "<group>"; };
+		A9765C602485758400FDD115 /* def_use_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = def_use_manager.h; sourceTree = "<group>"; };
+		A9765C612485758400FDD115 /* ir_loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ir_loader.cpp; sourceTree = "<group>"; };
+		A9765C622485758400FDD115 /* cfg_cleanup_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfg_cleanup_pass.h; sourceTree = "<group>"; };
+		A9765C632485758400FDD115 /* licm_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = licm_pass.cpp; sourceTree = "<group>"; };
+		A9765C642485758400FDD115 /* eliminate_dead_functions_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_functions_pass.cpp; sourceTree = "<group>"; };
+		A9765C652485758400FDD115 /* local_redundancy_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_redundancy_elimination.h; sourceTree = "<group>"; };
+		A9765C662485758400FDD115 /* split_invalid_unreachable_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = split_invalid_unreachable_pass.cpp; sourceTree = "<group>"; };
+		A9765C672485758400FDD115 /* loop_peeling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_peeling.h; sourceTree = "<group>"; };
+		A9765C682485758400FDD115 /* vector_dce.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vector_dce.cpp; sourceTree = "<group>"; };
+		A9765C692485758400FDD115 /* block_merge_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block_merge_util.h; sourceTree = "<group>"; };
+		A9765C6A2485758400FDD115 /* loop_unroller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_unroller.cpp; sourceTree = "<group>"; };
+		A9765C6B2485758400FDD115 /* desc_sroa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = desc_sroa.h; sourceTree = "<group>"; };
+		A9765C6C2485758400FDD115 /* constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = constants.cpp; sourceTree = "<group>"; };
+		A9765C6D2485758400FDD115 /* loop_fusion_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fusion_pass.h; sourceTree = "<group>"; };
+		A9765C6E2485758400FDD115 /* struct_cfg_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = struct_cfg_analysis.h; sourceTree = "<group>"; };
+		A9765C6F2485758400FDD115 /* inst_buff_addr_check_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inst_buff_addr_check_pass.cpp; sourceTree = "<group>"; };
+		A9765C702485758400FDD115 /* def_use_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = def_use_manager.cpp; sourceTree = "<group>"; };
+		A9765C712485758400FDD115 /* wrap_opkill.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_opkill.h; sourceTree = "<group>"; };
+		A9765C722485758400FDD115 /* strip_reflect_info_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_reflect_info_pass.cpp; sourceTree = "<group>"; };
+		A9765C732485758400FDD115 /* decoration_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration_manager.h; sourceTree = "<group>"; };
+		A9765C742485758400FDD115 /* ccp_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ccp_pass.cpp; sourceTree = "<group>"; };
+		A9765C752485758400FDD115 /* process_lines_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = process_lines_pass.h; sourceTree = "<group>"; };
+		A9765C762485758400FDD115 /* local_single_block_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_single_block_elim_pass.h; sourceTree = "<group>"; };
+		A9765C772485758400FDD115 /* pch_source_opt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source_opt.cpp; sourceTree = "<group>"; };
+		A9765C782485758400FDD115 /* inst_buff_addr_check_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inst_buff_addr_check_pass.h; sourceTree = "<group>"; };
+		A9765C792485758400FDD115 /* strength_reduction_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strength_reduction_pass.h; sourceTree = "<group>"; };
+		A9765C7A2485758400FDD115 /* aggressive_dead_code_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aggressive_dead_code_elim_pass.cpp; sourceTree = "<group>"; };
+		A9765C7B2485758400FDD115 /* eliminate_dead_functions_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_functions_util.cpp; sourceTree = "<group>"; };
+		A9765C7C2485758400FDD115 /* inst_debug_printf_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inst_debug_printf_pass.h; sourceTree = "<group>"; };
+		A9765C7D2485758400FDD115 /* simplification_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simplification_pass.cpp; sourceTree = "<group>"; };
+		A9765C7E2485758400FDD115 /* dead_branch_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_branch_elim_pass.cpp; sourceTree = "<group>"; };
+		A9765C7F2485758400FDD115 /* flatten_decoration_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flatten_decoration_pass.cpp; sourceTree = "<group>"; };
+		A9765C802485758400FDD115 /* dead_insert_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_insert_elim_pass.h; sourceTree = "<group>"; };
+		A9765C812485758400FDD115 /* folding_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = folding_rules.cpp; sourceTree = "<group>"; };
+		A9765C822485758400FDD115 /* freeze_spec_constant_value_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = freeze_spec_constant_value_pass.h; sourceTree = "<group>"; };
+		A9765C832485758400FDD115 /* ir_context.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ir_context.cpp; sourceTree = "<group>"; };
+		A9765C842485758400FDD115 /* instrument_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instrument_pass.h; sourceTree = "<group>"; };
+		A9765C852485758400FDD115 /* mem_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem_pass.h; sourceTree = "<group>"; };
+		A9765C862485758400FDD115 /* loop_descriptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_descriptor.cpp; sourceTree = "<group>"; };
+		A9765C872485758400FDD115 /* eliminate_dead_members_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_members_pass.h; sourceTree = "<group>"; };
+		A9765C882485758400FDD115 /* function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cpp; sourceTree = "<group>"; };
+		A9765C892485758400FDD115 /* instruction_list.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction_list.cpp; sourceTree = "<group>"; };
+		A9765C8A2485758400FDD115 /* composite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = composite.cpp; sourceTree = "<group>"; };
+		A9765C8B2485758400FDD115 /* convert_to_half_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = convert_to_half_pass.cpp; sourceTree = "<group>"; };
+		A9765C8C2485758400FDD115 /* process_lines_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = process_lines_pass.cpp; sourceTree = "<group>"; };
+		A9765C8D2485758400FDD115 /* inline_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_pass.h; sourceTree = "<group>"; };
+		A9765C8E2485758400FDD115 /* loop_dependence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_dependence.h; sourceTree = "<group>"; };
+		A9765C8F2485758400FDD115 /* value_number_table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = value_number_table.h; sourceTree = "<group>"; };
+		A9765C902485758400FDD115 /* flatten_decoration_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flatten_decoration_pass.h; sourceTree = "<group>"; };
+		A9765C912485758400FDD115 /* if_conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = if_conversion.cpp; sourceTree = "<group>"; };
+		A9765C922485758400FDD115 /* debug_info_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = debug_info_manager.cpp; sourceTree = "<group>"; };
+		A9765C932485758400FDD115 /* inline_exhaustive_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_exhaustive_pass.h; sourceTree = "<group>"; };
+		A9765C942485758400FDD115 /* constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = constants.h; sourceTree = "<group>"; };
+		A9765C952485758400FDD115 /* eliminate_dead_members_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_members_pass.cpp; sourceTree = "<group>"; };
+		A9765C962485758400FDD115 /* strength_reduction_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strength_reduction_pass.cpp; sourceTree = "<group>"; };
+		A9765C972485758400FDD115 /* desc_sroa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = desc_sroa.cpp; sourceTree = "<group>"; };
+		A9765C982485758400FDD115 /* block_merge_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = block_merge_util.cpp; sourceTree = "<group>"; };
+		A9765C992485758400FDD115 /* upgrade_memory_model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = upgrade_memory_model.h; sourceTree = "<group>"; };
+		A9765C9A2485758400FDD115 /* copy_prop_arrays.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = copy_prop_arrays.cpp; sourceTree = "<group>"; };
+		A9765C9B2485758400FDD115 /* pass_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pass_manager.cpp; sourceTree = "<group>"; };
+		A9765C9C2485758400FDD115 /* inline_exhaustive_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_exhaustive_pass.cpp; sourceTree = "<group>"; };
+		A9765C9D2485758400FDD115 /* loop_fission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fission.h; sourceTree = "<group>"; };
+		A9765C9E2485758400FDD115 /* workaround1209.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = workaround1209.h; sourceTree = "<group>"; };
+		A9765C9F2485758400FDD115 /* loop_fusion_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fusion_pass.cpp; sourceTree = "<group>"; };
+		A9765CA02485758400FDD115 /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
+		A9765CA12485758400FDD115 /* split_invalid_unreachable_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = split_invalid_unreachable_pass.h; sourceTree = "<group>"; };
+		A9765CA22485758400FDD115 /* copy_prop_arrays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = copy_prop_arrays.h; sourceTree = "<group>"; };
+		A9765CA32485758400FDD115 /* eliminate_dead_constant_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_constant_pass.h; sourceTree = "<group>"; };
+		A9765CA42485758400FDD115 /* dead_insert_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_insert_elim_pass.cpp; sourceTree = "<group>"; };
+		A9765CA52485758400FDD115 /* ssa_rewrite_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssa_rewrite_pass.h; sourceTree = "<group>"; };
+		A9765CA62485758400FDD115 /* scalar_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_analysis.cpp; sourceTree = "<group>"; };
+		A9765CA72485758400FDD115 /* dead_variable_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_variable_elimination.h; sourceTree = "<group>"; };
+		A9765CA82485758400FDD115 /* block_merge_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = block_merge_pass.cpp; sourceTree = "<group>"; };
+		A9765CA92485758400FDD115 /* dominator_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dominator_analysis.h; sourceTree = "<group>"; };
+		A9765CAA2485758400FDD115 /* pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pass.h; sourceTree = "<group>"; };
+		A9765CAB2485758400FDD115 /* folding_rules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = folding_rules.h; sourceTree = "<group>"; };
+		A9765CAC2485758400FDD115 /* eliminate_dead_functions_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_functions_pass.h; sourceTree = "<group>"; };
+		A9765CAD2485758400FDD115 /* eliminate_dead_functions_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_functions_util.h; sourceTree = "<group>"; };
+		A9765CAE2485758400FDD115 /* fold.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fold.h; sourceTree = "<group>"; };
+		A9765CAF2485758400FDD115 /* local_single_store_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_single_store_elim_pass.cpp; sourceTree = "<group>"; };
+		A9765CB02485758400FDD115 /* dead_branch_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_branch_elim_pass.h; sourceTree = "<group>"; };
+		A9765CB12485758400FDD115 /* private_to_local_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = private_to_local_pass.cpp; sourceTree = "<group>"; };
+		A9765CB22485758400FDD115 /* scalar_analysis_nodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_analysis_nodes.h; sourceTree = "<group>"; };
+		A9765CB32485758400FDD115 /* propagator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = propagator.cpp; sourceTree = "<group>"; };
+		A9765CB42485758400FDD115 /* fix_storage_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fix_storage_class.h; sourceTree = "<group>"; };
+		A9765CB52485758400FDD115 /* loop_dependence_helpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_dependence_helpers.cpp; sourceTree = "<group>"; };
+		A9765CB62485758400FDD115 /* set_spec_constant_default_value_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = set_spec_constant_default_value_pass.cpp; sourceTree = "<group>"; };
+		A9765CB72485758400FDD115 /* passes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = passes.h; sourceTree = "<group>"; };
+		A9765CB82485758400FDD115 /* fold.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fold.cpp; sourceTree = "<group>"; };
+		A9765CB92485758400FDD115 /* amd_ext_to_khr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = amd_ext_to_khr.cpp; sourceTree = "<group>"; };
+		A9765CBA2485758400FDD115 /* strip_reflect_info_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_reflect_info_pass.h; sourceTree = "<group>"; };
+		A9765CBB2485758400FDD115 /* scalar_replacement_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_replacement_pass.cpp; sourceTree = "<group>"; };
+		A9765CBC2485758400FDD115 /* simplification_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simplification_pass.h; sourceTree = "<group>"; };
+		A9765CBD2485758400FDD115 /* remove_duplicates_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_duplicates_pass.h; sourceTree = "<group>"; };
+		A9765CBE2485758400FDD115 /* redundancy_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = redundancy_elimination.cpp; sourceTree = "<group>"; };
+		A9765CBF2485758400FDD115 /* reflect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reflect.h; sourceTree = "<group>"; };
+		A9765CC02485758400FDD115 /* workaround1209.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = workaround1209.cpp; sourceTree = "<group>"; };
+		A9765CC12485758400FDD115 /* null_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = null_pass.h; sourceTree = "<group>"; };
+		A9765CC22485758400FDD115 /* relax_float_ops_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = relax_float_ops_pass.cpp; sourceTree = "<group>"; };
+		A9765CC32485758400FDD115 /* const_folding_rules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = const_folding_rules.h; sourceTree = "<group>"; };
+		A9765CC42485758400FDD115 /* scalar_replacement_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_replacement_pass.h; sourceTree = "<group>"; };
+		A9765CC52485758400FDD115 /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = "<group>"; };
+		A9765CC62485758400FDD115 /* pch_source_opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source_opt.h; sourceTree = "<group>"; };
+		A9765CC72485758400FDD115 /* reduce_load_size.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduce_load_size.cpp; sourceTree = "<group>"; };
+		A9765CC82485758400FDD115 /* redundancy_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = redundancy_elimination.h; sourceTree = "<group>"; };
+		A9765CC92485758400FDD115 /* fix_storage_class.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fix_storage_class.cpp; sourceTree = "<group>"; };
+		A9765CCA2485758400FDD115 /* value_number_table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = value_number_table.cpp; sourceTree = "<group>"; };
+		A9765CCB2485758400FDD115 /* inline_opaque_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_opaque_pass.cpp; sourceTree = "<group>"; };
+		A9765CCC2485758400FDD115 /* replace_invalid_opc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = replace_invalid_opc.cpp; sourceTree = "<group>"; };
+		A9765CCD2485758400FDD115 /* loop_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_utils.h; sourceTree = "<group>"; };
+		A9765CCE2485758400FDD115 /* module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = module.h; sourceTree = "<group>"; };
+		A9765CCF2485758400FDD115 /* dominator_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dominator_analysis.cpp; sourceTree = "<group>"; };
+		A9765CD02485758400FDD115 /* decompose_initialized_variables_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decompose_initialized_variables_pass.cpp; sourceTree = "<group>"; };
+		A9765CD12485758400FDD115 /* ir_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_builder.h; sourceTree = "<group>"; };
+		A9765CD22485758400FDD115 /* loop_unswitch_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_unswitch_pass.h; sourceTree = "<group>"; };
+		A9765CD32485758400FDD115 /* cfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfg.h; sourceTree = "<group>"; };
+		A9765CD42485758400FDD115 /* code_sink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = code_sink.h; sourceTree = "<group>"; };
+		A9765CD52485758400FDD115 /* loop_descriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_descriptor.h; sourceTree = "<group>"; };
+		A9765CD62485758400FDD115 /* generate_webgpu_initializers_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = generate_webgpu_initializers_pass.h; sourceTree = "<group>"; };
+		A9765CD72485758400FDD115 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
+		A9765CD82485758400FDD115 /* aggressive_dead_code_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aggressive_dead_code_elim_pass.h; sourceTree = "<group>"; };
+		A9765CD92485758400FDD115 /* struct_cfg_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = struct_cfg_analysis.cpp; sourceTree = "<group>"; };
+		A9765CDA2485758400FDD115 /* vector_dce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector_dce.h; sourceTree = "<group>"; };
+		A9765CDB2485758400FDD115 /* combine_access_chains.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = combine_access_chains.h; sourceTree = "<group>"; };
+		A9765CDC2485758400FDD115 /* pass_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pass_manager.h; sourceTree = "<group>"; };
+		A9765CDD2485758400FDD115 /* local_access_chain_convert_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_access_chain_convert_pass.cpp; sourceTree = "<group>"; };
+		A9765CDE2485758400FDD115 /* basic_block.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic_block.cpp; sourceTree = "<group>"; };
+		A9765CDF2485758400FDD115 /* iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iterator.h; sourceTree = "<group>"; };
+		A9765CE02485758400FDD115 /* licm_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = licm_pass.h; sourceTree = "<group>"; };
+		A9765CE12485758400FDD115 /* build_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = build_module.h; sourceTree = "<group>"; };
+		A9765CE22485758400FDD115 /* ccp_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ccp_pass.h; sourceTree = "<group>"; };
+		A9765CE32485758400FDD115 /* graphics_robust_access_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = graphics_robust_access_pass.cpp; sourceTree = "<group>"; };
+		A9765CE42485758400FDD115 /* decompose_initialized_variables_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decompose_initialized_variables_pass.h; sourceTree = "<group>"; };
+		A9765CE52485758400FDD115 /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
+		A9765CE62485758400FDD115 /* loop_fusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fusion.cpp; sourceTree = "<group>"; };
+		A9765CE72485758400FDD115 /* upgrade_memory_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = upgrade_memory_model.cpp; sourceTree = "<group>"; };
+		A9765CE82485758400FDD115 /* feature_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = feature_manager.h; sourceTree = "<group>"; };
+		A9765CE92485758400FDD115 /* inst_bindless_check_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inst_bindless_check_pass.h; sourceTree = "<group>"; };
+		A9765CEA2485758400FDD115 /* scalar_analysis_simplification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_analysis_simplification.cpp; sourceTree = "<group>"; };
+		A9765CEB2485758400FDD115 /* set_spec_constant_default_value_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = set_spec_constant_default_value_pass.h; sourceTree = "<group>"; };
+		A9765CEC2485758400FDD115 /* dominator_tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dominator_tree.h; sourceTree = "<group>"; };
+		A9765CED2485758400FDD115 /* legalize_vector_shuffle_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = legalize_vector_shuffle_pass.cpp; sourceTree = "<group>"; };
+		A9765CEE2485758400FDD115 /* type_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = type_manager.h; sourceTree = "<group>"; };
+		A9765CEF2485758400FDD115 /* compact_ids_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = compact_ids_pass.cpp; sourceTree = "<group>"; };
+		A9765CF02485758400FDD115 /* loop_peeling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_peeling.cpp; sourceTree = "<group>"; };
+		A9765CF12485758400FDD115 /* table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = table.h; sourceTree = "<group>"; };
+		A9765DB22485758500FDD115 /* ext_inst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ext_inst.h; sourceTree = "<group>"; };
+		A9765DB32485758500FDD115 /* diagnostic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = diagnostic.cpp; sourceTree = "<group>"; };
+		A9765DB42485758500FDD115 /* latest_version_spirv_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_spirv_header.h; sourceTree = "<group>"; };
+		A9765DB52485758500FDD115 /* libspirv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = libspirv.cpp; sourceTree = "<group>"; };
+		A9765DB62485758500FDD115 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
+		A9765DB72485758500FDD115 /* spirv_optimizer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_optimizer_options.h; sourceTree = "<group>"; };
+		A9765DB82485758500FDD115 /* opcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opcode.h; sourceTree = "<group>"; };
+		A9765DB92485758500FDD115 /* operand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand.cpp; sourceTree = "<group>"; };
+		A9765DBA2485758500FDD115 /* latest_version_glsl_std_450_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_glsl_std_450_header.h; sourceTree = "<group>"; };
+		A9765DBB2485758500FDD115 /* extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = extensions.h; sourceTree = "<group>"; };
+		A9765DBC2485758500FDD115 /* disassemble.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = disassemble.cpp; sourceTree = "<group>"; };
+		A9765DBD2485758500FDD115 /* binary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = binary.h; sourceTree = "<group>"; };
+		A9765DBE2485758500FDD115 /* text_handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text_handler.cpp; sourceTree = "<group>"; };
+		A9765DC02485758500FDD115 /* validate_annotation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_annotation.cpp; sourceTree = "<group>"; };
+		A9765DC12485758500FDD115 /* validate_misc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_misc.cpp; sourceTree = "<group>"; };
+		A9765DC22485758500FDD115 /* validate_cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_cfg.cpp; sourceTree = "<group>"; };
+		A9765DC32485758500FDD115 /* validate_capability.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_capability.cpp; sourceTree = "<group>"; };
+		A9765DC42485758500FDD115 /* construct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = construct.h; sourceTree = "<group>"; };
+		A9765DC52485758500FDD115 /* validate_barriers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_barriers.cpp; sourceTree = "<group>"; };
+		A9765DC62485758500FDD115 /* validate_non_uniform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_non_uniform.cpp; sourceTree = "<group>"; };
+		A9765DC72485758500FDD115 /* validate_scopes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_scopes.cpp; sourceTree = "<group>"; };
+		A9765DC82485758500FDD115 /* validate_atomics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_atomics.cpp; sourceTree = "<group>"; };
+		A9765DC92485758500FDD115 /* basic_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic_block.h; sourceTree = "<group>"; };
+		A9765DCA2485758500FDD115 /* validate_instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_instruction.cpp; sourceTree = "<group>"; };
+		A9765DCB2485758500FDD115 /* validate_decorations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_decorations.cpp; sourceTree = "<group>"; };
+		A9765DCC2485758500FDD115 /* validate_debug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_debug.cpp; sourceTree = "<group>"; };
+		A9765DCD2485758500FDD115 /* validate_builtins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_builtins.cpp; sourceTree = "<group>"; };
+		A9765DCE2485758500FDD115 /* validate_interfaces.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_interfaces.cpp; sourceTree = "<group>"; };
+		A9765DCF2485758500FDD115 /* validate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate.cpp; sourceTree = "<group>"; };
+		A9765DD02485758500FDD115 /* validation_state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validation_state.h; sourceTree = "<group>"; };
+		A9765DD12485758500FDD115 /* validate_constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_constants.cpp; sourceTree = "<group>"; };
+		A9765DD22485758500FDD115 /* validate_bitwise.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_bitwise.cpp; sourceTree = "<group>"; };
+		A9765DD32485758500FDD115 /* validate_extensions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_extensions.cpp; sourceTree = "<group>"; };
+		A9765DD42485758500FDD115 /* construct.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = construct.cpp; sourceTree = "<group>"; };
+		A9765DD52485758500FDD115 /* function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cpp; sourceTree = "<group>"; };
+		A9765DD62485758500FDD115 /* validate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate.h; sourceTree = "<group>"; };
+		A9765DD72485758500FDD115 /* validate_adjacency.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_adjacency.cpp; sourceTree = "<group>"; };
+		A9765DD82485758500FDD115 /* validate_conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_conversion.cpp; sourceTree = "<group>"; };
+		A9765DD92485758500FDD115 /* validate_small_type_uses.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_small_type_uses.cpp; sourceTree = "<group>"; };
+		A9765DDA2485758500FDD115 /* validate_scopes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate_scopes.h; sourceTree = "<group>"; };
+		A9765DDB2485758500FDD115 /* validate_id.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_id.cpp; sourceTree = "<group>"; };
+		A9765DDC2485758500FDD115 /* validate_memory_semantics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate_memory_semantics.h; sourceTree = "<group>"; };
+		A9765DDD2485758500FDD115 /* validate_arithmetics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_arithmetics.cpp; sourceTree = "<group>"; };
+		A9765DDE2485758500FDD115 /* validate_mode_setting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_mode_setting.cpp; sourceTree = "<group>"; };
+		A9765DDF2485758500FDD115 /* validate_memory_semantics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_memory_semantics.cpp; sourceTree = "<group>"; };
+		A9765DE02485758500FDD115 /* validate_logicals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_logicals.cpp; sourceTree = "<group>"; };
+		A9765DE12485758500FDD115 /* validate_derivatives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_derivatives.cpp; sourceTree = "<group>"; };
+		A9765DE22485758500FDD115 /* validate_memory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_memory.cpp; sourceTree = "<group>"; };
+		A9765DE32485758500FDD115 /* validate_image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_image.cpp; sourceTree = "<group>"; };
+		A9765DE42485758500FDD115 /* validate_literals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_literals.cpp; sourceTree = "<group>"; };
+		A9765DE52485758500FDD115 /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = "<group>"; };
+		A9765DE62485758500FDD115 /* validate_type.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_type.cpp; sourceTree = "<group>"; };
+		A9765DE72485758500FDD115 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
+		A9765DE82485758500FDD115 /* validate_execution_limitations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_execution_limitations.cpp; sourceTree = "<group>"; };
+		A9765DE92485758500FDD115 /* validate_layout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_layout.cpp; sourceTree = "<group>"; };
+		A9765DEA2485758500FDD115 /* basic_block.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic_block.cpp; sourceTree = "<group>"; };
+		A9765DEB2485758500FDD115 /* validate_function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_function.cpp; sourceTree = "<group>"; };
+		A9765DEC2485758500FDD115 /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
+		A9765DED2485758500FDD115 /* validate_composites.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_composites.cpp; sourceTree = "<group>"; };
+		A9765DEE2485758500FDD115 /* validation_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validation_state.cpp; sourceTree = "<group>"; };
+		A9765DEF2485758500FDD115 /* validate_primitives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_primitives.cpp; sourceTree = "<group>"; };
+		A9765DF02485758500FDD115 /* decoration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration.h; sourceTree = "<group>"; };
 		A9C2104521D14FD7006BA2D3 /* fetchDependencies */ = {isa = PBXFileReference; lastKnownFileType = text; path = fetchDependencies; sourceTree = "<group>"; };
 		A9C2104721D15843006BA2D3 /* ExternalRevisions */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ExternalRevisions; sourceTree = "<group>"; };
 /* End PBXFileReference section */
@@ -1634,448 +1652,6 @@
 			path = External;
 			sourceTree = "<group>";
 		};
-		A941583E243667F600566F16 /* source */ = {
-			isa = PBXGroup;
-			children = (
-				A941583F243667F600566F16 /* spirv_target_env.cpp */,
-				A9415840243667F600566F16 /* extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json */,
-				A9415841243667F600566F16 /* spirv_fuzzer_options.h */,
-				A9415842243667F600566F16 /* assembly_grammar.h */,
-				A9415843243667F600566F16 /* enum_set.h */,
-				A9415844243667F600566F16 /* CMakeLists.txt */,
-				A9415845243667F600566F16 /* extinst.spv-amd-shader-ballot.grammar.json */,
-				A9415846243667F600566F16 /* text.cpp */,
-				A9415847243667F600566F16 /* assembly_grammar.cpp */,
-				A9415848243667F600566F16 /* text.h */,
-				A9415849243667F600566F16 /* extensions.cpp */,
-				A941584A243667F600566F16 /* pch_source.cpp */,
-				A941584B243667F600566F16 /* util */,
-				A941585A243667F600566F16 /* spirv_target_env.h */,
-				A941585B243667F600566F16 /* table.cpp */,
-				A941585C243667F600566F16 /* extinst.opencl.debuginfo.100.grammar.json */,
-				A941585D243667F600566F16 /* reduce */,
-				A9415894243667F600566F16 /* latest_version_opencl_std_header.h */,
-				A9415895243667F600566F16 /* spirv_optimizer_options.cpp */,
-				A9415896243667F600566F16 /* cfa.h */,
-				A9415897243667F600566F16 /* pch_source.h */,
-				A9415898243667F600566F16 /* enum_string_mapping.h */,
-				A9415899243667F600566F16 /* spirv_fuzzer_options.cpp */,
-				A941589A243667F600566F16 /* spirv_reducer_options.h */,
-				A941589B243667F600566F16 /* spirv_validator_options.cpp */,
-				A941589C243667F600566F16 /* extinst.spv-amd-shader-trinary-minmax.grammar.json */,
-				A941589D243667F600566F16 /* print.cpp */,
-				A941589E243667F600566F16 /* spirv_definition.h */,
-				A941589F243667F600566F16 /* operand.h */,
-				A94158A0243667F600566F16 /* spirv_endian.cpp */,
-				A94158A1243667F600566F16 /* macro.h */,
-				A94158A2243667F600566F16 /* spirv_constant.h */,
-				A94158A3243667F600566F16 /* extinst.spv-amd-gcn-shader.grammar.json */,
-				A94158A4243667F600566F16 /* binary.cpp */,
-				A94158A5243667F600566F16 /* spirv_validator_options.h */,
-				A94158A6243667F600566F16 /* enum_string_mapping.cpp */,
-				A94158A7243667F600566F16 /* text_handler.h */,
-				A94158A8243667F600566F16 /* parsed_operand.h */,
-				A94158A9243667F600566F16 /* name_mapper.h */,
-				A94158AA243667F600566F16 /* spirv_reducer_options.cpp */,
-				A94158AB243667F600566F16 /* parsed_operand.cpp */,
-				A94158AC243667F600566F16 /* diagnostic.h */,
-				A94158AD243667F600566F16 /* spirv_endian.h */,
-				A94158AE243667F600566F16 /* name_mapper.cpp */,
-				A94158AF243667F600566F16 /* extinst.debuginfo.grammar.json */,
-				A94158B0243667F600566F16 /* link */,
-				A94158B3243667F600566F16 /* software_version.cpp */,
-				A94158B4243667F600566F16 /* opcode.cpp */,
-				A94158B5243667F600566F16 /* print.h */,
-				A94158B6243667F600566F16 /* ext_inst.cpp */,
-				A94158B7243667F600566F16 /* disassemble.h */,
-				A94158B8243667F600566F16 /* opt */,
-				A941598F243667F700566F16 /* table.h */,
-				A9415A48243667F700566F16 /* ext_inst.h */,
-				A9415A49243667F700566F16 /* diagnostic.cpp */,
-				A9415A4A243667F700566F16 /* latest_version_spirv_header.h */,
-				A9415A4B243667F700566F16 /* libspirv.cpp */,
-				A9415A4C243667F700566F16 /* instruction.h */,
-				A9415A4D243667F700566F16 /* spirv_optimizer_options.h */,
-				A9415A4E243667F700566F16 /* opcode.h */,
-				A9415A4F243667F700566F16 /* operand.cpp */,
-				A9415A50243667F700566F16 /* latest_version_glsl_std_450_header.h */,
-				A9415A51243667F700566F16 /* extensions.h */,
-				A9415A52243667F700566F16 /* disassemble.cpp */,
-				A9415A53243667F700566F16 /* binary.h */,
-				A9415A54243667F700566F16 /* text_handler.cpp */,
-				A9415A55243667F700566F16 /* val */,
-			);
-			path = source;
-			sourceTree = "<group>";
-		};
-		A941584B243667F600566F16 /* util */ = {
-			isa = PBXGroup;
-			children = (
-				A941584C243667F600566F16 /* parse_number.h */,
-				A941584D243667F600566F16 /* ilist_node.h */,
-				A941584E243667F600566F16 /* make_unique.h */,
-				A941584F243667F600566F16 /* string_utils.h */,
-				A9415850243667F600566F16 /* small_vector.h */,
-				A9415851243667F600566F16 /* timer.cpp */,
-				A9415852243667F600566F16 /* timer.h */,
-				A9415853243667F600566F16 /* string_utils.cpp */,
-				A9415854243667F600566F16 /* bit_vector.h */,
-				A9415855243667F600566F16 /* bitutils.h */,
-				A9415856243667F600566F16 /* hex_float.h */,
-				A9415857243667F600566F16 /* parse_number.cpp */,
-				A9415858243667F600566F16 /* bit_vector.cpp */,
-				A9415859243667F600566F16 /* ilist.h */,
-			);
-			path = util;
-			sourceTree = "<group>";
-		};
-		A941585D243667F600566F16 /* reduce */ = {
-			isa = PBXGroup;
-			children = (
-				A941585E243667F600566F16 /* operand_to_undef_reduction_opportunity_finder.h */,
-				A941585F243667F600566F16 /* remove_selection_reduction_opportunity.cpp */,
-				A9415860243667F600566F16 /* remove_block_reduction_opportunity.h */,
-				A9415861243667F600566F16 /* operand_to_dominating_id_reduction_opportunity_finder.h */,
-				A9415862243667F600566F16 /* reduction_pass.cpp */,
-				A9415863243667F600566F16 /* operand_to_const_reduction_opportunity_finder.cpp */,
-				A9415864243667F600566F16 /* operand_to_const_reduction_opportunity_finder.h */,
-				A9415865243667F600566F16 /* CMakeLists.txt */,
-				A9415866243667F600566F16 /* reduction_util.cpp */,
-				A9415867243667F600566F16 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */,
-				A9415868243667F600566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.h */,
-				A9415869243667F600566F16 /* remove_function_reduction_opportunity_finder.cpp */,
-				A941586A243667F600566F16 /* remove_instruction_reduction_opportunity.h */,
-				A941586B243667F600566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */,
-				A941586C243667F600566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */,
-				A941586D243667F600566F16 /* remove_function_reduction_opportunity.cpp */,
-				A941586E243667F600566F16 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */,
-				A941586F243667F600566F16 /* remove_selection_reduction_opportunity_finder.cpp */,
-				A9415870243667F600566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */,
-				A9415871243667F600566F16 /* simple_conditional_branch_to_branch_opportunity_finder.h */,
-				A9415872243667F600566F16 /* merge_blocks_reduction_opportunity.cpp */,
-				A9415873243667F600566F16 /* change_operand_reduction_opportunity.cpp */,
-				A9415874243667F600566F16 /* structured_loop_to_selection_reduction_opportunity.h */,
-				A9415875243667F600566F16 /* remove_function_reduction_opportunity.h */,
-				A9415876243667F600566F16 /* change_operand_to_undef_reduction_opportunity.h */,
-				A9415877243667F600566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */,
-				A9415878243667F600566F16 /* structured_loop_to_selection_reduction_opportunity_finder.h */,
-				A9415879243667F600566F16 /* remove_selection_reduction_opportunity.h */,
-				A941587A243667F600566F16 /* remove_instruction_reduction_opportunity.cpp */,
-				A941587B243667F600566F16 /* remove_selection_reduction_opportunity_finder.h */,
-				A941587C243667F600566F16 /* merge_blocks_reduction_opportunity_finder.h */,
-				A941587D243667F600566F16 /* pch_source_reduce.cpp */,
-				A941587E243667F600566F16 /* reducer.cpp */,
-				A941587F243667F600566F16 /* operand_to_undef_reduction_opportunity_finder.cpp */,
-				A9415880243667F600566F16 /* remove_function_reduction_opportunity_finder.h */,
-				A9415881243667F600566F16 /* pch_source_reduce.h */,
-				A9415882243667F600566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.h */,
-				A9415883243667F600566F16 /* merge_blocks_reduction_opportunity_finder.cpp */,
-				A9415884243667F600566F16 /* reduction_opportunity.cpp */,
-				A9415885243667F600566F16 /* reducer.h */,
-				A9415886243667F600566F16 /* change_operand_to_undef_reduction_opportunity.cpp */,
-				A9415887243667F600566F16 /* reduction_opportunity.h */,
-				A9415888243667F600566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */,
-				A9415889243667F600566F16 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */,
-				A941588A243667F600566F16 /* reduction_opportunity_finder.h */,
-				A941588B243667F600566F16 /* change_operand_reduction_opportunity.h */,
-				A941588C243667F600566F16 /* remove_block_reduction_opportunity_finder.h */,
-				A941588D243667F600566F16 /* remove_block_reduction_opportunity_finder.cpp */,
-				A941588E243667F600566F16 /* reduction_util.h */,
-				A941588F243667F600566F16 /* merge_blocks_reduction_opportunity.h */,
-				A9415890243667F600566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */,
-				A9415891243667F600566F16 /* structured_loop_to_selection_reduction_opportunity.cpp */,
-				A9415892243667F600566F16 /* remove_block_reduction_opportunity.cpp */,
-				A9415893243667F600566F16 /* reduction_pass.h */,
-			);
-			path = reduce;
-			sourceTree = "<group>";
-		};
-		A94158B0243667F600566F16 /* link */ = {
-			isa = PBXGroup;
-			children = (
-				A94158B1243667F600566F16 /* CMakeLists.txt */,
-				A94158B2243667F600566F16 /* linker.cpp */,
-			);
-			path = link;
-			sourceTree = "<group>";
-		};
-		A94158B8243667F600566F16 /* opt */ = {
-			isa = PBXGroup;
-			children = (
-				A94158B9243667F600566F16 /* optimizer.cpp */,
-				A94158BA243667F600566F16 /* if_conversion.h */,
-				A94158BB243667F600566F16 /* register_pressure.cpp */,
-				A94158BC243667F600566F16 /* loop_utils.cpp */,
-				A94158BD243667F600566F16 /* merge_return_pass.h */,
-				A94158BE243667F600566F16 /* inline_opaque_pass.h */,
-				A94158BF243667F600566F16 /* loop_fusion.h */,
-				A94158C0243667F600566F16 /* combine_access_chains.cpp */,
-				A94158C1243667F600566F16 /* build_module.cpp */,
-				A94158C2243667F600566F16 /* composite.h */,
-				A94158C3243667F600566F16 /* compact_ids_pass.h */,
-				A94158C4243667F600566F16 /* register_pressure.h */,
-				A94158C5243667F600566F16 /* tree_iterator.h */,
-				A94158C6243667F600566F16 /* graphics_robust_access_pass.h */,
-				A94158C7243667F600566F16 /* strip_atomic_counter_memory_pass.h */,
-				A94158C8243667F600566F16 /* legalize_vector_shuffle_pass.h */,
-				A94158C9243667F600566F16 /* local_single_store_elim_pass.h */,
-				A94158CA243667F600566F16 /* reduce_load_size.h */,
-				A94158CB243667F600566F16 /* code_sink.cpp */,
-				A94158CC243667F600566F16 /* types.cpp */,
-				A94158CD243667F600566F16 /* scalar_analysis.h */,
-				A94158CE243667F600566F16 /* strip_debug_info_pass.h */,
-				A94158CF243667F600566F16 /* cfg.cpp */,
-				A94158D0243667F600566F16 /* strip_atomic_counter_memory_pass.cpp */,
-				A94158D1243667F600566F16 /* decoration_manager.cpp */,
-				A94158D2243667F600566F16 /* local_single_block_elim_pass.cpp */,
-				A94158D3243667F600566F16 /* freeze_spec_constant_value_pass.cpp */,
-				A94158D4243667F600566F16 /* replace_invalid_opc.h */,
-				A94158D5243667F600566F16 /* local_access_chain_convert_pass.h */,
-				A94158D6243667F600566F16 /* inst_bindless_check_pass.cpp */,
-				A94158D7243667F600566F16 /* local_redundancy_elimination.cpp */,
-				A94158D8243667F600566F16 /* CMakeLists.txt */,
-				A94158D9243667F600566F16 /* instrument_pass.cpp */,
-				A94158DA243667F600566F16 /* propagator.h */,
-				A94158DB243667F600566F16 /* instruction_list.h */,
-				A94158DC243667F600566F16 /* feature_manager.cpp */,
-				A94158DD243667F600566F16 /* pass.cpp */,
-				A94158DE243667F600566F16 /* loop_fission.cpp */,
-				A94158DF243667F600566F16 /* dominator_tree.cpp */,
-				A94158E0243667F600566F16 /* amd_ext_to_khr.h */,
-				A94158E1243667F600566F16 /* merge_return_pass.cpp */,
-				A94158E2243667F600566F16 /* ir_context.h */,
-				A94158E3243667F600566F16 /* eliminate_dead_constant_pass.cpp */,
-				A94158E4243667F600566F16 /* cfg_cleanup_pass.cpp */,
-				A94158E5243667F600566F16 /* wrap_opkill.cpp */,
-				A94158E6243667F600566F16 /* const_folding_rules.cpp */,
-				A94158E7243667F600566F16 /* loop_unroller.h */,
-				A94158E8243667F600566F16 /* strip_debug_info_pass.cpp */,
-				A94158E9243667F600566F16 /* ssa_rewrite_pass.cpp */,
-				A94158EA243667F600566F16 /* loop_dependence.cpp */,
-				A94158EB243667F600566F16 /* unify_const_pass.h */,
-				A94158EC243667F600566F16 /* ir_loader.h */,
-				A94158ED243667F600566F16 /* inst_debug_printf_pass.cpp */,
-				A94158EE243667F600566F16 /* types.h */,
-				A94158EF243667F600566F16 /* fold_spec_constant_op_and_composite_pass.h */,
-				A94158F0243667F600566F16 /* mem_pass.cpp */,
-				A94158F1243667F600566F16 /* basic_block.h */,
-				A94158F2243667F600566F16 /* remove_duplicates_pass.cpp */,
-				A94158F3243667F600566F16 /* dead_variable_elimination.cpp */,
-				A94158F4243667F600566F16 /* block_merge_pass.h */,
-				A94158F5243667F600566F16 /* module.cpp */,
-				A94158F6243667F600566F16 /* fold_spec_constant_op_and_composite_pass.cpp */,
-				A94158F7243667F600566F16 /* loop_unswitch_pass.cpp */,
-				A94158F8243667F600566F16 /* unify_const_pass.cpp */,
-				A94158F9243667F600566F16 /* type_manager.cpp */,
-				A94158FA243667F600566F16 /* generate_webgpu_initializers_pass.cpp */,
-				A94158FB243667F600566F16 /* private_to_local_pass.h */,
-				A94158FC243667F600566F16 /* convert_to_half_pass.h */,
-				A94158FD243667F600566F16 /* relax_float_ops_pass.h */,
-				A94158FE243667F600566F16 /* inline_pass.cpp */,
-				A94158FF243667F600566F16 /* def_use_manager.h */,
-				A9415900243667F600566F16 /* ir_loader.cpp */,
-				A9415901243667F600566F16 /* cfg_cleanup_pass.h */,
-				A9415902243667F600566F16 /* licm_pass.cpp */,
-				A9415903243667F600566F16 /* eliminate_dead_functions_pass.cpp */,
-				A9415904243667F600566F16 /* local_redundancy_elimination.h */,
-				A9415905243667F600566F16 /* split_invalid_unreachable_pass.cpp */,
-				A9415906243667F600566F16 /* loop_peeling.h */,
-				A9415907243667F600566F16 /* vector_dce.cpp */,
-				A9415908243667F600566F16 /* block_merge_util.h */,
-				A9415909243667F600566F16 /* loop_unroller.cpp */,
-				A941590A243667F600566F16 /* desc_sroa.h */,
-				A941590B243667F600566F16 /* constants.cpp */,
-				A941590C243667F600566F16 /* loop_fusion_pass.h */,
-				A941590D243667F600566F16 /* struct_cfg_analysis.h */,
-				A941590E243667F600566F16 /* inst_buff_addr_check_pass.cpp */,
-				A941590F243667F600566F16 /* def_use_manager.cpp */,
-				A9415910243667F600566F16 /* wrap_opkill.h */,
-				A9415911243667F600566F16 /* strip_reflect_info_pass.cpp */,
-				A9415912243667F600566F16 /* decoration_manager.h */,
-				A9415913243667F600566F16 /* ccp_pass.cpp */,
-				A9415914243667F600566F16 /* process_lines_pass.h */,
-				A9415915243667F600566F16 /* local_single_block_elim_pass.h */,
-				A9415916243667F600566F16 /* pch_source_opt.cpp */,
-				A9415917243667F600566F16 /* inst_buff_addr_check_pass.h */,
-				A9415918243667F600566F16 /* strength_reduction_pass.h */,
-				A9415919243667F600566F16 /* aggressive_dead_code_elim_pass.cpp */,
-				A941591A243667F600566F16 /* eliminate_dead_functions_util.cpp */,
-				A941591B243667F600566F16 /* inst_debug_printf_pass.h */,
-				A941591C243667F600566F16 /* simplification_pass.cpp */,
-				A941591D243667F600566F16 /* dead_branch_elim_pass.cpp */,
-				A941591E243667F600566F16 /* flatten_decoration_pass.cpp */,
-				A941591F243667F600566F16 /* dead_insert_elim_pass.h */,
-				A9415920243667F600566F16 /* folding_rules.cpp */,
-				A9415921243667F600566F16 /* freeze_spec_constant_value_pass.h */,
-				A9415922243667F600566F16 /* ir_context.cpp */,
-				A9415923243667F600566F16 /* instrument_pass.h */,
-				A9415924243667F600566F16 /* mem_pass.h */,
-				A9415925243667F600566F16 /* loop_descriptor.cpp */,
-				A9415926243667F600566F16 /* eliminate_dead_members_pass.h */,
-				A9415927243667F600566F16 /* function.cpp */,
-				A9415928243667F600566F16 /* instruction_list.cpp */,
-				A9415929243667F600566F16 /* composite.cpp */,
-				A941592A243667F600566F16 /* convert_to_half_pass.cpp */,
-				A941592B243667F600566F16 /* process_lines_pass.cpp */,
-				A941592C243667F600566F16 /* inline_pass.h */,
-				A941592D243667F600566F16 /* loop_dependence.h */,
-				A941592E243667F600566F16 /* value_number_table.h */,
-				A941592F243667F600566F16 /* flatten_decoration_pass.h */,
-				A9415930243667F600566F16 /* if_conversion.cpp */,
-				A9415931243667F600566F16 /* inline_exhaustive_pass.h */,
-				A9415932243667F600566F16 /* constants.h */,
-				A9415933243667F600566F16 /* eliminate_dead_members_pass.cpp */,
-				A9415934243667F600566F16 /* strength_reduction_pass.cpp */,
-				A9415935243667F600566F16 /* desc_sroa.cpp */,
-				A9415936243667F600566F16 /* block_merge_util.cpp */,
-				A9415937243667F600566F16 /* upgrade_memory_model.h */,
-				A9415938243667F600566F16 /* copy_prop_arrays.cpp */,
-				A9415939243667F600566F16 /* pass_manager.cpp */,
-				A941593A243667F600566F16 /* inline_exhaustive_pass.cpp */,
-				A941593B243667F600566F16 /* loop_fission.h */,
-				A941593C243667F600566F16 /* workaround1209.h */,
-				A941593D243667F600566F16 /* loop_fusion_pass.cpp */,
-				A941593E243667F600566F16 /* log.h */,
-				A941593F243667F600566F16 /* split_invalid_unreachable_pass.h */,
-				A9415940243667F600566F16 /* copy_prop_arrays.h */,
-				A9415941243667F600566F16 /* eliminate_dead_constant_pass.h */,
-				A9415942243667F600566F16 /* dead_insert_elim_pass.cpp */,
-				A9415943243667F600566F16 /* ssa_rewrite_pass.h */,
-				A9415944243667F600566F16 /* scalar_analysis.cpp */,
-				A9415945243667F600566F16 /* dead_variable_elimination.h */,
-				A9415946243667F600566F16 /* block_merge_pass.cpp */,
-				A9415947243667F600566F16 /* dominator_analysis.h */,
-				A9415948243667F600566F16 /* pass.h */,
-				A9415949243667F600566F16 /* folding_rules.h */,
-				A941594A243667F600566F16 /* eliminate_dead_functions_pass.h */,
-				A941594B243667F600566F16 /* eliminate_dead_functions_util.h */,
-				A941594C243667F600566F16 /* fold.h */,
-				A941594D243667F600566F16 /* local_single_store_elim_pass.cpp */,
-				A941594E243667F600566F16 /* dead_branch_elim_pass.h */,
-				A941594F243667F600566F16 /* private_to_local_pass.cpp */,
-				A9415950243667F600566F16 /* scalar_analysis_nodes.h */,
-				A9415951243667F600566F16 /* propagator.cpp */,
-				A9415952243667F600566F16 /* fix_storage_class.h */,
-				A9415953243667F600566F16 /* loop_dependence_helpers.cpp */,
-				A9415954243667F600566F16 /* set_spec_constant_default_value_pass.cpp */,
-				A9415955243667F600566F16 /* passes.h */,
-				A9415956243667F600566F16 /* fold.cpp */,
-				A9415957243667F600566F16 /* amd_ext_to_khr.cpp */,
-				A9415958243667F600566F16 /* strip_reflect_info_pass.h */,
-				A9415959243667F600566F16 /* scalar_replacement_pass.cpp */,
-				A941595A243667F600566F16 /* simplification_pass.h */,
-				A941595B243667F600566F16 /* remove_duplicates_pass.h */,
-				A941595C243667F600566F16 /* redundancy_elimination.cpp */,
-				A941595D243667F600566F16 /* reflect.h */,
-				A941595E243667F600566F16 /* workaround1209.cpp */,
-				A941595F243667F600566F16 /* null_pass.h */,
-				A9415960243667F600566F16 /* relax_float_ops_pass.cpp */,
-				A9415961243667F600566F16 /* const_folding_rules.h */,
-				A9415962243667F600566F16 /* scalar_replacement_pass.h */,
-				A9415963243667F600566F16 /* instruction.cpp */,
-				A9415964243667F600566F16 /* pch_source_opt.h */,
-				A9415965243667F600566F16 /* reduce_load_size.cpp */,
-				A9415966243667F600566F16 /* redundancy_elimination.h */,
-				A9415967243667F600566F16 /* fix_storage_class.cpp */,
-				A9415968243667F600566F16 /* value_number_table.cpp */,
-				A9415969243667F600566F16 /* inline_opaque_pass.cpp */,
-				A941596A243667F600566F16 /* replace_invalid_opc.cpp */,
-				A941596B243667F600566F16 /* loop_utils.h */,
-				A941596C243667F700566F16 /* module.h */,
-				A941596D243667F700566F16 /* dominator_analysis.cpp */,
-				A941596E243667F700566F16 /* decompose_initialized_variables_pass.cpp */,
-				A941596F243667F700566F16 /* ir_builder.h */,
-				A9415970243667F700566F16 /* loop_unswitch_pass.h */,
-				A9415971243667F700566F16 /* cfg.h */,
-				A9415972243667F700566F16 /* code_sink.h */,
-				A9415973243667F700566F16 /* loop_descriptor.h */,
-				A9415974243667F700566F16 /* generate_webgpu_initializers_pass.h */,
-				A9415975243667F700566F16 /* instruction.h */,
-				A9415976243667F700566F16 /* aggressive_dead_code_elim_pass.h */,
-				A9415977243667F700566F16 /* struct_cfg_analysis.cpp */,
-				A9415978243667F700566F16 /* vector_dce.h */,
-				A9415979243667F700566F16 /* combine_access_chains.h */,
-				A941597A243667F700566F16 /* pass_manager.h */,
-				A941597B243667F700566F16 /* local_access_chain_convert_pass.cpp */,
-				A941597C243667F700566F16 /* basic_block.cpp */,
-				A941597D243667F700566F16 /* iterator.h */,
-				A941597E243667F700566F16 /* licm_pass.h */,
-				A941597F243667F700566F16 /* build_module.h */,
-				A9415980243667F700566F16 /* ccp_pass.h */,
-				A9415981243667F700566F16 /* graphics_robust_access_pass.cpp */,
-				A9415982243667F700566F16 /* decompose_initialized_variables_pass.h */,
-				A9415983243667F700566F16 /* function.h */,
-				A9415984243667F700566F16 /* loop_fusion.cpp */,
-				A9415985243667F700566F16 /* upgrade_memory_model.cpp */,
-				A9415986243667F700566F16 /* feature_manager.h */,
-				A9415987243667F700566F16 /* inst_bindless_check_pass.h */,
-				A9415988243667F700566F16 /* scalar_analysis_simplification.cpp */,
-				A9415989243667F700566F16 /* set_spec_constant_default_value_pass.h */,
-				A941598A243667F700566F16 /* dominator_tree.h */,
-				A941598B243667F700566F16 /* legalize_vector_shuffle_pass.cpp */,
-				A941598C243667F700566F16 /* type_manager.h */,
-				A941598D243667F700566F16 /* compact_ids_pass.cpp */,
-				A941598E243667F700566F16 /* loop_peeling.cpp */,
-			);
-			path = opt;
-			sourceTree = "<group>";
-		};
-		A9415A55243667F700566F16 /* val */ = {
-			isa = PBXGroup;
-			children = (
-				A9415A56243667F700566F16 /* validate_annotation.cpp */,
-				A9415A57243667F700566F16 /* validate_misc.cpp */,
-				A9415A58243667F700566F16 /* validate_cfg.cpp */,
-				A9415A59243667F700566F16 /* validate_capability.cpp */,
-				A9415A5A243667F700566F16 /* construct.h */,
-				A9415A5B243667F700566F16 /* validate_barriers.cpp */,
-				A9415A5C243667F700566F16 /* validate_non_uniform.cpp */,
-				A9415A5D243667F700566F16 /* validate_scopes.cpp */,
-				A9415A5E243667F700566F16 /* validate_atomics.cpp */,
-				A9415A5F243667F700566F16 /* basic_block.h */,
-				A9415A60243667F700566F16 /* validate_instruction.cpp */,
-				A9415A61243667F700566F16 /* validate_decorations.cpp */,
-				A9415A62243667F700566F16 /* validate_debug.cpp */,
-				A9415A63243667F700566F16 /* validate_builtins.cpp */,
-				A9415A64243667F700566F16 /* validate_interfaces.cpp */,
-				A9415A65243667F700566F16 /* validate.cpp */,
-				A9415A66243667F700566F16 /* validation_state.h */,
-				A9415A67243667F700566F16 /* validate_constants.cpp */,
-				A9415A68243667F700566F16 /* validate_bitwise.cpp */,
-				A9415A69243667F700566F16 /* validate_extensions.cpp */,
-				A9415A6A243667F700566F16 /* construct.cpp */,
-				A9415A6B243667F700566F16 /* function.cpp */,
-				A9415A6C243667F700566F16 /* validate.h */,
-				A9415A6D243667F700566F16 /* validate_adjacency.cpp */,
-				A9415A6E243667F700566F16 /* validate_conversion.cpp */,
-				A9415A6F243667F700566F16 /* validate_small_type_uses.cpp */,
-				A9415A70243667F700566F16 /* validate_scopes.h */,
-				A9415A71243667F700566F16 /* validate_id.cpp */,
-				A9415A72243667F700566F16 /* validate_memory_semantics.h */,
-				A9415A73243667F700566F16 /* validate_arithmetics.cpp */,
-				A9415A74243667F700566F16 /* validate_mode_setting.cpp */,
-				A9415A75243667F700566F16 /* validate_memory_semantics.cpp */,
-				A9415A76243667F700566F16 /* validate_logicals.cpp */,
-				A9415A77243667F700566F16 /* validate_derivatives.cpp */,
-				A9415A78243667F700566F16 /* validate_memory.cpp */,
-				A9415A79243667F700566F16 /* validate_image.cpp */,
-				A9415A7A243667F700566F16 /* validate_literals.cpp */,
-				A9415A7B243667F700566F16 /* instruction.cpp */,
-				A9415A7C243667F700566F16 /* validate_type.cpp */,
-				A9415A7D243667F700566F16 /* instruction.h */,
-				A9415A7E243667F700566F16 /* validate_execution_limitations.cpp */,
-				A9415A7F243667F700566F16 /* validate_layout.cpp */,
-				A9415A80243667F700566F16 /* basic_block.cpp */,
-				A9415A81243667F700566F16 /* validate_function.cpp */,
-				A9415A82243667F700566F16 /* function.h */,
-				A9415A83243667F700566F16 /* validate_composites.cpp */,
-				A9415A84243667F700566F16 /* validation_state.cpp */,
-				A9415A85243667F700566F16 /* validate_primitives.cpp */,
-				A9415A86243667F700566F16 /* decoration.h */,
-			);
-			path = val;
-			sourceTree = "<group>";
-		};
 		A95D90A623A7F1E500CBCC60 /* glslang */ = {
 			isa = PBXGroup;
 			children = (
@@ -2278,7 +1854,7 @@
 		A972A82421CECC410013AB25 /* SPIRV-Tools */ = {
 			isa = PBXGroup;
 			children = (
-				A941583E243667F600566F16 /* source */,
+				A9765B9A2485758300FDD115 /* source */,
 			);
 			name = "SPIRV-Tools";
 			path = "glslang/External/spirv-tools";
@@ -2329,6 +1905,454 @@
 			path = "SPIRV-Cross";
 			sourceTree = "<group>";
 		};
+		A9765B9A2485758300FDD115 /* source */ = {
+			isa = PBXGroup;
+			children = (
+				A9765B9B2485758300FDD115 /* spirv_target_env.cpp */,
+				A9765B9C2485758300FDD115 /* extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json */,
+				A9765B9D2485758300FDD115 /* spirv_fuzzer_options.h */,
+				A9765B9E2485758300FDD115 /* assembly_grammar.h */,
+				A9765B9F2485758300FDD115 /* enum_set.h */,
+				A9765BA02485758300FDD115 /* CMakeLists.txt */,
+				A9765BA12485758300FDD115 /* extinst.spv-amd-shader-ballot.grammar.json */,
+				A9765BA22485758300FDD115 /* text.cpp */,
+				A9765BA32485758300FDD115 /* assembly_grammar.cpp */,
+				A9765BA42485758300FDD115 /* text.h */,
+				A9765BA52485758300FDD115 /* extensions.cpp */,
+				A9765BA62485758300FDD115 /* pch_source.cpp */,
+				A9765BA72485758300FDD115 /* util */,
+				A9765BB62485758300FDD115 /* spirv_target_env.h */,
+				A9765BB72485758300FDD115 /* table.cpp */,
+				A9765BB82485758300FDD115 /* extinst.opencl.debuginfo.100.grammar.json */,
+				A9765BB92485758300FDD115 /* reduce */,
+				A9765BF42485758300FDD115 /* latest_version_opencl_std_header.h */,
+				A9765BF52485758300FDD115 /* spirv_optimizer_options.cpp */,
+				A9765BF62485758300FDD115 /* cfa.h */,
+				A9765BF72485758300FDD115 /* pch_source.h */,
+				A9765BF82485758300FDD115 /* enum_string_mapping.h */,
+				A9765BF92485758300FDD115 /* spirv_fuzzer_options.cpp */,
+				A9765BFA2485758300FDD115 /* spirv_reducer_options.h */,
+				A9765BFB2485758300FDD115 /* spirv_validator_options.cpp */,
+				A9765BFC2485758300FDD115 /* extinst.spv-amd-shader-trinary-minmax.grammar.json */,
+				A9765BFD2485758300FDD115 /* print.cpp */,
+				A9765BFE2485758300FDD115 /* spirv_definition.h */,
+				A9765BFF2485758300FDD115 /* operand.h */,
+				A9765C002485758300FDD115 /* spirv_endian.cpp */,
+				A9765C012485758300FDD115 /* macro.h */,
+				A9765C022485758300FDD115 /* spirv_constant.h */,
+				A9765C032485758300FDD115 /* extinst.spv-amd-gcn-shader.grammar.json */,
+				A9765C042485758300FDD115 /* binary.cpp */,
+				A9765C052485758300FDD115 /* spirv_validator_options.h */,
+				A9765C062485758300FDD115 /* enum_string_mapping.cpp */,
+				A9765C072485758300FDD115 /* text_handler.h */,
+				A9765C082485758300FDD115 /* parsed_operand.h */,
+				A9765C092485758300FDD115 /* name_mapper.h */,
+				A9765C0A2485758300FDD115 /* spirv_reducer_options.cpp */,
+				A9765C0B2485758300FDD115 /* parsed_operand.cpp */,
+				A9765C0C2485758300FDD115 /* diagnostic.h */,
+				A9765C0D2485758300FDD115 /* spirv_endian.h */,
+				A9765C0E2485758300FDD115 /* name_mapper.cpp */,
+				A9765C0F2485758300FDD115 /* extinst.debuginfo.grammar.json */,
+				A9765C102485758300FDD115 /* link */,
+				A9765C132485758300FDD115 /* software_version.cpp */,
+				A9765C142485758300FDD115 /* opcode.cpp */,
+				A9765C152485758300FDD115 /* print.h */,
+				A9765C162485758300FDD115 /* ext_inst.cpp */,
+				A9765C172485758300FDD115 /* disassemble.h */,
+				A9765C182485758300FDD115 /* opt */,
+				A9765CF12485758400FDD115 /* table.h */,
+				A9765DB22485758500FDD115 /* ext_inst.h */,
+				A9765DB32485758500FDD115 /* diagnostic.cpp */,
+				A9765DB42485758500FDD115 /* latest_version_spirv_header.h */,
+				A9765DB52485758500FDD115 /* libspirv.cpp */,
+				A9765DB62485758500FDD115 /* instruction.h */,
+				A9765DB72485758500FDD115 /* spirv_optimizer_options.h */,
+				A9765DB82485758500FDD115 /* opcode.h */,
+				A9765DB92485758500FDD115 /* operand.cpp */,
+				A9765DBA2485758500FDD115 /* latest_version_glsl_std_450_header.h */,
+				A9765DBB2485758500FDD115 /* extensions.h */,
+				A9765DBC2485758500FDD115 /* disassemble.cpp */,
+				A9765DBD2485758500FDD115 /* binary.h */,
+				A9765DBE2485758500FDD115 /* text_handler.cpp */,
+				A9765DBF2485758500FDD115 /* val */,
+			);
+			path = source;
+			sourceTree = "<group>";
+		};
+		A9765BA72485758300FDD115 /* util */ = {
+			isa = PBXGroup;
+			children = (
+				A9765BA82485758300FDD115 /* parse_number.h */,
+				A9765BA92485758300FDD115 /* ilist_node.h */,
+				A9765BAA2485758300FDD115 /* make_unique.h */,
+				A9765BAB2485758300FDD115 /* string_utils.h */,
+				A9765BAC2485758300FDD115 /* small_vector.h */,
+				A9765BAD2485758300FDD115 /* timer.cpp */,
+				A9765BAE2485758300FDD115 /* timer.h */,
+				A9765BAF2485758300FDD115 /* string_utils.cpp */,
+				A9765BB02485758300FDD115 /* bit_vector.h */,
+				A9765BB12485758300FDD115 /* bitutils.h */,
+				A9765BB22485758300FDD115 /* hex_float.h */,
+				A9765BB32485758300FDD115 /* parse_number.cpp */,
+				A9765BB42485758300FDD115 /* bit_vector.cpp */,
+				A9765BB52485758300FDD115 /* ilist.h */,
+			);
+			path = util;
+			sourceTree = "<group>";
+		};
+		A9765BB92485758300FDD115 /* reduce */ = {
+			isa = PBXGroup;
+			children = (
+				A9765BBA2485758300FDD115 /* operand_to_undef_reduction_opportunity_finder.h */,
+				A9765BBB2485758300FDD115 /* remove_selection_reduction_opportunity.cpp */,
+				A9765BBC2485758300FDD115 /* remove_block_reduction_opportunity.h */,
+				A9765BBD2485758300FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.h */,
+				A9765BBE2485758300FDD115 /* reduction_pass.cpp */,
+				A9765BBF2485758300FDD115 /* operand_to_const_reduction_opportunity_finder.cpp */,
+				A9765BC02485758300FDD115 /* operand_to_const_reduction_opportunity_finder.h */,
+				A9765BC12485758300FDD115 /* CMakeLists.txt */,
+				A9765BC22485758300FDD115 /* reduction_util.cpp */,
+				A9765BC32485758300FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */,
+				A9765BC42485758300FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.h */,
+				A9765BC52485758300FDD115 /* remove_function_reduction_opportunity_finder.cpp */,
+				A9765BC62485758300FDD115 /* remove_instruction_reduction_opportunity.h */,
+				A9765BC72485758300FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */,
+				A9765BC82485758300FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */,
+				A9765BC92485758300FDD115 /* remove_function_reduction_opportunity.cpp */,
+				A9765BCA2485758300FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */,
+				A9765BCB2485758300FDD115 /* remove_selection_reduction_opportunity_finder.cpp */,
+				A9765BCC2485758300FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */,
+				A9765BCD2485758300FDD115 /* remove_struct_member_reduction_opportunity.h */,
+				A9765BCE2485758300FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.h */,
+				A9765BCF2485758300FDD115 /* merge_blocks_reduction_opportunity.cpp */,
+				A9765BD02485758300FDD115 /* change_operand_reduction_opportunity.cpp */,
+				A9765BD12485758300FDD115 /* structured_loop_to_selection_reduction_opportunity.h */,
+				A9765BD22485758300FDD115 /* remove_function_reduction_opportunity.h */,
+				A9765BD32485758300FDD115 /* remove_unused_instruction_reduction_opportunity_finder.h */,
+				A9765BD42485758300FDD115 /* change_operand_to_undef_reduction_opportunity.h */,
+				A9765BD52485758300FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.h */,
+				A9765BD62485758300FDD115 /* remove_selection_reduction_opportunity.h */,
+				A9765BD72485758300FDD115 /* remove_instruction_reduction_opportunity.cpp */,
+				A9765BD82485758300FDD115 /* remove_selection_reduction_opportunity_finder.h */,
+				A9765BD92485758300FDD115 /* merge_blocks_reduction_opportunity_finder.h */,
+				A9765BDA2485758300FDD115 /* pch_source_reduce.cpp */,
+				A9765BDB2485758300FDD115 /* remove_struct_member_reduction_opportunity.cpp */,
+				A9765BDC2485758300FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.h */,
+				A9765BDD2485758300FDD115 /* remove_unused_instruction_reduction_opportunity_finder.cpp */,
+				A9765BDE2485758300FDD115 /* reducer.cpp */,
+				A9765BDF2485758300FDD115 /* operand_to_undef_reduction_opportunity_finder.cpp */,
+				A9765BE02485758300FDD115 /* remove_function_reduction_opportunity_finder.h */,
+				A9765BE12485758300FDD115 /* pch_source_reduce.h */,
+				A9765BE22485758300FDD115 /* merge_blocks_reduction_opportunity_finder.cpp */,
+				A9765BE32485758300FDD115 /* reduction_opportunity.cpp */,
+				A9765BE42485758300FDD115 /* reducer.h */,
+				A9765BE52485758300FDD115 /* change_operand_to_undef_reduction_opportunity.cpp */,
+				A9765BE62485758300FDD115 /* reduction_opportunity.h */,
+				A9765BE72485758300FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */,
+				A9765BE82485758300FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */,
+				A9765BE92485758300FDD115 /* reduction_opportunity_finder.h */,
+				A9765BEA2485758300FDD115 /* change_operand_reduction_opportunity.h */,
+				A9765BEB2485758300FDD115 /* remove_block_reduction_opportunity_finder.h */,
+				A9765BEC2485758300FDD115 /* remove_block_reduction_opportunity_finder.cpp */,
+				A9765BED2485758300FDD115 /* reduction_util.h */,
+				A9765BEE2485758300FDD115 /* merge_blocks_reduction_opportunity.h */,
+				A9765BEF2485758300FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */,
+				A9765BF02485758300FDD115 /* structured_loop_to_selection_reduction_opportunity.cpp */,
+				A9765BF12485758300FDD115 /* remove_block_reduction_opportunity.cpp */,
+				A9765BF22485758300FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.cpp */,
+				A9765BF32485758300FDD115 /* reduction_pass.h */,
+			);
+			path = reduce;
+			sourceTree = "<group>";
+		};
+		A9765C102485758300FDD115 /* link */ = {
+			isa = PBXGroup;
+			children = (
+				A9765C112485758300FDD115 /* CMakeLists.txt */,
+				A9765C122485758300FDD115 /* linker.cpp */,
+			);
+			path = link;
+			sourceTree = "<group>";
+		};
+		A9765C182485758300FDD115 /* opt */ = {
+			isa = PBXGroup;
+			children = (
+				A9765C192485758300FDD115 /* optimizer.cpp */,
+				A9765C1A2485758300FDD115 /* if_conversion.h */,
+				A9765C1B2485758300FDD115 /* register_pressure.cpp */,
+				A9765C1C2485758300FDD115 /* loop_utils.cpp */,
+				A9765C1D2485758300FDD115 /* merge_return_pass.h */,
+				A9765C1E2485758300FDD115 /* inline_opaque_pass.h */,
+				A9765C1F2485758300FDD115 /* loop_fusion.h */,
+				A9765C202485758300FDD115 /* combine_access_chains.cpp */,
+				A9765C212485758300FDD115 /* build_module.cpp */,
+				A9765C222485758300FDD115 /* composite.h */,
+				A9765C232485758300FDD115 /* compact_ids_pass.h */,
+				A9765C242485758300FDD115 /* register_pressure.h */,
+				A9765C252485758300FDD115 /* tree_iterator.h */,
+				A9765C262485758300FDD115 /* graphics_robust_access_pass.h */,
+				A9765C272485758300FDD115 /* strip_atomic_counter_memory_pass.h */,
+				A9765C282485758300FDD115 /* legalize_vector_shuffle_pass.h */,
+				A9765C292485758300FDD115 /* local_single_store_elim_pass.h */,
+				A9765C2A2485758300FDD115 /* reduce_load_size.h */,
+				A9765C2B2485758300FDD115 /* code_sink.cpp */,
+				A9765C2C2485758300FDD115 /* types.cpp */,
+				A9765C2D2485758300FDD115 /* scalar_analysis.h */,
+				A9765C2E2485758300FDD115 /* strip_debug_info_pass.h */,
+				A9765C2F2485758300FDD115 /* cfg.cpp */,
+				A9765C302485758300FDD115 /* strip_atomic_counter_memory_pass.cpp */,
+				A9765C312485758300FDD115 /* decoration_manager.cpp */,
+				A9765C322485758300FDD115 /* local_single_block_elim_pass.cpp */,
+				A9765C332485758300FDD115 /* freeze_spec_constant_value_pass.cpp */,
+				A9765C342485758300FDD115 /* replace_invalid_opc.h */,
+				A9765C352485758300FDD115 /* local_access_chain_convert_pass.h */,
+				A9765C362485758300FDD115 /* inst_bindless_check_pass.cpp */,
+				A9765C372485758300FDD115 /* local_redundancy_elimination.cpp */,
+				A9765C382485758300FDD115 /* CMakeLists.txt */,
+				A9765C392485758300FDD115 /* instrument_pass.cpp */,
+				A9765C3A2485758300FDD115 /* propagator.h */,
+				A9765C3B2485758300FDD115 /* instruction_list.h */,
+				A9765C3C2485758300FDD115 /* feature_manager.cpp */,
+				A9765C3D2485758300FDD115 /* pass.cpp */,
+				A9765C3E2485758300FDD115 /* loop_fission.cpp */,
+				A9765C3F2485758300FDD115 /* dominator_tree.cpp */,
+				A9765C402485758300FDD115 /* amd_ext_to_khr.h */,
+				A9765C412485758300FDD115 /* merge_return_pass.cpp */,
+				A9765C422485758300FDD115 /* ir_context.h */,
+				A9765C432485758300FDD115 /* eliminate_dead_constant_pass.cpp */,
+				A9765C442485758300FDD115 /* cfg_cleanup_pass.cpp */,
+				A9765C452485758300FDD115 /* wrap_opkill.cpp */,
+				A9765C462485758300FDD115 /* const_folding_rules.cpp */,
+				A9765C472485758300FDD115 /* loop_unroller.h */,
+				A9765C482485758300FDD115 /* strip_debug_info_pass.cpp */,
+				A9765C492485758300FDD115 /* ssa_rewrite_pass.cpp */,
+				A9765C4A2485758300FDD115 /* loop_dependence.cpp */,
+				A9765C4B2485758300FDD115 /* unify_const_pass.h */,
+				A9765C4C2485758300FDD115 /* ir_loader.h */,
+				A9765C4D2485758300FDD115 /* inst_debug_printf_pass.cpp */,
+				A9765C4E2485758300FDD115 /* types.h */,
+				A9765C4F2485758300FDD115 /* fold_spec_constant_op_and_composite_pass.h */,
+				A9765C502485758300FDD115 /* mem_pass.cpp */,
+				A9765C512485758300FDD115 /* basic_block.h */,
+				A9765C522485758300FDD115 /* remove_duplicates_pass.cpp */,
+				A9765C532485758300FDD115 /* dead_variable_elimination.cpp */,
+				A9765C542485758300FDD115 /* block_merge_pass.h */,
+				A9765C552485758400FDD115 /* module.cpp */,
+				A9765C562485758400FDD115 /* debug_info_manager.h */,
+				A9765C572485758400FDD115 /* fold_spec_constant_op_and_composite_pass.cpp */,
+				A9765C582485758400FDD115 /* loop_unswitch_pass.cpp */,
+				A9765C592485758400FDD115 /* unify_const_pass.cpp */,
+				A9765C5A2485758400FDD115 /* type_manager.cpp */,
+				A9765C5B2485758400FDD115 /* generate_webgpu_initializers_pass.cpp */,
+				A9765C5C2485758400FDD115 /* private_to_local_pass.h */,
+				A9765C5D2485758400FDD115 /* convert_to_half_pass.h */,
+				A9765C5E2485758400FDD115 /* relax_float_ops_pass.h */,
+				A9765C5F2485758400FDD115 /* inline_pass.cpp */,
+				A9765C602485758400FDD115 /* def_use_manager.h */,
+				A9765C612485758400FDD115 /* ir_loader.cpp */,
+				A9765C622485758400FDD115 /* cfg_cleanup_pass.h */,
+				A9765C632485758400FDD115 /* licm_pass.cpp */,
+				A9765C642485758400FDD115 /* eliminate_dead_functions_pass.cpp */,
+				A9765C652485758400FDD115 /* local_redundancy_elimination.h */,
+				A9765C662485758400FDD115 /* split_invalid_unreachable_pass.cpp */,
+				A9765C672485758400FDD115 /* loop_peeling.h */,
+				A9765C682485758400FDD115 /* vector_dce.cpp */,
+				A9765C692485758400FDD115 /* block_merge_util.h */,
+				A9765C6A2485758400FDD115 /* loop_unroller.cpp */,
+				A9765C6B2485758400FDD115 /* desc_sroa.h */,
+				A9765C6C2485758400FDD115 /* constants.cpp */,
+				A9765C6D2485758400FDD115 /* loop_fusion_pass.h */,
+				A9765C6E2485758400FDD115 /* struct_cfg_analysis.h */,
+				A9765C6F2485758400FDD115 /* inst_buff_addr_check_pass.cpp */,
+				A9765C702485758400FDD115 /* def_use_manager.cpp */,
+				A9765C712485758400FDD115 /* wrap_opkill.h */,
+				A9765C722485758400FDD115 /* strip_reflect_info_pass.cpp */,
+				A9765C732485758400FDD115 /* decoration_manager.h */,
+				A9765C742485758400FDD115 /* ccp_pass.cpp */,
+				A9765C752485758400FDD115 /* process_lines_pass.h */,
+				A9765C762485758400FDD115 /* local_single_block_elim_pass.h */,
+				A9765C772485758400FDD115 /* pch_source_opt.cpp */,
+				A9765C782485758400FDD115 /* inst_buff_addr_check_pass.h */,
+				A9765C792485758400FDD115 /* strength_reduction_pass.h */,
+				A9765C7A2485758400FDD115 /* aggressive_dead_code_elim_pass.cpp */,
+				A9765C7B2485758400FDD115 /* eliminate_dead_functions_util.cpp */,
+				A9765C7C2485758400FDD115 /* inst_debug_printf_pass.h */,
+				A9765C7D2485758400FDD115 /* simplification_pass.cpp */,
+				A9765C7E2485758400FDD115 /* dead_branch_elim_pass.cpp */,
+				A9765C7F2485758400FDD115 /* flatten_decoration_pass.cpp */,
+				A9765C802485758400FDD115 /* dead_insert_elim_pass.h */,
+				A9765C812485758400FDD115 /* folding_rules.cpp */,
+				A9765C822485758400FDD115 /* freeze_spec_constant_value_pass.h */,
+				A9765C832485758400FDD115 /* ir_context.cpp */,
+				A9765C842485758400FDD115 /* instrument_pass.h */,
+				A9765C852485758400FDD115 /* mem_pass.h */,
+				A9765C862485758400FDD115 /* loop_descriptor.cpp */,
+				A9765C872485758400FDD115 /* eliminate_dead_members_pass.h */,
+				A9765C882485758400FDD115 /* function.cpp */,
+				A9765C892485758400FDD115 /* instruction_list.cpp */,
+				A9765C8A2485758400FDD115 /* composite.cpp */,
+				A9765C8B2485758400FDD115 /* convert_to_half_pass.cpp */,
+				A9765C8C2485758400FDD115 /* process_lines_pass.cpp */,
+				A9765C8D2485758400FDD115 /* inline_pass.h */,
+				A9765C8E2485758400FDD115 /* loop_dependence.h */,
+				A9765C8F2485758400FDD115 /* value_number_table.h */,
+				A9765C902485758400FDD115 /* flatten_decoration_pass.h */,
+				A9765C912485758400FDD115 /* if_conversion.cpp */,
+				A9765C922485758400FDD115 /* debug_info_manager.cpp */,
+				A9765C932485758400FDD115 /* inline_exhaustive_pass.h */,
+				A9765C942485758400FDD115 /* constants.h */,
+				A9765C952485758400FDD115 /* eliminate_dead_members_pass.cpp */,
+				A9765C962485758400FDD115 /* strength_reduction_pass.cpp */,
+				A9765C972485758400FDD115 /* desc_sroa.cpp */,
+				A9765C982485758400FDD115 /* block_merge_util.cpp */,
+				A9765C992485758400FDD115 /* upgrade_memory_model.h */,
+				A9765C9A2485758400FDD115 /* copy_prop_arrays.cpp */,
+				A9765C9B2485758400FDD115 /* pass_manager.cpp */,
+				A9765C9C2485758400FDD115 /* inline_exhaustive_pass.cpp */,
+				A9765C9D2485758400FDD115 /* loop_fission.h */,
+				A9765C9E2485758400FDD115 /* workaround1209.h */,
+				A9765C9F2485758400FDD115 /* loop_fusion_pass.cpp */,
+				A9765CA02485758400FDD115 /* log.h */,
+				A9765CA12485758400FDD115 /* split_invalid_unreachable_pass.h */,
+				A9765CA22485758400FDD115 /* copy_prop_arrays.h */,
+				A9765CA32485758400FDD115 /* eliminate_dead_constant_pass.h */,
+				A9765CA42485758400FDD115 /* dead_insert_elim_pass.cpp */,
+				A9765CA52485758400FDD115 /* ssa_rewrite_pass.h */,
+				A9765CA62485758400FDD115 /* scalar_analysis.cpp */,
+				A9765CA72485758400FDD115 /* dead_variable_elimination.h */,
+				A9765CA82485758400FDD115 /* block_merge_pass.cpp */,
+				A9765CA92485758400FDD115 /* dominator_analysis.h */,
+				A9765CAA2485758400FDD115 /* pass.h */,
+				A9765CAB2485758400FDD115 /* folding_rules.h */,
+				A9765CAC2485758400FDD115 /* eliminate_dead_functions_pass.h */,
+				A9765CAD2485758400FDD115 /* eliminate_dead_functions_util.h */,
+				A9765CAE2485758400FDD115 /* fold.h */,
+				A9765CAF2485758400FDD115 /* local_single_store_elim_pass.cpp */,
+				A9765CB02485758400FDD115 /* dead_branch_elim_pass.h */,
+				A9765CB12485758400FDD115 /* private_to_local_pass.cpp */,
+				A9765CB22485758400FDD115 /* scalar_analysis_nodes.h */,
+				A9765CB32485758400FDD115 /* propagator.cpp */,
+				A9765CB42485758400FDD115 /* fix_storage_class.h */,
+				A9765CB52485758400FDD115 /* loop_dependence_helpers.cpp */,
+				A9765CB62485758400FDD115 /* set_spec_constant_default_value_pass.cpp */,
+				A9765CB72485758400FDD115 /* passes.h */,
+				A9765CB82485758400FDD115 /* fold.cpp */,
+				A9765CB92485758400FDD115 /* amd_ext_to_khr.cpp */,
+				A9765CBA2485758400FDD115 /* strip_reflect_info_pass.h */,
+				A9765CBB2485758400FDD115 /* scalar_replacement_pass.cpp */,
+				A9765CBC2485758400FDD115 /* simplification_pass.h */,
+				A9765CBD2485758400FDD115 /* remove_duplicates_pass.h */,
+				A9765CBE2485758400FDD115 /* redundancy_elimination.cpp */,
+				A9765CBF2485758400FDD115 /* reflect.h */,
+				A9765CC02485758400FDD115 /* workaround1209.cpp */,
+				A9765CC12485758400FDD115 /* null_pass.h */,
+				A9765CC22485758400FDD115 /* relax_float_ops_pass.cpp */,
+				A9765CC32485758400FDD115 /* const_folding_rules.h */,
+				A9765CC42485758400FDD115 /* scalar_replacement_pass.h */,
+				A9765CC52485758400FDD115 /* instruction.cpp */,
+				A9765CC62485758400FDD115 /* pch_source_opt.h */,
+				A9765CC72485758400FDD115 /* reduce_load_size.cpp */,
+				A9765CC82485758400FDD115 /* redundancy_elimination.h */,
+				A9765CC92485758400FDD115 /* fix_storage_class.cpp */,
+				A9765CCA2485758400FDD115 /* value_number_table.cpp */,
+				A9765CCB2485758400FDD115 /* inline_opaque_pass.cpp */,
+				A9765CCC2485758400FDD115 /* replace_invalid_opc.cpp */,
+				A9765CCD2485758400FDD115 /* loop_utils.h */,
+				A9765CCE2485758400FDD115 /* module.h */,
+				A9765CCF2485758400FDD115 /* dominator_analysis.cpp */,
+				A9765CD02485758400FDD115 /* decompose_initialized_variables_pass.cpp */,
+				A9765CD12485758400FDD115 /* ir_builder.h */,
+				A9765CD22485758400FDD115 /* loop_unswitch_pass.h */,
+				A9765CD32485758400FDD115 /* cfg.h */,
+				A9765CD42485758400FDD115 /* code_sink.h */,
+				A9765CD52485758400FDD115 /* loop_descriptor.h */,
+				A9765CD62485758400FDD115 /* generate_webgpu_initializers_pass.h */,
+				A9765CD72485758400FDD115 /* instruction.h */,
+				A9765CD82485758400FDD115 /* aggressive_dead_code_elim_pass.h */,
+				A9765CD92485758400FDD115 /* struct_cfg_analysis.cpp */,
+				A9765CDA2485758400FDD115 /* vector_dce.h */,
+				A9765CDB2485758400FDD115 /* combine_access_chains.h */,
+				A9765CDC2485758400FDD115 /* pass_manager.h */,
+				A9765CDD2485758400FDD115 /* local_access_chain_convert_pass.cpp */,
+				A9765CDE2485758400FDD115 /* basic_block.cpp */,
+				A9765CDF2485758400FDD115 /* iterator.h */,
+				A9765CE02485758400FDD115 /* licm_pass.h */,
+				A9765CE12485758400FDD115 /* build_module.h */,
+				A9765CE22485758400FDD115 /* ccp_pass.h */,
+				A9765CE32485758400FDD115 /* graphics_robust_access_pass.cpp */,
+				A9765CE42485758400FDD115 /* decompose_initialized_variables_pass.h */,
+				A9765CE52485758400FDD115 /* function.h */,
+				A9765CE62485758400FDD115 /* loop_fusion.cpp */,
+				A9765CE72485758400FDD115 /* upgrade_memory_model.cpp */,
+				A9765CE82485758400FDD115 /* feature_manager.h */,
+				A9765CE92485758400FDD115 /* inst_bindless_check_pass.h */,
+				A9765CEA2485758400FDD115 /* scalar_analysis_simplification.cpp */,
+				A9765CEB2485758400FDD115 /* set_spec_constant_default_value_pass.h */,
+				A9765CEC2485758400FDD115 /* dominator_tree.h */,
+				A9765CED2485758400FDD115 /* legalize_vector_shuffle_pass.cpp */,
+				A9765CEE2485758400FDD115 /* type_manager.h */,
+				A9765CEF2485758400FDD115 /* compact_ids_pass.cpp */,
+				A9765CF02485758400FDD115 /* loop_peeling.cpp */,
+			);
+			path = opt;
+			sourceTree = "<group>";
+		};
+		A9765DBF2485758500FDD115 /* val */ = {
+			isa = PBXGroup;
+			children = (
+				A9765DC02485758500FDD115 /* validate_annotation.cpp */,
+				A9765DC12485758500FDD115 /* validate_misc.cpp */,
+				A9765DC22485758500FDD115 /* validate_cfg.cpp */,
+				A9765DC32485758500FDD115 /* validate_capability.cpp */,
+				A9765DC42485758500FDD115 /* construct.h */,
+				A9765DC52485758500FDD115 /* validate_barriers.cpp */,
+				A9765DC62485758500FDD115 /* validate_non_uniform.cpp */,
+				A9765DC72485758500FDD115 /* validate_scopes.cpp */,
+				A9765DC82485758500FDD115 /* validate_atomics.cpp */,
+				A9765DC92485758500FDD115 /* basic_block.h */,
+				A9765DCA2485758500FDD115 /* validate_instruction.cpp */,
+				A9765DCB2485758500FDD115 /* validate_decorations.cpp */,
+				A9765DCC2485758500FDD115 /* validate_debug.cpp */,
+				A9765DCD2485758500FDD115 /* validate_builtins.cpp */,
+				A9765DCE2485758500FDD115 /* validate_interfaces.cpp */,
+				A9765DCF2485758500FDD115 /* validate.cpp */,
+				A9765DD02485758500FDD115 /* validation_state.h */,
+				A9765DD12485758500FDD115 /* validate_constants.cpp */,
+				A9765DD22485758500FDD115 /* validate_bitwise.cpp */,
+				A9765DD32485758500FDD115 /* validate_extensions.cpp */,
+				A9765DD42485758500FDD115 /* construct.cpp */,
+				A9765DD52485758500FDD115 /* function.cpp */,
+				A9765DD62485758500FDD115 /* validate.h */,
+				A9765DD72485758500FDD115 /* validate_adjacency.cpp */,
+				A9765DD82485758500FDD115 /* validate_conversion.cpp */,
+				A9765DD92485758500FDD115 /* validate_small_type_uses.cpp */,
+				A9765DDA2485758500FDD115 /* validate_scopes.h */,
+				A9765DDB2485758500FDD115 /* validate_id.cpp */,
+				A9765DDC2485758500FDD115 /* validate_memory_semantics.h */,
+				A9765DDD2485758500FDD115 /* validate_arithmetics.cpp */,
+				A9765DDE2485758500FDD115 /* validate_mode_setting.cpp */,
+				A9765DDF2485758500FDD115 /* validate_memory_semantics.cpp */,
+				A9765DE02485758500FDD115 /* validate_logicals.cpp */,
+				A9765DE12485758500FDD115 /* validate_derivatives.cpp */,
+				A9765DE22485758500FDD115 /* validate_memory.cpp */,
+				A9765DE32485758500FDD115 /* validate_image.cpp */,
+				A9765DE42485758500FDD115 /* validate_literals.cpp */,
+				A9765DE52485758500FDD115 /* instruction.cpp */,
+				A9765DE62485758500FDD115 /* validate_type.cpp */,
+				A9765DE72485758500FDD115 /* instruction.h */,
+				A9765DE82485758500FDD115 /* validate_execution_limitations.cpp */,
+				A9765DE92485758500FDD115 /* validate_layout.cpp */,
+				A9765DEA2485758500FDD115 /* basic_block.cpp */,
+				A9765DEB2485758500FDD115 /* validate_function.cpp */,
+				A9765DEC2485758500FDD115 /* function.h */,
+				A9765DED2485758500FDD115 /* validate_composites.cpp */,
+				A9765DEE2485758500FDD115 /* validation_state.cpp */,
+				A9765DEF2485758500FDD115 /* validate_primitives.cpp */,
+				A9765DF02485758500FDD115 /* decoration.h */,
+			);
+			path = val;
+			sourceTree = "<group>";
+		};
 		A9F55D24198BE6A7004EC31B = {
 			isa = PBXGroup;
 			children = (
@@ -2347,192 +2371,195 @@
 			isa = PBXHeadersBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A9415B8B243667F800566F16 /* strip_debug_info_pass.h in Headers */,
-				A9415AB9243667F700566F16 /* operand_to_undef_reduction_opportunity_finder.h in Headers */,
-				A9415CCB243667F800566F16 /* ir_builder.h in Headers */,
-				A9415C6D243667F800566F16 /* copy_prop_arrays.h in Headers */,
-				A9415CB9243667F800566F16 /* redundancy_elimination.h in Headers */,
-				A9415D0B243667F800566F16 /* table.h in Headers */,
-				A9415E8D243667F900566F16 /* binary.h in Headers */,
-				A9415B0B243667F700566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */,
-				A9415B89243667F800566F16 /* scalar_analysis.h in Headers */,
-				A9415CAF243667F800566F16 /* const_folding_rules.h in Headers */,
-				A9415D05243667F800566F16 /* type_manager.h in Headers */,
-				A9415E99243667F900566F16 /* construct.h in Headers */,
-				A9415B2F243667F800566F16 /* spirv_reducer_options.h in Headers */,
-				A9415B37243667F800566F16 /* operand.h in Headers */,
-				A9415AFB243667F700566F16 /* remove_function_reduction_opportunity_finder.h in Headers */,
-				A9415CE9243667F800566F16 /* licm_pass.h in Headers */,
-				A9415AD1243667F700566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */,
-				A9415C45243667F800566F16 /* inline_pass.h in Headers */,
-				A9415AAB243667F700566F16 /* bitutils.h in Headers */,
-				A9415B51243667F800566F16 /* spirv_endian.h in Headers */,
-				A9415B4F243667F800566F16 /* diagnostic.h in Headers */,
-				A9415BCF243667F800566F16 /* basic_block.h in Headers */,
-				A9415B09243667F700566F16 /* reduction_opportunity.h in Headers */,
-				A9415C1B243667F800566F16 /* inst_buff_addr_check_pass.h in Headers */,
-				A9415CD7243667F800566F16 /* instruction.h in Headers */,
-				A9415AB5243667F700566F16 /* spirv_target_env.h in Headers */,
-				A9415B79243667F800566F16 /* tree_iterator.h in Headers */,
-				A9415C7F243667F800566F16 /* folding_rules.h in Headers */,
-				A9415CA1243667F800566F16 /* simplification_pass.h in Headers */,
-				A9415A9D243667F700566F16 /* make_unique.h in Headers */,
-				A9415CED243667F800566F16 /* ccp_pass.h in Headers */,
-				A9415C6B243667F800566F16 /* split_invalid_unreachable_pass.h in Headers */,
-				A9415CD5243667F800566F16 /* generate_webgpu_initializers_pass.h in Headers */,
-				A9415AED243667F700566F16 /* remove_selection_reduction_opportunity.h in Headers */,
-				A9415C33243667F800566F16 /* instrument_pass.h in Headers */,
-				A9415B2B243667F800566F16 /* enum_string_mapping.h in Headers */,
-				A9415C39243667F800566F16 /* eliminate_dead_members_pass.h in Headers */,
-				A9415C81243667F800566F16 /* eliminate_dead_functions_pass.h in Headers */,
-				A9415BB1243667F800566F16 /* ir_context.h in Headers */,
-				A9415ACF243667F700566F16 /* remove_instruction_reduction_opportunity.h in Headers */,
-				A9415C4B243667F800566F16 /* flatten_decoration_pass.h in Headers */,
-				A9415BC3243667F800566F16 /* unify_const_pass.h in Headers */,
-				A9415B6D243667F800566F16 /* loop_fusion.h in Headers */,
-				A9415C6F243667F800566F16 /* eliminate_dead_constant_pass.h in Headers */,
-				A9415EBD243667F900566F16 /* validate.h in Headers */,
-				A9415B7D243667F800566F16 /* strip_atomic_counter_memory_pass.h in Headers */,
-				A9415A8B243667F700566F16 /* assembly_grammar.h in Headers */,
-				A9415CDF243667F800566F16 /* combine_access_chains.h in Headers */,
-				A9415AE3243667F700566F16 /* structured_loop_to_selection_reduction_opportunity.h in Headers */,
-				A9415B5F243667F800566F16 /* disassemble.h in Headers */,
-				A9415B49243667F800566F16 /* name_mapper.h in Headers */,
-				A9415EE9243667F900566F16 /* function.h in Headers */,
-				A9415BC5243667F800566F16 /* ir_loader.h in Headers */,
-				A9415CFB243667F800566F16 /* inst_bindless_check_pass.h in Headers */,
-				A9415B19243667F700566F16 /* merge_blocks_reduction_opportunity.h in Headers */,
-				A9415B13243667F700566F16 /* remove_block_reduction_opportunity_finder.h in Headers */,
-				A9415CF9243667F800566F16 /* feature_manager.h in Headers */,
-				A9415ABD243667F700566F16 /* remove_block_reduction_opportunity.h in Headers */,
-				A9415BC9243667F800566F16 /* types.h in Headers */,
-				A9415EB1243667F900566F16 /* validation_state.h in Headers */,
-				A9415E81243667F900566F16 /* spirv_optimizer_options.h in Headers */,
-				A9415AFD243667F700566F16 /* pch_source_reduce.h in Headers */,
-				A9415B81243667F800566F16 /* local_single_store_elim_pass.h in Headers */,
-				A9415C07243667F800566F16 /* struct_cfg_analysis.h in Headers */,
-				A9415CC3243667F800566F16 /* loop_utils.h in Headers */,
-				A9415CD3243667F800566F16 /* loop_descriptor.h in Headers */,
-				A9415C15243667F800566F16 /* process_lines_pass.h in Headers */,
-				A9415C97243667F800566F16 /* passes.h in Headers */,
-				A9415ACB243667F700566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */,
-				A9415EA3243667F900566F16 /* basic_block.h in Headers */,
-				A9415CD9243667F800566F16 /* aggressive_dead_code_elim_pass.h in Headers */,
-				A9415BEB243667F800566F16 /* def_use_manager.h in Headers */,
-				A9415B75243667F800566F16 /* compact_ids_pass.h in Headers */,
-				A9415C1D243667F800566F16 /* strength_reduction_pass.h in Headers */,
-				A9415AA5243667F700566F16 /* timer.h in Headers */,
-				A9415E7F243667F900566F16 /* instruction.h in Headers */,
-				A9415BF5243667F800566F16 /* local_redundancy_elimination.h in Headers */,
-				A9415C11243667F800566F16 /* decoration_manager.h in Headers */,
-				A9415C9D243667F800566F16 /* strip_reflect_info_pass.h in Headers */,
-				A9415B5B243667F800566F16 /* print.h in Headers */,
-				A9415BA3243667F800566F16 /* instruction_list.h in Headers */,
-				A9415B29243667F800566F16 /* pch_source.h in Headers */,
-				A9415C89243667F800566F16 /* dead_branch_elim_pass.h in Headers */,
-				A9415B23243667F700566F16 /* latest_version_opencl_std_header.h in Headers */,
-				A9415BA1243667F800566F16 /* propagator.h in Headers */,
-				A9415BE3243667F800566F16 /* private_to_local_pass.h in Headers */,
-				A9415EC5243667F900566F16 /* validate_scopes.h in Headers */,
-				A9415C8D243667F800566F16 /* scalar_analysis_nodes.h in Headers */,
-				A9415BFD243667F800566F16 /* block_merge_util.h in Headers */,
-				A9415CDD243667F800566F16 /* vector_dce.h in Headers */,
-				A9415C73243667F800566F16 /* ssa_rewrite_pass.h in Headers */,
-				A9415B41243667F800566F16 /* spirv_validator_options.h in Headers */,
-				A9415B63243667F800566F16 /* if_conversion.h in Headers */,
-				A9415B45243667F800566F16 /* text_handler.h in Headers */,
-				A9415B0F243667F700566F16 /* reduction_opportunity_finder.h in Headers */,
-				A9415AB3243667F700566F16 /* ilist.h in Headers */,
-				A9415B11243667F700566F16 /* change_operand_reduction_opportunity.h in Headers */,
-				A9415B7B243667F800566F16 /* graphics_robust_access_pass.h in Headers */,
-				A9415E89243667F900566F16 /* extensions.h in Headers */,
-				A9415CA7243667F800566F16 /* reflect.h in Headers */,
-				A9415CE7243667F800566F16 /* iterator.h in Headers */,
-				A9415B05243667F700566F16 /* reducer.h in Headers */,
-				A9415C91243667F800566F16 /* fix_storage_class.h in Headers */,
-				A9415AA1243667F700566F16 /* small_vector.h in Headers */,
-				A9415CEB243667F800566F16 /* build_module.h in Headers */,
-				A9415AF1243667F700566F16 /* remove_selection_reduction_opportunity_finder.h in Headers */,
-				A9415B3D243667F800566F16 /* spirv_constant.h in Headers */,
-				A9415AAD243667F700566F16 /* hex_float.h in Headers */,
-				A9415CF1243667F800566F16 /* decompose_initialized_variables_pass.h in Headers */,
-				A9415C0D243667F800566F16 /* wrap_opkill.h in Headers */,
-				A9415A93243667F700566F16 /* text.h in Headers */,
-				A9415BEF243667F800566F16 /* cfg_cleanup_pass.h in Headers */,
-				A9415BCB243667F800566F16 /* fold_spec_constant_op_and_composite_pass.h in Headers */,
-				A9415AF3243667F700566F16 /* merge_blocks_reduction_opportunity_finder.h in Headers */,
-				A9415B21243667F700566F16 /* reduction_pass.h in Headers */,
-				A9415C83243667F800566F16 /* eliminate_dead_functions_util.h in Headers */,
-				A9415B7F243667F800566F16 /* legalize_vector_shuffle_pass.h in Headers */,
-				A9415E77243667F900566F16 /* ext_inst.h in Headers */,
-				A9415A9F243667F700566F16 /* string_utils.h in Headers */,
-				A9415EDF243667F900566F16 /* instruction.h in Headers */,
-				A9415C05243667F800566F16 /* loop_fusion_pass.h in Headers */,
-				A9415C47243667F800566F16 /* loop_dependence.h in Headers */,
-				A9415ABF243667F700566F16 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */,
-				A9415C5B243667F800566F16 /* upgrade_memory_model.h in Headers */,
-				A9415A99243667F700566F16 /* parse_number.h in Headers */,
-				A9415ADD243667F700566F16 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */,
-				A9415CC5243667F800566F16 /* module.h in Headers */,
-				A9415C35243667F800566F16 /* mem_pass.h in Headers */,
-				A9415B35243667F800566F16 /* spirv_definition.h in Headers */,
-				A9415CB1243667F800566F16 /* scalar_replacement_pass.h in Headers */,
-				A9415B27243667F700566F16 /* cfa.h in Headers */,
-				A9415B3B243667F800566F16 /* macro.h in Headers */,
-				A9415C23243667F800566F16 /* inst_debug_printf_pass.h in Headers */,
-				A9415AE5243667F700566F16 /* remove_function_reduction_opportunity.h in Headers */,
-				A9415B97243667F800566F16 /* replace_invalid_opc.h in Headers */,
-				A9415B83243667F800566F16 /* reduce_load_size.h in Headers */,
-				A9415C49243667F800566F16 /* value_number_table.h in Headers */,
-				A9415C7B243667F800566F16 /* dominator_analysis.h in Headers */,
-				A9415D01243667F800566F16 /* dominator_tree.h in Headers */,
-				A9415A89243667F700566F16 /* spirv_fuzzer_options.h in Headers */,
-				A9415C51243667F800566F16 /* constants.h in Headers */,
-				A9415C65243667F800566F16 /* workaround1209.h in Headers */,
-				A9415CE1243667F800566F16 /* pass_manager.h in Headers */,
-				A9415C63243667F800566F16 /* loop_fission.h in Headers */,
-				A9415B73243667F800566F16 /* composite.h in Headers */,
-				A9415EF1243667F900566F16 /* decoration.h in Headers */,
-				A9415B17243667F700566F16 /* reduction_util.h in Headers */,
-				A9415CB5243667F800566F16 /* pch_source_opt.h in Headers */,
-				A9415BD5243667F800566F16 /* block_merge_pass.h in Headers */,
-				A9415CCF243667F800566F16 /* cfg.h in Headers */,
-				A9415C77243667F800566F16 /* dead_variable_elimination.h in Headers */,
-				A9415C2F243667F800566F16 /* freeze_spec_constant_value_pass.h in Headers */,
-				A9415CD1243667F800566F16 /* code_sink.h in Headers */,
-				A9415BF9243667F800566F16 /* loop_peeling.h in Headers */,
-				A9415EC9243667F900566F16 /* validate_memory_semantics.h in Headers */,
-				A9415AFF243667F700566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */,
-				A9415A9B243667F700566F16 /* ilist_node.h in Headers */,
-				A9415C2B243667F800566F16 /* dead_insert_elim_pass.h in Headers */,
-				A9415A8D243667F700566F16 /* enum_set.h in Headers */,
-				A9415AC5243667F700566F16 /* operand_to_const_reduction_opportunity_finder.h in Headers */,
-				A9415CFF243667F800566F16 /* set_spec_constant_default_value_pass.h in Headers */,
-				A9415C4F243667F800566F16 /* inline_exhaustive_pass.h in Headers */,
-				A9415C17243667F800566F16 /* local_single_block_elim_pass.h in Headers */,
-				A9415B69243667F800566F16 /* merge_return_pass.h in Headers */,
-				A9415C01243667F800566F16 /* desc_sroa.h in Headers */,
-				A9415BAD243667F800566F16 /* amd_ext_to_khr.h in Headers */,
-				A9415BE7243667F800566F16 /* relax_float_ops_pass.h in Headers */,
-				A9415CAB243667F800566F16 /* null_pass.h in Headers */,
-				A9415B99243667F800566F16 /* local_access_chain_convert_pass.h in Headers */,
-				A9415AEB243667F700566F16 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */,
-				A9415E7B243667F900566F16 /* latest_version_spirv_header.h in Headers */,
-				A9415CA3243667F800566F16 /* remove_duplicates_pass.h in Headers */,
-				A9415AE7243667F700566F16 /* change_operand_to_undef_reduction_opportunity.h in Headers */,
-				A9415CCD243667F800566F16 /* loop_unswitch_pass.h in Headers */,
-				A9415BE5243667F800566F16 /* convert_to_half_pass.h in Headers */,
-				A9415C85243667F800566F16 /* fold.h in Headers */,
-				A9415E87243667F900566F16 /* latest_version_glsl_std_450_header.h in Headers */,
-				A9415B77243667F800566F16 /* register_pressure.h in Headers */,
-				A9415B6B243667F800566F16 /* inline_opaque_pass.h in Headers */,
-				A9415C7D243667F800566F16 /* pass.h in Headers */,
-				A9415AA9243667F700566F16 /* bit_vector.h in Headers */,
-				A9415C69243667F800566F16 /* log.h in Headers */,
-				A9415B47243667F800566F16 /* parsed_operand.h in Headers */,
-				A9415CF3243667F800566F16 /* function.h in Headers */,
-				A9415E83243667F900566F16 /* opcode.h in Headers */,
-				A9415BBB243667F800566F16 /* loop_unroller.h in Headers */,
+				A9765F3B2485758600FDD115 /* types.h in Headers */,
+				A97660552485758600FDD115 /* combine_access_chains.h in Headers */,
+				A9765E532485758600FDD115 /* remove_unused_instruction_reduction_opportunity_finder.h in Headers */,
+				A9765FE12485758600FDD115 /* split_invalid_unreachable_pass.h in Headers */,
+				A9765F472485758600FDD115 /* block_merge_pass.h in Headers */,
+				A9765FF52485758600FDD115 /* folding_rules.h in Headers */,
+				A97660472485758600FDD115 /* code_sink.h in Headers */,
+				A9765F7B2485758600FDD115 /* struct_cfg_analysis.h in Headers */,
+				A976607B2485758600FDD115 /* type_manager.h in Headers */,
+				A97660492485758600FDD115 /* loop_descriptor.h in Headers */,
+				A9765F792485758600FDD115 /* loop_fusion_pass.h in Headers */,
+				A9765EA92485758600FDD115 /* operand.h in Headers */,
+				A9765E832485758600FDD115 /* remove_block_reduction_opportunity_finder.h in Headers */,
+				A9765EAD2485758600FDD115 /* macro.h in Headers */,
+				A9765E7F2485758600FDD115 /* reduction_opportunity_finder.h in Headers */,
+				A9765F892485758600FDD115 /* process_lines_pass.h in Headers */,
+				A9765E992485758600FDD115 /* cfa.h in Headers */,
+				A9765EE52485758600FDD115 /* composite.h in Headers */,
+				A9765F812485758600FDD115 /* wrap_opkill.h in Headers */,
+				A976621F2485758700FDD115 /* construct.h in Headers */,
+				A9765F712485758600FDD115 /* block_merge_util.h in Headers */,
+				A9765E752485758600FDD115 /* reducer.h in Headers */,
+				A9765E232485758500FDD115 /* operand_to_undef_reduction_opportunity_finder.h in Headers */,
+				A97662292485758700FDD115 /* basic_block.h in Headers */,
+				A97661FD2485758700FDD115 /* ext_inst.h in Headers */,
+				A9765EED2485758600FDD115 /* graphics_robust_access_pass.h in Headers */,
+				A97660212485758600FDD115 /* null_pass.h in Headers */,
+				A97660192485758600FDD115 /* remove_duplicates_pass.h in Headers */,
+				A9765E5D2485758600FDD115 /* remove_selection_reduction_opportunity_finder.h in Headers */,
+				A9765EC12485758600FDD115 /* diagnostic.h in Headers */,
+				A9765E3B2485758500FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */,
+				A97660432485758600FDD115 /* loop_unswitch_pass.h in Headers */,
+				A97660612485758600FDD115 /* build_module.h in Headers */,
+				A9765F852485758600FDD115 /* decoration_manager.h in Headers */,
+				A9765FDF2485758600FDD115 /* log.h in Headers */,
+				A9765FA72485758600FDD115 /* instrument_pass.h in Headers */,
+				A9765F132485758600FDD115 /* propagator.h in Headers */,
+				A976620D2485758700FDD115 /* latest_version_glsl_std_450_header.h in Headers */,
+				A97662052485758700FDD115 /* instruction.h in Headers */,
+				A97662092485758700FDD115 /* opcode.h in Headers */,
+				A9765EBB2485758600FDD115 /* name_mapper.h in Headers */,
+				A9765F352485758600FDD115 /* unify_const_pass.h in Headers */,
+				A9765E492485758600FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */,
+				A97660692485758600FDD115 /* function.h in Headers */,
+				A9765ED12485758600FDD115 /* disassemble.h in Headers */,
+				A9765E152485758500FDD115 /* bitutils.h in Headers */,
+				A9765E1F2485758500FDD115 /* spirv_target_env.h in Headers */,
+				A976604D2485758600FDD115 /* instruction.h in Headers */,
+				A9765F2D2485758600FDD115 /* loop_unroller.h in Headers */,
+				A9765EFD2485758600FDD115 /* strip_debug_info_pass.h in Headers */,
+				A9765E6F2485758600FDD115 /* pch_source_reduce.h in Headers */,
+				A9765E072485758500FDD115 /* make_unique.h in Headers */,
+				A9765EA12485758600FDD115 /* spirv_reducer_options.h in Headers */,
+				A9765E392485758500FDD115 /* remove_instruction_reduction_opportunity.h in Headers */,
+				A97660032485758600FDD115 /* scalar_analysis_nodes.h in Headers */,
+				A9765E4F2485758600FDD115 /* structured_loop_to_selection_reduction_opportunity.h in Headers */,
+				A9765FE52485758600FDD115 /* eliminate_dead_constant_pass.h in Headers */,
+				A9765FD12485758600FDD115 /* upgrade_memory_model.h in Headers */,
+				A9765DF52485758500FDD115 /* assembly_grammar.h in Headers */,
+				A976602F2485758600FDD115 /* redundancy_elimination.h in Headers */,
+				A9765EAF2485758600FDD115 /* spirv_constant.h in Headers */,
+				A9765E272485758500FDD115 /* remove_block_reduction_opportunity.h in Headers */,
+				A97660572485758600FDD115 /* pass_manager.h in Headers */,
+				A9765FF12485758600FDD115 /* dominator_analysis.h in Headers */,
+				A97660072485758600FDD115 /* fix_storage_class.h in Headers */,
+				A9765F5B2485758600FDD115 /* relax_float_ops_pass.h in Headers */,
+				A9765FD92485758600FDD115 /* loop_fission.h in Headers */,
+				A9765F412485758600FDD115 /* basic_block.h in Headers */,
+				A97660632485758600FDD115 /* ccp_pass.h in Headers */,
+				A9765EF32485758600FDD115 /* local_single_store_elim_pass.h in Headers */,
+				A9765FBD2485758600FDD115 /* value_number_table.h in Headers */,
+				A97660172485758600FDD115 /* simplification_pass.h in Headers */,
+				A97660392485758600FDD115 /* loop_utils.h in Headers */,
+				A9765F692485758600FDD115 /* local_redundancy_elimination.h in Headers */,
+				A9765F972485758600FDD115 /* inst_debug_printf_pass.h in Headers */,
+				A97660712485758600FDD115 /* inst_bindless_check_pass.h in Headers */,
+				A97660672485758600FDD115 /* decompose_initialized_variables_pass.h in Headers */,
+				A9765E472485758600FDD115 /* remove_struct_member_reduction_opportunity.h in Headers */,
+				A9765EFB2485758600FDD115 /* scalar_analysis.h in Headers */,
+				A9765F3D2485758600FDD115 /* fold_spec_constant_op_and_composite_pass.h in Headers */,
+				A97660752485758600FDD115 /* set_spec_constant_default_value_pass.h in Headers */,
+				A976624B2485758700FDD115 /* validate_scopes.h in Headers */,
+				A976605F2485758600FDD115 /* licm_pass.h in Headers */,
+				A9765FDB2485758600FDD115 /* workaround1209.h in Headers */,
+				A9765E932485758600FDD115 /* reduction_pass.h in Headers */,
+				A97660252485758600FDD115 /* const_folding_rules.h in Headers */,
+				A9765F572485758600FDD115 /* private_to_local_pass.h in Headers */,
+				A9765E5F2485758600FDD115 /* merge_blocks_reduction_opportunity_finder.h in Headers */,
+				A9765EF12485758600FDD115 /* legalize_vector_shuffle_pass.h in Headers */,
+				A9765E952485758600FDD115 /* latest_version_opencl_std_header.h in Headers */,
+				A9765EB72485758600FDD115 /* text_handler.h in Headers */,
+				A9765FE92485758600FDD115 /* ssa_rewrite_pass.h in Headers */,
+				A9765E352485758500FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */,
+				A9765FC72485758600FDD115 /* constants.h in Headers */,
+				A976605D2485758600FDD115 /* iterator.h in Headers */,
+				A9765F152485758600FDD115 /* instruction_list.h in Headers */,
+				A9765FF32485758600FDD115 /* pass.h in Headers */,
+				A9765EEB2485758600FDD115 /* tree_iterator.h in Headers */,
+				A9765F372485758600FDD115 /* ir_loader.h in Headers */,
+				A97660412485758600FDD115 /* ir_builder.h in Headers */,
+				A9765E652485758600FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.h in Headers */,
+				A9765F8F2485758600FDD115 /* inst_buff_addr_check_pass.h in Headers */,
+				A97662012485758700FDD115 /* latest_version_spirv_header.h in Headers */,
+				A9765E512485758600FDD115 /* remove_function_reduction_opportunity.h in Headers */,
+				A97660272485758600FDD115 /* scalar_replacement_pass.h in Headers */,
+				A9765E0F2485758500FDD115 /* timer.h in Headers */,
+				A9765E1D2485758500FDD115 /* ilist.h in Headers */,
+				A97662072485758700FDD115 /* spirv_optimizer_options.h in Headers */,
+				A97662372485758700FDD115 /* validation_state.h in Headers */,
+				A9765E0B2485758500FDD115 /* small_vector.h in Headers */,
+				A976626F2485758700FDD115 /* function.h in Headers */,
+				A9765EDB2485758600FDD115 /* merge_return_pass.h in Headers */,
+				A9765E872485758600FDD115 /* reduction_util.h in Headers */,
+				A9765E172485758500FDD115 /* hex_float.h in Headers */,
+				A97662432485758700FDD115 /* validate.h in Headers */,
+				A976601D2485758600FDD115 /* reflect.h in Headers */,
+				A9765F5F2485758600FDD115 /* def_use_manager.h in Headers */,
+				A9765E552485758600FDD115 /* change_operand_to_undef_reduction_opportunity.h in Headers */,
+				A9765FB92485758600FDD115 /* inline_pass.h in Headers */,
+				A9765F752485758600FDD115 /* desc_sroa.h in Headers */,
+				A9765E892485758600FDD115 /* merge_blocks_reduction_opportunity.h in Headers */,
+				A9765F8B2485758600FDD115 /* local_single_block_elim_pass.h in Headers */,
+				A9765E592485758600FDD115 /* remove_selection_reduction_opportunity.h in Headers */,
+				A9765F9F2485758600FDD115 /* dead_insert_elim_pass.h in Headers */,
+				A9765FE32485758600FDD115 /* copy_prop_arrays.h in Headers */,
+				A976604F2485758600FDD115 /* aggressive_dead_code_elim_pass.h in Headers */,
+				A9765FAD2485758600FDD115 /* eliminate_dead_members_pass.h in Headers */,
+				A97662772485758700FDD115 /* decoration.h in Headers */,
+				A9765EDD2485758600FDD115 /* inline_opaque_pass.h in Headers */,
+				A9765E9B2485758600FDD115 /* pch_source.h in Headers */,
+				A9765E9D2485758600FDD115 /* enum_string_mapping.h in Headers */,
+				A9765DFD2485758500FDD115 /* text.h in Headers */,
+				A976603B2485758600FDD115 /* module.h in Headers */,
+				A9765F6D2485758600FDD115 /* loop_peeling.h in Headers */,
+				A976602B2485758600FDD115 /* pch_source_opt.h in Headers */,
+				A97660452485758600FDD115 /* cfg.h in Headers */,
+				A9765FBB2485758600FDD115 /* loop_dependence.h in Headers */,
+				A9765E092485758500FDD115 /* string_utils.h in Headers */,
+				A9765FED2485758600FDD115 /* dead_variable_elimination.h in Headers */,
+				A9765EC32485758600FDD115 /* spirv_endian.h in Headers */,
+				A9765EDF2485758600FDD115 /* loop_fusion.h in Headers */,
+				A9765F4B2485758600FDD115 /* debug_info_manager.h in Headers */,
+				A97660812485758600FDD115 /* table.h in Headers */,
+				A9765F912485758600FDD115 /* strength_reduction_pass.h in Headers */,
+				A9765E292485758500FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */,
+				A9765E032485758500FDD115 /* parse_number.h in Headers */,
+				A9765DF32485758500FDD115 /* spirv_fuzzer_options.h in Headers */,
+				A976604B2485758600FDD115 /* generate_webgpu_initializers_pass.h in Headers */,
+				A9765E052485758500FDD115 /* ilist_node.h in Headers */,
+				A9765FFF2485758600FDD115 /* dead_branch_elim_pass.h in Headers */,
+				A9765E572485758600FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */,
+				A9765F632485758600FDD115 /* cfg_cleanup_pass.h in Headers */,
+				A976600D2485758600FDD115 /* passes.h in Headers */,
+				A97660772485758600FDD115 /* dominator_tree.h in Headers */,
+				A9765F592485758600FDD115 /* convert_to_half_pass.h in Headers */,
+				A9765FA32485758600FDD115 /* freeze_spec_constant_value_pass.h in Headers */,
+				A9765EE92485758600FDD115 /* register_pressure.h in Headers */,
+				A9765EB32485758600FDD115 /* spirv_validator_options.h in Headers */,
+				A9765EA72485758600FDD115 /* spirv_definition.h in Headers */,
+				A9765E6D2485758600FDD115 /* remove_function_reduction_opportunity_finder.h in Headers */,
+				A97662652485758700FDD115 /* instruction.h in Headers */,
+				A9765FF72485758600FDD115 /* eliminate_dead_functions_pass.h in Headers */,
+				A976624F2485758700FDD115 /* validate_memory_semantics.h in Headers */,
+				A9765EE72485758600FDD115 /* compact_ids_pass.h in Headers */,
+				A9765E812485758600FDD115 /* change_operand_reduction_opportunity.h in Headers */,
+				A9765FFB2485758600FDD115 /* fold.h in Headers */,
+				A9765E792485758600FDD115 /* reduction_opportunity.h in Headers */,
+				A97660132485758600FDD115 /* strip_reflect_info_pass.h in Headers */,
+				A976620F2485758700FDD115 /* extensions.h in Headers */,
+				A97660532485758600FDD115 /* vector_dce.h in Headers */,
+				A9765F0B2485758600FDD115 /* local_access_chain_convert_pass.h in Headers */,
+				A9765ECD2485758600FDD115 /* print.h in Headers */,
+				A9765DF72485758500FDD115 /* enum_set.h in Headers */,
+				A9765FBF2485758600FDD115 /* flatten_decoration_pass.h in Headers */,
+				A9765FA92485758600FDD115 /* mem_pass.h in Headers */,
+				A97662132485758700FDD115 /* binary.h in Headers */,
+				A9765ED52485758600FDD115 /* if_conversion.h in Headers */,
+				A9765EEF2485758600FDD115 /* strip_atomic_counter_memory_pass.h in Headers */,
+				A9765E2F2485758500FDD115 /* operand_to_const_reduction_opportunity_finder.h in Headers */,
+				A9765EB92485758600FDD115 /* parsed_operand.h in Headers */,
+				A9765E132485758500FDD115 /* bit_vector.h in Headers */,
+				A976606F2485758600FDD115 /* feature_manager.h in Headers */,
+				A9765E7B2485758600FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */,
+				A9765F092485758600FDD115 /* replace_invalid_opc.h in Headers */,
+				A9765FC52485758600FDD115 /* inline_exhaustive_pass.h in Headers */,
+				A9765EF52485758600FDD115 /* reduce_load_size.h in Headers */,
+				A9765FF92485758600FDD115 /* eliminate_dead_functions_util.h in Headers */,
+				A9765F1F2485758600FDD115 /* amd_ext_to_khr.h in Headers */,
+				A9765F232485758600FDD115 /* ir_context.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2540,192 +2567,195 @@
 			isa = PBXHeadersBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A9415B8C243667F800566F16 /* strip_debug_info_pass.h in Headers */,
-				A9415ABA243667F700566F16 /* operand_to_undef_reduction_opportunity_finder.h in Headers */,
-				A9415CCC243667F800566F16 /* ir_builder.h in Headers */,
-				A9415C6E243667F800566F16 /* copy_prop_arrays.h in Headers */,
-				A9415CBA243667F800566F16 /* redundancy_elimination.h in Headers */,
-				A9415D0C243667F800566F16 /* table.h in Headers */,
-				A9415E8E243667F900566F16 /* binary.h in Headers */,
-				A9415B0C243667F700566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */,
-				A9415B8A243667F800566F16 /* scalar_analysis.h in Headers */,
-				A9415CB0243667F800566F16 /* const_folding_rules.h in Headers */,
-				A9415D06243667F800566F16 /* type_manager.h in Headers */,
-				A9415E9A243667F900566F16 /* construct.h in Headers */,
-				A9415B30243667F800566F16 /* spirv_reducer_options.h in Headers */,
-				A9415B38243667F800566F16 /* operand.h in Headers */,
-				A9415AFC243667F700566F16 /* remove_function_reduction_opportunity_finder.h in Headers */,
-				A9415CEA243667F800566F16 /* licm_pass.h in Headers */,
-				A9415AD2243667F700566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */,
-				A9415C46243667F800566F16 /* inline_pass.h in Headers */,
-				A9415AAC243667F700566F16 /* bitutils.h in Headers */,
-				A9415B52243667F800566F16 /* spirv_endian.h in Headers */,
-				A9415B50243667F800566F16 /* diagnostic.h in Headers */,
-				A9415BD0243667F800566F16 /* basic_block.h in Headers */,
-				A9415B0A243667F700566F16 /* reduction_opportunity.h in Headers */,
-				A9415C1C243667F800566F16 /* inst_buff_addr_check_pass.h in Headers */,
-				A9415CD8243667F800566F16 /* instruction.h in Headers */,
-				A9415AB6243667F700566F16 /* spirv_target_env.h in Headers */,
-				A9415B7A243667F800566F16 /* tree_iterator.h in Headers */,
-				A9415C80243667F800566F16 /* folding_rules.h in Headers */,
-				A9415CA2243667F800566F16 /* simplification_pass.h in Headers */,
-				A9415A9E243667F700566F16 /* make_unique.h in Headers */,
-				A9415CEE243667F800566F16 /* ccp_pass.h in Headers */,
-				A9415C6C243667F800566F16 /* split_invalid_unreachable_pass.h in Headers */,
-				A9415CD6243667F800566F16 /* generate_webgpu_initializers_pass.h in Headers */,
-				A9415AEE243667F700566F16 /* remove_selection_reduction_opportunity.h in Headers */,
-				A9415C34243667F800566F16 /* instrument_pass.h in Headers */,
-				A9415B2C243667F800566F16 /* enum_string_mapping.h in Headers */,
-				A9415C3A243667F800566F16 /* eliminate_dead_members_pass.h in Headers */,
-				A9415C82243667F800566F16 /* eliminate_dead_functions_pass.h in Headers */,
-				A9415BB2243667F800566F16 /* ir_context.h in Headers */,
-				A9415AD0243667F700566F16 /* remove_instruction_reduction_opportunity.h in Headers */,
-				A9415C4C243667F800566F16 /* flatten_decoration_pass.h in Headers */,
-				A9415BC4243667F800566F16 /* unify_const_pass.h in Headers */,
-				A9415B6E243667F800566F16 /* loop_fusion.h in Headers */,
-				A9415C70243667F800566F16 /* eliminate_dead_constant_pass.h in Headers */,
-				A9415EBE243667F900566F16 /* validate.h in Headers */,
-				A9415B7E243667F800566F16 /* strip_atomic_counter_memory_pass.h in Headers */,
-				A9415A8C243667F700566F16 /* assembly_grammar.h in Headers */,
-				A9415CE0243667F800566F16 /* combine_access_chains.h in Headers */,
-				A9415AE4243667F700566F16 /* structured_loop_to_selection_reduction_opportunity.h in Headers */,
-				A9415B60243667F800566F16 /* disassemble.h in Headers */,
-				A9415B4A243667F800566F16 /* name_mapper.h in Headers */,
-				A9415EEA243667F900566F16 /* function.h in Headers */,
-				A9415BC6243667F800566F16 /* ir_loader.h in Headers */,
-				A9415CFC243667F800566F16 /* inst_bindless_check_pass.h in Headers */,
-				A9415B1A243667F700566F16 /* merge_blocks_reduction_opportunity.h in Headers */,
-				A9415B14243667F700566F16 /* remove_block_reduction_opportunity_finder.h in Headers */,
-				A9415CFA243667F800566F16 /* feature_manager.h in Headers */,
-				A9415ABE243667F700566F16 /* remove_block_reduction_opportunity.h in Headers */,
-				A9415BCA243667F800566F16 /* types.h in Headers */,
-				A9415EB2243667F900566F16 /* validation_state.h in Headers */,
-				A9415E82243667F900566F16 /* spirv_optimizer_options.h in Headers */,
-				A9415AFE243667F700566F16 /* pch_source_reduce.h in Headers */,
-				A9415B82243667F800566F16 /* local_single_store_elim_pass.h in Headers */,
-				A9415C08243667F800566F16 /* struct_cfg_analysis.h in Headers */,
-				A9415CC4243667F800566F16 /* loop_utils.h in Headers */,
-				A9415CD4243667F800566F16 /* loop_descriptor.h in Headers */,
-				A9415C16243667F800566F16 /* process_lines_pass.h in Headers */,
-				A9415C98243667F800566F16 /* passes.h in Headers */,
-				A9415ACC243667F700566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */,
-				A9415EA4243667F900566F16 /* basic_block.h in Headers */,
-				A9415CDA243667F800566F16 /* aggressive_dead_code_elim_pass.h in Headers */,
-				A9415BEC243667F800566F16 /* def_use_manager.h in Headers */,
-				A9415B76243667F800566F16 /* compact_ids_pass.h in Headers */,
-				A9415C1E243667F800566F16 /* strength_reduction_pass.h in Headers */,
-				A9415AA6243667F700566F16 /* timer.h in Headers */,
-				A9415E80243667F900566F16 /* instruction.h in Headers */,
-				A9415BF6243667F800566F16 /* local_redundancy_elimination.h in Headers */,
-				A9415C12243667F800566F16 /* decoration_manager.h in Headers */,
-				A9415C9E243667F800566F16 /* strip_reflect_info_pass.h in Headers */,
-				A9415B5C243667F800566F16 /* print.h in Headers */,
-				A9415BA4243667F800566F16 /* instruction_list.h in Headers */,
-				A9415B2A243667F800566F16 /* pch_source.h in Headers */,
-				A9415C8A243667F800566F16 /* dead_branch_elim_pass.h in Headers */,
-				A9415B24243667F700566F16 /* latest_version_opencl_std_header.h in Headers */,
-				A9415BA2243667F800566F16 /* propagator.h in Headers */,
-				A9415BE4243667F800566F16 /* private_to_local_pass.h in Headers */,
-				A9415EC6243667F900566F16 /* validate_scopes.h in Headers */,
-				A9415C8E243667F800566F16 /* scalar_analysis_nodes.h in Headers */,
-				A9415BFE243667F800566F16 /* block_merge_util.h in Headers */,
-				A9415CDE243667F800566F16 /* vector_dce.h in Headers */,
-				A9415C74243667F800566F16 /* ssa_rewrite_pass.h in Headers */,
-				A9415B42243667F800566F16 /* spirv_validator_options.h in Headers */,
-				A9415B64243667F800566F16 /* if_conversion.h in Headers */,
-				A9415B46243667F800566F16 /* text_handler.h in Headers */,
-				A9415B10243667F700566F16 /* reduction_opportunity_finder.h in Headers */,
-				A9415AB4243667F700566F16 /* ilist.h in Headers */,
-				A9415B12243667F700566F16 /* change_operand_reduction_opportunity.h in Headers */,
-				A9415B7C243667F800566F16 /* graphics_robust_access_pass.h in Headers */,
-				A9415E8A243667F900566F16 /* extensions.h in Headers */,
-				A9415CA8243667F800566F16 /* reflect.h in Headers */,
-				A9415CE8243667F800566F16 /* iterator.h in Headers */,
-				A9415B06243667F700566F16 /* reducer.h in Headers */,
-				A9415C92243667F800566F16 /* fix_storage_class.h in Headers */,
-				A9415AA2243667F700566F16 /* small_vector.h in Headers */,
-				A9415CEC243667F800566F16 /* build_module.h in Headers */,
-				A9415AF2243667F700566F16 /* remove_selection_reduction_opportunity_finder.h in Headers */,
-				A9415B3E243667F800566F16 /* spirv_constant.h in Headers */,
-				A9415AAE243667F700566F16 /* hex_float.h in Headers */,
-				A9415CF2243667F800566F16 /* decompose_initialized_variables_pass.h in Headers */,
-				A9415C0E243667F800566F16 /* wrap_opkill.h in Headers */,
-				A9415A94243667F700566F16 /* text.h in Headers */,
-				A9415BF0243667F800566F16 /* cfg_cleanup_pass.h in Headers */,
-				A9415BCC243667F800566F16 /* fold_spec_constant_op_and_composite_pass.h in Headers */,
-				A9415AF4243667F700566F16 /* merge_blocks_reduction_opportunity_finder.h in Headers */,
-				A9415B22243667F700566F16 /* reduction_pass.h in Headers */,
-				A9415C84243667F800566F16 /* eliminate_dead_functions_util.h in Headers */,
-				A9415B80243667F800566F16 /* legalize_vector_shuffle_pass.h in Headers */,
-				A9415E78243667F900566F16 /* ext_inst.h in Headers */,
-				A9415AA0243667F700566F16 /* string_utils.h in Headers */,
-				A9415EE0243667F900566F16 /* instruction.h in Headers */,
-				A9415C06243667F800566F16 /* loop_fusion_pass.h in Headers */,
-				A9415C48243667F800566F16 /* loop_dependence.h in Headers */,
-				A9415AC0243667F700566F16 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */,
-				A9415C5C243667F800566F16 /* upgrade_memory_model.h in Headers */,
-				A9415A9A243667F700566F16 /* parse_number.h in Headers */,
-				A9415ADE243667F700566F16 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */,
-				A9415CC6243667F800566F16 /* module.h in Headers */,
-				A9415C36243667F800566F16 /* mem_pass.h in Headers */,
-				A9415B36243667F800566F16 /* spirv_definition.h in Headers */,
-				A9415CB2243667F800566F16 /* scalar_replacement_pass.h in Headers */,
-				A9415B28243667F800566F16 /* cfa.h in Headers */,
-				A9415B3C243667F800566F16 /* macro.h in Headers */,
-				A9415C24243667F800566F16 /* inst_debug_printf_pass.h in Headers */,
-				A9415AE6243667F700566F16 /* remove_function_reduction_opportunity.h in Headers */,
-				A9415B98243667F800566F16 /* replace_invalid_opc.h in Headers */,
-				A9415B84243667F800566F16 /* reduce_load_size.h in Headers */,
-				A9415C4A243667F800566F16 /* value_number_table.h in Headers */,
-				A9415C7C243667F800566F16 /* dominator_analysis.h in Headers */,
-				A9415D02243667F800566F16 /* dominator_tree.h in Headers */,
-				A9415A8A243667F700566F16 /* spirv_fuzzer_options.h in Headers */,
-				A9415C52243667F800566F16 /* constants.h in Headers */,
-				A9415C66243667F800566F16 /* workaround1209.h in Headers */,
-				A9415CE2243667F800566F16 /* pass_manager.h in Headers */,
-				A9415C64243667F800566F16 /* loop_fission.h in Headers */,
-				A9415B74243667F800566F16 /* composite.h in Headers */,
-				A9415EF2243667F900566F16 /* decoration.h in Headers */,
-				A9415B18243667F700566F16 /* reduction_util.h in Headers */,
-				A9415CB6243667F800566F16 /* pch_source_opt.h in Headers */,
-				A9415BD6243667F800566F16 /* block_merge_pass.h in Headers */,
-				A9415CD0243667F800566F16 /* cfg.h in Headers */,
-				A9415C78243667F800566F16 /* dead_variable_elimination.h in Headers */,
-				A9415C30243667F800566F16 /* freeze_spec_constant_value_pass.h in Headers */,
-				A9415CD2243667F800566F16 /* code_sink.h in Headers */,
-				A9415BFA243667F800566F16 /* loop_peeling.h in Headers */,
-				A9415ECA243667F900566F16 /* validate_memory_semantics.h in Headers */,
-				A9415B00243667F700566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */,
-				A9415A9C243667F700566F16 /* ilist_node.h in Headers */,
-				A9415C2C243667F800566F16 /* dead_insert_elim_pass.h in Headers */,
-				A9415A8E243667F700566F16 /* enum_set.h in Headers */,
-				A9415AC6243667F700566F16 /* operand_to_const_reduction_opportunity_finder.h in Headers */,
-				A9415D00243667F800566F16 /* set_spec_constant_default_value_pass.h in Headers */,
-				A9415C50243667F800566F16 /* inline_exhaustive_pass.h in Headers */,
-				A9415C18243667F800566F16 /* local_single_block_elim_pass.h in Headers */,
-				A9415B6A243667F800566F16 /* merge_return_pass.h in Headers */,
-				A9415C02243667F800566F16 /* desc_sroa.h in Headers */,
-				A9415BAE243667F800566F16 /* amd_ext_to_khr.h in Headers */,
-				A9415BE8243667F800566F16 /* relax_float_ops_pass.h in Headers */,
-				A9415CAC243667F800566F16 /* null_pass.h in Headers */,
-				A9415B9A243667F800566F16 /* local_access_chain_convert_pass.h in Headers */,
-				A9415AEC243667F700566F16 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */,
-				A9415E7C243667F900566F16 /* latest_version_spirv_header.h in Headers */,
-				A9415CA4243667F800566F16 /* remove_duplicates_pass.h in Headers */,
-				A9415AE8243667F700566F16 /* change_operand_to_undef_reduction_opportunity.h in Headers */,
-				A9415CCE243667F800566F16 /* loop_unswitch_pass.h in Headers */,
-				A9415BE6243667F800566F16 /* convert_to_half_pass.h in Headers */,
-				A9415C86243667F800566F16 /* fold.h in Headers */,
-				A9415E88243667F900566F16 /* latest_version_glsl_std_450_header.h in Headers */,
-				A9415B78243667F800566F16 /* register_pressure.h in Headers */,
-				A9415B6C243667F800566F16 /* inline_opaque_pass.h in Headers */,
-				A9415C7E243667F800566F16 /* pass.h in Headers */,
-				A9415AAA243667F700566F16 /* bit_vector.h in Headers */,
-				A9415C6A243667F800566F16 /* log.h in Headers */,
-				A9415B48243667F800566F16 /* parsed_operand.h in Headers */,
-				A9415CF4243667F800566F16 /* function.h in Headers */,
-				A9415E84243667F900566F16 /* opcode.h in Headers */,
-				A9415BBC243667F800566F16 /* loop_unroller.h in Headers */,
+				A9765F3C2485758600FDD115 /* types.h in Headers */,
+				A97660562485758600FDD115 /* combine_access_chains.h in Headers */,
+				A9765E542485758600FDD115 /* remove_unused_instruction_reduction_opportunity_finder.h in Headers */,
+				A9765FE22485758600FDD115 /* split_invalid_unreachable_pass.h in Headers */,
+				A9765F482485758600FDD115 /* block_merge_pass.h in Headers */,
+				A9765FF62485758600FDD115 /* folding_rules.h in Headers */,
+				A97660482485758600FDD115 /* code_sink.h in Headers */,
+				A9765F7C2485758600FDD115 /* struct_cfg_analysis.h in Headers */,
+				A976607C2485758600FDD115 /* type_manager.h in Headers */,
+				A976604A2485758600FDD115 /* loop_descriptor.h in Headers */,
+				A9765F7A2485758600FDD115 /* loop_fusion_pass.h in Headers */,
+				A9765EAA2485758600FDD115 /* operand.h in Headers */,
+				A9765E842485758600FDD115 /* remove_block_reduction_opportunity_finder.h in Headers */,
+				A9765EAE2485758600FDD115 /* macro.h in Headers */,
+				A9765E802485758600FDD115 /* reduction_opportunity_finder.h in Headers */,
+				A9765F8A2485758600FDD115 /* process_lines_pass.h in Headers */,
+				A9765E9A2485758600FDD115 /* cfa.h in Headers */,
+				A9765EE62485758600FDD115 /* composite.h in Headers */,
+				A9765F822485758600FDD115 /* wrap_opkill.h in Headers */,
+				A97662202485758700FDD115 /* construct.h in Headers */,
+				A9765F722485758600FDD115 /* block_merge_util.h in Headers */,
+				A9765E762485758600FDD115 /* reducer.h in Headers */,
+				A9765E242485758500FDD115 /* operand_to_undef_reduction_opportunity_finder.h in Headers */,
+				A976622A2485758700FDD115 /* basic_block.h in Headers */,
+				A97661FE2485758700FDD115 /* ext_inst.h in Headers */,
+				A9765EEE2485758600FDD115 /* graphics_robust_access_pass.h in Headers */,
+				A97660222485758600FDD115 /* null_pass.h in Headers */,
+				A976601A2485758600FDD115 /* remove_duplicates_pass.h in Headers */,
+				A9765E5E2485758600FDD115 /* remove_selection_reduction_opportunity_finder.h in Headers */,
+				A9765EC22485758600FDD115 /* diagnostic.h in Headers */,
+				A9765E3C2485758500FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */,
+				A97660442485758600FDD115 /* loop_unswitch_pass.h in Headers */,
+				A97660622485758600FDD115 /* build_module.h in Headers */,
+				A9765F862485758600FDD115 /* decoration_manager.h in Headers */,
+				A9765FE02485758600FDD115 /* log.h in Headers */,
+				A9765FA82485758600FDD115 /* instrument_pass.h in Headers */,
+				A9765F142485758600FDD115 /* propagator.h in Headers */,
+				A976620E2485758700FDD115 /* latest_version_glsl_std_450_header.h in Headers */,
+				A97662062485758700FDD115 /* instruction.h in Headers */,
+				A976620A2485758700FDD115 /* opcode.h in Headers */,
+				A9765EBC2485758600FDD115 /* name_mapper.h in Headers */,
+				A9765F362485758600FDD115 /* unify_const_pass.h in Headers */,
+				A9765E4A2485758600FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */,
+				A976606A2485758600FDD115 /* function.h in Headers */,
+				A9765ED22485758600FDD115 /* disassemble.h in Headers */,
+				A9765E162485758500FDD115 /* bitutils.h in Headers */,
+				A9765E202485758500FDD115 /* spirv_target_env.h in Headers */,
+				A976604E2485758600FDD115 /* instruction.h in Headers */,
+				A9765F2E2485758600FDD115 /* loop_unroller.h in Headers */,
+				A9765EFE2485758600FDD115 /* strip_debug_info_pass.h in Headers */,
+				A9765E702485758600FDD115 /* pch_source_reduce.h in Headers */,
+				A9765E082485758500FDD115 /* make_unique.h in Headers */,
+				A9765EA22485758600FDD115 /* spirv_reducer_options.h in Headers */,
+				A9765E3A2485758500FDD115 /* remove_instruction_reduction_opportunity.h in Headers */,
+				A97660042485758600FDD115 /* scalar_analysis_nodes.h in Headers */,
+				A9765E502485758600FDD115 /* structured_loop_to_selection_reduction_opportunity.h in Headers */,
+				A9765FE62485758600FDD115 /* eliminate_dead_constant_pass.h in Headers */,
+				A9765FD22485758600FDD115 /* upgrade_memory_model.h in Headers */,
+				A9765DF62485758500FDD115 /* assembly_grammar.h in Headers */,
+				A97660302485758600FDD115 /* redundancy_elimination.h in Headers */,
+				A9765EB02485758600FDD115 /* spirv_constant.h in Headers */,
+				A9765E282485758500FDD115 /* remove_block_reduction_opportunity.h in Headers */,
+				A97660582485758600FDD115 /* pass_manager.h in Headers */,
+				A9765FF22485758600FDD115 /* dominator_analysis.h in Headers */,
+				A97660082485758600FDD115 /* fix_storage_class.h in Headers */,
+				A9765F5C2485758600FDD115 /* relax_float_ops_pass.h in Headers */,
+				A9765FDA2485758600FDD115 /* loop_fission.h in Headers */,
+				A9765F422485758600FDD115 /* basic_block.h in Headers */,
+				A97660642485758600FDD115 /* ccp_pass.h in Headers */,
+				A9765EF42485758600FDD115 /* local_single_store_elim_pass.h in Headers */,
+				A9765FBE2485758600FDD115 /* value_number_table.h in Headers */,
+				A97660182485758600FDD115 /* simplification_pass.h in Headers */,
+				A976603A2485758600FDD115 /* loop_utils.h in Headers */,
+				A9765F6A2485758600FDD115 /* local_redundancy_elimination.h in Headers */,
+				A9765F982485758600FDD115 /* inst_debug_printf_pass.h in Headers */,
+				A97660722485758600FDD115 /* inst_bindless_check_pass.h in Headers */,
+				A97660682485758600FDD115 /* decompose_initialized_variables_pass.h in Headers */,
+				A9765E482485758600FDD115 /* remove_struct_member_reduction_opportunity.h in Headers */,
+				A9765EFC2485758600FDD115 /* scalar_analysis.h in Headers */,
+				A9765F3E2485758600FDD115 /* fold_spec_constant_op_and_composite_pass.h in Headers */,
+				A97660762485758600FDD115 /* set_spec_constant_default_value_pass.h in Headers */,
+				A976624C2485758700FDD115 /* validate_scopes.h in Headers */,
+				A97660602485758600FDD115 /* licm_pass.h in Headers */,
+				A9765FDC2485758600FDD115 /* workaround1209.h in Headers */,
+				A9765E942485758600FDD115 /* reduction_pass.h in Headers */,
+				A97660262485758600FDD115 /* const_folding_rules.h in Headers */,
+				A9765F582485758600FDD115 /* private_to_local_pass.h in Headers */,
+				A9765E602485758600FDD115 /* merge_blocks_reduction_opportunity_finder.h in Headers */,
+				A9765EF22485758600FDD115 /* legalize_vector_shuffle_pass.h in Headers */,
+				A9765E962485758600FDD115 /* latest_version_opencl_std_header.h in Headers */,
+				A9765EB82485758600FDD115 /* text_handler.h in Headers */,
+				A9765FEA2485758600FDD115 /* ssa_rewrite_pass.h in Headers */,
+				A9765E362485758500FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */,
+				A9765FC82485758600FDD115 /* constants.h in Headers */,
+				A976605E2485758600FDD115 /* iterator.h in Headers */,
+				A9765F162485758600FDD115 /* instruction_list.h in Headers */,
+				A9765FF42485758600FDD115 /* pass.h in Headers */,
+				A9765EEC2485758600FDD115 /* tree_iterator.h in Headers */,
+				A9765F382485758600FDD115 /* ir_loader.h in Headers */,
+				A97660422485758600FDD115 /* ir_builder.h in Headers */,
+				A9765E662485758600FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.h in Headers */,
+				A9765F902485758600FDD115 /* inst_buff_addr_check_pass.h in Headers */,
+				A97662022485758700FDD115 /* latest_version_spirv_header.h in Headers */,
+				A9765E522485758600FDD115 /* remove_function_reduction_opportunity.h in Headers */,
+				A97660282485758600FDD115 /* scalar_replacement_pass.h in Headers */,
+				A9765E102485758500FDD115 /* timer.h in Headers */,
+				A9765E1E2485758500FDD115 /* ilist.h in Headers */,
+				A97662082485758700FDD115 /* spirv_optimizer_options.h in Headers */,
+				A97662382485758700FDD115 /* validation_state.h in Headers */,
+				A9765E0C2485758500FDD115 /* small_vector.h in Headers */,
+				A97662702485758700FDD115 /* function.h in Headers */,
+				A9765EDC2485758600FDD115 /* merge_return_pass.h in Headers */,
+				A9765E882485758600FDD115 /* reduction_util.h in Headers */,
+				A9765E182485758500FDD115 /* hex_float.h in Headers */,
+				A97662442485758700FDD115 /* validate.h in Headers */,
+				A976601E2485758600FDD115 /* reflect.h in Headers */,
+				A9765F602485758600FDD115 /* def_use_manager.h in Headers */,
+				A9765E562485758600FDD115 /* change_operand_to_undef_reduction_opportunity.h in Headers */,
+				A9765FBA2485758600FDD115 /* inline_pass.h in Headers */,
+				A9765F762485758600FDD115 /* desc_sroa.h in Headers */,
+				A9765E8A2485758600FDD115 /* merge_blocks_reduction_opportunity.h in Headers */,
+				A9765F8C2485758600FDD115 /* local_single_block_elim_pass.h in Headers */,
+				A9765E5A2485758600FDD115 /* remove_selection_reduction_opportunity.h in Headers */,
+				A9765FA02485758600FDD115 /* dead_insert_elim_pass.h in Headers */,
+				A9765FE42485758600FDD115 /* copy_prop_arrays.h in Headers */,
+				A97660502485758600FDD115 /* aggressive_dead_code_elim_pass.h in Headers */,
+				A9765FAE2485758600FDD115 /* eliminate_dead_members_pass.h in Headers */,
+				A97662782485758700FDD115 /* decoration.h in Headers */,
+				A9765EDE2485758600FDD115 /* inline_opaque_pass.h in Headers */,
+				A9765E9C2485758600FDD115 /* pch_source.h in Headers */,
+				A9765E9E2485758600FDD115 /* enum_string_mapping.h in Headers */,
+				A9765DFE2485758500FDD115 /* text.h in Headers */,
+				A976603C2485758600FDD115 /* module.h in Headers */,
+				A9765F6E2485758600FDD115 /* loop_peeling.h in Headers */,
+				A976602C2485758600FDD115 /* pch_source_opt.h in Headers */,
+				A97660462485758600FDD115 /* cfg.h in Headers */,
+				A9765FBC2485758600FDD115 /* loop_dependence.h in Headers */,
+				A9765E0A2485758500FDD115 /* string_utils.h in Headers */,
+				A9765FEE2485758600FDD115 /* dead_variable_elimination.h in Headers */,
+				A9765EC42485758600FDD115 /* spirv_endian.h in Headers */,
+				A9765EE02485758600FDD115 /* loop_fusion.h in Headers */,
+				A9765F4C2485758600FDD115 /* debug_info_manager.h in Headers */,
+				A97660822485758600FDD115 /* table.h in Headers */,
+				A9765F922485758600FDD115 /* strength_reduction_pass.h in Headers */,
+				A9765E2A2485758500FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */,
+				A9765E042485758500FDD115 /* parse_number.h in Headers */,
+				A9765DF42485758500FDD115 /* spirv_fuzzer_options.h in Headers */,
+				A976604C2485758600FDD115 /* generate_webgpu_initializers_pass.h in Headers */,
+				A9765E062485758500FDD115 /* ilist_node.h in Headers */,
+				A97660002485758600FDD115 /* dead_branch_elim_pass.h in Headers */,
+				A9765E582485758600FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */,
+				A9765F642485758600FDD115 /* cfg_cleanup_pass.h in Headers */,
+				A976600E2485758600FDD115 /* passes.h in Headers */,
+				A97660782485758600FDD115 /* dominator_tree.h in Headers */,
+				A9765F5A2485758600FDD115 /* convert_to_half_pass.h in Headers */,
+				A9765FA42485758600FDD115 /* freeze_spec_constant_value_pass.h in Headers */,
+				A9765EEA2485758600FDD115 /* register_pressure.h in Headers */,
+				A9765EB42485758600FDD115 /* spirv_validator_options.h in Headers */,
+				A9765EA82485758600FDD115 /* spirv_definition.h in Headers */,
+				A9765E6E2485758600FDD115 /* remove_function_reduction_opportunity_finder.h in Headers */,
+				A97662662485758700FDD115 /* instruction.h in Headers */,
+				A9765FF82485758600FDD115 /* eliminate_dead_functions_pass.h in Headers */,
+				A97662502485758700FDD115 /* validate_memory_semantics.h in Headers */,
+				A9765EE82485758600FDD115 /* compact_ids_pass.h in Headers */,
+				A9765E822485758600FDD115 /* change_operand_reduction_opportunity.h in Headers */,
+				A9765FFC2485758600FDD115 /* fold.h in Headers */,
+				A9765E7A2485758600FDD115 /* reduction_opportunity.h in Headers */,
+				A97660142485758600FDD115 /* strip_reflect_info_pass.h in Headers */,
+				A97662102485758700FDD115 /* extensions.h in Headers */,
+				A97660542485758600FDD115 /* vector_dce.h in Headers */,
+				A9765F0C2485758600FDD115 /* local_access_chain_convert_pass.h in Headers */,
+				A9765ECE2485758600FDD115 /* print.h in Headers */,
+				A9765DF82485758500FDD115 /* enum_set.h in Headers */,
+				A9765FC02485758600FDD115 /* flatten_decoration_pass.h in Headers */,
+				A9765FAA2485758600FDD115 /* mem_pass.h in Headers */,
+				A97662142485758700FDD115 /* binary.h in Headers */,
+				A9765ED62485758600FDD115 /* if_conversion.h in Headers */,
+				A9765EF02485758600FDD115 /* strip_atomic_counter_memory_pass.h in Headers */,
+				A9765E302485758500FDD115 /* operand_to_const_reduction_opportunity_finder.h in Headers */,
+				A9765EBA2485758600FDD115 /* parsed_operand.h in Headers */,
+				A9765E142485758500FDD115 /* bit_vector.h in Headers */,
+				A97660702485758600FDD115 /* feature_manager.h in Headers */,
+				A9765E7C2485758600FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */,
+				A9765F0A2485758600FDD115 /* replace_invalid_opc.h in Headers */,
+				A9765FC62485758600FDD115 /* inline_exhaustive_pass.h in Headers */,
+				A9765EF62485758600FDD115 /* reduce_load_size.h in Headers */,
+				A9765FFA2485758600FDD115 /* eliminate_dead_functions_util.h in Headers */,
+				A9765F202485758600FDD115 /* amd_ext_to_khr.h in Headers */,
+				A9765F242485758600FDD115 /* ir_context.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2980,7 +3010,7 @@
 		A9F55D25198BE6A7004EC31B /* Project object */ = {
 			isa = PBXProject;
 			attributes = {
-				LastUpgradeCheck = 1140;
+				LastUpgradeCheck = 1150;
 				ORGANIZATIONNAME = "The Brenwill Workshop Ltd.";
 				TargetAttributes = {
 					A972A7E421CEC72F0013AB25 = {
@@ -3101,205 +3131,208 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A9415C31243667F800566F16 /* ir_context.cpp in Sources */,
-				A9415BF7243667F800566F16 /* split_invalid_unreachable_pass.cpp in Sources */,
-				A9415C67243667F800566F16 /* loop_fusion_pass.cpp in Sources */,
-				A9415C9B243667F800566F16 /* amd_ext_to_khr.cpp in Sources */,
-				A9415EC7243667F900566F16 /* validate_id.cpp in Sources */,
-				A9415B9D243667F800566F16 /* local_redundancy_elimination.cpp in Sources */,
-				A9415ECD243667F900566F16 /* validate_mode_setting.cpp in Sources */,
-				A9415E91243667F900566F16 /* validate_annotation.cpp in Sources */,
-				A9415B4D243667F800566F16 /* parsed_operand.cpp in Sources */,
-				A9415BB5243667F800566F16 /* cfg_cleanup_pass.cpp in Sources */,
-				A9415C95243667F800566F16 /* set_spec_constant_default_value_pass.cpp in Sources */,
-				A9415C55243667F800566F16 /* strength_reduction_pass.cpp in Sources */,
-				A9415B8F243667F800566F16 /* strip_atomic_counter_memory_pass.cpp in Sources */,
-				A9415EA7243667F900566F16 /* validate_decorations.cpp in Sources */,
-				A9415AF7243667F700566F16 /* reducer.cpp in Sources */,
-				A9415C5D243667F800566F16 /* copy_prop_arrays.cpp in Sources */,
-				A9415ECF243667F900566F16 /* validate_memory_semantics.cpp in Sources */,
-				A9415C43243667F800566F16 /* process_lines_pass.cpp in Sources */,
-				A9415BFF243667F800566F16 /* loop_unroller.cpp in Sources */,
-				A9415BC1243667F800566F16 /* loop_dependence.cpp in Sources */,
-				A9415AD3243667F700566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */,
-				A9415B95243667F800566F16 /* freeze_spec_constant_value_pass.cpp in Sources */,
-				A9415BA5243667F800566F16 /* feature_manager.cpp in Sources */,
-				A9415BFB243667F800566F16 /* vector_dce.cpp in Sources */,
-				A9415E7D243667F900566F16 /* libspirv.cpp in Sources */,
-				A9415B15243667F700566F16 /* remove_block_reduction_opportunity_finder.cpp in Sources */,
-				A9415D03243667F800566F16 /* legalize_vector_shuffle_pass.cpp in Sources */,
-				A9415EE1243667F900566F16 /* validate_execution_limitations.cpp in Sources */,
-				A9415E79243667F900566F16 /* diagnostic.cpp in Sources */,
-				A9415BCD243667F800566F16 /* mem_pass.cpp in Sources */,
-				A9415C5F243667F800566F16 /* pass_manager.cpp in Sources */,
-				A9415B91243667F800566F16 /* decoration_manager.cpp in Sources */,
-				A9415C8B243667F800566F16 /* private_to_local_pass.cpp in Sources */,
-				A9415C13243667F800566F16 /* ccp_pass.cpp in Sources */,
-				A9415CBF243667F800566F16 /* inline_opaque_pass.cpp in Sources */,
-				A9415BA7243667F800566F16 /* pass.cpp in Sources */,
-				A9415D07243667F800566F16 /* compact_ids_pass.cpp in Sources */,
-				A9415BBF243667F800566F16 /* ssa_rewrite_pass.cpp in Sources */,
-				A9415AEF243667F700566F16 /* remove_instruction_reduction_opportunity.cpp in Sources */,
-				A9415BAF243667F800566F16 /* merge_return_pass.cpp in Sources */,
-				A9415BB7243667F800566F16 /* wrap_opkill.cpp in Sources */,
-				A9415B5D243667F800566F16 /* ext_inst.cpp in Sources */,
-				A9415C25243667F800566F16 /* simplification_pass.cpp in Sources */,
-				A9415B1D243667F700566F16 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */,
-				A9415A8F243667F700566F16 /* text.cpp in Sources */,
-				A9415EBF243667F900566F16 /* validate_adjacency.cpp in Sources */,
-				A9415C3F243667F800566F16 /* composite.cpp in Sources */,
-				A9415BD9243667F800566F16 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */,
-				A9415B55243667F800566F16 /* linker.cpp in Sources */,
-				A9415B4B243667F800566F16 /* spirv_reducer_options.cpp in Sources */,
-				A9415B67243667F800566F16 /* loop_utils.cpp in Sources */,
-				A9415A97243667F700566F16 /* pch_source.cpp in Sources */,
-				A9415C1F243667F800566F16 /* aggressive_dead_code_elim_pass.cpp in Sources */,
-				A9415CB3243667F800566F16 /* instruction.cpp in Sources */,
-				A9415CC9243667F800566F16 /* decompose_initialized_variables_pass.cpp in Sources */,
-				A9415B2D243667F800566F16 /* spirv_fuzzer_options.cpp in Sources */,
-				A9415BB3243667F800566F16 /* eliminate_dead_constant_pass.cpp in Sources */,
-				A9415AD5243667F700566F16 /* remove_function_reduction_opportunity.cpp in Sources */,
-				A9415AD9243667F700566F16 /* remove_selection_reduction_opportunity_finder.cpp in Sources */,
-				A9415C93243667F800566F16 /* loop_dependence_helpers.cpp in Sources */,
-				A9415BD1243667F800566F16 /* remove_duplicates_pass.cpp in Sources */,
-				A9415ADB243667F700566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */,
-				A9415ED7243667F900566F16 /* validate_image.cpp in Sources */,
-				A9415AB7243667F700566F16 /* table.cpp in Sources */,
-				A9415CAD243667F800566F16 /* relax_float_ops_pass.cpp in Sources */,
-				A9415B31243667F800566F16 /* spirv_validator_options.cpp in Sources */,
-				A9415BBD243667F800566F16 /* strip_debug_info_pass.cpp in Sources */,
-				A9415ED1243667F900566F16 /* validate_logicals.cpp in Sources */,
-				A9415B0D243667F700566F16 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */,
-				A9415ACD243667F700566F16 /* remove_function_reduction_opportunity_finder.cpp in Sources */,
-				A9415C41243667F800566F16 /* convert_to_half_pass.cpp in Sources */,
-				A9415EE7243667F900566F16 /* validate_function.cpp in Sources */,
-				A9415B33243667F800566F16 /* print.cpp in Sources */,
-				A9415EC3243667F900566F16 /* validate_small_type_uses.cpp in Sources */,
-				A9415A87243667F700566F16 /* spirv_target_env.cpp in Sources */,
-				A9415ABB243667F700566F16 /* remove_selection_reduction_opportunity.cpp in Sources */,
-				A9415C61243667F800566F16 /* inline_exhaustive_pass.cpp in Sources */,
-				A9415BDB243667F800566F16 /* loop_unswitch_pass.cpp in Sources */,
-				A9415BAB243667F800566F16 /* dominator_tree.cpp in Sources */,
-				A9415AA7243667F700566F16 /* string_utils.cpp in Sources */,
-				A9415EE5243667F900566F16 /* basic_block.cpp in Sources */,
-				A9415BF3243667F800566F16 /* eliminate_dead_functions_pass.cpp in Sources */,
-				A9415CA9243667F800566F16 /* workaround1209.cpp in Sources */,
-				A9415ED5243667F900566F16 /* validate_memory.cpp in Sources */,
-				A9415BED243667F800566F16 /* ir_loader.cpp in Sources */,
-				A9415AAF243667F700566F16 /* parse_number.cpp in Sources */,
-				A9415AC7243667F700566F16 /* reduction_util.cpp in Sources */,
-				A9415C8F243667F800566F16 /* propagator.cpp in Sources */,
-				A9415B03243667F700566F16 /* reduction_opportunity.cpp in Sources */,
-				A9415C2D243667F800566F16 /* folding_rules.cpp in Sources */,
-				A9415C53243667F800566F16 /* eliminate_dead_members_pass.cpp in Sources */,
-				A9415BE9243667F800566F16 /* inline_pass.cpp in Sources */,
-				A9415EA9243667F900566F16 /* validate_debug.cpp in Sources */,
-				A9415BD7243667F800566F16 /* module.cpp in Sources */,
-				A9415BD3243667F800566F16 /* dead_variable_elimination.cpp in Sources */,
-				A9415A91243667F700566F16 /* assembly_grammar.cpp in Sources */,
-				A9415C4D243667F800566F16 /* if_conversion.cpp in Sources */,
-				A9415AE1243667F700566F16 /* change_operand_reduction_opportunity.cpp in Sources */,
-				A9415AD7243667F700566F16 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */,
-				A9415E85243667F900566F16 /* operand.cpp in Sources */,
-				A9415BE1243667F800566F16 /* generate_webgpu_initializers_pass.cpp in Sources */,
-				A9415EB7243667F900566F16 /* validate_extensions.cpp in Sources */,
-				A9415C87243667F800566F16 /* local_single_store_elim_pass.cpp in Sources */,
-				A9415C79243667F800566F16 /* block_merge_pass.cpp in Sources */,
-				A9415AE9243667F700566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */,
-				A9415C21243667F800566F16 /* eliminate_dead_functions_util.cpp in Sources */,
-				A9415C59243667F800566F16 /* block_merge_util.cpp in Sources */,
-				A9415CFD243667F800566F16 /* scalar_analysis_simplification.cpp in Sources */,
-				A9415AF5243667F700566F16 /* pch_source_reduce.cpp in Sources */,
-				A9415CB7243667F800566F16 /* reduce_load_size.cpp in Sources */,
-				A9415C09243667F800566F16 /* inst_buff_addr_check_pass.cpp in Sources */,
-				A9415C99243667F800566F16 /* fold.cpp in Sources */,
-				A9415EAB243667F900566F16 /* validate_builtins.cpp in Sources */,
-				A9415C3D243667F800566F16 /* instruction_list.cpp in Sources */,
-				A9415AB1243667F700566F16 /* bit_vector.cpp in Sources */,
-				A9415B93243667F800566F16 /* local_single_block_elim_pass.cpp in Sources */,
-				A9415E8B243667F900566F16 /* disassemble.cpp in Sources */,
-				A9415B3F243667F800566F16 /* binary.cpp in Sources */,
-				A9415B61243667F800566F16 /* optimizer.cpp in Sources */,
-				A9415BB9243667F800566F16 /* const_folding_rules.cpp in Sources */,
-				A9415AF9243667F700566F16 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */,
-				A9415A95243667F700566F16 /* extensions.cpp in Sources */,
-				A9415C3B243667F800566F16 /* function.cpp in Sources */,
-				A9415CE5243667F800566F16 /* basic_block.cpp in Sources */,
-				A9415E95243667F900566F16 /* validate_cfg.cpp in Sources */,
-				A9415B1F243667F700566F16 /* remove_block_reduction_opportunity.cpp in Sources */,
-				A9415C57243667F800566F16 /* desc_sroa.cpp in Sources */,
-				A9415B1B243667F700566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */,
-				A9415C27243667F800566F16 /* dead_branch_elim_pass.cpp in Sources */,
-				A9415CF5243667F800566F16 /* loop_fusion.cpp in Sources */,
-				A9415EBB243667F900566F16 /* function.cpp in Sources */,
-				A9415EB9243667F900566F16 /* construct.cpp in Sources */,
-				A9415B25243667F700566F16 /* spirv_optimizer_options.cpp in Sources */,
-				A9415BF1243667F800566F16 /* licm_pass.cpp in Sources */,
-				A9415EEB243667F900566F16 /* validate_composites.cpp in Sources */,
-				A9415ED3243667F900566F16 /* validate_derivatives.cpp in Sources */,
-				A9415B8D243667F800566F16 /* cfg.cpp in Sources */,
-				A9415C9F243667F800566F16 /* scalar_replacement_pass.cpp in Sources */,
-				A9415E9F243667F900566F16 /* validate_scopes.cpp in Sources */,
-				A9415E93243667F900566F16 /* validate_misc.cpp in Sources */,
-				A9415B57243667F800566F16 /* software_version.cpp in Sources */,
-				A9415E9B243667F900566F16 /* validate_barriers.cpp in Sources */,
-				A9415CEF243667F800566F16 /* graphics_robust_access_pass.cpp in Sources */,
-				A9415B87243667F800566F16 /* types.cpp in Sources */,
-				A9415EAF243667F900566F16 /* validate.cpp in Sources */,
-				A9415BDD243667F800566F16 /* unify_const_pass.cpp in Sources */,
-				A9415EE3243667F900566F16 /* validate_layout.cpp in Sources */,
-				A9415EA5243667F900566F16 /* validate_instruction.cpp in Sources */,
-				A9415EDB243667F900566F16 /* instruction.cpp in Sources */,
-				A9415C19243667F800566F16 /* pch_source_opt.cpp in Sources */,
-				A9415AC9243667F700566F16 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */,
-				A9415CBD243667F800566F16 /* value_number_table.cpp in Sources */,
-				A9415B9B243667F800566F16 /* inst_bindless_check_pass.cpp in Sources */,
-				A9415ED9243667F900566F16 /* validate_literals.cpp in Sources */,
-				A9415ADF243667F700566F16 /* merge_blocks_reduction_opportunity.cpp in Sources */,
-				A9415B6F243667F800566F16 /* combine_access_chains.cpp in Sources */,
-				A9415C0F243667F800566F16 /* strip_reflect_info_pass.cpp in Sources */,
-				A9415E9D243667F900566F16 /* validate_non_uniform.cpp in Sources */,
-				A9415B07243667F700566F16 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */,
-				A9415B71243667F800566F16 /* build_module.cpp in Sources */,
-				A9415EED243667F900566F16 /* validation_state.cpp in Sources */,
-				A9415EDD243667F900566F16 /* validate_type.cpp in Sources */,
-				A9415AC1243667F700566F16 /* reduction_pass.cpp in Sources */,
-				A9415C71243667F800566F16 /* dead_insert_elim_pass.cpp in Sources */,
-				A9415D09243667F800566F16 /* loop_peeling.cpp in Sources */,
-				A9415CF7243667F800566F16 /* upgrade_memory_model.cpp in Sources */,
-				A9415B59243667F800566F16 /* opcode.cpp in Sources */,
-				A9415C29243667F800566F16 /* flatten_decoration_pass.cpp in Sources */,
-				A9415AA3243667F700566F16 /* timer.cpp in Sources */,
-				A9415C75243667F800566F16 /* scalar_analysis.cpp in Sources */,
-				A9415BDF243667F800566F16 /* type_manager.cpp in Sources */,
-				A9415CDB243667F800566F16 /* struct_cfg_analysis.cpp in Sources */,
-				A9415B53243667F800566F16 /* name_mapper.cpp in Sources */,
-				A9415C0B243667F800566F16 /* def_use_manager.cpp in Sources */,
-				A9415B9F243667F800566F16 /* instrument_pass.cpp in Sources */,
-				A9415BA9243667F800566F16 /* loop_fission.cpp in Sources */,
-				A9415B65243667F800566F16 /* register_pressure.cpp in Sources */,
-				A9415C37243667F800566F16 /* loop_descriptor.cpp in Sources */,
-				A9415CC7243667F800566F16 /* dominator_analysis.cpp in Sources */,
-				A9415AC3243667F700566F16 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */,
-				A9415EA1243667F900566F16 /* validate_atomics.cpp in Sources */,
-				A9415BC7243667F800566F16 /* inst_debug_printf_pass.cpp in Sources */,
-				A9415EB5243667F900566F16 /* validate_bitwise.cpp in Sources */,
-				A9415B01243667F700566F16 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */,
-				A9415ECB243667F900566F16 /* validate_arithmetics.cpp in Sources */,
-				A9415E97243667F900566F16 /* validate_capability.cpp in Sources */,
-				A9415EEF243667F900566F16 /* validate_primitives.cpp in Sources */,
-				A9415CE3243667F800566F16 /* local_access_chain_convert_pass.cpp in Sources */,
-				A9415EB3243667F900566F16 /* validate_constants.cpp in Sources */,
-				A9415EAD243667F900566F16 /* validate_interfaces.cpp in Sources */,
-				A9415EC1243667F900566F16 /* validate_conversion.cpp in Sources */,
-				A9415B85243667F800566F16 /* code_sink.cpp in Sources */,
-				A9415CA5243667F800566F16 /* redundancy_elimination.cpp in Sources */,
-				A9415B39243667F800566F16 /* spirv_endian.cpp in Sources */,
-				A9415C03243667F800566F16 /* constants.cpp in Sources */,
-				A9415CC1243667F800566F16 /* replace_invalid_opc.cpp in Sources */,
-				A9415B43243667F800566F16 /* enum_string_mapping.cpp in Sources */,
-				A9415E8F243667F900566F16 /* text_handler.cpp in Sources */,
-				A9415CBB243667F800566F16 /* fix_storage_class.cpp in Sources */,
+				A976626B2485758700FDD115 /* basic_block.cpp in Sources */,
+				A9765EBD2485758600FDD115 /* spirv_reducer_options.cpp in Sources */,
+				A97662252485758700FDD115 /* validate_scopes.cpp in Sources */,
+				A9765F7F2485758600FDD115 /* def_use_manager.cpp in Sources */,
+				A9765FC32485758600FDD115 /* debug_info_manager.cpp in Sources */,
+				A9765F1B2485758600FDD115 /* loop_fission.cpp in Sources */,
+				A9765FDD2485758600FDD115 /* loop_fusion_pass.cpp in Sources */,
+				A97662392485758700FDD115 /* validate_constants.cpp in Sources */,
+				A9765F772485758600FDD115 /* constants.cpp in Sources */,
+				A976600F2485758600FDD115 /* fold.cpp in Sources */,
+				A9765EB12485758600FDD115 /* binary.cpp in Sources */,
+				A9765FAF2485758600FDD115 /* function.cpp in Sources */,
+				A9765E7D2485758600FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */,
+				A9765EF72485758600FDD115 /* code_sink.cpp in Sources */,
+				A9765E3D2485758500FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */,
+				A97662312485758700FDD115 /* validate_builtins.cpp in Sources */,
+				A9765F552485758600FDD115 /* generate_webgpu_initializers_pass.cpp in Sources */,
+				A9765DF92485758500FDD115 /* text.cpp in Sources */,
+				A97660732485758600FDD115 /* scalar_analysis_simplification.cpp in Sources */,
+				A976622D2485758700FDD115 /* validate_decorations.cpp in Sources */,
+				A9765ECB2485758600FDD115 /* opcode.cpp in Sources */,
+				A9765E692485758600FDD115 /* reducer.cpp in Sources */,
+				A97662032485758700FDD115 /* libspirv.cpp in Sources */,
+				A9765F192485758600FDD115 /* pass.cpp in Sources */,
+				A97662192485758700FDD115 /* validate_misc.cpp in Sources */,
+				A97662672485758700FDD115 /* validate_execution_limitations.cpp in Sources */,
+				A9765E012485758500FDD115 /* pch_source.cpp in Sources */,
+				A97660292485758600FDD115 /* instruction.cpp in Sources */,
+				A97662592485758700FDD115 /* validate_derivatives.cpp in Sources */,
+				A9765F212485758600FDD115 /* merge_return_pass.cpp in Sources */,
+				A9765F832485758600FDD115 /* strip_reflect_info_pass.cpp in Sources */,
+				A9765E3F2485758500FDD115 /* remove_function_reduction_opportunity.cpp in Sources */,
+				A97662512485758700FDD115 /* validate_arithmetics.cpp in Sources */,
+				A976603F2485758600FDD115 /* decompose_initialized_variables_pass.cpp in Sources */,
+				A9765F072485758600FDD115 /* freeze_spec_constant_value_pass.cpp in Sources */,
+				A976603D2485758600FDD115 /* dominator_analysis.cpp in Sources */,
+				A97662492485758700FDD115 /* validate_small_type_uses.cpp in Sources */,
+				A9765FEF2485758600FDD115 /* block_merge_pass.cpp in Sources */,
+				A9765E672485758600FDD115 /* remove_unused_instruction_reduction_opportunity_finder.cpp in Sources */,
+				A97660652485758600FDD115 /* graphics_robust_access_pass.cpp in Sources */,
+				A97662732485758700FDD115 /* validation_state.cpp in Sources */,
+				A97660512485758600FDD115 /* struct_cfg_analysis.cpp in Sources */,
+				A9765E432485758500FDD115 /* remove_selection_reduction_opportunity_finder.cpp in Sources */,
+				A9765EFF2485758600FDD115 /* cfg.cpp in Sources */,
+				A9765F7D2485758600FDD115 /* inst_buff_addr_check_pass.cpp in Sources */,
+				A9765E452485758600FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */,
+				A9765E712485758600FDD115 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */,
+				A976621B2485758700FDD115 /* validate_cfg.cpp in Sources */,
+				A9765F992485758600FDD115 /* simplification_pass.cpp in Sources */,
+				A9765E212485758500FDD115 /* table.cpp in Sources */,
+				A9765F292485758600FDD115 /* wrap_opkill.cpp in Sources */,
+				A97662412485758700FDD115 /* function.cpp in Sources */,
+				A9765FB72485758600FDD115 /* process_lines_pass.cpp in Sources */,
+				A97660312485758600FDD115 /* fix_storage_class.cpp in Sources */,
+				A97660372485758600FDD115 /* replace_invalid_opc.cpp in Sources */,
+				A9765F4F2485758600FDD115 /* loop_unswitch_pass.cpp in Sources */,
+				A9765E372485758500FDD115 /* remove_function_reduction_opportunity_finder.cpp in Sources */,
+				A9765FEB2485758600FDD115 /* scalar_analysis.cpp in Sources */,
+				A9765EE32485758600FDD115 /* build_module.cpp in Sources */,
+				A9765F252485758600FDD115 /* eliminate_dead_constant_pass.cpp in Sources */,
+				A9765E772485758600FDD115 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */,
+				A9765ED32485758600FDD115 /* optimizer.cpp in Sources */,
+				A976602D2485758600FDD115 /* reduce_load_size.cpp in Sources */,
+				A9765EC92485758600FDD115 /* software_version.cpp in Sources */,
+				A9765F652485758600FDD115 /* licm_pass.cpp in Sources */,
+				A9765F3F2485758600FDD115 /* mem_pass.cpp in Sources */,
+				A9765F532485758600FDD115 /* type_manager.cpp in Sources */,
+				A9765F112485758600FDD115 /* instrument_pass.cpp in Sources */,
+				A9765F672485758600FDD115 /* eliminate_dead_functions_pass.cpp in Sources */,
+				A976621D2485758700FDD115 /* validate_capability.cpp in Sources */,
+				A976623B2485758700FDD115 /* validate_bitwise.cpp in Sources */,
+				A9765F9B2485758600FDD115 /* dead_branch_elim_pass.cpp in Sources */,
+				A9765E9F2485758600FDD115 /* spirv_fuzzer_options.cpp in Sources */,
+				A976625B2485758700FDD115 /* validate_memory.cpp in Sources */,
+				A97662272485758700FDD115 /* validate_atomics.cpp in Sources */,
+				A9765DF12485758500FDD115 /* spirv_target_env.cpp in Sources */,
+				A97662712485758700FDD115 /* validate_composites.cpp in Sources */,
+				A976622B2485758700FDD115 /* validate_instruction.cpp in Sources */,
+				A97662352485758700FDD115 /* validate.cpp in Sources */,
+				A9765F0D2485758600FDD115 /* inst_bindless_check_pass.cpp in Sources */,
+				A9765ECF2485758600FDD115 /* ext_inst.cpp in Sources */,
+				A97660592485758600FDD115 /* local_access_chain_convert_pass.cpp in Sources */,
+				A9765E252485758500FDD115 /* remove_selection_reduction_opportunity.cpp in Sources */,
+				A97662572485758700FDD115 /* validate_logicals.cpp in Sources */,
+				A97662552485758700FDD115 /* validate_memory_semantics.cpp in Sources */,
+				A9765F312485758600FDD115 /* ssa_rewrite_pass.cpp in Sources */,
+				A976625F2485758700FDD115 /* validate_literals.cpp in Sources */,
+				A976625D2485758700FDD115 /* validate_image.cpp in Sources */,
+				A9765FD72485758600FDD115 /* inline_exhaustive_pass.cpp in Sources */,
+				A9765F272485758600FDD115 /* cfg_cleanup_pass.cpp in Sources */,
+				A9765E112485758500FDD115 /* string_utils.cpp in Sources */,
+				A97660232485758600FDD115 /* relax_float_ops_pass.cpp in Sources */,
+				A9765E732485758600FDD115 /* reduction_opportunity.cpp in Sources */,
+				A97662472485758700FDD115 /* validate_conversion.cpp in Sources */,
+				A9765F052485758600FDD115 /* local_single_block_elim_pass.cpp in Sources */,
+				A9765FB32485758600FDD115 /* composite.cpp in Sources */,
+				A9765F8D2485758600FDD115 /* pch_source_opt.cpp in Sources */,
+				A9765E192485758500FDD115 /* parse_number.cpp in Sources */,
+				A97662632485758700FDD115 /* validate_type.cpp in Sources */,
+				A976624D2485758700FDD115 /* validate_id.cpp in Sources */,
+				A9765E312485758500FDD115 /* reduction_util.cpp in Sources */,
+				A9765F2B2485758600FDD115 /* const_folding_rules.cpp in Sources */,
+				A9765F952485758600FDD115 /* eliminate_dead_functions_util.cpp in Sources */,
+				A9765F452485758600FDD115 /* dead_variable_elimination.cpp in Sources */,
+				A9765E972485758600FDD115 /* spirv_optimizer_options.cpp in Sources */,
+				A9765E6B2485758600FDD115 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */,
+				A97662232485758700FDD115 /* validate_non_uniform.cpp in Sources */,
+				A97662692485758700FDD115 /* validate_layout.cpp in Sources */,
+				A976605B2485758600FDD115 /* basic_block.cpp in Sources */,
+				A976626D2485758700FDD115 /* validate_function.cpp in Sources */,
+				A9765DFB2485758500FDD115 /* assembly_grammar.cpp in Sources */,
+				A97662152485758700FDD115 /* text_handler.cpp in Sources */,
+				A9765F512485758600FDD115 /* unify_const_pass.cpp in Sources */,
+				A9765ED92485758600FDD115 /* loop_utils.cpp in Sources */,
+				A97660012485758600FDD115 /* private_to_local_pass.cpp in Sources */,
+				A97662212485758700FDD115 /* validate_barriers.cpp in Sources */,
+				A97662172485758700FDD115 /* validate_annotation.cpp in Sources */,
+				A9765F032485758600FDD115 /* decoration_manager.cpp in Sources */,
+				A9765EA32485758600FDD115 /* spirv_validator_options.cpp in Sources */,
+				A9765F4D2485758600FDD115 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */,
+				A9765E8F2485758600FDD115 /* remove_block_reduction_opportunity.cpp in Sources */,
+				A9765FC92485758600FDD115 /* eliminate_dead_members_pass.cpp in Sources */,
+				A9765FB12485758600FDD115 /* instruction_list.cpp in Sources */,
+				A9765E4D2485758600FDD115 /* change_operand_reduction_opportunity.cpp in Sources */,
+				A9765F432485758600FDD115 /* remove_duplicates_pass.cpp in Sources */,
+				A9765FCD2485758600FDD115 /* desc_sroa.cpp in Sources */,
+				A9765E8B2485758600FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */,
+				A9765F012485758600FDD115 /* strip_atomic_counter_memory_pass.cpp in Sources */,
+				A9765E912485758600FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.cpp in Sources */,
+				A9765FCF2485758600FDD115 /* block_merge_util.cpp in Sources */,
+				A9765E612485758600FDD115 /* pch_source_reduce.cpp in Sources */,
+				A976607D2485758600FDD115 /* compact_ids_pass.cpp in Sources */,
+				A9765E412485758500FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */,
+				A9765E1B2485758500FDD115 /* bit_vector.cpp in Sources */,
+				A976623D2485758700FDD115 /* validate_extensions.cpp in Sources */,
+				A9765F332485758600FDD115 /* loop_dependence.cpp in Sources */,
+				A97661FF2485758700FDD115 /* diagnostic.cpp in Sources */,
+				A9765FE72485758600FDD115 /* dead_insert_elim_pass.cpp in Sources */,
+				A976600B2485758600FDD115 /* set_spec_constant_default_value_pass.cpp in Sources */,
+				A9765DFF2485758500FDD115 /* extensions.cpp in Sources */,
+				A9765FB52485758600FDD115 /* convert_to_half_pass.cpp in Sources */,
+				A9765E332485758500FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */,
+				A9765FD32485758600FDD115 /* copy_prop_arrays.cpp in Sources */,
+				A9765EBF2485758600FDD115 /* parsed_operand.cpp in Sources */,
+				A9765E632485758600FDD115 /* remove_struct_member_reduction_opportunity.cpp in Sources */,
+				A97662752485758700FDD115 /* validate_primitives.cpp in Sources */,
+				A9765EC52485758600FDD115 /* name_mapper.cpp in Sources */,
+				A9765FCB2485758600FDD115 /* strength_reduction_pass.cpp in Sources */,
+				A9765EAB2485758600FDD115 /* spirv_endian.cpp in Sources */,
+				A97662452485758700FDD115 /* validate_adjacency.cpp in Sources */,
+				A976622F2485758700FDD115 /* validate_debug.cpp in Sources */,
+				A9765F9D2485758600FDD115 /* flatten_decoration_pass.cpp in Sources */,
+				A9765F6B2485758600FDD115 /* split_invalid_unreachable_pass.cpp in Sources */,
+				A976601F2485758600FDD115 /* workaround1209.cpp in Sources */,
+				A976606D2485758600FDD115 /* upgrade_memory_model.cpp in Sources */,
+				A9765F0F2485758600FDD115 /* local_redundancy_elimination.cpp in Sources */,
+				A97660112485758600FDD115 /* amd_ext_to_khr.cpp in Sources */,
+				A9765F172485758600FDD115 /* feature_manager.cpp in Sources */,
+				A9765FA52485758600FDD115 /* ir_context.cpp in Sources */,
+				A9765FD52485758600FDD115 /* pass_manager.cpp in Sources */,
+				A976623F2485758700FDD115 /* construct.cpp in Sources */,
+				A9765E4B2485758600FDD115 /* merge_blocks_reduction_opportunity.cpp in Sources */,
+				A976607F2485758600FDD115 /* loop_peeling.cpp in Sources */,
+				A97660052485758600FDD115 /* propagator.cpp in Sources */,
+				A97662532485758700FDD115 /* validate_mode_setting.cpp in Sources */,
+				A9765F2F2485758600FDD115 /* strip_debug_info_pass.cpp in Sources */,
+				A9765F492485758600FDD115 /* module.cpp in Sources */,
+				A9765FA12485758600FDD115 /* folding_rules.cpp in Sources */,
+				A97660152485758600FDD115 /* scalar_replacement_pass.cpp in Sources */,
+				A9765F732485758600FDD115 /* loop_unroller.cpp in Sources */,
+				A976620B2485758700FDD115 /* operand.cpp in Sources */,
+				A97660352485758600FDD115 /* inline_opaque_pass.cpp in Sources */,
+				A9765EF92485758600FDD115 /* types.cpp in Sources */,
+				A9765EB52485758600FDD115 /* enum_string_mapping.cpp in Sources */,
+				A97660792485758600FDD115 /* legalize_vector_shuffle_pass.cpp in Sources */,
+				A9765EA52485758600FDD115 /* print.cpp in Sources */,
+				A9765F932485758600FDD115 /* aggressive_dead_code_elim_pass.cpp in Sources */,
+				A9765FFD2485758600FDD115 /* local_single_store_elim_pass.cpp in Sources */,
+				A9765F612485758600FDD115 /* ir_loader.cpp in Sources */,
+				A9765E5B2485758600FDD115 /* remove_instruction_reduction_opportunity.cpp in Sources */,
+				A976606B2485758600FDD115 /* loop_fusion.cpp in Sources */,
+				A9765F6F2485758600FDD115 /* vector_dce.cpp in Sources */,
+				A97662612485758700FDD115 /* instruction.cpp in Sources */,
+				A976601B2485758600FDD115 /* redundancy_elimination.cpp in Sources */,
+				A9765FC12485758600FDD115 /* if_conversion.cpp in Sources */,
+				A97660092485758600FDD115 /* loop_dependence_helpers.cpp in Sources */,
+				A9765F5D2485758600FDD115 /* inline_pass.cpp in Sources */,
+				A9765F1D2485758600FDD115 /* dominator_tree.cpp in Sources */,
+				A97662112485758700FDD115 /* disassemble.cpp in Sources */,
+				A9765F392485758600FDD115 /* inst_debug_printf_pass.cpp in Sources */,
+				A9765F872485758600FDD115 /* ccp_pass.cpp in Sources */,
+				A9765ED72485758600FDD115 /* register_pressure.cpp in Sources */,
+				A9765EC72485758600FDD115 /* linker.cpp in Sources */,
+				A9765E2B2485758500FDD115 /* reduction_pass.cpp in Sources */,
+				A9765E8D2485758600FDD115 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */,
+				A9765E0D2485758500FDD115 /* timer.cpp in Sources */,
+				A97662332485758700FDD115 /* validate_interfaces.cpp in Sources */,
+				A97660332485758600FDD115 /* value_number_table.cpp in Sources */,
+				A9765FAB2485758600FDD115 /* loop_descriptor.cpp in Sources */,
+				A9765EE12485758600FDD115 /* combine_access_chains.cpp in Sources */,
+				A9765E2D2485758500FDD115 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */,
+				A9765E852485758600FDD115 /* remove_block_reduction_opportunity_finder.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -3307,205 +3340,208 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A9415C32243667F800566F16 /* ir_context.cpp in Sources */,
-				A9415BF8243667F800566F16 /* split_invalid_unreachable_pass.cpp in Sources */,
-				A9415C68243667F800566F16 /* loop_fusion_pass.cpp in Sources */,
-				A9415C9C243667F800566F16 /* amd_ext_to_khr.cpp in Sources */,
-				A9415EC8243667F900566F16 /* validate_id.cpp in Sources */,
-				A9415B9E243667F800566F16 /* local_redundancy_elimination.cpp in Sources */,
-				A9415ECE243667F900566F16 /* validate_mode_setting.cpp in Sources */,
-				A9415E92243667F900566F16 /* validate_annotation.cpp in Sources */,
-				A9415B4E243667F800566F16 /* parsed_operand.cpp in Sources */,
-				A9415BB6243667F800566F16 /* cfg_cleanup_pass.cpp in Sources */,
-				A9415C96243667F800566F16 /* set_spec_constant_default_value_pass.cpp in Sources */,
-				A9415C56243667F800566F16 /* strength_reduction_pass.cpp in Sources */,
-				A9415B90243667F800566F16 /* strip_atomic_counter_memory_pass.cpp in Sources */,
-				A9415EA8243667F900566F16 /* validate_decorations.cpp in Sources */,
-				A9415AF8243667F700566F16 /* reducer.cpp in Sources */,
-				A9415C5E243667F800566F16 /* copy_prop_arrays.cpp in Sources */,
-				A9415ED0243667F900566F16 /* validate_memory_semantics.cpp in Sources */,
-				A9415C44243667F800566F16 /* process_lines_pass.cpp in Sources */,
-				A9415C00243667F800566F16 /* loop_unroller.cpp in Sources */,
-				A9415BC2243667F800566F16 /* loop_dependence.cpp in Sources */,
-				A9415AD4243667F700566F16 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */,
-				A9415B96243667F800566F16 /* freeze_spec_constant_value_pass.cpp in Sources */,
-				A9415BA6243667F800566F16 /* feature_manager.cpp in Sources */,
-				A9415BFC243667F800566F16 /* vector_dce.cpp in Sources */,
-				A9415E7E243667F900566F16 /* libspirv.cpp in Sources */,
-				A9415B16243667F700566F16 /* remove_block_reduction_opportunity_finder.cpp in Sources */,
-				A9415D04243667F800566F16 /* legalize_vector_shuffle_pass.cpp in Sources */,
-				A9415EE2243667F900566F16 /* validate_execution_limitations.cpp in Sources */,
-				A9415E7A243667F900566F16 /* diagnostic.cpp in Sources */,
-				A9415BCE243667F800566F16 /* mem_pass.cpp in Sources */,
-				A9415C60243667F800566F16 /* pass_manager.cpp in Sources */,
-				A9415B92243667F800566F16 /* decoration_manager.cpp in Sources */,
-				A9415C8C243667F800566F16 /* private_to_local_pass.cpp in Sources */,
-				A9415C14243667F800566F16 /* ccp_pass.cpp in Sources */,
-				A9415CC0243667F800566F16 /* inline_opaque_pass.cpp in Sources */,
-				A9415BA8243667F800566F16 /* pass.cpp in Sources */,
-				A9415D08243667F800566F16 /* compact_ids_pass.cpp in Sources */,
-				A9415BC0243667F800566F16 /* ssa_rewrite_pass.cpp in Sources */,
-				A9415AF0243667F700566F16 /* remove_instruction_reduction_opportunity.cpp in Sources */,
-				A9415BB0243667F800566F16 /* merge_return_pass.cpp in Sources */,
-				A9415BB8243667F800566F16 /* wrap_opkill.cpp in Sources */,
-				A9415B5E243667F800566F16 /* ext_inst.cpp in Sources */,
-				A9415C26243667F800566F16 /* simplification_pass.cpp in Sources */,
-				A9415B1E243667F700566F16 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */,
-				A9415A90243667F700566F16 /* text.cpp in Sources */,
-				A9415EC0243667F900566F16 /* validate_adjacency.cpp in Sources */,
-				A9415C40243667F800566F16 /* composite.cpp in Sources */,
-				A9415BDA243667F800566F16 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */,
-				A9415B56243667F800566F16 /* linker.cpp in Sources */,
-				A9415B4C243667F800566F16 /* spirv_reducer_options.cpp in Sources */,
-				A9415B68243667F800566F16 /* loop_utils.cpp in Sources */,
-				A9415A98243667F700566F16 /* pch_source.cpp in Sources */,
-				A9415C20243667F800566F16 /* aggressive_dead_code_elim_pass.cpp in Sources */,
-				A9415CB4243667F800566F16 /* instruction.cpp in Sources */,
-				A9415CCA243667F800566F16 /* decompose_initialized_variables_pass.cpp in Sources */,
-				A9415B2E243667F800566F16 /* spirv_fuzzer_options.cpp in Sources */,
-				A9415BB4243667F800566F16 /* eliminate_dead_constant_pass.cpp in Sources */,
-				A9415AD6243667F700566F16 /* remove_function_reduction_opportunity.cpp in Sources */,
-				A9415ADA243667F700566F16 /* remove_selection_reduction_opportunity_finder.cpp in Sources */,
-				A9415C94243667F800566F16 /* loop_dependence_helpers.cpp in Sources */,
-				A9415BD2243667F800566F16 /* remove_duplicates_pass.cpp in Sources */,
-				A9415ADC243667F700566F16 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */,
-				A9415ED8243667F900566F16 /* validate_image.cpp in Sources */,
-				A9415AB8243667F700566F16 /* table.cpp in Sources */,
-				A9415CAE243667F800566F16 /* relax_float_ops_pass.cpp in Sources */,
-				A9415B32243667F800566F16 /* spirv_validator_options.cpp in Sources */,
-				A9415BBE243667F800566F16 /* strip_debug_info_pass.cpp in Sources */,
-				A9415ED2243667F900566F16 /* validate_logicals.cpp in Sources */,
-				A9415B0E243667F700566F16 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */,
-				A9415ACE243667F700566F16 /* remove_function_reduction_opportunity_finder.cpp in Sources */,
-				A9415C42243667F800566F16 /* convert_to_half_pass.cpp in Sources */,
-				A9415EE8243667F900566F16 /* validate_function.cpp in Sources */,
-				A9415B34243667F800566F16 /* print.cpp in Sources */,
-				A9415EC4243667F900566F16 /* validate_small_type_uses.cpp in Sources */,
-				A9415A88243667F700566F16 /* spirv_target_env.cpp in Sources */,
-				A9415ABC243667F700566F16 /* remove_selection_reduction_opportunity.cpp in Sources */,
-				A9415C62243667F800566F16 /* inline_exhaustive_pass.cpp in Sources */,
-				A9415BDC243667F800566F16 /* loop_unswitch_pass.cpp in Sources */,
-				A9415BAC243667F800566F16 /* dominator_tree.cpp in Sources */,
-				A9415AA8243667F700566F16 /* string_utils.cpp in Sources */,
-				A9415EE6243667F900566F16 /* basic_block.cpp in Sources */,
-				A9415BF4243667F800566F16 /* eliminate_dead_functions_pass.cpp in Sources */,
-				A9415CAA243667F800566F16 /* workaround1209.cpp in Sources */,
-				A9415ED6243667F900566F16 /* validate_memory.cpp in Sources */,
-				A9415BEE243667F800566F16 /* ir_loader.cpp in Sources */,
-				A9415AB0243667F700566F16 /* parse_number.cpp in Sources */,
-				A9415AC8243667F700566F16 /* reduction_util.cpp in Sources */,
-				A9415C90243667F800566F16 /* propagator.cpp in Sources */,
-				A9415B04243667F700566F16 /* reduction_opportunity.cpp in Sources */,
-				A9415C2E243667F800566F16 /* folding_rules.cpp in Sources */,
-				A9415C54243667F800566F16 /* eliminate_dead_members_pass.cpp in Sources */,
-				A9415BEA243667F800566F16 /* inline_pass.cpp in Sources */,
-				A9415EAA243667F900566F16 /* validate_debug.cpp in Sources */,
-				A9415BD8243667F800566F16 /* module.cpp in Sources */,
-				A9415BD4243667F800566F16 /* dead_variable_elimination.cpp in Sources */,
-				A9415A92243667F700566F16 /* assembly_grammar.cpp in Sources */,
-				A9415C4E243667F800566F16 /* if_conversion.cpp in Sources */,
-				A9415AE2243667F700566F16 /* change_operand_reduction_opportunity.cpp in Sources */,
-				A9415AD8243667F700566F16 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */,
-				A9415E86243667F900566F16 /* operand.cpp in Sources */,
-				A9415BE2243667F800566F16 /* generate_webgpu_initializers_pass.cpp in Sources */,
-				A9415EB8243667F900566F16 /* validate_extensions.cpp in Sources */,
-				A9415C88243667F800566F16 /* local_single_store_elim_pass.cpp in Sources */,
-				A9415C7A243667F800566F16 /* block_merge_pass.cpp in Sources */,
-				A9415AEA243667F700566F16 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */,
-				A9415C22243667F800566F16 /* eliminate_dead_functions_util.cpp in Sources */,
-				A9415C5A243667F800566F16 /* block_merge_util.cpp in Sources */,
-				A9415CFE243667F800566F16 /* scalar_analysis_simplification.cpp in Sources */,
-				A9415AF6243667F700566F16 /* pch_source_reduce.cpp in Sources */,
-				A9415CB8243667F800566F16 /* reduce_load_size.cpp in Sources */,
-				A9415C0A243667F800566F16 /* inst_buff_addr_check_pass.cpp in Sources */,
-				A9415C9A243667F800566F16 /* fold.cpp in Sources */,
-				A9415EAC243667F900566F16 /* validate_builtins.cpp in Sources */,
-				A9415C3E243667F800566F16 /* instruction_list.cpp in Sources */,
-				A9415AB2243667F700566F16 /* bit_vector.cpp in Sources */,
-				A9415B94243667F800566F16 /* local_single_block_elim_pass.cpp in Sources */,
-				A9415E8C243667F900566F16 /* disassemble.cpp in Sources */,
-				A9415B40243667F800566F16 /* binary.cpp in Sources */,
-				A9415B62243667F800566F16 /* optimizer.cpp in Sources */,
-				A9415BBA243667F800566F16 /* const_folding_rules.cpp in Sources */,
-				A9415AFA243667F700566F16 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */,
-				A9415A96243667F700566F16 /* extensions.cpp in Sources */,
-				A9415C3C243667F800566F16 /* function.cpp in Sources */,
-				A9415CE6243667F800566F16 /* basic_block.cpp in Sources */,
-				A9415E96243667F900566F16 /* validate_cfg.cpp in Sources */,
-				A9415B20243667F700566F16 /* remove_block_reduction_opportunity.cpp in Sources */,
-				A9415C58243667F800566F16 /* desc_sroa.cpp in Sources */,
-				A9415B1C243667F700566F16 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */,
-				A9415C28243667F800566F16 /* dead_branch_elim_pass.cpp in Sources */,
-				A9415CF6243667F800566F16 /* loop_fusion.cpp in Sources */,
-				A9415EBC243667F900566F16 /* function.cpp in Sources */,
-				A9415EBA243667F900566F16 /* construct.cpp in Sources */,
-				A9415B26243667F700566F16 /* spirv_optimizer_options.cpp in Sources */,
-				A9415BF2243667F800566F16 /* licm_pass.cpp in Sources */,
-				A9415EEC243667F900566F16 /* validate_composites.cpp in Sources */,
-				A9415ED4243667F900566F16 /* validate_derivatives.cpp in Sources */,
-				A9415B8E243667F800566F16 /* cfg.cpp in Sources */,
-				A9415CA0243667F800566F16 /* scalar_replacement_pass.cpp in Sources */,
-				A9415EA0243667F900566F16 /* validate_scopes.cpp in Sources */,
-				A9415E94243667F900566F16 /* validate_misc.cpp in Sources */,
-				A9415B58243667F800566F16 /* software_version.cpp in Sources */,
-				A9415E9C243667F900566F16 /* validate_barriers.cpp in Sources */,
-				A9415CF0243667F800566F16 /* graphics_robust_access_pass.cpp in Sources */,
-				A9415B88243667F800566F16 /* types.cpp in Sources */,
-				A9415EB0243667F900566F16 /* validate.cpp in Sources */,
-				A9415BDE243667F800566F16 /* unify_const_pass.cpp in Sources */,
-				A9415EE4243667F900566F16 /* validate_layout.cpp in Sources */,
-				A9415EA6243667F900566F16 /* validate_instruction.cpp in Sources */,
-				A9415EDC243667F900566F16 /* instruction.cpp in Sources */,
-				A9415C1A243667F800566F16 /* pch_source_opt.cpp in Sources */,
-				A9415ACA243667F700566F16 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */,
-				A9415CBE243667F800566F16 /* value_number_table.cpp in Sources */,
-				A9415B9C243667F800566F16 /* inst_bindless_check_pass.cpp in Sources */,
-				A9415EDA243667F900566F16 /* validate_literals.cpp in Sources */,
-				A9415AE0243667F700566F16 /* merge_blocks_reduction_opportunity.cpp in Sources */,
-				A9415B70243667F800566F16 /* combine_access_chains.cpp in Sources */,
-				A9415C10243667F800566F16 /* strip_reflect_info_pass.cpp in Sources */,
-				A9415E9E243667F900566F16 /* validate_non_uniform.cpp in Sources */,
-				A9415B08243667F700566F16 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */,
-				A9415B72243667F800566F16 /* build_module.cpp in Sources */,
-				A9415EEE243667F900566F16 /* validation_state.cpp in Sources */,
-				A9415EDE243667F900566F16 /* validate_type.cpp in Sources */,
-				A9415AC2243667F700566F16 /* reduction_pass.cpp in Sources */,
-				A9415C72243667F800566F16 /* dead_insert_elim_pass.cpp in Sources */,
-				A9415D0A243667F800566F16 /* loop_peeling.cpp in Sources */,
-				A9415CF8243667F800566F16 /* upgrade_memory_model.cpp in Sources */,
-				A9415B5A243667F800566F16 /* opcode.cpp in Sources */,
-				A9415C2A243667F800566F16 /* flatten_decoration_pass.cpp in Sources */,
-				A9415AA4243667F700566F16 /* timer.cpp in Sources */,
-				A9415C76243667F800566F16 /* scalar_analysis.cpp in Sources */,
-				A9415BE0243667F800566F16 /* type_manager.cpp in Sources */,
-				A9415CDC243667F800566F16 /* struct_cfg_analysis.cpp in Sources */,
-				A9415B54243667F800566F16 /* name_mapper.cpp in Sources */,
-				A9415C0C243667F800566F16 /* def_use_manager.cpp in Sources */,
-				A9415BA0243667F800566F16 /* instrument_pass.cpp in Sources */,
-				A9415BAA243667F800566F16 /* loop_fission.cpp in Sources */,
-				A9415B66243667F800566F16 /* register_pressure.cpp in Sources */,
-				A9415C38243667F800566F16 /* loop_descriptor.cpp in Sources */,
-				A9415CC8243667F800566F16 /* dominator_analysis.cpp in Sources */,
-				A9415AC4243667F700566F16 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */,
-				A9415EA2243667F900566F16 /* validate_atomics.cpp in Sources */,
-				A9415BC8243667F800566F16 /* inst_debug_printf_pass.cpp in Sources */,
-				A9415EB6243667F900566F16 /* validate_bitwise.cpp in Sources */,
-				A9415B02243667F700566F16 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */,
-				A9415ECC243667F900566F16 /* validate_arithmetics.cpp in Sources */,
-				A9415E98243667F900566F16 /* validate_capability.cpp in Sources */,
-				A9415EF0243667F900566F16 /* validate_primitives.cpp in Sources */,
-				A9415CE4243667F800566F16 /* local_access_chain_convert_pass.cpp in Sources */,
-				A9415EB4243667F900566F16 /* validate_constants.cpp in Sources */,
-				A9415EAE243667F900566F16 /* validate_interfaces.cpp in Sources */,
-				A9415EC2243667F900566F16 /* validate_conversion.cpp in Sources */,
-				A9415B86243667F800566F16 /* code_sink.cpp in Sources */,
-				A9415CA6243667F800566F16 /* redundancy_elimination.cpp in Sources */,
-				A9415B3A243667F800566F16 /* spirv_endian.cpp in Sources */,
-				A9415C04243667F800566F16 /* constants.cpp in Sources */,
-				A9415CC2243667F800566F16 /* replace_invalid_opc.cpp in Sources */,
-				A9415B44243667F800566F16 /* enum_string_mapping.cpp in Sources */,
-				A9415E90243667F900566F16 /* text_handler.cpp in Sources */,
-				A9415CBC243667F800566F16 /* fix_storage_class.cpp in Sources */,
+				A976626C2485758700FDD115 /* basic_block.cpp in Sources */,
+				A9765EBE2485758600FDD115 /* spirv_reducer_options.cpp in Sources */,
+				A97662262485758700FDD115 /* validate_scopes.cpp in Sources */,
+				A9765F802485758600FDD115 /* def_use_manager.cpp in Sources */,
+				A9765FC42485758600FDD115 /* debug_info_manager.cpp in Sources */,
+				A9765F1C2485758600FDD115 /* loop_fission.cpp in Sources */,
+				A9765FDE2485758600FDD115 /* loop_fusion_pass.cpp in Sources */,
+				A976623A2485758700FDD115 /* validate_constants.cpp in Sources */,
+				A9765F782485758600FDD115 /* constants.cpp in Sources */,
+				A97660102485758600FDD115 /* fold.cpp in Sources */,
+				A9765EB22485758600FDD115 /* binary.cpp in Sources */,
+				A9765FB02485758600FDD115 /* function.cpp in Sources */,
+				A9765E7E2485758600FDD115 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */,
+				A9765EF82485758600FDD115 /* code_sink.cpp in Sources */,
+				A9765E3E2485758500FDD115 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */,
+				A97662322485758700FDD115 /* validate_builtins.cpp in Sources */,
+				A9765F562485758600FDD115 /* generate_webgpu_initializers_pass.cpp in Sources */,
+				A9765DFA2485758500FDD115 /* text.cpp in Sources */,
+				A97660742485758600FDD115 /* scalar_analysis_simplification.cpp in Sources */,
+				A976622E2485758700FDD115 /* validate_decorations.cpp in Sources */,
+				A9765ECC2485758600FDD115 /* opcode.cpp in Sources */,
+				A9765E6A2485758600FDD115 /* reducer.cpp in Sources */,
+				A97662042485758700FDD115 /* libspirv.cpp in Sources */,
+				A9765F1A2485758600FDD115 /* pass.cpp in Sources */,
+				A976621A2485758700FDD115 /* validate_misc.cpp in Sources */,
+				A97662682485758700FDD115 /* validate_execution_limitations.cpp in Sources */,
+				A9765E022485758500FDD115 /* pch_source.cpp in Sources */,
+				A976602A2485758600FDD115 /* instruction.cpp in Sources */,
+				A976625A2485758700FDD115 /* validate_derivatives.cpp in Sources */,
+				A9765F222485758600FDD115 /* merge_return_pass.cpp in Sources */,
+				A9765F842485758600FDD115 /* strip_reflect_info_pass.cpp in Sources */,
+				A9765E402485758500FDD115 /* remove_function_reduction_opportunity.cpp in Sources */,
+				A97662522485758700FDD115 /* validate_arithmetics.cpp in Sources */,
+				A97660402485758600FDD115 /* decompose_initialized_variables_pass.cpp in Sources */,
+				A9765F082485758600FDD115 /* freeze_spec_constant_value_pass.cpp in Sources */,
+				A976603E2485758600FDD115 /* dominator_analysis.cpp in Sources */,
+				A976624A2485758700FDD115 /* validate_small_type_uses.cpp in Sources */,
+				A9765FF02485758600FDD115 /* block_merge_pass.cpp in Sources */,
+				A9765E682485758600FDD115 /* remove_unused_instruction_reduction_opportunity_finder.cpp in Sources */,
+				A97660662485758600FDD115 /* graphics_robust_access_pass.cpp in Sources */,
+				A97662742485758700FDD115 /* validation_state.cpp in Sources */,
+				A97660522485758600FDD115 /* struct_cfg_analysis.cpp in Sources */,
+				A9765E442485758600FDD115 /* remove_selection_reduction_opportunity_finder.cpp in Sources */,
+				A9765F002485758600FDD115 /* cfg.cpp in Sources */,
+				A9765F7E2485758600FDD115 /* inst_buff_addr_check_pass.cpp in Sources */,
+				A9765E462485758600FDD115 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */,
+				A9765E722485758600FDD115 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */,
+				A976621C2485758700FDD115 /* validate_cfg.cpp in Sources */,
+				A9765F9A2485758600FDD115 /* simplification_pass.cpp in Sources */,
+				A9765E222485758500FDD115 /* table.cpp in Sources */,
+				A9765F2A2485758600FDD115 /* wrap_opkill.cpp in Sources */,
+				A97662422485758700FDD115 /* function.cpp in Sources */,
+				A9765FB82485758600FDD115 /* process_lines_pass.cpp in Sources */,
+				A97660322485758600FDD115 /* fix_storage_class.cpp in Sources */,
+				A97660382485758600FDD115 /* replace_invalid_opc.cpp in Sources */,
+				A9765F502485758600FDD115 /* loop_unswitch_pass.cpp in Sources */,
+				A9765E382485758500FDD115 /* remove_function_reduction_opportunity_finder.cpp in Sources */,
+				A9765FEC2485758600FDD115 /* scalar_analysis.cpp in Sources */,
+				A9765EE42485758600FDD115 /* build_module.cpp in Sources */,
+				A9765F262485758600FDD115 /* eliminate_dead_constant_pass.cpp in Sources */,
+				A9765E782485758600FDD115 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */,
+				A9765ED42485758600FDD115 /* optimizer.cpp in Sources */,
+				A976602E2485758600FDD115 /* reduce_load_size.cpp in Sources */,
+				A9765ECA2485758600FDD115 /* software_version.cpp in Sources */,
+				A9765F662485758600FDD115 /* licm_pass.cpp in Sources */,
+				A9765F402485758600FDD115 /* mem_pass.cpp in Sources */,
+				A9765F542485758600FDD115 /* type_manager.cpp in Sources */,
+				A9765F122485758600FDD115 /* instrument_pass.cpp in Sources */,
+				A9765F682485758600FDD115 /* eliminate_dead_functions_pass.cpp in Sources */,
+				A976621E2485758700FDD115 /* validate_capability.cpp in Sources */,
+				A976623C2485758700FDD115 /* validate_bitwise.cpp in Sources */,
+				A9765F9C2485758600FDD115 /* dead_branch_elim_pass.cpp in Sources */,
+				A9765EA02485758600FDD115 /* spirv_fuzzer_options.cpp in Sources */,
+				A976625C2485758700FDD115 /* validate_memory.cpp in Sources */,
+				A97662282485758700FDD115 /* validate_atomics.cpp in Sources */,
+				A9765DF22485758500FDD115 /* spirv_target_env.cpp in Sources */,
+				A97662722485758700FDD115 /* validate_composites.cpp in Sources */,
+				A976622C2485758700FDD115 /* validate_instruction.cpp in Sources */,
+				A97662362485758700FDD115 /* validate.cpp in Sources */,
+				A9765F0E2485758600FDD115 /* inst_bindless_check_pass.cpp in Sources */,
+				A9765ED02485758600FDD115 /* ext_inst.cpp in Sources */,
+				A976605A2485758600FDD115 /* local_access_chain_convert_pass.cpp in Sources */,
+				A9765E262485758500FDD115 /* remove_selection_reduction_opportunity.cpp in Sources */,
+				A97662582485758700FDD115 /* validate_logicals.cpp in Sources */,
+				A97662562485758700FDD115 /* validate_memory_semantics.cpp in Sources */,
+				A9765F322485758600FDD115 /* ssa_rewrite_pass.cpp in Sources */,
+				A97662602485758700FDD115 /* validate_literals.cpp in Sources */,
+				A976625E2485758700FDD115 /* validate_image.cpp in Sources */,
+				A9765FD82485758600FDD115 /* inline_exhaustive_pass.cpp in Sources */,
+				A9765F282485758600FDD115 /* cfg_cleanup_pass.cpp in Sources */,
+				A9765E122485758500FDD115 /* string_utils.cpp in Sources */,
+				A97660242485758600FDD115 /* relax_float_ops_pass.cpp in Sources */,
+				A9765E742485758600FDD115 /* reduction_opportunity.cpp in Sources */,
+				A97662482485758700FDD115 /* validate_conversion.cpp in Sources */,
+				A9765F062485758600FDD115 /* local_single_block_elim_pass.cpp in Sources */,
+				A9765FB42485758600FDD115 /* composite.cpp in Sources */,
+				A9765F8E2485758600FDD115 /* pch_source_opt.cpp in Sources */,
+				A9765E1A2485758500FDD115 /* parse_number.cpp in Sources */,
+				A97662642485758700FDD115 /* validate_type.cpp in Sources */,
+				A976624E2485758700FDD115 /* validate_id.cpp in Sources */,
+				A9765E322485758500FDD115 /* reduction_util.cpp in Sources */,
+				A9765F2C2485758600FDD115 /* const_folding_rules.cpp in Sources */,
+				A9765F962485758600FDD115 /* eliminate_dead_functions_util.cpp in Sources */,
+				A9765F462485758600FDD115 /* dead_variable_elimination.cpp in Sources */,
+				A9765E982485758600FDD115 /* spirv_optimizer_options.cpp in Sources */,
+				A9765E6C2485758600FDD115 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */,
+				A97662242485758700FDD115 /* validate_non_uniform.cpp in Sources */,
+				A976626A2485758700FDD115 /* validate_layout.cpp in Sources */,
+				A976605C2485758600FDD115 /* basic_block.cpp in Sources */,
+				A976626E2485758700FDD115 /* validate_function.cpp in Sources */,
+				A9765DFC2485758500FDD115 /* assembly_grammar.cpp in Sources */,
+				A97662162485758700FDD115 /* text_handler.cpp in Sources */,
+				A9765F522485758600FDD115 /* unify_const_pass.cpp in Sources */,
+				A9765EDA2485758600FDD115 /* loop_utils.cpp in Sources */,
+				A97660022485758600FDD115 /* private_to_local_pass.cpp in Sources */,
+				A97662222485758700FDD115 /* validate_barriers.cpp in Sources */,
+				A97662182485758700FDD115 /* validate_annotation.cpp in Sources */,
+				A9765F042485758600FDD115 /* decoration_manager.cpp in Sources */,
+				A9765EA42485758600FDD115 /* spirv_validator_options.cpp in Sources */,
+				A9765F4E2485758600FDD115 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */,
+				A9765E902485758600FDD115 /* remove_block_reduction_opportunity.cpp in Sources */,
+				A9765FCA2485758600FDD115 /* eliminate_dead_members_pass.cpp in Sources */,
+				A9765FB22485758600FDD115 /* instruction_list.cpp in Sources */,
+				A9765E4E2485758600FDD115 /* change_operand_reduction_opportunity.cpp in Sources */,
+				A9765F442485758600FDD115 /* remove_duplicates_pass.cpp in Sources */,
+				A9765FCE2485758600FDD115 /* desc_sroa.cpp in Sources */,
+				A9765E8C2485758600FDD115 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */,
+				A9765F022485758600FDD115 /* strip_atomic_counter_memory_pass.cpp in Sources */,
+				A9765E922485758600FDD115 /* remove_unused_struct_member_reduction_opportunity_finder.cpp in Sources */,
+				A9765FD02485758600FDD115 /* block_merge_util.cpp in Sources */,
+				A9765E622485758600FDD115 /* pch_source_reduce.cpp in Sources */,
+				A976607E2485758600FDD115 /* compact_ids_pass.cpp in Sources */,
+				A9765E422485758500FDD115 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */,
+				A9765E1C2485758500FDD115 /* bit_vector.cpp in Sources */,
+				A976623E2485758700FDD115 /* validate_extensions.cpp in Sources */,
+				A9765F342485758600FDD115 /* loop_dependence.cpp in Sources */,
+				A97662002485758700FDD115 /* diagnostic.cpp in Sources */,
+				A9765FE82485758600FDD115 /* dead_insert_elim_pass.cpp in Sources */,
+				A976600C2485758600FDD115 /* set_spec_constant_default_value_pass.cpp in Sources */,
+				A9765E002485758500FDD115 /* extensions.cpp in Sources */,
+				A9765FB62485758600FDD115 /* convert_to_half_pass.cpp in Sources */,
+				A9765E342485758500FDD115 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */,
+				A9765FD42485758600FDD115 /* copy_prop_arrays.cpp in Sources */,
+				A9765EC02485758600FDD115 /* parsed_operand.cpp in Sources */,
+				A9765E642485758600FDD115 /* remove_struct_member_reduction_opportunity.cpp in Sources */,
+				A97662762485758700FDD115 /* validate_primitives.cpp in Sources */,
+				A9765EC62485758600FDD115 /* name_mapper.cpp in Sources */,
+				A9765FCC2485758600FDD115 /* strength_reduction_pass.cpp in Sources */,
+				A9765EAC2485758600FDD115 /* spirv_endian.cpp in Sources */,
+				A97662462485758700FDD115 /* validate_adjacency.cpp in Sources */,
+				A97662302485758700FDD115 /* validate_debug.cpp in Sources */,
+				A9765F9E2485758600FDD115 /* flatten_decoration_pass.cpp in Sources */,
+				A9765F6C2485758600FDD115 /* split_invalid_unreachable_pass.cpp in Sources */,
+				A97660202485758600FDD115 /* workaround1209.cpp in Sources */,
+				A976606E2485758600FDD115 /* upgrade_memory_model.cpp in Sources */,
+				A9765F102485758600FDD115 /* local_redundancy_elimination.cpp in Sources */,
+				A97660122485758600FDD115 /* amd_ext_to_khr.cpp in Sources */,
+				A9765F182485758600FDD115 /* feature_manager.cpp in Sources */,
+				A9765FA62485758600FDD115 /* ir_context.cpp in Sources */,
+				A9765FD62485758600FDD115 /* pass_manager.cpp in Sources */,
+				A97662402485758700FDD115 /* construct.cpp in Sources */,
+				A9765E4C2485758600FDD115 /* merge_blocks_reduction_opportunity.cpp in Sources */,
+				A97660802485758600FDD115 /* loop_peeling.cpp in Sources */,
+				A97660062485758600FDD115 /* propagator.cpp in Sources */,
+				A97662542485758700FDD115 /* validate_mode_setting.cpp in Sources */,
+				A9765F302485758600FDD115 /* strip_debug_info_pass.cpp in Sources */,
+				A9765F4A2485758600FDD115 /* module.cpp in Sources */,
+				A9765FA22485758600FDD115 /* folding_rules.cpp in Sources */,
+				A97660162485758600FDD115 /* scalar_replacement_pass.cpp in Sources */,
+				A9765F742485758600FDD115 /* loop_unroller.cpp in Sources */,
+				A976620C2485758700FDD115 /* operand.cpp in Sources */,
+				A97660362485758600FDD115 /* inline_opaque_pass.cpp in Sources */,
+				A9765EFA2485758600FDD115 /* types.cpp in Sources */,
+				A9765EB62485758600FDD115 /* enum_string_mapping.cpp in Sources */,
+				A976607A2485758600FDD115 /* legalize_vector_shuffle_pass.cpp in Sources */,
+				A9765EA62485758600FDD115 /* print.cpp in Sources */,
+				A9765F942485758600FDD115 /* aggressive_dead_code_elim_pass.cpp in Sources */,
+				A9765FFE2485758600FDD115 /* local_single_store_elim_pass.cpp in Sources */,
+				A9765F622485758600FDD115 /* ir_loader.cpp in Sources */,
+				A9765E5C2485758600FDD115 /* remove_instruction_reduction_opportunity.cpp in Sources */,
+				A976606C2485758600FDD115 /* loop_fusion.cpp in Sources */,
+				A9765F702485758600FDD115 /* vector_dce.cpp in Sources */,
+				A97662622485758700FDD115 /* instruction.cpp in Sources */,
+				A976601C2485758600FDD115 /* redundancy_elimination.cpp in Sources */,
+				A9765FC22485758600FDD115 /* if_conversion.cpp in Sources */,
+				A976600A2485758600FDD115 /* loop_dependence_helpers.cpp in Sources */,
+				A9765F5E2485758600FDD115 /* inline_pass.cpp in Sources */,
+				A9765F1E2485758600FDD115 /* dominator_tree.cpp in Sources */,
+				A97662122485758700FDD115 /* disassemble.cpp in Sources */,
+				A9765F3A2485758600FDD115 /* inst_debug_printf_pass.cpp in Sources */,
+				A9765F882485758600FDD115 /* ccp_pass.cpp in Sources */,
+				A9765ED82485758600FDD115 /* register_pressure.cpp in Sources */,
+				A9765EC82485758600FDD115 /* linker.cpp in Sources */,
+				A9765E2C2485758500FDD115 /* reduction_pass.cpp in Sources */,
+				A9765E8E2485758600FDD115 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */,
+				A9765E0E2485758500FDD115 /* timer.cpp in Sources */,
+				A97662342485758700FDD115 /* validate_interfaces.cpp in Sources */,
+				A97660342485758600FDD115 /* value_number_table.cpp in Sources */,
+				A9765FAC2485758600FDD115 /* loop_descriptor.cpp in Sources */,
+				A9765EE22485758600FDD115 /* combine_access_chains.cpp in Sources */,
+				A9765E2E2485758500FDD115 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */,
+				A9765E862485758600FDD115 /* remove_block_reduction_opportunity_finder.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -3684,34 +3720,24 @@
 		A90FD89D21CC4EAB00B92BB2 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = arm64;
-				BITCODE_GENERATION_MODE = bitcode;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"$(inherited)",
 					"SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross",
 				);
 				PRODUCT_NAME = SPIRVCross;
 				SDKROOT = iphoneos;
-				VALID_ARCHS = arm64;
 			};
 			name = Debug;
 		};
 		A90FD89E21CC4EAB00B92BB2 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = arm64;
-				BITCODE_GENERATION_MODE = bitcode;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"$(inherited)",
 					"SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross",
 				);
 				PRODUCT_NAME = SPIRVCross;
 				SDKROOT = iphoneos;
-				VALID_ARCHS = arm64;
 			};
 			name = Release;
 		};
@@ -3790,10 +3816,6 @@
 		A972A80D21CECBBF0013AB25 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = arm64;
-				BITCODE_GENERATION_MODE = bitcode;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
 				DEPLOYMENT_POSTPROCESSING = YES;
 				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
 				HEADER_SEARCH_PATHS = (
@@ -3805,17 +3827,12 @@
 				);
 				PRODUCT_NAME = SPIRVTools;
 				SDKROOT = iphoneos;
-				VALID_ARCHS = arm64;
 			};
 			name = Debug;
 		};
 		A972A80E21CECBBF0013AB25 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = arm64;
-				BITCODE_GENERATION_MODE = bitcode;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
 				DEPLOYMENT_POSTPROCESSING = YES;
 				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
 				HEADER_SEARCH_PATHS = (
@@ -3827,7 +3844,6 @@
 				);
 				PRODUCT_NAME = SPIRVTools;
 				SDKROOT = iphoneos;
-				VALID_ARCHS = arm64;
 			};
 			name = Release;
 		};
@@ -3868,11 +3884,7 @@
 		A972ABDA21CED7BC0013AB25 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = arm64;
-				BITCODE_GENERATION_MODE = bitcode;
 				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"$(inherited)",
 					"AMD_EXTENSIONS=1",
@@ -3888,18 +3900,13 @@
 				);
 				PRODUCT_NAME = glslang;
 				SDKROOT = iphoneos;
-				VALID_ARCHS = arm64;
 			};
 			name = Debug;
 		};
 		A972ABDB21CED7BC0013AB25 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = arm64;
-				BITCODE_GENERATION_MODE = bitcode;
 				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
-				CODE_SIGN_IDENTITY = "iPhone Developer";
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"$(inherited)",
 					"AMD_EXTENSIONS=1",
@@ -3915,7 +3922,6 @@
 				);
 				PRODUCT_NAME = glslang;
 				SDKROOT = iphoneos;
-				VALID_ARCHS = arm64;
 			};
 			name = Release;
 		};
@@ -3967,6 +3973,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = NO;
@@ -4014,6 +4021,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = NO;
diff --git "a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies \050Debug\051.xcscheme" "b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies \050Debug\051.xcscheme"
index 18a6d08..9677c5a 100644
--- "a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies \050Debug\051.xcscheme"
+++ "b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies \050Debug\051.xcscheme"
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1140"
+   LastUpgradeVersion = "1150"
    version = "2.0">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies-iOS.xcscheme b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies-iOS.xcscheme
index fab5380..f5912bb 100644
--- a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies-iOS.xcscheme
+++ b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies-iOS.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1140"
+   LastUpgradeVersion = "1150"
    version = "2.0">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies-macOS.xcscheme b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies-macOS.xcscheme
index 2313055..72e1129 100644
--- a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies-macOS.xcscheme
+++ b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies-macOS.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1140"
+   LastUpgradeVersion = "1150"
    version = "2.0">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies.xcscheme b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies.xcscheme
index 2ebf29f..7d3952c 100644
--- a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies.xcscheme
+++ b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/ExternalDependencies.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1140"
+   LastUpgradeVersion = "1150"
    version = "2.0">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Cross-iOS.xcscheme b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Cross-iOS.xcscheme
index 944ddf4..50db954 100644
--- a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Cross-iOS.xcscheme
+++ b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Cross-iOS.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1140"
+   LastUpgradeVersion = "1150"
    version = "2.0">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Cross-macOS.xcscheme b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Cross-macOS.xcscheme
index 9f89d19..a4ceebf 100644
--- a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Cross-macOS.xcscheme
+++ b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Cross-macOS.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1140"
+   LastUpgradeVersion = "1150"
    version = "2.0">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Tools-iOS.xcscheme b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Tools-iOS.xcscheme
index 03437e5..915c7e2 100644
--- a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Tools-iOS.xcscheme
+++ b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Tools-iOS.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1140"
+   LastUpgradeVersion = "1150"
    version = "2.0">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Tools-macOS.xcscheme b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Tools-macOS.xcscheme
index cbfbdd3..2f53c1a 100644
--- a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Tools-macOS.xcscheme
+++ b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/SPIRV-Tools-macOS.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1140"
+   LastUpgradeVersion = "1150"
    version = "2.0">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/glslang-iOS.xcscheme b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/glslang-iOS.xcscheme
index dc8c0d1..62d3081 100644
--- a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/glslang-iOS.xcscheme
+++ b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/glslang-iOS.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1140"
+   LastUpgradeVersion = "1150"
    version = "2.0">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/glslang-macOS.xcscheme b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/glslang-macOS.xcscheme
index 4a85559..4b203b9 100644
--- a/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/glslang-macOS.xcscheme
+++ b/ExternalDependencies.xcodeproj/xcshareddata/xcschemes/glslang-macOS.xcscheme
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1140"
+   LastUpgradeVersion = "1150"
    version = "2.0">
    <BuildAction
       parallelizeBuildables = "YES"
diff --git a/ExternalRevisions/README.md b/ExternalRevisions/README.md
index 6eb1886..b14fd7b 100644
--- a/ExternalRevisions/README.md
+++ b/ExternalRevisions/README.md
@@ -202,9 +202,10 @@
 
 5. Remove the *Group* named `fuzz` from under the *Group* named `External/SPIRV-Tools/source`.
 
-6. In the `Scripts` folder, run `./packagePregenSpirvToolsHeaders` to update `Templates/spirv-tools/build.zip` 
-   from the `*.h` and `*.inc` files in `External/glslang/External/spirv-tools/build`, and test by running 
-   `./fetchDependencies --skip-spirv-tools-build`, and a **MoltenVK** build.
+6. In the `Scripts` folder, run `./packagePregenSpirvToolsHeaders`, which will fetch and build the 
+   full `SPIRV-Tools` library and will update `Templates/spirv-tools/build.zip` from the `*.h` and 
+   `*.inc` files in `External/glslang/External/spirv-tools/build`. Test by running `./fetchDependencies` 
+   and a **MoltenVK** build.
 
 
 
diff --git a/ExternalRevisions/SPIRV-Cross_repo_revision b/ExternalRevisions/SPIRV-Cross_repo_revision
index e20a35a..9fa21a3 100644
--- a/ExternalRevisions/SPIRV-Cross_repo_revision
+++ b/ExternalRevisions/SPIRV-Cross_repo_revision
@@ -1 +1 @@
-fbc560782c42bab4581dbc7705da5013bf864956
+d385bf096f5dabbc4cdaeb6872b0f64be1a63ad0
diff --git a/ExternalRevisions/Vulkan-Headers_repo_revision b/ExternalRevisions/Vulkan-Headers_repo_revision
index 9c7eac2..20b16f5 100644
--- a/ExternalRevisions/Vulkan-Headers_repo_revision
+++ b/ExternalRevisions/Vulkan-Headers_repo_revision
@@ -1 +1 @@
-fb7f9c9bcd1d1544ea203a1f3d4253d0e90c5a90
+09531f27933bf04bffde9074acb302e026e8f181
diff --git a/ExternalRevisions/Vulkan-Tools_repo_revision b/ExternalRevisions/Vulkan-Tools_repo_revision
index 133c330..625057d 100644
--- a/ExternalRevisions/Vulkan-Tools_repo_revision
+++ b/ExternalRevisions/Vulkan-Tools_repo_revision
@@ -1 +1 @@
-7844b9b4e180612c7ca35bcb07ce7f86610b22c4
+e5b2ff8935cbe779fbbaa02d3aa7659167eb7e35
diff --git a/ExternalRevisions/VulkanSamples_repo_revision b/ExternalRevisions/VulkanSamples_repo_revision
index a359707..d5f3abe 100644
--- a/ExternalRevisions/VulkanSamples_repo_revision
+++ b/ExternalRevisions/VulkanSamples_repo_revision
@@ -1 +1 @@
-036541ca8f65333bf911b3957afa2c49f83fa0cd
+f938eb1daf5c2c9f895c70563760c35e074acc03
diff --git a/ExternalRevisions/glslang_repo_revision b/ExternalRevisions/glslang_repo_revision
index f6d25e5..6fd2550 100644
--- a/ExternalRevisions/glslang_repo_revision
+++ b/ExternalRevisions/glslang_repo_revision
@@ -1 +1 @@
-e157435c1e777aa1052f446dafed162b4a722e03
+e00d27c6d65b7d3e72506a311d7f053da4051295
diff --git a/MoltenVK/MoltenVK.xcodeproj/project.pbxproj b/MoltenVK/MoltenVK.xcodeproj/project.pbxproj
index 3afe647..0ade7b8 100644
--- a/MoltenVK/MoltenVK.xcodeproj/project.pbxproj
+++ b/MoltenVK/MoltenVK.xcodeproj/project.pbxproj
@@ -1145,24 +1145,18 @@
 		A9B8EE1E1A98D796009C5A02 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = arm64;
-				BITCODE_GENERATION_MODE = bitcode;
 				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALID_ARCHS = arm64;
 			};
 			name = Debug;
 		};
 		A9B8EE1F1A98D796009C5A02 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = arm64;
-				BITCODE_GENERATION_MODE = bitcode;
 				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALID_ARCHS = arm64;
 			};
 			name = Release;
 		};
@@ -1171,7 +1165,6 @@
 			buildSettings = {
 				MACOSX_DEPLOYMENT_TARGET = 10.11;
 				SDKROOT = macosx;
-				VALID_ARCHS = x86_64;
 			};
 			name = Debug;
 		};
@@ -1180,7 +1173,6 @@
 			buildSettings = {
 				MACOSX_DEPLOYMENT_TARGET = 10.11;
 				SDKROOT = macosx;
-				VALID_ARCHS = x86_64;
 			};
 			name = Release;
 		};
@@ -1188,6 +1180,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = NO;
@@ -1248,6 +1241,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = NO;
diff --git a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
index effbd3d..71e165e 100644
--- a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
+++ b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
@@ -50,12 +50,12 @@
  */
 #define MVK_VERSION_MAJOR   1
 #define MVK_VERSION_MINOR   0
-#define MVK_VERSION_PATCH   42
+#define MVK_VERSION_PATCH   44
 
 #define MVK_MAKE_VERSION(major, minor, patch)    (((major) * 10000) + ((minor) * 100) + (patch))
 #define MVK_VERSION     MVK_MAKE_VERSION(MVK_VERSION_MAJOR, MVK_VERSION_MINOR, MVK_VERSION_PATCH)
 
-#define VK_MVK_MOLTENVK_SPEC_VERSION            25
+#define VK_MVK_MOLTENVK_SPEC_VERSION            26
 #define VK_MVK_MOLTENVK_EXTENSION_NAME          "VK_MVK_moltenvk"
 
 /**
@@ -609,7 +609,8 @@
 	VkBool32 native3DCompressedTextures;		/**< If true, 3D compressed images are supported natively, without manual decompression. */
 	VkBool32 nativeTextureSwizzle;				/**< If true, component swizzle is supported natively, without manual swizzling in shaders. */
 	VkBool32 placementHeaps;					/**< If true, MTLHeap objects support placement of resources. */
-	VkDeviceSize pushConstantSizeAlignment;     /**< The alignment used internally when allocating memory for push constants. Must be PoT. */
+	VkDeviceSize pushConstantSizeAlignment;		/**< The alignment used internally when allocating memory for push constants. Must be PoT. */
+	uint32_t maxTextureLayers;					/**< The maximum number of layers in an array texture. */
 } MVKPhysicalDeviceMetalFeatures;
 
 /** MoltenVK performance of a particular type of activity. */
@@ -643,7 +644,7 @@
 
 /** MoltenVK performance of queue activities. */
 typedef struct {
-	MVKPerformanceTracker mtlQueueAccess;               /** Create an MTLCommmandQueue or access an existing cached instance. */
+	MVKPerformanceTracker mtlQueueAccess;               /** Create an MTLCommandQueue or access an existing cached instance. */
 	MVKPerformanceTracker mtlCommandBufferCompletion;   /** Completion of a MTLCommandBuffer on the GPU, from commit to completion callback. */
 	MVKPerformanceTracker nextCAMetalDrawable;			/** Retrieve next CAMetalDrawable from CAMetalLayer during presentation. */
 	MVKPerformanceTracker frameInterval;				/** Frame presentation interval (1000/FPS). */
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.mm b/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.mm
index 13bfe6f..4e12de5 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.mm
@@ -90,7 +90,9 @@
 					break;
 
 				case MVKPipelineBarrier::Image:
-					resources[rezCnt++] = b.mvkImage->getMTLTexture();
+                    for (uint8_t planeIndex = 0; planeIndex < b.mvkImage->getPlaneCount(); planeIndex++) {
+                        resources[rezCnt++] = b.mvkImage->getMTLTexture(planeIndex);
+                    }
 					break;
 
 				default:
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.h b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.h
index 54723c8..cedf30b 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.h
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.h
@@ -103,7 +103,7 @@
 
 protected:
 	MVKCommandTypePool<MVKCommand>* getTypePool(MVKCommandPool* cmdPool) override;
-	bool canCopyFormats();
+	bool canCopyFormats(const VkImageBlit& region);
 	bool canCopy(const VkImageBlit& region);
 	void populateVertices(MVKVertexPosTex* vertices, const VkImageBlit& region);
 
@@ -125,8 +125,9 @@
 
 /** Describes Metal texture resolve parameters. */
 typedef struct {
-    uint32_t	level;
-    uint32_t	slice;
+    VkImageCopy* copyRegion;
+    uint32_t level;
+    uint32_t slice;
 } MVKMetalResolveSlice;
 
 /**
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm
index 341c5ce..848aa94 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm
@@ -62,129 +62,138 @@
 	_dstLayout = dstImageLayout;
 
 	_vkImageCopies.clear();		// Clear for reuse
-	for (uint32_t i = 0; i < regionCount; i++) {
-		_vkImageCopies.push_back(pRegions[i]);
+    for (uint32_t regionIdx = 0; regionIdx < regionCount; regionIdx++) {
+        auto& vkIR = pRegions[regionIdx];
+        uint8_t srcPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(vkIR.srcSubresource.aspectMask);
+        uint8_t dstPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(vkIR.dstSubresource.aspectMask);
+    
+        // Validate
+        MVKPixelFormats* pixFmts = cmdBuff->getPixelFormats();
+        if ((_dstImage->getSampleCount() != _srcImage->getSampleCount()) ||
+            (pixFmts->getBytesPerBlock(_dstImage->getMTLPixelFormat(dstPlaneIndex)) != pixFmts->getBytesPerBlock(_srcImage->getMTLPixelFormat(srcPlaneIndex)))) {
+            return reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdCopyImage(): Cannot copy between incompatible formats, such as formats of different pixel sizes, or between images with different sample counts.");
+        }
+        
+		_vkImageCopies.push_back(vkIR);
 	}
-
-	// Validate
-	MVKPixelFormats* pixFmts = cmdBuff->getPixelFormats();
-	if ((_dstImage->getSampleCount() != _srcImage->getSampleCount()) ||
-		(pixFmts->getBytesPerBlock(_dstImage->getMTLPixelFormat()) != pixFmts->getBytesPerBlock(_srcImage->getMTLPixelFormat()))) {
-		return reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdCopyImage(): Cannot copy between incompatible formats, such as formats of different pixel sizes, or between images with different sample counts.");
-	}
-	if ((_srcImage->getMTLTextureType() == MTLTextureType3D) != (_dstImage->getMTLTextureType() == MTLTextureType3D)) {
-		return reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdCopyImage(): Metal does not support copying to or from slices of a 3D texture.");
-	}
+    
+    // Validate
+    if ((_srcImage->getMTLTextureType() == MTLTextureType3D) != (_dstImage->getMTLTextureType() == MTLTextureType3D)) {
+        return reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdCopyImage(): Metal does not support copying to or from slices of a 3D texture.");
+    }
 
 	return VK_SUCCESS;
 }
 
 template <size_t N>
 void MVKCmdCopyImage<N>::encode(MVKCommandEncoder* cmdEncoder, MVKCommandUse commandUse) {
+    MVKPixelFormats* pixFmts = cmdEncoder->getPixelFormats();
+    uint32_t copyCnt = (uint32_t)_vkImageCopies.size();
+    VkBufferImageCopy vkSrcCopies[copyCnt];
+    VkBufferImageCopy vkDstCopies[copyCnt];
+    size_t tmpBuffSize = 0;
 
-	MTLPixelFormat srcMTLPixFmt = _srcImage->getMTLPixelFormat();
-	bool isSrcCompressed = _srcImage->getIsCompressed();
+    for (uint32_t copyIdx = 0; copyIdx < copyCnt; copyIdx++) {
+        auto& vkIC = _vkImageCopies[copyIdx];
+        
+        uint8_t srcPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(vkIC.srcSubresource.aspectMask);
+        uint8_t dstPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(vkIC.dstSubresource.aspectMask);
+        
+        MTLPixelFormat srcMTLPixFmt = _srcImage->getMTLPixelFormat(srcPlaneIndex);
+        bool isSrcCompressed = _srcImage->getIsCompressed();
 
-	MTLPixelFormat dstMTLPixFmt = _dstImage->getMTLPixelFormat();
-	bool isDstCompressed = _dstImage->getIsCompressed();
+        MTLPixelFormat dstMTLPixFmt = _dstImage->getMTLPixelFormat(dstPlaneIndex);
+        bool isDstCompressed = _dstImage->getIsCompressed();
 
-	// If source and destination have different formats and at least one is compressed, use a temporary intermediary buffer
-	bool useTempBuffer = (srcMTLPixFmt != dstMTLPixFmt) && (isSrcCompressed || isDstCompressed);
-	if (useTempBuffer) {
-		MVKPixelFormats* pixFmts = cmdEncoder->getPixelFormats();
-		uint32_t copyCnt = (uint32_t)_vkImageCopies.size();
-		VkBufferImageCopy vkSrcCopies[copyCnt];
-		VkBufferImageCopy vkDstCopies[copyCnt];
-		size_t tmpBuffSize = 0;
-		for (uint32_t copyIdx = 0; copyIdx < copyCnt; copyIdx++) {
-			auto& vkIC = _vkImageCopies[copyIdx];
+        // If source and destination have different formats and at least one is compressed, use a temporary intermediary buffer
+        bool useTempBuffer = (srcMTLPixFmt != dstMTLPixFmt) && (isSrcCompressed || isDstCompressed);
 
-			// Add copy from source image to temp buffer.
-			auto& srcCpy = vkSrcCopies[copyIdx];
-			srcCpy.bufferOffset = tmpBuffSize;
-			srcCpy.bufferRowLength = 0;
-			srcCpy.bufferImageHeight = 0;
-			srcCpy.imageSubresource = vkIC.srcSubresource;
-			srcCpy.imageOffset = vkIC.srcOffset;
-			srcCpy.imageExtent = vkIC.extent;
+        if (useTempBuffer) {
+            // Add copy from source image to temp buffer.
+            auto& srcCpy = vkSrcCopies[copyIdx];
+            srcCpy.bufferOffset = tmpBuffSize;
+            srcCpy.bufferRowLength = 0;
+            srcCpy.bufferImageHeight = 0;
+            srcCpy.imageSubresource = vkIC.srcSubresource;
+            srcCpy.imageOffset = vkIC.srcOffset;
+            srcCpy.imageExtent = vkIC.extent;
 
-			// Add copy from temp buffer to destination image.
-			// Extent is provided in source texels. If the source is compressed but the
-			// destination is not, each destination pixel will consume an entire source block,
-			// so we must downscale the destination extent by the size of the source block.
-			VkExtent3D dstExtent = vkIC.extent;
-			if (isSrcCompressed && !isDstCompressed) {
-				VkExtent2D srcBlockExtent = pixFmts->getBlockTexelSize(srcMTLPixFmt);
-				dstExtent.width /= srcBlockExtent.width;
-				dstExtent.height /= srcBlockExtent.height;
-			}
-			auto& dstCpy = vkDstCopies[copyIdx];
-			dstCpy.bufferOffset = tmpBuffSize;
-			dstCpy.bufferRowLength = 0;
-			dstCpy.bufferImageHeight = 0;
-			dstCpy.imageSubresource = vkIC.dstSubresource;
-			dstCpy.imageOffset = vkIC.dstOffset;
-			dstCpy.imageExtent = dstExtent;
+            // Add copy from temp buffer to destination image.
+            // Extent is provided in source texels. If the source is compressed but the
+            // destination is not, each destination pixel will consume an entire source block,
+            // so we must downscale the destination extent by the size of the source block.
+            VkExtent3D dstExtent = vkIC.extent;
+            if (isSrcCompressed && !isDstCompressed) {
+                VkExtent2D srcBlockExtent = pixFmts->getBlockTexelSize(srcMTLPixFmt);
+                dstExtent.width /= srcBlockExtent.width;
+                dstExtent.height /= srcBlockExtent.height;
+            }
+            auto& dstCpy = vkDstCopies[copyIdx];
+            dstCpy.bufferOffset = tmpBuffSize;
+            dstCpy.bufferRowLength = 0;
+            dstCpy.bufferImageHeight = 0;
+            dstCpy.imageSubresource = vkIC.dstSubresource;
+            dstCpy.imageOffset = vkIC.dstOffset;
+            dstCpy.imageExtent = dstExtent;
 
-			size_t bytesPerRow = pixFmts->getBytesPerRow(srcMTLPixFmt, vkIC.extent.width);
-			size_t bytesPerRegion = pixFmts->getBytesPerLayer(srcMTLPixFmt, bytesPerRow, vkIC.extent.height);
-			tmpBuffSize += bytesPerRegion;
-		}
+            size_t bytesPerRow = pixFmts->getBytesPerRow(srcMTLPixFmt, vkIC.extent.width);
+            size_t bytesPerRegion = pixFmts->getBytesPerLayer(srcMTLPixFmt, bytesPerRow, vkIC.extent.height);
+            tmpBuffSize += bytesPerRegion;
+        } else {
+            // Map the source pixel format to the dest pixel format through a texture view on the source texture.
+            // If the source and dest pixel formats are the same, this will simply degenerate to the source texture itself.
+            id<MTLTexture> srcMTLTex = _srcImage->getMTLTexture(srcPlaneIndex, _dstImage->getMTLPixelFormat(dstPlaneIndex));
+            id<MTLTexture> dstMTLTex = _dstImage->getMTLTexture(dstPlaneIndex);
+            if ( !srcMTLTex || !dstMTLTex ) { return; }
 
-		MVKBufferDescriptorData tempBuffData;
-		tempBuffData.size = tmpBuffSize;
-		tempBuffData.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
-		VkBuffer tempBuff = (VkBuffer)cmdEncoder->getCommandEncodingPool()->getTransferMVKBuffer(tempBuffData);
+            id<MTLBlitCommandEncoder> mtlBlitEnc = cmdEncoder->getMTLBlitEncoder(commandUse);
 
-		MVKCmdBufferImageCopy<N> cpyCmd;
+            // If copies can be performed using direct texture-texture copying, do so
+            uint32_t srcLevel = vkIC.srcSubresource.mipLevel;
+            MTLOrigin srcOrigin = mvkMTLOriginFromVkOffset3D(vkIC.srcOffset);
+            MTLSize srcSize = mvkClampMTLSize(mvkMTLSizeFromVkExtent3D(vkIC.extent),
+                                              srcOrigin,
+                                              mvkMTLSizeFromVkExtent3D(_srcImage->getExtent3D(srcPlaneIndex, srcLevel)));
+            uint32_t dstLevel = vkIC.dstSubresource.mipLevel;
+            MTLOrigin dstOrigin = mvkMTLOriginFromVkOffset3D(vkIC.dstOffset);
+            uint32_t srcBaseLayer = vkIC.srcSubresource.baseArrayLayer;
+            uint32_t dstBaseLayer = vkIC.dstSubresource.baseArrayLayer;
+            uint32_t layCnt = vkIC.srcSubresource.layerCount;
 
-		// Copy from source image to buffer
-		// Create and execute a temporary buffer image command.
-		// To be threadsafe...do NOT acquire and return the command from the pool.
-		cpyCmd.setContent(cmdEncoder->_cmdBuffer, tempBuff, (VkImage)_srcImage, _srcLayout, copyCnt, vkSrcCopies, false);
-		cpyCmd.encode(cmdEncoder);
+            for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
+                [mtlBlitEnc copyFromTexture: srcMTLTex
+                                sourceSlice: srcBaseLayer + layIdx
+                                sourceLevel: srcLevel
+                               sourceOrigin: srcOrigin
+                                 sourceSize: srcSize
+                                  toTexture: dstMTLTex
+                           destinationSlice: dstBaseLayer + layIdx
+                           destinationLevel: dstLevel
+                          destinationOrigin: dstOrigin];
+            }
+        }
+    }
 
-		// Copy from buffer to destination image
-		// Create and execute a temporary buffer image command.
-		// To be threadsafe...do NOT acquire and return the command from the pool.
-		cpyCmd.setContent(cmdEncoder->_cmdBuffer, tempBuff, (VkImage)_dstImage, _dstLayout, copyCnt, vkDstCopies, true);
-		cpyCmd.encode(cmdEncoder);
+    if (tmpBuffSize > 0) {
+        MVKBufferDescriptorData tempBuffData;
+        tempBuffData.size = tmpBuffSize;
+        tempBuffData.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
+        VkBuffer tempBuff = (VkBuffer)cmdEncoder->getCommandEncodingPool()->getTransferMVKBuffer(tempBuffData);
 
-	} else {
-		// Map the source pixel format to the dest pixel format through a texture view on the source texture.
-		// If the source and dest pixel formats are the same, this will simply degenerate to the source texture itself.
-		id<MTLTexture> srcMTLTex = _srcImage->getMTLTexture(_dstImage->getMTLPixelFormat());
-		id<MTLTexture> dstMTLTex = _dstImage->getMTLTexture();
-		if ( !srcMTLTex || !dstMTLTex ) { return; }
+        MVKCmdBufferImageCopy<N> cpyCmd;
 
-		id<MTLBlitCommandEncoder> mtlBlitEnc = cmdEncoder->getMTLBlitEncoder(commandUse);
+        // Copy from source image to buffer
+        // Create and execute a temporary buffer image command.
+        // To be threadsafe...do NOT acquire and return the command from the pool.
+        cpyCmd.setContent(cmdEncoder->_cmdBuffer, tempBuff, (VkImage)_srcImage, _srcLayout, copyCnt, vkSrcCopies, false);
+        cpyCmd.encode(cmdEncoder);
 
-		// If copies can be performed using direct texture-texture copying, do so
-		for (auto& cpyRgn : _vkImageCopies) {
-			uint32_t srcLevel = cpyRgn.srcSubresource.mipLevel;
-			MTLOrigin srcOrigin = mvkMTLOriginFromVkOffset3D(cpyRgn.srcOffset);
-			MTLSize srcSize = mvkClampMTLSize(mvkMTLSizeFromVkExtent3D(cpyRgn.extent),
-											  srcOrigin,
-											  mvkMTLSizeFromVkExtent3D(_srcImage->getExtent3D(srcLevel)));
-			uint32_t dstLevel = cpyRgn.dstSubresource.mipLevel;
-			MTLOrigin dstOrigin = mvkMTLOriginFromVkOffset3D(cpyRgn.dstOffset);
-			uint32_t srcBaseLayer = cpyRgn.srcSubresource.baseArrayLayer;
-			uint32_t dstBaseLayer = cpyRgn.dstSubresource.baseArrayLayer;
-			uint32_t layCnt = cpyRgn.srcSubresource.layerCount;
-
-			for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
-				[mtlBlitEnc copyFromTexture: srcMTLTex
-								sourceSlice: srcBaseLayer + layIdx
-								sourceLevel: srcLevel
-							   sourceOrigin: srcOrigin
-								 sourceSize: srcSize
-								  toTexture: dstMTLTex
-						   destinationSlice: dstBaseLayer + layIdx
-						   destinationLevel: dstLevel
-						  destinationOrigin: dstOrigin];
-			}
-		}
-	}
+        // Copy from buffer to destination image
+        // Create and execute a temporary buffer image command.
+        // To be threadsafe...do NOT acquire and return the command from the pool.
+        cpyCmd.setContent(cmdEncoder->_cmdBuffer, tempBuff, (VkImage)_dstImage, _dstLayout, copyCnt, vkDstCopies, true);
+        cpyCmd.encode(cmdEncoder);
+    }
 }
 
 template class MVKCmdCopyImage<1>;
@@ -208,33 +217,37 @@
 
 	_srcImage = (MVKImage*)srcImage;
 	_srcLayout = srcImageLayout;
-
 	_dstImage = (MVKImage*)dstImage;
 	_dstLayout = dstImageLayout;
 
 	_filter = filter;
 
 	_vkImageBlits.clear();		// Clear for reuse
-	for (uint32_t i = 0; i < regionCount; i++) {
-		_vkImageBlits.push_back(pRegions[i]);
+    for (uint32_t regionIdx = 0; regionIdx < regionCount; regionIdx++) {
+        auto& vkIR = pRegions[regionIdx];
+        uint8_t srcPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(vkIR.srcSubresource.aspectMask);
+
+        // Validate - depth stencil formats cannot be scaled or inverted
+        MTLPixelFormat srcMTLPixFmt = _srcImage->getMTLPixelFormat(srcPlaneIndex);
+        if (pixFmts->isDepthFormat(srcMTLPixFmt) || pixFmts->isStencilFormat(srcMTLPixFmt)) {
+            for (auto& vkIB : _vkImageBlits) {
+                if ( !(canCopyFormats(vkIB) && canCopy(vkIB)) ) {
+                    return reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdBlitImage(): Scaling or inverting depth/stencil images is not supported.");
+                }
+            }
+        }
+
+		_vkImageBlits.push_back(vkIR);
 	}
 
-	// Validate - depth stencil formats cannot be scaled or inverted
-	MTLPixelFormat srcMTLPixFmt = _srcImage->getMTLPixelFormat();
-	if (pixFmts->isDepthFormat(srcMTLPixFmt) || pixFmts->isStencilFormat(srcMTLPixFmt)) {
-		bool canCopyFmts = canCopyFormats();
-		for (auto& vkIB : _vkImageBlits) {
-			if ( !(canCopyFmts && canCopy(vkIB)) ) {
-				return reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdBlitImage(): Scaling or inverting depth/stencil images is not supported.");
-			}
-		}
-	}
 	return VK_SUCCESS;
 }
 
 template <size_t N>
-bool MVKCmdBlitImage<N>::canCopyFormats() {
-	return ((_srcImage->getMTLPixelFormat() == _dstImage->getMTLPixelFormat()) &&
+bool MVKCmdBlitImage<N>::canCopyFormats(const VkImageBlit& region) {
+    uint8_t srcPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(region.srcSubresource.aspectMask);
+    uint8_t dstPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(region.dstSubresource.aspectMask);
+	return ((_srcImage->getMTLPixelFormat(srcPlaneIndex) == _dstImage->getMTLPixelFormat(dstPlaneIndex)) &&
 			(_dstImage->getSampleCount() == _srcImage->getSampleCount()));
 }
 
@@ -255,8 +268,10 @@
     const VkOffset3D& do1 = region.dstOffsets[1];
 
     // Get the extents of the source and destination textures.
-    VkExtent3D srcExtent = _srcImage->getExtent3D(region.srcSubresource.mipLevel);
-    VkExtent3D dstExtent = _dstImage->getExtent3D(region.dstSubresource.mipLevel);
+    uint8_t srcPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(region.srcSubresource.aspectMask);
+    uint8_t dstPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(region.dstSubresource.aspectMask);
+    VkExtent3D srcExtent = _srcImage->getExtent3D(srcPlaneIndex, region.srcSubresource.mipLevel);
+    VkExtent3D dstExtent = _dstImage->getExtent3D(dstPlaneIndex, region.dstSubresource.mipLevel);
 
     // Determine the bottom-left and top-right corners of the source and destination
     // texture regions, each as a fraction of the corresponding texture size.
@@ -317,9 +332,8 @@
 
 	// Separate BLITs into those that are really just simple texure region copies,
 	// and those that require rendering
-	bool canCopyFmts = canCopyFormats();
 	for (auto& vkIB : _vkImageBlits) {
-		if (canCopyFmts && canCopy(vkIB)) {
+		if (canCopyFormats(vkIB) && canCopy(vkIB)) {
 
 			const VkOffset3D& so0 = vkIB.srcOffsets[0];
 			const VkOffset3D& so1 = vkIB.srcOffsets[1];
@@ -351,59 +365,61 @@
 	}
 
 	// Perform those BLITs that require rendering to destination texture.
-	id<MTLTexture> srcMTLTex = _srcImage->getMTLTexture();
-	id<MTLTexture> dstMTLTex = _dstImage->getMTLTexture();
-	if (blitCnt && srcMTLTex && dstMTLTex) {
+    for (uint32_t blitIdx = 0; blitIdx < blitCnt; blitIdx++) {
+        auto& mvkIBR = mvkBlitRenders[blitIdx];
 
-		cmdEncoder->endCurrentMetalEncoding();
+        uint8_t srcPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(mvkIBR.region.srcSubresource.aspectMask);
+        uint8_t dstPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(mvkIBR.region.dstSubresource.aspectMask);
 
-		MTLRenderPassDescriptor* mtlRPD = [MTLRenderPassDescriptor renderPassDescriptor];
-		MTLRenderPassColorAttachmentDescriptor* mtlColorAttDesc = mtlRPD.colorAttachments[0];
-		mtlColorAttDesc.loadAction = MTLLoadActionLoad;
-		mtlColorAttDesc.storeAction = MTLStoreActionStore;
-		mtlColorAttDesc.texture = dstMTLTex;
+        id<MTLTexture> srcMTLTex = _srcImage->getMTLTexture(srcPlaneIndex);
+        id<MTLTexture> dstMTLTex = _dstImage->getMTLTexture(dstPlaneIndex);
+        if (blitCnt && srcMTLTex && dstMTLTex) {
+            cmdEncoder->endCurrentMetalEncoding();
 
-		MVKRPSKeyBlitImg blitKey;
-		blitKey.srcMTLPixelFormat = _srcImage->getMTLPixelFormat();
-		blitKey.srcMTLTextureType = _srcImage->getMTLTextureType();
-		blitKey.dstMTLPixelFormat = _dstImage->getMTLPixelFormat();
-		blitKey.srcFilter = mvkMTLSamplerMinMagFilterFromVkFilter(_filter);
-		blitKey.dstSampleCount = mvkSampleCountFromVkSampleCountFlagBits(_dstImage->getSampleCount());
-		id<MTLRenderPipelineState> mtlRPS = cmdEncoder->getCommandEncodingPool()->getCmdBlitImageMTLRenderPipelineState(blitKey);
+            MTLRenderPassDescriptor* mtlRPD = [MTLRenderPassDescriptor renderPassDescriptor];
+            MTLRenderPassColorAttachmentDescriptor* mtlColorAttDesc = mtlRPD.colorAttachments[0];
+            mtlColorAttDesc.loadAction = MTLLoadActionLoad;
+            mtlColorAttDesc.storeAction = MTLStoreActionStore;
+            mtlColorAttDesc.texture = dstMTLTex;
 
-		uint32_t vtxBuffIdx = cmdEncoder->getDevice()->getMetalBufferIndexForVertexAttributeBinding(kMVKVertexContentBufferIndex);
+            MVKRPSKeyBlitImg blitKey;
+            blitKey.srcMTLPixelFormat = _srcImage->getMTLPixelFormat(srcPlaneIndex);
+            blitKey.srcMTLTextureType = _srcImage->getMTLTextureType();
+            blitKey.dstMTLPixelFormat = _dstImage->getMTLPixelFormat(dstPlaneIndex);
+            blitKey.srcFilter = mvkMTLSamplerMinMagFilterFromVkFilter(_filter);
+            blitKey.dstSampleCount = mvkSampleCountFromVkSampleCountFlagBits(_dstImage->getSampleCount());
+            id<MTLRenderPipelineState> mtlRPS = cmdEncoder->getCommandEncodingPool()->getCmdBlitImageMTLRenderPipelineState(blitKey);
 
-		for (uint32_t blitIdx = 0; blitIdx < blitCnt; blitIdx++) {
-			auto& mvkIBR = mvkBlitRenders[blitIdx];
+            uint32_t vtxBuffIdx = cmdEncoder->getDevice()->getMetalBufferIndexForVertexAttributeBinding(kMVKVertexContentBufferIndex);
+            
+            mtlColorAttDesc.level = mvkIBR.region.dstSubresource.mipLevel;
 
-			mtlColorAttDesc.level = mvkIBR.region.dstSubresource.mipLevel;
+            uint32_t layCnt = mvkIBR.region.srcSubresource.layerCount;
+            for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
+                // Update the render pass descriptor for the texture level and slice, and create a render encoder.
+                mtlColorAttDesc.slice = mvkIBR.region.dstSubresource.baseArrayLayer + layIdx;
+                id<MTLRenderCommandEncoder> mtlRendEnc = [cmdEncoder->_mtlCmdBuffer renderCommandEncoderWithDescriptor: mtlRPD];
+                setLabelIfNotNil(mtlRendEnc, mvkMTLRenderCommandEncoderLabel(commandUse));
 
-			uint32_t layCnt = mvkIBR.region.srcSubresource.layerCount;
-			for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
-				// Update the render pass descriptor for the texture level and slice, and create a render encoder.
-				mtlColorAttDesc.slice = mvkIBR.region.dstSubresource.baseArrayLayer + layIdx;
-				id<MTLRenderCommandEncoder> mtlRendEnc = [cmdEncoder->_mtlCmdBuffer renderCommandEncoderWithDescriptor: mtlRPD];
-				setLabelIfNotNil(mtlRendEnc, mvkMTLRenderCommandEncoderLabel(commandUse));
+                [mtlRendEnc pushDebugGroup: @"vkCmdBlitImage"];
+                [mtlRendEnc setRenderPipelineState: mtlRPS];
+                cmdEncoder->setVertexBytes(mtlRendEnc, mvkIBR.vertices, sizeof(mvkIBR.vertices), vtxBuffIdx);
+                [mtlRendEnc setFragmentTexture: srcMTLTex atIndex: 0];
 
-				[mtlRendEnc pushDebugGroup: @"vkCmdBlitImage"];
-				[mtlRendEnc setRenderPipelineState: mtlRPS];
-				cmdEncoder->setVertexBytes(mtlRendEnc, mvkIBR.vertices, sizeof(mvkIBR.vertices), vtxBuffIdx);
-				[mtlRendEnc setFragmentTexture: srcMTLTex atIndex: 0];
+                struct {
+                    uint slice;
+                    float lod;
+                } texSubRez;
+                texSubRez.slice = mvkIBR.region.srcSubresource.baseArrayLayer + layIdx;
+                texSubRez.lod = mvkIBR.region.srcSubresource.mipLevel;
+                cmdEncoder->setFragmentBytes(mtlRendEnc, &texSubRez, sizeof(texSubRez), 0);
 
-				struct {
-					uint slice;
-					float lod;
-				} texSubRez;
-				texSubRez.slice = mvkIBR.region.srcSubresource.baseArrayLayer + layIdx;
-				texSubRez.lod = mvkIBR.region.srcSubresource.mipLevel;
-				cmdEncoder->setFragmentBytes(mtlRendEnc, &texSubRez, sizeof(texSubRez), 0);
-
-				[mtlRendEnc drawPrimitives: MTLPrimitiveTypeTriangleStrip vertexStart: 0 vertexCount: kMVKBlitVertexCount];
-				[mtlRendEnc popDebugGroup];
-				[mtlRendEnc endEncoding];
-			}
-		}
-	}
+                [mtlRendEnc drawPrimitives: MTLPrimitiveTypeTriangleStrip vertexStart: 0 vertexCount: kMVKBlitVertexCount];
+                [mtlRendEnc popDebugGroup];
+                [mtlRendEnc endEncoding];
+            }
+        }
+    }
 }
 
 template class MVKCmdBlitImage<1>;
@@ -428,15 +444,18 @@
 
 	_vkImageResolves.clear();	// Clear for reuse
 	_vkImageResolves.reserve(regionCount);
-    for (uint32_t i = 0; i < regionCount; i++) {
-		_vkImageResolves.push_back(pRegions[i]);
-    }
+    for (uint32_t regionIdx = 0; regionIdx < regionCount; regionIdx++) {
+        auto& vkIR = pRegions[regionIdx];
+        uint8_t dstPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(vkIR.dstSubresource.aspectMask);
 
-	// Validate
-	MVKPixelFormats* pixFmts = cmdBuff->getPixelFormats();
-	if ( !mvkAreAllFlagsEnabled(pixFmts->getCapabilities(_dstImage->getMTLPixelFormat()), kMVKMTLFmtCapsResolve) ) {
-		return reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdResolveImage(): %s cannot be used as a resolve destination on this device.", pixFmts->getName(_dstImage->getVkFormat()));
-	}
+        // Validate
+        MVKPixelFormats* pixFmts = cmdBuff->getPixelFormats();
+        if ( !mvkAreAllFlagsEnabled(pixFmts->getCapabilities(_dstImage->getMTLPixelFormat(dstPlaneIndex)), kMVKMTLFmtCapsResolve) ) {
+            return reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdResolveImage(): %s cannot be used as a resolve destination on this device.", pixFmts->getName(_dstImage->getVkFormat()));
+        }
+
+		_vkImageResolves.push_back(vkIR);
+    }
 
 	return VK_SUCCESS;
 }
@@ -457,10 +476,12 @@
 	uint32_t sliceCnt = 0;
 
 	for (VkImageResolve& vkIR : _vkImageResolves) {
+        uint8_t srcPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(vkIR.srcSubresource.aspectMask);
+        uint8_t dstPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(vkIR.dstSubresource.aspectMask);
 
 		uint32_t mipLvl = vkIR.dstSubresource.mipLevel;
-		VkExtent3D srcImgExt = _srcImage->getExtent3D(mipLvl);
-		VkExtent3D dstImgExt = _dstImage->getExtent3D(mipLvl);
+		VkExtent3D srcImgExt = _srcImage->getExtent3D(srcPlaneIndex, mipLvl);
+		VkExtent3D dstImgExt = _dstImage->getExtent3D(dstPlaneIndex, mipLvl);
 
 		// If the region does not cover the entire content of the source level, expand the
 		// destination content in the region to the temporary image. The purpose of this
@@ -496,25 +517,23 @@
 		uint32_t layCnt = vkIR.dstSubresource.layerCount;
 		for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
 			MVKMetalResolveSlice& rslvSlice = mtlResolveSlices[sliceCnt++];
+            rslvSlice.copyRegion = &cpyRgn;
 			rslvSlice.level = vkIR.dstSubresource.mipLevel;
 			rslvSlice.slice = baseLayer + layIdx;
 		}
 	}
 
-	id<MTLTexture> srcMTLTex;
-	if (expCnt == 0) {
-		// Expansion and copying is not required. Each mip level of the source image
-		// is being resolved entirely. Resolve directly from the source image.
-		srcMTLTex = _srcImage->getMTLTexture();
-
-	} else {
+    // Expansion and copying is not required. Each mip level of the source image
+    // is being resolved entirely. Resolve directly from the source image.
+    MVKImage* xfrImage = _srcImage;
+	if (expCnt) {
 		// Expansion and copying is required. Acquire a temporary transfer image, expand
 		// the destination image into it, copy from the source image to the temporary image,
 		// and then resolve from the temporary image to the destination image.
 		MVKImageDescriptorData xferImageData;
 		_dstImage->getTransferDescriptorData(xferImageData);
 		xferImageData.samples = _srcImage->getSampleCount();
-		MVKImage* xfrImage = cmdEncoder->getCommandEncodingPool()->getTransferMVKImage(xferImageData);
+		xfrImage = cmdEncoder->getCommandEncodingPool()->getTransferMVKImage(xferImageData);
 
 		// Expand the current content of the destination image to the temporary transfer image.
 		MVKCmdBlitImage<N> expCmd;
@@ -530,23 +549,24 @@
 						   (VkImage)xfrImage, _dstLayout,
 						   copyCnt, copyRegions);
 		copyCmd.encode(cmdEncoder, kMVKCommandUseResolveCopyImage);
-
-		srcMTLTex = xfrImage->getMTLTexture();
 	}
 
 	cmdEncoder->endCurrentMetalEncoding();
 
 	MTLRenderPassDescriptor* mtlRPD = [MTLRenderPassDescriptor renderPassDescriptor];
-	MTLRenderPassColorAttachmentDescriptor* mtlColorAttDesc = mtlRPD.colorAttachments[0];
-	mtlColorAttDesc.loadAction = MTLLoadActionLoad;
-	mtlColorAttDesc.storeAction = MTLStoreActionMultisampleResolve;
-	mtlColorAttDesc.texture = srcMTLTex;
-	mtlColorAttDesc.resolveTexture = _dstImage->getMTLTexture();
+    MTLRenderPassColorAttachmentDescriptor* mtlColorAttDesc = mtlRPD.colorAttachments[0];
+    mtlColorAttDesc.loadAction = MTLLoadActionLoad;
+    mtlColorAttDesc.storeAction = MTLStoreActionMultisampleResolve;
 
 	// For each resolve slice, update the render pass descriptor for
 	// the texture level and slice and create a render encoder.
 	for (uint32_t sIdx = 0; sIdx < sliceCnt; sIdx++) {
 		MVKMetalResolveSlice& rslvSlice = mtlResolveSlices[sIdx];
+        uint8_t srcPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(rslvSlice.copyRegion->srcSubresource.aspectMask);
+        uint8_t dstPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(rslvSlice.copyRegion->dstSubresource.aspectMask);
+
+        mtlColorAttDesc.texture = xfrImage->getMTLTexture(srcPlaneIndex);
+        mtlColorAttDesc.resolveTexture = _dstImage->getMTLTexture(dstPlaneIndex);
 		mtlColorAttDesc.level = rslvSlice.level;
 		mtlColorAttDesc.slice = rslvSlice.slice;
 		mtlColorAttDesc.resolveLevel = rslvSlice.level;
@@ -675,12 +695,13 @@
     _bufferImageCopyRegions.reserve(regionCount);
     for (uint32_t i = 0; i < regionCount; i++) {
         _bufferImageCopyRegions.push_back(pRegions[i]);
-    }
-
-    // Validate
-    if ( !_image->hasExpectedTexelSize() ) {
-        const char* cmdName = _toImage ? "vkCmdCopyBufferToImage" : "vkCmdCopyImageToBuffer";
-        return reportError(VK_ERROR_FORMAT_NOT_SUPPORTED, "%s(): The image is using Metal format %s as a substitute for Vulkan format %s. Since the pixel size is different, content for the image cannot be copied to or from a buffer.", cmdName, cmdBuff->getPixelFormats()->getName(_image->getMTLPixelFormat()), cmdBuff->getPixelFormats()->getName(_image->getVkFormat()));
+        
+        // Validate
+        if ( !_image->hasExpectedTexelSize() ) {
+            MTLPixelFormat mtlPixFmt = _image->getMTLPixelFormat(MVKImage::getPlaneFromVkImageAspectFlags(pRegions[i].imageSubresource.aspectMask));
+            const char* cmdName = _toImage ? "vkCmdCopyBufferToImage" : "vkCmdCopyImageToBuffer";
+            return reportError(VK_ERROR_FORMAT_NOT_SUPPORTED, "%s(): The image is using Metal format %s as a substitute for Vulkan format %s. Since the pixel size is different, content for the image cannot be copied to or from a buffer.", cmdName, cmdBuff->getPixelFormats()->getName(mtlPixFmt), cmdBuff->getPixelFormats()->getName(_image->getVkFormat()));
+        }
     }
 
 	return VK_SUCCESS;
@@ -689,21 +710,23 @@
 template <size_t N>
 void MVKCmdBufferImageCopy<N>::encode(MVKCommandEncoder* cmdEncoder) {
     id<MTLBuffer> mtlBuffer = _buffer->getMTLBuffer();
-    id<MTLTexture> mtlTexture = _image->getMTLTexture();
-    if ( !mtlBuffer || !mtlTexture ) { return; }
+    if ( !mtlBuffer ) { return; }
 
 	NSUInteger mtlBuffOffsetBase = _buffer->getMTLBufferOffset();
-    MTLPixelFormat mtlPixFmt = _image->getMTLPixelFormat();
     MVKCommandUse cmdUse = _toImage ? kMVKCommandUseCopyBufferToImage : kMVKCommandUseCopyImageToBuffer;
 	MVKPixelFormats* pixFmts = cmdEncoder->getPixelFormats();
 
     for (auto& cpyRgn : _bufferImageCopyRegions) {
+        uint8_t planeIndex = MVKImage::getPlaneFromVkImageAspectFlags(cpyRgn.imageSubresource.aspectMask);
+        MTLPixelFormat mtlPixFmt = _image->getMTLPixelFormat(planeIndex);
+        id<MTLTexture> mtlTexture = _image->getMTLTexture(planeIndex);
+        if ( !mtlTexture ) { continue; }
 
 		uint32_t mipLevel = cpyRgn.imageSubresource.mipLevel;
         MTLOrigin mtlTxtOrigin = mvkMTLOriginFromVkOffset3D(cpyRgn.imageOffset);
 		MTLSize mtlTxtSize = mvkClampMTLSize(mvkMTLSizeFromVkExtent3D(cpyRgn.imageExtent),
 											 mtlTxtOrigin,
-											 mvkMTLSizeFromVkExtent3D(_image->getExtent3D(mipLevel)));
+											 mvkMTLSizeFromVkExtent3D(_image->getExtent3D(planeIndex, mipLevel)));
 		NSUInteger mtlBuffOffset = mtlBuffOffsetBase + cpyRgn.bufferOffset;
 
         uint32_t buffImgWd = cpyRgn.bufferRowLength;
@@ -1075,29 +1098,31 @@
     // Add subresource ranges
     _subresourceRanges.clear();		// Clear for reuse
     _subresourceRanges.reserve(rangeCount);
-    for (uint32_t i = 0; i < rangeCount; i++) {
-        _subresourceRanges.push_back(pRanges[i]);
-    }
+    bool isDS = isDepthStencilClear();
+    for (uint32_t rangeIdx = 0; rangeIdx < rangeCount; rangeIdx++) {
+        auto& vkIR = pRanges[rangeIdx];
+        uint8_t planeIndex = MVKImage::getPlaneFromVkImageAspectFlags(vkIR.aspectMask);
 
-	// Validate
-	bool isDS = isDepthStencilClear();
-	if (_image->getImageType() == VK_IMAGE_TYPE_1D) {
-		return reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdClear%sImage(): Native 1D images cannot be cleared on this device. Consider enabling MVK_CONFIG_TEXTURE_1D_AS_2D.", (isDS ? "DepthStencil" : "Color"));
-	}
-	MVKMTLFmtCaps mtlFmtCaps = cmdBuff->getPixelFormats()->getCapabilities(_image->getMTLPixelFormat());
-	if ((isDS && !mvkAreAllFlagsEnabled(mtlFmtCaps, kMVKMTLFmtCapsDSAtt)) ||
-		( !isDS && !mvkAreAllFlagsEnabled(mtlFmtCaps, kMVKMTLFmtCapsColorAtt))) {
-		return reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdClear%sImage(): Format %s cannot be cleared on this device.", (isDS ? "DepthStencil" : "Color"), cmdBuff->getPixelFormats()->getName(_image->getVkFormat()));
-	}
+        // Validate
+        MVKMTLFmtCaps mtlFmtCaps = cmdBuff->getPixelFormats()->getCapabilities(_image->getMTLPixelFormat(planeIndex));
+        if ((isDS && !mvkAreAllFlagsEnabled(mtlFmtCaps, kMVKMTLFmtCapsDSAtt)) ||
+            ( !isDS && !mvkAreAllFlagsEnabled(mtlFmtCaps, kMVKMTLFmtCapsColorAtt))) {
+            return reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdClear%sImage(): Format %s cannot be cleared on this device.", (isDS ? "DepthStencil" : "Color"), cmdBuff->getPixelFormats()->getName(_image->getVkFormat()));
+        }
+        
+        _subresourceRanges.push_back(vkIR);
+    }
+    
+    // Validate
+    if (_image->getImageType() == VK_IMAGE_TYPE_1D) {
+        return reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdClear%sImage(): Native 1D images cannot be cleared on this device. Consider enabling MVK_CONFIG_TEXTURE_1D_AS_2D.", (isDS ? "DepthStencil" : "Color"));
+    }
 
 	return VK_SUCCESS;
 }
 
 template <size_t N>
 void MVKCmdClearImage<N>::encode(MVKCommandEncoder* cmdEncoder) {
-	id<MTLTexture> imgMTLTex = _image->getMTLTexture();
-    if ( !imgMTLTex ) { return; }
-
 	bool isDS = isDepthStencilClear();
 	NSString* mtlRendEncName = (isDS
 								? mvkMTLRenderCommandEncoderLabel(kMVKCommandUseClearDepthStencilImage)
@@ -1107,6 +1132,8 @@
 
 	MVKPixelFormats* pixFmts = cmdEncoder->getPixelFormats();
 	for (auto& srRange : _subresourceRanges) {
+        id<MTLTexture> imgMTLTex = _image->getMTLTexture(MVKImage::getPlaneFromVkImageAspectFlags(srRange.aspectMask));
+        if ( !imgMTLTex ) { continue; }
 
 		MTLRenderPassDescriptor* mtlRPDesc = [MTLRenderPassDescriptor renderPassDescriptor];
 		MTLRenderPassColorAttachmentDescriptor* mtlRPCADesc = nil;
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm
index d63ba37..c06b32a 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm
@@ -598,22 +598,33 @@
 
 void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) {
 
-    MVKPipeline* pipeline = _cmdEncoder->_graphicsPipelineState.getPipeline();
+    MVKGraphicsPipeline* pipeline = (MVKGraphicsPipeline*)_cmdEncoder->_graphicsPipelineState.getPipeline();
     bool fullImageViewSwizzle = pipeline->fullImageViewSwizzle() || _cmdEncoder->getDevice()->_pMetalFeatures->nativeTextureSwizzle;
-    bool forTessellation = ((MVKGraphicsPipeline*)pipeline)->isTessellationPipeline();
+    bool forTessellation = pipeline->isTessellationPipeline();
 
     if (stage == (forTessellation ? kMVKGraphicsStageVertex : kMVKGraphicsStageRasterization)) {
         encodeBindings(kMVKShaderStageVertex, "vertex", fullImageViewSwizzle,
-                       [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b)->void {
-                           if (b.isInline)
+                       [pipeline](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b)->void {
+					       if (b.isInline) {
                                cmdEncoder->setVertexBytes(cmdEncoder->_mtlRenderEncoder,
                                                           b.mtlBytes,
                                                           b.size,
                                                           b.index);
-                           else
+					       } else {
                                [cmdEncoder->_mtlRenderEncoder setVertexBuffer: b.mtlBuffer
                                                                        offset: b.offset
                                                                       atIndex: b.index];
+
+							   // Add any translated vertex bindings for this binding
+							   auto xltdVtxBindings = pipeline->getTranslatedVertexBindings();
+							   for (auto& xltdBind : xltdVtxBindings) {
+								   if (b.index == pipeline->getMetalBufferIndexForVertexAttributeBinding(xltdBind.binding)) {
+									   [cmdEncoder->_mtlRenderEncoder setVertexBuffer: b.mtlBuffer
+																			   offset: b.offset + xltdBind.translationOffset
+																			  atIndex: pipeline->getMetalBufferIndexForVertexAttributeBinding(xltdBind.translationBinding)];
+								   }
+							   }
+					       }
                        },
                        [](MVKCommandEncoder* cmdEncoder, MVKMTLBufferBinding& b, const MVKArrayRef<uint32_t>& s)->void {
                            cmdEncoder->setVertexBytes(cmdEncoder->_mtlRenderEncoder,
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm
index 07a2dcf..a92b86e 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm
@@ -369,7 +369,7 @@
         .initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZED
     };
 	MVKImage* mvkImg = _device->createImage(&createInfo, nullptr);
-	mvkImg->bindDeviceMemory(_transferImageMemory, 0);
+	mvkImg->bindDeviceMemory(_transferImageMemory, 0, 0);
 	return mvkImg;
 }
 
diff --git a/MoltenVK/MoltenVK/Commands/MVKMTLBufferAllocation.mm b/MoltenVK/MoltenVK/Commands/MVKMTLBufferAllocation.mm
index 7e1bf25..a09386b 100644
--- a/MoltenVK/MoltenVK/Commands/MVKMTLBufferAllocation.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKMTLBufferAllocation.mm
@@ -81,7 +81,7 @@
 	MVKAssert(length <= _maxAllocationLength, "This MVKMTLBufferAllocator has been configured to dispense MVKMTLBufferRegions no larger than %lu bytes.", (unsigned long)_maxAllocationLength);
 
     // Convert max length to the next power-of-two exponent to use as a lookup
-    uint32_t p2Exp = mvkPowerOfTwoExponent(length);
+    NSUInteger p2Exp = mvkPowerOfTwoExponent(length);
 	MVKMTLBufferAllocationPool* pRP = _regionPools[p2Exp];
 	return _makeThreadSafe ? pRP->acquireObjectSafely() : pRP->acquireObject();
 }
@@ -91,7 +91,7 @@
 	_makeThreadSafe = makeThreadSafe;
 
     // Convert max length to the next power-of-two exponent
-    uint32_t maxP2Exp = mvkPowerOfTwoExponent(_maxAllocationLength);
+    NSUInteger maxP2Exp = mvkPowerOfTwoExponent(_maxAllocationLength);
 
     // Populate the array of region pools to cover the maximum region size
     _regionPools.reserve(maxP2Exp + 1);
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.h b/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.h
index f920826..c00c5bc 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.h
@@ -40,13 +40,13 @@
 #pragma mark Resource memory
 
 	/** Returns the memory requirements of this resource by populating the specified structure. */
-	VkResult getMemoryRequirements(VkMemoryRequirements* pMemoryRequirements) override;
+	VkResult getMemoryRequirements(VkMemoryRequirements* pMemoryRequirements);
 
 	/** Returns the memory requirements of this resource by populating the specified structure. */
-	VkResult getMemoryRequirements(const void* pInfo, VkMemoryRequirements2* pMemoryRequirements) override;
+	VkResult getMemoryRequirements(const void* pInfo, VkMemoryRequirements2* pMemoryRequirements);
 
 	/** Binds this resource to the specified offset within the specified memory allocation. */
-	VkResult bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset) override;
+	VkResult bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset);
 
 	/** Binds this resource to the specified offset within the specified memory allocation. */
 	VkResult bindDeviceMemory2(const VkBindBufferMemoryInfo* pBindInfo);
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptor.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptor.mm
index 7fa99d5..140c31b 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptor.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptor.mm
@@ -148,7 +148,11 @@
                 MVKBuffer* buffer = (MVKBuffer*)bufferInfo.buffer;
                 bb.mtlBuffer = buffer->getMTLBuffer();
                 bb.offset = buffer->getMTLBufferOffset() + bufferInfo.offset;
-				bb.size = (uint32_t)buffer->getByteCount();
+                if (bufferInfo.range == VK_WHOLE_SIZE)
+                    bb.size = (uint32_t)(buffer->getByteCount() - bb.offset);
+                else
+                    bb.size = (uint32_t)bufferInfo.range;
+
                 for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
                     if (_applyToStage[i]) {
                         bb.index = mtlIdxs.stages[i].bufferIndex + rezIdx;
@@ -185,33 +189,32 @@
             case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: {
                 const auto& imageInfo = get<VkDescriptorImageInfo>(pData, stride, rezIdx - dstArrayElement);
                 MVKImageView* imageView = (MVKImageView*)imageInfo.imageView;
-                tb.mtlTexture = imageView->getMTLTexture();
-                if (_info.descriptorType == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE) {
-                    tb.swizzle = imageView->getPackedSwizzle();
-                } else {
-                    tb.swizzle = 0;
-                }
-                if (_info.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) {
-                    id<MTLTexture> mtlTex = tb.mtlTexture;
-                    if (mtlTex.parentTexture) { mtlTex = mtlTex.parentTexture; }
-                    bb.mtlBuffer = mtlTex.buffer;
-                    bb.offset = mtlTex.bufferOffset;
-                    bb.size = (uint32_t)(mtlTex.height * mtlTex.bufferBytesPerRow);
-                }
-                for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
-                    if (_applyToStage[i]) {
-                        tb.index = mtlIdxs.stages[i].textureIndex + rezIdx;
-                        if (i == kMVKShaderStageCompute) {
-							if (cmdEncoder) { cmdEncoder->_computeResourcesState.bindTexture(tb); }
-                        } else {
-							if (cmdEncoder) { cmdEncoder->_graphicsResourcesState.bindTexture(MVKShaderStage(i), tb); }
-                        }
-                        if (_info.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) {
-                            bb.index = mtlIdxs.stages[i].bufferIndex + rezIdx;
+                uint8_t planeCount = (imageView) ? imageView->getPlaneCount() : 1;
+                for (uint8_t planeIndex = 0; planeIndex < planeCount; planeIndex++) {
+                    tb.mtlTexture = imageView->getMTLTexture(planeIndex);
+                    tb.swizzle = (_info.descriptorType == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE) ? imageView->getPackedSwizzle() : 0;
+                    if (_info.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) {
+                        id<MTLTexture> mtlTex = tb.mtlTexture;
+                        if (mtlTex.parentTexture) { mtlTex = mtlTex.parentTexture; }
+                        bb.mtlBuffer = mtlTex.buffer;
+                        bb.offset = mtlTex.bufferOffset;
+                        bb.size = (uint32_t)(mtlTex.height * mtlTex.bufferBytesPerRow);
+                    }
+                    for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
+                        if (_applyToStage[i]) {
+                            tb.index = mtlIdxs.stages[i].textureIndex + rezIdx + planeIndex;
                             if (i == kMVKShaderStageCompute) {
-                                if (cmdEncoder) { cmdEncoder->_computeResourcesState.bindBuffer(bb); }
+                                if (cmdEncoder) { cmdEncoder->_computeResourcesState.bindTexture(tb); }
                             } else {
-                                if (cmdEncoder) { cmdEncoder->_graphicsResourcesState.bindBuffer(MVKShaderStage(i), bb); }
+                                if (cmdEncoder) { cmdEncoder->_graphicsResourcesState.bindTexture(MVKShaderStage(i), tb); }
+                            }
+                            if (_info.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) {
+                                bb.index = mtlIdxs.stages[i].bufferIndex + rezIdx;
+                                if (i == kMVKShaderStageCompute) {
+                                    if (cmdEncoder) { cmdEncoder->_computeResourcesState.bindBuffer(bb); }
+                                } else {
+                                    if (cmdEncoder) { cmdEncoder->_graphicsResourcesState.bindBuffer(MVKShaderStage(i), bb); }
+                                }
                             }
                         }
                     }
@@ -276,30 +279,29 @@
             case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
                 const auto& imageInfo = get<VkDescriptorImageInfo>(pData, stride, rezIdx - dstArrayElement);
                 MVKImageView* imageView = (MVKImageView*)imageInfo.imageView;
-                tb.mtlTexture = imageView->getMTLTexture();
-                if (imageView) {
-                    tb.swizzle = imageView->getPackedSwizzle();
-                } else {
-                    tb.swizzle = 0;
-                }
-				MVKSampler* sampler;
-				if (_immutableSamplers.empty()) {
-					sampler = (MVKSampler*)imageInfo.sampler;
-					validate(sampler);
-				} else {
-					sampler = _immutableSamplers[rezIdx];
-				}
-                sb.mtlSamplerState = sampler->getMTLSamplerState();
-                for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
-                    if (_applyToStage[i]) {
-                        tb.index = mtlIdxs.stages[i].textureIndex + rezIdx;
-                        sb.index = mtlIdxs.stages[i].samplerIndex + rezIdx;
-                        if (i == kMVKShaderStageCompute) {
-							if (cmdEncoder) { cmdEncoder->_computeResourcesState.bindTexture(tb); }
-							if (cmdEncoder) { cmdEncoder->_computeResourcesState.bindSamplerState(sb); }
-                        } else {
-							if (cmdEncoder) { cmdEncoder->_graphicsResourcesState.bindTexture(MVKShaderStage(i), tb); }
-							if (cmdEncoder) { cmdEncoder->_graphicsResourcesState.bindSamplerState(MVKShaderStage(i), sb); }
+                uint8_t planeCount = (imageView) ? imageView->getPlaneCount() : 1;
+                for (uint8_t planeIndex = 0; planeIndex < planeCount; planeIndex++) {
+                    tb.mtlTexture = imageView->getMTLTexture(planeIndex);
+                    tb.swizzle = (imageView) ? imageView->getPackedSwizzle() : 0;
+                    MVKSampler* sampler;
+                    if (_immutableSamplers.empty()) {
+                        sampler = (MVKSampler*)imageInfo.sampler;
+                        validate(sampler);
+                    } else {
+                        sampler = _immutableSamplers[rezIdx];
+                    }
+                    sb.mtlSamplerState = sampler->getMTLSamplerState();
+                    for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
+                        if (_applyToStage[i]) {
+                            tb.index = mtlIdxs.stages[i].textureIndex + rezIdx + planeIndex;
+                            sb.index = mtlIdxs.stages[i].samplerIndex + rezIdx;
+                            if (i == kMVKShaderStageCompute) {
+                                if (cmdEncoder) { cmdEncoder->_computeResourcesState.bindTexture(tb); }
+                                if (cmdEncoder) { cmdEncoder->_computeResourcesState.bindSamplerState(sb); }
+                            } else {
+                                if (cmdEncoder) { cmdEncoder->_graphicsResourcesState.bindTexture(MVKShaderStage(i), tb); }
+                                if (cmdEncoder) { cmdEncoder->_graphicsResourcesState.bindSamplerState(MVKShaderStage(i), sb); }
+                            }
                         }
                     }
                 }
@@ -323,7 +325,7 @@
 // If depth compare is required, but unavailable on the device, the sampler can only be used as an immutable sampler
 bool MVKDescriptorSetLayoutBinding::validate(MVKSampler* mvkSampler) {
 	if (mvkSampler->getRequiresConstExprSampler()) {
-		mvkSampler->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdPushDescriptorSet/vkCmdPushDescriptorSetWithTemplate(): Depth texture samplers using a compare operation can only be used as immutable samplers on this device.");
+		mvkSampler->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdPushDescriptorSet/vkCmdPushDescriptorSetWithTemplate(): Tried to push an immutable sampler.");
 		return false;
 	}
 	return true;
@@ -433,7 +435,19 @@
 				if ( !_device->_pMetalFeatures->arrayOfSamplers ) {
 					_layout->setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "Device %s does not support arrays of samplers.", _device->getName()));
 				}
+                if ( pBinding->pImmutableSamplers ) {
+                    _layout->setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "Sampler arrays contaning multi planar samplers are not supported."));
+                }
 			}
+
+            if ( pBinding->pImmutableSamplers ) {
+                for (uint32_t i = 0; i < pBinding->descriptorCount; i++) {
+                    uint8_t planeCount = ((MVKSampler*)pBinding->pImmutableSamplers[i])->getPlaneCount();
+                    if (planeCount > 1) {
+                        pDescSetCounts->textureIndex += planeCount - 1;
+                    }
+                }
+            }
             break;
 
         case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
@@ -493,7 +507,10 @@
 			if (_mvkBuffer) {
 				bb.mtlBuffer = _mvkBuffer->getMTLBuffer();
 				bb.offset = _mvkBuffer->getMTLBufferOffset() + _buffOffset + bufferDynamicOffset;
-				bb.size = (uint32_t)_mvkBuffer->getByteCount();
+				if (_buffRange == VK_WHOLE_SIZE)
+					bb.size = (uint32_t)(_mvkBuffer->getByteCount() - bb.offset);
+				else
+					bb.size = (uint32_t)_buffRange;
 			}
 			for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
 				if (stages[i]) {
@@ -681,53 +698,54 @@
 							  MVKShaderResourceBinding& mtlIndexes,
 							  MVKArrayRef<uint32_t> dynamicOffsets,
 							  uint32_t* pDynamicOffsetIndex) {
-	MVKMTLTextureBinding tb;
-	MVKMTLBufferBinding bb;
 	switch (descriptorType) {
 		case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
 		case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
 		case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
-		case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
-			if (_mvkImageView) {
-				tb.mtlTexture = _mvkImageView->getMTLTexture();
-			}
-			if ((descriptorType == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE || descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER) &&
-				tb.mtlTexture) {
-				tb.swizzle = _mvkImageView->getPackedSwizzle();
-			} else {
-				tb.swizzle = 0;
-			}
-			if (descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE && tb.mtlTexture) {
-				id<MTLTexture> mtlTex = tb.mtlTexture;
-				if (mtlTex.parentTexture) { mtlTex = mtlTex.parentTexture; }
-				bb.mtlBuffer = mtlTex.buffer;
-				bb.offset = mtlTex.bufferOffset;
-				bb.size = (uint32_t)(mtlTex.height * mtlTex.bufferBytesPerRow);
-			}
-			for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
-				if (stages[i]) {
-					tb.index = mtlIndexes.stages[i].textureIndex + descriptorIndex;
-					if (i == kMVKShaderStageCompute) {
-						if (cmdEncoder) { cmdEncoder->_computeResourcesState.bindTexture(tb); }
-					} else {
-						if (cmdEncoder) { cmdEncoder->_graphicsResourcesState.bindTexture(MVKShaderStage(i), tb); }
-					}
-					if (descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) {
-						bb.index = mtlIndexes.stages[i].bufferIndex + descriptorIndex;
-						if (i == kMVKShaderStageCompute) {
-							if (cmdEncoder) { cmdEncoder->_computeResourcesState.bindBuffer(bb); }
-						} else {
-							if (cmdEncoder) { cmdEncoder->_graphicsResourcesState.bindBuffer(MVKShaderStage(i), bb); }
-						}
-					}
-				}
-			}
+		case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
 			break;
-		}
 
 		default:
-			break;
+			return;
 	}
+    
+    uint8_t planeCount = (_mvkImageView) ? _mvkImageView->getPlaneCount() : 1;
+    for (uint8_t planeIndex = 0; planeIndex < planeCount; planeIndex++) {
+        MVKMTLTextureBinding tb;
+        MVKMTLBufferBinding bb;
+        
+        if (_mvkImageView) {
+            tb.mtlTexture = _mvkImageView->getMTLTexture(planeIndex);
+        }
+        tb.swizzle = ((descriptorType == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE ||
+                       descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER) &&
+                       tb.mtlTexture) ? _mvkImageView->getPackedSwizzle() : 0;
+        if (descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE && tb.mtlTexture) {
+            id<MTLTexture> mtlTex = tb.mtlTexture;
+            if (mtlTex.parentTexture) { mtlTex = mtlTex.parentTexture; }
+            bb.mtlBuffer = mtlTex.buffer;
+            bb.offset = mtlTex.bufferOffset;
+            bb.size = (uint32_t)(mtlTex.height * mtlTex.bufferBytesPerRow);
+        }
+        for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
+            if (stages[i]) {
+                tb.index = mtlIndexes.stages[i].textureIndex + descriptorIndex + planeIndex;
+                if (i == kMVKShaderStageCompute) {
+                    if (cmdEncoder) { cmdEncoder->_computeResourcesState.bindTexture(tb); }
+                } else {
+                    if (cmdEncoder) { cmdEncoder->_graphicsResourcesState.bindTexture(MVKShaderStage(i), tb); }
+                }
+                if (descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) {
+                    bb.index = mtlIndexes.stages[i].bufferIndex + descriptorIndex + planeIndex;
+                    if (i == kMVKShaderStageCompute) {
+                        if (cmdEncoder) { cmdEncoder->_computeResourcesState.bindBuffer(bb); }
+                    } else {
+                        if (cmdEncoder) { cmdEncoder->_graphicsResourcesState.bindBuffer(MVKShaderStage(i), bb); }
+                    }
+                }
+            }
+        }
+    }
 }
 
 void MVKImageDescriptor::write(MVKDescriptorSet* mvkDescSet,
@@ -838,7 +856,7 @@
 				const auto* pImgInfo = &get<VkDescriptorImageInfo>(pData, stride, srcIndex);
 				_mvkSampler = (MVKSampler*)pImgInfo->sampler;
 				if (_mvkSampler && _mvkSampler->getRequiresConstExprSampler()) {
-					_mvkSampler->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkUpdateDescriptorSets(): Depth texture samplers using a compare operation can only be used as immutable samplers on this device.");
+					_mvkSampler->reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkUpdateDescriptorSets(): Tried to push an immutable sampler.");
 				}
 
 				if (_mvkSampler) { _mvkSampler->retain(); }
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h
index 6ec36ed..532c14f 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h
@@ -229,7 +229,7 @@
 	/** Free's up the specified descriptor set. */
 	VkResult freeDescriptorSets(uint32_t count, const VkDescriptorSet* pDescriptorSets);
 
-	/** Destoys all currently allocated descriptor sets. */
+	/** Destroys all currently allocated descriptor sets. */
 	VkResult reset(VkDescriptorPoolResetFlags flags);
 
 	MVKDescriptorPool(MVKDevice* device, const VkDescriptorPoolCreateInfo* pCreateInfo);
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
index abfb94d..760bc93 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
@@ -57,6 +57,7 @@
 class MVKPipelineLayout;
 class MVKPipeline;
 class MVKSampler;
+class MVKSamplerYcbcrConversion;
 class MVKDescriptorSetLayout;
 class MVKDescriptorPool;
 class MVKDescriptorUpdateTemplate;
@@ -521,6 +522,11 @@
 	void destroySampler(MVKSampler* mvkSamp,
 						const VkAllocationCallbacks* pAllocator);
 
+	MVKSamplerYcbcrConversion* createSamplerYcbcrConversion(const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
+										                    const VkAllocationCallbacks* pAllocator);
+	void destroySamplerYcbcrConversion(MVKSamplerYcbcrConversion* mvkSampConv,
+								       const VkAllocationCallbacks* pAllocator);
+
 	MVKDescriptorSetLayout* createDescriptorSetLayout(const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
 													  const VkAllocationCallbacks* pAllocator);
 	void destroyDescriptorSetLayout(MVKDescriptorSetLayout* mvkDSL,
@@ -652,6 +658,7 @@
 	const VkPhysicalDeviceVariablePointerFeatures _enabledVarPtrFeatures;
 	const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT _enabledInterlockFeatures;
 	const VkPhysicalDeviceHostQueryResetFeaturesEXT _enabledHostQryResetFeatures;
+	const VkPhysicalDeviceSamplerYcbcrConversionFeatures _enabledSamplerYcbcrConversionFeatures;
 	const VkPhysicalDeviceScalarBlockLayoutFeaturesEXT _enabledScalarLayoutFeatures;
 	const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT _enabledTexelBuffAlignFeatures;
 	const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT _enabledVtxAttrDivFeatures;
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
index c2560f9..a5ae030 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
@@ -145,6 +145,11 @@
 				portabilityFeatures->shaderSampleRateInterpolationFunctions = false;
 				break;
 			}
+			case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: {
+				auto* samplerYcbcrConvFeatures = (VkPhysicalDeviceSamplerYcbcrConversionFeatures*)next;
+				samplerYcbcrConvFeatures->samplerYcbcrConversion = true;
+				break;
+			}
 			case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: {
 				auto* shaderIntFuncsFeatures = (VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*)next;
 				shaderIntFuncsFeatures->shaderIntegerFunctions2 = true;
@@ -210,6 +215,11 @@
 				portabilityProps->minVertexInputBindingStrideAlignment = 4;
 				break;
 			}
+			case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES: {
+				auto* samplerYcbcrConvProps = (VkSamplerYcbcrConversionImageFormatProperties*)next;
+				samplerYcbcrConvProps->combinedImageSamplerDescriptorCount = 3;
+				break;
+			}
 			default:
 				break;
 		}
@@ -456,7 +466,7 @@
 
 				MTLPixelFormat mtlPixFmt;
 				bool useSwizzle;
-				return (MVKImageView::validateSwizzledMTLPixelFormat(&viewInfo, &_pixelFormats, this,
+				return (MVKImageView::validateSwizzledMTLPixelFormat(&viewInfo, this,
 																	 _metalFeatures.nativeTextureSwizzle,
 																	 _mvkInstance->getMoltenVKConfiguration()->fullImageViewSwizzle,
 																	 mtlPixFmt, useSwizzle) == VK_SUCCESS);
@@ -859,6 +869,8 @@
 
 	_metalFeatures.pushConstantSizeAlignment = 16;     // Min float4 alignment for typical uniform structs.
 
+	_metalFeatures.maxTextureLayers = (2 * KIBI);
+
 	_metalFeatures.ioSurfaces = MVK_SUPPORT_IOSURFACE_BOOL;
 
 	// Metal supports 2 or 3 concurrent CAMetalLayer drawables.
@@ -1227,7 +1239,7 @@
 	_properties.limits.maxImageDimensionCube = _metalFeatures.maxTextureDimension;
 	_properties.limits.maxFramebufferWidth = _metalFeatures.maxTextureDimension;
 	_properties.limits.maxFramebufferHeight = _metalFeatures.maxTextureDimension;
-	_properties.limits.maxFramebufferLayers = _metalFeatures.layeredRendering ?  256 : 1;
+	_properties.limits.maxFramebufferLayers = _metalFeatures.layeredRendering ? _metalFeatures.maxTextureLayers : 1;
 
     _properties.limits.maxViewportDimensions[0] = _metalFeatures.maxTextureDimension;
     _properties.limits.maxViewportDimensions[1] = _metalFeatures.maxTextureDimension;
@@ -1236,15 +1248,15 @@
     _properties.limits.viewportBoundsRange[1] = (2.0 * maxVPDim) - 1;
     _properties.limits.maxViewports = _features.multiViewport ? kMVKCachedViewportScissorCount : 1;
 
-	_properties.limits.maxImageDimension3D = (2 * KIBI);
-	_properties.limits.maxImageArrayLayers = (2 * KIBI);
+	_properties.limits.maxImageDimension3D = _metalFeatures.maxTextureLayers;
+	_properties.limits.maxImageArrayLayers = _metalFeatures.maxTextureLayers;
 	_properties.limits.maxSamplerAnisotropy = 16;
 
     _properties.limits.maxVertexInputAttributes = 31;
     _properties.limits.maxVertexInputBindings = 31;
 
-    _properties.limits.maxVertexInputAttributeOffset = (4 * KIBI);
-    _properties.limits.maxVertexInputBindingStride = _properties.limits.maxVertexInputAttributeOffset - 1;
+    _properties.limits.maxVertexInputBindingStride = (2 * KIBI);
+	_properties.limits.maxVertexInputAttributeOffset = _properties.limits.maxVertexInputBindingStride - 1;
 
 	_properties.limits.maxPerStageDescriptorSamplers = _metalFeatures.maxPerStageSamplerCount;
 	_properties.limits.maxPerStageDescriptorUniformBuffers = _metalFeatures.maxPerStageBufferCount;
@@ -1290,6 +1302,7 @@
         uint32_t maxStorage = 0, maxUniform = 0;
         bool singleTexelStorage = true, singleTexelUniform = true;
         _pixelFormats.enumerateSupportedFormats({0, 0, VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT}, true, [&](VkFormat vk) {
+            if ( _pixelFormats.getChromaSubsamplingComponentBits(vk) > 0 ) { return false; }    // Skip chroma subsampling formats
 			MTLPixelFormat mtlFmt = _pixelFormats.getMTLPixelFormat(vk);
 			if ( !mtlFmt ) { return false; }	// If format is invalid, avoid validation errors on MTLDevice format alignment calls
 
@@ -1466,7 +1479,7 @@
     _properties.limits.maxComputeWorkGroupCount[1] = kMVKUndefinedLargeUInt32;
     _properties.limits.maxComputeWorkGroupCount[2] = kMVKUndefinedLargeUInt32;
 
-    _properties.limits.maxDrawIndexedIndexValue = numeric_limits<uint32_t>::max();
+    _properties.limits.maxDrawIndexedIndexValue = numeric_limits<uint32_t>::max();	// Must be (2^32 - 1) to support fullDrawIndexUint32
     _properties.limits.maxDrawIndirectCount = kMVKUndefinedLargeUInt32;
 
     _properties.limits.maxClipDistances = kMVKUndefinedLargeUInt32;
@@ -2220,16 +2233,21 @@
 			break;
 		}
 	}
-	if (swapchainInfo) {
-		return (MVKImage*)addResource(new MVKPeerSwapchainImage(this, pCreateInfo, (MVKSwapchain*)swapchainInfo->swapchain, uint32_t(-1)));
-	}
-	return (MVKImage*)addResource(new MVKImage(this, pCreateInfo));
+    MVKImage* mvkImg = (swapchainInfo)
+        ? new MVKPeerSwapchainImage(this, pCreateInfo, (MVKSwapchain*)swapchainInfo->swapchain, uint32_t(-1))
+        : new MVKImage(this, pCreateInfo);
+    for (auto& memoryBinding : mvkImg->_memoryBindings) {
+        addResource(memoryBinding.get());
+    }
+	return mvkImg;
 }
 
 void MVKDevice::destroyImage(MVKImage* mvkImg,
 							 const VkAllocationCallbacks* pAllocator) {
 	if (mvkImg) {
-		removeResource(mvkImg);
+		for (auto& memoryBinding : mvkImg->_memoryBindings) {
+            removeResource(memoryBinding.get());
+        }
 		mvkImg->destroy();
 	}
 }
@@ -2258,13 +2276,19 @@
 																		 MVKSwapchain* swapchain,
 																		 uint32_t swapchainIndex,
 																		 const VkAllocationCallbacks* pAllocator) {
-	return (MVKPresentableSwapchainImage*)addResource(new MVKPresentableSwapchainImage(this, pCreateInfo, swapchain, swapchainIndex));
+    MVKPresentableSwapchainImage* mvkImg = new MVKPresentableSwapchainImage(this, pCreateInfo, swapchain, swapchainIndex);
+    for (auto& memoryBinding : mvkImg->_memoryBindings) {
+        addResource(memoryBinding.get());
+    }
+    return mvkImg;
 }
 
 void MVKDevice::destroyPresentableSwapchainImage(MVKPresentableSwapchainImage* mvkImg,
 												 const VkAllocationCallbacks* pAllocator) {
 	if (mvkImg) {
-		removeResource(mvkImg);
+		for (auto& memoryBinding : mvkImg->_memoryBindings) {
+            removeResource(memoryBinding.get());
+        }
 		mvkImg->destroy();
 	}
 }
@@ -2428,6 +2452,16 @@
 	if (mvkSamp) { mvkSamp->destroy(); }
 }
 
+MVKSamplerYcbcrConversion* MVKDevice::createSamplerYcbcrConversion(const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
+																   const VkAllocationCallbacks* pAllocator) {
+	return new MVKSamplerYcbcrConversion(this, pCreateInfo);
+}
+
+void MVKDevice::destroySamplerYcbcrConversion(MVKSamplerYcbcrConversion* mvkSampConv,
+											  const VkAllocationCallbacks* pAllocator) {
+	mvkSampConv->destroy();
+}
+
 MVKDescriptorSetLayout* MVKDevice::createDescriptorSetLayout(const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
 															 const VkAllocationCallbacks* pAllocator) {
 	return new MVKDescriptorSetLayout(this, pCreateInfo);
@@ -2679,6 +2713,7 @@
 	_enabledVarPtrFeatures(),
 	_enabledInterlockFeatures(),
 	_enabledHostQryResetFeatures(),
+	_enabledSamplerYcbcrConversionFeatures(),
 	_enabledScalarLayoutFeatures(),
 	_enabledTexelBuffAlignFeatures(),
 	_enabledVtxAttrDivFeatures(),
@@ -2840,6 +2875,7 @@
 	mvkClear(&_enabledVarPtrFeatures);
 	mvkClear(&_enabledInterlockFeatures);
 	mvkClear(&_enabledHostQryResetFeatures);
+	mvkClear(&_enabledSamplerYcbcrConversionFeatures);
 	mvkClear(&_enabledScalarLayoutFeatures);
 	mvkClear(&_enabledTexelBuffAlignFeatures);
 	mvkClear(&_enabledVtxAttrDivFeatures);
@@ -2862,9 +2898,13 @@
 	pdScalarLayoutFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT;
 	pdScalarLayoutFeatures.pNext = &pdTexelBuffAlignFeatures;
 
+	VkPhysicalDeviceSamplerYcbcrConversionFeatures pdSamplerYcbcrConversionFeatures;
+	pdSamplerYcbcrConversionFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES;
+	pdSamplerYcbcrConversionFeatures.pNext = &pdScalarLayoutFeatures;
+
 	VkPhysicalDeviceHostQueryResetFeaturesEXT pdHostQryResetFeatures;
 	pdHostQryResetFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT;
-	pdHostQryResetFeatures.pNext = &pdScalarLayoutFeatures;
+	pdHostQryResetFeatures.pNext = &pdSamplerYcbcrConversionFeatures;
 
 	VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT pdInterlockFeatures;
 	pdInterlockFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT;
@@ -2961,6 +3001,13 @@
 							   &pdHostQryResetFeatures.hostQueryReset, 1);
 				break;
 			}
+			case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: {
+				auto* requestedFeatures = (VkPhysicalDeviceSamplerYcbcrConversionFeatures*)next;
+				enableFeatures(&_enabledSamplerYcbcrConversionFeatures.samplerYcbcrConversion,
+							   &requestedFeatures->samplerYcbcrConversion,
+							   &pdSamplerYcbcrConversionFeatures.samplerYcbcrConversion, 1);
+				break;
+			}
 			case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: {
 				auto* requestedFeatures = (VkPhysicalDeviceScalarBlockLayoutFeaturesEXT*)next;
 				enableFeatures(&_enabledScalarLayoutFeatures.scalarBlockLayout,
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h
index 43b3af8..1369e41 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h
@@ -24,8 +24,7 @@
 
 #import <Metal/Metal.h>
 
-class MVKBuffer;
-class MVKImage;
+class MVKImageMemoryBinding;
 
 // TODO: These are inoperable placeholders until VK_KHR_external_memory_metal defines them properly
 static const VkExternalMemoryHandleTypeFlagBits VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM;
@@ -91,7 +90,7 @@
 	 * to coherent memory can be forced by setting evenIfCoherent to true.
 	 *
 	 * If pBlitEnc is not null, it points to a holder for a MTLBlitCommandEncoder and its
-	 * assocated MTLCommandBuffer. If this instance has a MTLBuffer using managed memory,
+	 * associated MTLCommandBuffer. If this instance has a MTLBuffer using managed memory,
 	 * this function may call synchronizeResource: on the MTLBlitCommandEncoder to
 	 * synchronize the GPU contents to the CPU. If the contents of the pBlitEnc do not
 	 * include a MTLBlitCommandEncoder and MTLCommandBuffer, this function will create
@@ -131,15 +130,15 @@
     ~MVKDeviceMemory() override;
 
 protected:
-	friend MVKBuffer;
-	friend MVKImage;
+	friend class MVKBuffer;
+    friend class MVKImageMemoryBinding;
 
 	void propagateDebugName() override;
 	VkDeviceSize adjustMemorySize(VkDeviceSize size, VkDeviceSize offset);
 	VkResult addBuffer(MVKBuffer* mvkBuff);
 	void removeBuffer(MVKBuffer* mvkBuff);
-	VkResult addImage(MVKImage* mvkImg);
-	void removeImage(MVKImage* mvkImg);
+	VkResult addImageMemoryBinding(MVKImageMemoryBinding* mvkImg);
+	void removeImageMemoryBinding(MVKImageMemoryBinding* mvkImg);
 	bool ensureMTLHeap();
 	bool ensureMTLBuffer();
 	bool ensureHostMemory();
@@ -148,7 +147,7 @@
 	void initExternalMemory(VkExternalMemoryHandleTypeFlags handleTypes);
 
 	MVKSmallVector<MVKBuffer*, 4> _buffers;
-	MVKSmallVector<MVKImage*, 4> _images;
+	MVKSmallVector<MVKImageMemoryBinding*, 4> _imageMemoryBindings;
 	std::mutex _rezLock;
     VkDeviceSize _allocationSize = 0;
 	VkDeviceSize _mapOffset = 0;
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm
index 36f335b..2f25601 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm
@@ -92,7 +92,7 @@
 		// If we have an MTLHeap object, there's no need to sync memory manually between images and the buffer.
 		if (!_mtlHeap) {
 			lock_guard<mutex> lock(_rezLock);
-			for (auto& img : _images) { img->flushToDevice(offset, memSize); }
+			for (auto& img : _imageMemoryBindings) { img->flushToDevice(offset, memSize); }
 			for (auto& buf : _buffers) { buf->flushToDevice(offset, memSize); }
 		}
 	}
@@ -107,7 +107,7 @@
     VkDeviceSize memSize = adjustMemorySize(size, offset);
 	if (memSize > 0 && isMemoryHostAccessible() && (evenIfCoherent || !isMemoryHostCoherent()) && !_mtlHeap) {
 		lock_guard<mutex> lock(_rezLock);
-        for (auto& img : _images) { img->pullFromDevice(offset, memSize); }
+        for (auto& img : _imageMemoryBindings) { img->pullFromDevice(offset, memSize); }
         for (auto& buf : _buffers) { buf->pullFromDevice(offset, memSize); }
 
 #if MVK_MACOS
@@ -152,23 +152,23 @@
 	mvkRemoveAllOccurances(_buffers, mvkBuff);
 }
 
-VkResult MVKDeviceMemory::addImage(MVKImage* mvkImg) {
+VkResult MVKDeviceMemory::addImageMemoryBinding(MVKImageMemoryBinding* mvkImg) {
 	lock_guard<mutex> lock(_rezLock);
 
 	// If a dedicated alloc, ensure this image is the one and only image
 	// I am dedicated to.
-	if (_isDedicated && (_images.empty() || _images[0] != mvkImg) ) {
+	if (_isDedicated && (_imageMemoryBindings.empty() || _imageMemoryBindings[0] != mvkImg) ) {
 		return reportError(VK_ERROR_OUT_OF_DEVICE_MEMORY, "Could not bind VkImage %p to a VkDeviceMemory dedicated to resource %p. A dedicated allocation may only be used with the resource it was dedicated to.", mvkImg, getDedicatedResource() );
 	}
 
-	if (!_isDedicated) { _images.push_back(mvkImg); }
+	if (!_isDedicated) { _imageMemoryBindings.push_back(mvkImg); }
 
 	return VK_SUCCESS;
 }
 
-void MVKDeviceMemory::removeImage(MVKImage* mvkImg) {
+void MVKDeviceMemory::removeImageMemoryBinding(MVKImageMemoryBinding* mvkImg) {
 	lock_guard<mutex> lock(_rezLock);
-	mvkRemoveAllOccurances(_images, mvkImg);
+	mvkRemoveAllOccurances(_imageMemoryBindings, mvkImg);
 }
 
 // Ensures that this instance is backed by a MTLHeap object,
@@ -266,7 +266,7 @@
 
 MVKResource* MVKDeviceMemory::getDedicatedResource() {
 	MVKAssert(_isDedicated, "This method should only be called on dedicated allocations!");
-	return _buffers.empty() ? (MVKResource*)_images[0] : (MVKResource*)_buffers[0];
+	return _buffers.empty() ? (MVKResource*)_imageMemoryBindings[0] : (MVKResource*)_buffers[0];
 }
 
 MVKDeviceMemory::MVKDeviceMemory(MVKDevice* device,
@@ -319,7 +319,9 @@
 			}
 		}
 #endif
-		_images.push_back((MVKImage*)dedicatedImage);
+        for (auto& memoryBinding : ((MVKImage*)dedicatedImage)->_memoryBindings) {
+            _imageMemoryBindings.push_back(memoryBinding.get());
+        }
 		return;
 	}
 
@@ -367,7 +369,7 @@
     // to allow the resource to callback to remove itself from the collection.
     auto buffCopies = _buffers;
     for (auto& buf : buffCopies) { buf->bindDeviceMemory(nullptr, 0); }
-	auto imgCopies = _images;
+	auto imgCopies = _imageMemoryBindings;
 	for (auto& img : imgCopies) { img->bindDeviceMemory(nullptr, 0); }
 
 	[_mtlBuffer release];
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.h b/MoltenVK/MoltenVK/GPUObjects/MVKImage.h
index b699ca5..dd0ea13 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.h
@@ -33,19 +33,112 @@
 class MVKCommandEncoder;
 
 
+#pragma mark -
+#pragma mark MVKImagePlane
+
 /** Tracks the state of an image subresource.  */
 typedef struct {
-	VkImageSubresource subresource;
-	VkSubresourceLayout layout;
-	VkImageLayout layoutState;
+    VkImageSubresource subresource;
+    VkSubresourceLayout layout;
+    VkImageLayout layoutState;
 } MVKImageSubresource;
 
+class MVKImagePlane {
+
+public:
+    /** Returns the Metal texture underlying this image plane. */
+    id<MTLTexture> getMTLTexture();
+
+    /** Returns a Metal texture that interprets the pixels in the specified format. */
+    id<MTLTexture> getMTLTexture(MTLPixelFormat mtlPixFmt);
+
+    void releaseMTLTexture();
+
+    ~MVKImagePlane();
+
+protected:
+    MTLTextureDescriptor* newMTLTextureDescriptor();
+    void initSubresources(const VkImageCreateInfo* pCreateInfo);
+    MVKImageSubresource* getSubresource(uint32_t mipLevel, uint32_t arrayLayer);
+    void updateMTLTextureContent(MVKImageSubresource& subresource, VkDeviceSize offset, VkDeviceSize size);
+    void getMTLTextureContent(MVKImageSubresource& subresource, VkDeviceSize offset, VkDeviceSize size);
+    void propagateDebugName();
+    MVKImageMemoryBinding* getMemoryBinding() const;
+
+    MVKImagePlane(MVKImage* image, uint8_t planeIndex);
+
+    friend class MVKImageMemoryBinding;
+    friend MVKImage;
+    MVKImage* _image;
+    uint8_t _planeIndex;
+    VkExtent2D _blockTexelSize;
+    uint32_t _bytesPerBlock;
+    MTLPixelFormat _mtlPixFmt;
+    id<MTLTexture> _mtlTexture;
+    std::unordered_map<NSUInteger, id<MTLTexture>> _mtlTextureViews;
+    MVKSmallVector<MVKImageSubresource, 1> _subresources;
+};
+
+
+#pragma mark -
+#pragma mark MVKImageMemoryBinding
+
+class MVKImageMemoryBinding : public MVKResource {
+
+public:
+    
+    /** Returns the Vulkan type of this object. */
+    VkObjectType getVkObjectType() override { return VK_OBJECT_TYPE_UNKNOWN; }
+
+    /** Returns the debug report object type of this object. */
+    VkDebugReportObjectTypeEXT getVkDebugReportObjectType() override { return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT; }
+
+    /** Returns the memory requirements of this resource by populating the specified structure. */
+    VkResult getMemoryRequirements(VkMemoryRequirements* pMemoryRequirements);
+
+    /** Returns the memory requirements of this resource by populating the specified structure. */
+    VkResult getMemoryRequirements(const void* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+
+    /** Binds this resource to the specified offset within the specified memory allocation. */
+    VkResult bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset);
+
+    /** Applies the specified global memory barrier. */
+    void applyMemoryBarrier(VkPipelineStageFlags srcStageMask,
+                            VkPipelineStageFlags dstStageMask,
+                            MVKPipelineBarrier& barrier,
+                            MVKCommandEncoder* cmdEncoder,
+                            MVKCommandUse cmdUse) override;
+    
+    ~MVKImageMemoryBinding();
+
+protected:
+    friend MVKDeviceMemory;
+    friend MVKImagePlane;
+    friend MVKImage;
+
+    void propagateDebugName() override;
+    bool needsHostReadSync(VkPipelineStageFlags srcStageMask,
+                           VkPipelineStageFlags dstStageMask,
+                           VkMemoryBarrier* pMemoryBarrier) override;
+    bool shouldFlushHostMemory();
+    VkResult flushToDevice(VkDeviceSize offset, VkDeviceSize size);
+    VkResult pullFromDevice(VkDeviceSize offset, VkDeviceSize size);
+    uint8_t beginPlaneIndex() const;
+    uint8_t endPlaneIndex() const;
+
+    MVKImageMemoryBinding(MVKDevice* device, MVKImage* image, uint8_t planeIndex);
+
+    MVKImage* _image;
+    uint8_t _planeIndex;
+    bool _usesTexelBuffer;
+};
+
 
 #pragma mark -
 #pragma mark MVKImage
 
 /** Represents a Vulkan image. */
-class MVKImage : public MVKResource {
+class MVKImage : public MVKVulkanAPIDeviceObject {
 
 public:
 
@@ -55,6 +148,9 @@
 	/** Returns the debug report object type of this object. */
 	VkDebugReportObjectTypeEXT getVkDebugReportObjectType() override { return VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT; }
 
+    /** Returns the plane index of VkImageAspectFlags. */
+    static uint8_t getPlaneFromVkImageAspectFlags(VkImageAspectFlags aspectMask);
+
 	/**
 	 * Returns the Vulkan image type of this image.
 	 * This may be different than the value originally specified for the image
@@ -63,7 +159,7 @@
     VkImageType getImageType();
 
     /** Returns the Vulkan image format of this image. */
-    VkFormat getVkFormat();
+    VkFormat getVkFormat() { return _vkFormat; };
 
 	/** Returns whether this image has a depth or stencil format. */
 	bool getIsDepthStencil();
@@ -81,7 +177,7 @@
 	 * Returns the 3D extent of this image at the specified mipmap level. 
 	 * For 2D or cube images, the Z component will be 1.
 	 */
-	VkExtent3D getExtent3D(uint32_t mipLevel);
+	VkExtent3D getExtent3D(uint8_t planeIndex, uint32_t mipLevel);
 
 	/** Returns the number of mipmap levels in this image. */
 	inline uint32_t getMipLevelCount() { return _mipLevels; }
@@ -101,7 +197,7 @@
       * For compressed formats, this is the number of bytes in a row of blocks, which
       * will typically span more than one row of texels.
 	  */
-	VkDeviceSize getBytesPerRow(uint32_t mipLevel);
+	VkDeviceSize getBytesPerRow(uint8_t planeIndex, uint32_t mipLevel);
 
 	/**
 	 * Returns the number of bytes per image layer (for cube, array, or 3D images) 
@@ -109,7 +205,10 @@
 	 * of bytes per row (as returned by the getBytesPerRow() function, multiplied by 
 	 * the height of each 2D image.
 	 */
-	VkDeviceSize getBytesPerLayer(uint32_t mipLevel);
+	VkDeviceSize getBytesPerLayer(uint8_t planeIndex, uint32_t mipLevel);
+    
+    /** Returns the number of planes of this image view. */
+    inline uint8_t getPlaneCount() { return _planes.size(); }
 
 	/** Populates the specified layout for the specified sub-resource. */
 	VkResult getSubresourceLayout(const VkImageSubresource* pSubresource,
@@ -122,24 +221,17 @@
 #pragma mark Resource memory
 
 	/** Returns the memory requirements of this resource by populating the specified structure. */
-	VkResult getMemoryRequirements(VkMemoryRequirements* pMemoryRequirements) override;
+	VkResult getMemoryRequirements(VkMemoryRequirements* pMemoryRequirements, uint8_t planeIndex);
 
 	/** Returns the memory requirements of this resource by populating the specified structure. */
-	VkResult getMemoryRequirements(const void* pInfo, VkMemoryRequirements2* pMemoryRequirements) override;
+	VkResult getMemoryRequirements(const void* pInfo, VkMemoryRequirements2* pMemoryRequirements);
 
 	/** Binds this resource to the specified offset within the specified memory allocation. */
-	VkResult bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset) override;
+	virtual VkResult bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset, uint8_t planeIndex);
 
 	/** Binds this resource to the specified offset within the specified memory allocation. */
 	virtual VkResult bindDeviceMemory2(const VkBindImageMemoryInfo* pBindInfo);
 
-	/** Applies the specified global memory barrier. */
-	void applyMemoryBarrier(VkPipelineStageFlags srcStageMask,
-							VkPipelineStageFlags dstStageMask,
-							MVKPipelineBarrier& barrier,
-							MVKCommandEncoder* cmdEncoder,
-							MVKCommandUse cmdUse) override;
-
 	/** Applies the specified image memory barrier. */
 	void applyImageMemoryBarrier(VkPipelineStageFlags srcStageMask,
 								 VkPipelineStageFlags dstStageMask,
@@ -150,10 +242,10 @@
 #pragma mark Metal
 
 	/** Returns the Metal texture underlying this image. */
-	virtual id<MTLTexture> getMTLTexture();
+	virtual id<MTLTexture> getMTLTexture(uint8_t planeIndex);
 
 	/** Returns a Metal texture that interprets the pixels in the specified format. */
-	id<MTLTexture> getMTLTexture(MTLPixelFormat mtlPixFmt);
+	id<MTLTexture> getMTLTexture(uint8_t planeIndex, MTLPixelFormat mtlPixFmt);
 
     /**
      * Sets this image to use the specified MTLTexture.
@@ -163,7 +255,7 @@
      *
      * If a MTLTexture has already been created for this image, it will be destroyed.
      */
-    VkResult setMTLTexture(id<MTLTexture> mtlTexture);
+    VkResult setMTLTexture(uint8_t planeIndex, id<MTLTexture> mtlTexture);
 
     /**
      * Indicates that this VkImage should use an IOSurface to underlay the Metal texture.
@@ -189,7 +281,7 @@
     IOSurfaceRef getIOSurface();
 
 	/** Returns the Metal pixel format of this image. */
-	inline MTLPixelFormat getMTLPixelFormat() { return _mtlPixelFormat; }
+	inline MTLPixelFormat getMTLPixelFormat(uint8_t planeIndex) { return _planes[planeIndex]->_mtlPixFmt; }
 
 	/** Returns the Metal texture type of this image. */
 	inline MTLTextureType getMTLTextureType() { return _mtlTextureType; }
@@ -225,50 +317,37 @@
 	~MVKImage() override;
 
 protected:
-	friend class MVKDeviceMemory;
-	friend class MVKImageView;
-	using MVKResource::needsHostReadSync;
+    friend MVKDeviceMemory;
+    friend MVKDevice;
+    friend MVKImageMemoryBinding;
+    friend MVKImagePlane;
+    friend class MVKImageViewPlane;
+	friend MVKImageView;
 
 	void propagateDebugName() override;
-	MVKImageSubresource* getSubresource(uint32_t mipLevel, uint32_t arrayLayer);
 	void validateConfig(const VkImageCreateInfo* pCreateInfo, bool isAttachment);
 	VkSampleCountFlagBits validateSamples(const VkImageCreateInfo* pCreateInfo, bool isAttachment);
 	uint32_t validateMipLevels(const VkImageCreateInfo* pCreateInfo, bool isAttachment);
 	bool validateLinear(const VkImageCreateInfo* pCreateInfo, bool isAttachment);
-	bool validateUseTexelBuffer();
-	void initSubresources(const VkImageCreateInfo* pCreateInfo);
-	void initSubresourceLayout(MVKImageSubresource& imgSubRez);
 	void initExternalMemory(VkExternalMemoryHandleTypeFlags handleTypes);
-	id<MTLTexture> newMTLTexture();
-	void releaseMTLTexture();
     void releaseIOSurface();
-	MTLTextureDescriptor* newMTLTextureDescriptor();
-    void updateMTLTextureContent(MVKImageSubresource& subresource, VkDeviceSize offset, VkDeviceSize size);
-    void getMTLTextureContent(MVKImageSubresource& subresource, VkDeviceSize offset, VkDeviceSize size);
-	bool shouldFlushHostMemory();
-	VkResult flushToDevice(VkDeviceSize offset, VkDeviceSize size);
-	VkResult pullFromDevice(VkDeviceSize offset, VkDeviceSize size);
-	bool needsHostReadSync(VkPipelineStageFlags srcStageMask,
-						   VkPipelineStageFlags dstStageMask,
-						   MVKPipelineBarrier& barrier);
 
-	MVKSmallVector<MVKImageSubresource, 1> _subresources;
-	std::unordered_map<NSUInteger, id<MTLTexture>> _mtlTextureViews;
+    MVKSmallVector<std::unique_ptr<MVKImageMemoryBinding>, 3> _memoryBindings;
+    MVKSmallVector<std::unique_ptr<MVKImagePlane>, 3> _planes;
     VkExtent3D _extent;
     uint32_t _mipLevels;
     uint32_t _arrayLayers;
     VkSampleCountFlagBits _samples;
     VkImageUsageFlags _usage;
-	MTLPixelFormat _mtlPixelFormat;
+    VkFormat _vkFormat;
 	MTLTextureType _mtlTextureType;
-    id<MTLTexture> _mtlTexture;
     std::mutex _lock;
     IOSurfaceRef _ioSurface;
 	VkDeviceSize _rowByteAlignment;
     bool _isDepthStencilAttachment;
 	bool _canSupportMTLTextureView;
     bool _hasExpectedTexelSize;
-	bool _usesTexelBuffer;
+    bool _hasChromaSubsampling;
 	bool _isLinear;
 	bool _is3DCompressed;
 	bool _isAliasable;
@@ -284,12 +363,12 @@
 public:
 
 	/** Binds this resource to the specified offset within the specified memory allocation. */
-	VkResult bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset) override;
+	VkResult bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset, uint8_t planeIndex) override;
 
 #pragma mark Metal
 
 	/** Returns the Metal texture used by the CAMetalDrawable underlying this image. */
-	id<MTLTexture> getMTLTexture() override;
+	id<MTLTexture> getMTLTexture(uint8_t planeIndex) override;
 
 
 #pragma mark Construction
@@ -402,6 +481,34 @@
 
 
 #pragma mark -
+#pragma mark MVKImageViewPlane
+
+class MVKImageViewPlane {
+
+public:
+    /** Returns the Metal texture underlying this image view. */
+    id<MTLTexture> getMTLTexture();
+
+    void releaseMTLTexture();
+
+    ~MVKImageViewPlane();
+
+protected:
+    void propagateDebugName();
+    id<MTLTexture> newMTLTexture();
+    MVKImageViewPlane(MVKImageView* imageView, uint8_t planeIndex, MTLPixelFormat mtlPixFmt, const VkImageViewCreateInfo* pCreateInfo);
+
+    friend MVKImageView;
+    MVKImageView* _imageView;
+    uint8_t _planeIndex;
+    MTLPixelFormat _mtlPixFmt;
+    uint32_t _packedSwizzle;
+    id<MTLTexture> _mtlTexture;
+    bool _useMTLTextureView;
+};
+
+
+#pragma mark -
 #pragma mark MVKImageView
 
 /** Represents a Vulkan image view. */
@@ -418,17 +525,20 @@
 #pragma mark Metal
 
 	/** Returns the Metal texture underlying this image view. */
-	id<MTLTexture> getMTLTexture();
+	id<MTLTexture> getMTLTexture(uint8_t planeIndex) { return _planes[planeIndex]->getMTLTexture(); }
 
 	/** Returns the Metal pixel format of this image view. */
-	inline MTLPixelFormat getMTLPixelFormat() { return _mtlPixelFormat; }
+	inline MTLPixelFormat getMTLPixelFormat(uint8_t planeIndex) { return _planes[planeIndex]->_mtlPixFmt; }
+    
+    /** Returns the packed component swizzle of this image view. */
+    inline uint32_t getPackedSwizzle() { return _planes[0]->_packedSwizzle; }
+    
+    /** Returns the number of planes of this image view. */
+    inline uint8_t getPlaneCount() { return _planes.size(); }
 
 	/** Returns the Metal texture type of this image view. */
 	inline MTLTextureType getMTLTextureType() { return _mtlTextureType; }
 
-	/** Returns the packed component swizzle of this image view. */
-	inline uint32_t getPackedSwizzle() { return _packedSwizzle; }
-
 	/**
 	 * Populates the texture of the specified render pass descriptor
 	 * with the Metal texture underlying this image.
@@ -458,7 +568,6 @@
 	 * This is a static function that can be used to validate image view formats prior to creating one.
 	 */
 	static VkResult validateSwizzledMTLPixelFormat(const VkImageViewCreateInfo* pCreateInfo,
-												   MVKPixelFormats* mvkPixFmts,
 												   MVKVulkanAPIObject* apiObject,
 												   bool hasNativeSwizzleSupport,
 												   bool hasShaderSwizzleSupport,
@@ -472,23 +581,54 @@
 				 const VkImageViewCreateInfo* pCreateInfo,
 				 const MVKConfiguration* pAltMVKConfig = nullptr);
 
-	~MVKImageView() override;
-
 protected:
+    friend MVKImageViewPlane;
+    
 	void propagateDebugName() override;
-	id<MTLTexture> newMTLTexture();
-	void initMTLTextureViewSupport();
-	void validateImageViewConfig(const VkImageViewCreateInfo* pCreateInfo);
 
     MVKImage* _image;
+    MVKSmallVector<std::unique_ptr<MVKImageViewPlane>, 3> _planes;
     VkImageSubresourceRange _subresourceRange;
     VkImageUsageFlags _usage;
-	id<MTLTexture> _mtlTexture;
 	std::mutex _lock;
-	MTLPixelFormat _mtlPixelFormat;
 	MTLTextureType _mtlTextureType;
-	uint32_t _packedSwizzle;
-	bool _useMTLTextureView;
+};
+
+
+#pragma mark -
+#pragma mark MVKSamplerYcbcrConversion
+
+/** Represents a Vulkan sampler ycbcr conversion. */
+class MVKSamplerYcbcrConversion : public MVKVulkanAPIDeviceObject {
+
+public:
+    /** Returns the Vulkan type of this object. */
+    VkObjectType getVkObjectType() override { return VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION; }
+
+    /** Returns the debug report object type of this object. */
+    VkDebugReportObjectTypeEXT getVkDebugReportObjectType() override { return VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT; }
+    
+    /** Returns the number of planes of this ycbcr conversion. */
+    inline uint8_t getPlaneCount() { return _planes; }
+
+    /** Writes this conversion settings to a MSL constant sampler */
+    void updateConstExprSampler(SPIRV_CROSS_NAMESPACE::MSLConstexprSampler& constExprSampler) const;
+
+    MVKSamplerYcbcrConversion(MVKDevice* device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo);
+
+    ~MVKSamplerYcbcrConversion() override {}
+
+protected:
+    void propagateDebugName() override {}
+
+    uint8_t _planes, _bpc;
+    SPIRV_CROSS_NAMESPACE::MSLFormatResolution _resolution;
+    SPIRV_CROSS_NAMESPACE::MSLSamplerFilter _chroma_filter;
+    SPIRV_CROSS_NAMESPACE::MSLChromaLocation _x_chroma_offset, _y_chroma_offset;
+    SPIRV_CROSS_NAMESPACE::MSLComponentSwizzle _swizzle[4];
+    SPIRV_CROSS_NAMESPACE::MSLSamplerYCbCrModelConversion _ycbcr_model;
+    SPIRV_CROSS_NAMESPACE::MSLSamplerYCbCrRange _ycbcr_range;
+    bool _forceExplicitReconstruction;
 };
 
 
@@ -508,6 +648,10 @@
 
 	/** Returns the Metal sampler state. */
 	inline id<MTLSamplerState> getMTLSamplerState() { return _mtlSamplerState; }
+    
+    /** Returns the number of planes if this is a ycbcr conversion or 0 otherwise. */
+    inline uint8_t getPlaneCount() { return (_ycbcrConversion) ? _ycbcrConversion->getPlaneCount() : 0; }
+
 
 	/**
 	 * If this sampler requires hardcoding in MSL, populates the hardcoded sampler in the resource binding.
@@ -529,5 +673,6 @@
 
 	id<MTLSamplerState> _mtlSamplerState;
 	SPIRV_CROSS_NAMESPACE::MSLConstexprSampler _constExprSampler;
+	MVKSamplerYcbcrConversion* _ycbcrConversion;
 	bool _requiresConstExprSampler;
 };
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
index bc27fe7..a2a8ac5 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
@@ -32,40 +32,455 @@
 using namespace std;
 using namespace SPIRV_CROSS_NAMESPACE;
 
+#pragma mark -
+#pragma mark MVKImagePlane
+
+id<MTLTexture> MVKImagePlane::getMTLTexture() {
+    if ( !_mtlTexture && _image->_vkFormat ) {
+        // Lock and check again in case another thread has created the texture.
+        lock_guard<mutex> lock(_image->_lock);
+        if (_mtlTexture) { return _mtlTexture; }
+
+        MTLTextureDescriptor* mtlTexDesc = newMTLTextureDescriptor();    // temp retain
+        MVKImageMemoryBinding* memoryBinding = getMemoryBinding();
+
+        if (_image->_ioSurface) {
+            _mtlTexture = [_image->getMTLDevice()
+                           newTextureWithDescriptor: mtlTexDesc
+                           iosurface: _image->_ioSurface
+                           plane: _planeIndex];
+        } else if (memoryBinding->_usesTexelBuffer) {
+            _mtlTexture = [memoryBinding->_deviceMemory->getMTLBuffer()
+                           newTextureWithDescriptor: mtlTexDesc
+                           offset: memoryBinding->getDeviceMemoryOffset()
+                           bytesPerRow: _subresources[0].layout.rowPitch];
+        } else if (memoryBinding->_deviceMemory->getMTLHeap() && !_image->getIsDepthStencil()) {
+            // Metal support for depth/stencil from heaps is flaky
+            _mtlTexture = [memoryBinding->_deviceMemory->getMTLHeap()
+                           newTextureWithDescriptor: mtlTexDesc
+                           offset: memoryBinding->getDeviceMemoryOffset()];
+            if (_image->_isAliasable) { [_mtlTexture makeAliasable]; }
+        } else {
+            _mtlTexture = [_image->getMTLDevice() newTextureWithDescriptor: mtlTexDesc];
+        }
+
+        [mtlTexDesc release];                                            // temp release
+
+        propagateDebugName();
+    }
+    return _mtlTexture;
+}
+
+id<MTLTexture> MVKImagePlane::getMTLTexture(MTLPixelFormat mtlPixFmt) {
+    if (mtlPixFmt == _mtlPixFmt) { return _mtlTexture; }
+    id<MTLTexture> mtlTex = _mtlTextureViews[mtlPixFmt];
+    if ( !mtlTex ) {
+        // Lock and check again in case another thread has created the view texture.
+        // baseTex retreived outside of lock to avoid deadlock if it too needs to be lazily created.
+        lock_guard<mutex> lock(_image->_lock);
+        mtlTex = _mtlTextureViews[mtlPixFmt];
+        if ( !mtlTex ) {
+            mtlTex = [_mtlTexture newTextureViewWithPixelFormat: mtlPixFmt];    // retained
+            _mtlTextureViews[mtlPixFmt] = mtlTex;
+        }
+    }
+    return mtlTex;
+}
+
+void MVKImagePlane::releaseMTLTexture() {
+    [_mtlTexture release];
+    for (auto elem : _mtlTextureViews) {
+        [elem.second release];
+    }
+}
+
+// Returns a Metal texture descriptor constructed from the properties of this image.
+// It is the caller's responsibility to release the returned descriptor object.
+MTLTextureDescriptor* MVKImagePlane::newMTLTextureDescriptor() {
+    MTLPixelFormat mtlPixFmt = _mtlPixFmt;
+    MTLTextureUsage minUsage = MTLTextureUsageUnknown;
+#if MVK_MACOS
+    if (_image->_is3DCompressed) {
+        // Metal before 3.0 doesn't support 3D compressed textures, so we'll decompress
+        // the texture ourselves. This, then, is the *uncompressed* format.
+        mtlPixFmt = MTLPixelFormatBGRA8Unorm;
+        minUsage = MTLTextureUsageShaderWrite;
+    }
+#endif
+
+    VkExtent3D extent = _image->getExtent3D(_planeIndex, 0);
+    MTLTextureDescriptor* mtlTexDesc = [MTLTextureDescriptor new];    // retained
+    mtlTexDesc.pixelFormat = mtlPixFmt;
+    mtlTexDesc.textureType = _image->_mtlTextureType;
+    mtlTexDesc.width = extent.width;
+    mtlTexDesc.height = extent.height;
+    mtlTexDesc.depth = extent.depth;
+    mtlTexDesc.mipmapLevelCount = _image->_mipLevels;
+    mtlTexDesc.sampleCount = mvkSampleCountFromVkSampleCountFlagBits(_image->_samples);
+    mtlTexDesc.arrayLength = _image->_arrayLayers;
+    mtlTexDesc.usageMVK = _image->getPixelFormats()->getMTLTextureUsage(_image->_usage, mtlPixFmt, minUsage);
+    mtlTexDesc.storageModeMVK = _image->getMTLStorageMode();
+    mtlTexDesc.cpuCacheMode = _image->getMTLCPUCacheMode();
+
+    return mtlTexDesc;
+}
+
+// Initializes the subresource definitions.
+void MVKImagePlane::initSubresources(const VkImageCreateInfo* pCreateInfo) {
+    _subresources.reserve(_image->_mipLevels * _image->_arrayLayers);
+
+    MVKImageSubresource subRez;
+    subRez.subresource.aspectMask = VK_IMAGE_ASPECT_PLANE_0_BIT << _planeIndex;
+    subRez.layoutState = pCreateInfo->initialLayout;
+
+    VkDeviceSize offset = 0;
+    if (_planeIndex > 0 && _image->_memoryBindings.size() == 1) {
+        auto subresources = &_image->_planes[_planeIndex-1]->_subresources;
+        VkSubresourceLayout& lastLayout = (*subresources)[subresources->size()-1].layout;
+        offset = lastLayout.offset+lastLayout.size;
+    }
+
+    for (uint32_t mipLvl = 0; mipLvl < _image->_mipLevels; mipLvl++) {
+        subRez.subresource.mipLevel = mipLvl;
+        VkDeviceSize rowPitch = _image->getBytesPerRow(_planeIndex, mipLvl);
+        VkDeviceSize depthPitch = _image->getBytesPerLayer(_planeIndex, mipLvl);
+
+        for (uint32_t layer = 0; layer < _image->_arrayLayers; layer++) {
+            subRez.subresource.arrayLayer = layer;
+
+            VkSubresourceLayout& layout = subRez.layout;
+            layout.offset = offset;
+            layout.size = depthPitch * _image->_extent.depth;
+            layout.rowPitch = rowPitch;
+            layout.depthPitch = depthPitch;
+
+            _subresources.push_back(subRez);
+            offset += layout.size;
+        }
+    }
+}
+
+// Returns a pointer to the internal subresource for the specified MIP level layer.
+MVKImageSubresource* MVKImagePlane::getSubresource(uint32_t mipLevel, uint32_t arrayLayer) {
+    uint32_t srIdx = (mipLevel * _image->_arrayLayers) + arrayLayer;
+    return (srIdx < _subresources.size()) ? &_subresources[srIdx] : NULL;
+}
+
+// Updates the contents of the underlying MTLTexture, corresponding to the
+// specified subresource definition, from the underlying memory buffer.
+void MVKImagePlane::updateMTLTextureContent(MVKImageSubresource& subresource,
+                                            VkDeviceSize offset, VkDeviceSize size) {
+
+    VkImageSubresource& imgSubRez = subresource.subresource;
+    VkSubresourceLayout& imgLayout = subresource.layout;
+
+    // Check if subresource overlaps the memory range.
+    VkDeviceSize memStart = offset;
+    VkDeviceSize memEnd = offset + size;
+    VkDeviceSize imgStart = imgLayout.offset;
+    VkDeviceSize imgEnd = imgLayout.offset + imgLayout.size;
+    if (imgStart >= memEnd || imgEnd <= memStart) { return; }
+
+    // Don't update if host memory has not been mapped yet.
+    void* pHostMem = getMemoryBinding()->getHostMemoryAddress();
+    if ( !pHostMem ) { return; }
+
+    VkExtent3D mipExtent = _image->getExtent3D(_planeIndex, imgSubRez.mipLevel);
+    void* pImgBytes = (void*)((uintptr_t)pHostMem + imgLayout.offset);
+
+    MTLRegion mtlRegion;
+    mtlRegion.origin = MTLOriginMake(0, 0, 0);
+    mtlRegion.size = mvkMTLSizeFromVkExtent3D(mipExtent);
+
+#if MVK_MACOS
+    std::unique_ptr<char[]> decompBuffer;
+    if (_image->_is3DCompressed) {
+        // We cannot upload the texture data directly in this case. But we
+        // can upload the decompressed image data.
+        std::unique_ptr<MVKCodec> codec = mvkCreateCodec(_image->getVkFormat());
+        if (!codec) {
+            _image->reportError(VK_ERROR_FORMAT_NOT_SUPPORTED, "A 3D texture used a compressed format that MoltenVK does not yet support.");
+            return;
+        }
+        VkSubresourceLayout destLayout;
+        destLayout.rowPitch = 4 * mipExtent.width;
+        destLayout.depthPitch = destLayout.rowPitch * mipExtent.height;
+        destLayout.size = destLayout.depthPitch * mipExtent.depth;
+        decompBuffer = std::unique_ptr<char[]>(new char[destLayout.size]);
+        codec->decompress(decompBuffer.get(), pImgBytes, destLayout, imgLayout, mipExtent);
+        pImgBytes = decompBuffer.get();
+        imgLayout = destLayout;
+    }
+#endif
+
+    VkImageType imgType = _image->getImageType();
+    VkDeviceSize bytesPerRow = (imgType != VK_IMAGE_TYPE_1D) ? imgLayout.rowPitch : 0;
+    VkDeviceSize bytesPerImage = (imgType == VK_IMAGE_TYPE_3D) ? imgLayout.depthPitch : 0;
+
+    id<MTLTexture> mtlTex = getMTLTexture();
+    if (_image->getPixelFormats()->isPVRTCFormat(mtlTex.pixelFormat)) {
+        bytesPerRow = 0;
+        bytesPerImage = 0;
+    }
+
+    [mtlTex replaceRegion: mtlRegion
+              mipmapLevel: imgSubRez.mipLevel
+                    slice: imgSubRez.arrayLayer
+                withBytes: pImgBytes
+              bytesPerRow: bytesPerRow
+            bytesPerImage: bytesPerImage];
+}
+
+// Updates the contents of the underlying memory buffer from the contents of
+// the underlying MTLTexture, corresponding to the specified subresource definition.
+void MVKImagePlane::getMTLTextureContent(MVKImageSubresource& subresource,
+                                         VkDeviceSize offset, VkDeviceSize size) {
+
+    VkImageSubresource& imgSubRez = subresource.subresource;
+    VkSubresourceLayout& imgLayout = subresource.layout;
+
+    // Check if subresource overlaps the memory range.
+    VkDeviceSize memStart = offset;
+    VkDeviceSize memEnd = offset + size;
+    VkDeviceSize imgStart = imgLayout.offset;
+    VkDeviceSize imgEnd = imgLayout.offset + imgLayout.size;
+    if (imgStart >= memEnd || imgEnd <= memStart) { return; }
+
+    // Don't update if host memory has not been mapped yet.
+    void* pHostMem = getMemoryBinding()->getHostMemoryAddress();
+    if ( !pHostMem ) { return; }
+
+    VkExtent3D mipExtent = _image->getExtent3D(_planeIndex, imgSubRez.mipLevel);
+    void* pImgBytes = (void*)((uintptr_t)pHostMem + imgLayout.offset);
+
+    MTLRegion mtlRegion;
+    mtlRegion.origin = MTLOriginMake(0, 0, 0);
+    mtlRegion.size = mvkMTLSizeFromVkExtent3D(mipExtent);
+
+    VkImageType imgType = _image->getImageType();
+    VkDeviceSize bytesPerRow = (imgType != VK_IMAGE_TYPE_1D) ? imgLayout.rowPitch : 0;
+    VkDeviceSize bytesPerImage = (imgType == VK_IMAGE_TYPE_3D) ? imgLayout.depthPitch : 0;
+
+    [_mtlTexture getBytes: pImgBytes
+              bytesPerRow: bytesPerRow
+            bytesPerImage: bytesPerImage
+               fromRegion: mtlRegion
+              mipmapLevel: imgSubRez.mipLevel
+                    slice: imgSubRez.arrayLayer];
+}
+
+void MVKImagePlane::propagateDebugName() {
+    setLabelIfNotNil(_image->_planes[_planeIndex]->_mtlTexture, _image->_debugName);
+}
+
+MVKImageMemoryBinding* MVKImagePlane::getMemoryBinding() const {
+    return (_image->_memoryBindings.size() > 1) ? _image->_memoryBindings[_planeIndex].get() : _image->_memoryBindings[0].get();
+}
+
+MVKImagePlane::MVKImagePlane(MVKImage* image, uint8_t planeIndex) {
+    _image = image;
+    _planeIndex = planeIndex;
+    _mtlTexture = nil;
+}
+
+MVKImagePlane::~MVKImagePlane() {
+    releaseMTLTexture();
+}
+
+
+#pragma mark -
+#pragma mark MVKImageMemoryBinding
+
+VkResult MVKImageMemoryBinding::getMemoryRequirements(VkMemoryRequirements* pMemoryRequirements) {
+    pMemoryRequirements->size = _byteCount;
+    pMemoryRequirements->alignment = _byteAlignment;
+    return VK_SUCCESS;
+}
+
+VkResult MVKImageMemoryBinding::getMemoryRequirements(const void*, VkMemoryRequirements2* pMemoryRequirements) {
+    pMemoryRequirements->sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
+    for (auto* next = (VkBaseOutStructure*)pMemoryRequirements->pNext; next; next = next->pNext) {
+        switch (next->sType) {
+        case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: {
+            auto* dedicatedReqs = (VkMemoryDedicatedRequirements*)next;
+            bool writable = mvkIsAnyFlagEnabled(_image->_usage, VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT);
+            dedicatedReqs->requiresDedicatedAllocation = _requiresDedicatedMemoryAllocation;
+            dedicatedReqs->prefersDedicatedAllocation = (dedicatedReqs->requiresDedicatedAllocation ||
+                                                        (!_usesTexelBuffer && (writable || !_device->_pMetalFeatures->placementHeaps)));
+            break;
+        }
+        default:
+            break;
+        }
+    }
+    return VK_SUCCESS;
+}
+
+// Memory may have been mapped before image was bound, and needs to be loaded into the MTLTexture.
+VkResult MVKImageMemoryBinding::bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset) {
+    if (_deviceMemory) { _deviceMemory->removeImageMemoryBinding(this); }
+    MVKResource::bindDeviceMemory(mvkMem, memOffset);
+
+    _usesTexelBuffer = _device->_pMetalFeatures->texelBuffers && _deviceMemory && _deviceMemory->_mtlBuffer; // Texel buffers available
+    _usesTexelBuffer = _usesTexelBuffer && (isMemoryHostAccessible() || _device->_pMetalFeatures->placementHeaps) && _image->_isLinear && !_image->getIsCompressed(); // Applicable memory layout
+
+#if MVK_MACOS
+    // macOS cannot use shared memory for texel buffers.
+    // Test _deviceMemory->isMemoryHostCoherent() directly because local version overrides.
+    _usesTexelBuffer = _usesTexelBuffer && _deviceMemory && !_deviceMemory->isMemoryHostCoherent();
+#endif
+
+    flushToDevice(getDeviceMemoryOffset(), getByteCount());
+    return _deviceMemory ? _deviceMemory->addImageMemoryBinding(this) : VK_SUCCESS;
+}
+
+void MVKImageMemoryBinding::applyMemoryBarrier(VkPipelineStageFlags srcStageMask,
+                                               VkPipelineStageFlags dstStageMask,
+                                               MVKPipelineBarrier& barrier,
+                                               MVKCommandEncoder* cmdEncoder,
+                                               MVKCommandUse cmdUse) {
+#if MVK_MACOS
+    if ( needsHostReadSync(srcStageMask, dstStageMask, (VkMemoryBarrier*)&barrier) ) {
+        for(uint8_t planeIndex = beginPlaneIndex(); planeIndex < endPlaneIndex(); planeIndex++) {
+            [cmdEncoder->getMTLBlitEncoder(cmdUse) synchronizeResource: _image->_planes[planeIndex]->_mtlTexture];
+        }
+    }
+#endif
+}
+
+void MVKImageMemoryBinding::propagateDebugName() {
+    for(uint8_t planeIndex = beginPlaneIndex(); planeIndex < endPlaneIndex(); planeIndex++) {
+        _image->_planes[planeIndex]->propagateDebugName();
+    }
+}
+
+// Returns whether the specified image memory barrier requires a sync between this
+// texture and host memory for the purpose of the host reading texture memory.
+bool MVKImageMemoryBinding::needsHostReadSync(VkPipelineStageFlags srcStageMask,
+                                              VkPipelineStageFlags dstStageMask,
+                                              VkMemoryBarrier* pMemoryBarrier) {
+#if MVK_MACOS
+    MVKPipelineBarrier& barrier = *(MVKPipelineBarrier*)pMemoryBarrier;
+    return ((barrier.newLayout == VK_IMAGE_LAYOUT_GENERAL) &&
+            mvkIsAnyFlagEnabled(barrier.dstAccessMask, (VK_ACCESS_HOST_READ_BIT | VK_ACCESS_MEMORY_READ_BIT)) &&
+            isMemoryHostAccessible() && !isMemoryHostCoherent());
+#endif
+#if MVK_IOS
+    return false;
+#endif
+}
+
+bool MVKImageMemoryBinding::shouldFlushHostMemory() { return isMemoryHostAccessible() && !_usesTexelBuffer; }
+
+// Flushes the device memory at the specified memory range into the MTLTexture. Updates
+// all subresources that overlap the specified range and are in an updatable layout state.
+VkResult MVKImageMemoryBinding::flushToDevice(VkDeviceSize offset, VkDeviceSize size) {
+    if (shouldFlushHostMemory()) {
+        for(uint8_t planeIndex = beginPlaneIndex(); planeIndex < endPlaneIndex(); planeIndex++) {
+            for (auto& subRez : _image->_planes[planeIndex]->_subresources) {
+                switch (subRez.layoutState) {
+                    case VK_IMAGE_LAYOUT_UNDEFINED:
+                    case VK_IMAGE_LAYOUT_PREINITIALIZED:
+                    case VK_IMAGE_LAYOUT_GENERAL: {
+                        _image->_planes[planeIndex]->updateMTLTextureContent(subRez, offset, size);
+                        break;
+                    }
+                    default:
+                        break;
+                }
+            }
+        }
+    }
+    return VK_SUCCESS;
+}
+
+// Pulls content from the MTLTexture into the device memory at the specified memory range.
+// Pulls from all subresources that overlap the specified range and are in an updatable layout state.
+VkResult MVKImageMemoryBinding::pullFromDevice(VkDeviceSize offset, VkDeviceSize size) {
+    if (shouldFlushHostMemory()) {
+        for(uint8_t planeIndex = beginPlaneIndex(); planeIndex < endPlaneIndex(); planeIndex++) {
+            for (auto& subRez : _image->_planes[planeIndex]->_subresources) {
+                switch (subRez.layoutState) {
+                    case VK_IMAGE_LAYOUT_GENERAL: {
+                        _image->_planes[planeIndex]->getMTLTextureContent(subRez, offset, size);
+                        break;
+                    }
+                    default:
+                        break;
+                }
+            }
+        }
+    }
+    return VK_SUCCESS;
+}
+
+uint8_t MVKImageMemoryBinding::beginPlaneIndex() const {
+    return (_image->_memoryBindings.size() > 1) ? _planeIndex : 0;
+}
+
+uint8_t MVKImageMemoryBinding::endPlaneIndex() const {
+    return (_image->_memoryBindings.size() > 1) ? _planeIndex : (uint8_t)_image->_memoryBindings.size();
+}
+
+MVKImageMemoryBinding::MVKImageMemoryBinding(MVKDevice* device, MVKImage* image, uint8_t planeIndex) : MVKResource(device) {
+    _image = image;
+    _planeIndex = planeIndex;
+    _usesTexelBuffer = false;
+}
+
+MVKImageMemoryBinding::~MVKImageMemoryBinding() {
+    if (_deviceMemory) { _deviceMemory->removeImageMemoryBinding(this); }
+}
+
 
 #pragma mark MVKImage
 
-void MVKImage::propagateDebugName() { setLabelIfNotNil(_mtlTexture, _debugName); }
+uint8_t MVKImage::getPlaneFromVkImageAspectFlags(VkImageAspectFlags aspectMask) {
+    return (aspectMask & VK_IMAGE_ASPECT_PLANE_2_BIT) ? 2 :
+           (aspectMask & VK_IMAGE_ASPECT_PLANE_1_BIT) ? 1 :
+           0;
+}
+
+void MVKImage::propagateDebugName() {
+    for (uint8_t planeIndex = 0; planeIndex < _planes.size(); planeIndex++) {
+        _planes[planeIndex]->propagateDebugName();
+    }
+}
 
 VkImageType MVKImage::getImageType() { return mvkVkImageTypeFromMTLTextureType(_mtlTextureType); }
 
-VkFormat MVKImage::getVkFormat() { return getPixelFormats()->getVkFormat(_mtlPixelFormat); }
+bool MVKImage::getIsDepthStencil() { return getPixelFormats()->getFormatType(_vkFormat) == kMVKFormatDepthStencil; }
 
-bool MVKImage::getIsDepthStencil() { return getPixelFormats()->getFormatType(_mtlPixelFormat) == kMVKFormatDepthStencil; }
+bool MVKImage::getIsCompressed() { return getPixelFormats()->getFormatType(_vkFormat) == kMVKFormatCompressed; }
 
-bool MVKImage::getIsCompressed() { return getPixelFormats()->getFormatType(_mtlPixelFormat) == kMVKFormatCompressed; }
-
-VkExtent3D MVKImage::getExtent3D(uint32_t mipLevel) {
-	return mvkMipmapLevelSizeFromBaseSize3D(_extent, mipLevel);
+VkExtent3D MVKImage::getExtent3D(uint8_t planeIndex, uint32_t mipLevel) {
+    VkExtent3D extent = _extent;
+    if (_hasChromaSubsampling) {
+        extent.width /= _planes[planeIndex]->_blockTexelSize.width;
+        extent.height /= _planes[planeIndex]->_blockTexelSize.height;
+    }
+	return mvkMipmapLevelSizeFromBaseSize3D(extent, mipLevel);
 }
 
-VkDeviceSize MVKImage::getBytesPerRow(uint32_t mipLevel) {
-    size_t bytesPerRow = getPixelFormats()->getBytesPerRow(_mtlPixelFormat, getExtent3D(mipLevel).width);
+VkDeviceSize MVKImage::getBytesPerRow(uint8_t planeIndex, uint32_t mipLevel) {
+    size_t bytesPerRow = getPixelFormats()->getBytesPerRow(_vkFormat, getExtent3D(planeIndex, mipLevel).width);
     return mvkAlignByteCount(bytesPerRow, _rowByteAlignment);
 }
 
-VkDeviceSize MVKImage::getBytesPerLayer(uint32_t mipLevel) {
-    return getPixelFormats()->getBytesPerLayer(_mtlPixelFormat, getBytesPerRow(mipLevel), getExtent3D(mipLevel).height);
+VkDeviceSize MVKImage::getBytesPerLayer(uint8_t planeIndex, uint32_t mipLevel) {
+    VkExtent3D extent = getExtent3D(planeIndex, mipLevel);
+    size_t bytesPerRow = getPixelFormats()->getBytesPerRow(_vkFormat, extent.width);
+    return getPixelFormats()->getBytesPerLayer(_vkFormat, bytesPerRow, extent.height);
 }
 
 VkResult MVKImage::getSubresourceLayout(const VkImageSubresource* pSubresource,
 										VkSubresourceLayout* pLayout) {
-	MVKImageSubresource* pImgRez = getSubresource(pSubresource->mipLevel,
-												  pSubresource->arrayLayer);
-	if ( !pImgRez ) { return VK_INCOMPLETE; }
+    uint8_t planeIndex = MVKImage::getPlaneFromVkImageAspectFlags(pSubresource->aspectMask);
+    MVKImageSubresource* pImgRez = _planes[planeIndex]->getSubresource(pSubresource->mipLevel, pSubresource->arrayLayer);
+    if ( !pImgRez ) { return VK_INCOMPLETE; }
 
-	*pLayout = pImgRez->layout;
-	return VK_SUCCESS;
+    *pLayout = pImgRez->layout;
+    return VK_SUCCESS;
 }
 
 void MVKImage::getTransferDescriptorData(MVKImageDescriptorData& imgData) {
@@ -81,18 +496,6 @@
 
 #pragma mark Resource memory
 
-void MVKImage::applyMemoryBarrier(VkPipelineStageFlags srcStageMask,
-								  VkPipelineStageFlags dstStageMask,
-								  MVKPipelineBarrier& barrier,
-								  MVKCommandEncoder* cmdEncoder,
-								  MVKCommandUse cmdUse) {
-#if MVK_MACOS
-	if ( needsHostReadSync(srcStageMask, dstStageMask, barrier) ) {
-		[cmdEncoder->getMTLBlitEncoder(cmdUse) synchronizeResource: getMTLTexture()];
-	}
-#endif
-}
-
 void MVKImage::applyImageMemoryBarrier(VkPipelineStageFlags srcStageMask,
 									   VkPipelineStageFlags dstStageMask,
 									   MVKPipelineBarrier& barrier,
@@ -111,226 +514,97 @@
 						 ? getLayerCount()
 						 : (layerStart + barrier.layerCount));
 
-#if MVK_MACOS
-	bool needsSync = needsHostReadSync(srcStageMask, dstStageMask, barrier);
-	id<MTLTexture> mtlTex = needsSync ? getMTLTexture() : nil;
-	id<MTLBlitCommandEncoder> mtlBlitEncoder = needsSync ? cmdEncoder->getMTLBlitEncoder(cmdUse) : nil;
-#endif
-
 	// Iterate across mipmap levels and layers, and update the image layout state for each
-	for (uint32_t mipLvl = mipLvlStart; mipLvl < mipLvlEnd; mipLvl++) {
-		for (uint32_t layer = layerStart; layer < layerEnd; layer++) {
-			MVKImageSubresource* pImgRez = getSubresource(mipLvl, layer);
-			if (pImgRez) { pImgRez->layoutState = barrier.newLayout; }
+    for (uint8_t planeIndex = 0; planeIndex < _planes.size(); planeIndex++) {
+        if (_hasChromaSubsampling && (barrier.aspectMask & (VK_IMAGE_ASPECT_PLANE_0_BIT << planeIndex)) == 0) { continue; }
+        for (uint32_t mipLvl = mipLvlStart; mipLvl < mipLvlEnd; mipLvl++) {
+            for (uint32_t layer = layerStart; layer < layerEnd; layer++) {
+                MVKImageSubresource* pImgRez = _planes[planeIndex]->getSubresource(mipLvl, layer);
+                if (pImgRez) { pImgRez->layoutState = barrier.newLayout; }
 #if MVK_MACOS
-			if (needsSync) { [mtlBlitEncoder synchronizeTexture: mtlTex slice: layer level: mipLvl]; }
+                bool needsSync = _planes[planeIndex]->getMemoryBinding()->needsHostReadSync(srcStageMask, dstStageMask, (VkMemoryBarrier*)&barrier);
+                id<MTLBlitCommandEncoder> mtlBlitEncoder = needsSync ? cmdEncoder->getMTLBlitEncoder(cmdUse) : nil;
+                if (needsSync) { [mtlBlitEncoder synchronizeTexture: _planes[planeIndex]->_mtlTexture slice: layer level: mipLvl]; }
 #endif
-		}
-	}
+            }
+        }
+    }
 }
 
-// Returns whether the specified image memory barrier requires a sync between this
-// texture and host memory for the purpose of the host reading texture memory.
-bool MVKImage::needsHostReadSync(VkPipelineStageFlags srcStageMask,
-								 VkPipelineStageFlags dstStageMask,
-								 MVKPipelineBarrier& barrier) {
+VkResult MVKImage::getMemoryRequirements(VkMemoryRequirements* pMemoryRequirements, uint8_t planeIndex) {
+    pMemoryRequirements->memoryTypeBits = (_isDepthStencilAttachment)
+                                          ? _device->getPhysicalDevice()->getPrivateMemoryTypes()
+                                          : _device->getPhysicalDevice()->getAllMemoryTypes();
 #if MVK_MACOS
-	return ((barrier.newLayout == VK_IMAGE_LAYOUT_GENERAL) &&
-			mvkIsAnyFlagEnabled(barrier.dstAccessMask, (VK_ACCESS_HOST_READ_BIT | VK_ACCESS_MEMORY_READ_BIT)) &&
-			isMemoryHostAccessible() && !isMemoryHostCoherent());
+    // Metal on macOS does not provide native support for host-coherent memory, but Vulkan requires it for Linear images
+    if ( !_isLinear ) {
+        mvkDisableFlags(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getHostCoherentMemoryTypes());
+    }
 #endif
 #if MVK_IOS
-	return false;
+    // Only transient attachments may use memoryless storage
+    if (!mvkAreAllFlagsEnabled(_usage, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) ) {
+        mvkDisableFlags(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getLazilyAllocatedMemoryTypes());
+    }
 #endif
+    return _memoryBindings[planeIndex]->getMemoryRequirements(pMemoryRequirements);
 }
 
-// Returns a pointer to the internal subresource for the specified MIP level layer.
-MVKImageSubresource* MVKImage::getSubresource(uint32_t mipLevel, uint32_t arrayLayer) {
-	uint32_t srIdx = (mipLevel * _arrayLayers) + arrayLayer;
-	return (srIdx < _subresources.size()) ? &_subresources[srIdx] : NULL;
-}
-
-VkResult MVKImage::getMemoryRequirements(VkMemoryRequirements* pMemoryRequirements) {
-	pMemoryRequirements->size = _byteCount;
-	pMemoryRequirements->alignment = _byteAlignment;
-	pMemoryRequirements->memoryTypeBits = (_isDepthStencilAttachment
-										   ? _device->getPhysicalDevice()->getPrivateMemoryTypes()
-										   : _device->getPhysicalDevice()->getAllMemoryTypes());
-#if MVK_MACOS
-	// Metal on macOS does not provide native support for host-coherent memory, but Vulkan requires it for Linear images
-	if ( !_isLinear ) {
-		mvkDisableFlags(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getHostCoherentMemoryTypes());
-	}
-#endif
-#if MVK_IOS
-	// Only transient attachments may use memoryless storage
-	if (!mvkAreAllFlagsEnabled(_usage, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) ) {
-		mvkDisableFlags(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getLazilyAllocatedMemoryTypes());
-	}
-#endif
-	return VK_SUCCESS;
-}
-
-VkResult MVKImage::getMemoryRequirements(const void*, VkMemoryRequirements2* pMemoryRequirements) {
-	pMemoryRequirements->sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
-	getMemoryRequirements(&pMemoryRequirements->memoryRequirements);
+VkResult MVKImage::getMemoryRequirements(const void* pInfo, VkMemoryRequirements2* pMemoryRequirements) {
+    uint8_t planeIndex = 0;
 	for (auto* next = (VkBaseOutStructure*)pMemoryRequirements->pNext; next; next = next->pNext) {
 		switch (next->sType) {
-		case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: {
-			auto* dedicatedReqs = (VkMemoryDedicatedRequirements*)next;
-			bool writable = mvkIsAnyFlagEnabled(_usage, VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT);
-			dedicatedReqs->requiresDedicatedAllocation = _requiresDedicatedMemoryAllocation;
-			dedicatedReqs->prefersDedicatedAllocation = (dedicatedReqs->requiresDedicatedAllocation ||
-														 (!_usesTexelBuffer && (writable || !_device->_pMetalFeatures->placementHeaps)));
+		case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO: {
+			auto* planeReqs = (VkImagePlaneMemoryRequirementsInfo*)next;
+            planeIndex = MVKImage::getPlaneFromVkImageAspectFlags(planeReqs->planeAspect);
 			break;
 		}
 		default:
 			break;
 		}
 	}
-	return VK_SUCCESS;
+    return getMemoryRequirements(&pMemoryRequirements->memoryRequirements, planeIndex);
 }
 
-// Memory may have been mapped before image was bound, and needs to be loaded into the MTLTexture.
-VkResult MVKImage::bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset) {
-	if (_deviceMemory) { _deviceMemory->removeImage(this); }
-
-	MVKResource::bindDeviceMemory(mvkMem, memOffset);
-
-	_usesTexelBuffer = validateUseTexelBuffer();
-
-	flushToDevice(getDeviceMemoryOffset(), getByteCount());
-
-	return _deviceMemory ? _deviceMemory->addImage(this) : VK_SUCCESS;
+VkResult MVKImage::bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset, uint8_t planeIndex) {
+    return _memoryBindings[planeIndex]->bindDeviceMemory(mvkMem, memOffset);
 }
 
 VkResult MVKImage::bindDeviceMemory2(const VkBindImageMemoryInfo* pBindInfo) {
-	return bindDeviceMemory((MVKDeviceMemory*)pBindInfo->memory, pBindInfo->memoryOffset);
-}
-
-bool MVKImage::validateUseTexelBuffer() {
-	VkExtent2D blockExt = getPixelFormats()->getBlockTexelSize(_mtlPixelFormat);
-	bool isUncompressed = blockExt.width == 1 && blockExt.height == 1;
-
-	bool useTexelBuffer = _device->_pMetalFeatures->texelBuffers;								// Texel buffers available
-	useTexelBuffer = useTexelBuffer && (isMemoryHostAccessible() || _device->_pMetalFeatures->placementHeaps) && _isLinear && isUncompressed;	// Applicable memory layout
-	useTexelBuffer = useTexelBuffer && _deviceMemory && _deviceMemory->_mtlBuffer;				// Buffer is available to overlay
-
-#if MVK_MACOS
-	// macOS cannot use shared memory for texel buffers.
-	// Test _deviceMemory->isMemoryHostCoherent() directly because local version overrides.
-	useTexelBuffer = useTexelBuffer && _deviceMemory && !_deviceMemory->isMemoryHostCoherent();
-#endif
-
-	return useTexelBuffer;
-}
-
-bool MVKImage::shouldFlushHostMemory() { return isMemoryHostAccessible() && !_usesTexelBuffer; }
-
-// Flushes the device memory at the specified memory range into the MTLTexture. Updates
-// all subresources that overlap the specified range and are in an updatable layout state.
-VkResult MVKImage::flushToDevice(VkDeviceSize offset, VkDeviceSize size) {
-	if (shouldFlushHostMemory()) {
-		for (auto& subRez : _subresources) {
-			switch (subRez.layoutState) {
-				case VK_IMAGE_LAYOUT_UNDEFINED:
-				case VK_IMAGE_LAYOUT_PREINITIALIZED:
-				case VK_IMAGE_LAYOUT_GENERAL: {
-					updateMTLTextureContent(subRez, offset, size);
-					break;
-				}
-				default:
-					break;
-			}
-		}
-	}
-	return VK_SUCCESS;
-}
-
-// Pulls content from the MTLTexture into the device memory at the specified memory range.
-// Pulls from all subresources that overlap the specified range and are in an updatable layout state.
-VkResult MVKImage::pullFromDevice(VkDeviceSize offset, VkDeviceSize size) {
-	if (shouldFlushHostMemory()) {
-		for (auto& subRez : _subresources) {
-			switch (subRez.layoutState) {
-				case VK_IMAGE_LAYOUT_GENERAL: {
-					getMTLTextureContent(subRez, offset, size);
-					break;
-				}
-				default:
-					break;
-			}
-		}
-	}
-	return VK_SUCCESS;
+    uint8_t planeIndex = 0;
+    for (const auto* next = (const VkBaseInStructure*)pBindInfo->pNext; next; next = next->pNext) {
+        switch (next->sType) {
+            case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO: {
+                const VkBindImagePlaneMemoryInfo* imagePlaneMemoryInfo = (const VkBindImagePlaneMemoryInfo*)next;
+                planeIndex = MVKImage::getPlaneFromVkImageAspectFlags(imagePlaneMemoryInfo->planeAspect);
+                break;
+            }
+            default:
+                break;
+        }
+    }
+    return bindDeviceMemory((MVKDeviceMemory*)pBindInfo->memory, pBindInfo->memoryOffset, planeIndex);
 }
 
 
 #pragma mark Metal
 
-id<MTLTexture> MVKImage::getMTLTexture() {
-	if ( !_mtlTexture && _mtlPixelFormat ) {
-
-		// Lock and check again in case another thread has created the texture.
-		lock_guard<mutex> lock(_lock);
-		if (_mtlTexture) { return _mtlTexture; }
-
-		_mtlTexture = newMTLTexture();   // retained
-
-		propagateDebugName();
-	}
-	return _mtlTexture;
+id<MTLTexture> MVKImage::getMTLTexture(uint8_t planeIndex) {
+	return _planes[planeIndex]->getMTLTexture();
 }
 
-id<MTLTexture> MVKImage::getMTLTexture(MTLPixelFormat mtlPixFmt) {
-	if (mtlPixFmt == _mtlPixelFormat) { return getMTLTexture(); }
-
-	id<MTLTexture> mtlTex = _mtlTextureViews[mtlPixFmt];
-	if ( !mtlTex ) {
-		// Lock and check again in case another thread has created the view texture.
-		// baseTex retreived outside of lock to avoid deadlock if it too needs to be lazily created.
-		id<MTLTexture> baseTex = getMTLTexture();
-		lock_guard<mutex> lock(_lock);
-		mtlTex = _mtlTextureViews[mtlPixFmt];
-		if ( !mtlTex ) {
-			mtlTex = [baseTex newTextureViewWithPixelFormat: mtlPixFmt];	// retained
-			_mtlTextureViews[mtlPixFmt] = mtlTex;
-		}
-	}
-	return mtlTex;
+id<MTLTexture> MVKImage::getMTLTexture(uint8_t planeIndex, MTLPixelFormat mtlPixFmt) {
+    return _planes[planeIndex]->getMTLTexture(mtlPixFmt);
 }
 
-id<MTLTexture> MVKImage::newMTLTexture() {
-	id<MTLTexture> mtlTex = nil;
-	MTLTextureDescriptor* mtlTexDesc = newMTLTextureDescriptor();	// temp retain
-
-	if (_ioSurface) {
-		mtlTex = [getMTLDevice() newTextureWithDescriptor: mtlTexDesc iosurface: _ioSurface plane: 0];
-	} else if (_usesTexelBuffer) {
-		mtlTex = [_deviceMemory->_mtlBuffer newTextureWithDescriptor: mtlTexDesc
-															  offset: getDeviceMemoryOffset()
-														 bytesPerRow: _subresources[0].layout.rowPitch];
-	} else if (_deviceMemory->_mtlHeap && !getIsDepthStencil()) {	// Metal support for depth/stencil from heaps is flaky
-		mtlTex = [_deviceMemory->_mtlHeap newTextureWithDescriptor: mtlTexDesc
-															offset: getDeviceMemoryOffset()];
-		if (_isAliasable) [mtlTex makeAliasable];
-	} else {
-		mtlTex = [getMTLDevice() newTextureWithDescriptor: mtlTexDesc];
-	}
-
-	[mtlTexDesc release];											// temp release
-	return mtlTex;
-}
-
-VkResult MVKImage::setMTLTexture(id<MTLTexture> mtlTexture) {
+VkResult MVKImage::setMTLTexture(uint8_t planeIndex, id<MTLTexture> mtlTexture) {
 	lock_guard<mutex> lock(_lock);
 
-	releaseMTLTexture();
 	releaseIOSurface();
+    _planes[planeIndex]->releaseMTLTexture();
+	_planes[planeIndex]->_mtlTexture = [mtlTexture retain];		// retained
 
-	_mtlTexture = [mtlTexture retain];		// retained
-
-	_mtlPixelFormat = mtlTexture.pixelFormat;
+    _vkFormat = getPixelFormats()->getVkFormat(mtlTexture.pixelFormat);
 	_mtlTextureType = mtlTexture.textureType;
 	_extent.width = uint32_t(mtlTexture.width);
 	_extent.height = uint32_t(mtlTexture.height);
@@ -338,7 +612,7 @@
 	_mipLevels = uint32_t(mtlTexture.mipmapLevelCount);
 	_samples = mvkVkSampleCountFlagBitsFromSampleCount(mtlTexture.sampleCount);
 	_arrayLayers = uint32_t(mtlTexture.arrayLength);
-	_usage = getPixelFormats()->getVkImageUsageFlags(mtlTexture.usage, _mtlPixelFormat);
+	_usage = getPixelFormats()->getVkImageUsageFlags(mtlTexture.usage, mtlTexture.pixelFormat);
 
 	if (_device->_pMetalFeatures->ioSurfaces) {
 		_ioSurface = mtlTexture.iosurface;
@@ -348,14 +622,6 @@
 	return VK_SUCCESS;
 }
 
-// Removes and releases the MTLTexture object, and all associated texture views
-void MVKImage::releaseMTLTexture() {
-	[_mtlTexture release];
-	_mtlTexture = nil;
-	for (auto elem : _mtlTextureViews) { [elem.second release]; }
-	_mtlTextureViews.clear();
-}
-
 void MVKImage::releaseIOSurface() {
     if (_ioSurface) {
         CFRelease(_ioSurface);
@@ -372,35 +638,60 @@
 
 #if MVK_SUPPORT_IOSURFACE_BOOL
 
-    releaseMTLTexture();
+    for (uint8_t planeIndex = 0; planeIndex < _planes.size(); planeIndex++) {
+        _planes[planeIndex]->releaseMTLTexture();
+    }
     releaseIOSurface();
 
-	MVKPixelFormats* pixFmts = getPixelFormats();
+    MVKPixelFormats* pixFmts = getPixelFormats();
 
 	if (ioSurface) {
 		if (IOSurfaceGetWidth(ioSurface) != _extent.width) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface width %zu does not match VkImage width %d.", IOSurfaceGetWidth(ioSurface), _extent.width); }
 		if (IOSurfaceGetHeight(ioSurface) != _extent.height) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface height %zu does not match VkImage height %d.", IOSurfaceGetHeight(ioSurface), _extent.height); }
-		if (IOSurfaceGetBytesPerElement(ioSurface) != pixFmts->getBytesPerBlock(_mtlPixelFormat)) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface bytes per element %zu does not match VkImage bytes per element %d.", IOSurfaceGetBytesPerElement(ioSurface), pixFmts->getBytesPerBlock(_mtlPixelFormat)); }
-		if (IOSurfaceGetElementWidth(ioSurface) != pixFmts->getBlockTexelSize(_mtlPixelFormat).width) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface element width %zu does not match VkImage element width %d.", IOSurfaceGetElementWidth(ioSurface), pixFmts->getBlockTexelSize(_mtlPixelFormat).width); }
-		if (IOSurfaceGetElementHeight(ioSurface) != pixFmts->getBlockTexelSize(_mtlPixelFormat).height) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface element height %zu does not match VkImage element height %d.", IOSurfaceGetElementHeight(ioSurface), pixFmts->getBlockTexelSize(_mtlPixelFormat).height); }
+		if (IOSurfaceGetBytesPerElement(ioSurface) != pixFmts->getBytesPerBlock(_vkFormat)) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface bytes per element %zu does not match VkImage bytes per element %d.", IOSurfaceGetBytesPerElement(ioSurface), pixFmts->getBytesPerBlock(_vkFormat)); }
+		if (IOSurfaceGetElementWidth(ioSurface) != pixFmts->getBlockTexelSize(_vkFormat).width) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface element width %zu does not match VkImage element width %d.", IOSurfaceGetElementWidth(ioSurface), pixFmts->getBlockTexelSize(_vkFormat).width); }
+		if (IOSurfaceGetElementHeight(ioSurface) != pixFmts->getBlockTexelSize(_vkFormat).height) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface element height %zu does not match VkImage element height %d.", IOSurfaceGetElementHeight(ioSurface), pixFmts->getBlockTexelSize(_vkFormat).height); }
+        if (IOSurfaceGetPlaneCount(ioSurface) != _planes.size()) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface plane count %zu does not match VkImage plane count %lu.", IOSurfaceGetPlaneCount(ioSurface), _planes.size()); }
+        if (_hasChromaSubsampling) {
+            for (uint8_t planeIndex = 0; planeIndex < _planes.size(); ++planeIndex) {
+                if (IOSurfaceGetWidthOfPlane(ioSurface, planeIndex) != getExtent3D(planeIndex, 0).width) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface width %zu of plane %d does not match VkImage width %d.", IOSurfaceGetWidthOfPlane(ioSurface, planeIndex), planeIndex, getExtent3D(planeIndex, 0).width); }
+                if (IOSurfaceGetHeightOfPlane(ioSurface, planeIndex) != getExtent3D(planeIndex, 0).height) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface height %zu of plane %d does not match VkImage height %d.", IOSurfaceGetHeightOfPlane(ioSurface, planeIndex), planeIndex, getExtent3D(planeIndex, 0).height); }
+                if (IOSurfaceGetBytesPerElementOfPlane(ioSurface, planeIndex) != _planes[planeIndex]->_bytesPerBlock) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface bytes per element %zu of plane %d does not match VkImage bytes per element %d.", IOSurfaceGetBytesPerElementOfPlane(ioSurface, planeIndex), planeIndex, _planes[planeIndex]->_bytesPerBlock); }
+                if (IOSurfaceGetElementWidthOfPlane(ioSurface, planeIndex) != _planes[planeIndex]->_blockTexelSize.width) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface element width %zu of plane %d does not match VkImage element width %d.", IOSurfaceGetElementWidthOfPlane(ioSurface, planeIndex), planeIndex, _planes[planeIndex]->_blockTexelSize.width); }
+                if (IOSurfaceGetElementHeightOfPlane(ioSurface, planeIndex) != _planes[planeIndex]->_blockTexelSize.height) { return reportError(VK_ERROR_INITIALIZATION_FAILED, "vkUseIOSurfaceMVK() : IOSurface element height %zu of plane %d does not match VkImage element height %d.", IOSurfaceGetElementHeightOfPlane(ioSurface, planeIndex), planeIndex, _planes[planeIndex]->_blockTexelSize.height); }
+            }
+        }
 
         _ioSurface = ioSurface;
         CFRetain(_ioSurface);
     } else {
+        @autoreleasepool {
+            CFMutableDictionaryRef properties = CFDictionaryCreateMutableCopy(NULL, 0, (CFDictionaryRef)@{
+			    (id)kIOSurfaceWidth: @(_extent.width),
+			    (id)kIOSurfaceHeight: @(_extent.height),
+			    (id)kIOSurfaceBytesPerElement: @(pixFmts->getBytesPerBlock(_vkFormat)),
+			    (id)kIOSurfaceElementWidth: @(pixFmts->getBlockTexelSize(_vkFormat).width),
+			    (id)kIOSurfaceElementHeight: @(pixFmts->getBlockTexelSize(_vkFormat).height),
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
-		@autoreleasepool {
-			_ioSurface = IOSurfaceCreate((CFDictionaryRef)@{
-															(id)kIOSurfaceWidth: @(_extent.width),
-															(id)kIOSurfaceHeight: @(_extent.height),
-															(id)kIOSurfaceBytesPerElement: @(pixFmts->getBytesPerBlock(_mtlPixelFormat)),
-															(id)kIOSurfaceElementWidth: @(pixFmts->getBlockTexelSize(_mtlPixelFormat).width),
-															(id)kIOSurfaceElementHeight: @(pixFmts->getBlockTexelSize(_mtlPixelFormat).height),
-															(id)kIOSurfaceIsGlobal: @(true),    // Deprecated but needed for interprocess transfers
-															});
-		}
+			    (id)kIOSurfaceIsGlobal: @(true), // Deprecated but needed for interprocess transfers
 #pragma clang diagnostic pop
-
+            });
+            if(_hasChromaSubsampling) {
+                CFMutableArrayRef planeProperties = CFArrayCreateMutable(NULL, _planes.size(), NULL);
+                for (uint8_t planeIndex = 0; planeIndex < _planes.size(); ++planeIndex) {
+                    CFArrayAppendValue(planeProperties, (CFDictionaryRef)@{
+                        (id)kIOSurfacePlaneWidth: @(getExtent3D(planeIndex, 0).width),
+                        (id)kIOSurfacePlaneHeight: @(getExtent3D(planeIndex, 0).height),
+                        (id)kIOSurfacePlaneBytesPerElement: @(_planes[planeIndex]->_bytesPerBlock),
+                        (id)kIOSurfacePlaneElementWidth: @(_planes[planeIndex]->_blockTexelSize.width),
+                        (id)kIOSurfacePlaneElementHeight: @(_planes[planeIndex]->_blockTexelSize.height),
+                    });
+                }
+                CFDictionaryAddValue(properties, (id)kIOSurfacePlaneInfo, planeProperties);
+            }
+            _ioSurface = IOSurfaceCreate(properties);
+        }
     }
 
 #endif
@@ -408,40 +699,10 @@
     return VK_SUCCESS;
 }
 
-// Returns a Metal texture descriptor constructed from the properties of this image.
-// It is the caller's responsibility to release the returned descriptor object.
-MTLTextureDescriptor* MVKImage::newMTLTextureDescriptor() {
-	MTLPixelFormat mtlPixFmt = _mtlPixelFormat;
-	MTLTextureUsage minUsage = MTLTextureUsageUnknown;
-#if MVK_MACOS
-	if (_is3DCompressed) {
-		// Metal before 3.0 doesn't support 3D compressed textures, so we'll decompress
-		// the texture ourselves. This, then, is the *uncompressed* format.
-		mtlPixFmt = MTLPixelFormatBGRA8Unorm;
-		minUsage = MTLTextureUsageShaderWrite;
-	}
-#endif
-
-	MTLTextureDescriptor* mtlTexDesc = [MTLTextureDescriptor new];	// retained
-	mtlTexDesc.pixelFormat = mtlPixFmt;
-	mtlTexDesc.textureType = _mtlTextureType;
-	mtlTexDesc.width = _extent.width;
-	mtlTexDesc.height = _extent.height;
-	mtlTexDesc.depth = _extent.depth;
-	mtlTexDesc.mipmapLevelCount = _mipLevels;
-	mtlTexDesc.sampleCount = mvkSampleCountFromVkSampleCountFlagBits(_samples);
-	mtlTexDesc.arrayLength = _arrayLayers;
-	mtlTexDesc.usageMVK = getPixelFormats()->getMTLTextureUsage(_usage, mtlPixFmt, minUsage);
-	mtlTexDesc.storageModeMVK = getMTLStorageMode();
-	mtlTexDesc.cpuCacheMode = getMTLCPUCacheMode();
-
-	return mtlTexDesc;
-}
-
 MTLStorageMode MVKImage::getMTLStorageMode() {
-    if ( !_deviceMemory ) return MTLStorageModePrivate;
+    if ( !_memoryBindings[0]->_deviceMemory ) return MTLStorageModePrivate;
 
-    MTLStorageMode stgMode = _deviceMemory->getMTLStorageMode();
+    MTLStorageMode stgMode = _memoryBindings[0]->_deviceMemory->getMTLStorageMode();
 
     if (_ioSurface && stgMode == MTLStorageModePrivate) { stgMode = MTLStorageModeShared; }
 
@@ -453,121 +714,17 @@
 }
 
 MTLCPUCacheMode MVKImage::getMTLCPUCacheMode() {
-	return _deviceMemory ? _deviceMemory->getMTLCPUCacheMode() : MTLCPUCacheModeDefaultCache;
+	return _memoryBindings[0]->_deviceMemory ? _memoryBindings[0]->_deviceMemory->getMTLCPUCacheMode() : MTLCPUCacheModeDefaultCache;
 }
 
 bool MVKImage::isMemoryHostCoherent() {
     return (getMTLStorageMode() == MTLStorageModeShared);
 }
 
-// Updates the contents of the underlying MTLTexture, corresponding to the
-// specified subresource definition, from the underlying memory buffer.
-void MVKImage::updateMTLTextureContent(MVKImageSubresource& subresource,
-                                       VkDeviceSize offset, VkDeviceSize size) {
-
-	VkImageSubresource& imgSubRez = subresource.subresource;
-	VkSubresourceLayout& imgLayout = subresource.layout;
-
-	// Check if subresource overlaps the memory range.
-    VkDeviceSize memStart = offset;
-    VkDeviceSize memEnd = offset + size;
-    VkDeviceSize imgStart = imgLayout.offset;
-    VkDeviceSize imgEnd = imgLayout.offset + imgLayout.size;
-    if (imgStart >= memEnd || imgEnd <= memStart) { return; }
-
-	// Don't update if host memory has not been mapped yet.
-	void* pHostMem = getHostMemoryAddress();
-	if ( !pHostMem ) { return; }
-
-    VkExtent3D mipExtent = getExtent3D(imgSubRez.mipLevel);
-    VkImageType imgType = getImageType();
-    void* pImgBytes = (void*)((uintptr_t)pHostMem + imgLayout.offset);
-
-    MTLRegion mtlRegion;
-    mtlRegion.origin = MTLOriginMake(0, 0, 0);
-    mtlRegion.size = mvkMTLSizeFromVkExtent3D(mipExtent);
-
-#if MVK_MACOS
-    std::unique_ptr<char[]> decompBuffer;
-    if (_is3DCompressed) {
-        // We cannot upload the texture data directly in this case. But we
-        // can upload the decompressed image data.
-        std::unique_ptr<MVKCodec> codec = mvkCreateCodec(getVkFormat());
-        if (!codec) {
-            reportError(VK_ERROR_FORMAT_NOT_SUPPORTED, "A 3D texture used a compressed format that MoltenVK does not yet support.");
-            return;
-        }
-        VkSubresourceLayout destLayout;
-        destLayout.rowPitch = 4 * mipExtent.width;
-        destLayout.depthPitch = destLayout.rowPitch * mipExtent.height;
-        destLayout.size = destLayout.depthPitch * mipExtent.depth;
-        decompBuffer = std::unique_ptr<char[]>(new char[destLayout.size]);
-        codec->decompress(decompBuffer.get(), pImgBytes, destLayout, imgLayout, mipExtent);
-        pImgBytes = decompBuffer.get();
-        imgLayout = destLayout;
-    }
-#endif
-
-	VkDeviceSize bytesPerRow = (imgType != VK_IMAGE_TYPE_1D) ? imgLayout.rowPitch : 0;
-	VkDeviceSize bytesPerImage = (imgType == VK_IMAGE_TYPE_3D) ? imgLayout.depthPitch : 0;
-
-	id<MTLTexture> mtlTex = getMTLTexture();
-	if (getPixelFormats()->isPVRTCFormat(mtlTex.pixelFormat)) {
-		bytesPerRow = 0;
-		bytesPerImage = 0;
-	}
-
-	[mtlTex replaceRegion: mtlRegion
-			  mipmapLevel: imgSubRez.mipLevel
-					slice: imgSubRez.arrayLayer
-				withBytes: pImgBytes
-			  bytesPerRow: bytesPerRow
-			bytesPerImage: bytesPerImage];
-}
-
-// Updates the contents of the underlying memory buffer from the contents of
-// the underlying MTLTexture, corresponding to the specified subresource definition.
-void MVKImage::getMTLTextureContent(MVKImageSubresource& subresource,
-                                    VkDeviceSize offset, VkDeviceSize size) {
-
-	VkImageSubresource& imgSubRez = subresource.subresource;
-	VkSubresourceLayout& imgLayout = subresource.layout;
-
-	// Check if subresource overlaps the memory range.
-    VkDeviceSize memStart = offset;
-    VkDeviceSize memEnd = offset + size;
-    VkDeviceSize imgStart = imgLayout.offset;
-    VkDeviceSize imgEnd = imgLayout.offset + imgLayout.size;
-    if (imgStart >= memEnd || imgEnd <= memStart) { return; }
-
-	// Don't update if host memory has not been mapped yet.
-	void* pHostMem = getHostMemoryAddress();
-	if ( !pHostMem ) { return; }
-
-    VkExtent3D mipExtent = getExtent3D(imgSubRez.mipLevel);
-    VkImageType imgType = getImageType();
-    void* pImgBytes = (void*)((uintptr_t)pHostMem + imgLayout.offset);
-
-    MTLRegion mtlRegion;
-    mtlRegion.origin = MTLOriginMake(0, 0, 0);
-    mtlRegion.size = mvkMTLSizeFromVkExtent3D(mipExtent);
-
-    [getMTLTexture() getBytes: pImgBytes
-                  bytesPerRow: (imgType != VK_IMAGE_TYPE_1D ? imgLayout.rowPitch : 0)
-                bytesPerImage: (imgType == VK_IMAGE_TYPE_3D ? imgLayout.depthPitch : 0)
-                   fromRegion: mtlRegion
-                  mipmapLevel: imgSubRez.mipLevel
-                        slice: imgSubRez.arrayLayer];
-}
-
-
 #pragma mark Construction
 
-MVKImage::MVKImage(MVKDevice* device, const VkImageCreateInfo* pCreateInfo) : MVKResource(device) {
-
-	_mtlTexture = nil;
+MVKImage::MVKImage(MVKDevice* device, const VkImageCreateInfo* pCreateInfo) : MVKVulkanAPIDeviceObject(device) {
 	_ioSurface = nil;
-	_usesTexelBuffer = false;
 
     // Adjust the info components to be compatible with Metal, then use the modified versions to set other
 	// config info. Vulkan allows unused extent dimensions to be zero, but Metal requires minimum of one.
@@ -591,32 +748,53 @@
 	_isLinear = validateLinear(pCreateInfo, isAttachment);
 
 	MVKPixelFormats* pixFmts = getPixelFormats();
-	_mtlPixelFormat = pixFmts->getMTLPixelFormat(pCreateInfo->format);
+    _vkFormat = pCreateInfo->format;
 	_usage = pCreateInfo->usage;
 
 	_is3DCompressed = (getImageType() == VK_IMAGE_TYPE_3D) && (pixFmts->getFormatType(pCreateInfo->format) == kMVKFormatCompressed) && !_device->_pMetalFeatures->native3DCompressedTextures;
 	_isDepthStencilAttachment = (mvkAreAllFlagsEnabled(pCreateInfo->usage, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) ||
 								 mvkAreAllFlagsEnabled(pixFmts->getVkFormatProperties(pCreateInfo->format).optimalTilingFeatures, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT));
 	_canSupportMTLTextureView = !_isDepthStencilAttachment || _device->_pMetalFeatures->stencilViews;
-	_hasExpectedTexelSize = (pixFmts->getBytesPerBlock(_mtlPixelFormat) == pixFmts->getBytesPerBlock(pCreateInfo->format));
-
 	_rowByteAlignment = _isLinear ? _device->getVkFormatTexelBufferAlignment(pCreateInfo->format, this) : mvkEnsurePowerOfTwo(pixFmts->getBytesPerBlock(pCreateInfo->format));
-	if (!_isLinear && _device->_pMetalFeatures->placementHeaps) {
-		MTLTextureDescriptor *mtlTexDesc = newMTLTextureDescriptor();	// temp retain
-		MTLSizeAndAlign sizeAndAlign = [_device->getMTLDevice() heapTextureSizeAndAlignWithDescriptor: mtlTexDesc];
-		[mtlTexDesc release];
-		_byteCount = sizeAndAlign.size;
-		_byteAlignment = sizeAndAlign.align;
-		_isAliasable = mvkIsAnyFlagEnabled(pCreateInfo->flags, VK_IMAGE_CREATE_ALIAS_BIT);
-	} else {
-		// Calc _byteCount after _rowByteAlignment
-		_byteAlignment = _rowByteAlignment;
-		for (uint32_t mipLvl = 0; mipLvl < _mipLevels; mipLvl++) {
-			_byteCount += getBytesPerLayer(mipLvl) * _extent.depth * _arrayLayers;
-		}
-	}
 
-    initSubresources(pCreateInfo);
+    VkExtent2D blockTexelSizeOfPlane[3];
+    uint32_t bytesPerBlockOfPlane[3];
+    MTLPixelFormat mtlPixFmtOfPlane[3];
+    uint8_t subsamplingPlaneCount = pixFmts->getChromaSubsamplingPlanes(_vkFormat, blockTexelSizeOfPlane, bytesPerBlockOfPlane, mtlPixFmtOfPlane),
+            planeCount = std::max(subsamplingPlaneCount, (uint8_t)1),
+            memoryBindingCount = (pCreateInfo->flags & VK_IMAGE_CREATE_DISJOINT_BIT) ? planeCount : 1;
+    _hasChromaSubsampling = (subsamplingPlaneCount > 0);
+
+    for (uint8_t planeIndex = 0; planeIndex < memoryBindingCount; ++planeIndex) {
+        _memoryBindings.push_back(std::unique_ptr<MVKImageMemoryBinding>(new MVKImageMemoryBinding(device, this, planeIndex)));
+    }
+
+    for (uint8_t planeIndex = 0; planeIndex < planeCount; ++planeIndex) {
+        _planes.push_back(std::unique_ptr<MVKImagePlane>(new MVKImagePlane(this, planeIndex)));
+        if (_hasChromaSubsampling) {
+            _planes[planeIndex]->_blockTexelSize = blockTexelSizeOfPlane[planeIndex];
+            _planes[planeIndex]->_bytesPerBlock = bytesPerBlockOfPlane[planeIndex];
+            _planes[planeIndex]->_mtlPixFmt = mtlPixFmtOfPlane[planeIndex];
+        } else {
+            _planes[planeIndex]->_mtlPixFmt = getPixelFormats()->getMTLPixelFormat(_vkFormat);
+        }
+        _planes[planeIndex]->initSubresources(pCreateInfo);
+        MVKImageMemoryBinding* memoryBinding = _planes[planeIndex]->getMemoryBinding();
+        if (!_isLinear && _device->_pMetalFeatures->placementHeaps) {
+            MTLTextureDescriptor* mtlTexDesc = _planes[planeIndex]->newMTLTextureDescriptor();    // temp retain
+            MTLSizeAndAlign sizeAndAlign = [_device->getMTLDevice() heapTextureSizeAndAlignWithDescriptor: mtlTexDesc];
+            [mtlTexDesc release];
+            memoryBinding->_byteCount += sizeAndAlign.size;
+            memoryBinding->_byteAlignment = std::max(memoryBinding->_byteAlignment, (VkDeviceSize)sizeAndAlign.align);
+            _isAliasable = mvkIsAnyFlagEnabled(pCreateInfo->flags, VK_IMAGE_CREATE_ALIAS_BIT);
+        } else {
+            for (uint32_t mipLvl = 0; mipLvl < _mipLevels; mipLvl++) {
+                memoryBinding->_byteCount += getBytesPerLayer(planeIndex, mipLvl) * _extent.depth * _arrayLayers;
+            }
+            memoryBinding->_byteAlignment = std::max(memoryBinding->_byteAlignment, _rowByteAlignment);
+        }
+    }
+    _hasExpectedTexelSize = _hasChromaSubsampling || (pixFmts->getBytesPerBlock(_planes[0]->_mtlPixFmt) == pixFmts->getBytesPerBlock(_vkFormat));
 
 	for (const auto* next = (const VkBaseInStructure*)pCreateInfo->pNext; next; next = next->pNext) {
 		switch (next->sType) {
@@ -755,62 +933,19 @@
 	return isLin;
 }
 
-
-// Initializes the subresource definitions.
-void MVKImage::initSubresources(const VkImageCreateInfo* pCreateInfo) {
-	_subresources.reserve(_mipLevels * _arrayLayers);
-
-	MVKImageSubresource subRez;
-	subRez.layoutState = pCreateInfo->initialLayout;
-
-	for (uint32_t mipLvl = 0; mipLvl < _mipLevels; mipLvl++) {
-		subRez.subresource.mipLevel = mipLvl;
-
-		for (uint32_t layer = 0; layer < _arrayLayers; layer++) {
-			subRez.subresource.arrayLayer = layer;
-			initSubresourceLayout(subRez);
-			_subresources.push_back(subRez);
-		}
-	}
-}
-
-// Initializes the layout element of the specified image subresource.
-void MVKImage::initSubresourceLayout(MVKImageSubresource& imgSubRez) {
-	VkImageSubresource subresource = imgSubRez.subresource;
-	uint32_t currMipLevel = subresource.mipLevel;
-	uint32_t currArrayLayer = subresource.arrayLayer;
-
-	VkDeviceSize bytesPerLayerCurrLevel = getBytesPerLayer(currMipLevel);
-
-	// Accumulate the byte offset for the specified sub-resource.
-	// This is the sum of the bytes consumed by all layers in all mipmap levels before the
-	// desired level, plus the layers before the desired layer at the desired level.
-	VkDeviceSize offset = 0;
-	for (uint32_t mipLvl = 0; mipLvl < currMipLevel; mipLvl++) {
-		offset += (getBytesPerLayer(mipLvl) * _extent.depth * _arrayLayers);
-	}
-	offset += (bytesPerLayerCurrLevel * currArrayLayer);
-
-	VkSubresourceLayout& layout = imgSubRez.layout;
-	layout.offset = offset;
-	layout.size = bytesPerLayerCurrLevel;
-	layout.rowPitch = getBytesPerRow(currMipLevel);
-	layout.depthPitch = bytesPerLayerCurrLevel;
-}
-
 void MVKImage::initExternalMemory(VkExternalMemoryHandleTypeFlags handleTypes) {
 	if (mvkIsOnlyAnyFlagEnabled(handleTypes, VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_KHR)) {
-		_externalMemoryHandleTypes = handleTypes;
-		auto& xmProps = _device->getPhysicalDevice()->getExternalImageProperties(VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_KHR);
-		_requiresDedicatedMemoryAllocation = _requiresDedicatedMemoryAllocation || mvkIsAnyFlagEnabled(xmProps.externalMemoryFeatures, VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT);
+        auto& xmProps = _device->getPhysicalDevice()->getExternalImageProperties(VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_KHR);
+        for(auto& memoryBinding : _memoryBindings) {
+            memoryBinding->_externalMemoryHandleTypes = handleTypes;
+            memoryBinding->_requiresDedicatedMemoryAllocation = memoryBinding->_requiresDedicatedMemoryAllocation || mvkIsAnyFlagEnabled(xmProps.externalMemoryFeatures, VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT);
+        }
 	} else {
 		setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage(): Only external memory handle type VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_KHR is supported."));
 	}
 }
 
 MVKImage::~MVKImage() {
-	if (_deviceMemory) { _deviceMemory->removeImage(this); }
-	releaseMTLTexture();
     releaseIOSurface();
 }
 
@@ -818,7 +953,7 @@
 #pragma mark -
 #pragma mark MVKSwapchainImage
 
-VkResult MVKSwapchainImage::bindDeviceMemory(MVKDeviceMemory*, VkDeviceSize) {
+VkResult MVKSwapchainImage::bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset, uint8_t planeIndex) {
 	return VK_ERROR_OUT_OF_DEVICE_MEMORY;
 }
 
@@ -826,7 +961,7 @@
 #pragma mark Metal
 
 // Overridden to always retrieve the MTLTexture directly from the CAMetalDrawable.
-id<MTLTexture> MVKSwapchainImage::getMTLTexture() { return [getCAMetalDrawable() texture]; }
+id<MTLTexture> MVKSwapchainImage::getMTLTexture(uint8_t planeIndex) { return [getCAMetalDrawable() texture]; }
 
 
 #pragma mark Construction
@@ -872,7 +1007,7 @@
 		// If this image is available, signal the semaphore and fence that were associated
 		// with the last time this image was acquired while available. This is a workaround for
 		// when an app uses a single semaphore or fence for more than one swapchain image.
-		// Becuase the semaphore or fence will be signaled by more than one image, it will
+		// Because the semaphore or fence will be signaled by more than one image, it will
 		// get out of sync, and the final use of the image would not be signaled as a result.
 		signaler = _preSignaler;
 	} else {
@@ -968,7 +1103,7 @@
 
 // Present the drawable and make myself available only once the command buffer has completed.
 void MVKPresentableSwapchainImage::presentCAMetalDrawable(id<MTLCommandBuffer> mtlCmdBuff, bool hasPresentTime, uint32_t presentID, uint64_t desiredPresentTime) {
-	_swapchain->willPresentSurface(getMTLTexture(), mtlCmdBuff);
+	_swapchain->willPresentSurface(getMTLTexture(0), mtlCmdBuff);
 
 	NSString* scName = _swapchain->getDebugName();
 	if (scName) { mvkPushDebugGroup(mtlCmdBuff, scName); }
@@ -991,7 +1126,7 @@
 	}];
 	
 	if (hasPresentTime) {
-		if (@available(iOS 10.3, macOS 10.15.4, *)) {
+		if ([_mtlDrawable respondsToSelector: @selector(addPresentedHandler:)]) {
 			[_mtlDrawable addPresentedHandler: ^(id<MTLDrawable> drawable) {
 				// Record the presentation time
 				CFTimeInterval presentedTimeSeconds = drawable.presentedTime;
@@ -1000,7 +1135,7 @@
 			}];
 		} else {
 			// If MTLDrawable.presentedTime/addPresentedHandler isn't supported, just treat it as if the
-			// present happened when requrested
+			// present happened when requested
 			_swapchain->recordPresentTime(presentID, desiredPresentTime, desiredPresentTime);
 		}
 	}
@@ -1008,8 +1143,10 @@
 
 // Resets the MTLTexture and CAMetalDrawable underlying this image.
 void MVKPresentableSwapchainImage::releaseMetalDrawable() {
-	releaseMTLTexture();			// Release texture first so drawable will be last to release it
-	[_mtlDrawable release];
+    for (uint8_t planeIndex = 0; planeIndex < _planes.size(); ++planeIndex) {
+        _planes[planeIndex]->releaseMTLTexture();
+    }
+    [_mtlDrawable release];
 	_mtlDrawable = nil;
 }
 
@@ -1073,82 +1210,138 @@
 
 
 #pragma mark -
+#pragma mark MVKImageViewPlane
+
+void MVKImageViewPlane::propagateDebugName() { setLabelIfNotNil(_mtlTexture, _imageView->_debugName); }
+
+
+#pragma mark Metal
+
+id<MTLTexture> MVKImageViewPlane::getMTLTexture() {
+    // If we can use a Metal texture view, lazily create it, otherwise use the image texture directly.
+    if (_useMTLTextureView) {
+        if ( !_mtlTexture && _mtlPixFmt ) {
+
+            // Lock and check again in case another thread created the texture view
+            lock_guard<mutex> lock(_imageView->_lock);
+            if (_mtlTexture) { return _mtlTexture; }
+
+            _mtlTexture = newMTLTexture(); // retained
+
+            propagateDebugName();
+        }
+        return _mtlTexture;
+    } else {
+        return _imageView->_image->getMTLTexture(_planeIndex);
+    }
+}
+
+// Creates and returns a retained Metal texture as an
+// overlay on the Metal texture of the underlying image.
+id<MTLTexture> MVKImageViewPlane::newMTLTexture() {
+    MTLTextureType mtlTextureType = _imageView->_mtlTextureType;
+    NSRange sliceRange = NSMakeRange(_imageView->_subresourceRange.baseArrayLayer, _imageView->_subresourceRange.layerCount);
+    // Fake support for 2D views of 3D textures.
+    if (_imageView->_image->getImageType() == VK_IMAGE_TYPE_3D &&
+        (mtlTextureType == MTLTextureType2D || mtlTextureType == MTLTextureType2DArray)) {
+        mtlTextureType = MTLTextureType3D;
+        sliceRange = NSMakeRange(0, 1);
+    }
+    id<MTLTexture> mtlTex = _imageView->_image->getMTLTexture(MVKImage::getPlaneFromVkImageAspectFlags(_imageView->_subresourceRange.aspectMask));
+    if (_imageView->_device->_pMetalFeatures->nativeTextureSwizzle && _packedSwizzle) {
+        return [mtlTex newTextureViewWithPixelFormat: _mtlPixFmt
+                                         textureType: mtlTextureType
+                                              levels: NSMakeRange(_imageView->_subresourceRange.baseMipLevel, _imageView->_subresourceRange.levelCount)
+                                              slices: sliceRange
+                                             swizzle: mvkMTLTextureSwizzleChannelsFromVkComponentMapping(mvkUnpackSwizzle(_packedSwizzle))];    // retained
+    } else {
+        return [mtlTex newTextureViewWithPixelFormat: _mtlPixFmt
+                                         textureType: mtlTextureType
+                                              levels: NSMakeRange(_imageView->_subresourceRange.baseMipLevel, _imageView->_subresourceRange.levelCount)
+                                              slices: sliceRange];    // retained
+    }
+}
+
+
+#pragma mark Construction
+
+MVKImageViewPlane::MVKImageViewPlane(MVKImageView* imageView, uint8_t planeIndex, MTLPixelFormat mtlPixFmt, const VkImageViewCreateInfo* pCreateInfo) {
+    _imageView = imageView;
+    _planeIndex = planeIndex;
+    _mtlPixFmt = mtlPixFmt;
+    _mtlTexture = nil;
+
+    bool useSwizzle;
+    _imageView->setConfigurationResult(MVKImageView::validateSwizzledMTLPixelFormat(
+        pCreateInfo,
+        _imageView,
+        _imageView->_device->_pMetalFeatures->nativeTextureSwizzle,
+        _imageView->_device->_pMVKConfig->fullImageViewSwizzle,
+        mtlPixFmt,
+        useSwizzle
+    ));
+    _packedSwizzle = (useSwizzle) ? mvkPackSwizzle(pCreateInfo->components) : 0;
+
+    // Determine whether this image view should use a Metal texture view,
+    // and set the _useMTLTextureView variable appropriately.
+    if ( _imageView->_image ) {
+        _useMTLTextureView = _imageView->_image->_canSupportMTLTextureView;
+        bool is3D = _imageView->_image->_mtlTextureType == MTLTextureType3D;
+        // If the view is identical to underlying image, don't bother using a Metal view
+        if (_mtlPixFmt == _imageView->_image->getMTLPixelFormat(planeIndex) &&
+            (_imageView->_mtlTextureType == _imageView->_image->_mtlTextureType ||
+             ((_imageView->_mtlTextureType == MTLTextureType2D || _imageView->_mtlTextureType == MTLTextureType2DArray) && is3D)) &&
+            _imageView->_subresourceRange.levelCount == _imageView->_image->_mipLevels &&
+            (is3D || _imageView->_subresourceRange.layerCount == _imageView->_image->_arrayLayers) &&
+            (!_imageView->_device->_pMetalFeatures->nativeTextureSwizzle || !_packedSwizzle)) {
+            _useMTLTextureView = false;
+        }
+    } else {
+        _useMTLTextureView = false;
+    }
+}
+
+MVKImageViewPlane::~MVKImageViewPlane() {
+    [_mtlTexture release];
+}
+
+
+#pragma mark -
 #pragma mark MVKImageView
 
-void MVKImageView::propagateDebugName() { setLabelIfNotNil(_mtlTexture, _debugName); }
+void MVKImageView::propagateDebugName() {
+    for (uint8_t planeIndex = 0; planeIndex < _planes.size(); planeIndex++) {
+        _planes[planeIndex]->propagateDebugName();
+    }
+}
 
 void MVKImageView::populateMTLRenderPassAttachmentDescriptor(MTLRenderPassAttachmentDescriptor* mtlAttDesc) {
-    mtlAttDesc.texture = getMTLTexture();           // Use image view, necessary if image view format differs from image format
-    mtlAttDesc.level = _useMTLTextureView ? 0 : _subresourceRange.baseMipLevel;
+    MVKImageViewPlane* plane = _planes[0].get();
+    mtlAttDesc.texture = plane->getMTLTexture();           // Use image view, necessary if image view format differs from image format
+    mtlAttDesc.level = plane->_useMTLTextureView ? 0 : _subresourceRange.baseMipLevel;
     if (mtlAttDesc.texture.textureType == MTLTextureType3D) {
         mtlAttDesc.slice = 0;
-        mtlAttDesc.depthPlane = _useMTLTextureView ? 0 : _subresourceRange.baseArrayLayer;
+        mtlAttDesc.depthPlane = plane->_useMTLTextureView ? 0 : _subresourceRange.baseArrayLayer;
     } else {
-        mtlAttDesc.slice = _useMTLTextureView ? 0 : _subresourceRange.baseArrayLayer;
+        mtlAttDesc.slice = plane->_useMTLTextureView ? 0 : _subresourceRange.baseArrayLayer;
         mtlAttDesc.depthPlane = 0;
     }
 }
 
 void MVKImageView::populateMTLRenderPassAttachmentDescriptorResolve(MTLRenderPassAttachmentDescriptor* mtlAttDesc) {
-    mtlAttDesc.resolveTexture = getMTLTexture();    // Use image view, necessary if image view format differs from image format
-    mtlAttDesc.resolveLevel = _useMTLTextureView ? 0 : _subresourceRange.baseMipLevel;
+    MVKImageViewPlane* plane = _planes[0].get();
+    mtlAttDesc.resolveTexture = plane->getMTLTexture();    // Use image view, necessary if image view format differs from image format
+    mtlAttDesc.resolveLevel = plane->_useMTLTextureView ? 0 : _subresourceRange.baseMipLevel;
     if (mtlAttDesc.resolveTexture.textureType == MTLTextureType3D) {
         mtlAttDesc.resolveSlice = 0;
-        mtlAttDesc.resolveDepthPlane = _useMTLTextureView ? 0 : _subresourceRange.baseArrayLayer;
+        mtlAttDesc.resolveDepthPlane = plane->_useMTLTextureView ? 0 : _subresourceRange.baseArrayLayer;
     } else {
-        mtlAttDesc.resolveSlice = _useMTLTextureView ? 0 : _subresourceRange.baseArrayLayer;
+        mtlAttDesc.resolveSlice = plane->_useMTLTextureView ? 0 : _subresourceRange.baseArrayLayer;
         mtlAttDesc.resolveDepthPlane = 0;
     }
 }
 
 
-#pragma mark Metal
-
-id<MTLTexture> MVKImageView::getMTLTexture() {
-	// If we can use a Metal texture view, lazily create it, otherwise use the image texture directly.
-	if (_useMTLTextureView) {
-		if ( !_mtlTexture && _mtlPixelFormat ) {
-
-			// Lock and check again in case another thread created the texture view
-			lock_guard<mutex> lock(_lock);
-			if (_mtlTexture) { return _mtlTexture; }
-
-			_mtlTexture = newMTLTexture(); // retained
-
-			propagateDebugName();
-		}
-		return _mtlTexture;
-	} else {
-		return _image->getMTLTexture();
-	}
-}
-
-// Creates and returns a retained Metal texture as an
-// overlay on the Metal texture of the underlying image.
-id<MTLTexture> MVKImageView::newMTLTexture() {
-    MTLTextureType mtlTextureType = _mtlTextureType;
-    NSRange sliceRange = NSMakeRange(_subresourceRange.baseArrayLayer, _subresourceRange.layerCount);
-    // Fake support for 2D views of 3D textures.
-    if (_image->getImageType() == VK_IMAGE_TYPE_3D &&
-        (mtlTextureType == MTLTextureType2D || mtlTextureType == MTLTextureType2DArray)) {
-        mtlTextureType = MTLTextureType3D;
-        sliceRange = NSMakeRange(0, 1);
-    }
-    if (_device->_pMetalFeatures->nativeTextureSwizzle && _packedSwizzle) {
-        return [_image->getMTLTexture() newTextureViewWithPixelFormat: _mtlPixelFormat
-                                                          textureType: mtlTextureType
-                                                               levels: NSMakeRange(_subresourceRange.baseMipLevel, _subresourceRange.levelCount)
-                                                               slices: sliceRange
-                                                              swizzle: mvkMTLTextureSwizzleChannelsFromVkComponentMapping(mvkUnpackSwizzle(_packedSwizzle))];	// retained
-    } else {
-        return [_image->getMTLTexture() newTextureViewWithPixelFormat: _mtlPixelFormat
-                                                          textureType: mtlTextureType
-                                                               levels: NSMakeRange(_subresourceRange.baseMipLevel, _subresourceRange.levelCount)
-                                                               slices: sliceRange];	// retained
-    }
-}
-
-
 #pragma mark Construction
 
 MVKImageView::MVKImageView(MVKDevice* device,
@@ -1156,6 +1349,8 @@
 						   const MVKConfiguration* pAltMVKConfig) : MVKVulkanAPIDeviceObject(device) {
 	_image = (MVKImage*)pCreateInfo->image;
 	_usage = _image->_usage;
+    _mtlTextureType = mvkMTLTextureTypeFromVkImageViewType(pCreateInfo->viewType,
+    _image->getSampleCount() != VK_SAMPLE_COUNT_1_BIT);
 
 	for (const auto* next = (VkBaseInStructure*)pCreateInfo->pNext; next; next = next->pNext) {
 		switch (next->sType) {
@@ -1164,12 +1359,32 @@
 				if (!(pViewUsageInfo->usage & ~_usage)) { _usage = pViewUsageInfo->usage; }
 				break;
 			}
+            /* case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR: {
+                const VkSamplerYcbcrConversionInfoKHR* sampConvInfo = (const VkSamplerYcbcrConversionInfoKHR*)next;
+                break;
+            } */
 			default:
 				break;
 		}
 	}
 
-	validateImageViewConfig(pCreateInfo);
+    // Validate whether the image view configuration can be supported
+    if ( _image ) {
+        VkImageType imgType = _image->getImageType();
+        VkImageViewType viewType = pCreateInfo->viewType;
+
+        // VK_KHR_maintenance1 supports taking 2D image views of 3D slices. No dice in Metal.
+        if ((viewType == VK_IMAGE_VIEW_TYPE_2D || viewType == VK_IMAGE_VIEW_TYPE_2D_ARRAY) && (imgType == VK_IMAGE_TYPE_3D)) {
+            if (pCreateInfo->subresourceRange.layerCount != _image->_extent.depth) {
+                reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): Metal does not fully support views on a subset of a 3D texture.");
+            }
+            if ( !mvkIsAnyFlagEnabled(_usage, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) ) {
+                setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): 2D views on 3D images can only be used as color attachments."));
+            } else if (mvkIsOnlyAnyFlagEnabled(_usage, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)) {
+                reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): 2D views on 3D images can only be used as color attachments.");
+            }
+        }
+    }
 
 	// Remember the subresource range, and determine the actual number of mip levels and texture slices
     _subresourceRange = pCreateInfo->subresourceRange;
@@ -1180,50 +1395,40 @@
 		_subresourceRange.layerCount = _image->getLayerCount() - _subresourceRange.baseArrayLayer;
 	}
 
-	_mtlTexture = nil;
-	bool useSwizzle;
-	setConfigurationResult(validateSwizzledMTLPixelFormat(pCreateInfo, getPixelFormats(), this,
-														  _device->_pMetalFeatures->nativeTextureSwizzle,
-														  _device->_pMVKConfig->fullImageViewSwizzle,
-														  _mtlPixelFormat, useSwizzle));
-	_packedSwizzle = useSwizzle ? mvkPackSwizzle(pCreateInfo->components) : 0;
-	_mtlTextureType = mvkMTLTextureTypeFromVkImageViewType(pCreateInfo->viewType,
-														   _image->getSampleCount() != VK_SAMPLE_COUNT_1_BIT);
-	initMTLTextureViewSupport();
-}
-
-// Validate whether the image view configuration can be supported
-void MVKImageView::validateImageViewConfig(const VkImageViewCreateInfo* pCreateInfo) {
-
-	// No image if we are just validating view config
-	MVKImage* image = (MVKImage*)pCreateInfo->image;
-	if ( !image ) { return; }
-
-	VkImageType imgType = image->getImageType();
-	VkImageViewType viewType = pCreateInfo->viewType;
-
-	// VK_KHR_maintenance1 supports taking 2D image views of 3D slices. No dice in Metal.
-	if ((viewType == VK_IMAGE_VIEW_TYPE_2D || viewType == VK_IMAGE_VIEW_TYPE_2D_ARRAY) && (imgType == VK_IMAGE_TYPE_3D)) {
-		if (pCreateInfo->subresourceRange.layerCount != image->_extent.depth) {
-			reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): Metal does not fully support views on a subset of a 3D texture.");
-		}
-		if ( !mvkIsAnyFlagEnabled(_usage, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) ) {
-			setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): 2D views on 3D images can only be used as color attachments."));
-		} else if (mvkIsOnlyAnyFlagEnabled(_usage, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)) {
-			reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): 2D views on 3D images can only be used as color attachments.");
-		}
-	}
+    VkExtent2D blockTexelSizeOfPlane[3];
+    uint32_t bytesPerBlockOfPlane[3];
+    MTLPixelFormat mtlPixFmtOfPlane[3];
+    uint8_t subsamplingPlaneCount = getPixelFormats()->getChromaSubsamplingPlanes(pCreateInfo->format, blockTexelSizeOfPlane, bytesPerBlockOfPlane, mtlPixFmtOfPlane),
+            beginPlaneIndex = 0,
+            endPlaneIndex = subsamplingPlaneCount;
+    if (subsamplingPlaneCount == 0) {
+        endPlaneIndex = 1;
+        mtlPixFmtOfPlane[0] = getPixelFormats()->getMTLPixelFormat(pCreateInfo->format);
+    } else {
+        if (!mvkVkComponentMappingsMatch(pCreateInfo->components, {VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A})) {
+            setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "Image view swizzling for multi planar formats is not supported."));
+        }
+        if (_subresourceRange.aspectMask & (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT)) {
+            beginPlaneIndex = endPlaneIndex = MVKImage::getPlaneFromVkImageAspectFlags(_subresourceRange.aspectMask);
+        }
+    }
+    for (uint8_t planeIndex = beginPlaneIndex; planeIndex < endPlaneIndex; planeIndex++) {
+        _planes.push_back(std::unique_ptr<MVKImageViewPlane>(new MVKImageViewPlane(
+            this,
+            planeIndex,
+            mtlPixFmtOfPlane[planeIndex],
+            pCreateInfo
+        )));
+    }
 }
 
 VkResult MVKImageView::validateSwizzledMTLPixelFormat(const VkImageViewCreateInfo* pCreateInfo,
-													  MVKPixelFormats* mvkPixFmts,
 													  MVKVulkanAPIObject* apiObject,
 													  bool hasNativeSwizzleSupport,
 													  bool hasShaderSwizzleSupport,
 													  MTLPixelFormat& mtlPixFmt,
 													  bool& useSwizzle) {
 	useSwizzle = false;
-	mtlPixFmt = mvkPixFmts->getMTLPixelFormat(pCreateInfo->format);
 	VkComponentMapping components = pCreateInfo->components;
 
 	#define SWIZZLE_MATCHES(R, G, B, A)    mvkVkComponentMappingsMatch(components, {VK_COMPONENT_SWIZZLE_ ##R, VK_COMPONENT_SWIZZLE_ ##G, VK_COMPONENT_SWIZZLE_ ##B, VK_COMPONENT_SWIZZLE_ ##A} )
@@ -1231,6 +1436,16 @@
 
 	// If we have an identity swizzle, we're all good.
 	if (SWIZZLE_MATCHES(R, G, B, A)) {
+		// Change to stencil-only format if only stencil aspect is requested
+		if (pCreateInfo->subresourceRange.aspectMask == VK_IMAGE_ASPECT_STENCIL_BIT) {
+			if (mtlPixFmt == MTLPixelFormatDepth32Float_Stencil8)
+				mtlPixFmt = MTLPixelFormatX32_Stencil8;
+#if MVK_MACOS
+			else if (mtlPixFmt == MTLPixelFormatDepth24Unorm_Stencil8)
+				mtlPixFmt = MTLPixelFormatX24_Stencil8;
+#endif
+		}
+
 		return VK_SUCCESS;
 	}
 
@@ -1319,32 +1534,90 @@
 								  mvkVkComponentSwizzleName(components.b), mvkVkComponentSwizzleName(components.a));
 }
 
-// Determine whether this image view should use a Metal texture view,
-// and set the _useMTLTextureView variable appropriately.
-void MVKImageView::initMTLTextureViewSupport() {
 
-	// If no image we're just validating image iview config
-	if ( !_image ) {
-		_useMTLTextureView = false;
-		return;
-	}
+#pragma mark -
+#pragma mark MVKSamplerYcbcrConversion
 
-	_useMTLTextureView = _image->_canSupportMTLTextureView;
+void MVKSamplerYcbcrConversion::updateConstExprSampler(MSLConstexprSampler& constExprSampler) const {
+	constExprSampler.planes = _planes;
+	constExprSampler.resolution = _resolution;
+	constExprSampler.chroma_filter = _chroma_filter;
+	constExprSampler.x_chroma_offset = _x_chroma_offset;
+	constExprSampler.y_chroma_offset = _y_chroma_offset;
+    for (uint32_t i = 0; i < 4; ++i) {
+		constExprSampler.swizzle[i] = _swizzle[i];
+    }
+	constExprSampler.ycbcr_model = _ycbcr_model;
+	constExprSampler.ycbcr_range = _ycbcr_range;
+    constExprSampler.bpc = _bpc;
+	constExprSampler.ycbcr_conversion_enable = true;
+}
 
-	bool is3D = _image->_mtlTextureType == MTLTextureType3D;
-	// If the view is identical to underlying image, don't bother using a Metal view
-	if (_mtlPixelFormat == _image->_mtlPixelFormat &&
-		(_mtlTextureType == _image->_mtlTextureType ||
-		 ((_mtlTextureType == MTLTextureType2D || _mtlTextureType == MTLTextureType2DArray) && is3D)) &&
-		_subresourceRange.levelCount == _image->_mipLevels &&
-		(is3D || _subresourceRange.layerCount == _image->_arrayLayers) &&
-		(!_device->_pMetalFeatures->nativeTextureSwizzle || !_packedSwizzle)) {
-		_useMTLTextureView = false;
+static MSLSamplerFilter getSpvMinMagFilterFromVkFilter(VkFilter vkFilter) {
+    switch (vkFilter) {
+        case VK_FILTER_LINEAR:    return MSL_SAMPLER_FILTER_LINEAR;
+
+        case VK_FILTER_NEAREST:
+        default:
+            return MSL_SAMPLER_FILTER_NEAREST;
+    }
+}
+
+static MSLChromaLocation getSpvChromaLocationFromVkChromaLocation(VkChromaLocation vkChromaLocation) {
+	switch (vkChromaLocation) {
+		default:
+		case VK_CHROMA_LOCATION_COSITED_EVEN:   return MSL_CHROMA_LOCATION_COSITED_EVEN;
+		case VK_CHROMA_LOCATION_MIDPOINT:       return MSL_CHROMA_LOCATION_MIDPOINT;
 	}
 }
 
-MVKImageView::~MVKImageView() {
-	[_mtlTexture release];
+static MSLComponentSwizzle getSpvComponentSwizzleFromVkComponentMapping(VkComponentSwizzle vkComponentSwizzle) {
+	switch (vkComponentSwizzle) {
+		default:
+		case VK_COMPONENT_SWIZZLE_IDENTITY:     return MSL_COMPONENT_SWIZZLE_IDENTITY;
+		case VK_COMPONENT_SWIZZLE_ZERO:         return MSL_COMPONENT_SWIZZLE_ZERO;
+		case VK_COMPONENT_SWIZZLE_ONE:          return MSL_COMPONENT_SWIZZLE_ONE;
+		case VK_COMPONENT_SWIZZLE_R:            return MSL_COMPONENT_SWIZZLE_R;
+		case VK_COMPONENT_SWIZZLE_G:            return MSL_COMPONENT_SWIZZLE_G;
+		case VK_COMPONENT_SWIZZLE_B:            return MSL_COMPONENT_SWIZZLE_B;
+		case VK_COMPONENT_SWIZZLE_A:            return MSL_COMPONENT_SWIZZLE_A;
+	}
+}
+
+static MSLSamplerYCbCrModelConversion getSpvSamplerYCbCrModelConversionFromVkSamplerYcbcrModelConversion(VkSamplerYcbcrModelConversion vkSamplerYcbcrModelConversion) {
+	switch (vkSamplerYcbcrModelConversion) {
+		default:
+		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY:   return MSL_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY;
+		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY: return MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY;
+		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709:      return MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_BT_709;
+		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601:      return MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_BT_601;
+		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020:     return MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_BT_2020;
+	}
+}
+
+static MSLSamplerYCbCrRange getSpvSamplerYcbcrRangeFromVkSamplerYcbcrRange(VkSamplerYcbcrRange vkSamplerYcbcrRange) {
+	switch (vkSamplerYcbcrRange) {
+		default:
+		case VK_SAMPLER_YCBCR_RANGE_ITU_FULL:   return MSL_SAMPLER_YCBCR_RANGE_ITU_FULL;
+		case VK_SAMPLER_YCBCR_RANGE_ITU_NARROW: return MSL_SAMPLER_YCBCR_RANGE_ITU_NARROW;
+	}
+}
+
+MVKSamplerYcbcrConversion::MVKSamplerYcbcrConversion(MVKDevice* device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo) : MVKVulkanAPIDeviceObject(device) {
+	MVKPixelFormats* pixFmts = getPixelFormats();
+	_planes = pixFmts->getChromaSubsamplingPlaneCount(pCreateInfo->format);
+	_bpc = pixFmts->getChromaSubsamplingComponentBits(pCreateInfo->format);
+	_resolution = pixFmts->getChromaSubsamplingResolution(pCreateInfo->format);
+	_chroma_filter = getSpvMinMagFilterFromVkFilter(pCreateInfo->chromaFilter);
+	_x_chroma_offset = getSpvChromaLocationFromVkChromaLocation(pCreateInfo->xChromaOffset);
+	_y_chroma_offset = getSpvChromaLocationFromVkChromaLocation(pCreateInfo->yChromaOffset);
+	_swizzle[0] = getSpvComponentSwizzleFromVkComponentMapping(pCreateInfo->components.r);
+	_swizzle[1] = getSpvComponentSwizzleFromVkComponentMapping(pCreateInfo->components.g);
+	_swizzle[2] = getSpvComponentSwizzleFromVkComponentMapping(pCreateInfo->components.b);
+	_swizzle[3] = getSpvComponentSwizzleFromVkComponentMapping(pCreateInfo->components.a);
+	_ycbcr_model = getSpvSamplerYCbCrModelConversionFromVkSamplerYcbcrModelConversion(pCreateInfo->ycbcrModel);
+	_ycbcr_range = getSpvSamplerYcbcrRangeFromVkSamplerYcbcrRange(pCreateInfo->ycbcrRange);
+	_forceExplicitReconstruction = pCreateInfo->forceExplicitReconstruction;
 }
 
 
@@ -1405,7 +1678,20 @@
 }
 
 MVKSampler::MVKSampler(MVKDevice* device, const VkSamplerCreateInfo* pCreateInfo) : MVKVulkanAPIDeviceObject(device) {
-	_requiresConstExprSampler = pCreateInfo->compareEnable && !_device->_pMetalFeatures->depthSampleCompare;
+    _ycbcrConversion = NULL;
+    for (const auto* next = (const VkBaseInStructure*)pCreateInfo->pNext; next; next = next->pNext) {
+		switch (next->sType) {
+			case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR: {
+				const VkSamplerYcbcrConversionInfoKHR* sampConvInfo = (const VkSamplerYcbcrConversionInfoKHR*)next;
+				_ycbcrConversion = (MVKSamplerYcbcrConversion*)(sampConvInfo->conversion);
+				break;
+			}
+			default:
+				break;
+		}
+	}
+
+	_requiresConstExprSampler = (pCreateInfo->compareEnable && !_device->_pMetalFeatures->depthSampleCompare) || _ycbcrConversion;
 
 	MTLSamplerDescriptor* mtlSampDesc = newMTLSamplerDescriptor(pCreateInfo);	// temp retain
     _mtlSamplerState = [getMTLDevice() newSamplerStateWithDescriptor: mtlSampDesc];
@@ -1414,16 +1700,6 @@
 	initConstExprSampler(pCreateInfo);
 }
 
-static MSLSamplerFilter getSpvMinMagFilterFromVkFilter(VkFilter vkFilter) {
-	switch (vkFilter) {
-		case VK_FILTER_LINEAR:	return MSL_SAMPLER_FILTER_LINEAR;
-
-		case VK_FILTER_NEAREST:
-		default:
-			return MSL_SAMPLER_FILTER_NEAREST;
-	}
-}
-
 static MSLSamplerMipFilter getSpvMipFilterFromVkMipMode(VkSamplerMipmapMode vkMipMode) {
 	switch (vkMipMode) {
 		case VK_SAMPLER_MIPMAP_MODE_LINEAR:		return MSL_SAMPLER_MIP_FILTER_LINEAR;
@@ -1479,7 +1755,7 @@
 			return MSL_SAMPLER_BORDER_COLOR_TRANSPARENT_BLACK;
 	}
 }
-\
+
 void MVKSampler::initConstExprSampler(const VkSamplerCreateInfo* pCreateInfo) {
 	if ( !_requiresConstExprSampler ) { return; }
 
@@ -1498,6 +1774,9 @@
 	_constExprSampler.compare_enable = pCreateInfo->compareEnable;
 	_constExprSampler.lod_clamp_enable = false;
 	_constExprSampler.anisotropy_enable = pCreateInfo->anisotropyEnable;
+    if (_ycbcrConversion) {
+        _ycbcrConversion->updateConstExprSampler(_constExprSampler);
+    }
 }
 
 MVKSampler::~MVKSampler() {
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKInstance.mm b/MoltenVK/MoltenVK/GPUObjects/MVKInstance.mm
index 4e618f4..7e466d6 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKInstance.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKInstance.mm
@@ -622,6 +622,8 @@
 	ADD_DVC_EXT_ENTRY_POINT(vkGetDescriptorSetLayoutSupportKHR, KHR_MAINTENANCE3);
 	ADD_DVC_EXT_ENTRY_POINT(vkCmdPushDescriptorSetKHR, KHR_PUSH_DESCRIPTOR);
 	ADD_DVC_EXT2_ENTRY_POINT(vkCmdPushDescriptorSetWithTemplateKHR, KHR_PUSH_DESCRIPTOR, KHR_DESCRIPTOR_UPDATE_TEMPLATE);
+	ADD_DVC_EXT_ENTRY_POINT(vkCreateSamplerYcbcrConversionKHR, KHR_SAMPLER_YCBCR_CONVERSION);
+	ADD_DVC_EXT_ENTRY_POINT(vkDestroySamplerYcbcrConversionKHR, KHR_SAMPLER_YCBCR_CONVERSION);
 	ADD_DVC_EXT_ENTRY_POINT(vkCreateSwapchainKHR, KHR_SWAPCHAIN);
 	ADD_DVC_EXT_ENTRY_POINT(vkDestroySwapchainKHR, KHR_SWAPCHAIN);
 	ADD_DVC_EXT_ENTRY_POINT(vkGetSwapchainImagesKHR, KHR_SWAPCHAIN);
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h
index 9503ba9..5f01d27 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h
@@ -184,6 +184,13 @@
 #pragma mark -
 #pragma mark MVKGraphicsPipeline
 
+/** Describes a buffer binding to accommodate vertex attributes with offsets greater than the stride. */
+struct MVKTranslatedVertexBinding {
+	uint16_t binding;
+	uint16_t translationBinding;
+	uint32_t translationOffset;
+};
+
 typedef MVKSmallVector<MVKGraphicsStage, 4> MVKPiplineStages;
 
 /** The number of dynamic states possible in Vulkan. */
@@ -230,6 +237,12 @@
 	/** Returns true if the tessellation control shader needs a buffer to store its per-patch output. */
 	bool needsTessCtlPatchOutputBuffer() { return _needsTessCtlPatchOutputBuffer; }
 
+	/** Returns the Metal vertex buffer index to use for the specified vertex attribute binding number.  */
+	uint32_t getMetalBufferIndexForVertexAttributeBinding(uint32_t binding) { return _device->getMetalBufferIndexForVertexAttributeBinding(binding); }
+
+	/** Returns the collection of translated vertex bindings. */
+	MVKArrayRef<MVKTranslatedVertexBinding> getTranslatedVertexBindings() { return _translatedVertexBindings.contents(); }
+
 	/** Constructs an instance for the device and parent (which may be NULL). */
 	MVKGraphicsPipeline(MVKDevice* device,
 						MVKPipelineCache* pipelineCache,
@@ -260,6 +273,7 @@
     void addFragmentOutputToPipeline(MTLRenderPipelineDescriptor* plDesc, const SPIRVTessReflectionData& reflectData, const VkGraphicsPipelineCreateInfo* pCreateInfo, bool isTessellationVertexPipeline = false);
     bool isRenderingPoints(const VkGraphicsPipelineCreateInfo* pCreateInfo, const SPIRVTessReflectionData& reflectData);
 	bool verifyImplicitBuffer(bool needsBuffer, MVKShaderImplicitRezBinding& index, MVKShaderStage stage, const char* name, uint32_t reservedBuffers);
+	uint32_t getTranslatedVertexBinding(uint32_t binding, uint32_t translationOffset, uint32_t maxBinding);
 
 	const VkPipelineShaderStageCreateInfo* _pVertexSS = nullptr;
 	const VkPipelineShaderStageCreateInfo* _pTessCtlSS = nullptr;
@@ -272,6 +286,7 @@
 
 	MVKSmallVector<VkViewport, kMVKCachedViewportScissorCount> _viewports;
 	MVKSmallVector<VkRect2D, kMVKCachedViewportScissorCount> _scissors;
+	MVKSmallVector<MVKTranslatedVertexBinding> _translatedVertexBindings;
 
 	MTLComputePipelineDescriptor* _mtlTessControlStageDesc = nil;
 
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm
index 781681a..2afcc78 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm
@@ -953,40 +953,12 @@
         }
     }
 
-    // Vertex attributes
-    uint32_t vaCnt = pVI->vertexAttributeDescriptionCount;
-	uint32_t vbCnt = pVI->vertexBindingDescriptionCount;
-    for (uint32_t i = 0; i < vaCnt; i++) {
-        const VkVertexInputAttributeDescription* pVKVA = &pVI->pVertexAttributeDescriptions[i];
-        if (shaderContext.isVertexAttributeLocationUsed(pVKVA->location)) {
-
-      // Vulkan allows offsets to exceed the buffer stride, but Metal doesn't.
-			// Only check non-zero offsets, as it's common for both to be zero when step rate is instance.
-			if (pVKVA->offset > 0) {
-				const VkVertexInputBindingDescription* pVKVB = pVI->pVertexBindingDescriptions;
-				for (uint32_t j = 0; j < vbCnt; j++, pVKVB++) {
-					if (pVKVB->binding == pVKVA->binding) {
-						if (pVKVA->offset >= pVKVB->stride) {
-							setConfigurationResult(reportError(VK_ERROR_INITIALIZATION_FAILED, "Under Metal, vertex attribute offsets must not exceed the vertex buffer stride."));
-							return false;
-						}
-						break;
-					}
-				}
-			}
-
-			MTLVertexAttributeDescriptor* vaDesc = plDesc.vertexDescriptor.attributes[pVKVA->location];
-            vaDesc.format = getPixelFormats()->getMTLVertexFormat(pVKVA->format);
-            vaDesc.bufferIndex = _device->getMetalBufferIndexForVertexAttributeBinding(pVKVA->binding);
-            vaDesc.offset = pVKVA->offset;
-        }
-    }
-
     // Vertex buffer bindings
+	uint32_t vbCnt = pVI->vertexBindingDescriptionCount;
+	uint32_t maxBinding = 0;
     for (uint32_t i = 0; i < vbCnt; i++) {
         const VkVertexInputBindingDescription* pVKVB = &pVI->pVertexBindingDescriptions[i];
-        uint32_t vbIdx = _device->getMetalBufferIndexForVertexAttributeBinding(pVKVB->binding);
-        if (shaderContext.isVertexBufferUsed(vbIdx)) {
+        if (shaderContext.isVertexBufferUsed(pVKVB->binding)) {
 
 			// Vulkan allows any stride, but Metal only allows multiples of 4.
             // TODO: We should try to expand the buffer to the required alignment in that case.
@@ -995,10 +967,20 @@
                 return false;
             }
 
+			maxBinding = max(pVKVB->binding, maxBinding);
+			uint32_t vbIdx = getMetalBufferIndexForVertexAttributeBinding(pVKVB->binding);
 			MTLVertexBufferLayoutDescriptor* vbDesc = plDesc.vertexDescriptor.layouts[vbIdx];
-			vbDesc.stride = (pVKVB->stride == 0) ? sizeof(simd::float4) : pVKVB->stride;      // Vulkan allows zero stride but Metal doesn't. Default to float4
-            vbDesc.stepFunction = mvkMTLVertexStepFunctionFromVkVertexInputRate(pVKVB->inputRate);
-            vbDesc.stepRate = 1;
+			if (pVKVB->stride == 0) {
+				// Stride can't be 0, it will be set later to attributes' maximum offset + size
+				// to prevent it from being larger than the underlying buffer permits.
+				vbDesc.stride = 0;
+				vbDesc.stepFunction = MTLVertexStepFunctionConstant;
+				vbDesc.stepRate = 0;
+			} else {
+				vbDesc.stride = pVKVB->stride;
+				vbDesc.stepFunction = mvkMTLVertexStepFunctionFromVkVertexInputRate(pVKVB->inputRate);
+				vbDesc.stepRate = 1;
+			}
         }
     }
 
@@ -1007,7 +989,7 @@
         vbCnt = pVertexInputDivisorState->vertexBindingDivisorCount;
         for (uint32_t i = 0; i < vbCnt; i++) {
             const VkVertexInputBindingDivisorDescriptionEXT* pVKVB = &pVertexInputDivisorState->pVertexBindingDivisors[i];
-            uint32_t vbIdx = _device->getMetalBufferIndexForVertexAttributeBinding(pVKVB->binding);
+            uint32_t vbIdx = getMetalBufferIndexForVertexAttributeBinding(pVKVB->binding);
             if (shaderContext.isVertexBufferUsed(vbIdx)) {
                 MTLVertexBufferLayoutDescriptor* vbDesc = plDesc.vertexDescriptor.layouts[vbIdx];
                 if (vbDesc.stepFunction == MTLVertexStepFunctionPerInstance) {
@@ -1019,9 +1001,98 @@
         }
     }
 
+	// Vertex attributes
+	uint32_t vaCnt = pVI->vertexAttributeDescriptionCount;
+	for (uint32_t i = 0; i < vaCnt; i++) {
+		const VkVertexInputAttributeDescription* pVKVA = &pVI->pVertexAttributeDescriptions[i];
+		if (shaderContext.isVertexAttributeLocationUsed(pVKVA->location)) {
+			uint32_t vaBinding = pVKVA->binding;
+			uint32_t vaOffset = pVKVA->offset;
+
+			// Vulkan allows offsets to exceed the buffer stride, but Metal doesn't.
+			// If this is the case, fetch an a translated artificial buffer binding, using the same MTLBuffer,
+			// but that is translated so that the reduced VA offset fits into the binding stride.
+			const VkVertexInputBindingDescription* pVKVB = pVI->pVertexBindingDescriptions;
+			for (uint32_t j = 0; j < vbCnt; j++, pVKVB++) {
+				if (pVKVB->binding == pVKVA->binding) {
+					uint32_t attrSize = getPixelFormats()->getBytesPerBlock(pVKVA->format);
+					if (pVKVB->stride == 0) {
+						// The step is set to constant, but we need to change stride to be non-zero for metal.
+						// Look for the maximum offset + size to set as the stride.
+						uint32_t vbIdx = getMetalBufferIndexForVertexAttributeBinding(pVKVB->binding);
+						MTLVertexBufferLayoutDescriptor* vbDesc = plDesc.vertexDescriptor.layouts[vbIdx];
+						uint32_t strideLowBound = vaOffset + attrSize;
+						if (vbDesc.stride < strideLowBound) vbDesc.stride = strideLowBound;
+					} else if (vaOffset >= pVKVB->stride) {
+						// Move vertex attribute offset into the stride. This vertex attribute may be
+						// combined with other vertex attributes into the same translated buffer binding.
+						// But if the reduced offset combined with the vertex attribute size still won't
+						// fit into the buffer binding stride, force the vertex attribute offset to zero,
+						// effectively dedicating this vertex attribute to its own buffer binding.
+						uint32_t origOffset = vaOffset;
+						vaOffset %= pVKVB->stride;
+						if (vaOffset + attrSize > pVKVB->stride) {
+							vaOffset = 0;
+						}
+						vaBinding = getTranslatedVertexBinding(vaBinding, origOffset - vaOffset, maxBinding);
+					}
+					break;
+				}
+			}
+
+			MTLVertexAttributeDescriptor* vaDesc = plDesc.vertexDescriptor.attributes[pVKVA->location];
+			vaDesc.format = getPixelFormats()->getMTLVertexFormat(pVKVA->format);
+			vaDesc.bufferIndex = getMetalBufferIndexForVertexAttributeBinding(vaBinding);
+			vaDesc.offset = vaOffset;
+		}
+	}
+
+	// Run through the vertex bindings. Add a new Metal vertex layout for each translated binding,
+	// identical to the original layout. The translated binding will index into the same MTLBuffer,
+	// but at an offset that is one or more strides away from the original.
+	for (uint32_t i = 0; i < vbCnt; i++) {
+		const VkVertexInputBindingDescription* pVKVB = &pVI->pVertexBindingDescriptions[i];
+		uint32_t vbVACnt = shaderContext.countVertexAttributesAt(pVKVB->binding);
+		if (vbVACnt > 0) {
+			uint32_t vbIdx = getMetalBufferIndexForVertexAttributeBinding(pVKVB->binding);
+			MTLVertexBufferLayoutDescriptor* vbDesc = plDesc.vertexDescriptor.layouts[vbIdx];
+
+			uint32_t xldtVACnt = 0;
+			for (auto& xltdBind : _translatedVertexBindings) {
+				if (xltdBind.binding == pVKVB->binding) {
+					uint32_t vbXltdIdx = getMetalBufferIndexForVertexAttributeBinding(xltdBind.translationBinding);
+					MTLVertexBufferLayoutDescriptor* vbXltdDesc = plDesc.vertexDescriptor.layouts[vbXltdIdx];
+					vbXltdDesc.stride = vbDesc.stride;
+					vbXltdDesc.stepFunction = vbDesc.stepFunction;
+					vbXltdDesc.stepRate = vbDesc.stepRate;
+					xldtVACnt++;
+				}
+			}
+
+			// If all of the vertex attributes at this vertex buffer binding have been translated, remove it.
+			if (xldtVACnt == vbVACnt) { vbDesc.stride = 0; }
+		}
+	}
+
 	return true;
 }
 
+// Returns a translated binding for the existing binding and translation offset, creating it if needed.
+uint32_t MVKGraphicsPipeline::getTranslatedVertexBinding(uint32_t binding, uint32_t translationOffset, uint32_t maxBinding) {
+	// See if a translated binding already exists (for example if more than one VA needs the same translation).
+	for (auto& xltdBind : _translatedVertexBindings) {
+		if (xltdBind.binding == binding && xltdBind.translationOffset == translationOffset) {
+			return xltdBind.translationBinding;
+		}
+	}
+
+	// Get next available binding point and add a translation binding description for it
+	uint16_t xltdBindPt = (uint16_t)(maxBinding + _translatedVertexBindings.size() + 1);
+	_translatedVertexBindings.push_back( {.binding = (uint16_t)binding, .translationBinding = xltdBindPt, .translationOffset = translationOffset} );
+
+	return xltdBindPt;
+}
+
 void MVKGraphicsPipeline::addTessellationToPipeline(MTLRenderPipelineDescriptor* plDesc,
 													const SPIRVTessReflectionData& reflectData,
 													const VkPipelineTessellationStateCreateInfo* pTS) {
@@ -1186,8 +1257,7 @@
         // Set binding and offset from Vulkan vertex attribute
         MSLVertexAttribute va;
         va.vertexAttribute.location = pVKVA->location;
-        va.vertexAttribute.msl_buffer = _device->getMetalBufferIndexForVertexAttributeBinding(pVKVA->binding);
-        va.vertexAttribute.msl_offset = pVKVA->offset;
+        va.binding = pVKVA->binding;
 
         // Metal can't do signedness conversions on vertex buffers (rdar://45922847). If the shader
         // and the vertex attribute have mismatched signedness, we have to fix the shader
@@ -1223,17 +1293,6 @@
 
         }
 
-        // Set stride and input rate of vertex attribute from corresponding Vulkan vertex bindings
-        uint32_t vbCnt = pCreateInfo->pVertexInputState->vertexBindingDescriptionCount;
-        for (uint32_t vbIdx = 0; vbIdx < vbCnt; vbIdx++) {
-            const VkVertexInputBindingDescription* pVKVB = &pCreateInfo->pVertexInputState->pVertexBindingDescriptions[vbIdx];
-            if (pVKVB->binding == pVKVA->binding) {
-                va.vertexAttribute.msl_stride = pVKVB->stride;
-                va.vertexAttribute.per_instance = (pVKVB->inputRate == VK_VERTEX_INPUT_RATE_INSTANCE);
-                break;
-            }
-        }
-
         shaderContext.vertexAttributes.push_back(va);
     }
 }
@@ -1652,10 +1711,6 @@
 	template<class Archive>
 	void serialize(Archive & archive, MSLVertexAttr& va) {
 		archive(va.location,
-				va.msl_buffer,
-				va.msl_offset,
-				va.msl_stride,
-				va.per_instance,
 				va.format,
 				va.builtin);
 	}
@@ -1731,6 +1786,7 @@
 	template<class Archive>
 	void serialize(Archive & archive, MSLVertexAttribute& va) {
 		archive(va.vertexAttribute,
+				va.binding,
 				va.isUsedByShader);
 	}
 
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.h b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.h
index 7e124f1..e7b657d 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.h
@@ -21,6 +21,7 @@
 #include "mvk_datatypes.h"
 #include "MVKEnvironment.h"
 #include "MVKBaseObject.h"
+#include <SPIRV-Cross/spirv_msl.hpp>
 #include <unordered_map>
 
 #import <Metal/Metal.h>
@@ -70,6 +71,8 @@
 	kMVKMTLFmtCapsDRMR     = (kMVKMTLFmtCapsDRM | kMVKMTLFmtCapsResolve),
 	kMVKMTLFmtCapsDRFMR    = (kMVKMTLFmtCapsDRMR | kMVKMTLFmtCapsFilter),
 
+	kMVKMTLFmtCapsChromaSubsampling = kMVKMTLFmtCapsRF,
+	kMVKMTLFmtCapsMultiPlanar = kMVKMTLFmtCapsChromaSubsampling,
 } MVKMTLFmtCaps;
 
 
@@ -83,22 +86,22 @@
 	MTLPixelFormat mtlPixelFormatSubstitute;
 	MTLVertexFormat mtlVertexFormat;
 	MTLVertexFormat mtlVertexFormatSubstitute;
+    uint8_t chromaSubsamplingPlaneCount;
+    uint8_t chromaSubsamplingComponentBits;
 	VkExtent2D blockTexelSize;
 	uint32_t bytesPerBlock;
 	MVKFormatType formatType;
 	VkFormatProperties properties;
 	const char* name;
 	bool hasReportedSubstitution;
+    
+    inline double bytesPerTexel() const { return (double)bytesPerBlock / (double)(blockTexelSize.width * blockTexelSize.height); };
 
-	inline double bytesPerTexel() const { return (double)bytesPerBlock / (double)(blockTexelSize.width * blockTexelSize.height); };
-
-	inline bool isSupported() const { return (mtlPixelFormat != MTLPixelFormatInvalid); };
+	inline bool isSupported() const { return (mtlPixelFormat != MTLPixelFormatInvalid || chromaSubsamplingPlaneCount > 0); };
 	inline bool isSupportedOrSubstitutable() const { return isSupported() || (mtlPixelFormatSubstitute != MTLPixelFormatInvalid); };
-	inline MTLPixelFormat getMTLPixelFormatOrSubstitute() const { return mtlPixelFormat ? mtlPixelFormat : mtlPixelFormatSubstitute; }
 
 	inline bool vertexIsSupported() const { return (mtlVertexFormat != MTLVertexFormatInvalid); };
 	inline bool vertexIsSupportedOrSubstitutable() const { return vertexIsSupported() || (mtlVertexFormatSubstitute != MTLVertexFormatInvalid); };
-	inline MTLVertexFormat getMTLVertexFormatOrSubstitute() const { return mtlVertexFormat ? mtlVertexFormat : mtlVertexFormatSubstitute; }
 } MVKVkFormatDesc;
 
 /** Describes the properties of a MTLPixelFormat or MTLVertexFormat. */
@@ -176,16 +179,28 @@
 
 	/**
 	 * Returns the size of the compression block, measured in texels for a Vulkan format.
-	 * The returned value will be {1, 1} for non-compressed formats.
+	 * The returned value will be {1, 1} for non-compressed formats without chroma-subsampling.
 	 */
 	VkExtent2D getBlockTexelSize(VkFormat vkFormat);
 
 	/**
 	 * Returns the size of the compression block, measured in texels for a Metal format.
-	 * The returned value will be {1, 1} for non-compressed formats.
+	 * The returned value will be {1, 1} for non-compressed formats without chroma-subsampling.
 	 */
 	VkExtent2D getBlockTexelSize(MTLPixelFormat mtlFormat);
 
+	/** Returns the number of planes of the specified chroma-subsampling (YCbCr) VkFormat */
+	uint8_t getChromaSubsamplingPlaneCount(VkFormat vkFormat);
+
+	/** Returns the number of bits per channel of the specified chroma-subsampling (YCbCr) VkFormat */
+	uint8_t getChromaSubsamplingComponentBits(VkFormat vkFormat);
+
+	/** Returns the MSLFormatResolution of the specified chroma-subsampling (YCbCr) VkFormat */
+	SPIRV_CROSS_NAMESPACE::MSLFormatResolution getChromaSubsamplingResolution(VkFormat vkFormat);
+
+    /** Returns the number of planes, blockTexelSize,  bytesPerBlock and mtlPixFmt of each plane of the specified chroma-subsampling (YCbCr) VkFormat into the given arrays */
+    uint8_t getChromaSubsamplingPlanes(VkFormat vkFormat, VkExtent2D blockTexelSize[3], uint32_t bytesPerBlock[3], MTLPixelFormat mtlPixFmt[3]);
+
 	/**
 	 * Returns the size, in bytes, of a texel of the specified Vulkan format.
 	 * The returned value may be fractional for certain compressed formats.
@@ -236,7 +251,7 @@
 	/** Returns the default properties for the specified Vulkan format. */
 	VkFormatProperties& getVkFormatProperties(VkFormat vkFormat);
 
-	/** Returns the Metal format capabilities supported by the specified Vulkan format. */
+	/** Returns the Metal format capabilities supported by the specified Vulkan format, without substitution. */
 	MVKMTLFmtCaps getCapabilities(VkFormat vkFormat);
 
 	/** Returns the Metal format capabilities supported by the specified Metal format. */
@@ -288,9 +303,7 @@
 protected:
 	MVKVkFormatDesc& getVkFormatDesc(VkFormat vkFormat);
 	MVKVkFormatDesc& getVkFormatDesc(MTLPixelFormat mtlFormat);
-	MVKMTLFormatDesc& getMTLPixelFormatDesc(VkFormat vkFormat);
 	MVKMTLFormatDesc& getMTLPixelFormatDesc(MTLPixelFormat mtlFormat);
-	MVKMTLFormatDesc& getMTLVertexFormatDesc(VkFormat vkFormat);
 	MVKMTLFormatDesc& getMTLVertexFormatDesc(MTLVertexFormat mtlFormat);
 	void initVkFormatCapabilities();
 	void initMTLPixelFormatCapabilities();
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm
index 361358c..912a873 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm
@@ -236,6 +236,61 @@
     return getVkFormatDesc(mtlFormat).blockTexelSize;
 }
 
+uint8_t MVKPixelFormats::getChromaSubsamplingPlaneCount(VkFormat vkFormat) {
+    return getVkFormatDesc(vkFormat).chromaSubsamplingPlaneCount;
+}
+
+uint8_t MVKPixelFormats::getChromaSubsamplingComponentBits(VkFormat vkFormat) {
+    return getVkFormatDesc(vkFormat).chromaSubsamplingComponentBits;
+}
+
+SPIRV_CROSS_NAMESPACE::MSLFormatResolution MVKPixelFormats::getChromaSubsamplingResolution(VkFormat vkFormat) {
+    VkExtent2D blockTexelSize = getVkFormatDesc(vkFormat).blockTexelSize;
+    return (blockTexelSize.width != 2) ? SPIRV_CROSS_NAMESPACE::MSL_FORMAT_RESOLUTION_444
+        : (blockTexelSize.height != 2) ? SPIRV_CROSS_NAMESPACE::MSL_FORMAT_RESOLUTION_422
+                                       : SPIRV_CROSS_NAMESPACE::MSL_FORMAT_RESOLUTION_420;
+}
+
+uint8_t MVKPixelFormats::getChromaSubsamplingPlanes(VkFormat vkFormat, VkExtent2D blockTexelSize[3], uint32_t bytesPerBlock[3], MTLPixelFormat mtlPixFmt[3]) {
+    uint8_t planes = getChromaSubsamplingPlaneCount(vkFormat);
+    uint8_t bits = getChromaSubsamplingComponentBits(vkFormat);
+    SPIRV_CROSS_NAMESPACE::MSLFormatResolution resolution = getChromaSubsamplingResolution(vkFormat);
+    bytesPerBlock[0] = mvkCeilingDivide((uint32_t)bits/8U, 1U);
+    switch(resolution) {
+        default:
+            return 0;
+        case SPIRV_CROSS_NAMESPACE::MSL_FORMAT_RESOLUTION_444:
+            blockTexelSize[0] = blockTexelSize[1] = blockTexelSize[2] = VkExtent2D{1, 1};
+            break;
+        case SPIRV_CROSS_NAMESPACE::MSL_FORMAT_RESOLUTION_422:
+            blockTexelSize[0] = blockTexelSize[1] = blockTexelSize[2] = VkExtent2D{2, 1};
+            break;
+        case SPIRV_CROSS_NAMESPACE::MSL_FORMAT_RESOLUTION_420:
+            blockTexelSize[0] = blockTexelSize[1] = blockTexelSize[2] = VkExtent2D{2, 2};
+            break;
+    }
+    switch(planes) {
+        default:
+            return 0;
+        case 1:
+            bytesPerBlock[0] *= 4;
+            mtlPixFmt[0] = (bits == 8) ? MTLPixelFormatRGBA8Unorm : MTLPixelFormatRGBA16Unorm;
+            break;
+        case 2:
+            blockTexelSize[0] = VkExtent2D{1, 1};
+            bytesPerBlock[1] = bytesPerBlock[0]*2;
+            mtlPixFmt[0] = (bits == 8) ? MTLPixelFormatR8Unorm : MTLPixelFormatR16Unorm;
+            mtlPixFmt[1] = (bits == 8) ? MTLPixelFormatRG8Unorm : MTLPixelFormatRG16Unorm;
+            break;
+        case 3:
+            blockTexelSize[0] = VkExtent2D{1, 1};
+            bytesPerBlock[1] = bytesPerBlock[2] = bytesPerBlock[0];
+            mtlPixFmt[0] = mtlPixFmt[1] = mtlPixFmt[2] = (bits == 8) ? MTLPixelFormatR8Unorm : MTLPixelFormatR16Unorm;
+            break;
+    }
+    return planes;
+}
+
 float MVKPixelFormats::getBytesPerTexel(VkFormat vkFormat) {
     return getVkFormatDesc(vkFormat).bytesPerTexel();
 }
@@ -263,16 +318,11 @@
 }
 
 VkFormatProperties& MVKPixelFormats::getVkFormatProperties(VkFormat vkFormat) {
-	auto& vkDesc = getVkFormatDesc(vkFormat);
-	if ( !vkDesc.isSupported() ) {
-		MVKBaseObject::reportError(_physicalDevice, VK_ERROR_FORMAT_NOT_SUPPORTED,
-								   "VkFormat %s is not supported on this device.", vkDesc.name);
-	}
-	return vkDesc.properties;
+	return getVkFormatDesc(vkFormat).properties;
 }
 
 MVKMTLFmtCaps MVKPixelFormats::getCapabilities(VkFormat vkFormat) {
-	return getMTLPixelFormatDesc(vkFormat).mtlFmtCaps;
+	return getMTLPixelFormatDesc(getVkFormatDesc(vkFormat).mtlPixelFormat).mtlFmtCaps;
 }
 
 MVKMTLFmtCaps MVKPixelFormats::getCapabilities(MTLPixelFormat mtlFormat) {
@@ -465,11 +515,6 @@
 	return getVkFormatDesc(getMTLPixelFormatDesc(mtlFormat).vkFormat);
 }
 
-// Return a reference to the Metal format descriptor corresponding to the VkFormat.
-MVKMTLFormatDesc& MVKPixelFormats::getMTLPixelFormatDesc(VkFormat vkFormat) {
-	return getMTLPixelFormatDesc(getVkFormatDesc(vkFormat).getMTLPixelFormatOrSubstitute());
-}
-
 // Return a reference to the Metal format descriptor corresponding to the MTLPixelFormat.
 MVKMTLFormatDesc& MVKPixelFormats::getMTLPixelFormatDesc(MTLPixelFormat mtlFormat) {
 	uint16_t fmtIdx = ((mtlFormat < _mtlPixelFormatCoreCount)
@@ -478,11 +523,6 @@
 	return _mtlPixelFormatDescriptions[fmtIdx];
 }
 
-// Return a reference to the Metal format descriptor corresponding to the VkFormat.
-MVKMTLFormatDesc& MVKPixelFormats::getMTLVertexFormatDesc(VkFormat vkFormat) {
-	return getMTLVertexFormatDesc(getVkFormatDesc(vkFormat).getMTLVertexFormatOrSubstitute());
-}
-
 // Return a reference to the Metal format descriptor corresponding to the MTLVertexFormat.
 MVKMTLFormatDesc& MVKPixelFormats::getMTLVertexFormatDesc(MTLVertexFormat mtlFormat) {
 	uint16_t fmtIdx = (mtlFormat < _mtlVertexFormatCount) ? _mtlFormatDescIndicesByMTLVertexFormats[mtlFormat] : 0;
@@ -507,10 +547,16 @@
 //	test();
 }
 
-#define addVkFormatDesc(VK_FMT, MTL_FMT, MTL_FMT_ALT, MTL_VTX_FMT, MTL_VTX_FMT_ALT, BLK_W, BLK_H, BLK_BYTE_CNT, MVK_FMT_TYPE)  \
+#define addVkFormatDescFull(VK_FMT, MTL_FMT, MTL_FMT_ALT, MTL_VTX_FMT, MTL_VTX_FMT_ALT, CSPC, CSCB, BLK_W, BLK_H, BLK_BYTE_CNT, MVK_FMT_TYPE)  \
 	MVKAssert(fmtIdx < _vkFormatCount, "Attempting to describe %d VkFormats, but only have space for %d. Increase the value of _vkFormatCount", fmtIdx + 1, _vkFormatCount);  \
 	_vkFormatDescriptions[fmtIdx++] = { VK_FORMAT_ ##VK_FMT, MTLPixelFormat ##MTL_FMT, MTLPixelFormat ##MTL_FMT_ALT, MTLVertexFormat ##MTL_VTX_FMT, MTLVertexFormat ##MTL_VTX_FMT_ALT,  \
-										{ BLK_W, BLK_H }, BLK_BYTE_CNT, kMVKFormat ##MVK_FMT_TYPE, { 0, 0, 0 }, "VK_FORMAT_" #VK_FMT, false }
+										CSPC, CSCB, { BLK_W, BLK_H }, BLK_BYTE_CNT, kMVKFormat ##MVK_FMT_TYPE, { 0, 0, 0 }, "VK_FORMAT_" #VK_FMT, false }
+
+#define addVkFormatDesc(VK_FMT, MTL_FMT, MTL_FMT_ALT, MTL_VTX_FMT, MTL_VTX_FMT_ALT, BLK_W, BLK_H, BLK_BYTE_CNT, MVK_FMT_TYPE)  \
+    addVkFormatDescFull(VK_FMT, MTL_FMT, MTL_FMT_ALT, MTL_VTX_FMT, MTL_VTX_FMT_ALT, 0, 0, BLK_W, BLK_H, BLK_BYTE_CNT, MVK_FMT_TYPE)
+
+#define addVkFormatDescChromaSubsampling(VK_FMT, MTL_FMT, CSPC, CSCB, BLK_W, BLK_H, BLK_BYTE_CNT)  \
+addVkFormatDescFull(VK_FMT, MTL_FMT, Invalid, Invalid, Invalid, CSPC, CSCB, BLK_W, BLK_H, BLK_BYTE_CNT, ColorFloat)
 
 void MVKPixelFormats::initVkFormatCapabilities() {
 
@@ -757,9 +803,41 @@
 	addVkFormatDesc( PVRTC2_2BPP_SRGB_BLOCK_IMG, Invalid, Invalid, Invalid, Invalid, 8, 4, 8, Compressed );
 	addVkFormatDesc( PVRTC2_4BPP_SRGB_BLOCK_IMG, Invalid, Invalid, Invalid, Invalid, 4, 4, 8, Compressed );
 
-	// Future extension VK_KHX_color_conversion and Vulkan 1.1.
-	addVkFormatDesc( UNDEFINED, GBGR422, Invalid, Invalid, Invalid, 2, 1, 4, ColorFloat );
-	addVkFormatDesc( UNDEFINED, BGRG422, Invalid, Invalid, Invalid, 2, 1, 4, ColorFloat );
+	// Extension VK_KHR_sampler_ycbcr_conversion
+    addVkFormatDescChromaSubsampling( G8B8G8R8_422_UNORM, GBGR422, 1, 8, 2, 1, 4 );
+    addVkFormatDescChromaSubsampling( B8G8R8G8_422_UNORM, BGRG422, 1, 8, 2, 1, 4 );
+    addVkFormatDescChromaSubsampling( G8_B8_R8_3PLANE_420_UNORM, Invalid, 3, 8, 2, 2, 6 );
+    addVkFormatDescChromaSubsampling( G8_B8R8_2PLANE_420_UNORM, Invalid, 2, 8, 2, 2, 6 );
+    addVkFormatDescChromaSubsampling( G8_B8_R8_3PLANE_422_UNORM, Invalid, 3, 8, 2, 1, 4 );
+    addVkFormatDescChromaSubsampling( G8_B8R8_2PLANE_422_UNORM, Invalid, 2, 8, 2, 1, 4 );
+    addVkFormatDescChromaSubsampling( G8_B8_R8_3PLANE_444_UNORM, Invalid, 3, 8, 1, 1, 3 );
+    addVkFormatDescChromaSubsampling( R10X6_UNORM_PACK16, Invalid, 0, 10, 1, 1, 2 );
+    addVkFormatDescChromaSubsampling( R10X6G10X6_UNORM_2PACK16, Invalid, 0, 10, 1, 1, 4 );
+    addVkFormatDescChromaSubsampling( R10X6G10X6B10X6A10X6_UNORM_4PACK16, Invalid, 0, 10, 1, 1, 8 );
+    addVkFormatDescChromaSubsampling( G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, Invalid, 1, 10, 2, 1, 8 );
+    addVkFormatDescChromaSubsampling( B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, Invalid, 1, 10, 2, 1, 8 );
+    addVkFormatDescChromaSubsampling( G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, Invalid, 3, 10, 2, 2, 12 );
+    addVkFormatDescChromaSubsampling( G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, Invalid, 2, 10, 2, 2, 12 );
+    addVkFormatDescChromaSubsampling( G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, Invalid, 3, 10, 2, 1, 8 );
+    addVkFormatDescChromaSubsampling( G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16, Invalid, 2, 10, 2, 1, 8 );
+    addVkFormatDescChromaSubsampling( G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, Invalid, 3, 10, 1, 1, 6 );
+    addVkFormatDescChromaSubsampling( R12X4_UNORM_PACK16, Invalid, 0, 12, 1, 1, 2 );
+    addVkFormatDescChromaSubsampling( R12X4G12X4_UNORM_2PACK16, Invalid, 0, 12, 1, 1, 4 );
+    addVkFormatDescChromaSubsampling( R12X4G12X4B12X4A12X4_UNORM_4PACK16, Invalid, 0, 12, 1, 1, 8 );
+    addVkFormatDescChromaSubsampling( G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, Invalid, 1, 12, 2, 1, 8 );
+    addVkFormatDescChromaSubsampling( B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, Invalid, 1, 12, 2, 1, 8 );
+    addVkFormatDescChromaSubsampling( G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16, Invalid, 3, 12, 2, 2, 12 );
+    addVkFormatDescChromaSubsampling( G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16, Invalid, 2, 12, 2, 2, 12 );
+    addVkFormatDescChromaSubsampling( G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, Invalid, 3, 12, 2, 1, 8 );
+    addVkFormatDescChromaSubsampling( G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16, Invalid, 2, 12, 2, 1, 8 );
+    addVkFormatDescChromaSubsampling( G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, Invalid, 3, 12, 1, 1, 6 );
+    addVkFormatDescChromaSubsampling( G16B16G16R16_422_UNORM, Invalid, 1, 16, 2, 1, 8 );
+    addVkFormatDescChromaSubsampling( B16G16R16G16_422_UNORM, Invalid, 1, 16, 2, 1, 8 );
+    addVkFormatDescChromaSubsampling( G16_B16_R16_3PLANE_420_UNORM, Invalid, 3, 16, 2, 2, 12 );
+    addVkFormatDescChromaSubsampling( G16_B16R16_2PLANE_420_UNORM, Invalid, 2, 16, 2, 2, 12 );
+    addVkFormatDescChromaSubsampling( G16_B16_R16_3PLANE_422_UNORM, Invalid, 3, 16, 2, 1, 8 );
+    addVkFormatDescChromaSubsampling( G16_B16R16_2PLANE_422_UNORM, Invalid, 2, 16, 2, 1, 8 );
+    addVkFormatDescChromaSubsampling( G16_B16_R16_3PLANE_444_UNORM, Invalid, 3, 16, 1, 1, 6 );
 
 	// When adding to this list, be sure to ensure _vkFormatCount is large enough for the format count
 }
@@ -1154,44 +1232,44 @@
 	addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, RGBA32Sint, RWC );
 	addMTLPixelFormatCapabilities( iOS_GPUFamily1_v2, RGBA32Float, RWC );
 
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_4x4_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_4x4_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_5x4_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_5x4_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_5x5_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_5x5_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_6x5_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_6x5_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_6x6_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_6x6_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_8x5_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_8x5_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_8x6_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_8x6_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_8x8_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_8x8_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_10x5_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_10x5_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_10x6_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_10x6_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_10x8_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_10x8_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_10x10_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_10x10_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_12x10_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_12x10_sRGB, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_12x12_LDR, RF );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily2_v1, ASTC_12x12_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_4x4_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_4x4_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_5x4_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_5x4_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_5x5_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_5x5_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_6x5_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_6x5_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_6x6_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_6x6_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_8x5_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_8x5_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_8x6_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_8x6_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_8x8_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_8x8_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x5_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x5_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x6_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x6_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x8_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x8_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x10_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_10x10_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_12x10_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_12x10_sRGB, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_12x12_LDR, RF );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily2_v1, ASTC_12x12_sRGB, RF );
 
 	addMTLPixelFormatCapabilities( iOS_GPUFamily3_v1, Depth32Float, DRMR );
 	addMTLPixelFormatCapabilities( iOS_GPUFamily3_v1, Depth32Float_Stencil8, DRMR );
 
-	addMTLPixelFormatCapabilities(iOS_GPUFamily3_v2, BGRA10_XR, All );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily3_v2, BGRA10_XR_sRGB, All );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily3_v2, BGR10_XR, All );
-	addMTLPixelFormatCapabilities(iOS_GPUFamily3_v2, BGR10_XR_sRGB, All );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily3_v2, BGRA10_XR, All );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily3_v2, BGRA10_XR_sRGB, All );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily3_v2, BGR10_XR, All );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily3_v2, BGR10_XR_sRGB, All );
 
-	addMTLPixelFormatCapabilities(iOS_GPUFamily1_v4, BGR10A2Unorm, All );
+	addMTLPixelFormatCapabilities( iOS_GPUFamily1_v4, BGR10A2Unorm, All );
 
 	addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, UCharNormalized, Vertex );
 	addMTLVertexFormatCapabilities( iOS_GPUFamily1_v4, CharNormalized, Vertex );
@@ -1271,6 +1349,17 @@
 										   VK_FORMAT_FEATURE_BLIT_DST_BIT),
 	kMVKVkFormatFeatureFlagsTexDSAtt    = (VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT),
 	kMVKVkFormatFeatureFlagsTexBlend    = (VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT),
+    kMVKVkFormatFeatureFlagsTexTransfer          = (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT |
+                                                    VK_FORMAT_FEATURE_TRANSFER_DST_BIT |
+                                                    VK_FORMAT_FEATURE_BLIT_SRC_BIT |
+                                                    VK_FORMAT_FEATURE_BLIT_DST_BIT),
+    kMVKVkFormatFeatureFlagsTexChromaSubsampling = (VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR |
+                                                    VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR |
+                                                    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR |
+                                                    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR |
+                                                    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR |
+                                                    VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR),
+    kMVKVkFormatFeatureFlagsTexMultiPlanar       = (VK_FORMAT_FEATURE_DISJOINT_BIT_KHR),
 	kMVKVkFormatFeatureFlagsBufRead     = (VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT),
 	kMVKVkFormatFeatureFlagsBufWrite    = (VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT),
 	kMVKVkFormatFeatureFlagsBufAtomic   = (VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT),
@@ -1285,12 +1374,25 @@
 		mvkEnableFlags(VK_FEATS, kMVKVkFormatFeatureFlags ##TYPE ##CAP);  \
 	}
 
-	VkFormat vkFmt = vkDesc.vkFormat;
 	VkFormatProperties& vkProps = vkDesc.properties;
-	MVKMTLFmtCaps mtlPixFmtCaps = getMTLPixelFormatDesc(vkFmt).mtlFmtCaps;
+	MVKMTLFmtCaps mtlPixFmtCaps = getMTLPixelFormatDesc(vkDesc.mtlPixelFormat).mtlFmtCaps;
+    vkProps.optimalTilingFeatures = kMVKVkFormatFeatureFlagsTexNone;
+    vkProps.linearTilingFeatures = kMVKVkFormatFeatureFlagsTexNone;
 
-	// Set optimal tiling features first
-	vkProps.optimalTilingFeatures = kMVKVkFormatFeatureFlagsTexNone;
+    // Chroma subsampling and multi planar features
+    if (getChromaSubsamplingComponentBits(vkDesc.vkFormat) > 0) {
+        vkProps.optimalTilingFeatures = kMVKVkFormatFeatureFlagsTexTransfer;
+    }
+    uint8_t chromaSubsamplingPlaneCount = getChromaSubsamplingPlaneCount(vkDesc.vkFormat);
+    if (chromaSubsamplingPlaneCount > 0) {
+        mtlPixFmtCaps = kMVKMTLFmtCapsRF;
+        enableFormatFeatures(ChromaSubsampling, Tex, mtlPixFmtCaps, vkProps.optimalTilingFeatures);
+    }
+    if (chromaSubsamplingPlaneCount > 1) {
+        enableFormatFeatures(MultiPlanar, Tex, mtlPixFmtCaps, vkProps.optimalTilingFeatures);
+    }
+
+	// Optimal tiling features
 	enableFormatFeatures(Read, Tex, mtlPixFmtCaps, vkProps.optimalTilingFeatures);
 	enableFormatFeatures(Filter, Tex, mtlPixFmtCaps, vkProps.optimalTilingFeatures);
 	enableFormatFeatures(Write, Tex, mtlPixFmtCaps, vkProps.optimalTilingFeatures);
@@ -1299,9 +1401,7 @@
 	enableFormatFeatures(Blend, Tex, mtlPixFmtCaps, vkProps.optimalTilingFeatures);
 
 	// Linear tiling is not available to depth/stencil or compressed formats.
-	vkProps.linearTilingFeatures = kMVKVkFormatFeatureFlagsTexNone;
 	if ( !(vkDesc.formatType == kMVKFormatDepthStencil || vkDesc.formatType == kMVKFormatCompressed) ) {
-
 		// Start with optimal tiling features, and modify.
 		vkProps.linearTilingFeatures = vkProps.optimalTilingFeatures;
 
@@ -1322,7 +1422,7 @@
 		enableFormatFeatures(Read, Buf, mtlPixFmtCaps, vkProps.bufferFeatures);
 		enableFormatFeatures(Write, Buf, mtlPixFmtCaps, vkProps.bufferFeatures);
 		enableFormatFeatures(Atomic, Buf, mtlPixFmtCaps, vkProps.bufferFeatures);
-		enableFormatFeatures(Vertex, Buf, getMTLVertexFormatDesc(vkFmt).mtlFmtCaps, vkProps.bufferFeatures);
+		enableFormatFeatures(Vertex, Buf, getMTLVertexFormatDesc(vkDesc.mtlVertexFormat).mtlFmtCaps, vkProps.bufferFeatures);
 	}
 }
 
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.mm b/MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.mm
index 432a757..8ce7738 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKRenderPass.mm
@@ -110,7 +110,7 @@
 	if (dsRPAttIdx != VK_ATTACHMENT_UNUSED) {
 		MVKRenderPassAttachment* dsMVKRPAtt = &_renderPass->_attachments[dsRPAttIdx];
 		MVKImageView* dsImage = framebuffer->getAttachment(dsRPAttIdx);
-		MTLPixelFormat mtlDSFormat = dsImage->getMTLPixelFormat();
+		MTLPixelFormat mtlDSFormat = dsImage->getMTLPixelFormat(0);
 
 		if (pixFmts->isDepthFormat(mtlDSFormat)) {
 			MTLRenderPassDepthAttachmentDescriptor* mtlDepthAttDesc = mtlRPDesc.depthAttachment;
@@ -342,7 +342,8 @@
 			_lastUseSubpassIdx = max(spIdx, _lastUseSubpassIdx);
 
 			// Validate that the attachment pixel format supports the capabilities required by the subpass.
-			if ( !mvkAreAllFlagsEnabled(pixFmts->getCapabilities(_info.format), reqCaps) ) {
+			// Use MTLPixelFormat to look up capabilities to permit Metal format substitution.
+			if ( !mvkAreAllFlagsEnabled(pixFmts->getCapabilities(pixFmts->getMTLPixelFormat(_info.format)), reqCaps) ) {
 				_renderPass->setConfigurationResult(reportError(VK_ERROR_FORMAT_NOT_SUPPORTED, "vkCreateRenderPass(): Attachment format %s on this device does not support the VkFormat attachment capabilities required by the subpass at index %d.", _renderPass->getPixelFormats()->getName(_info.format), spIdx));
 			}
 		}
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKResource.h b/MoltenVK/MoltenVK/GPUObjects/MVKResource.h
index ca3ccfa..ee691de 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKResource.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKResource.h
@@ -39,14 +39,8 @@
     /** Returns the byte offset in the bound device memory. */
     inline VkDeviceSize getDeviceMemoryOffset() { return _deviceMemoryOffset; }
 
-	/** Returns the memory requirements of this resource by populating the specified structure. */
-	virtual VkResult getMemoryRequirements(VkMemoryRequirements* pMemoryRequirements) = 0;
-
-	/** Returns the memory requirements of this resource by populating the specified structure. */
-	virtual VkResult getMemoryRequirements(const void* pInfo, VkMemoryRequirements2* pMemoryRequirements) = 0;
-
 	/** Binds this resource to the specified offset within the specified memory allocation. */
-	virtual VkResult bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset);
+	VkResult bindDeviceMemory(MVKDeviceMemory* mvkMem, VkDeviceSize memOffset);
 
 	/** Returns the device memory underlying this resource. */
 	inline MVKDeviceMemory* getDeviceMemory() { return _deviceMemory; }
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKSwapchain.mm b/MoltenVK/MoltenVK/GPUObjects/MVKSwapchain.mm
index 31bd8fa..45e2335 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKSwapchain.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKSwapchain.mm
@@ -383,19 +383,19 @@
 }
 
 VkResult MVKSwapchain::getRefreshCycleDuration(VkRefreshCycleDurationGOOGLE *pRefreshCycleDuration) {
-#if MVK_IOS
 	NSInteger framesPerSecond = 60;
-	if (@available(iOS 10.3, *)) {
-		framesPerSecond = [UIScreen mainScreen].maximumFramesPerSecond;
-	} else {
-		// TODO: fallback
+
+#if MVK_IOS
+	UIScreen* screen = [UIScreen mainScreen];
+	if ([screen respondsToSelector: @selector(maximumFramesPerSecond)]) {
+		framesPerSecond = screen.maximumFramesPerSecond;
 	}
 #endif
 #if MVK_MACOS
 	// TODO: hook this up for macOS, probably need to use CGDisplayModeGetRefeshRate
-	NSInteger framesPerSecond = 60;
 #endif
-	pRefreshCycleDuration->refreshDuration = 1e9 / ( uint64_t ) framesPerSecond;
+
+	pRefreshCycleDuration->refreshDuration = (uint64_t)1e9 / framesPerSecond;
 	return VK_SUCCESS;
 }
 
diff --git a/MoltenVK/MoltenVK/Layers/MVKExtensions.def b/MoltenVK/MoltenVK/Layers/MVKExtensions.def
index 33ce097..0c74478 100644
--- a/MoltenVK/MoltenVK/Layers/MVKExtensions.def
+++ b/MoltenVK/MoltenVK/Layers/MVKExtensions.def
@@ -58,6 +58,7 @@
 MVK_EXTENSION(KHR_push_descriptor, KHR_PUSH_DESCRIPTOR, DEVICE)
 MVK_EXTENSION(KHR_relaxed_block_layout, KHR_RELAXED_BLOCK_LAYOUT, DEVICE)
 MVK_EXTENSION(KHR_sampler_mirror_clamp_to_edge, KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE, DEVICE)
+MVK_EXTENSION(KHR_sampler_ycbcr_conversion, KHR_SAMPLER_YCBCR_CONVERSION, DEVICE)
 MVK_EXTENSION(KHR_shader_draw_parameters, KHR_SHADER_DRAW_PARAMETERS, DEVICE)
 MVK_EXTENSION(KHR_shader_float16_int8, KHR_SHADER_FLOAT16_INT8, DEVICE)
 MVK_EXTENSION(KHR_storage_buffer_storage_class, KHR_STORAGE_BUFFER_STORAGE_CLASS, DEVICE)
diff --git a/MoltenVK/MoltenVK/Utility/MVKFoundation.h b/MoltenVK/MoltenVK/Utility/MVKFoundation.h
index a0f0eac..a8ea008 100644
--- a/MoltenVK/MoltenVK/Utility/MVKFoundation.h
+++ b/MoltenVK/MoltenVK/Utility/MVKFoundation.h
@@ -29,18 +29,6 @@
 
 #pragma mark Math
 
-/**
- * The following constants are used to indicate values that have no defined limit.
- * They are ridiculously large numbers, but low enough to be safely used as both
- * uint and int values without risking overflowing between positive and negative values.
- */
-static int32_t kMVKUndefinedLargeNegativeInt32 = std::numeric_limits<int32_t>::min() / 2;
-static int32_t kMVKUndefinedLargePositiveInt32 = std::numeric_limits<int32_t>::max() / 2;
-static uint32_t kMVKUndefinedLargeUInt32 = kMVKUndefinedLargePositiveInt32;
-static int64_t kMVKUndefinedLargeNegativeInt64 = std::numeric_limits<int64_t>::min() / 2;
-static int64_t kMVKUndefinedLargePositiveInt64 = std::numeric_limits<int64_t>::max() / 2;
-static uint64_t kMVKUndefinedLargeUInt64 = kMVKUndefinedLargePositiveInt64;
-
 // Common scaling multipliers
 #define KIBI		(1024)
 #define MEBI		(KIBI * KIBI)
@@ -136,21 +124,23 @@
 #pragma mark -
 #pragma mark Alignment functions
 
-/** Returns whether the specified value is a power-of-two. */
-static inline bool mvkIsPowerOfTwo(uintptr_t value) {
+/** Returns whether the specified positive value is a power-of-two. */
+template<typename T>
+static inline bool mvkIsPowerOfTwo(T value) {
 	// Test POT:  (x != 0) && ((x & (x - 1)) == 0)
 	return value && ((value & (value - 1)) == 0);
 }
 
 /**
- * Ensures the specified value is a power-of-two. Returns the specified value if it is a
- * power-of-two value. If it is not, returns the next power-of-two value that is larger
- * than the specified value is returned.
+ * Ensures the specified positive value is a power-of-two. Returns the specified value
+ * if it is a power-of-two value. If it is not, returns the next power-of-two value
+ * that is larger than the specified value is returned.
  */
-static inline uintptr_t mvkEnsurePowerOfTwo(uintptr_t value) {
+template<typename T>
+static inline T mvkEnsurePowerOfTwo(T value) {
 	if (mvkIsPowerOfTwo(value)) { return value; }
 
-	uintptr_t pot = 1;
+	T pot = 1;
 	while(pot <= value) { pot <<= 1; };
 	return pot;
 }
@@ -161,12 +151,13 @@
  *
  * This implementation returns zero for both zero and one as inputs.
  */
-static inline uint32_t mvkPowerOfTwoExponent(uintptr_t value) {
-    uintptr_t p2Value = mvkEnsurePowerOfTwo(value);
+template<typename T>
+static inline T mvkPowerOfTwoExponent(T value) {
+    T p2Value = mvkEnsurePowerOfTwo(value);
 
     // Count the trailing zeros
     p2Value = (p2Value ^ (p2Value - 1)) >> 1;  // Set trailing 0s to 1s and zero rest
-    uint32_t potExp = 0;
+    T potExp = 0;
     while (p2Value) {
         p2Value >>= 1;
         potExp++;
@@ -230,6 +221,18 @@
  */
 void mvkFlipVertically(void* rowMajorData, uint32_t rowCount, size_t bytesPerRow);
 
+/**
+ * The following constants are used to indicate values that have no defined limit.
+ * They are ridiculously large numbers, but low enough to be safely used as both
+ * uint and int values without risking overflowing between positive and negative values.
+ */
+static  int32_t kMVKUndefinedLargePositiveInt32 =  mvkEnsurePowerOfTwo(std::numeric_limits<int32_t>::max() / 2);
+static  int32_t kMVKUndefinedLargeNegativeInt32 = -kMVKUndefinedLargePositiveInt32;
+static uint32_t kMVKUndefinedLargeUInt32        =  kMVKUndefinedLargePositiveInt32;
+static  int64_t kMVKUndefinedLargePositiveInt64 =  mvkEnsurePowerOfTwo(std::numeric_limits<int64_t>::max() / 2);
+static  int64_t kMVKUndefinedLargeNegativeInt64 = -kMVKUndefinedLargePositiveInt64;
+static uint64_t kMVKUndefinedLargeUInt64        =  kMVKUndefinedLargePositiveInt64;
+
 
 #pragma mark Vulkan structure support functions
 
diff --git a/MoltenVK/MoltenVK/Vulkan/vk_mvk_moltenvk.mm b/MoltenVK/MoltenVK/Vulkan/vk_mvk_moltenvk.mm
index bccb8c1..3976621 100644
--- a/MoltenVK/MoltenVK/Vulkan/vk_mvk_moltenvk.mm
+++ b/MoltenVK/MoltenVK/Vulkan/vk_mvk_moltenvk.mm
@@ -115,7 +115,7 @@
     id<MTLTexture>                              mtlTexture) {
 
     MVKImage* mvkImg = (MVKImage*)image;
-    return mvkImg->setMTLTexture(mtlTexture);
+    return mvkImg->setMTLTexture(0, mtlTexture);
 }
 
 MVK_PUBLIC_SYMBOL void vkGetMTLTextureMVK(
@@ -123,7 +123,7 @@
     id<MTLTexture>*                             pMTLTexture) {
 
     MVKImage* mvkImg = (MVKImage*)image;
-    *pMTLTexture = mvkImg->getMTLTexture();
+    *pMTLTexture = mvkImg->getMTLTexture(0);
 }
 
 MVK_PUBLIC_SYMBOL void vkGetMTLBufferMVK(
diff --git a/MoltenVK/MoltenVK/Vulkan/vulkan.mm b/MoltenVK/MoltenVK/Vulkan/vulkan.mm
index 90e6f03..b84a88c 100644
--- a/MoltenVK/MoltenVK/Vulkan/vulkan.mm
+++ b/MoltenVK/MoltenVK/Vulkan/vulkan.mm
@@ -526,7 +526,7 @@
 	MVKTraceVulkanCallStart();
 	MVKImage* mvkImg = (MVKImage*)image;
 	MVKDeviceMemory* mvkMem = (MVKDeviceMemory*)mem;
-	VkResult rslt = mvkImg->bindDeviceMemory(mvkMem, memOffset);
+	VkResult rslt = mvkImg->bindDeviceMemory(mvkMem, memOffset, 0);
 	MVKTraceVulkanCallEnd();
 	return rslt;
 }
@@ -549,7 +549,7 @@
 	
 	MVKTraceVulkanCallStart();
 	MVKImage* mvkImg = (MVKImage*)image;
-	mvkImg->getMemoryRequirements(pMemoryRequirements);
+	mvkImg->getMemoryRequirements(pMemoryRequirements, 0);
 	MVKTraceVulkanCallEnd();
 }
 
@@ -2219,6 +2219,37 @@
 
 
 #pragma mark -
+#pragma mark VK_KHR_sampler_ycbcr_conversion extension
+
+MVK_PUBLIC_SYMBOL VkResult vkCreateSamplerYcbcrConversionKHR(
+    VkDevice                                    device,
+    const VkSamplerYcbcrConversionCreateInfo*   pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
+    VkSamplerYcbcrConversion*                   pYcbcrConversion) {
+
+    MVKTraceVulkanCallStart();
+	MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
+	MVKSamplerYcbcrConversion* mvkSampConv = mvkDev->createSamplerYcbcrConversion(pCreateInfo, pAllocator);
+	*pYcbcrConversion = (VkSamplerYcbcrConversion)mvkSampConv;
+	VkResult rslt = mvkSampConv->getConfigurationResult();
+	MVKTraceVulkanCallEnd();
+	return rslt;
+}
+
+MVK_PUBLIC_SYMBOL void vkDestroySamplerYcbcrConversionKHR(
+    VkDevice                                    device,
+    VkSamplerYcbcrConversion                    ycbcrConversion,
+    const VkAllocationCallbacks*                pAllocator) {
+
+    MVKTraceVulkanCallStart();
+	if ( !ycbcrConversion ) { return; }
+	MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
+	mvkDev->destroySamplerYcbcrConversion((MVKSamplerYcbcrConversion*)ycbcrConversion, pAllocator);
+	MVKTraceVulkanCallEnd();
+}
+
+
+#pragma mark -
 #pragma mark VK_KHR_swapchain extension
 
 MVK_PUBLIC_SYMBOL VkResult vkCreateSwapchainKHR(
diff --git a/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.cpp b/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.cpp
index 6ee2d97..6e71501 100644
--- a/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.cpp
+++ b/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.cpp
@@ -103,12 +103,9 @@
 
 MVK_PUBLIC_SYMBOL bool MSLVertexAttribute::matches(const MSLVertexAttribute& other) const {
 	if (vertexAttribute.location != other.vertexAttribute.location) { return false; }
-	if (vertexAttribute.msl_buffer != other.vertexAttribute.msl_buffer) { return false; }
-	if (vertexAttribute.msl_offset != other.vertexAttribute.msl_offset) { return false; }
-	if (vertexAttribute.msl_stride != other.vertexAttribute.msl_stride) { return false; }
 	if (vertexAttribute.format != other.vertexAttribute.format) { return false; }
 	if (vertexAttribute.builtin != other.vertexAttribute.builtin) { return false; }
-	if (!!vertexAttribute.per_instance != !!other.vertexAttribute.per_instance) { return false; }
+	if (binding != other.binding) { return false; }
 	return true;
 }
 
@@ -136,9 +133,22 @@
 		if (constExprSampler.lod_clamp_min != other.constExprSampler.lod_clamp_min) { return false; }
 		if (constExprSampler.lod_clamp_max != other.constExprSampler.lod_clamp_max) { return false; }
 		if (constExprSampler.max_anisotropy != other.constExprSampler.max_anisotropy) { return false; }
+
+		if (constExprSampler.planes != other.constExprSampler.planes) { return false; }
+		if (constExprSampler.resolution != other.constExprSampler.resolution) { return false; }
+		if (constExprSampler.chroma_filter != other.constExprSampler.chroma_filter) { return false; }
+		if (constExprSampler.x_chroma_offset != other.constExprSampler.x_chroma_offset) { return false; }
+		if (constExprSampler.y_chroma_offset != other.constExprSampler.y_chroma_offset) { return false; }
+		for(uint32_t i = 0; i < 4; ++i)
+			if (constExprSampler.swizzle[i] != other.constExprSampler.swizzle[i]) { return false; }
+		if (constExprSampler.ycbcr_model != other.constExprSampler.ycbcr_model) { return false; }
+		if (constExprSampler.ycbcr_range != other.constExprSampler.ycbcr_range) { return false; }
+		if (constExprSampler.bpc != other.constExprSampler.bpc) { return false; }
+
 		if (constExprSampler.compare_enable != other.constExprSampler.compare_enable) { return false; }
 		if (constExprSampler.lod_clamp_enable != other.constExprSampler.lod_clamp_enable) { return false; }
 		if (constExprSampler.anisotropy_enable != other.constExprSampler.anisotropy_enable) { return false; }
+		if (constExprSampler.ycbcr_conversion_enable != other.constExprSampler.ycbcr_conversion_enable) { return false; }
 	}
 
 	return true;
@@ -158,12 +168,12 @@
     return false;
 }
 
-// Check them all in case inactive VA's duplicate buffers used by active VA's.
-MVK_PUBLIC_SYMBOL bool SPIRVToMSLConversionConfiguration::isVertexBufferUsed(uint32_t mslBuffer) const {
-    for (auto& va : vertexAttributes) {
-        if ((va.vertexAttribute.msl_buffer == mslBuffer) && va.isUsedByShader) { return true; }
-    }
-    return false;
+MVK_PUBLIC_SYMBOL uint32_t SPIRVToMSLConversionConfiguration::countVertexAttributesAt(uint32_t binding) const {
+	uint32_t vaCnt = 0;
+	for (auto& va : vertexAttributes) {
+		if ((va.binding == binding) && va.isUsedByShader) { vaCnt++; }
+	}
+	return vaCnt;
 }
 
 MVK_PUBLIC_SYMBOL void SPIRVToMSLConversionConfiguration::markAllAttributesAndResourcesUsed() {
diff --git a/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.h b/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.h
index 6cb0cea..0d5ddb7 100644
--- a/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.h
+++ b/MoltenVKShaderConverter/MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.h
@@ -74,6 +74,7 @@
 	typedef struct MSLVertexAttribute {
 		SPIRV_CROSS_NAMESPACE::MSLVertexAttr vertexAttribute;
 
+		uint32_t binding = 0;
 		bool isUsedByShader = false;
 
 		/**
@@ -135,8 +136,11 @@
         /** Returns whether the vertex attribute at the specified location is used by the shader. */
         bool isVertexAttributeLocationUsed(uint32_t location) const;
 
-        /** Returns whether the vertex buffer at the specified Metal binding index is used by the shader. */
-        bool isVertexBufferUsed(uint32_t mslBuffer) const;
+		/** Returns the number of vertex attributes bound to the specified Vulkan buffer binding, and used by the shader. */
+		uint32_t countVertexAttributesAt(uint32_t binding) const;
+
+        /** Returns whether the vertex buffer at the specified Vulkan binding is used by the shader. */
+		bool isVertexBufferUsed(uint32_t binding) const { return countVertexAttributesAt(binding) > 0; }
 
 		/** Marks all vertex attributes and resources as being used by the shader. */
 		void markAllAttributesAndResourcesUsed();
diff --git a/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj b/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj
index 4de848f..e0d366a 100644
--- a/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj
+++ b/MoltenVKShaderConverter/MoltenVKShaderConverter.xcodeproj/project.pbxproj
@@ -705,8 +705,6 @@
 		A93747401A9A8B2900F29B34 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = arm64;
-				BITCODE_GENERATION_MODE = bitcode;
 				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
 				CLANG_WARN_UNREACHABLE_CODE = NO;
 				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
@@ -716,15 +714,12 @@
 				PRODUCT_NAME = MoltenVKGLSLToSPIRVConverter;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALID_ARCHS = arm64;
 			};
 			name = Debug;
 		};
 		A93747411A9A8B2900F29B34 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = arm64;
-				BITCODE_GENERATION_MODE = bitcode;
 				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
 				CLANG_WARN_UNREACHABLE_CODE = NO;
 				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO;
@@ -734,7 +729,6 @@
 				PRODUCT_NAME = MoltenVKGLSLToSPIRVConverter;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALID_ARCHS = arm64;
 			};
 			name = Release;
 		};
@@ -769,8 +763,6 @@
 		A93903BD1C57E9D700FE90DC /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = arm64;
-				BITCODE_GENERATION_MODE = bitcode;
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"$(inherited)",
 					"SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross",
@@ -780,15 +772,12 @@
 				PRODUCT_NAME = MoltenVKSPIRVToMSLConverter;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALID_ARCHS = arm64;
 			};
 			name = Debug;
 		};
 		A93903BE1C57E9D700FE90DC /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = arm64;
-				BITCODE_GENERATION_MODE = bitcode;
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"$(inherited)",
 					"SPIRV_CROSS_NAMESPACE_OVERRIDE=MVK_spirv_cross",
@@ -798,7 +787,6 @@
 				PRODUCT_NAME = MoltenVKSPIRVToMSLConverter;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
-				VALID_ARCHS = arm64;
 			};
 			name = Release;
 		};
@@ -834,6 +822,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = NO;
@@ -847,9 +836,10 @@
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
+				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
 				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNREACHABLE_CODE = NO;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = NO;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -866,8 +856,8 @@
 				GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
 				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_PARAMETER = YES;
 				GCC_WARN_UNUSED_VARIABLE = NO;
 				HEADER_SEARCH_PATHS = (
 					"$(inherited)",
@@ -880,7 +870,6 @@
 				MACOSX_DEPLOYMENT_TARGET = 10.11;
 				ONLY_ACTIVE_ARCH = YES;
 				SKIP_INSTALL = YES;
-				VALID_ARCHS = x86_64;
 			};
 			name = Debug;
 		};
@@ -888,6 +877,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
 				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_CXX_LIBRARY = "libc++";
 				CLANG_ENABLE_MODULES = NO;
@@ -901,9 +891,10 @@
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
+				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO;
 				CLANG_WARN_SUSPICIOUS_MOVE = YES;
-				CLANG_WARN_UNREACHABLE_CODE = NO;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = NO;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = YES;
 				ENABLE_NS_ASSERTIONS = NO;
@@ -920,8 +911,8 @@
 				GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
 				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
 				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_PARAMETER = YES;
 				GCC_WARN_UNUSED_VARIABLE = NO;
 				HEADER_SEARCH_PATHS = (
 					"$(inherited)",
@@ -934,7 +925,6 @@
 				MACOSX_DEPLOYMENT_TARGET = 10.11;
 				SKIP_INSTALL = YES;
 				VALIDATE_PRODUCT = YES;
-				VALID_ARCHS = x86_64;
 			};
 			name = Release;
 		};
diff --git a/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm b/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm
index 91d2dc9..5b72b69 100644
--- a/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm
+++ b/MoltenVKShaderConverter/MoltenVKShaderConverterTool/OSSupport.mm
@@ -19,6 +19,7 @@
 #include "OSSupport.h"
 #include "FileSupport.h"
 #include "MoltenVKShaderConverterTool.h"
+#include "MVKOSExtensions.h"
 
 #import <Foundation/Foundation.h>
 #import <Metal/Metal.h>
@@ -71,13 +72,9 @@
 
 	MTLLanguageVersion mslVerEnum = (MTLLanguageVersion)0;
 	if (mslVer(2, 1, 0)) {
-		if (@available(macOS 10.14, *)) {
-			mslVerEnum = MTLLanguageVersion2_1;
-		}
+		mslVerEnum = MTLLanguageVersion2_1;
 	} else if (mslVer(2, 0, 0)) {
-		if (@available(macOS 10.13, *)) {
-			mslVerEnum = MTLLanguageVersion2_0;
-		}
+		mslVerEnum = MTLLanguageVersion2_0;
 	} else if (mslVer(1, 2, 0)) {
 		mslVerEnum = MTLLanguageVersion1_2;
 	} else if (mslVer(1, 1, 0)) {
diff --git a/Scripts/packagePregenSpirvToolsHeaders b/Scripts/packagePregenSpirvToolsHeaders
index d77620d..0ccaf8a 100755
--- a/Scripts/packagePregenSpirvToolsHeaders
+++ b/Scripts/packagePregenSpirvToolsHeaders
@@ -14,6 +14,11 @@
 TPLT_DIR=../Templates/spirv-tools
 TPLT_BLD_DIR="${TPLT_DIR}/build"
 
+# Ensure the SPIRV-Tools library is fully built
+cd ".."
+./fetchDependencies --build-spirv-tools
+cd -  > /dev/null
+
 rm -rf "${TPLT_BLD_DIR}"
 mkdir -p "${TPLT_BLD_DIR}"
 cp -a "${SPV_TLS_BLD_DIR}/"*.h "${SPV_TLS_BLD_DIR}/"*.inc "${TPLT_BLD_DIR}"
diff --git a/Templates/spirv-tools/build.zip b/Templates/spirv-tools/build.zip
index 7e83de0..281160e 100644
--- a/Templates/spirv-tools/build.zip
+++ b/Templates/spirv-tools/build.zip
Binary files differ
diff --git a/fetchDependencies b/fetchDependencies
index 68547d1..827ca6e 100755
--- a/fetchDependencies
+++ b/fetchDependencies
@@ -4,7 +4,7 @@
 #
 # fetchDependencies - Retrieves the correct versions of all dependencies
 #
-# macOS usage: ./fetchDependencies [-v] [--debug] [--skip-spirv-tools-build]
+# macOS usage: ./fetchDependencies [-v] [--debug] [--build-spirv-tools]
 #                                  [--v-headers-root path] [--spirv-cross-root path] [--glslang-root path]
 #
 #      --debug
@@ -16,10 +16,15 @@
 #              This repository does need to be built and the build directory must be in the
 #              specified directory. It should be built the same way this script builds it.
 #
-#      --skip-spirv-tools-build
-#              Skip the spirv-tools build and install a template of pre-generated SPIRV-Tools header files
-#              instead. The primary purpose of this is to allow Travis CI to skip the SPIRV-Tools build
-#              because Travis cannot support the required use of Python3 by the SPIRV-Tools build.
+#      --build-spirv-tools
+#              Build the full spirv-tools distribution. Normally this is not needed, because
+#              MoltenVK includes a template of pre-generated SPIRV-Tools header files, which
+#              is all that is needed. Avoiding the spirv-tools build saves significant time
+#              during the running of this script, and is necessary during CI because Travis CI
+#              cannot support the required use of Python3 by the spirv-tools build. This flag
+#              is used by the packagePregenSpirvToolsHeaders script which regenerates the
+#              spirv-tools header files and repackages the Templates/spirv-tools/build.zip
+#              file when the spirv-tools library version is upgraded.
 #
 #      --spirv-cross-root path
 #              "path" specifies a directory path to a KhronosGroup/SPIRV-Cross repository.
@@ -41,7 +46,7 @@
 V_HEADERS_ROOT=""
 SPIRV_CROSS_ROOT=""
 GLSLANG_ROOT=""
-SKIP_SPV_TLS_BLD=""
+BLD_SPV_TLS=""
 
 while (( "$#" )); do
   case "$1" in
@@ -53,8 +58,12 @@
          XC_BUILD_VERBOSITY=""
          shift 1
          ;;
-       --skip-spirv-tools-build)
-         SKIP_SPV_TLS_BLD="Y"
+       --build-spirv-tools)
+         BLD_SPV_TLS="Y"
+         shift 1
+         ;;
+       --skip-spirv-tools-build)	#deprecated
+         BLD_SPV_TLS=""
          shift 1
          ;;
        --v-headers-root)
@@ -229,11 +238,11 @@
 
 # Build the embedded spirv-tools, or use option of pre-generated headers
 SPV_TLS_DIR="${REPO_NAME}/External/spirv-tools"
-if [ ! "$SKIP_SPV_TLS_BLD" = "" ]; then
+if [ "$BLD_SPV_TLS" = "Y" ]; then
+	build_repo "${SPV_TLS_DIR}"
+else
 	unzip -o -q -d "${SPV_TLS_DIR}" ../Templates/spirv-tools/build.zip
 	rm -rf "${SPV_TLS_DIR}/__MACOSX"
-else
-	build_repo "${SPV_TLS_DIR}"
 fi