Merge pull request #691 from billhollings/Metal-3.0

 Merge master 1.0.36 into Metal-3.0 branch.
diff --git a/Common/MVKOSExtensions.mm b/Common/MVKOSExtensions.mm
index 7759e48..39ef03b 100644
--- a/Common/MVKOSExtensions.mm
+++ b/Common/MVKOSExtensions.mm
@@ -76,10 +76,12 @@
 #pragma mark Process environment
 
 string mvkGetEnvVar(string varName, bool* pWasFound) {
-	NSDictionary* env = [[NSProcessInfo processInfo] environment];
-	NSString* envStr = env[@(varName.c_str())];
-	if (pWasFound) { *pWasFound = envStr != nil; }
-	return envStr ? envStr.UTF8String : "";
+	@autoreleasepool {
+		NSDictionary*nsEnv = [[NSProcessInfo processInfo] environment];
+		NSString* envStr = nsEnv[@(varName.c_str())];
+		if (pWasFound) { *pWasFound = envStr != nil; }
+		return envStr ? envStr.UTF8String : "";
+	}
 }
 
 int64_t mvkGetEnvVarInt64(string varName, bool* pWasFound) {
diff --git a/Demos/LunarG-VulkanSamples/API-Samples/iOS/DemoViewController.mm b/Demos/LunarG-VulkanSamples/API-Samples/iOS/DemoViewController.mm
index e922cf4..cb00c5c 100644
--- a/Demos/LunarG-VulkanSamples/API-Samples/iOS/DemoViewController.mm
+++ b/Demos/LunarG-VulkanSamples/API-Samples/iOS/DemoViewController.mm
@@ -32,7 +32,7 @@
  * Initialize sample from view, and resize view in accordance with the sample. 
  */
 void init_window(struct sample_info &info) {
-	info.window = sampleView;
+	info.caMetalLayer = sampleView.layer;
 	sampleView.bounds = CGRectMake(0, 0, info.width, info.height);
 }
 
diff --git a/Demos/LunarG-VulkanSamples/API-Samples/macOS/DemoViewController.mm b/Demos/LunarG-VulkanSamples/API-Samples/macOS/DemoViewController.mm
index 7b1bb64..aecb779 100644
--- a/Demos/LunarG-VulkanSamples/API-Samples/macOS/DemoViewController.mm
+++ b/Demos/LunarG-VulkanSamples/API-Samples/macOS/DemoViewController.mm
@@ -33,7 +33,7 @@
  * Initialize sample from view, and resize view in accordance with the sample.
  */
 void init_window(struct sample_info &info) {
-	info.window = sampleView;
+	info.caMetalLayer = sampleView.layer;
 	sampleView.bounds = CGRectMake(0, 0, info.width, info.height);
 }
 
diff --git a/Demos/LunarG-VulkanSamples/Cube/iOS/DemoViewController.m b/Demos/LunarG-VulkanSamples/Cube/iOS/DemoViewController.m
index 9706ebc..e0cce29 100644
--- a/Demos/LunarG-VulkanSamples/Cube/iOS/DemoViewController.m
+++ b/Demos/LunarG-VulkanSamples/Cube/iOS/DemoViewController.m
@@ -43,7 +43,7 @@
 	self.view.contentScaleFactor = UIScreen.mainScreen.nativeScale;
 
 	const char* arg = "cube";
-	demo_main(&demo, self.view, 1, &arg);
+	demo_main(&demo, self.view.layer, 1, &arg);
 	demo_draw(&demo);
 
 	uint32_t fps = 60;
diff --git a/Demos/LunarG-VulkanSamples/Cube/macOS/DemoViewController.m b/Demos/LunarG-VulkanSamples/Cube/macOS/DemoViewController.m
index 5c6fa42..1629f76 100644
--- a/Demos/LunarG-VulkanSamples/Cube/macOS/DemoViewController.m
+++ b/Demos/LunarG-VulkanSamples/Cube/macOS/DemoViewController.m
@@ -42,8 +42,9 @@
 	[super viewDidLoad];
 
 	self.view.wantsLayer = YES;		// Back the view with a layer created by the makeBackingLayer method.
+
 	const char* arg = "cube";
-	demo_main(&demo, self.view, 1, &arg);
+	demo_main(&demo, self.view.layer, 1, &arg);
 
 	CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink);
 	CVDisplayLinkSetOutputCallback(_displayLink, &DisplayLinkCallback, &demo);
diff --git a/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.cpp b/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.cpp
index 263f004..32e3ae9 100644
--- a/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.cpp
+++ b/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.cpp
@@ -48,12 +48,7 @@
     _profile_start_time = _current_time;
     _profile_present_count = 0;
 
-#ifdef VK_USE_PLATFORM_IOS_MVK
-    instance_extensions_.push_back(VK_MVK_IOS_SURFACE_EXTENSION_NAME);
-#endif
-#ifdef VK_USE_PLATFORM_MACOS_MVK
-    instance_extensions_.push_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME);
-#endif
+    instance_extensions_.push_back(VK_EXT_METAL_SURFACE_EXTENSION_NAME);
 
     init_vk();
 }
@@ -78,22 +73,12 @@
     VkSurfaceKHR surface;
 
     VkResult err;
-#ifdef VK_USE_PLATFORM_IOS_MVK
-    VkIOSSurfaceCreateInfoMVK surface_info;
-    surface_info.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK;
+    VkMetalSurfaceCreateInfoEXT surface_info;
+    surface_info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
     surface_info.pNext = NULL;
     surface_info.flags = 0;
-    surface_info.pView = _view;
-    err = vkCreateIOSSurfaceMVK(instance, &surface_info, NULL, &surface);
-#endif
-#ifdef VK_USE_PLATFORM_MACOS_MVK
-    VkMacOSSurfaceCreateInfoMVK surface_info;
-    surface_info.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
-    surface_info.pNext = NULL;
-    surface_info.flags = 0;
-    surface_info.pView = _view;
-    err = vkCreateMacOSSurfaceMVK(instance, &surface_info, NULL, &surface);
-#endif
+    surface_info.pLayer = _caMetalLayer;
+    err = vkCreateMetalSurfaceEXT(instance, &surface_info, NULL, &surface);
     assert(!err);
 
     return surface;
@@ -124,8 +109,8 @@
     }
 }
 
-void ShellMVK::run(void* view) {
-    _view = view;       // not retained
+void ShellMVK::run(void* caMetalLayer) {
+    _caMetalLayer = caMetalLayer;       // not retained
     create_context();
     resize_swapchain(settings_.initial_width, settings_.initial_height);
 }
diff --git a/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.h b/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.h
index 5948b06..4309920 100644
--- a/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.h
+++ b/Demos/LunarG-VulkanSamples/Hologram/ShellMVK.h
@@ -49,7 +49,7 @@
     void quit() { }
 
 protected:
-    void* _view;
+    void* _caMetalLayer;
     PosixTimer _timer;
     double _current_time;
     double _profile_start_time;
diff --git a/Demos/LunarG-VulkanSamples/Hologram/iOS/DemoViewController.mm b/Demos/LunarG-VulkanSamples/Hologram/iOS/DemoViewController.mm
index 7d0945a..bbfe4c1 100644
--- a/Demos/LunarG-VulkanSamples/Hologram/iOS/DemoViewController.mm
+++ b/Demos/LunarG-VulkanSamples/Hologram/iOS/DemoViewController.mm
@@ -45,12 +45,12 @@
 	self.view.contentScaleFactor = UIScreen.mainScreen.nativeScale;
 
     std::vector<std::string> args;
-  args.push_back("-p");           // Use push constants
+    args.push_back("-p");           // Use push constants
 //  args.push_back("-s");           // Use a single thread
     _game = new Hologram(args);
 
     _shell = new ShellMVK(*_game);
-    _shell->run(self.view);
+    _shell->run(self.view.layer);
 
 	uint32_t fps = 60;
 	_displayLink = [CADisplayLink displayLinkWithTarget: self selector: @selector(renderLoop)];
diff --git a/Demos/LunarG-VulkanSamples/Hologram/macOS/DemoViewController.mm b/Demos/LunarG-VulkanSamples/Hologram/macOS/DemoViewController.mm
index e30ee21..6e169f0 100644
--- a/Demos/LunarG-VulkanSamples/Hologram/macOS/DemoViewController.mm
+++ b/Demos/LunarG-VulkanSamples/Hologram/macOS/DemoViewController.mm
@@ -46,12 +46,12 @@
 	self.view.wantsLayer = YES;		// Back the view with a layer created by the makeBackingLayer method.
 
     std::vector<std::string> args;
-//  args.push_back("-p");           // Uncomment to use push constants
+    args.push_back("-p");           // Uncomment to use push constants
 //  args.push_back("-s");           // Uncomment to use a single thread
     _game = new Hologram(args);
 
     _shell = new ShellMVK(*_game);
-    _shell->run(self.view);
+    _shell->run(self.view.layer);
 
 	CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink);
 	CVDisplayLinkSetOutputCallback(_displayLink, &DisplayLinkCallback, _shell);
diff --git a/Docs/MoltenVK_Runtime_UserGuide.md b/Docs/MoltenVK_Runtime_UserGuide.md
index 8310e03..e4cf172 100644
--- a/Docs/MoltenVK_Runtime_UserGuide.md
+++ b/Docs/MoltenVK_Runtime_UserGuide.md
@@ -240,47 +240,45 @@
 - `VK_KHR_maintenance3`
 - `VK_KHR_push_descriptor`
 - `VK_KHR_relaxed_block_layout`
-- `VK_KHR_sampler_mirror_clamp_to_edge`
+- `VK_KHR_sampler_mirror_clamp_to_edge` *(macOS)*
 - `VK_KHR_shader_draw_parameters`
 - `VK_KHR_shader_float16_int8`
 - `VK_KHR_storage_buffer_storage_class`
 - `VK_KHR_surface`
 - `VK_KHR_swapchain`
 - `VK_KHR_swapchain_mutable_format`
+- `VK_KHR_uniform_buffer_standard_layout`
 - `VK_KHR_variable_pointers`
+- `VK_EXT_debug_marker`
 - `VK_EXT_debug_report`
+- `VK_EXT_debug_utils`
 - `VK_EXT_host_query_reset`
-- `VK_EXT_memory_budget`
+- `VK_EXT_memory_budget` *(requires Metal 2.0)*
+- `VK_EXT_metal_surface`
+- `VK_EXT_post_depth_coverage` *(iOS, requires GPU family 4)*
+- `VK_EXT_scalar_block_layout`
+- `VK_EXT_shader_stencil_export` *(requires Mac GPU family 2 or iOS GPU family 5)*
 - `VK_EXT_shader_viewport_index_layer`
+- `VK_EXT_swapchain_colorspace` *(macOS)*
 - `VK_EXT_vertex_attribute_divisor`
+- `VK_EXT_texel_buffer_alignment` *(requires Metal 2.0)*
 - `VK_EXTX_portability_subset`
-- `VK_MVK_ios_surface` (iOS)
-- `VK_MVK_macos_surface` (macOS)
+- `VK_MVK_ios_surface` *(iOS) (Obsolete. Use `VK_EXT_metal_surface` instead.)*
+- `VK_MVK_macos_surface` *(macOS) (Obsolete. Use `VK_EXT_metal_surface` instead.)*
 - `VK_MVK_moltenvk`
 - `VK_AMD_gpu_shader_half_float`
 - `VK_AMD_negative_viewport_height`
-- `VK_IMG_format_pvrtc` (iOS)
+- `VK_AMD_shader_image_load_store_lod` *(iOS)*
+- `VK_AMD_shader_trinary_minmax` *(requires Metal 2.1)*
+- `VK_IMG_format_pvrtc` *(iOS)*
+- `VK_INTEL_shader_integer_functions2`
 - `VK_NV_glsl_shader`
 
-In order to visibly display your content on *iOS* or *macOS*, you must enable the `VK_MVK_ios_surface` 
-or `VK_MVK_macos_surface` extension, respectively, and use the functions defined for that extension
-to create a *Vulkan* rendering surface.
-
-You can enable each of these extensions by defining the `VK_USE_PLATFORM_IOS_MVK` or 
-`VK_USE_PLATFORM_MACOS_MVK` guard macro in your compiler build settings. See the description
-of the `mvk_vulkan.h` file below for a convenient way to enable these extensions automatically.
-
-When using the `VK_MVK_macos_surface ` extension, the `pView` member of the `VkMacOSSurfaceCreateInfoMVK` 
-structure passed in the `vkCreateMacOSSurfaceMVK` function can be either an `NSView` whose layer is a 
-`CAMetalLayer`, or the `CAMetalLayer` itself. Passing the `CAMetalLayer` itself is recommended when 
-calling the `vkCreateMacOSSurfaceMVK` function from outside the main application thread, as `NSView` 
-should only be accessed from the main application thread.
-
-When using the `VK_MVK_ios_surface ` extension, the `pView` member of the `VkIOSSurfaceCreateInfoMVK` 
-structure passed in the `vkCreateIOSSurfaceMVK` function can be either a `UIView` whose layer is a 
-`CAMetalLayer`, or the `CAMetalLayer` itself. Passing the `CAMetalLayer` itself is recommended when 
-calling the `vkCreateIOSSurfaceMVK ` function from outside the main application thread, as `UIView` 
-should only be accessed from the main application thread.
+In order to visibly display your content on *iOS* or *macOS*, you must enable the `VK_EXT_metal_surface` 
+extension, and use the function defined in that extension to create a *Vulkan* rendering surface.
+You can enable the `VK_EXT_metal_surface` extension by defining the `VK_USE_PLATFORM_METAL_EXT` 
+guard macro in your compiler build settings. See the description of the `mvk_vulkan.h` file below for 
+a convenient way to enable this extension automatically.
 
 
 <a name="moltenvk_extension"></a>
@@ -306,10 +304,8 @@
    enabled for *iOS* or *macOS*. Use this header file in place of the `vulkan.h` header file, 
    where access to a **MoltenVK** platform surface extension is required.
    
-   - When building for *iOS*, the `mvk_vulkan.h` header file automatically enables the 
-    `VK_USE_PLATFORM_IOS_MVK` build setting and `VK_MVK_ios_surface` *Vulkan* extension.
-   - When building for *macOS*, the `mvk_vulkan.h` header file automatically enables the
-    `VK_USE_PLATFORM_MACOS_MVK` build setting and `VK_MVK_macos_surface` *Vulkan* extension.
+   The `mvk_vulkan.h` header file automatically enables the `VK_USE_PLATFORM_METAL_EXT` 
+   build setting and `VK_EXT_metal_surface` *Vulkan* extension.
   
 - `mvk_datatypes.h` - Contains helpful functions for converting between *Vulkan* and *Metal* data types.
   You do not need to use this functionality to use **MoltenVK**, as **MoltenVK** converts between 
@@ -317,6 +313,13 @@
   These functions are exposed in this header for your own purposes such as interacting with *Metal* 
   directly, or simply logging data values.
 
+>***Note:*** The functions in `vk_mvk_moltenvk.h` are not supported by the *Vulkan SDK Loader and Layers*
+ framework. The opaque Vulkan objects used by the functions in `vk_mvk_moltenvk.h` (`VkInstance`, 
+ `VkPhysicalDevice`, `VkShaderModule`, `VKImage`, ...), must have been retrieved directly from **MoltenVK**, 
+ and not through the *Vulkan SDK Loader and Layers* framework. The *Vulkan SDK Loader and Layers* framework 
+ often changes these opaque objects, and passing them from a higher layer directly to **MoltenVK** will 
+ result in undefined behaviour.
+
 
 <a name="moltenvk_config"></a>
 ### Configuring MoltenVK
diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md
index fbca82f..50c5b0b 100644
--- a/Docs/Whats_New.md
+++ b/Docs/Whats_New.md
@@ -13,14 +13,107 @@
 
 
 
-MoltenVK 1.0.36
+MoltenVK 1.0.37
 ---------------
 
 Released TBD
 
+- Revert to supporting host-coherent memory for linear images on macOS.
+- Ensure Vulkan loader magic number is set every time before returning any dispatchable Vulkan handle.
+
+
+
+MoltenVK 1.0.36
+---------------
+
+Released 2019/07/25
+
+- Add support for extensions:
+	- `VK_KHR_device_group_creation`
+	- `VK_KHR_swapchain_mutable_format`
+	- `VK_KHR_uniform_buffer_standard_layout`
+	- `VK_EXT_metal_surface`
+	- `VK_EXT_post_depth_coverage`
+	- `VK_EXT_scalar_block_layout`
+	- `VK_EXT_shader_stencil_export`
+	- `VK_EXT_swapchain_colorspace`
+	- `VK_EXT_texel_buffer_alignment`
+	- `VK_AMD_shader_image_load_store_lod`
+	- `VK_AMD_shader_trinary_minmax`
+	- `VK_INTEL_shader_integer_functions2`
+- Support `VK_FORMAT_A2R10G10B10_UNORM_PACK32` as a surface format and view format.
+- For shaders created directly from MSL, set function name from 
+  `VkPipelineShaderStageCreateInfo::pName`.
 - On iOS GPU family 2 and earlier, support immutable depth-compare samplers 
-  as constexpr samplers hardcoded in MSL.
-- Skip SPIRV-Tools build in Travis.
+  as `constexpr` samplers hardcoded in MSL.
+- `vkCmdCopyImage()` support copying between compressed and uncompressed formats
+  and validate that formats are compatible for copying.
+- `vkCmdBufferImageCopy()` fix crash when setting bytes per image in non-arrayed images.
+- `vkCmdBlitImage()` supports blit between different texture formats, and multisampled images.
+- `vkCmdResolveImage()` supports textures of different sizes.
+- `vkCmdClearImage()` returns error if texture is not renderable.
+- Move push constant binding to `vkCmdBindPipeline()` from `vkCmdBindDescriptorSet()`.
+- `MVKDeviceMemory` keep `MTLResourceOptions` aligned with `MTLStorageMode` & `MTLCPUCacheMode`.
+- Texture memory requirements don't use shared storage on macOS.
+- Add `MTLCommandBuffer` completion timing performance tracking option.
+- Expand `MVK_CONFIG_TRACE_VULKAN_CALLS` to optionally log Vulkan call timings.
+- Skip `SPIRV-Tools` build in Travis because Travis does not support the required Python 3.
+- Separate `SPIRVToMSLConverterContext` into input config and output results.
+- Use native Metal texture buffers when available.
+- Fix issue with push constants used across multiple draw calls not being applied.
+- Fix memory leak in debug marker and debug utils labelling.
+- Reduce memory leaks when autorelease pools are not available.
+- Fix pipeline cache lookups.
+- Fix race condition between swapchain image destruction and presentation completion callback.
+- Set Metal texture usage to allow texture copy via view.
+- Fix memory leak in debug marker and debug utils labelling.
+- Fix issue with push constants used across multiple draw calls not being applied.
+- Fix crash when binding descriptor set to layout that has been destroyed and recreated.
+- Return error when `MVKImage` created as 1D attachment.
+- Reduce use of autoreleased Obj-C objects, and ensure those remaining are 
+  covered by deliberate autorelease pools. 
+- Document that the functions in `vk_mvk_moltenvk.h` cannot be used with objects 
+  retrieved through the *Vulkan SDK Loader and Layers* framework.
+- Update `VK_MVK_MOLTENVK_SPEC_VERSION` to 21.
+- Update dependency libraries to match Vulkan SDK 1.1.114.
+- Update to latest SPIRV-Cross version:
+	- MSL: Support `SPV_KHR_multiview` extension.
+	- MSL: Support the `SPV_KHR_post_depth_coverage` extension.
+	- MSL: Support the `SPV_AMD_shader_trinary_minmax` extension.
+	- MSL: Support the `SPV_KHR_device_group` extension.
+	- MSL: Support the `SPV_INTEL_shader_integer_functions2` extension.
+	- MSL: Support `SubgroupSize` / `SubgroupInvocationID` in fragment.
+	- MSL: Support `OpImageQueryLod`.
+	- MSL: Support `MinLod` operand.
+	- MSL: Support `PrimitiveID` in fragment and barycentrics.
+	- MSL: Support 64-bit integers.
+	- MSL: Support `OpOuterProduct`.
+	- MSL: Support `SubgroupLocalInvocationId` and `SubgroupSize` in all stages.
+	- MSL: Support scalar reflect and refract.
+	- MSL: Support scalar block layout.
+	- MSL: Use the `select()` function for `OpSelect`.
+	- MSL: Handle `coherent`, `volatile`, and `restrict`.
+	- MSL: Refactor buffer packing logic from ground up.
+	- MSL: Fix alignment of packed types.
+	- MSL: Handle packed matrices.
+	- MSL: Conditionally validate MSL 2.2 shaders.
+	- MSL: Rewrite how resource indices are fallback-assigned.
+	- MSL: Support custom bindings for argument buffers.
+	- MSL: Fix sampling with `FP16` coordinates.
+	- MSL: Deal with scalar input values for distance/length/normalize.
+	- MSL: Error out on `int64_t/uint64_t` buffer members as unsupported by Metal.
+	- MSL: Deal with scalar input values for distance/length/normalize.
+	- MSL: Re-roll array expressions in initializers.
+	- MSL: New SDK errors out on cull distance.
+	- Rewrite how switch block case labels are emitted.
+	- Fixes to handling of `OpPhi` and case fallthrough.
+	- Fix declaration of loop variables with a `OpPhi` helper copy.
+	- Handle more cases with FP16 and texture sampling.
+	- Fix variable scope when an `if` or `else` block dominates a variable.
+	- Fall back to complex loop if non-trivial continue block is found.
+	- Remove unreasonable assertion for `OpTypeImage Sampled` parameter.
+	- Propagate NonUniformEXT to dependent expressions.
+	- Deal correctly with return sign of bitscan operations.
 
 
 
@@ -44,7 +137,7 @@
 	- Fix tessellated indirect draws using wrong kernels to map parameters.
 	- Work around potential Metal bug with stage-in indirect buffers.
 	- Fix zero local threadgroup size in indirect tessellated rendering.
-	- Fix [[attribute]] assignment for tessellation evaluation shaders.
+	- Fix `[[attribute]]` assignment for tessellation evaluation shaders.
 - `VkSemaphore` optionally uses `MTLEvent`, if available and 
   `MVK_ALLOW_METAL_EVENTS` environment variable is enabled.
 - Add `vkSetWorkgroupSizeMVK()` to set compute kernel workgroup size 
@@ -69,7 +162,7 @@
 - Fix unused attachments terminating loop early.
 - Fix offset of buffer view relative to buffer offset within device memory.
 - Guard against missing Metal pipeline states when pipeline compilation fails.
-- MVKBuffer: Force managed storage for linear textures on shared buffers.
+- `MVKBuffer`: Force managed storage for linear textures on shared buffers.
 - Use device address space when decompressing DXT image data.
 - Added missing `texelBufferTextureWidth` setting in `MVKComputePipeline::getMTLFunction()`.
 - Fixes and consolidation of external library header references.
@@ -97,7 +190,7 @@
 	- MSL: Support Invariant qualifier on position.
 	- MSL: Support stencil export.
 	- Deal with case where a block is somehow emitted in a duplicated fashion.
-	- Fix infinite loop when OpAtomic* temporaries are used in other blocks.
+	- Fix infinite loop when `OpAtomic*` temporaries are used in other blocks.
 	- Fix tests for device->constant address space change in MSL tessellation control shader generation.
 	- Accept SPIR-V 1.4 version.
 
@@ -241,7 +334,7 @@
 - Allow default GPU Capture scope to be assigned to any queue in any queue family.
 - VkPhysicalDevice: Correct some features and limits.
 - Stop advertising atomic image support.
-- vkSetMTLTextureMVK() function retains texture object.
+- `vkSetMTLTextureMVK()` function retains texture object.
 - Log to stderr instead of stdout.
 - `fetchDependencies`: build `spirv-tools` when attached via symlink.
 - Enhancements to `MVKVector`, and set appropriate inline sizing usages.
@@ -568,7 +661,7 @@
 Released 2018/07/31
 
 - Disable rasterization and return void from vertex shaders that write to resources.
-- Add SPIRVToMSLConverterOptions::isRasterizationDisabled to allow pipeline and 
+- Add SPIRVToMSLConversionOptions::isRasterizationDisabled to allow pipeline and 
   vertex shader to communicate rasterization status.
 - Track layered rendering capability.    
 - Add MVKPhysicalDeviceMetalFeatures::layeredRendering.
diff --git a/ExternalDependencies.xcodeproj/project.pbxproj b/ExternalDependencies.xcodeproj/project.pbxproj
index d77a01a..80dc513 100644
--- a/ExternalDependencies.xcodeproj/project.pbxproj
+++ b/ExternalDependencies.xcodeproj/project.pbxproj
@@ -54,756 +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 */; };
-		A94A68EE22B17BBB00C661C6 /* spirv_target_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A673E22B17BBB00C661C6 /* spirv_target_env.cpp */; };
-		A94A68EF22B17BBB00C661C6 /* spirv_target_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A673E22B17BBB00C661C6 /* spirv_target_env.cpp */; };
-		A94A68F022B17BBB00C661C6 /* spirv_fuzzer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674022B17BBB00C661C6 /* spirv_fuzzer_options.h */; };
-		A94A68F122B17BBB00C661C6 /* spirv_fuzzer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674022B17BBB00C661C6 /* spirv_fuzzer_options.h */; };
-		A94A68F222B17BBB00C661C6 /* assembly_grammar.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674122B17BBB00C661C6 /* assembly_grammar.h */; };
-		A94A68F322B17BBB00C661C6 /* assembly_grammar.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674122B17BBB00C661C6 /* assembly_grammar.h */; };
-		A94A68F422B17BBB00C661C6 /* enum_set.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674222B17BBB00C661C6 /* enum_set.h */; };
-		A94A68F522B17BBB00C661C6 /* enum_set.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674222B17BBB00C661C6 /* enum_set.h */; };
-		A94A68F622B17BBB00C661C6 /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674522B17BBB00C661C6 /* text.cpp */; };
-		A94A68F722B17BBB00C661C6 /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674522B17BBB00C661C6 /* text.cpp */; };
-		A94A68F822B17BBB00C661C6 /* assembly_grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674622B17BBB00C661C6 /* assembly_grammar.cpp */; };
-		A94A68F922B17BBB00C661C6 /* assembly_grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674622B17BBB00C661C6 /* assembly_grammar.cpp */; };
-		A94A68FA22B17BBB00C661C6 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674722B17BBB00C661C6 /* text.h */; };
-		A94A68FB22B17BBB00C661C6 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674722B17BBB00C661C6 /* text.h */; };
-		A94A68FC22B17BBB00C661C6 /* extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674822B17BBB00C661C6 /* extensions.cpp */; };
-		A94A68FD22B17BBB00C661C6 /* extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674822B17BBB00C661C6 /* extensions.cpp */; };
-		A94A68FE22B17BBB00C661C6 /* pch_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674922B17BBB00C661C6 /* pch_source.cpp */; };
-		A94A68FF22B17BBB00C661C6 /* pch_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A674922B17BBB00C661C6 /* pch_source.cpp */; };
-		A94A690022B17BBB00C661C6 /* parse_number.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674B22B17BBB00C661C6 /* parse_number.h */; };
-		A94A690122B17BBB00C661C6 /* parse_number.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674B22B17BBB00C661C6 /* parse_number.h */; };
-		A94A690222B17BBB00C661C6 /* ilist_node.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674C22B17BBB00C661C6 /* ilist_node.h */; };
-		A94A690322B17BBB00C661C6 /* ilist_node.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674C22B17BBB00C661C6 /* ilist_node.h */; };
-		A94A690422B17BBB00C661C6 /* make_unique.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674D22B17BBB00C661C6 /* make_unique.h */; };
-		A94A690522B17BBB00C661C6 /* make_unique.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674D22B17BBB00C661C6 /* make_unique.h */; };
-		A94A690622B17BBB00C661C6 /* string_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674E22B17BBB00C661C6 /* string_utils.h */; };
-		A94A690722B17BBB00C661C6 /* string_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674E22B17BBB00C661C6 /* string_utils.h */; };
-		A94A690822B17BBB00C661C6 /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674F22B17BBB00C661C6 /* small_vector.h */; };
-		A94A690922B17BBB00C661C6 /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A674F22B17BBB00C661C6 /* small_vector.h */; };
-		A94A690A22B17BBB00C661C6 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675022B17BBB00C661C6 /* timer.cpp */; };
-		A94A690B22B17BBB00C661C6 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675022B17BBB00C661C6 /* timer.cpp */; };
-		A94A690C22B17BBB00C661C6 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675122B17BBB00C661C6 /* timer.h */; };
-		A94A690D22B17BBB00C661C6 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675122B17BBB00C661C6 /* timer.h */; };
-		A94A690E22B17BBB00C661C6 /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675222B17BBB00C661C6 /* string_utils.cpp */; };
-		A94A690F22B17BBB00C661C6 /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675222B17BBB00C661C6 /* string_utils.cpp */; };
-		A94A691022B17BBB00C661C6 /* bit_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675322B17BBB00C661C6 /* bit_vector.h */; };
-		A94A691122B17BBB00C661C6 /* bit_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675322B17BBB00C661C6 /* bit_vector.h */; };
-		A94A691222B17BBB00C661C6 /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675422B17BBB00C661C6 /* bitutils.h */; };
-		A94A691322B17BBB00C661C6 /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675422B17BBB00C661C6 /* bitutils.h */; };
-		A94A691422B17BBB00C661C6 /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675522B17BBB00C661C6 /* hex_float.h */; };
-		A94A691522B17BBB00C661C6 /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675522B17BBB00C661C6 /* hex_float.h */; };
-		A94A691622B17BBB00C661C6 /* parse_number.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675622B17BBB00C661C6 /* parse_number.cpp */; };
-		A94A691722B17BBB00C661C6 /* parse_number.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675622B17BBB00C661C6 /* parse_number.cpp */; };
-		A94A691822B17BBB00C661C6 /* bit_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675722B17BBB00C661C6 /* bit_vector.cpp */; };
-		A94A691922B17BBB00C661C6 /* bit_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675722B17BBB00C661C6 /* bit_vector.cpp */; };
-		A94A691A22B17BBB00C661C6 /* ilist.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675822B17BBB00C661C6 /* ilist.h */; };
-		A94A691B22B17BBB00C661C6 /* ilist.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675822B17BBB00C661C6 /* ilist.h */; };
-		A94A691C22B17BBB00C661C6 /* spirv_target_env.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675922B17BBB00C661C6 /* spirv_target_env.h */; };
-		A94A691D22B17BBB00C661C6 /* spirv_target_env.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675922B17BBB00C661C6 /* spirv_target_env.h */; };
-		A94A691E22B17BBB00C661C6 /* table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675A22B17BBB00C661C6 /* table.cpp */; };
-		A94A691F22B17BBB00C661C6 /* table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675A22B17BBB00C661C6 /* table.cpp */; };
-		A94A692022B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675C22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h */; };
-		A94A692122B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675C22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h */; };
-		A94A692222B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675D22B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp */; };
-		A94A692322B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A675D22B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp */; };
-		A94A692422B17BBB00C661C6 /* remove_block_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675E22B17BBB00C661C6 /* remove_block_reduction_opportunity.h */; };
-		A94A692522B17BBB00C661C6 /* remove_block_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675E22B17BBB00C661C6 /* remove_block_reduction_opportunity.h */; };
-		A94A692622B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675F22B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h */; };
-		A94A692722B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A675F22B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h */; };
-		A94A692822B17BBB00C661C6 /* reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676022B17BBB00C661C6 /* reduction_pass.cpp */; };
-		A94A692922B17BBB00C661C6 /* reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676022B17BBB00C661C6 /* reduction_pass.cpp */; };
-		A94A692A22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676122B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp */; };
-		A94A692B22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676122B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp */; };
-		A94A692C22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676222B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h */; };
-		A94A692D22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676222B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h */; };
-		A94A692E22B17BBB00C661C6 /* reduction_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676422B17BBB00C661C6 /* reduction_util.cpp */; };
-		A94A692F22B17BBB00C661C6 /* reduction_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676422B17BBB00C661C6 /* reduction_util.cpp */; };
-		A94A693022B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676522B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */; };
-		A94A693122B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676522B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */; };
-		A94A693222B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676622B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h */; };
-		A94A693322B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676622B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h */; };
-		A94A693422B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676722B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp */; };
-		A94A693522B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676722B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp */; };
-		A94A693622B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676822B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h */; };
-		A94A693722B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676822B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h */; };
-		A94A693822B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676922B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */; };
-		A94A693922B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676922B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */; };
-		A94A693A22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676A22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */; };
-		A94A693B22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676A22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */; };
-		A94A693C22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676B22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp */; };
-		A94A693D22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676B22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp */; };
-		A94A693E22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h */; };
-		A94A693F22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A676C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h */; };
-		A94A694022B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676D22B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */; };
-		A94A694122B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676D22B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */; };
-		A94A694222B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676E22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp */; };
-		A94A694322B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676E22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp */; };
-		A94A694422B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676F22B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */; };
-		A94A694522B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A676F22B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */; };
-		A94A694622B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677022B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h */; };
-		A94A694722B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677022B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h */; };
-		A94A694822B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677122B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp */; };
-		A94A694922B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677122B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp */; };
-		A94A694A22B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677222B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp */; };
-		A94A694B22B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677222B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp */; };
-		A94A694C22B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677322B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h */; };
-		A94A694D22B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677322B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h */; };
-		A94A694E22B17BBB00C661C6 /* remove_function_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677422B17BBB00C661C6 /* remove_function_reduction_opportunity.h */; };
-		A94A694F22B17BBB00C661C6 /* remove_function_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677422B17BBB00C661C6 /* remove_function_reduction_opportunity.h */; };
-		A94A695022B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677522B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h */; };
-		A94A695122B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677522B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h */; };
-		A94A695222B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677622B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */; };
-		A94A695322B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677622B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */; };
-		A94A695422B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677722B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h */; };
-		A94A695522B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677722B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h */; };
-		A94A695622B17BBB00C661C6 /* remove_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677822B17BBB00C661C6 /* remove_selection_reduction_opportunity.h */; };
-		A94A695722B17BBB00C661C6 /* remove_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677822B17BBB00C661C6 /* remove_selection_reduction_opportunity.h */; };
-		A94A695822B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677922B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp */; };
-		A94A695922B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677922B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp */; };
-		A94A695A22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677A22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h */; };
-		A94A695B22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677A22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h */; };
-		A94A695C22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677B22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h */; };
-		A94A695D22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A677B22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h */; };
-		A94A695E22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp */; };
-		A94A695F22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp */; };
-		A94A696022B17BBB00C661C6 /* pch_source_reduce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677D22B17BBB00C661C6 /* pch_source_reduce.cpp */; };
-		A94A696122B17BBB00C661C6 /* pch_source_reduce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677D22B17BBB00C661C6 /* pch_source_reduce.cpp */; };
-		A94A696222B17BBB00C661C6 /* reducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677E22B17BBB00C661C6 /* reducer.cpp */; };
-		A94A696322B17BBB00C661C6 /* reducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677E22B17BBB00C661C6 /* reducer.cpp */; };
-		A94A696422B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677F22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp */; };
-		A94A696522B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A677F22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp */; };
-		A94A696622B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678022B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h */; };
-		A94A696722B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678022B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h */; };
-		A94A696822B17BBB00C661C6 /* pch_source_reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678122B17BBB00C661C6 /* pch_source_reduce.h */; };
-		A94A696922B17BBB00C661C6 /* pch_source_reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678122B17BBB00C661C6 /* pch_source_reduce.h */; };
-		A94A696A22B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678222B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h */; };
-		A94A696B22B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678222B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h */; };
-		A94A696C22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678322B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp */; };
-		A94A696D22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678322B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp */; };
-		A94A696E22B17BBB00C661C6 /* reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678422B17BBB00C661C6 /* reduction_opportunity.cpp */; };
-		A94A696F22B17BBB00C661C6 /* reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678422B17BBB00C661C6 /* reduction_opportunity.cpp */; };
-		A94A697022B17BBB00C661C6 /* reducer.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678522B17BBB00C661C6 /* reducer.h */; };
-		A94A697122B17BBB00C661C6 /* reducer.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678522B17BBB00C661C6 /* reducer.h */; };
-		A94A697222B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678622B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp */; };
-		A94A697322B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678622B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp */; };
-		A94A697422B17BBB00C661C6 /* reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678722B17BBB00C661C6 /* reduction_opportunity.h */; };
-		A94A697522B17BBB00C661C6 /* reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678722B17BBB00C661C6 /* reduction_opportunity.h */; };
-		A94A697622B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678822B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */; };
-		A94A697722B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678822B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */; };
-		A94A697822B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678922B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */; };
-		A94A697922B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678922B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */; };
-		A94A697A22B17BBB00C661C6 /* reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678A22B17BBB00C661C6 /* reduction_opportunity_finder.h */; };
-		A94A697B22B17BBB00C661C6 /* reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678A22B17BBB00C661C6 /* reduction_opportunity_finder.h */; };
-		A94A697C22B17BBB00C661C6 /* change_operand_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678B22B17BBB00C661C6 /* change_operand_reduction_opportunity.h */; };
-		A94A697D22B17BBB00C661C6 /* change_operand_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678B22B17BBB00C661C6 /* change_operand_reduction_opportunity.h */; };
-		A94A697E22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678C22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h */; };
-		A94A697F22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678C22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h */; };
-		A94A698022B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678D22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp */; };
-		A94A698122B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A678D22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp */; };
-		A94A698222B17BBB00C661C6 /* reduction_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678E22B17BBB00C661C6 /* reduction_util.h */; };
-		A94A698322B17BBB00C661C6 /* reduction_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678E22B17BBB00C661C6 /* reduction_util.h */; };
-		A94A698422B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678F22B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h */; };
-		A94A698522B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A678F22B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h */; };
-		A94A698622B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679022B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */; };
-		A94A698722B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679022B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */; };
-		A94A698822B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679122B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp */; };
-		A94A698922B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679122B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp */; };
-		A94A698A22B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679222B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp */; };
-		A94A698B22B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679222B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp */; };
-		A94A698C22B17BBB00C661C6 /* reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679322B17BBB00C661C6 /* reduction_pass.h */; };
-		A94A698D22B17BBB00C661C6 /* reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679322B17BBB00C661C6 /* reduction_pass.h */; };
-		A94A698E22B17BBB00C661C6 /* latest_version_opencl_std_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679422B17BBB00C661C6 /* latest_version_opencl_std_header.h */; };
-		A94A698F22B17BBB00C661C6 /* latest_version_opencl_std_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679422B17BBB00C661C6 /* latest_version_opencl_std_header.h */; };
-		A94A699022B17BBB00C661C6 /* spirv_optimizer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679522B17BBB00C661C6 /* spirv_optimizer_options.cpp */; };
-		A94A699122B17BBB00C661C6 /* spirv_optimizer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679522B17BBB00C661C6 /* spirv_optimizer_options.cpp */; };
-		A94A699222B17BBB00C661C6 /* cfa.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679622B17BBB00C661C6 /* cfa.h */; };
-		A94A699322B17BBB00C661C6 /* cfa.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679622B17BBB00C661C6 /* cfa.h */; };
-		A94A699422B17BBB00C661C6 /* pch_source.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679722B17BBB00C661C6 /* pch_source.h */; };
-		A94A699522B17BBB00C661C6 /* pch_source.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679722B17BBB00C661C6 /* pch_source.h */; };
-		A94A699622B17BBB00C661C6 /* enum_string_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679822B17BBB00C661C6 /* enum_string_mapping.h */; };
-		A94A699722B17BBB00C661C6 /* enum_string_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679822B17BBB00C661C6 /* enum_string_mapping.h */; };
-		A94A699822B17BBB00C661C6 /* spirv_fuzzer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679922B17BBB00C661C6 /* spirv_fuzzer_options.cpp */; };
-		A94A699922B17BBB00C661C6 /* spirv_fuzzer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679922B17BBB00C661C6 /* spirv_fuzzer_options.cpp */; };
-		A94A699A22B17BBB00C661C6 /* spirv_reducer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679A22B17BBB00C661C6 /* spirv_reducer_options.h */; };
-		A94A699B22B17BBB00C661C6 /* spirv_reducer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679A22B17BBB00C661C6 /* spirv_reducer_options.h */; };
-		A94A699C22B17BBB00C661C6 /* spirv_validator_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679B22B17BBB00C661C6 /* spirv_validator_options.cpp */; };
-		A94A699D22B17BBB00C661C6 /* spirv_validator_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679B22B17BBB00C661C6 /* spirv_validator_options.cpp */; };
-		A94A699E22B17BBB00C661C6 /* print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679D22B17BBB00C661C6 /* print.cpp */; };
-		A94A699F22B17BBB00C661C6 /* print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A679D22B17BBB00C661C6 /* print.cpp */; };
-		A94A69A022B17BBB00C661C6 /* spirv_definition.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679E22B17BBB00C661C6 /* spirv_definition.h */; };
-		A94A69A122B17BBB00C661C6 /* spirv_definition.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679E22B17BBB00C661C6 /* spirv_definition.h */; };
-		A94A69A222B17BBB00C661C6 /* operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679F22B17BBB00C661C6 /* operand.h */; };
-		A94A69A322B17BBB00C661C6 /* operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A679F22B17BBB00C661C6 /* operand.h */; };
-		A94A69A422B17BBB00C661C6 /* spirv_endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67A022B17BBB00C661C6 /* spirv_endian.cpp */; };
-		A94A69A522B17BBB00C661C6 /* spirv_endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67A022B17BBB00C661C6 /* spirv_endian.cpp */; };
-		A94A69A622B17BBB00C661C6 /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A122B17BBB00C661C6 /* macro.h */; };
-		A94A69A722B17BBB00C661C6 /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A122B17BBB00C661C6 /* macro.h */; };
-		A94A69A822B17BBB00C661C6 /* spirv_constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A222B17BBB00C661C6 /* spirv_constant.h */; };
-		A94A69A922B17BBB00C661C6 /* spirv_constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A222B17BBB00C661C6 /* spirv_constant.h */; };
-		A94A69AA22B17BBB00C661C6 /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67A422B17BBB00C661C6 /* binary.cpp */; };
-		A94A69AB22B17BBB00C661C6 /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67A422B17BBB00C661C6 /* binary.cpp */; };
-		A94A69AC22B17BBB00C661C6 /* spirv_validator_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A522B17BBB00C661C6 /* spirv_validator_options.h */; };
-		A94A69AD22B17BBB00C661C6 /* spirv_validator_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A522B17BBB00C661C6 /* spirv_validator_options.h */; };
-		A94A69AE22B17BBB00C661C6 /* enum_string_mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67A622B17BBB00C661C6 /* enum_string_mapping.cpp */; };
-		A94A69AF22B17BBB00C661C6 /* enum_string_mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67A622B17BBB00C661C6 /* enum_string_mapping.cpp */; };
-		A94A69B022B17BBB00C661C6 /* text_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A722B17BBB00C661C6 /* text_handler.h */; };
-		A94A69B122B17BBB00C661C6 /* text_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A722B17BBB00C661C6 /* text_handler.h */; };
-		A94A69B222B17BBB00C661C6 /* parsed_operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A822B17BBB00C661C6 /* parsed_operand.h */; };
-		A94A69B322B17BBB00C661C6 /* parsed_operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A822B17BBB00C661C6 /* parsed_operand.h */; };
-		A94A69B422B17BBB00C661C6 /* name_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A922B17BBB00C661C6 /* name_mapper.h */; };
-		A94A69B522B17BBB00C661C6 /* name_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67A922B17BBB00C661C6 /* name_mapper.h */; };
-		A94A69B622B17BBB00C661C6 /* spirv_reducer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67AA22B17BBB00C661C6 /* spirv_reducer_options.cpp */; };
-		A94A69B722B17BBB00C661C6 /* spirv_reducer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67AA22B17BBB00C661C6 /* spirv_reducer_options.cpp */; };
-		A94A69B822B17BBB00C661C6 /* parsed_operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67AB22B17BBB00C661C6 /* parsed_operand.cpp */; };
-		A94A69B922B17BBB00C661C6 /* parsed_operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67AB22B17BBB00C661C6 /* parsed_operand.cpp */; };
-		A94A69BA22B17BBB00C661C6 /* diagnostic.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67AC22B17BBB00C661C6 /* diagnostic.h */; };
-		A94A69BB22B17BBB00C661C6 /* diagnostic.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67AC22B17BBB00C661C6 /* diagnostic.h */; };
-		A94A69BC22B17BBB00C661C6 /* spirv_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67AD22B17BBB00C661C6 /* spirv_endian.h */; };
-		A94A69BD22B17BBB00C661C6 /* spirv_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67AD22B17BBB00C661C6 /* spirv_endian.h */; };
-		A94A69BE22B17BBB00C661C6 /* name_mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67AE22B17BBB00C661C6 /* name_mapper.cpp */; };
-		A94A69BF22B17BBB00C661C6 /* name_mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67AE22B17BBB00C661C6 /* name_mapper.cpp */; };
-		A94A69C022B17BBB00C661C6 /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B222B17BBB00C661C6 /* linker.cpp */; };
-		A94A69C122B17BBB00C661C6 /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B222B17BBB00C661C6 /* linker.cpp */; };
-		A94A69C222B17BBC00C661C6 /* software_version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B322B17BBB00C661C6 /* software_version.cpp */; };
-		A94A69C322B17BBC00C661C6 /* software_version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B322B17BBB00C661C6 /* software_version.cpp */; };
-		A94A69C422B17BBC00C661C6 /* opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B422B17BBB00C661C6 /* opcode.cpp */; };
-		A94A69C522B17BBC00C661C6 /* opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B422B17BBB00C661C6 /* opcode.cpp */; };
-		A94A69C622B17BBC00C661C6 /* print.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67B522B17BBB00C661C6 /* print.h */; };
-		A94A69C722B17BBC00C661C6 /* print.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67B522B17BBB00C661C6 /* print.h */; };
-		A94A69C822B17BBC00C661C6 /* ext_inst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B622B17BBB00C661C6 /* ext_inst.cpp */; };
-		A94A69C922B17BBC00C661C6 /* ext_inst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B622B17BBB00C661C6 /* ext_inst.cpp */; };
-		A94A69CA22B17BBC00C661C6 /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67B722B17BBB00C661C6 /* disassemble.h */; };
-		A94A69CB22B17BBC00C661C6 /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67B722B17BBB00C661C6 /* disassemble.h */; };
-		A94A69CC22B17BBC00C661C6 /* optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B922B17BBB00C661C6 /* optimizer.cpp */; };
-		A94A69CD22B17BBC00C661C6 /* optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67B922B17BBB00C661C6 /* optimizer.cpp */; };
-		A94A69CE22B17BBC00C661C6 /* if_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BA22B17BBB00C661C6 /* if_conversion.h */; };
-		A94A69CF22B17BBC00C661C6 /* if_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BA22B17BBB00C661C6 /* if_conversion.h */; };
-		A94A69D022B17BBC00C661C6 /* register_pressure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67BB22B17BBB00C661C6 /* register_pressure.cpp */; };
-		A94A69D122B17BBC00C661C6 /* register_pressure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67BB22B17BBB00C661C6 /* register_pressure.cpp */; };
-		A94A69D222B17BBC00C661C6 /* loop_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67BC22B17BBB00C661C6 /* loop_utils.cpp */; };
-		A94A69D322B17BBC00C661C6 /* loop_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67BC22B17BBB00C661C6 /* loop_utils.cpp */; };
-		A94A69D422B17BBC00C661C6 /* merge_return_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BD22B17BBB00C661C6 /* merge_return_pass.h */; };
-		A94A69D522B17BBC00C661C6 /* merge_return_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BD22B17BBB00C661C6 /* merge_return_pass.h */; };
-		A94A69D622B17BBC00C661C6 /* inline_opaque_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BE22B17BBB00C661C6 /* inline_opaque_pass.h */; };
-		A94A69D722B17BBC00C661C6 /* inline_opaque_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BE22B17BBB00C661C6 /* inline_opaque_pass.h */; };
-		A94A69D822B17BBC00C661C6 /* loop_fusion.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BF22B17BBB00C661C6 /* loop_fusion.h */; };
-		A94A69D922B17BBC00C661C6 /* loop_fusion.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67BF22B17BBB00C661C6 /* loop_fusion.h */; };
-		A94A69DA22B17BBC00C661C6 /* combine_access_chains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67C022B17BBB00C661C6 /* combine_access_chains.cpp */; };
-		A94A69DB22B17BBC00C661C6 /* combine_access_chains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67C022B17BBB00C661C6 /* combine_access_chains.cpp */; };
-		A94A69DC22B17BBC00C661C6 /* build_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67C122B17BBB00C661C6 /* build_module.cpp */; };
-		A94A69DD22B17BBC00C661C6 /* build_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67C122B17BBB00C661C6 /* build_module.cpp */; };
-		A94A69DE22B17BBC00C661C6 /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C222B17BBB00C661C6 /* composite.h */; };
-		A94A69DF22B17BBC00C661C6 /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C222B17BBB00C661C6 /* composite.h */; };
-		A94A69E022B17BBC00C661C6 /* compact_ids_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C322B17BBB00C661C6 /* compact_ids_pass.h */; };
-		A94A69E122B17BBC00C661C6 /* compact_ids_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C322B17BBB00C661C6 /* compact_ids_pass.h */; };
-		A94A69E222B17BBC00C661C6 /* register_pressure.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C422B17BBB00C661C6 /* register_pressure.h */; };
-		A94A69E322B17BBC00C661C6 /* register_pressure.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C422B17BBB00C661C6 /* register_pressure.h */; };
-		A94A69E422B17BBC00C661C6 /* tree_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C522B17BBB00C661C6 /* tree_iterator.h */; };
-		A94A69E522B17BBC00C661C6 /* tree_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C522B17BBB00C661C6 /* tree_iterator.h */; };
-		A94A69E622B17BBC00C661C6 /* strip_atomic_counter_memory_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C622B17BBB00C661C6 /* strip_atomic_counter_memory_pass.h */; };
-		A94A69E722B17BBC00C661C6 /* strip_atomic_counter_memory_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C622B17BBB00C661C6 /* strip_atomic_counter_memory_pass.h */; };
-		A94A69E822B17BBC00C661C6 /* legalize_vector_shuffle_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C722B17BBB00C661C6 /* legalize_vector_shuffle_pass.h */; };
-		A94A69E922B17BBC00C661C6 /* legalize_vector_shuffle_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C722B17BBB00C661C6 /* legalize_vector_shuffle_pass.h */; };
-		A94A69EA22B17BBC00C661C6 /* local_single_store_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C822B17BBB00C661C6 /* local_single_store_elim_pass.h */; };
-		A94A69EB22B17BBC00C661C6 /* local_single_store_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C822B17BBB00C661C6 /* local_single_store_elim_pass.h */; };
-		A94A69EC22B17BBC00C661C6 /* reduce_load_size.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C922B17BBB00C661C6 /* reduce_load_size.h */; };
-		A94A69ED22B17BBC00C661C6 /* reduce_load_size.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67C922B17BBB00C661C6 /* reduce_load_size.h */; };
-		A94A69EE22B17BBC00C661C6 /* code_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CA22B17BBB00C661C6 /* code_sink.cpp */; };
-		A94A69EF22B17BBC00C661C6 /* code_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CA22B17BBB00C661C6 /* code_sink.cpp */; };
-		A94A69F022B17BBC00C661C6 /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CB22B17BBB00C661C6 /* types.cpp */; };
-		A94A69F122B17BBC00C661C6 /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CB22B17BBB00C661C6 /* types.cpp */; };
-		A94A69F222B17BBC00C661C6 /* scalar_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67CC22B17BBB00C661C6 /* scalar_analysis.h */; };
-		A94A69F322B17BBC00C661C6 /* scalar_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67CC22B17BBB00C661C6 /* scalar_analysis.h */; };
-		A94A69F422B17BBC00C661C6 /* strip_debug_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67CD22B17BBB00C661C6 /* strip_debug_info_pass.h */; };
-		A94A69F522B17BBC00C661C6 /* strip_debug_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67CD22B17BBB00C661C6 /* strip_debug_info_pass.h */; };
-		A94A69F622B17BBC00C661C6 /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CE22B17BBB00C661C6 /* cfg.cpp */; };
-		A94A69F722B17BBC00C661C6 /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CE22B17BBB00C661C6 /* cfg.cpp */; };
-		A94A69F822B17BBC00C661C6 /* strip_atomic_counter_memory_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CF22B17BBB00C661C6 /* strip_atomic_counter_memory_pass.cpp */; };
-		A94A69F922B17BBC00C661C6 /* strip_atomic_counter_memory_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67CF22B17BBB00C661C6 /* strip_atomic_counter_memory_pass.cpp */; };
-		A94A69FA22B17BBC00C661C6 /* decoration_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D022B17BBB00C661C6 /* decoration_manager.cpp */; };
-		A94A69FB22B17BBC00C661C6 /* decoration_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D022B17BBB00C661C6 /* decoration_manager.cpp */; };
-		A94A69FC22B17BBC00C661C6 /* local_single_block_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D122B17BBB00C661C6 /* local_single_block_elim_pass.cpp */; };
-		A94A69FD22B17BBC00C661C6 /* local_single_block_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D122B17BBB00C661C6 /* local_single_block_elim_pass.cpp */; };
-		A94A69FE22B17BBC00C661C6 /* freeze_spec_constant_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D222B17BBB00C661C6 /* freeze_spec_constant_value_pass.cpp */; };
-		A94A69FF22B17BBC00C661C6 /* freeze_spec_constant_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D222B17BBB00C661C6 /* freeze_spec_constant_value_pass.cpp */; };
-		A94A6A0022B17BBC00C661C6 /* replace_invalid_opc.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67D322B17BBB00C661C6 /* replace_invalid_opc.h */; };
-		A94A6A0122B17BBC00C661C6 /* replace_invalid_opc.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67D322B17BBB00C661C6 /* replace_invalid_opc.h */; };
-		A94A6A0222B17BBC00C661C6 /* local_access_chain_convert_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67D422B17BBB00C661C6 /* local_access_chain_convert_pass.h */; };
-		A94A6A0322B17BBC00C661C6 /* local_access_chain_convert_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67D422B17BBB00C661C6 /* local_access_chain_convert_pass.h */; };
-		A94A6A0422B17BBC00C661C6 /* inst_bindless_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D522B17BBB00C661C6 /* inst_bindless_check_pass.cpp */; };
-		A94A6A0522B17BBC00C661C6 /* inst_bindless_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D522B17BBB00C661C6 /* inst_bindless_check_pass.cpp */; };
-		A94A6A0622B17BBC00C661C6 /* local_redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D622B17BBB00C661C6 /* local_redundancy_elimination.cpp */; };
-		A94A6A0722B17BBC00C661C6 /* local_redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D622B17BBB00C661C6 /* local_redundancy_elimination.cpp */; };
-		A94A6A0822B17BBC00C661C6 /* instrument_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D822B17BBB00C661C6 /* instrument_pass.cpp */; };
-		A94A6A0922B17BBC00C661C6 /* instrument_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67D822B17BBB00C661C6 /* instrument_pass.cpp */; };
-		A94A6A0A22B17BBC00C661C6 /* propagator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67D922B17BBB00C661C6 /* propagator.h */; };
-		A94A6A0B22B17BBC00C661C6 /* propagator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67D922B17BBB00C661C6 /* propagator.h */; };
-		A94A6A0C22B17BBC00C661C6 /* instruction_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67DA22B17BBB00C661C6 /* instruction_list.h */; };
-		A94A6A0D22B17BBC00C661C6 /* instruction_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67DA22B17BBB00C661C6 /* instruction_list.h */; };
-		A94A6A0E22B17BBC00C661C6 /* feature_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DB22B17BBB00C661C6 /* feature_manager.cpp */; };
-		A94A6A0F22B17BBC00C661C6 /* feature_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DB22B17BBB00C661C6 /* feature_manager.cpp */; };
-		A94A6A1022B17BBC00C661C6 /* pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DC22B17BBB00C661C6 /* pass.cpp */; };
-		A94A6A1122B17BBC00C661C6 /* pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DC22B17BBB00C661C6 /* pass.cpp */; };
-		A94A6A1222B17BBC00C661C6 /* loop_fission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DD22B17BBB00C661C6 /* loop_fission.cpp */; };
-		A94A6A1322B17BBC00C661C6 /* loop_fission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DD22B17BBB00C661C6 /* loop_fission.cpp */; };
-		A94A6A1422B17BBC00C661C6 /* dominator_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DE22B17BBB00C661C6 /* dominator_tree.cpp */; };
-		A94A6A1522B17BBC00C661C6 /* dominator_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DE22B17BBB00C661C6 /* dominator_tree.cpp */; };
-		A94A6A1622B17BBC00C661C6 /* merge_return_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DF22B17BBB00C661C6 /* merge_return_pass.cpp */; };
-		A94A6A1722B17BBC00C661C6 /* merge_return_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67DF22B17BBB00C661C6 /* merge_return_pass.cpp */; };
-		A94A6A1822B17BBC00C661C6 /* ir_context.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E022B17BBB00C661C6 /* ir_context.h */; };
-		A94A6A1922B17BBC00C661C6 /* ir_context.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E022B17BBB00C661C6 /* ir_context.h */; };
-		A94A6A1A22B17BBC00C661C6 /* eliminate_dead_constant_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E122B17BBB00C661C6 /* eliminate_dead_constant_pass.cpp */; };
-		A94A6A1B22B17BBC00C661C6 /* eliminate_dead_constant_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E122B17BBB00C661C6 /* eliminate_dead_constant_pass.cpp */; };
-		A94A6A1C22B17BBC00C661C6 /* cfg_cleanup_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E222B17BBB00C661C6 /* cfg_cleanup_pass.cpp */; };
-		A94A6A1D22B17BBC00C661C6 /* cfg_cleanup_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E222B17BBB00C661C6 /* cfg_cleanup_pass.cpp */; };
-		A94A6A1E22B17BBC00C661C6 /* const_folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E322B17BBB00C661C6 /* const_folding_rules.cpp */; };
-		A94A6A1F22B17BBC00C661C6 /* const_folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E322B17BBB00C661C6 /* const_folding_rules.cpp */; };
-		A94A6A2022B17BBC00C661C6 /* loop_unroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E422B17BBB00C661C6 /* loop_unroller.h */; };
-		A94A6A2122B17BBC00C661C6 /* loop_unroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E422B17BBB00C661C6 /* loop_unroller.h */; };
-		A94A6A2222B17BBC00C661C6 /* strip_debug_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E522B17BBB00C661C6 /* strip_debug_info_pass.cpp */; };
-		A94A6A2322B17BBC00C661C6 /* strip_debug_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E522B17BBB00C661C6 /* strip_debug_info_pass.cpp */; };
-		A94A6A2422B17BBC00C661C6 /* ssa_rewrite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E622B17BBB00C661C6 /* ssa_rewrite_pass.cpp */; };
-		A94A6A2522B17BBC00C661C6 /* ssa_rewrite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E622B17BBB00C661C6 /* ssa_rewrite_pass.cpp */; };
-		A94A6A2622B17BBC00C661C6 /* loop_dependence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E722B17BBB00C661C6 /* loop_dependence.cpp */; };
-		A94A6A2722B17BBC00C661C6 /* loop_dependence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67E722B17BBB00C661C6 /* loop_dependence.cpp */; };
-		A94A6A2822B17BBC00C661C6 /* unify_const_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E822B17BBB00C661C6 /* unify_const_pass.h */; };
-		A94A6A2922B17BBC00C661C6 /* unify_const_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E822B17BBB00C661C6 /* unify_const_pass.h */; };
-		A94A6A2A22B17BBC00C661C6 /* ir_loader.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E922B17BBB00C661C6 /* ir_loader.h */; };
-		A94A6A2B22B17BBC00C661C6 /* ir_loader.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67E922B17BBB00C661C6 /* ir_loader.h */; };
-		A94A6A2C22B17BBC00C661C6 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67EA22B17BBB00C661C6 /* types.h */; };
-		A94A6A2D22B17BBC00C661C6 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67EA22B17BBB00C661C6 /* types.h */; };
-		A94A6A2E22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67EB22B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.h */; };
-		A94A6A2F22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67EB22B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.h */; };
-		A94A6A3022B17BBC00C661C6 /* mem_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67EC22B17BBB00C661C6 /* mem_pass.cpp */; };
-		A94A6A3122B17BBC00C661C6 /* mem_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67EC22B17BBB00C661C6 /* mem_pass.cpp */; };
-		A94A6A3222B17BBC00C661C6 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67ED22B17BBB00C661C6 /* basic_block.h */; };
-		A94A6A3322B17BBC00C661C6 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67ED22B17BBB00C661C6 /* basic_block.h */; };
-		A94A6A3422B17BBC00C661C6 /* remove_duplicates_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67EE22B17BBB00C661C6 /* remove_duplicates_pass.cpp */; };
-		A94A6A3522B17BBC00C661C6 /* remove_duplicates_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67EE22B17BBB00C661C6 /* remove_duplicates_pass.cpp */; };
-		A94A6A3622B17BBC00C661C6 /* dead_variable_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67EF22B17BBB00C661C6 /* dead_variable_elimination.cpp */; };
-		A94A6A3722B17BBC00C661C6 /* dead_variable_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67EF22B17BBB00C661C6 /* dead_variable_elimination.cpp */; };
-		A94A6A3822B17BBC00C661C6 /* block_merge_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67F022B17BBB00C661C6 /* block_merge_pass.h */; };
-		A94A6A3922B17BBC00C661C6 /* block_merge_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67F022B17BBB00C661C6 /* block_merge_pass.h */; };
-		A94A6A3A22B17BBC00C661C6 /* module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F122B17BBB00C661C6 /* module.cpp */; };
-		A94A6A3B22B17BBC00C661C6 /* module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F122B17BBB00C661C6 /* module.cpp */; };
-		A94A6A3C22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F222B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp */; };
-		A94A6A3D22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F222B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp */; };
-		A94A6A3E22B17BBC00C661C6 /* loop_unswitch_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F322B17BBB00C661C6 /* loop_unswitch_pass.cpp */; };
-		A94A6A3F22B17BBC00C661C6 /* loop_unswitch_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F322B17BBB00C661C6 /* loop_unswitch_pass.cpp */; };
-		A94A6A4022B17BBC00C661C6 /* unify_const_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F422B17BBB00C661C6 /* unify_const_pass.cpp */; };
-		A94A6A4122B17BBC00C661C6 /* unify_const_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F422B17BBB00C661C6 /* unify_const_pass.cpp */; };
-		A94A6A4222B17BBC00C661C6 /* type_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F522B17BBB00C661C6 /* type_manager.cpp */; };
-		A94A6A4322B17BBC00C661C6 /* type_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F522B17BBB00C661C6 /* type_manager.cpp */; };
-		A94A6A4422B17BBC00C661C6 /* generate_webgpu_initializers_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F622B17BBB00C661C6 /* generate_webgpu_initializers_pass.cpp */; };
-		A94A6A4522B17BBC00C661C6 /* generate_webgpu_initializers_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F622B17BBB00C661C6 /* generate_webgpu_initializers_pass.cpp */; };
-		A94A6A4622B17BBC00C661C6 /* private_to_local_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67F722B17BBB00C661C6 /* private_to_local_pass.h */; };
-		A94A6A4722B17BBC00C661C6 /* private_to_local_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67F722B17BBB00C661C6 /* private_to_local_pass.h */; };
-		A94A6A4822B17BBC00C661C6 /* inline_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F822B17BBB00C661C6 /* inline_pass.cpp */; };
-		A94A6A4922B17BBC00C661C6 /* inline_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67F822B17BBB00C661C6 /* inline_pass.cpp */; };
-		A94A6A4A22B17BBC00C661C6 /* def_use_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67F922B17BBB00C661C6 /* def_use_manager.h */; };
-		A94A6A4B22B17BBC00C661C6 /* def_use_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67F922B17BBB00C661C6 /* def_use_manager.h */; };
-		A94A6A4C22B17BBC00C661C6 /* ir_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FA22B17BBB00C661C6 /* ir_loader.cpp */; };
-		A94A6A4D22B17BBC00C661C6 /* ir_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FA22B17BBB00C661C6 /* ir_loader.cpp */; };
-		A94A6A4E22B17BBC00C661C6 /* cfg_cleanup_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67FB22B17BBB00C661C6 /* cfg_cleanup_pass.h */; };
-		A94A6A4F22B17BBC00C661C6 /* cfg_cleanup_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67FB22B17BBB00C661C6 /* cfg_cleanup_pass.h */; };
-		A94A6A5022B17BBC00C661C6 /* licm_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FC22B17BBB00C661C6 /* licm_pass.cpp */; };
-		A94A6A5122B17BBC00C661C6 /* licm_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FC22B17BBB00C661C6 /* licm_pass.cpp */; };
-		A94A6A5222B17BBC00C661C6 /* eliminate_dead_functions_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FD22B17BBB00C661C6 /* eliminate_dead_functions_pass.cpp */; };
-		A94A6A5322B17BBC00C661C6 /* eliminate_dead_functions_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FD22B17BBB00C661C6 /* eliminate_dead_functions_pass.cpp */; };
-		A94A6A5422B17BBC00C661C6 /* local_redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67FE22B17BBB00C661C6 /* local_redundancy_elimination.h */; };
-		A94A6A5522B17BBC00C661C6 /* local_redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A67FE22B17BBB00C661C6 /* local_redundancy_elimination.h */; };
-		A94A6A5622B17BBC00C661C6 /* split_invalid_unreachable_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FF22B17BBB00C661C6 /* split_invalid_unreachable_pass.cpp */; };
-		A94A6A5722B17BBC00C661C6 /* split_invalid_unreachable_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A67FF22B17BBB00C661C6 /* split_invalid_unreachable_pass.cpp */; };
-		A94A6A5822B17BBC00C661C6 /* loop_peeling.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680022B17BBB00C661C6 /* loop_peeling.h */; };
-		A94A6A5922B17BBC00C661C6 /* loop_peeling.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680022B17BBB00C661C6 /* loop_peeling.h */; };
-		A94A6A5A22B17BBC00C661C6 /* vector_dce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680122B17BBB00C661C6 /* vector_dce.cpp */; };
-		A94A6A5B22B17BBC00C661C6 /* vector_dce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680122B17BBB00C661C6 /* vector_dce.cpp */; };
-		A94A6A5C22B17BBC00C661C6 /* block_merge_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680222B17BBB00C661C6 /* block_merge_util.h */; };
-		A94A6A5D22B17BBC00C661C6 /* block_merge_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680222B17BBB00C661C6 /* block_merge_util.h */; };
-		A94A6A5E22B17BBC00C661C6 /* loop_unroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680322B17BBB00C661C6 /* loop_unroller.cpp */; };
-		A94A6A5F22B17BBC00C661C6 /* loop_unroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680322B17BBB00C661C6 /* loop_unroller.cpp */; };
-		A94A6A6022B17BBC00C661C6 /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680422B17BBB00C661C6 /* constants.cpp */; };
-		A94A6A6122B17BBC00C661C6 /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680422B17BBB00C661C6 /* constants.cpp */; };
-		A94A6A6222B17BBC00C661C6 /* loop_fusion_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680522B17BBB00C661C6 /* loop_fusion_pass.h */; };
-		A94A6A6322B17BBC00C661C6 /* loop_fusion_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680522B17BBB00C661C6 /* loop_fusion_pass.h */; };
-		A94A6A6422B17BBC00C661C6 /* struct_cfg_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680622B17BBB00C661C6 /* struct_cfg_analysis.h */; };
-		A94A6A6522B17BBC00C661C6 /* struct_cfg_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680622B17BBB00C661C6 /* struct_cfg_analysis.h */; };
-		A94A6A6622B17BBC00C661C6 /* common_uniform_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680722B17BBB00C661C6 /* common_uniform_elim_pass.cpp */; };
-		A94A6A6722B17BBC00C661C6 /* common_uniform_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680722B17BBB00C661C6 /* common_uniform_elim_pass.cpp */; };
-		A94A6A6822B17BBC00C661C6 /* def_use_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680822B17BBB00C661C6 /* def_use_manager.cpp */; };
-		A94A6A6922B17BBC00C661C6 /* def_use_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680822B17BBB00C661C6 /* def_use_manager.cpp */; };
-		A94A6A6A22B17BBC00C661C6 /* strip_reflect_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680922B17BBB00C661C6 /* strip_reflect_info_pass.cpp */; };
-		A94A6A6B22B17BBC00C661C6 /* strip_reflect_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680922B17BBB00C661C6 /* strip_reflect_info_pass.cpp */; };
-		A94A6A6C22B17BBC00C661C6 /* decoration_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680A22B17BBB00C661C6 /* decoration_manager.h */; };
-		A94A6A6D22B17BBC00C661C6 /* decoration_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680A22B17BBB00C661C6 /* decoration_manager.h */; };
-		A94A6A6E22B17BBC00C661C6 /* ccp_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680B22B17BBB00C661C6 /* ccp_pass.cpp */; };
-		A94A6A6F22B17BBC00C661C6 /* ccp_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680B22B17BBB00C661C6 /* ccp_pass.cpp */; };
-		A94A6A7022B17BBC00C661C6 /* process_lines_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680C22B17BBB00C661C6 /* process_lines_pass.h */; };
-		A94A6A7122B17BBC00C661C6 /* process_lines_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680C22B17BBB00C661C6 /* process_lines_pass.h */; };
-		A94A6A7222B17BBC00C661C6 /* local_single_block_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680D22B17BBB00C661C6 /* local_single_block_elim_pass.h */; };
-		A94A6A7322B17BBC00C661C6 /* local_single_block_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680D22B17BBB00C661C6 /* local_single_block_elim_pass.h */; };
-		A94A6A7422B17BBC00C661C6 /* pch_source_opt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680E22B17BBB00C661C6 /* pch_source_opt.cpp */; };
-		A94A6A7522B17BBC00C661C6 /* pch_source_opt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A680E22B17BBB00C661C6 /* pch_source_opt.cpp */; };
-		A94A6A7622B17BBC00C661C6 /* strength_reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680F22B17BBB00C661C6 /* strength_reduction_pass.h */; };
-		A94A6A7722B17BBC00C661C6 /* strength_reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A680F22B17BBB00C661C6 /* strength_reduction_pass.h */; };
-		A94A6A7822B17BBC00C661C6 /* aggressive_dead_code_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681022B17BBB00C661C6 /* aggressive_dead_code_elim_pass.cpp */; };
-		A94A6A7922B17BBC00C661C6 /* aggressive_dead_code_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681022B17BBB00C661C6 /* aggressive_dead_code_elim_pass.cpp */; };
-		A94A6A7A22B17BBC00C661C6 /* eliminate_dead_functions_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681122B17BBB00C661C6 /* eliminate_dead_functions_util.cpp */; };
-		A94A6A7B22B17BBC00C661C6 /* eliminate_dead_functions_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681122B17BBB00C661C6 /* eliminate_dead_functions_util.cpp */; };
-		A94A6A7C22B17BBC00C661C6 /* simplification_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681222B17BBB00C661C6 /* simplification_pass.cpp */; };
-		A94A6A7D22B17BBC00C661C6 /* simplification_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681222B17BBB00C661C6 /* simplification_pass.cpp */; };
-		A94A6A7E22B17BBC00C661C6 /* dead_branch_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681322B17BBB00C661C6 /* dead_branch_elim_pass.cpp */; };
-		A94A6A7F22B17BBC00C661C6 /* dead_branch_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681322B17BBB00C661C6 /* dead_branch_elim_pass.cpp */; };
-		A94A6A8022B17BBC00C661C6 /* flatten_decoration_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681422B17BBB00C661C6 /* flatten_decoration_pass.cpp */; };
-		A94A6A8122B17BBC00C661C6 /* flatten_decoration_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681422B17BBB00C661C6 /* flatten_decoration_pass.cpp */; };
-		A94A6A8222B17BBC00C661C6 /* dead_insert_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681522B17BBB00C661C6 /* dead_insert_elim_pass.h */; };
-		A94A6A8322B17BBC00C661C6 /* dead_insert_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681522B17BBB00C661C6 /* dead_insert_elim_pass.h */; };
-		A94A6A8422B17BBC00C661C6 /* folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681622B17BBB00C661C6 /* folding_rules.cpp */; };
-		A94A6A8522B17BBC00C661C6 /* folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681622B17BBB00C661C6 /* folding_rules.cpp */; };
-		A94A6A8622B17BBC00C661C6 /* freeze_spec_constant_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681722B17BBB00C661C6 /* freeze_spec_constant_value_pass.h */; };
-		A94A6A8722B17BBC00C661C6 /* freeze_spec_constant_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681722B17BBB00C661C6 /* freeze_spec_constant_value_pass.h */; };
-		A94A6A8822B17BBC00C661C6 /* ir_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681822B17BBB00C661C6 /* ir_context.cpp */; };
-		A94A6A8922B17BBC00C661C6 /* ir_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681822B17BBB00C661C6 /* ir_context.cpp */; };
-		A94A6A8A22B17BBC00C661C6 /* instrument_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681922B17BBB00C661C6 /* instrument_pass.h */; };
-		A94A6A8B22B17BBC00C661C6 /* instrument_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681922B17BBB00C661C6 /* instrument_pass.h */; };
-		A94A6A8C22B17BBC00C661C6 /* mem_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681A22B17BBB00C661C6 /* mem_pass.h */; };
-		A94A6A8D22B17BBC00C661C6 /* mem_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681A22B17BBB00C661C6 /* mem_pass.h */; };
-		A94A6A8E22B17BBC00C661C6 /* loop_descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681B22B17BBB00C661C6 /* loop_descriptor.cpp */; };
-		A94A6A8F22B17BBC00C661C6 /* loop_descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681B22B17BBB00C661C6 /* loop_descriptor.cpp */; };
-		A94A6A9022B17BBC00C661C6 /* local_ssa_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681C22B17BBB00C661C6 /* local_ssa_elim_pass.cpp */; };
-		A94A6A9122B17BBC00C661C6 /* local_ssa_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681C22B17BBB00C661C6 /* local_ssa_elim_pass.cpp */; };
-		A94A6A9222B17BBC00C661C6 /* eliminate_dead_members_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681D22B17BBB00C661C6 /* eliminate_dead_members_pass.h */; };
-		A94A6A9322B17BBC00C661C6 /* eliminate_dead_members_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A681D22B17BBB00C661C6 /* eliminate_dead_members_pass.h */; };
-		A94A6A9422B17BBC00C661C6 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681E22B17BBB00C661C6 /* function.cpp */; };
-		A94A6A9522B17BBC00C661C6 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681E22B17BBB00C661C6 /* function.cpp */; };
-		A94A6A9622B17BBC00C661C6 /* instruction_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681F22B17BBB00C661C6 /* instruction_list.cpp */; };
-		A94A6A9722B17BBC00C661C6 /* instruction_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A681F22B17BBB00C661C6 /* instruction_list.cpp */; };
-		A94A6A9822B17BBC00C661C6 /* composite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682022B17BBB00C661C6 /* composite.cpp */; };
-		A94A6A9922B17BBC00C661C6 /* composite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682022B17BBB00C661C6 /* composite.cpp */; };
-		A94A6A9A22B17BBC00C661C6 /* process_lines_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682122B17BBB00C661C6 /* process_lines_pass.cpp */; };
-		A94A6A9B22B17BBC00C661C6 /* process_lines_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682122B17BBB00C661C6 /* process_lines_pass.cpp */; };
-		A94A6A9C22B17BBC00C661C6 /* inline_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682222B17BBB00C661C6 /* inline_pass.h */; };
-		A94A6A9D22B17BBC00C661C6 /* inline_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682222B17BBB00C661C6 /* inline_pass.h */; };
-		A94A6A9E22B17BBC00C661C6 /* loop_dependence.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682322B17BBB00C661C6 /* loop_dependence.h */; };
-		A94A6A9F22B17BBC00C661C6 /* loop_dependence.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682322B17BBB00C661C6 /* loop_dependence.h */; };
-		A94A6AA022B17BBC00C661C6 /* value_number_table.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682422B17BBB00C661C6 /* value_number_table.h */; };
-		A94A6AA122B17BBC00C661C6 /* value_number_table.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682422B17BBB00C661C6 /* value_number_table.h */; };
-		A94A6AA222B17BBC00C661C6 /* flatten_decoration_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682522B17BBB00C661C6 /* flatten_decoration_pass.h */; };
-		A94A6AA322B17BBC00C661C6 /* flatten_decoration_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682522B17BBB00C661C6 /* flatten_decoration_pass.h */; };
-		A94A6AA422B17BBC00C661C6 /* if_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682622B17BBB00C661C6 /* if_conversion.cpp */; };
-		A94A6AA522B17BBC00C661C6 /* if_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682622B17BBB00C661C6 /* if_conversion.cpp */; };
-		A94A6AA622B17BBC00C661C6 /* inline_exhaustive_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682722B17BBB00C661C6 /* inline_exhaustive_pass.h */; };
-		A94A6AA722B17BBC00C661C6 /* inline_exhaustive_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682722B17BBB00C661C6 /* inline_exhaustive_pass.h */; };
-		A94A6AA822B17BBC00C661C6 /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682822B17BBB00C661C6 /* constants.h */; };
-		A94A6AA922B17BBC00C661C6 /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682822B17BBB00C661C6 /* constants.h */; };
-		A94A6AAA22B17BBC00C661C6 /* eliminate_dead_members_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682922B17BBB00C661C6 /* eliminate_dead_members_pass.cpp */; };
-		A94A6AAB22B17BBC00C661C6 /* eliminate_dead_members_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682922B17BBB00C661C6 /* eliminate_dead_members_pass.cpp */; };
-		A94A6AAC22B17BBC00C661C6 /* strength_reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682A22B17BBB00C661C6 /* strength_reduction_pass.cpp */; };
-		A94A6AAD22B17BBC00C661C6 /* strength_reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682A22B17BBB00C661C6 /* strength_reduction_pass.cpp */; };
-		A94A6AAE22B17BBC00C661C6 /* block_merge_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682B22B17BBB00C661C6 /* block_merge_util.cpp */; };
-		A94A6AAF22B17BBC00C661C6 /* block_merge_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682B22B17BBB00C661C6 /* block_merge_util.cpp */; };
-		A94A6AB022B17BBC00C661C6 /* upgrade_memory_model.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682C22B17BBB00C661C6 /* upgrade_memory_model.h */; };
-		A94A6AB122B17BBC00C661C6 /* upgrade_memory_model.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A682C22B17BBB00C661C6 /* upgrade_memory_model.h */; };
-		A94A6AB222B17BBC00C661C6 /* copy_prop_arrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682D22B17BBB00C661C6 /* copy_prop_arrays.cpp */; };
-		A94A6AB322B17BBC00C661C6 /* copy_prop_arrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682D22B17BBB00C661C6 /* copy_prop_arrays.cpp */; };
-		A94A6AB422B17BBC00C661C6 /* pass_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682E22B17BBB00C661C6 /* pass_manager.cpp */; };
-		A94A6AB522B17BBC00C661C6 /* pass_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682E22B17BBB00C661C6 /* pass_manager.cpp */; };
-		A94A6AB622B17BBC00C661C6 /* inline_exhaustive_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682F22B17BBB00C661C6 /* inline_exhaustive_pass.cpp */; };
-		A94A6AB722B17BBC00C661C6 /* inline_exhaustive_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A682F22B17BBB00C661C6 /* inline_exhaustive_pass.cpp */; };
-		A94A6AB822B17BBC00C661C6 /* loop_fission.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683022B17BBB00C661C6 /* loop_fission.h */; };
-		A94A6AB922B17BBC00C661C6 /* loop_fission.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683022B17BBB00C661C6 /* loop_fission.h */; };
-		A94A6ABA22B17BBC00C661C6 /* workaround1209.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683122B17BBB00C661C6 /* workaround1209.h */; };
-		A94A6ABB22B17BBC00C661C6 /* workaround1209.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683122B17BBB00C661C6 /* workaround1209.h */; };
-		A94A6ABC22B17BBC00C661C6 /* loop_fusion_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683222B17BBB00C661C6 /* loop_fusion_pass.cpp */; };
-		A94A6ABD22B17BBC00C661C6 /* loop_fusion_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683222B17BBB00C661C6 /* loop_fusion_pass.cpp */; };
-		A94A6ABE22B17BBC00C661C6 /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683322B17BBB00C661C6 /* log.h */; };
-		A94A6ABF22B17BBC00C661C6 /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683322B17BBB00C661C6 /* log.h */; };
-		A94A6AC022B17BBC00C661C6 /* split_invalid_unreachable_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683422B17BBB00C661C6 /* split_invalid_unreachable_pass.h */; };
-		A94A6AC122B17BBC00C661C6 /* split_invalid_unreachable_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683422B17BBB00C661C6 /* split_invalid_unreachable_pass.h */; };
-		A94A6AC222B17BBC00C661C6 /* copy_prop_arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683522B17BBB00C661C6 /* copy_prop_arrays.h */; };
-		A94A6AC322B17BBC00C661C6 /* copy_prop_arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683522B17BBB00C661C6 /* copy_prop_arrays.h */; };
-		A94A6AC422B17BBC00C661C6 /* eliminate_dead_constant_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683622B17BBB00C661C6 /* eliminate_dead_constant_pass.h */; };
-		A94A6AC522B17BBC00C661C6 /* eliminate_dead_constant_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683622B17BBB00C661C6 /* eliminate_dead_constant_pass.h */; };
-		A94A6AC622B17BBC00C661C6 /* dead_insert_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683722B17BBB00C661C6 /* dead_insert_elim_pass.cpp */; };
-		A94A6AC722B17BBC00C661C6 /* dead_insert_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683722B17BBB00C661C6 /* dead_insert_elim_pass.cpp */; };
-		A94A6AC822B17BBC00C661C6 /* ssa_rewrite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683822B17BBB00C661C6 /* ssa_rewrite_pass.h */; };
-		A94A6AC922B17BBC00C661C6 /* ssa_rewrite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683822B17BBB00C661C6 /* ssa_rewrite_pass.h */; };
-		A94A6ACA22B17BBC00C661C6 /* scalar_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683922B17BBB00C661C6 /* scalar_analysis.cpp */; };
-		A94A6ACB22B17BBC00C661C6 /* scalar_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683922B17BBB00C661C6 /* scalar_analysis.cpp */; };
-		A94A6ACC22B17BBC00C661C6 /* dead_variable_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683A22B17BBB00C661C6 /* dead_variable_elimination.h */; };
-		A94A6ACD22B17BBC00C661C6 /* dead_variable_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683A22B17BBB00C661C6 /* dead_variable_elimination.h */; };
-		A94A6ACE22B17BBC00C661C6 /* block_merge_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683B22B17BBB00C661C6 /* block_merge_pass.cpp */; };
-		A94A6ACF22B17BBC00C661C6 /* block_merge_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A683B22B17BBB00C661C6 /* block_merge_pass.cpp */; };
-		A94A6AD022B17BBC00C661C6 /* dominator_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683C22B17BBB00C661C6 /* dominator_analysis.h */; };
-		A94A6AD122B17BBC00C661C6 /* dominator_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683C22B17BBB00C661C6 /* dominator_analysis.h */; };
-		A94A6AD222B17BBC00C661C6 /* pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683D22B17BBB00C661C6 /* pass.h */; };
-		A94A6AD322B17BBC00C661C6 /* pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683D22B17BBB00C661C6 /* pass.h */; };
-		A94A6AD422B17BBC00C661C6 /* folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683E22B17BBB00C661C6 /* folding_rules.h */; };
-		A94A6AD522B17BBC00C661C6 /* folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683E22B17BBB00C661C6 /* folding_rules.h */; };
-		A94A6AD622B17BBC00C661C6 /* eliminate_dead_functions_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683F22B17BBB00C661C6 /* eliminate_dead_functions_pass.h */; };
-		A94A6AD722B17BBC00C661C6 /* eliminate_dead_functions_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A683F22B17BBB00C661C6 /* eliminate_dead_functions_pass.h */; };
-		A94A6AD822B17BBC00C661C6 /* common_uniform_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684022B17BBB00C661C6 /* common_uniform_elim_pass.h */; };
-		A94A6AD922B17BBC00C661C6 /* common_uniform_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684022B17BBB00C661C6 /* common_uniform_elim_pass.h */; };
-		A94A6ADA22B17BBC00C661C6 /* eliminate_dead_functions_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684122B17BBB00C661C6 /* eliminate_dead_functions_util.h */; };
-		A94A6ADB22B17BBC00C661C6 /* eliminate_dead_functions_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684122B17BBB00C661C6 /* eliminate_dead_functions_util.h */; };
-		A94A6ADC22B17BBC00C661C6 /* fold.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684222B17BBB00C661C6 /* fold.h */; };
-		A94A6ADD22B17BBC00C661C6 /* fold.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684222B17BBB00C661C6 /* fold.h */; };
-		A94A6ADE22B17BBC00C661C6 /* local_single_store_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684322B17BBB00C661C6 /* local_single_store_elim_pass.cpp */; };
-		A94A6ADF22B17BBC00C661C6 /* local_single_store_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684322B17BBB00C661C6 /* local_single_store_elim_pass.cpp */; };
-		A94A6AE022B17BBC00C661C6 /* dead_branch_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684422B17BBB00C661C6 /* dead_branch_elim_pass.h */; };
-		A94A6AE122B17BBC00C661C6 /* dead_branch_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684422B17BBB00C661C6 /* dead_branch_elim_pass.h */; };
-		A94A6AE222B17BBC00C661C6 /* private_to_local_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684522B17BBB00C661C6 /* private_to_local_pass.cpp */; };
-		A94A6AE322B17BBC00C661C6 /* private_to_local_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684522B17BBB00C661C6 /* private_to_local_pass.cpp */; };
-		A94A6AE422B17BBC00C661C6 /* scalar_analysis_nodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684622B17BBB00C661C6 /* scalar_analysis_nodes.h */; };
-		A94A6AE522B17BBC00C661C6 /* scalar_analysis_nodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684622B17BBB00C661C6 /* scalar_analysis_nodes.h */; };
-		A94A6AE622B17BBC00C661C6 /* propagator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684722B17BBB00C661C6 /* propagator.cpp */; };
-		A94A6AE722B17BBC00C661C6 /* propagator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684722B17BBB00C661C6 /* propagator.cpp */; };
-		A94A6AE822B17BBC00C661C6 /* fix_storage_class.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684822B17BBB00C661C6 /* fix_storage_class.h */; };
-		A94A6AE922B17BBC00C661C6 /* fix_storage_class.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684822B17BBB00C661C6 /* fix_storage_class.h */; };
-		A94A6AEA22B17BBC00C661C6 /* loop_dependence_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684922B17BBB00C661C6 /* loop_dependence_helpers.cpp */; };
-		A94A6AEB22B17BBC00C661C6 /* loop_dependence_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684922B17BBB00C661C6 /* loop_dependence_helpers.cpp */; };
-		A94A6AEC22B17BBC00C661C6 /* set_spec_constant_default_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684A22B17BBB00C661C6 /* set_spec_constant_default_value_pass.cpp */; };
-		A94A6AED22B17BBC00C661C6 /* set_spec_constant_default_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684A22B17BBB00C661C6 /* set_spec_constant_default_value_pass.cpp */; };
-		A94A6AEE22B17BBC00C661C6 /* passes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684B22B17BBB00C661C6 /* passes.h */; };
-		A94A6AEF22B17BBC00C661C6 /* passes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684B22B17BBB00C661C6 /* passes.h */; };
-		A94A6AF022B17BBC00C661C6 /* fold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684C22B17BBB00C661C6 /* fold.cpp */; };
-		A94A6AF122B17BBC00C661C6 /* fold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684C22B17BBB00C661C6 /* fold.cpp */; };
-		A94A6AF222B17BBC00C661C6 /* strip_reflect_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684D22B17BBB00C661C6 /* strip_reflect_info_pass.h */; };
-		A94A6AF322B17BBC00C661C6 /* strip_reflect_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684D22B17BBB00C661C6 /* strip_reflect_info_pass.h */; };
-		A94A6AF422B17BBC00C661C6 /* scalar_replacement_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684E22B17BBB00C661C6 /* scalar_replacement_pass.cpp */; };
-		A94A6AF522B17BBC00C661C6 /* scalar_replacement_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A684E22B17BBB00C661C6 /* scalar_replacement_pass.cpp */; };
-		A94A6AF622B17BBC00C661C6 /* simplification_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684F22B17BBB00C661C6 /* simplification_pass.h */; };
-		A94A6AF722B17BBC00C661C6 /* simplification_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A684F22B17BBB00C661C6 /* simplification_pass.h */; };
-		A94A6AF822B17BBC00C661C6 /* remove_duplicates_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685022B17BBB00C661C6 /* remove_duplicates_pass.h */; };
-		A94A6AF922B17BBC00C661C6 /* remove_duplicates_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685022B17BBB00C661C6 /* remove_duplicates_pass.h */; };
-		A94A6AFA22B17BBC00C661C6 /* redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685122B17BBB00C661C6 /* redundancy_elimination.cpp */; };
-		A94A6AFB22B17BBC00C661C6 /* redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685122B17BBB00C661C6 /* redundancy_elimination.cpp */; };
-		A94A6AFC22B17BBC00C661C6 /* reflect.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685222B17BBB00C661C6 /* reflect.h */; };
-		A94A6AFD22B17BBC00C661C6 /* reflect.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685222B17BBB00C661C6 /* reflect.h */; };
-		A94A6AFE22B17BBC00C661C6 /* workaround1209.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685322B17BBB00C661C6 /* workaround1209.cpp */; };
-		A94A6AFF22B17BBC00C661C6 /* workaround1209.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685322B17BBB00C661C6 /* workaround1209.cpp */; };
-		A94A6B0022B17BBC00C661C6 /* null_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685422B17BBB00C661C6 /* null_pass.h */; };
-		A94A6B0122B17BBC00C661C6 /* null_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685422B17BBB00C661C6 /* null_pass.h */; };
-		A94A6B0222B17BBC00C661C6 /* const_folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685522B17BBB00C661C6 /* const_folding_rules.h */; };
-		A94A6B0322B17BBC00C661C6 /* const_folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685522B17BBB00C661C6 /* const_folding_rules.h */; };
-		A94A6B0422B17BBC00C661C6 /* scalar_replacement_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685622B17BBB00C661C6 /* scalar_replacement_pass.h */; };
-		A94A6B0522B17BBC00C661C6 /* scalar_replacement_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685622B17BBB00C661C6 /* scalar_replacement_pass.h */; };
-		A94A6B0622B17BBC00C661C6 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685722B17BBB00C661C6 /* instruction.cpp */; };
-		A94A6B0722B17BBC00C661C6 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685722B17BBB00C661C6 /* instruction.cpp */; };
-		A94A6B0822B17BBC00C661C6 /* pch_source_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685822B17BBB00C661C6 /* pch_source_opt.h */; };
-		A94A6B0922B17BBC00C661C6 /* pch_source_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685822B17BBB00C661C6 /* pch_source_opt.h */; };
-		A94A6B0A22B17BBC00C661C6 /* reduce_load_size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685922B17BBB00C661C6 /* reduce_load_size.cpp */; };
-		A94A6B0B22B17BBC00C661C6 /* reduce_load_size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685922B17BBB00C661C6 /* reduce_load_size.cpp */; };
-		A94A6B0C22B17BBC00C661C6 /* redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685A22B17BBB00C661C6 /* redundancy_elimination.h */; };
-		A94A6B0D22B17BBC00C661C6 /* redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685A22B17BBB00C661C6 /* redundancy_elimination.h */; };
-		A94A6B0E22B17BBC00C661C6 /* fix_storage_class.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685B22B17BBB00C661C6 /* fix_storage_class.cpp */; };
-		A94A6B0F22B17BBC00C661C6 /* fix_storage_class.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685B22B17BBB00C661C6 /* fix_storage_class.cpp */; };
-		A94A6B1022B17BBC00C661C6 /* value_number_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685C22B17BBB00C661C6 /* value_number_table.cpp */; };
-		A94A6B1122B17BBC00C661C6 /* value_number_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685C22B17BBB00C661C6 /* value_number_table.cpp */; };
-		A94A6B1222B17BBC00C661C6 /* local_ssa_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685D22B17BBB00C661C6 /* local_ssa_elim_pass.h */; };
-		A94A6B1322B17BBC00C661C6 /* local_ssa_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A685D22B17BBB00C661C6 /* local_ssa_elim_pass.h */; };
-		A94A6B1422B17BBC00C661C6 /* inline_opaque_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685E22B17BBB00C661C6 /* inline_opaque_pass.cpp */; };
-		A94A6B1522B17BBC00C661C6 /* inline_opaque_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685E22B17BBB00C661C6 /* inline_opaque_pass.cpp */; };
-		A94A6B1622B17BBC00C661C6 /* replace_invalid_opc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685F22B17BBB00C661C6 /* replace_invalid_opc.cpp */; };
-		A94A6B1722B17BBC00C661C6 /* replace_invalid_opc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A685F22B17BBB00C661C6 /* replace_invalid_opc.cpp */; };
-		A94A6B1822B17BBC00C661C6 /* loop_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686022B17BBB00C661C6 /* loop_utils.h */; };
-		A94A6B1922B17BBC00C661C6 /* loop_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686022B17BBB00C661C6 /* loop_utils.h */; };
-		A94A6B1A22B17BBC00C661C6 /* module.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686122B17BBB00C661C6 /* module.h */; };
-		A94A6B1B22B17BBC00C661C6 /* module.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686122B17BBB00C661C6 /* module.h */; };
-		A94A6B1C22B17BBC00C661C6 /* dominator_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A686222B17BBB00C661C6 /* dominator_analysis.cpp */; };
-		A94A6B1D22B17BBC00C661C6 /* dominator_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A686222B17BBB00C661C6 /* dominator_analysis.cpp */; };
-		A94A6B1E22B17BBC00C661C6 /* decompose_initialized_variables_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A686322B17BBB00C661C6 /* decompose_initialized_variables_pass.cpp */; };
-		A94A6B1F22B17BBC00C661C6 /* decompose_initialized_variables_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A686322B17BBB00C661C6 /* decompose_initialized_variables_pass.cpp */; };
-		A94A6B2022B17BBC00C661C6 /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686422B17BBB00C661C6 /* ir_builder.h */; };
-		A94A6B2122B17BBC00C661C6 /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686422B17BBB00C661C6 /* ir_builder.h */; };
-		A94A6B2222B17BBC00C661C6 /* loop_unswitch_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686522B17BBB00C661C6 /* loop_unswitch_pass.h */; };
-		A94A6B2322B17BBC00C661C6 /* loop_unswitch_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686522B17BBB00C661C6 /* loop_unswitch_pass.h */; };
-		A94A6B2422B17BBC00C661C6 /* cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686622B17BBB00C661C6 /* cfg.h */; };
-		A94A6B2522B17BBC00C661C6 /* cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686622B17BBB00C661C6 /* cfg.h */; };
-		A94A6B2622B17BBC00C661C6 /* code_sink.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686722B17BBB00C661C6 /* code_sink.h */; };
-		A94A6B2722B17BBC00C661C6 /* code_sink.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686722B17BBB00C661C6 /* code_sink.h */; };
-		A94A6B2822B17BBC00C661C6 /* loop_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686822B17BBB00C661C6 /* loop_descriptor.h */; };
-		A94A6B2922B17BBC00C661C6 /* loop_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686822B17BBB00C661C6 /* loop_descriptor.h */; };
-		A94A6B2A22B17BBC00C661C6 /* generate_webgpu_initializers_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686922B17BBB00C661C6 /* generate_webgpu_initializers_pass.h */; };
-		A94A6B2B22B17BBC00C661C6 /* generate_webgpu_initializers_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686922B17BBB00C661C6 /* generate_webgpu_initializers_pass.h */; };
-		A94A6B2C22B17BBC00C661C6 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686A22B17BBB00C661C6 /* instruction.h */; };
-		A94A6B2D22B17BBC00C661C6 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686A22B17BBB00C661C6 /* instruction.h */; };
-		A94A6B2E22B17BBC00C661C6 /* aggressive_dead_code_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686B22B17BBB00C661C6 /* aggressive_dead_code_elim_pass.h */; };
-		A94A6B2F22B17BBC00C661C6 /* aggressive_dead_code_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686B22B17BBB00C661C6 /* aggressive_dead_code_elim_pass.h */; };
-		A94A6B3022B17BBC00C661C6 /* struct_cfg_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A686C22B17BBB00C661C6 /* struct_cfg_analysis.cpp */; };
-		A94A6B3122B17BBC00C661C6 /* struct_cfg_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A686C22B17BBB00C661C6 /* struct_cfg_analysis.cpp */; };
-		A94A6B3222B17BBC00C661C6 /* vector_dce.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686D22B17BBB00C661C6 /* vector_dce.h */; };
-		A94A6B3322B17BBC00C661C6 /* vector_dce.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686D22B17BBB00C661C6 /* vector_dce.h */; };
-		A94A6B3422B17BBC00C661C6 /* combine_access_chains.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686E22B17BBB00C661C6 /* combine_access_chains.h */; };
-		A94A6B3522B17BBC00C661C6 /* combine_access_chains.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686E22B17BBB00C661C6 /* combine_access_chains.h */; };
-		A94A6B3622B17BBC00C661C6 /* pass_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686F22B17BBB00C661C6 /* pass_manager.h */; };
-		A94A6B3722B17BBC00C661C6 /* pass_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A686F22B17BBB00C661C6 /* pass_manager.h */; };
-		A94A6B3822B17BBC00C661C6 /* local_access_chain_convert_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687022B17BBB00C661C6 /* local_access_chain_convert_pass.cpp */; };
-		A94A6B3922B17BBC00C661C6 /* local_access_chain_convert_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687022B17BBB00C661C6 /* local_access_chain_convert_pass.cpp */; };
-		A94A6B3A22B17BBC00C661C6 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687122B17BBB00C661C6 /* basic_block.cpp */; };
-		A94A6B3B22B17BBC00C661C6 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687122B17BBB00C661C6 /* basic_block.cpp */; };
-		A94A6B3C22B17BBC00C661C6 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687222B17BBB00C661C6 /* iterator.h */; };
-		A94A6B3D22B17BBC00C661C6 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687222B17BBB00C661C6 /* iterator.h */; };
-		A94A6B3E22B17BBC00C661C6 /* licm_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687322B17BBB00C661C6 /* licm_pass.h */; };
-		A94A6B3F22B17BBC00C661C6 /* licm_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687322B17BBB00C661C6 /* licm_pass.h */; };
-		A94A6B4022B17BBC00C661C6 /* build_module.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687422B17BBB00C661C6 /* build_module.h */; };
-		A94A6B4122B17BBC00C661C6 /* build_module.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687422B17BBB00C661C6 /* build_module.h */; };
-		A94A6B4222B17BBC00C661C6 /* ccp_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687522B17BBB00C661C6 /* ccp_pass.h */; };
-		A94A6B4322B17BBC00C661C6 /* ccp_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687522B17BBB00C661C6 /* ccp_pass.h */; };
-		A94A6B4422B17BBC00C661C6 /* decompose_initialized_variables_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687622B17BBB00C661C6 /* decompose_initialized_variables_pass.h */; };
-		A94A6B4522B17BBC00C661C6 /* decompose_initialized_variables_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687622B17BBB00C661C6 /* decompose_initialized_variables_pass.h */; };
-		A94A6B4622B17BBC00C661C6 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687722B17BBB00C661C6 /* function.h */; };
-		A94A6B4722B17BBC00C661C6 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687722B17BBB00C661C6 /* function.h */; };
-		A94A6B4822B17BBC00C661C6 /* loop_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687822B17BBB00C661C6 /* loop_fusion.cpp */; };
-		A94A6B4922B17BBC00C661C6 /* loop_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687822B17BBB00C661C6 /* loop_fusion.cpp */; };
-		A94A6B4A22B17BBC00C661C6 /* upgrade_memory_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687922B17BBB00C661C6 /* upgrade_memory_model.cpp */; };
-		A94A6B4B22B17BBC00C661C6 /* upgrade_memory_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687922B17BBB00C661C6 /* upgrade_memory_model.cpp */; };
-		A94A6B4C22B17BBC00C661C6 /* feature_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687A22B17BBB00C661C6 /* feature_manager.h */; };
-		A94A6B4D22B17BBC00C661C6 /* feature_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687A22B17BBB00C661C6 /* feature_manager.h */; };
-		A94A6B4E22B17BBC00C661C6 /* inst_bindless_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687B22B17BBB00C661C6 /* inst_bindless_check_pass.h */; };
-		A94A6B4F22B17BBC00C661C6 /* inst_bindless_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687B22B17BBB00C661C6 /* inst_bindless_check_pass.h */; };
-		A94A6B5022B17BBC00C661C6 /* scalar_analysis_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687C22B17BBB00C661C6 /* scalar_analysis_simplification.cpp */; };
-		A94A6B5122B17BBC00C661C6 /* scalar_analysis_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687C22B17BBB00C661C6 /* scalar_analysis_simplification.cpp */; };
-		A94A6B5222B17BBC00C661C6 /* set_spec_constant_default_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687D22B17BBB00C661C6 /* set_spec_constant_default_value_pass.h */; };
-		A94A6B5322B17BBC00C661C6 /* set_spec_constant_default_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687D22B17BBB00C661C6 /* set_spec_constant_default_value_pass.h */; };
-		A94A6B5422B17BBC00C661C6 /* dominator_tree.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687E22B17BBB00C661C6 /* dominator_tree.h */; };
-		A94A6B5522B17BBC00C661C6 /* dominator_tree.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A687E22B17BBB00C661C6 /* dominator_tree.h */; };
-		A94A6B5622B17BBC00C661C6 /* legalize_vector_shuffle_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687F22B17BBB00C661C6 /* legalize_vector_shuffle_pass.cpp */; };
-		A94A6B5722B17BBC00C661C6 /* legalize_vector_shuffle_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A687F22B17BBB00C661C6 /* legalize_vector_shuffle_pass.cpp */; };
-		A94A6B5822B17BBC00C661C6 /* type_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A688022B17BBB00C661C6 /* type_manager.h */; };
-		A94A6B5922B17BBC00C661C6 /* type_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A688022B17BBB00C661C6 /* type_manager.h */; };
-		A94A6B5A22B17BBC00C661C6 /* compact_ids_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A688122B17BBB00C661C6 /* compact_ids_pass.cpp */; };
-		A94A6B5B22B17BBC00C661C6 /* compact_ids_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A688122B17BBB00C661C6 /* compact_ids_pass.cpp */; };
-		A94A6B5C22B17BBC00C661C6 /* loop_peeling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A688222B17BBB00C661C6 /* loop_peeling.cpp */; };
-		A94A6B5D22B17BBC00C661C6 /* loop_peeling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A688222B17BBB00C661C6 /* loop_peeling.cpp */; };
-		A94A6B5E22B17BBC00C661C6 /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A688322B17BBB00C661C6 /* table.h */; };
-		A94A6B5F22B17BBC00C661C6 /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A688322B17BBB00C661C6 /* table.h */; };
-		A94A6BB022B17BBC00C661C6 /* ext_inst.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68AF22B17BBB00C661C6 /* ext_inst.h */; };
-		A94A6BB122B17BBC00C661C6 /* ext_inst.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68AF22B17BBB00C661C6 /* ext_inst.h */; };
-		A94A6BB222B17BBC00C661C6 /* diagnostic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B022B17BBB00C661C6 /* diagnostic.cpp */; };
-		A94A6BB322B17BBC00C661C6 /* diagnostic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B022B17BBB00C661C6 /* diagnostic.cpp */; };
-		A94A6BB422B17BBC00C661C6 /* latest_version_spirv_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B122B17BBB00C661C6 /* latest_version_spirv_header.h */; };
-		A94A6BB522B17BBC00C661C6 /* latest_version_spirv_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B122B17BBB00C661C6 /* latest_version_spirv_header.h */; };
-		A94A6BB622B17BBC00C661C6 /* libspirv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B222B17BBB00C661C6 /* libspirv.cpp */; };
-		A94A6BB722B17BBC00C661C6 /* libspirv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B222B17BBB00C661C6 /* libspirv.cpp */; };
-		A94A6BB822B17BBC00C661C6 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B322B17BBB00C661C6 /* instruction.h */; };
-		A94A6BB922B17BBC00C661C6 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B322B17BBB00C661C6 /* instruction.h */; };
-		A94A6BBA22B17BBC00C661C6 /* spirv_optimizer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B422B17BBB00C661C6 /* spirv_optimizer_options.h */; };
-		A94A6BBB22B17BBC00C661C6 /* spirv_optimizer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B422B17BBB00C661C6 /* spirv_optimizer_options.h */; };
-		A94A6BBC22B17BBC00C661C6 /* opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B522B17BBB00C661C6 /* opcode.h */; };
-		A94A6BBD22B17BBC00C661C6 /* opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B522B17BBB00C661C6 /* opcode.h */; };
-		A94A6BBE22B17BBC00C661C6 /* operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B622B17BBB00C661C6 /* operand.cpp */; };
-		A94A6BBF22B17BBC00C661C6 /* operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B622B17BBB00C661C6 /* operand.cpp */; };
-		A94A6BC022B17BBC00C661C6 /* latest_version_glsl_std_450_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B722B17BBB00C661C6 /* latest_version_glsl_std_450_header.h */; };
-		A94A6BC122B17BBC00C661C6 /* latest_version_glsl_std_450_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B722B17BBB00C661C6 /* latest_version_glsl_std_450_header.h */; };
-		A94A6BC222B17BBC00C661C6 /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B822B17BBB00C661C6 /* extensions.h */; };
-		A94A6BC322B17BBC00C661C6 /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68B822B17BBB00C661C6 /* extensions.h */; };
-		A94A6BC422B17BBC00C661C6 /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B922B17BBB00C661C6 /* disassemble.cpp */; };
-		A94A6BC522B17BBC00C661C6 /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68B922B17BBB00C661C6 /* disassemble.cpp */; };
-		A94A6BC622B17BBC00C661C6 /* binary.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68BA22B17BBB00C661C6 /* binary.h */; };
-		A94A6BC722B17BBC00C661C6 /* binary.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68BA22B17BBB00C661C6 /* binary.h */; };
-		A94A6BC822B17BBC00C661C6 /* text_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BB22B17BBB00C661C6 /* text_handler.cpp */; };
-		A94A6BC922B17BBC00C661C6 /* text_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BB22B17BBB00C661C6 /* text_handler.cpp */; };
-		A94A6BCA22B17BBC00C661C6 /* validate_annotation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BD22B17BBB00C661C6 /* validate_annotation.cpp */; };
-		A94A6BCB22B17BBC00C661C6 /* validate_annotation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BD22B17BBB00C661C6 /* validate_annotation.cpp */; };
-		A94A6BCC22B17BBC00C661C6 /* validate_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BE22B17BBB00C661C6 /* validate_misc.cpp */; };
-		A94A6BCD22B17BBC00C661C6 /* validate_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BE22B17BBB00C661C6 /* validate_misc.cpp */; };
-		A94A6BCE22B17BBC00C661C6 /* validate_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BF22B17BBB00C661C6 /* validate_cfg.cpp */; };
-		A94A6BCF22B17BBC00C661C6 /* validate_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68BF22B17BBB00C661C6 /* validate_cfg.cpp */; };
-		A94A6BD022B17BBC00C661C6 /* validate_capability.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C022B17BBB00C661C6 /* validate_capability.cpp */; };
-		A94A6BD122B17BBC00C661C6 /* validate_capability.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C022B17BBB00C661C6 /* validate_capability.cpp */; };
-		A94A6BD222B17BBC00C661C6 /* construct.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68C122B17BBB00C661C6 /* construct.h */; };
-		A94A6BD322B17BBC00C661C6 /* construct.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68C122B17BBB00C661C6 /* construct.h */; };
-		A94A6BD422B17BBC00C661C6 /* validate_barriers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C222B17BBB00C661C6 /* validate_barriers.cpp */; };
-		A94A6BD522B17BBC00C661C6 /* validate_barriers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C222B17BBB00C661C6 /* validate_barriers.cpp */; };
-		A94A6BD622B17BBC00C661C6 /* validate_non_uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C322B17BBB00C661C6 /* validate_non_uniform.cpp */; };
-		A94A6BD722B17BBC00C661C6 /* validate_non_uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C322B17BBB00C661C6 /* validate_non_uniform.cpp */; };
-		A94A6BD822B17BBC00C661C6 /* validate_scopes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C422B17BBB00C661C6 /* validate_scopes.cpp */; };
-		A94A6BD922B17BBC00C661C6 /* validate_scopes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C422B17BBB00C661C6 /* validate_scopes.cpp */; };
-		A94A6BDA22B17BBC00C661C6 /* validate_atomics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C522B17BBB00C661C6 /* validate_atomics.cpp */; };
-		A94A6BDB22B17BBC00C661C6 /* validate_atomics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C522B17BBB00C661C6 /* validate_atomics.cpp */; };
-		A94A6BDC22B17BBC00C661C6 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68C622B17BBB00C661C6 /* basic_block.h */; };
-		A94A6BDD22B17BBC00C661C6 /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68C622B17BBB00C661C6 /* basic_block.h */; };
-		A94A6BDE22B17BBC00C661C6 /* validate_instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C722B17BBB00C661C6 /* validate_instruction.cpp */; };
-		A94A6BDF22B17BBC00C661C6 /* validate_instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C722B17BBB00C661C6 /* validate_instruction.cpp */; };
-		A94A6BE022B17BBC00C661C6 /* validate_decorations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C822B17BBB00C661C6 /* validate_decorations.cpp */; };
-		A94A6BE122B17BBC00C661C6 /* validate_decorations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C822B17BBB00C661C6 /* validate_decorations.cpp */; };
-		A94A6BE222B17BBC00C661C6 /* validate_debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C922B17BBB00C661C6 /* validate_debug.cpp */; };
-		A94A6BE322B17BBC00C661C6 /* validate_debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68C922B17BBB00C661C6 /* validate_debug.cpp */; };
-		A94A6BE422B17BBC00C661C6 /* validate_builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CA22B17BBB00C661C6 /* validate_builtins.cpp */; };
-		A94A6BE522B17BBC00C661C6 /* validate_builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CA22B17BBB00C661C6 /* validate_builtins.cpp */; };
-		A94A6BE622B17BBC00C661C6 /* validate_interfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CB22B17BBB00C661C6 /* validate_interfaces.cpp */; };
-		A94A6BE722B17BBC00C661C6 /* validate_interfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CB22B17BBB00C661C6 /* validate_interfaces.cpp */; };
-		A94A6BE822B17BBC00C661C6 /* validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CC22B17BBB00C661C6 /* validate.cpp */; };
-		A94A6BE922B17BBC00C661C6 /* validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CC22B17BBB00C661C6 /* validate.cpp */; };
-		A94A6BEA22B17BBC00C661C6 /* validation_state.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68CD22B17BBB00C661C6 /* validation_state.h */; };
-		A94A6BEB22B17BBC00C661C6 /* validation_state.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68CD22B17BBB00C661C6 /* validation_state.h */; };
-		A94A6BEC22B17BBD00C661C6 /* validate_constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CE22B17BBB00C661C6 /* validate_constants.cpp */; };
-		A94A6BED22B17BBD00C661C6 /* validate_constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CE22B17BBB00C661C6 /* validate_constants.cpp */; };
-		A94A6BEE22B17BBD00C661C6 /* validate_bitwise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CF22B17BBB00C661C6 /* validate_bitwise.cpp */; };
-		A94A6BEF22B17BBD00C661C6 /* validate_bitwise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68CF22B17BBB00C661C6 /* validate_bitwise.cpp */; };
-		A94A6BF022B17BBD00C661C6 /* validate_extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D022B17BBB00C661C6 /* validate_extensions.cpp */; };
-		A94A6BF122B17BBD00C661C6 /* validate_extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D022B17BBB00C661C6 /* validate_extensions.cpp */; };
-		A94A6BF222B17BBD00C661C6 /* construct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D122B17BBB00C661C6 /* construct.cpp */; };
-		A94A6BF322B17BBD00C661C6 /* construct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D122B17BBB00C661C6 /* construct.cpp */; };
-		A94A6BF422B17BBD00C661C6 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D222B17BBB00C661C6 /* function.cpp */; };
-		A94A6BF522B17BBD00C661C6 /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D222B17BBB00C661C6 /* function.cpp */; };
-		A94A6BF622B17BBD00C661C6 /* validate.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68D322B17BBB00C661C6 /* validate.h */; };
-		A94A6BF722B17BBD00C661C6 /* validate.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68D322B17BBB00C661C6 /* validate.h */; };
-		A94A6BF822B17BBD00C661C6 /* validate_adjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D422B17BBB00C661C6 /* validate_adjacency.cpp */; };
-		A94A6BF922B17BBD00C661C6 /* validate_adjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D422B17BBB00C661C6 /* validate_adjacency.cpp */; };
-		A94A6BFA22B17BBD00C661C6 /* validate_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D522B17BBB00C661C6 /* validate_conversion.cpp */; };
-		A94A6BFB22B17BBD00C661C6 /* validate_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D522B17BBB00C661C6 /* validate_conversion.cpp */; };
-		A94A6BFC22B17BBD00C661C6 /* validate_datarules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D622B17BBB00C661C6 /* validate_datarules.cpp */; };
-		A94A6BFD22B17BBD00C661C6 /* validate_datarules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D622B17BBB00C661C6 /* validate_datarules.cpp */; };
-		A94A6BFE22B17BBD00C661C6 /* validate_scopes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68D722B17BBB00C661C6 /* validate_scopes.h */; };
-		A94A6BFF22B17BBD00C661C6 /* validate_scopes.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68D722B17BBB00C661C6 /* validate_scopes.h */; };
-		A94A6C0022B17BBD00C661C6 /* validate_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D822B17BBB00C661C6 /* validate_id.cpp */; };
-		A94A6C0122B17BBD00C661C6 /* validate_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68D822B17BBB00C661C6 /* validate_id.cpp */; };
-		A94A6C0222B17BBD00C661C6 /* validate_memory_semantics.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68D922B17BBB00C661C6 /* validate_memory_semantics.h */; };
-		A94A6C0322B17BBD00C661C6 /* validate_memory_semantics.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68D922B17BBB00C661C6 /* validate_memory_semantics.h */; };
-		A94A6C0422B17BBD00C661C6 /* validate_arithmetics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DA22B17BBB00C661C6 /* validate_arithmetics.cpp */; };
-		A94A6C0522B17BBD00C661C6 /* validate_arithmetics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DA22B17BBB00C661C6 /* validate_arithmetics.cpp */; };
-		A94A6C0622B17BBD00C661C6 /* validate_mode_setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DB22B17BBB00C661C6 /* validate_mode_setting.cpp */; };
-		A94A6C0722B17BBD00C661C6 /* validate_mode_setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DB22B17BBB00C661C6 /* validate_mode_setting.cpp */; };
-		A94A6C0822B17BBD00C661C6 /* validate_memory_semantics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DC22B17BBB00C661C6 /* validate_memory_semantics.cpp */; };
-		A94A6C0922B17BBD00C661C6 /* validate_memory_semantics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DC22B17BBB00C661C6 /* validate_memory_semantics.cpp */; };
-		A94A6C0A22B17BBD00C661C6 /* validate_logicals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DD22B17BBB00C661C6 /* validate_logicals.cpp */; };
-		A94A6C0B22B17BBD00C661C6 /* validate_logicals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DD22B17BBB00C661C6 /* validate_logicals.cpp */; };
-		A94A6C0C22B17BBD00C661C6 /* validate_derivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DE22B17BBB00C661C6 /* validate_derivatives.cpp */; };
-		A94A6C0D22B17BBD00C661C6 /* validate_derivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DE22B17BBB00C661C6 /* validate_derivatives.cpp */; };
-		A94A6C0E22B17BBD00C661C6 /* validate_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DF22B17BBB00C661C6 /* validate_memory.cpp */; };
-		A94A6C0F22B17BBD00C661C6 /* validate_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68DF22B17BBB00C661C6 /* validate_memory.cpp */; };
-		A94A6C1022B17BBD00C661C6 /* validate_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E022B17BBB00C661C6 /* validate_image.cpp */; };
-		A94A6C1122B17BBD00C661C6 /* validate_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E022B17BBB00C661C6 /* validate_image.cpp */; };
-		A94A6C1222B17BBD00C661C6 /* validate_literals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E122B17BBB00C661C6 /* validate_literals.cpp */; };
-		A94A6C1322B17BBD00C661C6 /* validate_literals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E122B17BBB00C661C6 /* validate_literals.cpp */; };
-		A94A6C1422B17BBD00C661C6 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E222B17BBB00C661C6 /* instruction.cpp */; };
-		A94A6C1522B17BBD00C661C6 /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E222B17BBB00C661C6 /* instruction.cpp */; };
-		A94A6C1622B17BBD00C661C6 /* validate_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E322B17BBB00C661C6 /* validate_type.cpp */; };
-		A94A6C1722B17BBD00C661C6 /* validate_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E322B17BBB00C661C6 /* validate_type.cpp */; };
-		A94A6C1822B17BBD00C661C6 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68E422B17BBB00C661C6 /* instruction.h */; };
-		A94A6C1922B17BBD00C661C6 /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68E422B17BBB00C661C6 /* instruction.h */; };
-		A94A6C1A22B17BBD00C661C6 /* validate_execution_limitations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E522B17BBB00C661C6 /* validate_execution_limitations.cpp */; };
-		A94A6C1B22B17BBD00C661C6 /* validate_execution_limitations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E522B17BBB00C661C6 /* validate_execution_limitations.cpp */; };
-		A94A6C1C22B17BBD00C661C6 /* validate_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E622B17BBB00C661C6 /* validate_layout.cpp */; };
-		A94A6C1D22B17BBD00C661C6 /* validate_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E622B17BBB00C661C6 /* validate_layout.cpp */; };
-		A94A6C1E22B17BBD00C661C6 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E722B17BBB00C661C6 /* basic_block.cpp */; };
-		A94A6C1F22B17BBD00C661C6 /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E722B17BBB00C661C6 /* basic_block.cpp */; };
-		A94A6C2022B17BBD00C661C6 /* validate_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E822B17BBB00C661C6 /* validate_function.cpp */; };
-		A94A6C2122B17BBD00C661C6 /* validate_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68E822B17BBB00C661C6 /* validate_function.cpp */; };
-		A94A6C2222B17BBD00C661C6 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68E922B17BBB00C661C6 /* function.h */; };
-		A94A6C2322B17BBD00C661C6 /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68E922B17BBB00C661C6 /* function.h */; };
-		A94A6C2422B17BBD00C661C6 /* validate_composites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68EA22B17BBB00C661C6 /* validate_composites.cpp */; };
-		A94A6C2522B17BBD00C661C6 /* validate_composites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68EA22B17BBB00C661C6 /* validate_composites.cpp */; };
-		A94A6C2622B17BBD00C661C6 /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68EB22B17BBB00C661C6 /* validation_state.cpp */; };
-		A94A6C2722B17BBD00C661C6 /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68EB22B17BBB00C661C6 /* validation_state.cpp */; };
-		A94A6C2822B17BBD00C661C6 /* validate_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68EC22B17BBB00C661C6 /* validate_primitives.cpp */; };
-		A94A6C2922B17BBD00C661C6 /* validate_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A94A68EC22B17BBB00C661C6 /* validate_primitives.cpp */; };
-		A94A6C2A22B17BBD00C661C6 /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68ED22B17BBB00C661C6 /* decoration.h */; };
-		A94A6C2B22B17BBD00C661C6 /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A94A68ED22B17BBB00C661C6 /* decoration.h */; };
 		A972AC6521CED9060013AB25 /* InitializeDll.h in Headers */ = {isa = PBXBuildFile; fileRef = A972ABF721CED9060013AB25 /* InitializeDll.h */; };
 		A972AC6621CED9060013AB25 /* InitializeDll.h in Headers */ = {isa = PBXBuildFile; fileRef = A972ABF721CED9060013AB25 /* InitializeDll.h */; };
 		A972AC6721CED9060013AB25 /* InitializeDll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A972ABF821CED9060013AB25 /* InitializeDll.cpp */; };
@@ -1012,6 +262,754 @@
 		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 */; };
+		A9C2F13922E7833D001763CE /* spirv_target_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF7822E7833C001763CE /* spirv_target_env.cpp */; };
+		A9C2F13A22E7833D001763CE /* spirv_target_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF7822E7833C001763CE /* spirv_target_env.cpp */; };
+		A9C2F13B22E7833D001763CE /* spirv_fuzzer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF7A22E7833C001763CE /* spirv_fuzzer_options.h */; };
+		A9C2F13C22E7833D001763CE /* spirv_fuzzer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF7A22E7833C001763CE /* spirv_fuzzer_options.h */; };
+		A9C2F13D22E7833D001763CE /* assembly_grammar.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF7B22E7833C001763CE /* assembly_grammar.h */; };
+		A9C2F13E22E7833D001763CE /* assembly_grammar.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF7B22E7833C001763CE /* assembly_grammar.h */; };
+		A9C2F13F22E7833D001763CE /* enum_set.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF7C22E7833C001763CE /* enum_set.h */; };
+		A9C2F14022E7833D001763CE /* enum_set.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF7C22E7833C001763CE /* enum_set.h */; };
+		A9C2F14122E7833D001763CE /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF7F22E7833C001763CE /* text.cpp */; };
+		A9C2F14222E7833D001763CE /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF7F22E7833C001763CE /* text.cpp */; };
+		A9C2F14322E7833D001763CE /* assembly_grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8022E7833C001763CE /* assembly_grammar.cpp */; };
+		A9C2F14422E7833D001763CE /* assembly_grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8022E7833C001763CE /* assembly_grammar.cpp */; };
+		A9C2F14522E7833D001763CE /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8122E7833C001763CE /* text.h */; };
+		A9C2F14622E7833D001763CE /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8122E7833C001763CE /* text.h */; };
+		A9C2F14722E7833D001763CE /* extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8222E7833C001763CE /* extensions.cpp */; };
+		A9C2F14822E7833D001763CE /* extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8222E7833C001763CE /* extensions.cpp */; };
+		A9C2F14922E7833D001763CE /* pch_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8322E7833C001763CE /* pch_source.cpp */; };
+		A9C2F14A22E7833D001763CE /* pch_source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8322E7833C001763CE /* pch_source.cpp */; };
+		A9C2F14B22E7833D001763CE /* parse_number.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8522E7833C001763CE /* parse_number.h */; };
+		A9C2F14C22E7833D001763CE /* parse_number.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8522E7833C001763CE /* parse_number.h */; };
+		A9C2F14D22E7833D001763CE /* ilist_node.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8622E7833C001763CE /* ilist_node.h */; };
+		A9C2F14E22E7833D001763CE /* ilist_node.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8622E7833C001763CE /* ilist_node.h */; };
+		A9C2F14F22E7833D001763CE /* make_unique.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8722E7833C001763CE /* make_unique.h */; };
+		A9C2F15022E7833D001763CE /* make_unique.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8722E7833C001763CE /* make_unique.h */; };
+		A9C2F15122E7833D001763CE /* string_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8822E7833C001763CE /* string_utils.h */; };
+		A9C2F15222E7833D001763CE /* string_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8822E7833C001763CE /* string_utils.h */; };
+		A9C2F15322E7833D001763CE /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8922E7833C001763CE /* small_vector.h */; };
+		A9C2F15422E7833D001763CE /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8922E7833C001763CE /* small_vector.h */; };
+		A9C2F15522E7833D001763CE /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8A22E7833C001763CE /* timer.cpp */; };
+		A9C2F15622E7833D001763CE /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8A22E7833C001763CE /* timer.cpp */; };
+		A9C2F15722E7833D001763CE /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8B22E7833C001763CE /* timer.h */; };
+		A9C2F15822E7833D001763CE /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8B22E7833C001763CE /* timer.h */; };
+		A9C2F15922E7833D001763CE /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8C22E7833C001763CE /* string_utils.cpp */; };
+		A9C2F15A22E7833D001763CE /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF8C22E7833C001763CE /* string_utils.cpp */; };
+		A9C2F15B22E7833D001763CE /* bit_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8D22E7833C001763CE /* bit_vector.h */; };
+		A9C2F15C22E7833D001763CE /* bit_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8D22E7833C001763CE /* bit_vector.h */; };
+		A9C2F15D22E7833D001763CE /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8E22E7833C001763CE /* bitutils.h */; };
+		A9C2F15E22E7833D001763CE /* bitutils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8E22E7833C001763CE /* bitutils.h */; };
+		A9C2F15F22E7833D001763CE /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8F22E7833C001763CE /* hex_float.h */; };
+		A9C2F16022E7833D001763CE /* hex_float.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF8F22E7833C001763CE /* hex_float.h */; };
+		A9C2F16122E7833D001763CE /* parse_number.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9022E7833C001763CE /* parse_number.cpp */; };
+		A9C2F16222E7833D001763CE /* parse_number.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9022E7833C001763CE /* parse_number.cpp */; };
+		A9C2F16322E7833D001763CE /* bit_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9122E7833C001763CE /* bit_vector.cpp */; };
+		A9C2F16422E7833D001763CE /* bit_vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9122E7833C001763CE /* bit_vector.cpp */; };
+		A9C2F16522E7833D001763CE /* ilist.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9222E7833C001763CE /* ilist.h */; };
+		A9C2F16622E7833D001763CE /* ilist.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9222E7833C001763CE /* ilist.h */; };
+		A9C2F16722E7833D001763CE /* spirv_target_env.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9322E7833C001763CE /* spirv_target_env.h */; };
+		A9C2F16822E7833D001763CE /* spirv_target_env.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9322E7833C001763CE /* spirv_target_env.h */; };
+		A9C2F16922E7833D001763CE /* table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9422E7833C001763CE /* table.cpp */; };
+		A9C2F16A22E7833D001763CE /* table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9422E7833C001763CE /* table.cpp */; };
+		A9C2F16B22E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9622E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.h */; };
+		A9C2F16C22E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9622E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.h */; };
+		A9C2F16D22E7833D001763CE /* remove_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9722E7833C001763CE /* remove_selection_reduction_opportunity.cpp */; };
+		A9C2F16E22E7833D001763CE /* remove_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9722E7833C001763CE /* remove_selection_reduction_opportunity.cpp */; };
+		A9C2F16F22E7833D001763CE /* remove_block_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9822E7833C001763CE /* remove_block_reduction_opportunity.h */; };
+		A9C2F17022E7833D001763CE /* remove_block_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9822E7833C001763CE /* remove_block_reduction_opportunity.h */; };
+		A9C2F17122E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9922E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h */; };
+		A9C2F17222E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9922E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h */; };
+		A9C2F17322E7833D001763CE /* reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9A22E7833C001763CE /* reduction_pass.cpp */; };
+		A9C2F17422E7833D001763CE /* reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9A22E7833C001763CE /* reduction_pass.cpp */; };
+		A9C2F17522E7833D001763CE /* operand_to_const_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9B22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.cpp */; };
+		A9C2F17622E7833D001763CE /* operand_to_const_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9B22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.cpp */; };
+		A9C2F17722E7833D001763CE /* operand_to_const_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9C22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.h */; };
+		A9C2F17822E7833D001763CE /* operand_to_const_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EF9C22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.h */; };
+		A9C2F17922E7833D001763CE /* reduction_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9E22E7833C001763CE /* reduction_util.cpp */; };
+		A9C2F17A22E7833D001763CE /* reduction_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9E22E7833C001763CE /* reduction_util.cpp */; };
+		A9C2F17B22E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9F22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp */; };
+		A9C2F17C22E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EF9F22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp */; };
+		A9C2F17D22E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA022E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h */; };
+		A9C2F17E22E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA022E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h */; };
+		A9C2F17F22E7833D001763CE /* remove_function_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA122E7833C001763CE /* remove_function_reduction_opportunity_finder.cpp */; };
+		A9C2F18022E7833D001763CE /* remove_function_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA122E7833C001763CE /* remove_function_reduction_opportunity_finder.cpp */; };
+		A9C2F18122E7833D001763CE /* remove_instruction_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA222E7833C001763CE /* remove_instruction_reduction_opportunity.h */; };
+		A9C2F18222E7833D001763CE /* remove_instruction_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA222E7833C001763CE /* remove_instruction_reduction_opportunity.h */; };
+		A9C2F18322E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA322E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */; };
+		A9C2F18422E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA322E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */; };
+		A9C2F18522E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA422E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */; };
+		A9C2F18622E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA422E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */; };
+		A9C2F18722E7833D001763CE /* remove_function_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA522E7833C001763CE /* remove_function_reduction_opportunity.cpp */; };
+		A9C2F18822E7833D001763CE /* remove_function_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA522E7833C001763CE /* remove_function_reduction_opportunity.cpp */; };
+		A9C2F18922E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.h */; };
+		A9C2F18A22E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFA622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.h */; };
+		A9C2F18B22E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA722E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp */; };
+		A9C2F18C22E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA722E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp */; };
+		A9C2F18D22E7833D001763CE /* remove_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA822E7833C001763CE /* remove_selection_reduction_opportunity_finder.cpp */; };
+		A9C2F18E22E7833D001763CE /* remove_selection_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA822E7833C001763CE /* remove_selection_reduction_opportunity_finder.cpp */; };
+		A9C2F18F22E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA922E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */; };
+		A9C2F19022E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFA922E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */; };
+		A9C2F19122E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAA22E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h */; };
+		A9C2F19222E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAA22E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h */; };
+		A9C2F19322E7833D001763CE /* merge_blocks_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFAB22E7833C001763CE /* merge_blocks_reduction_opportunity.cpp */; };
+		A9C2F19422E7833D001763CE /* merge_blocks_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFAB22E7833C001763CE /* merge_blocks_reduction_opportunity.cpp */; };
+		A9C2F19522E7833D001763CE /* change_operand_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFAC22E7833C001763CE /* change_operand_reduction_opportunity.cpp */; };
+		A9C2F19622E7833D001763CE /* change_operand_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFAC22E7833C001763CE /* change_operand_reduction_opportunity.cpp */; };
+		A9C2F19722E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAD22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.h */; };
+		A9C2F19822E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAD22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.h */; };
+		A9C2F19922E7833D001763CE /* remove_function_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAE22E7833C001763CE /* remove_function_reduction_opportunity.h */; };
+		A9C2F19A22E7833D001763CE /* remove_function_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAE22E7833C001763CE /* remove_function_reduction_opportunity.h */; };
+		A9C2F19B22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAF22E7833C001763CE /* change_operand_to_undef_reduction_opportunity.h */; };
+		A9C2F19C22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFAF22E7833C001763CE /* change_operand_to_undef_reduction_opportunity.h */; };
+		A9C2F19D22E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB022E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */; };
+		A9C2F19E22E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB022E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */; };
+		A9C2F19F22E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB122E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h */; };
+		A9C2F1A022E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB122E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h */; };
+		A9C2F1A122E7833D001763CE /* remove_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB222E7833C001763CE /* remove_selection_reduction_opportunity.h */; };
+		A9C2F1A222E7833D001763CE /* remove_selection_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB222E7833C001763CE /* remove_selection_reduction_opportunity.h */; };
+		A9C2F1A322E7833D001763CE /* remove_instruction_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB322E7833C001763CE /* remove_instruction_reduction_opportunity.cpp */; };
+		A9C2F1A422E7833D001763CE /* remove_instruction_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB322E7833C001763CE /* remove_instruction_reduction_opportunity.cpp */; };
+		A9C2F1A522E7833D001763CE /* remove_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB422E7833C001763CE /* remove_selection_reduction_opportunity_finder.h */; };
+		A9C2F1A622E7833D001763CE /* remove_selection_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB422E7833C001763CE /* remove_selection_reduction_opportunity_finder.h */; };
+		A9C2F1A722E7833D001763CE /* merge_blocks_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB522E7833C001763CE /* merge_blocks_reduction_opportunity_finder.h */; };
+		A9C2F1A822E7833D001763CE /* merge_blocks_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFB522E7833C001763CE /* merge_blocks_reduction_opportunity_finder.h */; };
+		A9C2F1A922E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp */; };
+		A9C2F1AA22E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp */; };
+		A9C2F1AB22E7833D001763CE /* pch_source_reduce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB722E7833C001763CE /* pch_source_reduce.cpp */; };
+		A9C2F1AC22E7833D001763CE /* pch_source_reduce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB722E7833C001763CE /* pch_source_reduce.cpp */; };
+		A9C2F1AD22E7833D001763CE /* reducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB822E7833C001763CE /* reducer.cpp */; };
+		A9C2F1AE22E7833D001763CE /* reducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB822E7833C001763CE /* reducer.cpp */; };
+		A9C2F1AF22E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB922E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.cpp */; };
+		A9C2F1B022E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFB922E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.cpp */; };
+		A9C2F1B122E7833D001763CE /* remove_function_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBA22E7833C001763CE /* remove_function_reduction_opportunity_finder.h */; };
+		A9C2F1B222E7833D001763CE /* remove_function_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBA22E7833C001763CE /* remove_function_reduction_opportunity_finder.h */; };
+		A9C2F1B322E7833D001763CE /* pch_source_reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBB22E7833C001763CE /* pch_source_reduce.h */; };
+		A9C2F1B422E7833D001763CE /* pch_source_reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBB22E7833C001763CE /* pch_source_reduce.h */; };
+		A9C2F1B522E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBC22E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h */; };
+		A9C2F1B622E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBC22E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h */; };
+		A9C2F1B722E7833D001763CE /* merge_blocks_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFBD22E7833C001763CE /* merge_blocks_reduction_opportunity_finder.cpp */; };
+		A9C2F1B822E7833D001763CE /* merge_blocks_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFBD22E7833C001763CE /* merge_blocks_reduction_opportunity_finder.cpp */; };
+		A9C2F1B922E7833D001763CE /* reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFBE22E7833C001763CE /* reduction_opportunity.cpp */; };
+		A9C2F1BA22E7833D001763CE /* reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFBE22E7833C001763CE /* reduction_opportunity.cpp */; };
+		A9C2F1BB22E7833D001763CE /* reducer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBF22E7833C001763CE /* reducer.h */; };
+		A9C2F1BC22E7833D001763CE /* reducer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFBF22E7833C001763CE /* reducer.h */; };
+		A9C2F1BD22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFC022E7833C001763CE /* change_operand_to_undef_reduction_opportunity.cpp */; };
+		A9C2F1BE22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFC022E7833C001763CE /* change_operand_to_undef_reduction_opportunity.cpp */; };
+		A9C2F1BF22E7833D001763CE /* reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC122E7833C001763CE /* reduction_opportunity.h */; };
+		A9C2F1C022E7833D001763CE /* reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC122E7833C001763CE /* reduction_opportunity.h */; };
+		A9C2F1C122E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC222E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */; };
+		A9C2F1C222E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC222E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */; };
+		A9C2F1C322E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFC322E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp */; };
+		A9C2F1C422E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFC322E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp */; };
+		A9C2F1C522E7833D001763CE /* reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC422E7833C001763CE /* reduction_opportunity_finder.h */; };
+		A9C2F1C622E7833D001763CE /* reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC422E7833C001763CE /* reduction_opportunity_finder.h */; };
+		A9C2F1C722E7833D001763CE /* change_operand_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC522E7833C001763CE /* change_operand_reduction_opportunity.h */; };
+		A9C2F1C822E7833D001763CE /* change_operand_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC522E7833C001763CE /* change_operand_reduction_opportunity.h */; };
+		A9C2F1C922E7833D001763CE /* remove_block_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC622E7833C001763CE /* remove_block_reduction_opportunity_finder.h */; };
+		A9C2F1CA22E7833D001763CE /* remove_block_reduction_opportunity_finder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC622E7833C001763CE /* remove_block_reduction_opportunity_finder.h */; };
+		A9C2F1CB22E7833D001763CE /* remove_block_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFC722E7833C001763CE /* remove_block_reduction_opportunity_finder.cpp */; };
+		A9C2F1CC22E7833D001763CE /* remove_block_reduction_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFC722E7833C001763CE /* remove_block_reduction_opportunity_finder.cpp */; };
+		A9C2F1CD22E7833D001763CE /* reduction_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC822E7833C001763CE /* reduction_util.h */; };
+		A9C2F1CE22E7833D001763CE /* reduction_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC822E7833C001763CE /* reduction_util.h */; };
+		A9C2F1CF22E7833D001763CE /* merge_blocks_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC922E7833C001763CE /* merge_blocks_reduction_opportunity.h */; };
+		A9C2F1D022E7833D001763CE /* merge_blocks_reduction_opportunity.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFC922E7833C001763CE /* merge_blocks_reduction_opportunity.h */; };
+		A9C2F1D122E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCA22E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */; };
+		A9C2F1D222E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCA22E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */; };
+		A9C2F1D322E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCB22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.cpp */; };
+		A9C2F1D422E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCB22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.cpp */; };
+		A9C2F1D522E7833D001763CE /* remove_block_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCC22E7833C001763CE /* remove_block_reduction_opportunity.cpp */; };
+		A9C2F1D622E7833D001763CE /* remove_block_reduction_opportunity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCC22E7833C001763CE /* remove_block_reduction_opportunity.cpp */; };
+		A9C2F1D722E7833D001763CE /* reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFCD22E7833C001763CE /* reduction_pass.h */; };
+		A9C2F1D822E7833D001763CE /* reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFCD22E7833C001763CE /* reduction_pass.h */; };
+		A9C2F1D922E7833D001763CE /* latest_version_opencl_std_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFCE22E7833C001763CE /* latest_version_opencl_std_header.h */; };
+		A9C2F1DA22E7833D001763CE /* latest_version_opencl_std_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFCE22E7833C001763CE /* latest_version_opencl_std_header.h */; };
+		A9C2F1DB22E7833D001763CE /* spirv_optimizer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCF22E7833C001763CE /* spirv_optimizer_options.cpp */; };
+		A9C2F1DC22E7833D001763CE /* spirv_optimizer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFCF22E7833C001763CE /* spirv_optimizer_options.cpp */; };
+		A9C2F1DD22E7833D001763CE /* cfa.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD022E7833C001763CE /* cfa.h */; };
+		A9C2F1DE22E7833D001763CE /* cfa.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD022E7833C001763CE /* cfa.h */; };
+		A9C2F1DF22E7833D001763CE /* pch_source.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD122E7833C001763CE /* pch_source.h */; };
+		A9C2F1E022E7833D001763CE /* pch_source.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD122E7833C001763CE /* pch_source.h */; };
+		A9C2F1E122E7833D001763CE /* enum_string_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD222E7833C001763CE /* enum_string_mapping.h */; };
+		A9C2F1E222E7833D001763CE /* enum_string_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD222E7833C001763CE /* enum_string_mapping.h */; };
+		A9C2F1E322E7833D001763CE /* spirv_fuzzer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFD322E7833C001763CE /* spirv_fuzzer_options.cpp */; };
+		A9C2F1E422E7833D001763CE /* spirv_fuzzer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFD322E7833C001763CE /* spirv_fuzzer_options.cpp */; };
+		A9C2F1E522E7833D001763CE /* spirv_reducer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD422E7833C001763CE /* spirv_reducer_options.h */; };
+		A9C2F1E622E7833D001763CE /* spirv_reducer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD422E7833C001763CE /* spirv_reducer_options.h */; };
+		A9C2F1E722E7833D001763CE /* spirv_validator_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFD522E7833C001763CE /* spirv_validator_options.cpp */; };
+		A9C2F1E822E7833D001763CE /* spirv_validator_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFD522E7833C001763CE /* spirv_validator_options.cpp */; };
+		A9C2F1E922E7833D001763CE /* print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFD722E7833C001763CE /* print.cpp */; };
+		A9C2F1EA22E7833D001763CE /* print.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFD722E7833C001763CE /* print.cpp */; };
+		A9C2F1EB22E7833D001763CE /* spirv_definition.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD822E7833C001763CE /* spirv_definition.h */; };
+		A9C2F1EC22E7833D001763CE /* spirv_definition.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD822E7833C001763CE /* spirv_definition.h */; };
+		A9C2F1ED22E7833D001763CE /* operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD922E7833C001763CE /* operand.h */; };
+		A9C2F1EE22E7833D001763CE /* operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFD922E7833C001763CE /* operand.h */; };
+		A9C2F1EF22E7833D001763CE /* spirv_endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFDA22E7833C001763CE /* spirv_endian.cpp */; };
+		A9C2F1F022E7833D001763CE /* spirv_endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFDA22E7833C001763CE /* spirv_endian.cpp */; };
+		A9C2F1F122E7833D001763CE /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFDB22E7833C001763CE /* macro.h */; };
+		A9C2F1F222E7833D001763CE /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFDB22E7833C001763CE /* macro.h */; };
+		A9C2F1F322E7833D001763CE /* spirv_constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFDC22E7833C001763CE /* spirv_constant.h */; };
+		A9C2F1F422E7833D001763CE /* spirv_constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFDC22E7833C001763CE /* spirv_constant.h */; };
+		A9C2F1F522E7833D001763CE /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFDE22E7833C001763CE /* binary.cpp */; };
+		A9C2F1F622E7833D001763CE /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFDE22E7833C001763CE /* binary.cpp */; };
+		A9C2F1F722E7833D001763CE /* spirv_validator_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFDF22E7833C001763CE /* spirv_validator_options.h */; };
+		A9C2F1F822E7833D001763CE /* spirv_validator_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFDF22E7833C001763CE /* spirv_validator_options.h */; };
+		A9C2F1F922E7833D001763CE /* enum_string_mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE022E7833C001763CE /* enum_string_mapping.cpp */; };
+		A9C2F1FA22E7833D001763CE /* enum_string_mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE022E7833C001763CE /* enum_string_mapping.cpp */; };
+		A9C2F1FB22E7833D001763CE /* text_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE122E7833C001763CE /* text_handler.h */; };
+		A9C2F1FC22E7833D001763CE /* text_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE122E7833C001763CE /* text_handler.h */; };
+		A9C2F1FD22E7833D001763CE /* parsed_operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE222E7833C001763CE /* parsed_operand.h */; };
+		A9C2F1FE22E7833D001763CE /* parsed_operand.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE222E7833C001763CE /* parsed_operand.h */; };
+		A9C2F1FF22E7833D001763CE /* name_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE322E7833C001763CE /* name_mapper.h */; };
+		A9C2F20022E7833D001763CE /* name_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE322E7833C001763CE /* name_mapper.h */; };
+		A9C2F20122E7833D001763CE /* spirv_reducer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE422E7833C001763CE /* spirv_reducer_options.cpp */; };
+		A9C2F20222E7833D001763CE /* spirv_reducer_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE422E7833C001763CE /* spirv_reducer_options.cpp */; };
+		A9C2F20322E7833D001763CE /* parsed_operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE522E7833C001763CE /* parsed_operand.cpp */; };
+		A9C2F20422E7833D001763CE /* parsed_operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE522E7833C001763CE /* parsed_operand.cpp */; };
+		A9C2F20522E7833D001763CE /* diagnostic.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE622E7833C001763CE /* diagnostic.h */; };
+		A9C2F20622E7833D001763CE /* diagnostic.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE622E7833C001763CE /* diagnostic.h */; };
+		A9C2F20722E7833D001763CE /* spirv_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE722E7833C001763CE /* spirv_endian.h */; };
+		A9C2F20822E7833D001763CE /* spirv_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFE722E7833C001763CE /* spirv_endian.h */; };
+		A9C2F20922E7833D001763CE /* name_mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE822E7833C001763CE /* name_mapper.cpp */; };
+		A9C2F20A22E7833D001763CE /* name_mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFE822E7833C001763CE /* name_mapper.cpp */; };
+		A9C2F20B22E7833D001763CE /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFEC22E7833C001763CE /* linker.cpp */; };
+		A9C2F20C22E7833D001763CE /* linker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFEC22E7833C001763CE /* linker.cpp */; };
+		A9C2F20D22E7833D001763CE /* software_version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFED22E7833C001763CE /* software_version.cpp */; };
+		A9C2F20E22E7833D001763CE /* software_version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFED22E7833C001763CE /* software_version.cpp */; };
+		A9C2F20F22E7833D001763CE /* opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFEE22E7833C001763CE /* opcode.cpp */; };
+		A9C2F21022E7833D001763CE /* opcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFEE22E7833C001763CE /* opcode.cpp */; };
+		A9C2F21122E7833D001763CE /* print.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFEF22E7833C001763CE /* print.h */; };
+		A9C2F21222E7833D001763CE /* print.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFEF22E7833C001763CE /* print.h */; };
+		A9C2F21322E7833D001763CE /* ext_inst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF022E7833C001763CE /* ext_inst.cpp */; };
+		A9C2F21422E7833D001763CE /* ext_inst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF022E7833C001763CE /* ext_inst.cpp */; };
+		A9C2F21522E7833D001763CE /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF122E7833C001763CE /* disassemble.h */; };
+		A9C2F21622E7833D001763CE /* disassemble.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF122E7833C001763CE /* disassemble.h */; };
+		A9C2F21722E7833D001763CE /* optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF322E7833C001763CE /* optimizer.cpp */; };
+		A9C2F21822E7833D001763CE /* optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF322E7833C001763CE /* optimizer.cpp */; };
+		A9C2F21922E7833D001763CE /* if_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF422E7833C001763CE /* if_conversion.h */; };
+		A9C2F21A22E7833D001763CE /* if_conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF422E7833C001763CE /* if_conversion.h */; };
+		A9C2F21B22E7833D001763CE /* register_pressure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF522E7833C001763CE /* register_pressure.cpp */; };
+		A9C2F21C22E7833D001763CE /* register_pressure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF522E7833C001763CE /* register_pressure.cpp */; };
+		A9C2F21D22E7833D001763CE /* loop_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF622E7833C001763CE /* loop_utils.cpp */; };
+		A9C2F21E22E7833D001763CE /* loop_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFF622E7833C001763CE /* loop_utils.cpp */; };
+		A9C2F21F22E7833D001763CE /* merge_return_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF722E7833C001763CE /* merge_return_pass.h */; };
+		A9C2F22022E7833D001763CE /* merge_return_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF722E7833C001763CE /* merge_return_pass.h */; };
+		A9C2F22122E7833D001763CE /* inline_opaque_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF822E7833C001763CE /* inline_opaque_pass.h */; };
+		A9C2F22222E7833D001763CE /* inline_opaque_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF822E7833C001763CE /* inline_opaque_pass.h */; };
+		A9C2F22322E7833D001763CE /* loop_fusion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF922E7833C001763CE /* loop_fusion.h */; };
+		A9C2F22422E7833D001763CE /* loop_fusion.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFF922E7833C001763CE /* loop_fusion.h */; };
+		A9C2F22522E7833D001763CE /* combine_access_chains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFFA22E7833C001763CE /* combine_access_chains.cpp */; };
+		A9C2F22622E7833D001763CE /* combine_access_chains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFFA22E7833C001763CE /* combine_access_chains.cpp */; };
+		A9C2F22722E7833D001763CE /* build_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFFB22E7833C001763CE /* build_module.cpp */; };
+		A9C2F22822E7833D001763CE /* build_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2EFFB22E7833C001763CE /* build_module.cpp */; };
+		A9C2F22922E7833D001763CE /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFC22E7833C001763CE /* composite.h */; };
+		A9C2F22A22E7833D001763CE /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFC22E7833C001763CE /* composite.h */; };
+		A9C2F22B22E7833D001763CE /* compact_ids_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFD22E7833C001763CE /* compact_ids_pass.h */; };
+		A9C2F22C22E7833D001763CE /* compact_ids_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFD22E7833C001763CE /* compact_ids_pass.h */; };
+		A9C2F22D22E7833D001763CE /* register_pressure.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFE22E7833C001763CE /* register_pressure.h */; };
+		A9C2F22E22E7833D001763CE /* register_pressure.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFE22E7833C001763CE /* register_pressure.h */; };
+		A9C2F22F22E7833D001763CE /* tree_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFF22E7833C001763CE /* tree_iterator.h */; };
+		A9C2F23022E7833D001763CE /* tree_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2EFFF22E7833C001763CE /* tree_iterator.h */; };
+		A9C2F23122E7833D001763CE /* strip_atomic_counter_memory_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00022E7833C001763CE /* strip_atomic_counter_memory_pass.h */; };
+		A9C2F23222E7833D001763CE /* strip_atomic_counter_memory_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00022E7833C001763CE /* strip_atomic_counter_memory_pass.h */; };
+		A9C2F23322E7833D001763CE /* legalize_vector_shuffle_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00122E7833C001763CE /* legalize_vector_shuffle_pass.h */; };
+		A9C2F23422E7833D001763CE /* legalize_vector_shuffle_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00122E7833C001763CE /* legalize_vector_shuffle_pass.h */; };
+		A9C2F23522E7833D001763CE /* local_single_store_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00222E7833C001763CE /* local_single_store_elim_pass.h */; };
+		A9C2F23622E7833D001763CE /* local_single_store_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00222E7833C001763CE /* local_single_store_elim_pass.h */; };
+		A9C2F23722E7833D001763CE /* reduce_load_size.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00322E7833C001763CE /* reduce_load_size.h */; };
+		A9C2F23822E7833D001763CE /* reduce_load_size.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00322E7833C001763CE /* reduce_load_size.h */; };
+		A9C2F23922E7833D001763CE /* code_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00422E7833C001763CE /* code_sink.cpp */; };
+		A9C2F23A22E7833D001763CE /* code_sink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00422E7833C001763CE /* code_sink.cpp */; };
+		A9C2F23B22E7833D001763CE /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00522E7833C001763CE /* types.cpp */; };
+		A9C2F23C22E7833D001763CE /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00522E7833C001763CE /* types.cpp */; };
+		A9C2F23D22E7833D001763CE /* scalar_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00622E7833C001763CE /* scalar_analysis.h */; };
+		A9C2F23E22E7833D001763CE /* scalar_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00622E7833C001763CE /* scalar_analysis.h */; };
+		A9C2F23F22E7833D001763CE /* strip_debug_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00722E7833C001763CE /* strip_debug_info_pass.h */; };
+		A9C2F24022E7833D001763CE /* strip_debug_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00722E7833C001763CE /* strip_debug_info_pass.h */; };
+		A9C2F24122E7833D001763CE /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00822E7833C001763CE /* cfg.cpp */; };
+		A9C2F24222E7833D001763CE /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00822E7833C001763CE /* cfg.cpp */; };
+		A9C2F24322E7833D001763CE /* strip_atomic_counter_memory_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00922E7833C001763CE /* strip_atomic_counter_memory_pass.cpp */; };
+		A9C2F24422E7833D001763CE /* strip_atomic_counter_memory_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00922E7833C001763CE /* strip_atomic_counter_memory_pass.cpp */; };
+		A9C2F24522E7833D001763CE /* decoration_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00A22E7833C001763CE /* decoration_manager.cpp */; };
+		A9C2F24622E7833D001763CE /* decoration_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00A22E7833C001763CE /* decoration_manager.cpp */; };
+		A9C2F24722E7833D001763CE /* local_single_block_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00B22E7833C001763CE /* local_single_block_elim_pass.cpp */; };
+		A9C2F24822E7833D001763CE /* local_single_block_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00B22E7833C001763CE /* local_single_block_elim_pass.cpp */; };
+		A9C2F24922E7833D001763CE /* freeze_spec_constant_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00C22E7833C001763CE /* freeze_spec_constant_value_pass.cpp */; };
+		A9C2F24A22E7833D001763CE /* freeze_spec_constant_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00C22E7833C001763CE /* freeze_spec_constant_value_pass.cpp */; };
+		A9C2F24B22E7833D001763CE /* replace_invalid_opc.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00D22E7833C001763CE /* replace_invalid_opc.h */; };
+		A9C2F24C22E7833D001763CE /* replace_invalid_opc.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00D22E7833C001763CE /* replace_invalid_opc.h */; };
+		A9C2F24D22E7833D001763CE /* local_access_chain_convert_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00E22E7833C001763CE /* local_access_chain_convert_pass.h */; };
+		A9C2F24E22E7833D001763CE /* local_access_chain_convert_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F00E22E7833C001763CE /* local_access_chain_convert_pass.h */; };
+		A9C2F24F22E7833D001763CE /* inst_bindless_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00F22E7833C001763CE /* inst_bindless_check_pass.cpp */; };
+		A9C2F25022E7833D001763CE /* inst_bindless_check_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F00F22E7833C001763CE /* inst_bindless_check_pass.cpp */; };
+		A9C2F25122E7833D001763CE /* local_redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01022E7833C001763CE /* local_redundancy_elimination.cpp */; };
+		A9C2F25222E7833D001763CE /* local_redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01022E7833C001763CE /* local_redundancy_elimination.cpp */; };
+		A9C2F25322E7833D001763CE /* instrument_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01222E7833C001763CE /* instrument_pass.cpp */; };
+		A9C2F25422E7833D001763CE /* instrument_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01222E7833C001763CE /* instrument_pass.cpp */; };
+		A9C2F25522E7833D001763CE /* propagator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01322E7833C001763CE /* propagator.h */; };
+		A9C2F25622E7833D001763CE /* propagator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01322E7833C001763CE /* propagator.h */; };
+		A9C2F25722E7833D001763CE /* instruction_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01422E7833C001763CE /* instruction_list.h */; };
+		A9C2F25822E7833D001763CE /* instruction_list.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01422E7833C001763CE /* instruction_list.h */; };
+		A9C2F25922E7833D001763CE /* feature_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01522E7833C001763CE /* feature_manager.cpp */; };
+		A9C2F25A22E7833D001763CE /* feature_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01522E7833C001763CE /* feature_manager.cpp */; };
+		A9C2F25B22E7833D001763CE /* pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01622E7833C001763CE /* pass.cpp */; };
+		A9C2F25C22E7833D001763CE /* pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01622E7833C001763CE /* pass.cpp */; };
+		A9C2F25D22E7833D001763CE /* loop_fission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01722E7833C001763CE /* loop_fission.cpp */; };
+		A9C2F25E22E7833D001763CE /* loop_fission.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01722E7833C001763CE /* loop_fission.cpp */; };
+		A9C2F25F22E7833D001763CE /* dominator_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01822E7833C001763CE /* dominator_tree.cpp */; };
+		A9C2F26022E7833D001763CE /* dominator_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01822E7833C001763CE /* dominator_tree.cpp */; };
+		A9C2F26122E7833D001763CE /* merge_return_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01922E7833C001763CE /* merge_return_pass.cpp */; };
+		A9C2F26222E7833D001763CE /* merge_return_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01922E7833C001763CE /* merge_return_pass.cpp */; };
+		A9C2F26322E7833D001763CE /* ir_context.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01A22E7833C001763CE /* ir_context.h */; };
+		A9C2F26422E7833D001763CE /* ir_context.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01A22E7833C001763CE /* ir_context.h */; };
+		A9C2F26522E7833D001763CE /* eliminate_dead_constant_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01B22E7833C001763CE /* eliminate_dead_constant_pass.cpp */; };
+		A9C2F26622E7833D001763CE /* eliminate_dead_constant_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01B22E7833C001763CE /* eliminate_dead_constant_pass.cpp */; };
+		A9C2F26722E7833D001763CE /* cfg_cleanup_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01C22E7833C001763CE /* cfg_cleanup_pass.cpp */; };
+		A9C2F26822E7833D001763CE /* cfg_cleanup_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01C22E7833C001763CE /* cfg_cleanup_pass.cpp */; };
+		A9C2F26922E7833D001763CE /* const_folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01D22E7833C001763CE /* const_folding_rules.cpp */; };
+		A9C2F26A22E7833D001763CE /* const_folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01D22E7833C001763CE /* const_folding_rules.cpp */; };
+		A9C2F26B22E7833D001763CE /* loop_unroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01E22E7833C001763CE /* loop_unroller.h */; };
+		A9C2F26C22E7833D001763CE /* loop_unroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F01E22E7833C001763CE /* loop_unroller.h */; };
+		A9C2F26D22E7833D001763CE /* strip_debug_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01F22E7833C001763CE /* strip_debug_info_pass.cpp */; };
+		A9C2F26E22E7833D001763CE /* strip_debug_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F01F22E7833C001763CE /* strip_debug_info_pass.cpp */; };
+		A9C2F26F22E7833D001763CE /* ssa_rewrite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02022E7833C001763CE /* ssa_rewrite_pass.cpp */; };
+		A9C2F27022E7833D001763CE /* ssa_rewrite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02022E7833C001763CE /* ssa_rewrite_pass.cpp */; };
+		A9C2F27122E7833D001763CE /* loop_dependence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02122E7833C001763CE /* loop_dependence.cpp */; };
+		A9C2F27222E7833D001763CE /* loop_dependence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02122E7833C001763CE /* loop_dependence.cpp */; };
+		A9C2F27322E7833D001763CE /* unify_const_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02222E7833C001763CE /* unify_const_pass.h */; };
+		A9C2F27422E7833D001763CE /* unify_const_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02222E7833C001763CE /* unify_const_pass.h */; };
+		A9C2F27522E7833D001763CE /* ir_loader.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02322E7833C001763CE /* ir_loader.h */; };
+		A9C2F27622E7833D001763CE /* ir_loader.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02322E7833C001763CE /* ir_loader.h */; };
+		A9C2F27722E7833D001763CE /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02422E7833C001763CE /* types.h */; };
+		A9C2F27822E7833D001763CE /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02422E7833C001763CE /* types.h */; };
+		A9C2F27922E7833D001763CE /* fold_spec_constant_op_and_composite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02522E7833C001763CE /* fold_spec_constant_op_and_composite_pass.h */; };
+		A9C2F27A22E7833D001763CE /* fold_spec_constant_op_and_composite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02522E7833C001763CE /* fold_spec_constant_op_and_composite_pass.h */; };
+		A9C2F27B22E7833D001763CE /* mem_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02622E7833C001763CE /* mem_pass.cpp */; };
+		A9C2F27C22E7833D001763CE /* mem_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02622E7833C001763CE /* mem_pass.cpp */; };
+		A9C2F27D22E7833D001763CE /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02722E7833C001763CE /* basic_block.h */; };
+		A9C2F27E22E7833D001763CE /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02722E7833C001763CE /* basic_block.h */; };
+		A9C2F27F22E7833D001763CE /* remove_duplicates_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02822E7833C001763CE /* remove_duplicates_pass.cpp */; };
+		A9C2F28022E7833D001763CE /* remove_duplicates_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02822E7833C001763CE /* remove_duplicates_pass.cpp */; };
+		A9C2F28122E7833D001763CE /* dead_variable_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02922E7833C001763CE /* dead_variable_elimination.cpp */; };
+		A9C2F28222E7833D001763CE /* dead_variable_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02922E7833C001763CE /* dead_variable_elimination.cpp */; };
+		A9C2F28322E7833D001763CE /* block_merge_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02A22E7833C001763CE /* block_merge_pass.h */; };
+		A9C2F28422E7833D001763CE /* block_merge_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F02A22E7833C001763CE /* block_merge_pass.h */; };
+		A9C2F28522E7833D001763CE /* module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02B22E7833C001763CE /* module.cpp */; };
+		A9C2F28622E7833D001763CE /* module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02B22E7833C001763CE /* module.cpp */; };
+		A9C2F28722E7833D001763CE /* fold_spec_constant_op_and_composite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02C22E7833C001763CE /* fold_spec_constant_op_and_composite_pass.cpp */; };
+		A9C2F28822E7833D001763CE /* fold_spec_constant_op_and_composite_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02C22E7833C001763CE /* fold_spec_constant_op_and_composite_pass.cpp */; };
+		A9C2F28922E7833D001763CE /* loop_unswitch_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02D22E7833C001763CE /* loop_unswitch_pass.cpp */; };
+		A9C2F28A22E7833D001763CE /* loop_unswitch_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02D22E7833C001763CE /* loop_unswitch_pass.cpp */; };
+		A9C2F28B22E7833D001763CE /* unify_const_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02E22E7833C001763CE /* unify_const_pass.cpp */; };
+		A9C2F28C22E7833D001763CE /* unify_const_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02E22E7833C001763CE /* unify_const_pass.cpp */; };
+		A9C2F28D22E7833D001763CE /* type_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02F22E7833C001763CE /* type_manager.cpp */; };
+		A9C2F28E22E7833D001763CE /* type_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F02F22E7833C001763CE /* type_manager.cpp */; };
+		A9C2F28F22E7833D001763CE /* generate_webgpu_initializers_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03022E7833C001763CE /* generate_webgpu_initializers_pass.cpp */; };
+		A9C2F29022E7833D001763CE /* generate_webgpu_initializers_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03022E7833C001763CE /* generate_webgpu_initializers_pass.cpp */; };
+		A9C2F29122E7833D001763CE /* private_to_local_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03122E7833C001763CE /* private_to_local_pass.h */; };
+		A9C2F29222E7833D001763CE /* private_to_local_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03122E7833C001763CE /* private_to_local_pass.h */; };
+		A9C2F29322E7833D001763CE /* inline_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03222E7833C001763CE /* inline_pass.cpp */; };
+		A9C2F29422E7833D001763CE /* inline_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03222E7833C001763CE /* inline_pass.cpp */; };
+		A9C2F29522E7833D001763CE /* def_use_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03322E7833C001763CE /* def_use_manager.h */; };
+		A9C2F29622E7833D001763CE /* def_use_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03322E7833C001763CE /* def_use_manager.h */; };
+		A9C2F29722E7833D001763CE /* ir_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03422E7833C001763CE /* ir_loader.cpp */; };
+		A9C2F29822E7833D001763CE /* ir_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03422E7833C001763CE /* ir_loader.cpp */; };
+		A9C2F29922E7833D001763CE /* cfg_cleanup_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03522E7833C001763CE /* cfg_cleanup_pass.h */; };
+		A9C2F29A22E7833D001763CE /* cfg_cleanup_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03522E7833C001763CE /* cfg_cleanup_pass.h */; };
+		A9C2F29B22E7833D001763CE /* licm_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03622E7833C001763CE /* licm_pass.cpp */; };
+		A9C2F29C22E7833D001763CE /* licm_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03622E7833C001763CE /* licm_pass.cpp */; };
+		A9C2F29D22E7833D001763CE /* eliminate_dead_functions_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03722E7833C001763CE /* eliminate_dead_functions_pass.cpp */; };
+		A9C2F29E22E7833D001763CE /* eliminate_dead_functions_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03722E7833C001763CE /* eliminate_dead_functions_pass.cpp */; };
+		A9C2F29F22E7833D001763CE /* local_redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03822E7833C001763CE /* local_redundancy_elimination.h */; };
+		A9C2F2A022E7833D001763CE /* local_redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03822E7833C001763CE /* local_redundancy_elimination.h */; };
+		A9C2F2A122E7833D001763CE /* split_invalid_unreachable_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03922E7833C001763CE /* split_invalid_unreachable_pass.cpp */; };
+		A9C2F2A222E7833D001763CE /* split_invalid_unreachable_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03922E7833C001763CE /* split_invalid_unreachable_pass.cpp */; };
+		A9C2F2A322E7833D001763CE /* loop_peeling.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03A22E7833C001763CE /* loop_peeling.h */; };
+		A9C2F2A422E7833D001763CE /* loop_peeling.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03A22E7833C001763CE /* loop_peeling.h */; };
+		A9C2F2A522E7833D001763CE /* vector_dce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03B22E7833C001763CE /* vector_dce.cpp */; };
+		A9C2F2A622E7833D001763CE /* vector_dce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03B22E7833C001763CE /* vector_dce.cpp */; };
+		A9C2F2A722E7833D001763CE /* block_merge_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03C22E7833C001763CE /* block_merge_util.h */; };
+		A9C2F2A822E7833D001763CE /* block_merge_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03C22E7833C001763CE /* block_merge_util.h */; };
+		A9C2F2A922E7833D001763CE /* loop_unroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03D22E7833C001763CE /* loop_unroller.cpp */; };
+		A9C2F2AA22E7833D001763CE /* loop_unroller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03D22E7833C001763CE /* loop_unroller.cpp */; };
+		A9C2F2AB22E7833D001763CE /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03E22E7833C001763CE /* constants.cpp */; };
+		A9C2F2AC22E7833D001763CE /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F03E22E7833C001763CE /* constants.cpp */; };
+		A9C2F2AD22E7833D001763CE /* loop_fusion_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03F22E7833C001763CE /* loop_fusion_pass.h */; };
+		A9C2F2AE22E7833D001763CE /* loop_fusion_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F03F22E7833C001763CE /* loop_fusion_pass.h */; };
+		A9C2F2AF22E7833D001763CE /* struct_cfg_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04022E7833C001763CE /* struct_cfg_analysis.h */; };
+		A9C2F2B022E7833D001763CE /* struct_cfg_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04022E7833C001763CE /* struct_cfg_analysis.h */; };
+		A9C2F2B122E7833D001763CE /* def_use_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04122E7833C001763CE /* def_use_manager.cpp */; };
+		A9C2F2B222E7833D001763CE /* def_use_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04122E7833C001763CE /* def_use_manager.cpp */; };
+		A9C2F2B322E7833D001763CE /* strip_reflect_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04222E7833C001763CE /* strip_reflect_info_pass.cpp */; };
+		A9C2F2B422E7833D001763CE /* strip_reflect_info_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04222E7833C001763CE /* strip_reflect_info_pass.cpp */; };
+		A9C2F2B522E7833D001763CE /* decoration_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04322E7833C001763CE /* decoration_manager.h */; };
+		A9C2F2B622E7833D001763CE /* decoration_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04322E7833C001763CE /* decoration_manager.h */; };
+		A9C2F2B722E7833D001763CE /* ccp_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04422E7833C001763CE /* ccp_pass.cpp */; };
+		A9C2F2B822E7833D001763CE /* ccp_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04422E7833C001763CE /* ccp_pass.cpp */; };
+		A9C2F2B922E7833D001763CE /* process_lines_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04522E7833C001763CE /* process_lines_pass.h */; };
+		A9C2F2BA22E7833D001763CE /* process_lines_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04522E7833C001763CE /* process_lines_pass.h */; };
+		A9C2F2BB22E7833D001763CE /* local_single_block_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04622E7833C001763CE /* local_single_block_elim_pass.h */; };
+		A9C2F2BC22E7833D001763CE /* local_single_block_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04622E7833C001763CE /* local_single_block_elim_pass.h */; };
+		A9C2F2BD22E7833D001763CE /* pch_source_opt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04722E7833C001763CE /* pch_source_opt.cpp */; };
+		A9C2F2BE22E7833D001763CE /* pch_source_opt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04722E7833C001763CE /* pch_source_opt.cpp */; };
+		A9C2F2BF22E7833D001763CE /* strength_reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04822E7833C001763CE /* strength_reduction_pass.h */; };
+		A9C2F2C022E7833D001763CE /* strength_reduction_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04822E7833C001763CE /* strength_reduction_pass.h */; };
+		A9C2F2C122E7833D001763CE /* aggressive_dead_code_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04922E7833C001763CE /* aggressive_dead_code_elim_pass.cpp */; };
+		A9C2F2C222E7833D001763CE /* aggressive_dead_code_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04922E7833C001763CE /* aggressive_dead_code_elim_pass.cpp */; };
+		A9C2F2C322E7833D001763CE /* eliminate_dead_functions_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04A22E7833C001763CE /* eliminate_dead_functions_util.cpp */; };
+		A9C2F2C422E7833D001763CE /* eliminate_dead_functions_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04A22E7833C001763CE /* eliminate_dead_functions_util.cpp */; };
+		A9C2F2C522E7833D001763CE /* simplification_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04B22E7833C001763CE /* simplification_pass.cpp */; };
+		A9C2F2C622E7833D001763CE /* simplification_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04B22E7833C001763CE /* simplification_pass.cpp */; };
+		A9C2F2C722E7833D001763CE /* dead_branch_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04C22E7833C001763CE /* dead_branch_elim_pass.cpp */; };
+		A9C2F2C822E7833D001763CE /* dead_branch_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04C22E7833C001763CE /* dead_branch_elim_pass.cpp */; };
+		A9C2F2C922E7833D001763CE /* flatten_decoration_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04D22E7833C001763CE /* flatten_decoration_pass.cpp */; };
+		A9C2F2CA22E7833D001763CE /* flatten_decoration_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04D22E7833C001763CE /* flatten_decoration_pass.cpp */; };
+		A9C2F2CB22E7833D001763CE /* dead_insert_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04E22E7833C001763CE /* dead_insert_elim_pass.h */; };
+		A9C2F2CC22E7833D001763CE /* dead_insert_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F04E22E7833C001763CE /* dead_insert_elim_pass.h */; };
+		A9C2F2CD22E7833D001763CE /* folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04F22E7833C001763CE /* folding_rules.cpp */; };
+		A9C2F2CE22E7833D001763CE /* folding_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F04F22E7833C001763CE /* folding_rules.cpp */; };
+		A9C2F2CF22E7833D001763CE /* freeze_spec_constant_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05022E7833C001763CE /* freeze_spec_constant_value_pass.h */; };
+		A9C2F2D022E7833D001763CE /* freeze_spec_constant_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05022E7833C001763CE /* freeze_spec_constant_value_pass.h */; };
+		A9C2F2D122E7833D001763CE /* ir_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05122E7833C001763CE /* ir_context.cpp */; };
+		A9C2F2D222E7833D001763CE /* ir_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05122E7833C001763CE /* ir_context.cpp */; };
+		A9C2F2D322E7833D001763CE /* instrument_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05222E7833C001763CE /* instrument_pass.h */; };
+		A9C2F2D422E7833D001763CE /* instrument_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05222E7833C001763CE /* instrument_pass.h */; };
+		A9C2F2D522E7833D001763CE /* mem_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05322E7833C001763CE /* mem_pass.h */; };
+		A9C2F2D622E7833D001763CE /* mem_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05322E7833C001763CE /* mem_pass.h */; };
+		A9C2F2D722E7833D001763CE /* loop_descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05422E7833C001763CE /* loop_descriptor.cpp */; };
+		A9C2F2D822E7833D001763CE /* loop_descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05422E7833C001763CE /* loop_descriptor.cpp */; };
+		A9C2F2D922E7833D001763CE /* local_ssa_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05522E7833C001763CE /* local_ssa_elim_pass.cpp */; };
+		A9C2F2DA22E7833D001763CE /* local_ssa_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05522E7833C001763CE /* local_ssa_elim_pass.cpp */; };
+		A9C2F2DB22E7833D001763CE /* eliminate_dead_members_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05622E7833C001763CE /* eliminate_dead_members_pass.h */; };
+		A9C2F2DC22E7833D001763CE /* eliminate_dead_members_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05622E7833C001763CE /* eliminate_dead_members_pass.h */; };
+		A9C2F2DD22E7833D001763CE /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05722E7833C001763CE /* function.cpp */; };
+		A9C2F2DE22E7833D001763CE /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05722E7833C001763CE /* function.cpp */; };
+		A9C2F2DF22E7833D001763CE /* instruction_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05822E7833C001763CE /* instruction_list.cpp */; };
+		A9C2F2E022E7833D001763CE /* instruction_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05822E7833C001763CE /* instruction_list.cpp */; };
+		A9C2F2E122E7833D001763CE /* composite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05922E7833C001763CE /* composite.cpp */; };
+		A9C2F2E222E7833D001763CE /* composite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05922E7833C001763CE /* composite.cpp */; };
+		A9C2F2E322E7833D001763CE /* process_lines_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05A22E7833C001763CE /* process_lines_pass.cpp */; };
+		A9C2F2E422E7833D001763CE /* process_lines_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05A22E7833C001763CE /* process_lines_pass.cpp */; };
+		A9C2F2E522E7833D001763CE /* inline_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05B22E7833C001763CE /* inline_pass.h */; };
+		A9C2F2E622E7833D001763CE /* inline_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05B22E7833C001763CE /* inline_pass.h */; };
+		A9C2F2E722E7833D001763CE /* loop_dependence.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05C22E7833C001763CE /* loop_dependence.h */; };
+		A9C2F2E822E7833D001763CE /* loop_dependence.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05C22E7833C001763CE /* loop_dependence.h */; };
+		A9C2F2E922E7833D001763CE /* value_number_table.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05D22E7833C001763CE /* value_number_table.h */; };
+		A9C2F2EA22E7833D001763CE /* value_number_table.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05D22E7833C001763CE /* value_number_table.h */; };
+		A9C2F2EB22E7833D001763CE /* flatten_decoration_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05E22E7833C001763CE /* flatten_decoration_pass.h */; };
+		A9C2F2EC22E7833D001763CE /* flatten_decoration_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F05E22E7833C001763CE /* flatten_decoration_pass.h */; };
+		A9C2F2ED22E7833D001763CE /* if_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05F22E7833C001763CE /* if_conversion.cpp */; };
+		A9C2F2EE22E7833D001763CE /* if_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F05F22E7833C001763CE /* if_conversion.cpp */; };
+		A9C2F2EF22E7833D001763CE /* inline_exhaustive_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06022E7833C001763CE /* inline_exhaustive_pass.h */; };
+		A9C2F2F022E7833D001763CE /* inline_exhaustive_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06022E7833C001763CE /* inline_exhaustive_pass.h */; };
+		A9C2F2F122E7833D001763CE /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06122E7833C001763CE /* constants.h */; };
+		A9C2F2F222E7833D001763CE /* constants.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06122E7833C001763CE /* constants.h */; };
+		A9C2F2F322E7833D001763CE /* eliminate_dead_members_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06222E7833C001763CE /* eliminate_dead_members_pass.cpp */; };
+		A9C2F2F422E7833D001763CE /* eliminate_dead_members_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06222E7833C001763CE /* eliminate_dead_members_pass.cpp */; };
+		A9C2F2F522E7833D001763CE /* strength_reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06322E7833C001763CE /* strength_reduction_pass.cpp */; };
+		A9C2F2F622E7833D001763CE /* strength_reduction_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06322E7833C001763CE /* strength_reduction_pass.cpp */; };
+		A9C2F2F722E7833D001763CE /* block_merge_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06422E7833C001763CE /* block_merge_util.cpp */; };
+		A9C2F2F822E7833D001763CE /* block_merge_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06422E7833C001763CE /* block_merge_util.cpp */; };
+		A9C2F2F922E7833D001763CE /* upgrade_memory_model.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06522E7833C001763CE /* upgrade_memory_model.h */; };
+		A9C2F2FA22E7833D001763CE /* upgrade_memory_model.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06522E7833C001763CE /* upgrade_memory_model.h */; };
+		A9C2F2FB22E7833D001763CE /* copy_prop_arrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06622E7833C001763CE /* copy_prop_arrays.cpp */; };
+		A9C2F2FC22E7833D001763CE /* copy_prop_arrays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06622E7833C001763CE /* copy_prop_arrays.cpp */; };
+		A9C2F2FD22E7833D001763CE /* pass_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06722E7833C001763CE /* pass_manager.cpp */; };
+		A9C2F2FE22E7833D001763CE /* pass_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06722E7833C001763CE /* pass_manager.cpp */; };
+		A9C2F2FF22E7833D001763CE /* inline_exhaustive_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06822E7833C001763CE /* inline_exhaustive_pass.cpp */; };
+		A9C2F30022E7833D001763CE /* inline_exhaustive_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06822E7833C001763CE /* inline_exhaustive_pass.cpp */; };
+		A9C2F30122E7833D001763CE /* loop_fission.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06922E7833C001763CE /* loop_fission.h */; };
+		A9C2F30222E7833D001763CE /* loop_fission.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06922E7833C001763CE /* loop_fission.h */; };
+		A9C2F30322E7833D001763CE /* workaround1209.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06A22E7833C001763CE /* workaround1209.h */; };
+		A9C2F30422E7833D001763CE /* workaround1209.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06A22E7833C001763CE /* workaround1209.h */; };
+		A9C2F30522E7833D001763CE /* loop_fusion_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06B22E7833C001763CE /* loop_fusion_pass.cpp */; };
+		A9C2F30622E7833D001763CE /* loop_fusion_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F06B22E7833C001763CE /* loop_fusion_pass.cpp */; };
+		A9C2F30722E7833D001763CE /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06C22E7833C001763CE /* log.h */; };
+		A9C2F30822E7833D001763CE /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06C22E7833C001763CE /* log.h */; };
+		A9C2F30922E7833D001763CE /* split_invalid_unreachable_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06D22E7833C001763CE /* split_invalid_unreachable_pass.h */; };
+		A9C2F30A22E7833D001763CE /* split_invalid_unreachable_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06D22E7833C001763CE /* split_invalid_unreachable_pass.h */; };
+		A9C2F30B22E7833D001763CE /* copy_prop_arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06E22E7833C001763CE /* copy_prop_arrays.h */; };
+		A9C2F30C22E7833D001763CE /* copy_prop_arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06E22E7833C001763CE /* copy_prop_arrays.h */; };
+		A9C2F30D22E7833D001763CE /* eliminate_dead_constant_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06F22E7833C001763CE /* eliminate_dead_constant_pass.h */; };
+		A9C2F30E22E7833D001763CE /* eliminate_dead_constant_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F06F22E7833C001763CE /* eliminate_dead_constant_pass.h */; };
+		A9C2F30F22E7833D001763CE /* dead_insert_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07022E7833C001763CE /* dead_insert_elim_pass.cpp */; };
+		A9C2F31022E7833D001763CE /* dead_insert_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07022E7833C001763CE /* dead_insert_elim_pass.cpp */; };
+		A9C2F31122E7833D001763CE /* ssa_rewrite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07122E7833C001763CE /* ssa_rewrite_pass.h */; };
+		A9C2F31222E7833D001763CE /* ssa_rewrite_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07122E7833C001763CE /* ssa_rewrite_pass.h */; };
+		A9C2F31322E7833D001763CE /* scalar_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07222E7833C001763CE /* scalar_analysis.cpp */; };
+		A9C2F31422E7833D001763CE /* scalar_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07222E7833C001763CE /* scalar_analysis.cpp */; };
+		A9C2F31522E7833D001763CE /* dead_variable_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07322E7833C001763CE /* dead_variable_elimination.h */; };
+		A9C2F31622E7833D001763CE /* dead_variable_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07322E7833C001763CE /* dead_variable_elimination.h */; };
+		A9C2F31722E7833D001763CE /* block_merge_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07422E7833C001763CE /* block_merge_pass.cpp */; };
+		A9C2F31822E7833D001763CE /* block_merge_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07422E7833C001763CE /* block_merge_pass.cpp */; };
+		A9C2F31922E7833D001763CE /* dominator_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07522E7833C001763CE /* dominator_analysis.h */; };
+		A9C2F31A22E7833D001763CE /* dominator_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07522E7833C001763CE /* dominator_analysis.h */; };
+		A9C2F31B22E7833D001763CE /* pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07622E7833C001763CE /* pass.h */; };
+		A9C2F31C22E7833D001763CE /* pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07622E7833C001763CE /* pass.h */; };
+		A9C2F31D22E7833D001763CE /* folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07722E7833C001763CE /* folding_rules.h */; };
+		A9C2F31E22E7833D001763CE /* folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07722E7833C001763CE /* folding_rules.h */; };
+		A9C2F31F22E7833D001763CE /* eliminate_dead_functions_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07822E7833C001763CE /* eliminate_dead_functions_pass.h */; };
+		A9C2F32022E7833D001763CE /* eliminate_dead_functions_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07822E7833C001763CE /* eliminate_dead_functions_pass.h */; };
+		A9C2F32122E7833D001763CE /* eliminate_dead_functions_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07922E7833C001763CE /* eliminate_dead_functions_util.h */; };
+		A9C2F32222E7833D001763CE /* eliminate_dead_functions_util.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07922E7833C001763CE /* eliminate_dead_functions_util.h */; };
+		A9C2F32322E7833D001763CE /* fold.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07A22E7833C001763CE /* fold.h */; };
+		A9C2F32422E7833D001763CE /* fold.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07A22E7833C001763CE /* fold.h */; };
+		A9C2F32522E7833D001763CE /* local_single_store_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07B22E7833C001763CE /* local_single_store_elim_pass.cpp */; };
+		A9C2F32622E7833D001763CE /* local_single_store_elim_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07B22E7833C001763CE /* local_single_store_elim_pass.cpp */; };
+		A9C2F32722E7833D001763CE /* dead_branch_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07C22E7833C001763CE /* dead_branch_elim_pass.h */; };
+		A9C2F32822E7833D001763CE /* dead_branch_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07C22E7833C001763CE /* dead_branch_elim_pass.h */; };
+		A9C2F32922E7833D001763CE /* private_to_local_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07D22E7833C001763CE /* private_to_local_pass.cpp */; };
+		A9C2F32A22E7833D001763CE /* private_to_local_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07D22E7833C001763CE /* private_to_local_pass.cpp */; };
+		A9C2F32B22E7833D001763CE /* scalar_analysis_nodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07E22E7833C001763CE /* scalar_analysis_nodes.h */; };
+		A9C2F32C22E7833D001763CE /* scalar_analysis_nodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F07E22E7833C001763CE /* scalar_analysis_nodes.h */; };
+		A9C2F32D22E7833D001763CE /* propagator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07F22E7833C001763CE /* propagator.cpp */; };
+		A9C2F32E22E7833D001763CE /* propagator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F07F22E7833C001763CE /* propagator.cpp */; };
+		A9C2F32F22E7833D001763CE /* fix_storage_class.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08022E7833C001763CE /* fix_storage_class.h */; };
+		A9C2F33022E7833D001763CE /* fix_storage_class.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08022E7833C001763CE /* fix_storage_class.h */; };
+		A9C2F33122E7833D001763CE /* loop_dependence_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08122E7833C001763CE /* loop_dependence_helpers.cpp */; };
+		A9C2F33222E7833D001763CE /* loop_dependence_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08122E7833C001763CE /* loop_dependence_helpers.cpp */; };
+		A9C2F33322E7833D001763CE /* set_spec_constant_default_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08222E7833C001763CE /* set_spec_constant_default_value_pass.cpp */; };
+		A9C2F33422E7833D001763CE /* set_spec_constant_default_value_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08222E7833C001763CE /* set_spec_constant_default_value_pass.cpp */; };
+		A9C2F33522E7833D001763CE /* passes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08322E7833C001763CE /* passes.h */; };
+		A9C2F33622E7833D001763CE /* passes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08322E7833C001763CE /* passes.h */; };
+		A9C2F33722E7833D001763CE /* fold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08422E7833C001763CE /* fold.cpp */; };
+		A9C2F33822E7833D001763CE /* fold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08422E7833C001763CE /* fold.cpp */; };
+		A9C2F33922E7833D001763CE /* strip_reflect_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08522E7833C001763CE /* strip_reflect_info_pass.h */; };
+		A9C2F33A22E7833D001763CE /* strip_reflect_info_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08522E7833C001763CE /* strip_reflect_info_pass.h */; };
+		A9C2F33B22E7833D001763CE /* scalar_replacement_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08622E7833C001763CE /* scalar_replacement_pass.cpp */; };
+		A9C2F33C22E7833D001763CE /* scalar_replacement_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08622E7833C001763CE /* scalar_replacement_pass.cpp */; };
+		A9C2F33D22E7833D001763CE /* simplification_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08722E7833C001763CE /* simplification_pass.h */; };
+		A9C2F33E22E7833D001763CE /* simplification_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08722E7833C001763CE /* simplification_pass.h */; };
+		A9C2F33F22E7833D001763CE /* remove_duplicates_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08822E7833C001763CE /* remove_duplicates_pass.h */; };
+		A9C2F34022E7833D001763CE /* remove_duplicates_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08822E7833C001763CE /* remove_duplicates_pass.h */; };
+		A9C2F34122E7833D001763CE /* redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08922E7833C001763CE /* redundancy_elimination.cpp */; };
+		A9C2F34222E7833D001763CE /* redundancy_elimination.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08922E7833C001763CE /* redundancy_elimination.cpp */; };
+		A9C2F34322E7833D001763CE /* reflect.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08A22E7833C001763CE /* reflect.h */; };
+		A9C2F34422E7833D001763CE /* reflect.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08A22E7833C001763CE /* reflect.h */; };
+		A9C2F34522E7833D001763CE /* workaround1209.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08B22E7833C001763CE /* workaround1209.cpp */; };
+		A9C2F34622E7833D001763CE /* workaround1209.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08B22E7833C001763CE /* workaround1209.cpp */; };
+		A9C2F34722E7833D001763CE /* null_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08C22E7833C001763CE /* null_pass.h */; };
+		A9C2F34822E7833D001763CE /* null_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08C22E7833C001763CE /* null_pass.h */; };
+		A9C2F34922E7833D001763CE /* const_folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08D22E7833C001763CE /* const_folding_rules.h */; };
+		A9C2F34A22E7833D001763CE /* const_folding_rules.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08D22E7833C001763CE /* const_folding_rules.h */; };
+		A9C2F34B22E7833D001763CE /* scalar_replacement_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08E22E7833C001763CE /* scalar_replacement_pass.h */; };
+		A9C2F34C22E7833D001763CE /* scalar_replacement_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F08E22E7833C001763CE /* scalar_replacement_pass.h */; };
+		A9C2F34D22E7833D001763CE /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08F22E7833C001763CE /* instruction.cpp */; };
+		A9C2F34E22E7833D001763CE /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F08F22E7833C001763CE /* instruction.cpp */; };
+		A9C2F34F22E7833D001763CE /* pch_source_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09022E7833C001763CE /* pch_source_opt.h */; };
+		A9C2F35022E7833D001763CE /* pch_source_opt.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09022E7833C001763CE /* pch_source_opt.h */; };
+		A9C2F35122E7833D001763CE /* reduce_load_size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09122E7833C001763CE /* reduce_load_size.cpp */; };
+		A9C2F35222E7833D001763CE /* reduce_load_size.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09122E7833C001763CE /* reduce_load_size.cpp */; };
+		A9C2F35322E7833D001763CE /* redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09222E7833C001763CE /* redundancy_elimination.h */; };
+		A9C2F35422E7833D001763CE /* redundancy_elimination.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09222E7833C001763CE /* redundancy_elimination.h */; };
+		A9C2F35522E7833D001763CE /* fix_storage_class.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09322E7833C001763CE /* fix_storage_class.cpp */; };
+		A9C2F35622E7833D001763CE /* fix_storage_class.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09322E7833C001763CE /* fix_storage_class.cpp */; };
+		A9C2F35722E7833D001763CE /* value_number_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09422E7833C001763CE /* value_number_table.cpp */; };
+		A9C2F35822E7833D001763CE /* value_number_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09422E7833C001763CE /* value_number_table.cpp */; };
+		A9C2F35922E7833D001763CE /* local_ssa_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09522E7833C001763CE /* local_ssa_elim_pass.h */; };
+		A9C2F35A22E7833D001763CE /* local_ssa_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09522E7833C001763CE /* local_ssa_elim_pass.h */; };
+		A9C2F35B22E7833D001763CE /* inline_opaque_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09622E7833C001763CE /* inline_opaque_pass.cpp */; };
+		A9C2F35C22E7833D001763CE /* inline_opaque_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09622E7833C001763CE /* inline_opaque_pass.cpp */; };
+		A9C2F35D22E7833D001763CE /* replace_invalid_opc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09722E7833C001763CE /* replace_invalid_opc.cpp */; };
+		A9C2F35E22E7833D001763CE /* replace_invalid_opc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09722E7833C001763CE /* replace_invalid_opc.cpp */; };
+		A9C2F35F22E7833D001763CE /* loop_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09822E7833C001763CE /* loop_utils.h */; };
+		A9C2F36022E7833D001763CE /* loop_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09822E7833C001763CE /* loop_utils.h */; };
+		A9C2F36122E7833D001763CE /* module.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09922E7833C001763CE /* module.h */; };
+		A9C2F36222E7833D001763CE /* module.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09922E7833C001763CE /* module.h */; };
+		A9C2F36322E7833D001763CE /* dominator_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09A22E7833C001763CE /* dominator_analysis.cpp */; };
+		A9C2F36422E7833D001763CE /* dominator_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09A22E7833C001763CE /* dominator_analysis.cpp */; };
+		A9C2F36522E7833D001763CE /* decompose_initialized_variables_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09B22E7833C001763CE /* decompose_initialized_variables_pass.cpp */; };
+		A9C2F36622E7833D001763CE /* decompose_initialized_variables_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F09B22E7833C001763CE /* decompose_initialized_variables_pass.cpp */; };
+		A9C2F36722E7833D001763CE /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09C22E7833C001763CE /* ir_builder.h */; };
+		A9C2F36822E7833D001763CE /* ir_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09C22E7833C001763CE /* ir_builder.h */; };
+		A9C2F36922E7833D001763CE /* loop_unswitch_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09D22E7833C001763CE /* loop_unswitch_pass.h */; };
+		A9C2F36A22E7833D001763CE /* loop_unswitch_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09D22E7833C001763CE /* loop_unswitch_pass.h */; };
+		A9C2F36B22E7833D001763CE /* cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09E22E7833C001763CE /* cfg.h */; };
+		A9C2F36C22E7833D001763CE /* cfg.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09E22E7833C001763CE /* cfg.h */; };
+		A9C2F36D22E7833D001763CE /* code_sink.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09F22E7833C001763CE /* code_sink.h */; };
+		A9C2F36E22E7833D001763CE /* code_sink.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F09F22E7833C001763CE /* code_sink.h */; };
+		A9C2F36F22E7833D001763CE /* loop_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A022E7833C001763CE /* loop_descriptor.h */; };
+		A9C2F37022E7833D001763CE /* loop_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A022E7833C001763CE /* loop_descriptor.h */; };
+		A9C2F37122E7833D001763CE /* generate_webgpu_initializers_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A122E7833C001763CE /* generate_webgpu_initializers_pass.h */; };
+		A9C2F37222E7833D001763CE /* generate_webgpu_initializers_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A122E7833C001763CE /* generate_webgpu_initializers_pass.h */; };
+		A9C2F37322E7833D001763CE /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A222E7833C001763CE /* instruction.h */; };
+		A9C2F37422E7833D001763CE /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A222E7833C001763CE /* instruction.h */; };
+		A9C2F37522E7833D001763CE /* aggressive_dead_code_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A322E7833C001763CE /* aggressive_dead_code_elim_pass.h */; };
+		A9C2F37622E7833D001763CE /* aggressive_dead_code_elim_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A322E7833C001763CE /* aggressive_dead_code_elim_pass.h */; };
+		A9C2F37722E7833D001763CE /* struct_cfg_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0A422E7833C001763CE /* struct_cfg_analysis.cpp */; };
+		A9C2F37822E7833D001763CE /* struct_cfg_analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0A422E7833C001763CE /* struct_cfg_analysis.cpp */; };
+		A9C2F37922E7833D001763CE /* vector_dce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A522E7833C001763CE /* vector_dce.h */; };
+		A9C2F37A22E7833D001763CE /* vector_dce.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A522E7833C001763CE /* vector_dce.h */; };
+		A9C2F37B22E7833D001763CE /* combine_access_chains.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A622E7833C001763CE /* combine_access_chains.h */; };
+		A9C2F37C22E7833D001763CE /* combine_access_chains.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A622E7833C001763CE /* combine_access_chains.h */; };
+		A9C2F37D22E7833D001763CE /* pass_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A722E7833C001763CE /* pass_manager.h */; };
+		A9C2F37E22E7833D001763CE /* pass_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0A722E7833C001763CE /* pass_manager.h */; };
+		A9C2F37F22E7833D001763CE /* local_access_chain_convert_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0A822E7833C001763CE /* local_access_chain_convert_pass.cpp */; };
+		A9C2F38022E7833D001763CE /* local_access_chain_convert_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0A822E7833C001763CE /* local_access_chain_convert_pass.cpp */; };
+		A9C2F38122E7833D001763CE /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0A922E7833C001763CE /* basic_block.cpp */; };
+		A9C2F38222E7833D001763CE /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0A922E7833C001763CE /* basic_block.cpp */; };
+		A9C2F38322E7833D001763CE /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AA22E7833C001763CE /* iterator.h */; };
+		A9C2F38422E7833D001763CE /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AA22E7833C001763CE /* iterator.h */; };
+		A9C2F38522E7833D001763CE /* licm_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AB22E7833C001763CE /* licm_pass.h */; };
+		A9C2F38622E7833D001763CE /* licm_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AB22E7833C001763CE /* licm_pass.h */; };
+		A9C2F38722E7833D001763CE /* build_module.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AC22E7833C001763CE /* build_module.h */; };
+		A9C2F38822E7833D001763CE /* build_module.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AC22E7833C001763CE /* build_module.h */; };
+		A9C2F38922E7833D001763CE /* ccp_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AD22E7833C001763CE /* ccp_pass.h */; };
+		A9C2F38A22E7833D001763CE /* ccp_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AD22E7833C001763CE /* ccp_pass.h */; };
+		A9C2F38B22E7833D001763CE /* decompose_initialized_variables_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AE22E7833C001763CE /* decompose_initialized_variables_pass.h */; };
+		A9C2F38C22E7833D001763CE /* decompose_initialized_variables_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AE22E7833C001763CE /* decompose_initialized_variables_pass.h */; };
+		A9C2F38D22E7833D001763CE /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AF22E7833C001763CE /* function.h */; };
+		A9C2F38E22E7833D001763CE /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0AF22E7833C001763CE /* function.h */; };
+		A9C2F38F22E7833D001763CE /* loop_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B022E7833C001763CE /* loop_fusion.cpp */; };
+		A9C2F39022E7833D001763CE /* loop_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B022E7833C001763CE /* loop_fusion.cpp */; };
+		A9C2F39122E7833D001763CE /* upgrade_memory_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B122E7833C001763CE /* upgrade_memory_model.cpp */; };
+		A9C2F39222E7833D001763CE /* upgrade_memory_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B122E7833C001763CE /* upgrade_memory_model.cpp */; };
+		A9C2F39322E7833D001763CE /* feature_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B222E7833C001763CE /* feature_manager.h */; };
+		A9C2F39422E7833D001763CE /* feature_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B222E7833C001763CE /* feature_manager.h */; };
+		A9C2F39522E7833D001763CE /* inst_bindless_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B322E7833C001763CE /* inst_bindless_check_pass.h */; };
+		A9C2F39622E7833D001763CE /* inst_bindless_check_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B322E7833C001763CE /* inst_bindless_check_pass.h */; };
+		A9C2F39722E7833D001763CE /* scalar_analysis_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B422E7833C001763CE /* scalar_analysis_simplification.cpp */; };
+		A9C2F39822E7833D001763CE /* scalar_analysis_simplification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B422E7833C001763CE /* scalar_analysis_simplification.cpp */; };
+		A9C2F39922E7833D001763CE /* set_spec_constant_default_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B522E7833C001763CE /* set_spec_constant_default_value_pass.h */; };
+		A9C2F39A22E7833D001763CE /* set_spec_constant_default_value_pass.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B522E7833C001763CE /* set_spec_constant_default_value_pass.h */; };
+		A9C2F39B22E7833D001763CE /* dominator_tree.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B622E7833C001763CE /* dominator_tree.h */; };
+		A9C2F39C22E7833D001763CE /* dominator_tree.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B622E7833C001763CE /* dominator_tree.h */; };
+		A9C2F39D22E7833D001763CE /* legalize_vector_shuffle_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B722E7833C001763CE /* legalize_vector_shuffle_pass.cpp */; };
+		A9C2F39E22E7833D001763CE /* legalize_vector_shuffle_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B722E7833C001763CE /* legalize_vector_shuffle_pass.cpp */; };
+		A9C2F39F22E7833D001763CE /* type_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B822E7833C001763CE /* type_manager.h */; };
+		A9C2F3A022E7833D001763CE /* type_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0B822E7833C001763CE /* type_manager.h */; };
+		A9C2F3A122E7833D001763CE /* compact_ids_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B922E7833C001763CE /* compact_ids_pass.cpp */; };
+		A9C2F3A222E7833D001763CE /* compact_ids_pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0B922E7833C001763CE /* compact_ids_pass.cpp */; };
+		A9C2F3A322E7833D001763CE /* loop_peeling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0BA22E7833C001763CE /* loop_peeling.cpp */; };
+		A9C2F3A422E7833D001763CE /* loop_peeling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0BA22E7833C001763CE /* loop_peeling.cpp */; };
+		A9C2F3A522E7833D001763CE /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0BB22E7833C001763CE /* table.h */; };
+		A9C2F3A622E7833D001763CE /* table.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0BB22E7833C001763CE /* table.h */; };
+		A9C2F41B22E7833D001763CE /* ext_inst.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0F922E7833D001763CE /* ext_inst.h */; };
+		A9C2F41C22E7833D001763CE /* ext_inst.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0F922E7833D001763CE /* ext_inst.h */; };
+		A9C2F41D22E7833D001763CE /* diagnostic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0FA22E7833D001763CE /* diagnostic.cpp */; };
+		A9C2F41E22E7833D001763CE /* diagnostic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0FA22E7833D001763CE /* diagnostic.cpp */; };
+		A9C2F41F22E7833D001763CE /* latest_version_spirv_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FB22E7833D001763CE /* latest_version_spirv_header.h */; };
+		A9C2F42022E7833D001763CE /* latest_version_spirv_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FB22E7833D001763CE /* latest_version_spirv_header.h */; };
+		A9C2F42122E7833D001763CE /* libspirv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0FC22E7833D001763CE /* libspirv.cpp */; };
+		A9C2F42222E7833D001763CE /* libspirv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F0FC22E7833D001763CE /* libspirv.cpp */; };
+		A9C2F42322E7833D001763CE /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FD22E7833D001763CE /* instruction.h */; };
+		A9C2F42422E7833D001763CE /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FD22E7833D001763CE /* instruction.h */; };
+		A9C2F42522E7833D001763CE /* spirv_optimizer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FE22E7833D001763CE /* spirv_optimizer_options.h */; };
+		A9C2F42622E7833D001763CE /* spirv_optimizer_options.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FE22E7833D001763CE /* spirv_optimizer_options.h */; };
+		A9C2F42722E7833D001763CE /* opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FF22E7833D001763CE /* opcode.h */; };
+		A9C2F42822E7833D001763CE /* opcode.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F0FF22E7833D001763CE /* opcode.h */; };
+		A9C2F42922E7833D001763CE /* operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10022E7833D001763CE /* operand.cpp */; };
+		A9C2F42A22E7833D001763CE /* operand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10022E7833D001763CE /* operand.cpp */; };
+		A9C2F42B22E7833D001763CE /* latest_version_glsl_std_450_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10122E7833D001763CE /* latest_version_glsl_std_450_header.h */; };
+		A9C2F42C22E7833D001763CE /* latest_version_glsl_std_450_header.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10122E7833D001763CE /* latest_version_glsl_std_450_header.h */; };
+		A9C2F42D22E7833D001763CE /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10222E7833D001763CE /* extensions.h */; };
+		A9C2F42E22E7833D001763CE /* extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10222E7833D001763CE /* extensions.h */; };
+		A9C2F42F22E7833D001763CE /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10322E7833D001763CE /* disassemble.cpp */; };
+		A9C2F43022E7833D001763CE /* disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10322E7833D001763CE /* disassemble.cpp */; };
+		A9C2F43122E7833D001763CE /* binary.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10422E7833D001763CE /* binary.h */; };
+		A9C2F43222E7833D001763CE /* binary.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10422E7833D001763CE /* binary.h */; };
+		A9C2F43322E7833D001763CE /* text_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10522E7833D001763CE /* text_handler.cpp */; };
+		A9C2F43422E7833D001763CE /* text_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10522E7833D001763CE /* text_handler.cpp */; };
+		A9C2F43522E7833D001763CE /* validate_annotation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10722E7833D001763CE /* validate_annotation.cpp */; };
+		A9C2F43622E7833D001763CE /* validate_annotation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10722E7833D001763CE /* validate_annotation.cpp */; };
+		A9C2F43722E7833D001763CE /* validate_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10822E7833D001763CE /* validate_misc.cpp */; };
+		A9C2F43822E7833D001763CE /* validate_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10822E7833D001763CE /* validate_misc.cpp */; };
+		A9C2F43922E7833D001763CE /* validate_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10922E7833D001763CE /* validate_cfg.cpp */; };
+		A9C2F43A22E7833D001763CE /* validate_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10922E7833D001763CE /* validate_cfg.cpp */; };
+		A9C2F43B22E7833D001763CE /* validate_capability.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10A22E7833D001763CE /* validate_capability.cpp */; };
+		A9C2F43C22E7833D001763CE /* validate_capability.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10A22E7833D001763CE /* validate_capability.cpp */; };
+		A9C2F43D22E7833D001763CE /* construct.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10B22E7833D001763CE /* construct.h */; };
+		A9C2F43E22E7833D001763CE /* construct.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F10B22E7833D001763CE /* construct.h */; };
+		A9C2F43F22E7833D001763CE /* validate_barriers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10C22E7833D001763CE /* validate_barriers.cpp */; };
+		A9C2F44022E7833D001763CE /* validate_barriers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10C22E7833D001763CE /* validate_barriers.cpp */; };
+		A9C2F44122E7833D001763CE /* validate_non_uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10D22E7833D001763CE /* validate_non_uniform.cpp */; };
+		A9C2F44222E7833D001763CE /* validate_non_uniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10D22E7833D001763CE /* validate_non_uniform.cpp */; };
+		A9C2F44322E7833D001763CE /* validate_scopes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10E22E7833D001763CE /* validate_scopes.cpp */; };
+		A9C2F44422E7833D001763CE /* validate_scopes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10E22E7833D001763CE /* validate_scopes.cpp */; };
+		A9C2F44522E7833D001763CE /* validate_atomics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10F22E7833D001763CE /* validate_atomics.cpp */; };
+		A9C2F44622E7833D001763CE /* validate_atomics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F10F22E7833D001763CE /* validate_atomics.cpp */; };
+		A9C2F44722E7833D001763CE /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F11022E7833D001763CE /* basic_block.h */; };
+		A9C2F44822E7833D001763CE /* basic_block.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F11022E7833D001763CE /* basic_block.h */; };
+		A9C2F44922E7833D001763CE /* validate_instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11122E7833D001763CE /* validate_instruction.cpp */; };
+		A9C2F44A22E7833D001763CE /* validate_instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11122E7833D001763CE /* validate_instruction.cpp */; };
+		A9C2F44B22E7833D001763CE /* validate_decorations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11222E7833D001763CE /* validate_decorations.cpp */; };
+		A9C2F44C22E7833D001763CE /* validate_decorations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11222E7833D001763CE /* validate_decorations.cpp */; };
+		A9C2F44D22E7833D001763CE /* validate_debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11322E7833D001763CE /* validate_debug.cpp */; };
+		A9C2F44E22E7833D001763CE /* validate_debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11322E7833D001763CE /* validate_debug.cpp */; };
+		A9C2F44F22E7833D001763CE /* validate_builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11422E7833D001763CE /* validate_builtins.cpp */; };
+		A9C2F45022E7833D001763CE /* validate_builtins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11422E7833D001763CE /* validate_builtins.cpp */; };
+		A9C2F45122E7833D001763CE /* validate_interfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11522E7833D001763CE /* validate_interfaces.cpp */; };
+		A9C2F45222E7833D001763CE /* validate_interfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11522E7833D001763CE /* validate_interfaces.cpp */; };
+		A9C2F45322E7833D001763CE /* validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11622E7833D001763CE /* validate.cpp */; };
+		A9C2F45422E7833D001763CE /* validate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11622E7833D001763CE /* validate.cpp */; };
+		A9C2F45522E7833D001763CE /* validation_state.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F11722E7833D001763CE /* validation_state.h */; };
+		A9C2F45622E7833D001763CE /* validation_state.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F11722E7833D001763CE /* validation_state.h */; };
+		A9C2F45722E7833D001763CE /* validate_constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11822E7833D001763CE /* validate_constants.cpp */; };
+		A9C2F45822E7833D001763CE /* validate_constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11822E7833D001763CE /* validate_constants.cpp */; };
+		A9C2F45922E7833D001763CE /* validate_bitwise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11922E7833D001763CE /* validate_bitwise.cpp */; };
+		A9C2F45A22E7833D001763CE /* validate_bitwise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11922E7833D001763CE /* validate_bitwise.cpp */; };
+		A9C2F45B22E7833D001763CE /* validate_extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11A22E7833D001763CE /* validate_extensions.cpp */; };
+		A9C2F45C22E7833D001763CE /* validate_extensions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11A22E7833D001763CE /* validate_extensions.cpp */; };
+		A9C2F45D22E7833D001763CE /* construct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11B22E7833D001763CE /* construct.cpp */; };
+		A9C2F45E22E7833D001763CE /* construct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11B22E7833D001763CE /* construct.cpp */; };
+		A9C2F45F22E7833D001763CE /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11C22E7833D001763CE /* function.cpp */; };
+		A9C2F46022E7833D001763CE /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11C22E7833D001763CE /* function.cpp */; };
+		A9C2F46122E7833D001763CE /* validate.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F11D22E7833D001763CE /* validate.h */; };
+		A9C2F46222E7833D001763CE /* validate.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F11D22E7833D001763CE /* validate.h */; };
+		A9C2F46322E7833D001763CE /* validate_adjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11E22E7833D001763CE /* validate_adjacency.cpp */; };
+		A9C2F46422E7833D001763CE /* validate_adjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11E22E7833D001763CE /* validate_adjacency.cpp */; };
+		A9C2F46522E7833D001763CE /* validate_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11F22E7833D001763CE /* validate_conversion.cpp */; };
+		A9C2F46622E7833D001763CE /* validate_conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F11F22E7833D001763CE /* validate_conversion.cpp */; };
+		A9C2F46722E7833D001763CE /* validate_small_type_uses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12022E7833D001763CE /* validate_small_type_uses.cpp */; };
+		A9C2F46822E7833D001763CE /* validate_small_type_uses.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12022E7833D001763CE /* validate_small_type_uses.cpp */; };
+		A9C2F46922E7833D001763CE /* validate_datarules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12122E7833D001763CE /* validate_datarules.cpp */; };
+		A9C2F46A22E7833D001763CE /* validate_datarules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12122E7833D001763CE /* validate_datarules.cpp */; };
+		A9C2F46B22E7833D001763CE /* validate_scopes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F12222E7833D001763CE /* validate_scopes.h */; };
+		A9C2F46C22E7833D001763CE /* validate_scopes.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F12222E7833D001763CE /* validate_scopes.h */; };
+		A9C2F46D22E7833D001763CE /* validate_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12322E7833D001763CE /* validate_id.cpp */; };
+		A9C2F46E22E7833D001763CE /* validate_id.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12322E7833D001763CE /* validate_id.cpp */; };
+		A9C2F46F22E7833D001763CE /* validate_memory_semantics.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F12422E7833D001763CE /* validate_memory_semantics.h */; };
+		A9C2F47022E7833D001763CE /* validate_memory_semantics.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F12422E7833D001763CE /* validate_memory_semantics.h */; };
+		A9C2F47122E7833D001763CE /* validate_arithmetics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12522E7833D001763CE /* validate_arithmetics.cpp */; };
+		A9C2F47222E7833D001763CE /* validate_arithmetics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12522E7833D001763CE /* validate_arithmetics.cpp */; };
+		A9C2F47322E7833D001763CE /* validate_mode_setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12622E7833D001763CE /* validate_mode_setting.cpp */; };
+		A9C2F47422E7833D001763CE /* validate_mode_setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12622E7833D001763CE /* validate_mode_setting.cpp */; };
+		A9C2F47522E7833D001763CE /* validate_memory_semantics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12722E7833D001763CE /* validate_memory_semantics.cpp */; };
+		A9C2F47622E7833D001763CE /* validate_memory_semantics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12722E7833D001763CE /* validate_memory_semantics.cpp */; };
+		A9C2F47722E7833D001763CE /* validate_logicals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12822E7833D001763CE /* validate_logicals.cpp */; };
+		A9C2F47822E7833D001763CE /* validate_logicals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12822E7833D001763CE /* validate_logicals.cpp */; };
+		A9C2F47922E7833D001763CE /* validate_derivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12922E7833D001763CE /* validate_derivatives.cpp */; };
+		A9C2F47A22E7833D001763CE /* validate_derivatives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12922E7833D001763CE /* validate_derivatives.cpp */; };
+		A9C2F47B22E7833D001763CE /* validate_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12A22E7833D001763CE /* validate_memory.cpp */; };
+		A9C2F47C22E7833D001763CE /* validate_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12A22E7833D001763CE /* validate_memory.cpp */; };
+		A9C2F47D22E7833D001763CE /* validate_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12B22E7833D001763CE /* validate_image.cpp */; };
+		A9C2F47E22E7833D001763CE /* validate_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12B22E7833D001763CE /* validate_image.cpp */; };
+		A9C2F47F22E7833D001763CE /* validate_literals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12C22E7833D001763CE /* validate_literals.cpp */; };
+		A9C2F48022E7833D001763CE /* validate_literals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12C22E7833D001763CE /* validate_literals.cpp */; };
+		A9C2F48122E7833D001763CE /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12D22E7833D001763CE /* instruction.cpp */; };
+		A9C2F48222E7833D001763CE /* instruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12D22E7833D001763CE /* instruction.cpp */; };
+		A9C2F48322E7833D001763CE /* validate_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12E22E7833D001763CE /* validate_type.cpp */; };
+		A9C2F48422E7833D001763CE /* validate_type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F12E22E7833D001763CE /* validate_type.cpp */; };
+		A9C2F48522E7833D001763CE /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F12F22E7833D001763CE /* instruction.h */; };
+		A9C2F48622E7833D001763CE /* instruction.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F12F22E7833D001763CE /* instruction.h */; };
+		A9C2F48722E7833D001763CE /* validate_execution_limitations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13022E7833D001763CE /* validate_execution_limitations.cpp */; };
+		A9C2F48822E7833D001763CE /* validate_execution_limitations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13022E7833D001763CE /* validate_execution_limitations.cpp */; };
+		A9C2F48922E7833D001763CE /* validate_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13122E7833D001763CE /* validate_layout.cpp */; };
+		A9C2F48A22E7833D001763CE /* validate_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13122E7833D001763CE /* validate_layout.cpp */; };
+		A9C2F48B22E7833D001763CE /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13222E7833D001763CE /* basic_block.cpp */; };
+		A9C2F48C22E7833D001763CE /* basic_block.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13222E7833D001763CE /* basic_block.cpp */; };
+		A9C2F48D22E7833D001763CE /* validate_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13322E7833D001763CE /* validate_function.cpp */; };
+		A9C2F48E22E7833D001763CE /* validate_function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13322E7833D001763CE /* validate_function.cpp */; };
+		A9C2F48F22E7833D001763CE /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F13422E7833D001763CE /* function.h */; };
+		A9C2F49022E7833D001763CE /* function.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F13422E7833D001763CE /* function.h */; };
+		A9C2F49122E7833D001763CE /* validate_composites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13522E7833D001763CE /* validate_composites.cpp */; };
+		A9C2F49222E7833D001763CE /* validate_composites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13522E7833D001763CE /* validate_composites.cpp */; };
+		A9C2F49322E7833D001763CE /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13622E7833D001763CE /* validation_state.cpp */; };
+		A9C2F49422E7833D001763CE /* validation_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13622E7833D001763CE /* validation_state.cpp */; };
+		A9C2F49522E7833D001763CE /* validate_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13722E7833D001763CE /* validate_primitives.cpp */; };
+		A9C2F49622E7833D001763CE /* validate_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C2F13722E7833D001763CE /* validate_primitives.cpp */; };
+		A9C2F49722E7833D001763CE /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F13822E7833D001763CE /* decoration.h */; };
+		A9C2F49822E7833D001763CE /* decoration.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C2F13822E7833D001763CE /* decoration.h */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -1078,390 +1076,6 @@
 		450A4F64221C5A95007203D7 /* spirv_reflect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_reflect.cpp; sourceTree = "<group>"; };
 		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; };
-		A94A673E22B17BBB00C661C6 /* spirv_target_env.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_target_env.cpp; sourceTree = "<group>"; };
-		A94A673F22B17BBB00C661C6 /* 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>"; };
-		A94A674022B17BBB00C661C6 /* spirv_fuzzer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_fuzzer_options.h; sourceTree = "<group>"; };
-		A94A674122B17BBB00C661C6 /* assembly_grammar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assembly_grammar.h; sourceTree = "<group>"; };
-		A94A674222B17BBB00C661C6 /* enum_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum_set.h; sourceTree = "<group>"; };
-		A94A674322B17BBB00C661C6 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
-		A94A674422B17BBB00C661C6 /* extinst.spv-amd-shader-ballot.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-ballot.grammar.json"; sourceTree = "<group>"; };
-		A94A674522B17BBB00C661C6 /* text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text.cpp; sourceTree = "<group>"; };
-		A94A674622B17BBB00C661C6 /* assembly_grammar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = assembly_grammar.cpp; sourceTree = "<group>"; };
-		A94A674722B17BBB00C661C6 /* text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text.h; sourceTree = "<group>"; };
-		A94A674822B17BBB00C661C6 /* extensions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extensions.cpp; sourceTree = "<group>"; };
-		A94A674922B17BBB00C661C6 /* pch_source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source.cpp; sourceTree = "<group>"; };
-		A94A674B22B17BBB00C661C6 /* parse_number.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parse_number.h; sourceTree = "<group>"; };
-		A94A674C22B17BBB00C661C6 /* ilist_node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ilist_node.h; sourceTree = "<group>"; };
-		A94A674D22B17BBB00C661C6 /* make_unique.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = make_unique.h; sourceTree = "<group>"; };
-		A94A674E22B17BBB00C661C6 /* string_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = string_utils.h; sourceTree = "<group>"; };
-		A94A674F22B17BBB00C661C6 /* small_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = small_vector.h; sourceTree = "<group>"; };
-		A94A675022B17BBB00C661C6 /* timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = timer.cpp; sourceTree = "<group>"; };
-		A94A675122B17BBB00C661C6 /* timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timer.h; sourceTree = "<group>"; };
-		A94A675222B17BBB00C661C6 /* string_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = string_utils.cpp; sourceTree = "<group>"; };
-		A94A675322B17BBB00C661C6 /* bit_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bit_vector.h; sourceTree = "<group>"; };
-		A94A675422B17BBB00C661C6 /* bitutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitutils.h; sourceTree = "<group>"; };
-		A94A675522B17BBB00C661C6 /* hex_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hex_float.h; sourceTree = "<group>"; };
-		A94A675622B17BBB00C661C6 /* parse_number.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parse_number.cpp; sourceTree = "<group>"; };
-		A94A675722B17BBB00C661C6 /* bit_vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bit_vector.cpp; sourceTree = "<group>"; };
-		A94A675822B17BBB00C661C6 /* ilist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ilist.h; sourceTree = "<group>"; };
-		A94A675922B17BBB00C661C6 /* spirv_target_env.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_target_env.h; sourceTree = "<group>"; };
-		A94A675A22B17BBB00C661C6 /* table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = table.cpp; sourceTree = "<group>"; };
-		A94A675C22B17BBB00C661C6 /* 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>"; };
-		A94A675D22B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_selection_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A94A675E22B17BBB00C661C6 /* remove_block_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_block_reduction_opportunity.h; sourceTree = "<group>"; };
-		A94A675F22B17BBB00C661C6 /* 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>"; };
-		A94A676022B17BBB00C661C6 /* reduction_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_pass.cpp; sourceTree = "<group>"; };
-		A94A676122B17BBB00C661C6 /* 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>"; };
-		A94A676222B17BBB00C661C6 /* 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>"; };
-		A94A676322B17BBB00C661C6 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
-		A94A676422B17BBB00C661C6 /* reduction_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_util.cpp; sourceTree = "<group>"; };
-		A94A676522B17BBB00C661C6 /* 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>"; };
-		A94A676622B17BBB00C661C6 /* 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>"; };
-		A94A676722B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_function_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A94A676822B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_instruction_reduction_opportunity.h; sourceTree = "<group>"; };
-		A94A676922B17BBB00C661C6 /* 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>"; };
-		A94A676A22B17BBB00C661C6 /* 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>"; };
-		A94A676B22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_function_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A94A676C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_opname_instruction_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A94A676D22B17BBB00C661C6 /* 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>"; };
-		A94A676E22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_selection_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A94A676F22B17BBB00C661C6 /* 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>"; };
-		A94A677022B17BBB00C661C6 /* 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>"; };
-		A94A677122B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_blocks_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A94A677222B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = change_operand_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A94A677322B17BBB00C661C6 /* 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>"; };
-		A94A677422B17BBB00C661C6 /* remove_function_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_function_reduction_opportunity.h; sourceTree = "<group>"; };
-		A94A677522B17BBB00C661C6 /* 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>"; };
-		A94A677622B17BBB00C661C6 /* 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>"; };
-		A94A677722B17BBB00C661C6 /* 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>"; };
-		A94A677822B17BBB00C661C6 /* remove_selection_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_selection_reduction_opportunity.h; sourceTree = "<group>"; };
-		A94A677922B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_instruction_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A94A677A22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_selection_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A94A677B22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_blocks_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A94A677C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_opname_instruction_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A94A677D22B17BBB00C661C6 /* pch_source_reduce.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source_reduce.cpp; sourceTree = "<group>"; };
-		A94A677E22B17BBB00C661C6 /* reducer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reducer.cpp; sourceTree = "<group>"; };
-		A94A677F22B17BBB00C661C6 /* 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>"; };
-		A94A678022B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_function_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A94A678122B17BBB00C661C6 /* pch_source_reduce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source_reduce.h; sourceTree = "<group>"; };
-		A94A678222B17BBB00C661C6 /* 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>"; };
-		A94A678322B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_blocks_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A94A678422B17BBB00C661C6 /* reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A94A678522B17BBB00C661C6 /* reducer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reducer.h; sourceTree = "<group>"; };
-		A94A678622B17BBB00C661C6 /* 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>"; };
-		A94A678722B17BBB00C661C6 /* reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_opportunity.h; sourceTree = "<group>"; };
-		A94A678822B17BBB00C661C6 /* 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>"; };
-		A94A678922B17BBB00C661C6 /* 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>"; };
-		A94A678A22B17BBB00C661C6 /* reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A94A678B22B17BBB00C661C6 /* change_operand_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = change_operand_reduction_opportunity.h; sourceTree = "<group>"; };
-		A94A678C22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_block_reduction_opportunity_finder.h; sourceTree = "<group>"; };
-		A94A678D22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_block_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
-		A94A678E22B17BBB00C661C6 /* reduction_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_util.h; sourceTree = "<group>"; };
-		A94A678F22B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_blocks_reduction_opportunity.h; sourceTree = "<group>"; };
-		A94A679022B17BBB00C661C6 /* 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>"; };
-		A94A679122B17BBB00C661C6 /* 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>"; };
-		A94A679222B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_block_reduction_opportunity.cpp; sourceTree = "<group>"; };
-		A94A679322B17BBB00C661C6 /* reduction_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_pass.h; sourceTree = "<group>"; };
-		A94A679422B17BBB00C661C6 /* latest_version_opencl_std_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_opencl_std_header.h; sourceTree = "<group>"; };
-		A94A679522B17BBB00C661C6 /* spirv_optimizer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_optimizer_options.cpp; sourceTree = "<group>"; };
-		A94A679622B17BBB00C661C6 /* cfa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfa.h; sourceTree = "<group>"; };
-		A94A679722B17BBB00C661C6 /* pch_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source.h; sourceTree = "<group>"; };
-		A94A679822B17BBB00C661C6 /* enum_string_mapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum_string_mapping.h; sourceTree = "<group>"; };
-		A94A679922B17BBB00C661C6 /* spirv_fuzzer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_fuzzer_options.cpp; sourceTree = "<group>"; };
-		A94A679A22B17BBB00C661C6 /* spirv_reducer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_reducer_options.h; sourceTree = "<group>"; };
-		A94A679B22B17BBB00C661C6 /* spirv_validator_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_validator_options.cpp; sourceTree = "<group>"; };
-		A94A679C22B17BBB00C661C6 /* 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>"; };
-		A94A679D22B17BBB00C661C6 /* print.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = print.cpp; sourceTree = "<group>"; };
-		A94A679E22B17BBB00C661C6 /* spirv_definition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_definition.h; sourceTree = "<group>"; };
-		A94A679F22B17BBB00C661C6 /* operand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand.h; sourceTree = "<group>"; };
-		A94A67A022B17BBB00C661C6 /* spirv_endian.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_endian.cpp; sourceTree = "<group>"; };
-		A94A67A122B17BBB00C661C6 /* macro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = macro.h; sourceTree = "<group>"; };
-		A94A67A222B17BBB00C661C6 /* spirv_constant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_constant.h; sourceTree = "<group>"; };
-		A94A67A322B17BBB00C661C6 /* extinst.spv-amd-gcn-shader.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-gcn-shader.grammar.json"; sourceTree = "<group>"; };
-		A94A67A422B17BBB00C661C6 /* binary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = binary.cpp; sourceTree = "<group>"; };
-		A94A67A522B17BBB00C661C6 /* spirv_validator_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_validator_options.h; sourceTree = "<group>"; };
-		A94A67A622B17BBB00C661C6 /* enum_string_mapping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = enum_string_mapping.cpp; sourceTree = "<group>"; };
-		A94A67A722B17BBB00C661C6 /* text_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text_handler.h; sourceTree = "<group>"; };
-		A94A67A822B17BBB00C661C6 /* parsed_operand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parsed_operand.h; sourceTree = "<group>"; };
-		A94A67A922B17BBB00C661C6 /* name_mapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = name_mapper.h; sourceTree = "<group>"; };
-		A94A67AA22B17BBB00C661C6 /* spirv_reducer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_reducer_options.cpp; sourceTree = "<group>"; };
-		A94A67AB22B17BBB00C661C6 /* parsed_operand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parsed_operand.cpp; sourceTree = "<group>"; };
-		A94A67AC22B17BBB00C661C6 /* diagnostic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diagnostic.h; sourceTree = "<group>"; };
-		A94A67AD22B17BBB00C661C6 /* spirv_endian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_endian.h; sourceTree = "<group>"; };
-		A94A67AE22B17BBB00C661C6 /* name_mapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = name_mapper.cpp; sourceTree = "<group>"; };
-		A94A67AF22B17BBB00C661C6 /* extinst.debuginfo.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = extinst.debuginfo.grammar.json; sourceTree = "<group>"; };
-		A94A67B122B17BBB00C661C6 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
-		A94A67B222B17BBB00C661C6 /* linker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linker.cpp; sourceTree = "<group>"; };
-		A94A67B322B17BBB00C661C6 /* software_version.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = software_version.cpp; sourceTree = "<group>"; };
-		A94A67B422B17BBB00C661C6 /* opcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opcode.cpp; sourceTree = "<group>"; };
-		A94A67B522B17BBB00C661C6 /* print.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = print.h; sourceTree = "<group>"; };
-		A94A67B622B17BBB00C661C6 /* ext_inst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ext_inst.cpp; sourceTree = "<group>"; };
-		A94A67B722B17BBB00C661C6 /* disassemble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = disassemble.h; sourceTree = "<group>"; };
-		A94A67B922B17BBB00C661C6 /* optimizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = optimizer.cpp; sourceTree = "<group>"; };
-		A94A67BA22B17BBB00C661C6 /* if_conversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = if_conversion.h; sourceTree = "<group>"; };
-		A94A67BB22B17BBB00C661C6 /* register_pressure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = register_pressure.cpp; sourceTree = "<group>"; };
-		A94A67BC22B17BBB00C661C6 /* loop_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_utils.cpp; sourceTree = "<group>"; };
-		A94A67BD22B17BBB00C661C6 /* merge_return_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_return_pass.h; sourceTree = "<group>"; };
-		A94A67BE22B17BBB00C661C6 /* inline_opaque_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_opaque_pass.h; sourceTree = "<group>"; };
-		A94A67BF22B17BBB00C661C6 /* loop_fusion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fusion.h; sourceTree = "<group>"; };
-		A94A67C022B17BBB00C661C6 /* combine_access_chains.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = combine_access_chains.cpp; sourceTree = "<group>"; };
-		A94A67C122B17BBB00C661C6 /* build_module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = build_module.cpp; sourceTree = "<group>"; };
-		A94A67C222B17BBB00C661C6 /* composite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = composite.h; sourceTree = "<group>"; };
-		A94A67C322B17BBB00C661C6 /* compact_ids_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compact_ids_pass.h; sourceTree = "<group>"; };
-		A94A67C422B17BBB00C661C6 /* register_pressure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = register_pressure.h; sourceTree = "<group>"; };
-		A94A67C522B17BBB00C661C6 /* tree_iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree_iterator.h; sourceTree = "<group>"; };
-		A94A67C622B17BBB00C661C6 /* strip_atomic_counter_memory_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_atomic_counter_memory_pass.h; sourceTree = "<group>"; };
-		A94A67C722B17BBB00C661C6 /* legalize_vector_shuffle_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = legalize_vector_shuffle_pass.h; sourceTree = "<group>"; };
-		A94A67C822B17BBB00C661C6 /* local_single_store_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_single_store_elim_pass.h; sourceTree = "<group>"; };
-		A94A67C922B17BBB00C661C6 /* reduce_load_size.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduce_load_size.h; sourceTree = "<group>"; };
-		A94A67CA22B17BBB00C661C6 /* code_sink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = code_sink.cpp; sourceTree = "<group>"; };
-		A94A67CB22B17BBB00C661C6 /* types.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = types.cpp; sourceTree = "<group>"; };
-		A94A67CC22B17BBB00C661C6 /* scalar_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_analysis.h; sourceTree = "<group>"; };
-		A94A67CD22B17BBB00C661C6 /* strip_debug_info_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_debug_info_pass.h; sourceTree = "<group>"; };
-		A94A67CE22B17BBB00C661C6 /* cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfg.cpp; sourceTree = "<group>"; };
-		A94A67CF22B17BBB00C661C6 /* strip_atomic_counter_memory_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_atomic_counter_memory_pass.cpp; sourceTree = "<group>"; };
-		A94A67D022B17BBB00C661C6 /* decoration_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoration_manager.cpp; sourceTree = "<group>"; };
-		A94A67D122B17BBB00C661C6 /* local_single_block_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_single_block_elim_pass.cpp; sourceTree = "<group>"; };
-		A94A67D222B17BBB00C661C6 /* freeze_spec_constant_value_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = freeze_spec_constant_value_pass.cpp; sourceTree = "<group>"; };
-		A94A67D322B17BBB00C661C6 /* replace_invalid_opc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = replace_invalid_opc.h; sourceTree = "<group>"; };
-		A94A67D422B17BBB00C661C6 /* local_access_chain_convert_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_access_chain_convert_pass.h; sourceTree = "<group>"; };
-		A94A67D522B17BBB00C661C6 /* inst_bindless_check_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inst_bindless_check_pass.cpp; sourceTree = "<group>"; };
-		A94A67D622B17BBB00C661C6 /* local_redundancy_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_redundancy_elimination.cpp; sourceTree = "<group>"; };
-		A94A67D722B17BBB00C661C6 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
-		A94A67D822B17BBB00C661C6 /* instrument_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instrument_pass.cpp; sourceTree = "<group>"; };
-		A94A67D922B17BBB00C661C6 /* propagator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = propagator.h; sourceTree = "<group>"; };
-		A94A67DA22B17BBB00C661C6 /* instruction_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction_list.h; sourceTree = "<group>"; };
-		A94A67DB22B17BBB00C661C6 /* feature_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_manager.cpp; sourceTree = "<group>"; };
-		A94A67DC22B17BBB00C661C6 /* pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pass.cpp; sourceTree = "<group>"; };
-		A94A67DD22B17BBB00C661C6 /* loop_fission.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fission.cpp; sourceTree = "<group>"; };
-		A94A67DE22B17BBB00C661C6 /* dominator_tree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dominator_tree.cpp; sourceTree = "<group>"; };
-		A94A67DF22B17BBB00C661C6 /* merge_return_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_return_pass.cpp; sourceTree = "<group>"; };
-		A94A67E022B17BBB00C661C6 /* ir_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_context.h; sourceTree = "<group>"; };
-		A94A67E122B17BBB00C661C6 /* eliminate_dead_constant_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_constant_pass.cpp; sourceTree = "<group>"; };
-		A94A67E222B17BBB00C661C6 /* cfg_cleanup_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfg_cleanup_pass.cpp; sourceTree = "<group>"; };
-		A94A67E322B17BBB00C661C6 /* const_folding_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = const_folding_rules.cpp; sourceTree = "<group>"; };
-		A94A67E422B17BBB00C661C6 /* loop_unroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_unroller.h; sourceTree = "<group>"; };
-		A94A67E522B17BBB00C661C6 /* strip_debug_info_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_debug_info_pass.cpp; sourceTree = "<group>"; };
-		A94A67E622B17BBB00C661C6 /* ssa_rewrite_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ssa_rewrite_pass.cpp; sourceTree = "<group>"; };
-		A94A67E722B17BBB00C661C6 /* loop_dependence.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_dependence.cpp; sourceTree = "<group>"; };
-		A94A67E822B17BBB00C661C6 /* unify_const_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unify_const_pass.h; sourceTree = "<group>"; };
-		A94A67E922B17BBB00C661C6 /* ir_loader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_loader.h; sourceTree = "<group>"; };
-		A94A67EA22B17BBB00C661C6 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
-		A94A67EB22B17BBB00C661C6 /* 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>"; };
-		A94A67EC22B17BBB00C661C6 /* mem_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mem_pass.cpp; sourceTree = "<group>"; };
-		A94A67ED22B17BBB00C661C6 /* basic_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic_block.h; sourceTree = "<group>"; };
-		A94A67EE22B17BBB00C661C6 /* remove_duplicates_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_duplicates_pass.cpp; sourceTree = "<group>"; };
-		A94A67EF22B17BBB00C661C6 /* dead_variable_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_variable_elimination.cpp; sourceTree = "<group>"; };
-		A94A67F022B17BBB00C661C6 /* block_merge_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block_merge_pass.h; sourceTree = "<group>"; };
-		A94A67F122B17BBB00C661C6 /* module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = module.cpp; sourceTree = "<group>"; };
-		A94A67F222B17BBB00C661C6 /* 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>"; };
-		A94A67F322B17BBB00C661C6 /* loop_unswitch_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_unswitch_pass.cpp; sourceTree = "<group>"; };
-		A94A67F422B17BBB00C661C6 /* unify_const_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unify_const_pass.cpp; sourceTree = "<group>"; };
-		A94A67F522B17BBB00C661C6 /* type_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = type_manager.cpp; sourceTree = "<group>"; };
-		A94A67F622B17BBB00C661C6 /* generate_webgpu_initializers_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = generate_webgpu_initializers_pass.cpp; sourceTree = "<group>"; };
-		A94A67F722B17BBB00C661C6 /* private_to_local_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = private_to_local_pass.h; sourceTree = "<group>"; };
-		A94A67F822B17BBB00C661C6 /* inline_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_pass.cpp; sourceTree = "<group>"; };
-		A94A67F922B17BBB00C661C6 /* def_use_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = def_use_manager.h; sourceTree = "<group>"; };
-		A94A67FA22B17BBB00C661C6 /* ir_loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ir_loader.cpp; sourceTree = "<group>"; };
-		A94A67FB22B17BBB00C661C6 /* cfg_cleanup_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfg_cleanup_pass.h; sourceTree = "<group>"; };
-		A94A67FC22B17BBB00C661C6 /* licm_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = licm_pass.cpp; sourceTree = "<group>"; };
-		A94A67FD22B17BBB00C661C6 /* eliminate_dead_functions_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_functions_pass.cpp; sourceTree = "<group>"; };
-		A94A67FE22B17BBB00C661C6 /* local_redundancy_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_redundancy_elimination.h; sourceTree = "<group>"; };
-		A94A67FF22B17BBB00C661C6 /* split_invalid_unreachable_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = split_invalid_unreachable_pass.cpp; sourceTree = "<group>"; };
-		A94A680022B17BBB00C661C6 /* loop_peeling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_peeling.h; sourceTree = "<group>"; };
-		A94A680122B17BBB00C661C6 /* vector_dce.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vector_dce.cpp; sourceTree = "<group>"; };
-		A94A680222B17BBB00C661C6 /* block_merge_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block_merge_util.h; sourceTree = "<group>"; };
-		A94A680322B17BBB00C661C6 /* loop_unroller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_unroller.cpp; sourceTree = "<group>"; };
-		A94A680422B17BBB00C661C6 /* constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = constants.cpp; sourceTree = "<group>"; };
-		A94A680522B17BBB00C661C6 /* loop_fusion_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fusion_pass.h; sourceTree = "<group>"; };
-		A94A680622B17BBB00C661C6 /* struct_cfg_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = struct_cfg_analysis.h; sourceTree = "<group>"; };
-		A94A680722B17BBB00C661C6 /* common_uniform_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = common_uniform_elim_pass.cpp; sourceTree = "<group>"; };
-		A94A680822B17BBB00C661C6 /* def_use_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = def_use_manager.cpp; sourceTree = "<group>"; };
-		A94A680922B17BBB00C661C6 /* strip_reflect_info_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_reflect_info_pass.cpp; sourceTree = "<group>"; };
-		A94A680A22B17BBB00C661C6 /* decoration_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration_manager.h; sourceTree = "<group>"; };
-		A94A680B22B17BBB00C661C6 /* ccp_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ccp_pass.cpp; sourceTree = "<group>"; };
-		A94A680C22B17BBB00C661C6 /* process_lines_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = process_lines_pass.h; sourceTree = "<group>"; };
-		A94A680D22B17BBB00C661C6 /* local_single_block_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_single_block_elim_pass.h; sourceTree = "<group>"; };
-		A94A680E22B17BBB00C661C6 /* pch_source_opt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source_opt.cpp; sourceTree = "<group>"; };
-		A94A680F22B17BBB00C661C6 /* strength_reduction_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strength_reduction_pass.h; sourceTree = "<group>"; };
-		A94A681022B17BBB00C661C6 /* aggressive_dead_code_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aggressive_dead_code_elim_pass.cpp; sourceTree = "<group>"; };
-		A94A681122B17BBB00C661C6 /* eliminate_dead_functions_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_functions_util.cpp; sourceTree = "<group>"; };
-		A94A681222B17BBB00C661C6 /* simplification_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simplification_pass.cpp; sourceTree = "<group>"; };
-		A94A681322B17BBB00C661C6 /* dead_branch_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_branch_elim_pass.cpp; sourceTree = "<group>"; };
-		A94A681422B17BBB00C661C6 /* flatten_decoration_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flatten_decoration_pass.cpp; sourceTree = "<group>"; };
-		A94A681522B17BBB00C661C6 /* dead_insert_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_insert_elim_pass.h; sourceTree = "<group>"; };
-		A94A681622B17BBB00C661C6 /* folding_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = folding_rules.cpp; sourceTree = "<group>"; };
-		A94A681722B17BBB00C661C6 /* freeze_spec_constant_value_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = freeze_spec_constant_value_pass.h; sourceTree = "<group>"; };
-		A94A681822B17BBB00C661C6 /* ir_context.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ir_context.cpp; sourceTree = "<group>"; };
-		A94A681922B17BBB00C661C6 /* instrument_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instrument_pass.h; sourceTree = "<group>"; };
-		A94A681A22B17BBB00C661C6 /* mem_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem_pass.h; sourceTree = "<group>"; };
-		A94A681B22B17BBB00C661C6 /* loop_descriptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_descriptor.cpp; sourceTree = "<group>"; };
-		A94A681C22B17BBB00C661C6 /* local_ssa_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_ssa_elim_pass.cpp; sourceTree = "<group>"; };
-		A94A681D22B17BBB00C661C6 /* eliminate_dead_members_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_members_pass.h; sourceTree = "<group>"; };
-		A94A681E22B17BBB00C661C6 /* function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cpp; sourceTree = "<group>"; };
-		A94A681F22B17BBB00C661C6 /* instruction_list.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction_list.cpp; sourceTree = "<group>"; };
-		A94A682022B17BBB00C661C6 /* composite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = composite.cpp; sourceTree = "<group>"; };
-		A94A682122B17BBB00C661C6 /* process_lines_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = process_lines_pass.cpp; sourceTree = "<group>"; };
-		A94A682222B17BBB00C661C6 /* inline_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_pass.h; sourceTree = "<group>"; };
-		A94A682322B17BBB00C661C6 /* loop_dependence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_dependence.h; sourceTree = "<group>"; };
-		A94A682422B17BBB00C661C6 /* value_number_table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = value_number_table.h; sourceTree = "<group>"; };
-		A94A682522B17BBB00C661C6 /* flatten_decoration_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flatten_decoration_pass.h; sourceTree = "<group>"; };
-		A94A682622B17BBB00C661C6 /* if_conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = if_conversion.cpp; sourceTree = "<group>"; };
-		A94A682722B17BBB00C661C6 /* inline_exhaustive_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_exhaustive_pass.h; sourceTree = "<group>"; };
-		A94A682822B17BBB00C661C6 /* constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = constants.h; sourceTree = "<group>"; };
-		A94A682922B17BBB00C661C6 /* eliminate_dead_members_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_members_pass.cpp; sourceTree = "<group>"; };
-		A94A682A22B17BBB00C661C6 /* strength_reduction_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strength_reduction_pass.cpp; sourceTree = "<group>"; };
-		A94A682B22B17BBB00C661C6 /* block_merge_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = block_merge_util.cpp; sourceTree = "<group>"; };
-		A94A682C22B17BBB00C661C6 /* upgrade_memory_model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = upgrade_memory_model.h; sourceTree = "<group>"; };
-		A94A682D22B17BBB00C661C6 /* copy_prop_arrays.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = copy_prop_arrays.cpp; sourceTree = "<group>"; };
-		A94A682E22B17BBB00C661C6 /* pass_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pass_manager.cpp; sourceTree = "<group>"; };
-		A94A682F22B17BBB00C661C6 /* inline_exhaustive_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_exhaustive_pass.cpp; sourceTree = "<group>"; };
-		A94A683022B17BBB00C661C6 /* loop_fission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fission.h; sourceTree = "<group>"; };
-		A94A683122B17BBB00C661C6 /* workaround1209.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = workaround1209.h; sourceTree = "<group>"; };
-		A94A683222B17BBB00C661C6 /* loop_fusion_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fusion_pass.cpp; sourceTree = "<group>"; };
-		A94A683322B17BBB00C661C6 /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
-		A94A683422B17BBB00C661C6 /* split_invalid_unreachable_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = split_invalid_unreachable_pass.h; sourceTree = "<group>"; };
-		A94A683522B17BBB00C661C6 /* copy_prop_arrays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = copy_prop_arrays.h; sourceTree = "<group>"; };
-		A94A683622B17BBB00C661C6 /* eliminate_dead_constant_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_constant_pass.h; sourceTree = "<group>"; };
-		A94A683722B17BBB00C661C6 /* dead_insert_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_insert_elim_pass.cpp; sourceTree = "<group>"; };
-		A94A683822B17BBB00C661C6 /* ssa_rewrite_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssa_rewrite_pass.h; sourceTree = "<group>"; };
-		A94A683922B17BBB00C661C6 /* scalar_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_analysis.cpp; sourceTree = "<group>"; };
-		A94A683A22B17BBB00C661C6 /* dead_variable_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_variable_elimination.h; sourceTree = "<group>"; };
-		A94A683B22B17BBB00C661C6 /* block_merge_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = block_merge_pass.cpp; sourceTree = "<group>"; };
-		A94A683C22B17BBB00C661C6 /* dominator_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dominator_analysis.h; sourceTree = "<group>"; };
-		A94A683D22B17BBB00C661C6 /* pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pass.h; sourceTree = "<group>"; };
-		A94A683E22B17BBB00C661C6 /* folding_rules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = folding_rules.h; sourceTree = "<group>"; };
-		A94A683F22B17BBB00C661C6 /* eliminate_dead_functions_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_functions_pass.h; sourceTree = "<group>"; };
-		A94A684022B17BBB00C661C6 /* common_uniform_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common_uniform_elim_pass.h; sourceTree = "<group>"; };
-		A94A684122B17BBB00C661C6 /* eliminate_dead_functions_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_functions_util.h; sourceTree = "<group>"; };
-		A94A684222B17BBB00C661C6 /* fold.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fold.h; sourceTree = "<group>"; };
-		A94A684322B17BBB00C661C6 /* local_single_store_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_single_store_elim_pass.cpp; sourceTree = "<group>"; };
-		A94A684422B17BBB00C661C6 /* dead_branch_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_branch_elim_pass.h; sourceTree = "<group>"; };
-		A94A684522B17BBB00C661C6 /* private_to_local_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = private_to_local_pass.cpp; sourceTree = "<group>"; };
-		A94A684622B17BBB00C661C6 /* scalar_analysis_nodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_analysis_nodes.h; sourceTree = "<group>"; };
-		A94A684722B17BBB00C661C6 /* propagator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = propagator.cpp; sourceTree = "<group>"; };
-		A94A684822B17BBB00C661C6 /* fix_storage_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fix_storage_class.h; sourceTree = "<group>"; };
-		A94A684922B17BBB00C661C6 /* loop_dependence_helpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_dependence_helpers.cpp; sourceTree = "<group>"; };
-		A94A684A22B17BBB00C661C6 /* 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>"; };
-		A94A684B22B17BBB00C661C6 /* passes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = passes.h; sourceTree = "<group>"; };
-		A94A684C22B17BBB00C661C6 /* fold.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fold.cpp; sourceTree = "<group>"; };
-		A94A684D22B17BBB00C661C6 /* strip_reflect_info_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_reflect_info_pass.h; sourceTree = "<group>"; };
-		A94A684E22B17BBB00C661C6 /* scalar_replacement_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_replacement_pass.cpp; sourceTree = "<group>"; };
-		A94A684F22B17BBB00C661C6 /* simplification_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simplification_pass.h; sourceTree = "<group>"; };
-		A94A685022B17BBB00C661C6 /* remove_duplicates_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_duplicates_pass.h; sourceTree = "<group>"; };
-		A94A685122B17BBB00C661C6 /* redundancy_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = redundancy_elimination.cpp; sourceTree = "<group>"; };
-		A94A685222B17BBB00C661C6 /* reflect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reflect.h; sourceTree = "<group>"; };
-		A94A685322B17BBB00C661C6 /* workaround1209.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = workaround1209.cpp; sourceTree = "<group>"; };
-		A94A685422B17BBB00C661C6 /* null_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = null_pass.h; sourceTree = "<group>"; };
-		A94A685522B17BBB00C661C6 /* const_folding_rules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = const_folding_rules.h; sourceTree = "<group>"; };
-		A94A685622B17BBB00C661C6 /* scalar_replacement_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_replacement_pass.h; sourceTree = "<group>"; };
-		A94A685722B17BBB00C661C6 /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = "<group>"; };
-		A94A685822B17BBB00C661C6 /* pch_source_opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source_opt.h; sourceTree = "<group>"; };
-		A94A685922B17BBB00C661C6 /* reduce_load_size.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduce_load_size.cpp; sourceTree = "<group>"; };
-		A94A685A22B17BBB00C661C6 /* redundancy_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = redundancy_elimination.h; sourceTree = "<group>"; };
-		A94A685B22B17BBB00C661C6 /* fix_storage_class.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fix_storage_class.cpp; sourceTree = "<group>"; };
-		A94A685C22B17BBB00C661C6 /* value_number_table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = value_number_table.cpp; sourceTree = "<group>"; };
-		A94A685D22B17BBB00C661C6 /* local_ssa_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_ssa_elim_pass.h; sourceTree = "<group>"; };
-		A94A685E22B17BBB00C661C6 /* inline_opaque_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_opaque_pass.cpp; sourceTree = "<group>"; };
-		A94A685F22B17BBB00C661C6 /* replace_invalid_opc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = replace_invalid_opc.cpp; sourceTree = "<group>"; };
-		A94A686022B17BBB00C661C6 /* loop_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_utils.h; sourceTree = "<group>"; };
-		A94A686122B17BBB00C661C6 /* module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = module.h; sourceTree = "<group>"; };
-		A94A686222B17BBB00C661C6 /* dominator_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dominator_analysis.cpp; sourceTree = "<group>"; };
-		A94A686322B17BBB00C661C6 /* decompose_initialized_variables_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decompose_initialized_variables_pass.cpp; sourceTree = "<group>"; };
-		A94A686422B17BBB00C661C6 /* ir_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_builder.h; sourceTree = "<group>"; };
-		A94A686522B17BBB00C661C6 /* loop_unswitch_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_unswitch_pass.h; sourceTree = "<group>"; };
-		A94A686622B17BBB00C661C6 /* cfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfg.h; sourceTree = "<group>"; };
-		A94A686722B17BBB00C661C6 /* code_sink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = code_sink.h; sourceTree = "<group>"; };
-		A94A686822B17BBB00C661C6 /* loop_descriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_descriptor.h; sourceTree = "<group>"; };
-		A94A686922B17BBB00C661C6 /* generate_webgpu_initializers_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = generate_webgpu_initializers_pass.h; sourceTree = "<group>"; };
-		A94A686A22B17BBB00C661C6 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
-		A94A686B22B17BBB00C661C6 /* aggressive_dead_code_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aggressive_dead_code_elim_pass.h; sourceTree = "<group>"; };
-		A94A686C22B17BBB00C661C6 /* struct_cfg_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = struct_cfg_analysis.cpp; sourceTree = "<group>"; };
-		A94A686D22B17BBB00C661C6 /* vector_dce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector_dce.h; sourceTree = "<group>"; };
-		A94A686E22B17BBB00C661C6 /* combine_access_chains.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = combine_access_chains.h; sourceTree = "<group>"; };
-		A94A686F22B17BBB00C661C6 /* pass_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pass_manager.h; sourceTree = "<group>"; };
-		A94A687022B17BBB00C661C6 /* local_access_chain_convert_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_access_chain_convert_pass.cpp; sourceTree = "<group>"; };
-		A94A687122B17BBB00C661C6 /* basic_block.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic_block.cpp; sourceTree = "<group>"; };
-		A94A687222B17BBB00C661C6 /* iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iterator.h; sourceTree = "<group>"; };
-		A94A687322B17BBB00C661C6 /* licm_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = licm_pass.h; sourceTree = "<group>"; };
-		A94A687422B17BBB00C661C6 /* build_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = build_module.h; sourceTree = "<group>"; };
-		A94A687522B17BBB00C661C6 /* ccp_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ccp_pass.h; sourceTree = "<group>"; };
-		A94A687622B17BBB00C661C6 /* decompose_initialized_variables_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decompose_initialized_variables_pass.h; sourceTree = "<group>"; };
-		A94A687722B17BBB00C661C6 /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
-		A94A687822B17BBB00C661C6 /* loop_fusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fusion.cpp; sourceTree = "<group>"; };
-		A94A687922B17BBB00C661C6 /* upgrade_memory_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = upgrade_memory_model.cpp; sourceTree = "<group>"; };
-		A94A687A22B17BBB00C661C6 /* feature_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = feature_manager.h; sourceTree = "<group>"; };
-		A94A687B22B17BBB00C661C6 /* inst_bindless_check_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inst_bindless_check_pass.h; sourceTree = "<group>"; };
-		A94A687C22B17BBB00C661C6 /* scalar_analysis_simplification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_analysis_simplification.cpp; sourceTree = "<group>"; };
-		A94A687D22B17BBB00C661C6 /* 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>"; };
-		A94A687E22B17BBB00C661C6 /* dominator_tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dominator_tree.h; sourceTree = "<group>"; };
-		A94A687F22B17BBB00C661C6 /* legalize_vector_shuffle_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = legalize_vector_shuffle_pass.cpp; sourceTree = "<group>"; };
-		A94A688022B17BBB00C661C6 /* type_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = type_manager.h; sourceTree = "<group>"; };
-		A94A688122B17BBB00C661C6 /* compact_ids_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = compact_ids_pass.cpp; sourceTree = "<group>"; };
-		A94A688222B17BBB00C661C6 /* loop_peeling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_peeling.cpp; sourceTree = "<group>"; };
-		A94A688322B17BBB00C661C6 /* table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = table.h; sourceTree = "<group>"; };
-		A94A68AF22B17BBB00C661C6 /* ext_inst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ext_inst.h; sourceTree = "<group>"; };
-		A94A68B022B17BBB00C661C6 /* diagnostic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = diagnostic.cpp; sourceTree = "<group>"; };
-		A94A68B122B17BBB00C661C6 /* latest_version_spirv_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_spirv_header.h; sourceTree = "<group>"; };
-		A94A68B222B17BBB00C661C6 /* libspirv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = libspirv.cpp; sourceTree = "<group>"; };
-		A94A68B322B17BBB00C661C6 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
-		A94A68B422B17BBB00C661C6 /* spirv_optimizer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_optimizer_options.h; sourceTree = "<group>"; };
-		A94A68B522B17BBB00C661C6 /* opcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opcode.h; sourceTree = "<group>"; };
-		A94A68B622B17BBB00C661C6 /* operand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand.cpp; sourceTree = "<group>"; };
-		A94A68B722B17BBB00C661C6 /* 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>"; };
-		A94A68B822B17BBB00C661C6 /* extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = extensions.h; sourceTree = "<group>"; };
-		A94A68B922B17BBB00C661C6 /* disassemble.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = disassemble.cpp; sourceTree = "<group>"; };
-		A94A68BA22B17BBB00C661C6 /* binary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = binary.h; sourceTree = "<group>"; };
-		A94A68BB22B17BBB00C661C6 /* text_handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text_handler.cpp; sourceTree = "<group>"; };
-		A94A68BD22B17BBB00C661C6 /* validate_annotation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_annotation.cpp; sourceTree = "<group>"; };
-		A94A68BE22B17BBB00C661C6 /* validate_misc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_misc.cpp; sourceTree = "<group>"; };
-		A94A68BF22B17BBB00C661C6 /* validate_cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_cfg.cpp; sourceTree = "<group>"; };
-		A94A68C022B17BBB00C661C6 /* validate_capability.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_capability.cpp; sourceTree = "<group>"; };
-		A94A68C122B17BBB00C661C6 /* construct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = construct.h; sourceTree = "<group>"; };
-		A94A68C222B17BBB00C661C6 /* validate_barriers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_barriers.cpp; sourceTree = "<group>"; };
-		A94A68C322B17BBB00C661C6 /* validate_non_uniform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_non_uniform.cpp; sourceTree = "<group>"; };
-		A94A68C422B17BBB00C661C6 /* validate_scopes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_scopes.cpp; sourceTree = "<group>"; };
-		A94A68C522B17BBB00C661C6 /* validate_atomics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_atomics.cpp; sourceTree = "<group>"; };
-		A94A68C622B17BBB00C661C6 /* basic_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic_block.h; sourceTree = "<group>"; };
-		A94A68C722B17BBB00C661C6 /* validate_instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_instruction.cpp; sourceTree = "<group>"; };
-		A94A68C822B17BBB00C661C6 /* validate_decorations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_decorations.cpp; sourceTree = "<group>"; };
-		A94A68C922B17BBB00C661C6 /* validate_debug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_debug.cpp; sourceTree = "<group>"; };
-		A94A68CA22B17BBB00C661C6 /* validate_builtins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_builtins.cpp; sourceTree = "<group>"; };
-		A94A68CB22B17BBB00C661C6 /* validate_interfaces.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_interfaces.cpp; sourceTree = "<group>"; };
-		A94A68CC22B17BBB00C661C6 /* validate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate.cpp; sourceTree = "<group>"; };
-		A94A68CD22B17BBB00C661C6 /* validation_state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validation_state.h; sourceTree = "<group>"; };
-		A94A68CE22B17BBB00C661C6 /* validate_constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_constants.cpp; sourceTree = "<group>"; };
-		A94A68CF22B17BBB00C661C6 /* validate_bitwise.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_bitwise.cpp; sourceTree = "<group>"; };
-		A94A68D022B17BBB00C661C6 /* validate_extensions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_extensions.cpp; sourceTree = "<group>"; };
-		A94A68D122B17BBB00C661C6 /* construct.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = construct.cpp; sourceTree = "<group>"; };
-		A94A68D222B17BBB00C661C6 /* function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cpp; sourceTree = "<group>"; };
-		A94A68D322B17BBB00C661C6 /* validate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate.h; sourceTree = "<group>"; };
-		A94A68D422B17BBB00C661C6 /* validate_adjacency.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_adjacency.cpp; sourceTree = "<group>"; };
-		A94A68D522B17BBB00C661C6 /* validate_conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_conversion.cpp; sourceTree = "<group>"; };
-		A94A68D622B17BBB00C661C6 /* validate_datarules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_datarules.cpp; sourceTree = "<group>"; };
-		A94A68D722B17BBB00C661C6 /* validate_scopes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate_scopes.h; sourceTree = "<group>"; };
-		A94A68D822B17BBB00C661C6 /* validate_id.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_id.cpp; sourceTree = "<group>"; };
-		A94A68D922B17BBB00C661C6 /* validate_memory_semantics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate_memory_semantics.h; sourceTree = "<group>"; };
-		A94A68DA22B17BBB00C661C6 /* validate_arithmetics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_arithmetics.cpp; sourceTree = "<group>"; };
-		A94A68DB22B17BBB00C661C6 /* validate_mode_setting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_mode_setting.cpp; sourceTree = "<group>"; };
-		A94A68DC22B17BBB00C661C6 /* validate_memory_semantics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_memory_semantics.cpp; sourceTree = "<group>"; };
-		A94A68DD22B17BBB00C661C6 /* validate_logicals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_logicals.cpp; sourceTree = "<group>"; };
-		A94A68DE22B17BBB00C661C6 /* validate_derivatives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_derivatives.cpp; sourceTree = "<group>"; };
-		A94A68DF22B17BBB00C661C6 /* validate_memory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_memory.cpp; sourceTree = "<group>"; };
-		A94A68E022B17BBB00C661C6 /* validate_image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_image.cpp; sourceTree = "<group>"; };
-		A94A68E122B17BBB00C661C6 /* validate_literals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_literals.cpp; sourceTree = "<group>"; };
-		A94A68E222B17BBB00C661C6 /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = "<group>"; };
-		A94A68E322B17BBB00C661C6 /* validate_type.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_type.cpp; sourceTree = "<group>"; };
-		A94A68E422B17BBB00C661C6 /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
-		A94A68E522B17BBB00C661C6 /* validate_execution_limitations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_execution_limitations.cpp; sourceTree = "<group>"; };
-		A94A68E622B17BBB00C661C6 /* validate_layout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_layout.cpp; sourceTree = "<group>"; };
-		A94A68E722B17BBB00C661C6 /* basic_block.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic_block.cpp; sourceTree = "<group>"; };
-		A94A68E822B17BBB00C661C6 /* validate_function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_function.cpp; sourceTree = "<group>"; };
-		A94A68E922B17BBB00C661C6 /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
-		A94A68EA22B17BBB00C661C6 /* validate_composites.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_composites.cpp; sourceTree = "<group>"; };
-		A94A68EB22B17BBB00C661C6 /* validation_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validation_state.cpp; sourceTree = "<group>"; };
-		A94A68EC22B17BBB00C661C6 /* validate_primitives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_primitives.cpp; sourceTree = "<group>"; };
-		A94A68ED22B17BBB00C661C6 /* decoration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration.h; sourceTree = "<group>"; };
 		A9679AAC21D269D900856BF7 /* package_ext_libs_macos.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = package_ext_libs_macos.sh; sourceTree = "<group>"; };
 		A9679AAD21D269D900856BF7 /* package_ext_libs_ios.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = package_ext_libs_ios.sh; sourceTree = "<group>"; };
 		A9679AAE21D269D900856BF7 /* package_ext_libs.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = package_ext_libs.sh; sourceTree = "<group>"; };
@@ -1581,6 +1195,389 @@
 		A976290E21CC60BC00B52A68 /* spirv_cross_parsed_ir.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_cross_parsed_ir.cpp; sourceTree = "<group>"; };
 		A9C2104521D14FD7006BA2D3 /* fetchDependencies */ = {isa = PBXFileReference; lastKnownFileType = text; path = fetchDependencies; sourceTree = "<group>"; };
 		A9C2104721D15843006BA2D3 /* ExternalRevisions */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ExternalRevisions; sourceTree = "<group>"; };
+		A9C2EF7822E7833C001763CE /* spirv_target_env.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_target_env.cpp; sourceTree = "<group>"; };
+		A9C2EF7922E7833C001763CE /* 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>"; };
+		A9C2EF7A22E7833C001763CE /* spirv_fuzzer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_fuzzer_options.h; sourceTree = "<group>"; };
+		A9C2EF7B22E7833C001763CE /* assembly_grammar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assembly_grammar.h; sourceTree = "<group>"; };
+		A9C2EF7C22E7833C001763CE /* enum_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum_set.h; sourceTree = "<group>"; };
+		A9C2EF7D22E7833C001763CE /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+		A9C2EF7E22E7833C001763CE /* extinst.spv-amd-shader-ballot.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-shader-ballot.grammar.json"; sourceTree = "<group>"; };
+		A9C2EF7F22E7833C001763CE /* text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text.cpp; sourceTree = "<group>"; };
+		A9C2EF8022E7833C001763CE /* assembly_grammar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = assembly_grammar.cpp; sourceTree = "<group>"; };
+		A9C2EF8122E7833C001763CE /* text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text.h; sourceTree = "<group>"; };
+		A9C2EF8222E7833C001763CE /* extensions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extensions.cpp; sourceTree = "<group>"; };
+		A9C2EF8322E7833C001763CE /* pch_source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source.cpp; sourceTree = "<group>"; };
+		A9C2EF8522E7833C001763CE /* parse_number.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parse_number.h; sourceTree = "<group>"; };
+		A9C2EF8622E7833C001763CE /* ilist_node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ilist_node.h; sourceTree = "<group>"; };
+		A9C2EF8722E7833C001763CE /* make_unique.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = make_unique.h; sourceTree = "<group>"; };
+		A9C2EF8822E7833C001763CE /* string_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = string_utils.h; sourceTree = "<group>"; };
+		A9C2EF8922E7833C001763CE /* small_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = small_vector.h; sourceTree = "<group>"; };
+		A9C2EF8A22E7833C001763CE /* timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = timer.cpp; sourceTree = "<group>"; };
+		A9C2EF8B22E7833C001763CE /* timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timer.h; sourceTree = "<group>"; };
+		A9C2EF8C22E7833C001763CE /* string_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = string_utils.cpp; sourceTree = "<group>"; };
+		A9C2EF8D22E7833C001763CE /* bit_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bit_vector.h; sourceTree = "<group>"; };
+		A9C2EF8E22E7833C001763CE /* bitutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitutils.h; sourceTree = "<group>"; };
+		A9C2EF8F22E7833C001763CE /* hex_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hex_float.h; sourceTree = "<group>"; };
+		A9C2EF9022E7833C001763CE /* parse_number.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parse_number.cpp; sourceTree = "<group>"; };
+		A9C2EF9122E7833C001763CE /* bit_vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bit_vector.cpp; sourceTree = "<group>"; };
+		A9C2EF9222E7833C001763CE /* ilist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ilist.h; sourceTree = "<group>"; };
+		A9C2EF9322E7833C001763CE /* spirv_target_env.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_target_env.h; sourceTree = "<group>"; };
+		A9C2EF9422E7833C001763CE /* table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = table.cpp; sourceTree = "<group>"; };
+		A9C2EF9622E7833C001763CE /* 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>"; };
+		A9C2EF9722E7833C001763CE /* remove_selection_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_selection_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9C2EF9822E7833C001763CE /* remove_block_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_block_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9C2EF9922E7833C001763CE /* 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>"; };
+		A9C2EF9A22E7833C001763CE /* reduction_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_pass.cpp; sourceTree = "<group>"; };
+		A9C2EF9B22E7833C001763CE /* 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>"; };
+		A9C2EF9C22E7833C001763CE /* 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>"; };
+		A9C2EF9D22E7833C001763CE /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+		A9C2EF9E22E7833C001763CE /* reduction_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_util.cpp; sourceTree = "<group>"; };
+		A9C2EF9F22E7833C001763CE /* 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>"; };
+		A9C2EFA022E7833C001763CE /* 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>"; };
+		A9C2EFA122E7833C001763CE /* remove_function_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_function_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9C2EFA222E7833C001763CE /* remove_instruction_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_instruction_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9C2EFA322E7833C001763CE /* 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>"; };
+		A9C2EFA422E7833C001763CE /* 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>"; };
+		A9C2EFA522E7833C001763CE /* remove_function_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_function_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9C2EFA622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_opname_instruction_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9C2EFA722E7833C001763CE /* 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>"; };
+		A9C2EFA822E7833C001763CE /* remove_selection_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_selection_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9C2EFA922E7833C001763CE /* 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>"; };
+		A9C2EFAA22E7833C001763CE /* 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>"; };
+		A9C2EFAB22E7833C001763CE /* merge_blocks_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_blocks_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9C2EFAC22E7833C001763CE /* change_operand_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = change_operand_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9C2EFAD22E7833C001763CE /* 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>"; };
+		A9C2EFAE22E7833C001763CE /* remove_function_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_function_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9C2EFAF22E7833C001763CE /* 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>"; };
+		A9C2EFB022E7833C001763CE /* 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>"; };
+		A9C2EFB122E7833C001763CE /* 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>"; };
+		A9C2EFB222E7833C001763CE /* remove_selection_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_selection_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9C2EFB322E7833C001763CE /* remove_instruction_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_instruction_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9C2EFB422E7833C001763CE /* remove_selection_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_selection_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9C2EFB522E7833C001763CE /* merge_blocks_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_blocks_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9C2EFB622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_opname_instruction_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9C2EFB722E7833C001763CE /* pch_source_reduce.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source_reduce.cpp; sourceTree = "<group>"; };
+		A9C2EFB822E7833C001763CE /* reducer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reducer.cpp; sourceTree = "<group>"; };
+		A9C2EFB922E7833C001763CE /* 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>"; };
+		A9C2EFBA22E7833C001763CE /* remove_function_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_function_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9C2EFBB22E7833C001763CE /* pch_source_reduce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source_reduce.h; sourceTree = "<group>"; };
+		A9C2EFBC22E7833C001763CE /* 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>"; };
+		A9C2EFBD22E7833C001763CE /* merge_blocks_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_blocks_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9C2EFBE22E7833C001763CE /* reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9C2EFBF22E7833C001763CE /* reducer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reducer.h; sourceTree = "<group>"; };
+		A9C2EFC022E7833C001763CE /* 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>"; };
+		A9C2EFC122E7833C001763CE /* reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_opportunity.h; sourceTree = "<group>"; };
+		A9C2EFC222E7833C001763CE /* 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>"; };
+		A9C2EFC322E7833C001763CE /* 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>"; };
+		A9C2EFC422E7833C001763CE /* reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9C2EFC522E7833C001763CE /* change_operand_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = change_operand_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9C2EFC622E7833C001763CE /* remove_block_reduction_opportunity_finder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_block_reduction_opportunity_finder.h; sourceTree = "<group>"; };
+		A9C2EFC722E7833C001763CE /* remove_block_reduction_opportunity_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_block_reduction_opportunity_finder.cpp; sourceTree = "<group>"; };
+		A9C2EFC822E7833C001763CE /* reduction_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_util.h; sourceTree = "<group>"; };
+		A9C2EFC922E7833C001763CE /* merge_blocks_reduction_opportunity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_blocks_reduction_opportunity.h; sourceTree = "<group>"; };
+		A9C2EFCA22E7833C001763CE /* 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>"; };
+		A9C2EFCB22E7833C001763CE /* 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>"; };
+		A9C2EFCC22E7833C001763CE /* remove_block_reduction_opportunity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_block_reduction_opportunity.cpp; sourceTree = "<group>"; };
+		A9C2EFCD22E7833C001763CE /* reduction_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduction_pass.h; sourceTree = "<group>"; };
+		A9C2EFCE22E7833C001763CE /* latest_version_opencl_std_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_opencl_std_header.h; sourceTree = "<group>"; };
+		A9C2EFCF22E7833C001763CE /* spirv_optimizer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_optimizer_options.cpp; sourceTree = "<group>"; };
+		A9C2EFD022E7833C001763CE /* cfa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfa.h; sourceTree = "<group>"; };
+		A9C2EFD122E7833C001763CE /* pch_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source.h; sourceTree = "<group>"; };
+		A9C2EFD222E7833C001763CE /* enum_string_mapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enum_string_mapping.h; sourceTree = "<group>"; };
+		A9C2EFD322E7833C001763CE /* spirv_fuzzer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_fuzzer_options.cpp; sourceTree = "<group>"; };
+		A9C2EFD422E7833C001763CE /* spirv_reducer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_reducer_options.h; sourceTree = "<group>"; };
+		A9C2EFD522E7833C001763CE /* spirv_validator_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_validator_options.cpp; sourceTree = "<group>"; };
+		A9C2EFD622E7833C001763CE /* 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>"; };
+		A9C2EFD722E7833C001763CE /* print.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = print.cpp; sourceTree = "<group>"; };
+		A9C2EFD822E7833C001763CE /* spirv_definition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_definition.h; sourceTree = "<group>"; };
+		A9C2EFD922E7833C001763CE /* operand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operand.h; sourceTree = "<group>"; };
+		A9C2EFDA22E7833C001763CE /* spirv_endian.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_endian.cpp; sourceTree = "<group>"; };
+		A9C2EFDB22E7833C001763CE /* macro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = macro.h; sourceTree = "<group>"; };
+		A9C2EFDC22E7833C001763CE /* spirv_constant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_constant.h; sourceTree = "<group>"; };
+		A9C2EFDD22E7833C001763CE /* extinst.spv-amd-gcn-shader.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "extinst.spv-amd-gcn-shader.grammar.json"; sourceTree = "<group>"; };
+		A9C2EFDE22E7833C001763CE /* binary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = binary.cpp; sourceTree = "<group>"; };
+		A9C2EFDF22E7833C001763CE /* spirv_validator_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_validator_options.h; sourceTree = "<group>"; };
+		A9C2EFE022E7833C001763CE /* enum_string_mapping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = enum_string_mapping.cpp; sourceTree = "<group>"; };
+		A9C2EFE122E7833C001763CE /* text_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text_handler.h; sourceTree = "<group>"; };
+		A9C2EFE222E7833C001763CE /* parsed_operand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parsed_operand.h; sourceTree = "<group>"; };
+		A9C2EFE322E7833C001763CE /* name_mapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = name_mapper.h; sourceTree = "<group>"; };
+		A9C2EFE422E7833C001763CE /* spirv_reducer_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_reducer_options.cpp; sourceTree = "<group>"; };
+		A9C2EFE522E7833C001763CE /* parsed_operand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parsed_operand.cpp; sourceTree = "<group>"; };
+		A9C2EFE622E7833C001763CE /* diagnostic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diagnostic.h; sourceTree = "<group>"; };
+		A9C2EFE722E7833C001763CE /* spirv_endian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_endian.h; sourceTree = "<group>"; };
+		A9C2EFE822E7833C001763CE /* name_mapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = name_mapper.cpp; sourceTree = "<group>"; };
+		A9C2EFE922E7833C001763CE /* extinst.debuginfo.grammar.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = extinst.debuginfo.grammar.json; sourceTree = "<group>"; };
+		A9C2EFEB22E7833C001763CE /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+		A9C2EFEC22E7833C001763CE /* linker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linker.cpp; sourceTree = "<group>"; };
+		A9C2EFED22E7833C001763CE /* software_version.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = software_version.cpp; sourceTree = "<group>"; };
+		A9C2EFEE22E7833C001763CE /* opcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opcode.cpp; sourceTree = "<group>"; };
+		A9C2EFEF22E7833C001763CE /* print.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = print.h; sourceTree = "<group>"; };
+		A9C2EFF022E7833C001763CE /* ext_inst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ext_inst.cpp; sourceTree = "<group>"; };
+		A9C2EFF122E7833C001763CE /* disassemble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = disassemble.h; sourceTree = "<group>"; };
+		A9C2EFF322E7833C001763CE /* optimizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = optimizer.cpp; sourceTree = "<group>"; };
+		A9C2EFF422E7833C001763CE /* if_conversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = if_conversion.h; sourceTree = "<group>"; };
+		A9C2EFF522E7833C001763CE /* register_pressure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = register_pressure.cpp; sourceTree = "<group>"; };
+		A9C2EFF622E7833C001763CE /* loop_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_utils.cpp; sourceTree = "<group>"; };
+		A9C2EFF722E7833C001763CE /* merge_return_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge_return_pass.h; sourceTree = "<group>"; };
+		A9C2EFF822E7833C001763CE /* inline_opaque_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_opaque_pass.h; sourceTree = "<group>"; };
+		A9C2EFF922E7833C001763CE /* loop_fusion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fusion.h; sourceTree = "<group>"; };
+		A9C2EFFA22E7833C001763CE /* combine_access_chains.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = combine_access_chains.cpp; sourceTree = "<group>"; };
+		A9C2EFFB22E7833C001763CE /* build_module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = build_module.cpp; sourceTree = "<group>"; };
+		A9C2EFFC22E7833C001763CE /* composite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = composite.h; sourceTree = "<group>"; };
+		A9C2EFFD22E7833C001763CE /* compact_ids_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compact_ids_pass.h; sourceTree = "<group>"; };
+		A9C2EFFE22E7833C001763CE /* register_pressure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = register_pressure.h; sourceTree = "<group>"; };
+		A9C2EFFF22E7833C001763CE /* tree_iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree_iterator.h; sourceTree = "<group>"; };
+		A9C2F00022E7833C001763CE /* strip_atomic_counter_memory_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_atomic_counter_memory_pass.h; sourceTree = "<group>"; };
+		A9C2F00122E7833C001763CE /* legalize_vector_shuffle_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = legalize_vector_shuffle_pass.h; sourceTree = "<group>"; };
+		A9C2F00222E7833C001763CE /* local_single_store_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_single_store_elim_pass.h; sourceTree = "<group>"; };
+		A9C2F00322E7833C001763CE /* reduce_load_size.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reduce_load_size.h; sourceTree = "<group>"; };
+		A9C2F00422E7833C001763CE /* code_sink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = code_sink.cpp; sourceTree = "<group>"; };
+		A9C2F00522E7833C001763CE /* types.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = types.cpp; sourceTree = "<group>"; };
+		A9C2F00622E7833C001763CE /* scalar_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_analysis.h; sourceTree = "<group>"; };
+		A9C2F00722E7833C001763CE /* strip_debug_info_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_debug_info_pass.h; sourceTree = "<group>"; };
+		A9C2F00822E7833C001763CE /* cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfg.cpp; sourceTree = "<group>"; };
+		A9C2F00922E7833C001763CE /* strip_atomic_counter_memory_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_atomic_counter_memory_pass.cpp; sourceTree = "<group>"; };
+		A9C2F00A22E7833C001763CE /* decoration_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoration_manager.cpp; sourceTree = "<group>"; };
+		A9C2F00B22E7833C001763CE /* local_single_block_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_single_block_elim_pass.cpp; sourceTree = "<group>"; };
+		A9C2F00C22E7833C001763CE /* freeze_spec_constant_value_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = freeze_spec_constant_value_pass.cpp; sourceTree = "<group>"; };
+		A9C2F00D22E7833C001763CE /* replace_invalid_opc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = replace_invalid_opc.h; sourceTree = "<group>"; };
+		A9C2F00E22E7833C001763CE /* local_access_chain_convert_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_access_chain_convert_pass.h; sourceTree = "<group>"; };
+		A9C2F00F22E7833C001763CE /* inst_bindless_check_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inst_bindless_check_pass.cpp; sourceTree = "<group>"; };
+		A9C2F01022E7833C001763CE /* local_redundancy_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_redundancy_elimination.cpp; sourceTree = "<group>"; };
+		A9C2F01122E7833C001763CE /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
+		A9C2F01222E7833C001763CE /* instrument_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instrument_pass.cpp; sourceTree = "<group>"; };
+		A9C2F01322E7833C001763CE /* propagator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = propagator.h; sourceTree = "<group>"; };
+		A9C2F01422E7833C001763CE /* instruction_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction_list.h; sourceTree = "<group>"; };
+		A9C2F01522E7833C001763CE /* feature_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_manager.cpp; sourceTree = "<group>"; };
+		A9C2F01622E7833C001763CE /* pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pass.cpp; sourceTree = "<group>"; };
+		A9C2F01722E7833C001763CE /* loop_fission.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fission.cpp; sourceTree = "<group>"; };
+		A9C2F01822E7833C001763CE /* dominator_tree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dominator_tree.cpp; sourceTree = "<group>"; };
+		A9C2F01922E7833C001763CE /* merge_return_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_return_pass.cpp; sourceTree = "<group>"; };
+		A9C2F01A22E7833C001763CE /* ir_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_context.h; sourceTree = "<group>"; };
+		A9C2F01B22E7833C001763CE /* eliminate_dead_constant_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_constant_pass.cpp; sourceTree = "<group>"; };
+		A9C2F01C22E7833C001763CE /* cfg_cleanup_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cfg_cleanup_pass.cpp; sourceTree = "<group>"; };
+		A9C2F01D22E7833C001763CE /* const_folding_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = const_folding_rules.cpp; sourceTree = "<group>"; };
+		A9C2F01E22E7833C001763CE /* loop_unroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_unroller.h; sourceTree = "<group>"; };
+		A9C2F01F22E7833C001763CE /* strip_debug_info_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_debug_info_pass.cpp; sourceTree = "<group>"; };
+		A9C2F02022E7833C001763CE /* ssa_rewrite_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ssa_rewrite_pass.cpp; sourceTree = "<group>"; };
+		A9C2F02122E7833C001763CE /* loop_dependence.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_dependence.cpp; sourceTree = "<group>"; };
+		A9C2F02222E7833C001763CE /* unify_const_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unify_const_pass.h; sourceTree = "<group>"; };
+		A9C2F02322E7833C001763CE /* ir_loader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_loader.h; sourceTree = "<group>"; };
+		A9C2F02422E7833C001763CE /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
+		A9C2F02522E7833C001763CE /* 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>"; };
+		A9C2F02622E7833C001763CE /* mem_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mem_pass.cpp; sourceTree = "<group>"; };
+		A9C2F02722E7833C001763CE /* basic_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic_block.h; sourceTree = "<group>"; };
+		A9C2F02822E7833C001763CE /* remove_duplicates_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remove_duplicates_pass.cpp; sourceTree = "<group>"; };
+		A9C2F02922E7833C001763CE /* dead_variable_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_variable_elimination.cpp; sourceTree = "<group>"; };
+		A9C2F02A22E7833C001763CE /* block_merge_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block_merge_pass.h; sourceTree = "<group>"; };
+		A9C2F02B22E7833C001763CE /* module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = module.cpp; sourceTree = "<group>"; };
+		A9C2F02C22E7833C001763CE /* 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>"; };
+		A9C2F02D22E7833C001763CE /* loop_unswitch_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_unswitch_pass.cpp; sourceTree = "<group>"; };
+		A9C2F02E22E7833C001763CE /* unify_const_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unify_const_pass.cpp; sourceTree = "<group>"; };
+		A9C2F02F22E7833C001763CE /* type_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = type_manager.cpp; sourceTree = "<group>"; };
+		A9C2F03022E7833C001763CE /* generate_webgpu_initializers_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = generate_webgpu_initializers_pass.cpp; sourceTree = "<group>"; };
+		A9C2F03122E7833C001763CE /* private_to_local_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = private_to_local_pass.h; sourceTree = "<group>"; };
+		A9C2F03222E7833C001763CE /* inline_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_pass.cpp; sourceTree = "<group>"; };
+		A9C2F03322E7833C001763CE /* def_use_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = def_use_manager.h; sourceTree = "<group>"; };
+		A9C2F03422E7833C001763CE /* ir_loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ir_loader.cpp; sourceTree = "<group>"; };
+		A9C2F03522E7833C001763CE /* cfg_cleanup_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfg_cleanup_pass.h; sourceTree = "<group>"; };
+		A9C2F03622E7833C001763CE /* licm_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = licm_pass.cpp; sourceTree = "<group>"; };
+		A9C2F03722E7833C001763CE /* eliminate_dead_functions_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_functions_pass.cpp; sourceTree = "<group>"; };
+		A9C2F03822E7833C001763CE /* local_redundancy_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_redundancy_elimination.h; sourceTree = "<group>"; };
+		A9C2F03922E7833C001763CE /* split_invalid_unreachable_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = split_invalid_unreachable_pass.cpp; sourceTree = "<group>"; };
+		A9C2F03A22E7833C001763CE /* loop_peeling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_peeling.h; sourceTree = "<group>"; };
+		A9C2F03B22E7833C001763CE /* vector_dce.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vector_dce.cpp; sourceTree = "<group>"; };
+		A9C2F03C22E7833C001763CE /* block_merge_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block_merge_util.h; sourceTree = "<group>"; };
+		A9C2F03D22E7833C001763CE /* loop_unroller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_unroller.cpp; sourceTree = "<group>"; };
+		A9C2F03E22E7833C001763CE /* constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = constants.cpp; sourceTree = "<group>"; };
+		A9C2F03F22E7833C001763CE /* loop_fusion_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fusion_pass.h; sourceTree = "<group>"; };
+		A9C2F04022E7833C001763CE /* struct_cfg_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = struct_cfg_analysis.h; sourceTree = "<group>"; };
+		A9C2F04122E7833C001763CE /* def_use_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = def_use_manager.cpp; sourceTree = "<group>"; };
+		A9C2F04222E7833C001763CE /* strip_reflect_info_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strip_reflect_info_pass.cpp; sourceTree = "<group>"; };
+		A9C2F04322E7833C001763CE /* decoration_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration_manager.h; sourceTree = "<group>"; };
+		A9C2F04422E7833C001763CE /* ccp_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ccp_pass.cpp; sourceTree = "<group>"; };
+		A9C2F04522E7833C001763CE /* process_lines_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = process_lines_pass.h; sourceTree = "<group>"; };
+		A9C2F04622E7833C001763CE /* local_single_block_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_single_block_elim_pass.h; sourceTree = "<group>"; };
+		A9C2F04722E7833C001763CE /* pch_source_opt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pch_source_opt.cpp; sourceTree = "<group>"; };
+		A9C2F04822E7833C001763CE /* strength_reduction_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strength_reduction_pass.h; sourceTree = "<group>"; };
+		A9C2F04922E7833C001763CE /* aggressive_dead_code_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aggressive_dead_code_elim_pass.cpp; sourceTree = "<group>"; };
+		A9C2F04A22E7833C001763CE /* eliminate_dead_functions_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_functions_util.cpp; sourceTree = "<group>"; };
+		A9C2F04B22E7833C001763CE /* simplification_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simplification_pass.cpp; sourceTree = "<group>"; };
+		A9C2F04C22E7833C001763CE /* dead_branch_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_branch_elim_pass.cpp; sourceTree = "<group>"; };
+		A9C2F04D22E7833C001763CE /* flatten_decoration_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flatten_decoration_pass.cpp; sourceTree = "<group>"; };
+		A9C2F04E22E7833C001763CE /* dead_insert_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_insert_elim_pass.h; sourceTree = "<group>"; };
+		A9C2F04F22E7833C001763CE /* folding_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = folding_rules.cpp; sourceTree = "<group>"; };
+		A9C2F05022E7833C001763CE /* freeze_spec_constant_value_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = freeze_spec_constant_value_pass.h; sourceTree = "<group>"; };
+		A9C2F05122E7833C001763CE /* ir_context.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ir_context.cpp; sourceTree = "<group>"; };
+		A9C2F05222E7833C001763CE /* instrument_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instrument_pass.h; sourceTree = "<group>"; };
+		A9C2F05322E7833C001763CE /* mem_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem_pass.h; sourceTree = "<group>"; };
+		A9C2F05422E7833C001763CE /* loop_descriptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_descriptor.cpp; sourceTree = "<group>"; };
+		A9C2F05522E7833C001763CE /* local_ssa_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_ssa_elim_pass.cpp; sourceTree = "<group>"; };
+		A9C2F05622E7833C001763CE /* eliminate_dead_members_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_members_pass.h; sourceTree = "<group>"; };
+		A9C2F05722E7833C001763CE /* function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cpp; sourceTree = "<group>"; };
+		A9C2F05822E7833C001763CE /* instruction_list.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction_list.cpp; sourceTree = "<group>"; };
+		A9C2F05922E7833C001763CE /* composite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = composite.cpp; sourceTree = "<group>"; };
+		A9C2F05A22E7833C001763CE /* process_lines_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = process_lines_pass.cpp; sourceTree = "<group>"; };
+		A9C2F05B22E7833C001763CE /* inline_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_pass.h; sourceTree = "<group>"; };
+		A9C2F05C22E7833C001763CE /* loop_dependence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_dependence.h; sourceTree = "<group>"; };
+		A9C2F05D22E7833C001763CE /* value_number_table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = value_number_table.h; sourceTree = "<group>"; };
+		A9C2F05E22E7833C001763CE /* flatten_decoration_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flatten_decoration_pass.h; sourceTree = "<group>"; };
+		A9C2F05F22E7833C001763CE /* if_conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = if_conversion.cpp; sourceTree = "<group>"; };
+		A9C2F06022E7833C001763CE /* inline_exhaustive_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline_exhaustive_pass.h; sourceTree = "<group>"; };
+		A9C2F06122E7833C001763CE /* constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = constants.h; sourceTree = "<group>"; };
+		A9C2F06222E7833C001763CE /* eliminate_dead_members_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eliminate_dead_members_pass.cpp; sourceTree = "<group>"; };
+		A9C2F06322E7833C001763CE /* strength_reduction_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strength_reduction_pass.cpp; sourceTree = "<group>"; };
+		A9C2F06422E7833C001763CE /* block_merge_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = block_merge_util.cpp; sourceTree = "<group>"; };
+		A9C2F06522E7833C001763CE /* upgrade_memory_model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = upgrade_memory_model.h; sourceTree = "<group>"; };
+		A9C2F06622E7833C001763CE /* copy_prop_arrays.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = copy_prop_arrays.cpp; sourceTree = "<group>"; };
+		A9C2F06722E7833C001763CE /* pass_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pass_manager.cpp; sourceTree = "<group>"; };
+		A9C2F06822E7833C001763CE /* inline_exhaustive_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_exhaustive_pass.cpp; sourceTree = "<group>"; };
+		A9C2F06922E7833C001763CE /* loop_fission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_fission.h; sourceTree = "<group>"; };
+		A9C2F06A22E7833C001763CE /* workaround1209.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = workaround1209.h; sourceTree = "<group>"; };
+		A9C2F06B22E7833C001763CE /* loop_fusion_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fusion_pass.cpp; sourceTree = "<group>"; };
+		A9C2F06C22E7833C001763CE /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
+		A9C2F06D22E7833C001763CE /* split_invalid_unreachable_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = split_invalid_unreachable_pass.h; sourceTree = "<group>"; };
+		A9C2F06E22E7833C001763CE /* copy_prop_arrays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = copy_prop_arrays.h; sourceTree = "<group>"; };
+		A9C2F06F22E7833C001763CE /* eliminate_dead_constant_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_constant_pass.h; sourceTree = "<group>"; };
+		A9C2F07022E7833C001763CE /* dead_insert_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dead_insert_elim_pass.cpp; sourceTree = "<group>"; };
+		A9C2F07122E7833C001763CE /* ssa_rewrite_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssa_rewrite_pass.h; sourceTree = "<group>"; };
+		A9C2F07222E7833C001763CE /* scalar_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_analysis.cpp; sourceTree = "<group>"; };
+		A9C2F07322E7833C001763CE /* dead_variable_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_variable_elimination.h; sourceTree = "<group>"; };
+		A9C2F07422E7833C001763CE /* block_merge_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = block_merge_pass.cpp; sourceTree = "<group>"; };
+		A9C2F07522E7833C001763CE /* dominator_analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dominator_analysis.h; sourceTree = "<group>"; };
+		A9C2F07622E7833C001763CE /* pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pass.h; sourceTree = "<group>"; };
+		A9C2F07722E7833C001763CE /* folding_rules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = folding_rules.h; sourceTree = "<group>"; };
+		A9C2F07822E7833C001763CE /* eliminate_dead_functions_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_functions_pass.h; sourceTree = "<group>"; };
+		A9C2F07922E7833C001763CE /* eliminate_dead_functions_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eliminate_dead_functions_util.h; sourceTree = "<group>"; };
+		A9C2F07A22E7833C001763CE /* fold.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fold.h; sourceTree = "<group>"; };
+		A9C2F07B22E7833C001763CE /* local_single_store_elim_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_single_store_elim_pass.cpp; sourceTree = "<group>"; };
+		A9C2F07C22E7833C001763CE /* dead_branch_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead_branch_elim_pass.h; sourceTree = "<group>"; };
+		A9C2F07D22E7833C001763CE /* private_to_local_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = private_to_local_pass.cpp; sourceTree = "<group>"; };
+		A9C2F07E22E7833C001763CE /* scalar_analysis_nodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_analysis_nodes.h; sourceTree = "<group>"; };
+		A9C2F07F22E7833C001763CE /* propagator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = propagator.cpp; sourceTree = "<group>"; };
+		A9C2F08022E7833C001763CE /* fix_storage_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fix_storage_class.h; sourceTree = "<group>"; };
+		A9C2F08122E7833C001763CE /* loop_dependence_helpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_dependence_helpers.cpp; sourceTree = "<group>"; };
+		A9C2F08222E7833C001763CE /* 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>"; };
+		A9C2F08322E7833C001763CE /* passes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = passes.h; sourceTree = "<group>"; };
+		A9C2F08422E7833C001763CE /* fold.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fold.cpp; sourceTree = "<group>"; };
+		A9C2F08522E7833C001763CE /* strip_reflect_info_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_reflect_info_pass.h; sourceTree = "<group>"; };
+		A9C2F08622E7833C001763CE /* scalar_replacement_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_replacement_pass.cpp; sourceTree = "<group>"; };
+		A9C2F08722E7833C001763CE /* simplification_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simplification_pass.h; sourceTree = "<group>"; };
+		A9C2F08822E7833C001763CE /* remove_duplicates_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remove_duplicates_pass.h; sourceTree = "<group>"; };
+		A9C2F08922E7833C001763CE /* redundancy_elimination.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = redundancy_elimination.cpp; sourceTree = "<group>"; };
+		A9C2F08A22E7833C001763CE /* reflect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reflect.h; sourceTree = "<group>"; };
+		A9C2F08B22E7833C001763CE /* workaround1209.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = workaround1209.cpp; sourceTree = "<group>"; };
+		A9C2F08C22E7833C001763CE /* null_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = null_pass.h; sourceTree = "<group>"; };
+		A9C2F08D22E7833C001763CE /* const_folding_rules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = const_folding_rules.h; sourceTree = "<group>"; };
+		A9C2F08E22E7833C001763CE /* scalar_replacement_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalar_replacement_pass.h; sourceTree = "<group>"; };
+		A9C2F08F22E7833C001763CE /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = "<group>"; };
+		A9C2F09022E7833C001763CE /* pch_source_opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pch_source_opt.h; sourceTree = "<group>"; };
+		A9C2F09122E7833C001763CE /* reduce_load_size.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduce_load_size.cpp; sourceTree = "<group>"; };
+		A9C2F09222E7833C001763CE /* redundancy_elimination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = redundancy_elimination.h; sourceTree = "<group>"; };
+		A9C2F09322E7833C001763CE /* fix_storage_class.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fix_storage_class.cpp; sourceTree = "<group>"; };
+		A9C2F09422E7833C001763CE /* value_number_table.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = value_number_table.cpp; sourceTree = "<group>"; };
+		A9C2F09522E7833C001763CE /* local_ssa_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local_ssa_elim_pass.h; sourceTree = "<group>"; };
+		A9C2F09622E7833C001763CE /* inline_opaque_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inline_opaque_pass.cpp; sourceTree = "<group>"; };
+		A9C2F09722E7833C001763CE /* replace_invalid_opc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = replace_invalid_opc.cpp; sourceTree = "<group>"; };
+		A9C2F09822E7833C001763CE /* loop_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_utils.h; sourceTree = "<group>"; };
+		A9C2F09922E7833C001763CE /* module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = module.h; sourceTree = "<group>"; };
+		A9C2F09A22E7833C001763CE /* dominator_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dominator_analysis.cpp; sourceTree = "<group>"; };
+		A9C2F09B22E7833C001763CE /* decompose_initialized_variables_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decompose_initialized_variables_pass.cpp; sourceTree = "<group>"; };
+		A9C2F09C22E7833C001763CE /* ir_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ir_builder.h; sourceTree = "<group>"; };
+		A9C2F09D22E7833C001763CE /* loop_unswitch_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_unswitch_pass.h; sourceTree = "<group>"; };
+		A9C2F09E22E7833C001763CE /* cfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfg.h; sourceTree = "<group>"; };
+		A9C2F09F22E7833C001763CE /* code_sink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = code_sink.h; sourceTree = "<group>"; };
+		A9C2F0A022E7833C001763CE /* loop_descriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loop_descriptor.h; sourceTree = "<group>"; };
+		A9C2F0A122E7833C001763CE /* generate_webgpu_initializers_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = generate_webgpu_initializers_pass.h; sourceTree = "<group>"; };
+		A9C2F0A222E7833C001763CE /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
+		A9C2F0A322E7833C001763CE /* aggressive_dead_code_elim_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aggressive_dead_code_elim_pass.h; sourceTree = "<group>"; };
+		A9C2F0A422E7833C001763CE /* struct_cfg_analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = struct_cfg_analysis.cpp; sourceTree = "<group>"; };
+		A9C2F0A522E7833C001763CE /* vector_dce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector_dce.h; sourceTree = "<group>"; };
+		A9C2F0A622E7833C001763CE /* combine_access_chains.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = combine_access_chains.h; sourceTree = "<group>"; };
+		A9C2F0A722E7833C001763CE /* pass_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pass_manager.h; sourceTree = "<group>"; };
+		A9C2F0A822E7833C001763CE /* local_access_chain_convert_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_access_chain_convert_pass.cpp; sourceTree = "<group>"; };
+		A9C2F0A922E7833C001763CE /* basic_block.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic_block.cpp; sourceTree = "<group>"; };
+		A9C2F0AA22E7833C001763CE /* iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iterator.h; sourceTree = "<group>"; };
+		A9C2F0AB22E7833C001763CE /* licm_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = licm_pass.h; sourceTree = "<group>"; };
+		A9C2F0AC22E7833C001763CE /* build_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = build_module.h; sourceTree = "<group>"; };
+		A9C2F0AD22E7833C001763CE /* ccp_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ccp_pass.h; sourceTree = "<group>"; };
+		A9C2F0AE22E7833C001763CE /* decompose_initialized_variables_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decompose_initialized_variables_pass.h; sourceTree = "<group>"; };
+		A9C2F0AF22E7833C001763CE /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
+		A9C2F0B022E7833C001763CE /* loop_fusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_fusion.cpp; sourceTree = "<group>"; };
+		A9C2F0B122E7833C001763CE /* upgrade_memory_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = upgrade_memory_model.cpp; sourceTree = "<group>"; };
+		A9C2F0B222E7833C001763CE /* feature_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = feature_manager.h; sourceTree = "<group>"; };
+		A9C2F0B322E7833C001763CE /* inst_bindless_check_pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inst_bindless_check_pass.h; sourceTree = "<group>"; };
+		A9C2F0B422E7833C001763CE /* scalar_analysis_simplification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_analysis_simplification.cpp; sourceTree = "<group>"; };
+		A9C2F0B522E7833C001763CE /* 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>"; };
+		A9C2F0B622E7833C001763CE /* dominator_tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dominator_tree.h; sourceTree = "<group>"; };
+		A9C2F0B722E7833C001763CE /* legalize_vector_shuffle_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = legalize_vector_shuffle_pass.cpp; sourceTree = "<group>"; };
+		A9C2F0B822E7833C001763CE /* type_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = type_manager.h; sourceTree = "<group>"; };
+		A9C2F0B922E7833C001763CE /* compact_ids_pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = compact_ids_pass.cpp; sourceTree = "<group>"; };
+		A9C2F0BA22E7833C001763CE /* loop_peeling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loop_peeling.cpp; sourceTree = "<group>"; };
+		A9C2F0BB22E7833C001763CE /* table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = table.h; sourceTree = "<group>"; };
+		A9C2F0F922E7833D001763CE /* ext_inst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ext_inst.h; sourceTree = "<group>"; };
+		A9C2F0FA22E7833D001763CE /* diagnostic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = diagnostic.cpp; sourceTree = "<group>"; };
+		A9C2F0FB22E7833D001763CE /* latest_version_spirv_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latest_version_spirv_header.h; sourceTree = "<group>"; };
+		A9C2F0FC22E7833D001763CE /* libspirv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = libspirv.cpp; sourceTree = "<group>"; };
+		A9C2F0FD22E7833D001763CE /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
+		A9C2F0FE22E7833D001763CE /* spirv_optimizer_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_optimizer_options.h; sourceTree = "<group>"; };
+		A9C2F0FF22E7833D001763CE /* opcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opcode.h; sourceTree = "<group>"; };
+		A9C2F10022E7833D001763CE /* operand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = operand.cpp; sourceTree = "<group>"; };
+		A9C2F10122E7833D001763CE /* 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>"; };
+		A9C2F10222E7833D001763CE /* extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = extensions.h; sourceTree = "<group>"; };
+		A9C2F10322E7833D001763CE /* disassemble.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = disassemble.cpp; sourceTree = "<group>"; };
+		A9C2F10422E7833D001763CE /* binary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = binary.h; sourceTree = "<group>"; };
+		A9C2F10522E7833D001763CE /* text_handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text_handler.cpp; sourceTree = "<group>"; };
+		A9C2F10722E7833D001763CE /* validate_annotation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_annotation.cpp; sourceTree = "<group>"; };
+		A9C2F10822E7833D001763CE /* validate_misc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_misc.cpp; sourceTree = "<group>"; };
+		A9C2F10922E7833D001763CE /* validate_cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_cfg.cpp; sourceTree = "<group>"; };
+		A9C2F10A22E7833D001763CE /* validate_capability.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_capability.cpp; sourceTree = "<group>"; };
+		A9C2F10B22E7833D001763CE /* construct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = construct.h; sourceTree = "<group>"; };
+		A9C2F10C22E7833D001763CE /* validate_barriers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_barriers.cpp; sourceTree = "<group>"; };
+		A9C2F10D22E7833D001763CE /* validate_non_uniform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_non_uniform.cpp; sourceTree = "<group>"; };
+		A9C2F10E22E7833D001763CE /* validate_scopes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_scopes.cpp; sourceTree = "<group>"; };
+		A9C2F10F22E7833D001763CE /* validate_atomics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_atomics.cpp; sourceTree = "<group>"; };
+		A9C2F11022E7833D001763CE /* basic_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic_block.h; sourceTree = "<group>"; };
+		A9C2F11122E7833D001763CE /* validate_instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_instruction.cpp; sourceTree = "<group>"; };
+		A9C2F11222E7833D001763CE /* validate_decorations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_decorations.cpp; sourceTree = "<group>"; };
+		A9C2F11322E7833D001763CE /* validate_debug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_debug.cpp; sourceTree = "<group>"; };
+		A9C2F11422E7833D001763CE /* validate_builtins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_builtins.cpp; sourceTree = "<group>"; };
+		A9C2F11522E7833D001763CE /* validate_interfaces.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_interfaces.cpp; sourceTree = "<group>"; };
+		A9C2F11622E7833D001763CE /* validate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate.cpp; sourceTree = "<group>"; };
+		A9C2F11722E7833D001763CE /* validation_state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validation_state.h; sourceTree = "<group>"; };
+		A9C2F11822E7833D001763CE /* validate_constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_constants.cpp; sourceTree = "<group>"; };
+		A9C2F11922E7833D001763CE /* validate_bitwise.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_bitwise.cpp; sourceTree = "<group>"; };
+		A9C2F11A22E7833D001763CE /* validate_extensions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_extensions.cpp; sourceTree = "<group>"; };
+		A9C2F11B22E7833D001763CE /* construct.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = construct.cpp; sourceTree = "<group>"; };
+		A9C2F11C22E7833D001763CE /* function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = function.cpp; sourceTree = "<group>"; };
+		A9C2F11D22E7833D001763CE /* validate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate.h; sourceTree = "<group>"; };
+		A9C2F11E22E7833D001763CE /* validate_adjacency.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_adjacency.cpp; sourceTree = "<group>"; };
+		A9C2F11F22E7833D001763CE /* validate_conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_conversion.cpp; sourceTree = "<group>"; };
+		A9C2F12022E7833D001763CE /* validate_small_type_uses.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_small_type_uses.cpp; sourceTree = "<group>"; };
+		A9C2F12122E7833D001763CE /* validate_datarules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_datarules.cpp; sourceTree = "<group>"; };
+		A9C2F12222E7833D001763CE /* validate_scopes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate_scopes.h; sourceTree = "<group>"; };
+		A9C2F12322E7833D001763CE /* validate_id.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_id.cpp; sourceTree = "<group>"; };
+		A9C2F12422E7833D001763CE /* validate_memory_semantics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = validate_memory_semantics.h; sourceTree = "<group>"; };
+		A9C2F12522E7833D001763CE /* validate_arithmetics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_arithmetics.cpp; sourceTree = "<group>"; };
+		A9C2F12622E7833D001763CE /* validate_mode_setting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_mode_setting.cpp; sourceTree = "<group>"; };
+		A9C2F12722E7833D001763CE /* validate_memory_semantics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_memory_semantics.cpp; sourceTree = "<group>"; };
+		A9C2F12822E7833D001763CE /* validate_logicals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_logicals.cpp; sourceTree = "<group>"; };
+		A9C2F12922E7833D001763CE /* validate_derivatives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_derivatives.cpp; sourceTree = "<group>"; };
+		A9C2F12A22E7833D001763CE /* validate_memory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_memory.cpp; sourceTree = "<group>"; };
+		A9C2F12B22E7833D001763CE /* validate_image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_image.cpp; sourceTree = "<group>"; };
+		A9C2F12C22E7833D001763CE /* validate_literals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_literals.cpp; sourceTree = "<group>"; };
+		A9C2F12D22E7833D001763CE /* instruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = "<group>"; };
+		A9C2F12E22E7833D001763CE /* validate_type.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_type.cpp; sourceTree = "<group>"; };
+		A9C2F12F22E7833D001763CE /* instruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instruction.h; sourceTree = "<group>"; };
+		A9C2F13022E7833D001763CE /* validate_execution_limitations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_execution_limitations.cpp; sourceTree = "<group>"; };
+		A9C2F13122E7833D001763CE /* validate_layout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_layout.cpp; sourceTree = "<group>"; };
+		A9C2F13222E7833D001763CE /* basic_block.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic_block.cpp; sourceTree = "<group>"; };
+		A9C2F13322E7833D001763CE /* validate_function.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_function.cpp; sourceTree = "<group>"; };
+		A9C2F13422E7833D001763CE /* function.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = function.h; sourceTree = "<group>"; };
+		A9C2F13522E7833D001763CE /* validate_composites.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_composites.cpp; sourceTree = "<group>"; };
+		A9C2F13622E7833D001763CE /* validation_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validation_state.cpp; sourceTree = "<group>"; };
+		A9C2F13722E7833D001763CE /* validate_primitives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validate_primitives.cpp; sourceTree = "<group>"; };
+		A9C2F13822E7833D001763CE /* decoration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoration.h; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXGroup section */
@@ -1594,437 +1591,6 @@
 			path = External;
 			sourceTree = "<group>";
 		};
-		A94A673D22B17BBB00C661C6 /* source */ = {
-			isa = PBXGroup;
-			children = (
-				A94A673E22B17BBB00C661C6 /* spirv_target_env.cpp */,
-				A94A673F22B17BBB00C661C6 /* extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json */,
-				A94A674022B17BBB00C661C6 /* spirv_fuzzer_options.h */,
-				A94A674122B17BBB00C661C6 /* assembly_grammar.h */,
-				A94A674222B17BBB00C661C6 /* enum_set.h */,
-				A94A674322B17BBB00C661C6 /* CMakeLists.txt */,
-				A94A674422B17BBB00C661C6 /* extinst.spv-amd-shader-ballot.grammar.json */,
-				A94A674522B17BBB00C661C6 /* text.cpp */,
-				A94A674622B17BBB00C661C6 /* assembly_grammar.cpp */,
-				A94A674722B17BBB00C661C6 /* text.h */,
-				A94A674822B17BBB00C661C6 /* extensions.cpp */,
-				A94A674922B17BBB00C661C6 /* pch_source.cpp */,
-				A94A674A22B17BBB00C661C6 /* util */,
-				A94A675922B17BBB00C661C6 /* spirv_target_env.h */,
-				A94A675A22B17BBB00C661C6 /* table.cpp */,
-				A94A675B22B17BBB00C661C6 /* reduce */,
-				A94A679422B17BBB00C661C6 /* latest_version_opencl_std_header.h */,
-				A94A679522B17BBB00C661C6 /* spirv_optimizer_options.cpp */,
-				A94A679622B17BBB00C661C6 /* cfa.h */,
-				A94A679722B17BBB00C661C6 /* pch_source.h */,
-				A94A679822B17BBB00C661C6 /* enum_string_mapping.h */,
-				A94A679922B17BBB00C661C6 /* spirv_fuzzer_options.cpp */,
-				A94A679A22B17BBB00C661C6 /* spirv_reducer_options.h */,
-				A94A679B22B17BBB00C661C6 /* spirv_validator_options.cpp */,
-				A94A679C22B17BBB00C661C6 /* extinst.spv-amd-shader-trinary-minmax.grammar.json */,
-				A94A679D22B17BBB00C661C6 /* print.cpp */,
-				A94A679E22B17BBB00C661C6 /* spirv_definition.h */,
-				A94A679F22B17BBB00C661C6 /* operand.h */,
-				A94A67A022B17BBB00C661C6 /* spirv_endian.cpp */,
-				A94A67A122B17BBB00C661C6 /* macro.h */,
-				A94A67A222B17BBB00C661C6 /* spirv_constant.h */,
-				A94A67A322B17BBB00C661C6 /* extinst.spv-amd-gcn-shader.grammar.json */,
-				A94A67A422B17BBB00C661C6 /* binary.cpp */,
-				A94A67A522B17BBB00C661C6 /* spirv_validator_options.h */,
-				A94A67A622B17BBB00C661C6 /* enum_string_mapping.cpp */,
-				A94A67A722B17BBB00C661C6 /* text_handler.h */,
-				A94A67A822B17BBB00C661C6 /* parsed_operand.h */,
-				A94A67A922B17BBB00C661C6 /* name_mapper.h */,
-				A94A67AA22B17BBB00C661C6 /* spirv_reducer_options.cpp */,
-				A94A67AB22B17BBB00C661C6 /* parsed_operand.cpp */,
-				A94A67AC22B17BBB00C661C6 /* diagnostic.h */,
-				A94A67AD22B17BBB00C661C6 /* spirv_endian.h */,
-				A94A67AE22B17BBB00C661C6 /* name_mapper.cpp */,
-				A94A67AF22B17BBB00C661C6 /* extinst.debuginfo.grammar.json */,
-				A94A67B022B17BBB00C661C6 /* link */,
-				A94A67B322B17BBB00C661C6 /* software_version.cpp */,
-				A94A67B422B17BBB00C661C6 /* opcode.cpp */,
-				A94A67B522B17BBB00C661C6 /* print.h */,
-				A94A67B622B17BBB00C661C6 /* ext_inst.cpp */,
-				A94A67B722B17BBB00C661C6 /* disassemble.h */,
-				A94A67B822B17BBB00C661C6 /* opt */,
-				A94A688322B17BBB00C661C6 /* table.h */,
-				A94A68AF22B17BBB00C661C6 /* ext_inst.h */,
-				A94A68B022B17BBB00C661C6 /* diagnostic.cpp */,
-				A94A68B122B17BBB00C661C6 /* latest_version_spirv_header.h */,
-				A94A68B222B17BBB00C661C6 /* libspirv.cpp */,
-				A94A68B322B17BBB00C661C6 /* instruction.h */,
-				A94A68B422B17BBB00C661C6 /* spirv_optimizer_options.h */,
-				A94A68B522B17BBB00C661C6 /* opcode.h */,
-				A94A68B622B17BBB00C661C6 /* operand.cpp */,
-				A94A68B722B17BBB00C661C6 /* latest_version_glsl_std_450_header.h */,
-				A94A68B822B17BBB00C661C6 /* extensions.h */,
-				A94A68B922B17BBB00C661C6 /* disassemble.cpp */,
-				A94A68BA22B17BBB00C661C6 /* binary.h */,
-				A94A68BB22B17BBB00C661C6 /* text_handler.cpp */,
-				A94A68BC22B17BBB00C661C6 /* val */,
-			);
-			path = source;
-			sourceTree = "<group>";
-		};
-		A94A674A22B17BBB00C661C6 /* util */ = {
-			isa = PBXGroup;
-			children = (
-				A94A674B22B17BBB00C661C6 /* parse_number.h */,
-				A94A674C22B17BBB00C661C6 /* ilist_node.h */,
-				A94A674D22B17BBB00C661C6 /* make_unique.h */,
-				A94A674E22B17BBB00C661C6 /* string_utils.h */,
-				A94A674F22B17BBB00C661C6 /* small_vector.h */,
-				A94A675022B17BBB00C661C6 /* timer.cpp */,
-				A94A675122B17BBB00C661C6 /* timer.h */,
-				A94A675222B17BBB00C661C6 /* string_utils.cpp */,
-				A94A675322B17BBB00C661C6 /* bit_vector.h */,
-				A94A675422B17BBB00C661C6 /* bitutils.h */,
-				A94A675522B17BBB00C661C6 /* hex_float.h */,
-				A94A675622B17BBB00C661C6 /* parse_number.cpp */,
-				A94A675722B17BBB00C661C6 /* bit_vector.cpp */,
-				A94A675822B17BBB00C661C6 /* ilist.h */,
-			);
-			path = util;
-			sourceTree = "<group>";
-		};
-		A94A675B22B17BBB00C661C6 /* reduce */ = {
-			isa = PBXGroup;
-			children = (
-				A94A675C22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h */,
-				A94A675D22B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp */,
-				A94A675E22B17BBB00C661C6 /* remove_block_reduction_opportunity.h */,
-				A94A675F22B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h */,
-				A94A676022B17BBB00C661C6 /* reduction_pass.cpp */,
-				A94A676122B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp */,
-				A94A676222B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h */,
-				A94A676322B17BBB00C661C6 /* CMakeLists.txt */,
-				A94A676422B17BBB00C661C6 /* reduction_util.cpp */,
-				A94A676522B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp */,
-				A94A676622B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h */,
-				A94A676722B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp */,
-				A94A676822B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h */,
-				A94A676922B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */,
-				A94A676A22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */,
-				A94A676B22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp */,
-				A94A676C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h */,
-				A94A676D22B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp */,
-				A94A676E22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp */,
-				A94A676F22B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */,
-				A94A677022B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h */,
-				A94A677122B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp */,
-				A94A677222B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp */,
-				A94A677322B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h */,
-				A94A677422B17BBB00C661C6 /* remove_function_reduction_opportunity.h */,
-				A94A677522B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h */,
-				A94A677622B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */,
-				A94A677722B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h */,
-				A94A677822B17BBB00C661C6 /* remove_selection_reduction_opportunity.h */,
-				A94A677922B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp */,
-				A94A677A22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h */,
-				A94A677B22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h */,
-				A94A677C22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp */,
-				A94A677D22B17BBB00C661C6 /* pch_source_reduce.cpp */,
-				A94A677E22B17BBB00C661C6 /* reducer.cpp */,
-				A94A677F22B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp */,
-				A94A678022B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h */,
-				A94A678122B17BBB00C661C6 /* pch_source_reduce.h */,
-				A94A678222B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h */,
-				A94A678322B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp */,
-				A94A678422B17BBB00C661C6 /* reduction_opportunity.cpp */,
-				A94A678522B17BBB00C661C6 /* reducer.h */,
-				A94A678622B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp */,
-				A94A678722B17BBB00C661C6 /* reduction_opportunity.h */,
-				A94A678822B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */,
-				A94A678922B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp */,
-				A94A678A22B17BBB00C661C6 /* reduction_opportunity_finder.h */,
-				A94A678B22B17BBB00C661C6 /* change_operand_reduction_opportunity.h */,
-				A94A678C22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h */,
-				A94A678D22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp */,
-				A94A678E22B17BBB00C661C6 /* reduction_util.h */,
-				A94A678F22B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h */,
-				A94A679022B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */,
-				A94A679122B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp */,
-				A94A679222B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp */,
-				A94A679322B17BBB00C661C6 /* reduction_pass.h */,
-			);
-			path = reduce;
-			sourceTree = "<group>";
-		};
-		A94A67B022B17BBB00C661C6 /* link */ = {
-			isa = PBXGroup;
-			children = (
-				A94A67B122B17BBB00C661C6 /* CMakeLists.txt */,
-				A94A67B222B17BBB00C661C6 /* linker.cpp */,
-			);
-			path = link;
-			sourceTree = "<group>";
-		};
-		A94A67B822B17BBB00C661C6 /* opt */ = {
-			isa = PBXGroup;
-			children = (
-				A94A67B922B17BBB00C661C6 /* optimizer.cpp */,
-				A94A67BA22B17BBB00C661C6 /* if_conversion.h */,
-				A94A67BB22B17BBB00C661C6 /* register_pressure.cpp */,
-				A94A67BC22B17BBB00C661C6 /* loop_utils.cpp */,
-				A94A67BD22B17BBB00C661C6 /* merge_return_pass.h */,
-				A94A67BE22B17BBB00C661C6 /* inline_opaque_pass.h */,
-				A94A67BF22B17BBB00C661C6 /* loop_fusion.h */,
-				A94A67C022B17BBB00C661C6 /* combine_access_chains.cpp */,
-				A94A67C122B17BBB00C661C6 /* build_module.cpp */,
-				A94A67C222B17BBB00C661C6 /* composite.h */,
-				A94A67C322B17BBB00C661C6 /* compact_ids_pass.h */,
-				A94A67C422B17BBB00C661C6 /* register_pressure.h */,
-				A94A67C522B17BBB00C661C6 /* tree_iterator.h */,
-				A94A67C622B17BBB00C661C6 /* strip_atomic_counter_memory_pass.h */,
-				A94A67C722B17BBB00C661C6 /* legalize_vector_shuffle_pass.h */,
-				A94A67C822B17BBB00C661C6 /* local_single_store_elim_pass.h */,
-				A94A67C922B17BBB00C661C6 /* reduce_load_size.h */,
-				A94A67CA22B17BBB00C661C6 /* code_sink.cpp */,
-				A94A67CB22B17BBB00C661C6 /* types.cpp */,
-				A94A67CC22B17BBB00C661C6 /* scalar_analysis.h */,
-				A94A67CD22B17BBB00C661C6 /* strip_debug_info_pass.h */,
-				A94A67CE22B17BBB00C661C6 /* cfg.cpp */,
-				A94A67CF22B17BBB00C661C6 /* strip_atomic_counter_memory_pass.cpp */,
-				A94A67D022B17BBB00C661C6 /* decoration_manager.cpp */,
-				A94A67D122B17BBB00C661C6 /* local_single_block_elim_pass.cpp */,
-				A94A67D222B17BBB00C661C6 /* freeze_spec_constant_value_pass.cpp */,
-				A94A67D322B17BBB00C661C6 /* replace_invalid_opc.h */,
-				A94A67D422B17BBB00C661C6 /* local_access_chain_convert_pass.h */,
-				A94A67D522B17BBB00C661C6 /* inst_bindless_check_pass.cpp */,
-				A94A67D622B17BBB00C661C6 /* local_redundancy_elimination.cpp */,
-				A94A67D722B17BBB00C661C6 /* CMakeLists.txt */,
-				A94A67D822B17BBB00C661C6 /* instrument_pass.cpp */,
-				A94A67D922B17BBB00C661C6 /* propagator.h */,
-				A94A67DA22B17BBB00C661C6 /* instruction_list.h */,
-				A94A67DB22B17BBB00C661C6 /* feature_manager.cpp */,
-				A94A67DC22B17BBB00C661C6 /* pass.cpp */,
-				A94A67DD22B17BBB00C661C6 /* loop_fission.cpp */,
-				A94A67DE22B17BBB00C661C6 /* dominator_tree.cpp */,
-				A94A67DF22B17BBB00C661C6 /* merge_return_pass.cpp */,
-				A94A67E022B17BBB00C661C6 /* ir_context.h */,
-				A94A67E122B17BBB00C661C6 /* eliminate_dead_constant_pass.cpp */,
-				A94A67E222B17BBB00C661C6 /* cfg_cleanup_pass.cpp */,
-				A94A67E322B17BBB00C661C6 /* const_folding_rules.cpp */,
-				A94A67E422B17BBB00C661C6 /* loop_unroller.h */,
-				A94A67E522B17BBB00C661C6 /* strip_debug_info_pass.cpp */,
-				A94A67E622B17BBB00C661C6 /* ssa_rewrite_pass.cpp */,
-				A94A67E722B17BBB00C661C6 /* loop_dependence.cpp */,
-				A94A67E822B17BBB00C661C6 /* unify_const_pass.h */,
-				A94A67E922B17BBB00C661C6 /* ir_loader.h */,
-				A94A67EA22B17BBB00C661C6 /* types.h */,
-				A94A67EB22B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.h */,
-				A94A67EC22B17BBB00C661C6 /* mem_pass.cpp */,
-				A94A67ED22B17BBB00C661C6 /* basic_block.h */,
-				A94A67EE22B17BBB00C661C6 /* remove_duplicates_pass.cpp */,
-				A94A67EF22B17BBB00C661C6 /* dead_variable_elimination.cpp */,
-				A94A67F022B17BBB00C661C6 /* block_merge_pass.h */,
-				A94A67F122B17BBB00C661C6 /* module.cpp */,
-				A94A67F222B17BBB00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp */,
-				A94A67F322B17BBB00C661C6 /* loop_unswitch_pass.cpp */,
-				A94A67F422B17BBB00C661C6 /* unify_const_pass.cpp */,
-				A94A67F522B17BBB00C661C6 /* type_manager.cpp */,
-				A94A67F622B17BBB00C661C6 /* generate_webgpu_initializers_pass.cpp */,
-				A94A67F722B17BBB00C661C6 /* private_to_local_pass.h */,
-				A94A67F822B17BBB00C661C6 /* inline_pass.cpp */,
-				A94A67F922B17BBB00C661C6 /* def_use_manager.h */,
-				A94A67FA22B17BBB00C661C6 /* ir_loader.cpp */,
-				A94A67FB22B17BBB00C661C6 /* cfg_cleanup_pass.h */,
-				A94A67FC22B17BBB00C661C6 /* licm_pass.cpp */,
-				A94A67FD22B17BBB00C661C6 /* eliminate_dead_functions_pass.cpp */,
-				A94A67FE22B17BBB00C661C6 /* local_redundancy_elimination.h */,
-				A94A67FF22B17BBB00C661C6 /* split_invalid_unreachable_pass.cpp */,
-				A94A680022B17BBB00C661C6 /* loop_peeling.h */,
-				A94A680122B17BBB00C661C6 /* vector_dce.cpp */,
-				A94A680222B17BBB00C661C6 /* block_merge_util.h */,
-				A94A680322B17BBB00C661C6 /* loop_unroller.cpp */,
-				A94A680422B17BBB00C661C6 /* constants.cpp */,
-				A94A680522B17BBB00C661C6 /* loop_fusion_pass.h */,
-				A94A680622B17BBB00C661C6 /* struct_cfg_analysis.h */,
-				A94A680722B17BBB00C661C6 /* common_uniform_elim_pass.cpp */,
-				A94A680822B17BBB00C661C6 /* def_use_manager.cpp */,
-				A94A680922B17BBB00C661C6 /* strip_reflect_info_pass.cpp */,
-				A94A680A22B17BBB00C661C6 /* decoration_manager.h */,
-				A94A680B22B17BBB00C661C6 /* ccp_pass.cpp */,
-				A94A680C22B17BBB00C661C6 /* process_lines_pass.h */,
-				A94A680D22B17BBB00C661C6 /* local_single_block_elim_pass.h */,
-				A94A680E22B17BBB00C661C6 /* pch_source_opt.cpp */,
-				A94A680F22B17BBB00C661C6 /* strength_reduction_pass.h */,
-				A94A681022B17BBB00C661C6 /* aggressive_dead_code_elim_pass.cpp */,
-				A94A681122B17BBB00C661C6 /* eliminate_dead_functions_util.cpp */,
-				A94A681222B17BBB00C661C6 /* simplification_pass.cpp */,
-				A94A681322B17BBB00C661C6 /* dead_branch_elim_pass.cpp */,
-				A94A681422B17BBB00C661C6 /* flatten_decoration_pass.cpp */,
-				A94A681522B17BBB00C661C6 /* dead_insert_elim_pass.h */,
-				A94A681622B17BBB00C661C6 /* folding_rules.cpp */,
-				A94A681722B17BBB00C661C6 /* freeze_spec_constant_value_pass.h */,
-				A94A681822B17BBB00C661C6 /* ir_context.cpp */,
-				A94A681922B17BBB00C661C6 /* instrument_pass.h */,
-				A94A681A22B17BBB00C661C6 /* mem_pass.h */,
-				A94A681B22B17BBB00C661C6 /* loop_descriptor.cpp */,
-				A94A681C22B17BBB00C661C6 /* local_ssa_elim_pass.cpp */,
-				A94A681D22B17BBB00C661C6 /* eliminate_dead_members_pass.h */,
-				A94A681E22B17BBB00C661C6 /* function.cpp */,
-				A94A681F22B17BBB00C661C6 /* instruction_list.cpp */,
-				A94A682022B17BBB00C661C6 /* composite.cpp */,
-				A94A682122B17BBB00C661C6 /* process_lines_pass.cpp */,
-				A94A682222B17BBB00C661C6 /* inline_pass.h */,
-				A94A682322B17BBB00C661C6 /* loop_dependence.h */,
-				A94A682422B17BBB00C661C6 /* value_number_table.h */,
-				A94A682522B17BBB00C661C6 /* flatten_decoration_pass.h */,
-				A94A682622B17BBB00C661C6 /* if_conversion.cpp */,
-				A94A682722B17BBB00C661C6 /* inline_exhaustive_pass.h */,
-				A94A682822B17BBB00C661C6 /* constants.h */,
-				A94A682922B17BBB00C661C6 /* eliminate_dead_members_pass.cpp */,
-				A94A682A22B17BBB00C661C6 /* strength_reduction_pass.cpp */,
-				A94A682B22B17BBB00C661C6 /* block_merge_util.cpp */,
-				A94A682C22B17BBB00C661C6 /* upgrade_memory_model.h */,
-				A94A682D22B17BBB00C661C6 /* copy_prop_arrays.cpp */,
-				A94A682E22B17BBB00C661C6 /* pass_manager.cpp */,
-				A94A682F22B17BBB00C661C6 /* inline_exhaustive_pass.cpp */,
-				A94A683022B17BBB00C661C6 /* loop_fission.h */,
-				A94A683122B17BBB00C661C6 /* workaround1209.h */,
-				A94A683222B17BBB00C661C6 /* loop_fusion_pass.cpp */,
-				A94A683322B17BBB00C661C6 /* log.h */,
-				A94A683422B17BBB00C661C6 /* split_invalid_unreachable_pass.h */,
-				A94A683522B17BBB00C661C6 /* copy_prop_arrays.h */,
-				A94A683622B17BBB00C661C6 /* eliminate_dead_constant_pass.h */,
-				A94A683722B17BBB00C661C6 /* dead_insert_elim_pass.cpp */,
-				A94A683822B17BBB00C661C6 /* ssa_rewrite_pass.h */,
-				A94A683922B17BBB00C661C6 /* scalar_analysis.cpp */,
-				A94A683A22B17BBB00C661C6 /* dead_variable_elimination.h */,
-				A94A683B22B17BBB00C661C6 /* block_merge_pass.cpp */,
-				A94A683C22B17BBB00C661C6 /* dominator_analysis.h */,
-				A94A683D22B17BBB00C661C6 /* pass.h */,
-				A94A683E22B17BBB00C661C6 /* folding_rules.h */,
-				A94A683F22B17BBB00C661C6 /* eliminate_dead_functions_pass.h */,
-				A94A684022B17BBB00C661C6 /* common_uniform_elim_pass.h */,
-				A94A684122B17BBB00C661C6 /* eliminate_dead_functions_util.h */,
-				A94A684222B17BBB00C661C6 /* fold.h */,
-				A94A684322B17BBB00C661C6 /* local_single_store_elim_pass.cpp */,
-				A94A684422B17BBB00C661C6 /* dead_branch_elim_pass.h */,
-				A94A684522B17BBB00C661C6 /* private_to_local_pass.cpp */,
-				A94A684622B17BBB00C661C6 /* scalar_analysis_nodes.h */,
-				A94A684722B17BBB00C661C6 /* propagator.cpp */,
-				A94A684822B17BBB00C661C6 /* fix_storage_class.h */,
-				A94A684922B17BBB00C661C6 /* loop_dependence_helpers.cpp */,
-				A94A684A22B17BBB00C661C6 /* set_spec_constant_default_value_pass.cpp */,
-				A94A684B22B17BBB00C661C6 /* passes.h */,
-				A94A684C22B17BBB00C661C6 /* fold.cpp */,
-				A94A684D22B17BBB00C661C6 /* strip_reflect_info_pass.h */,
-				A94A684E22B17BBB00C661C6 /* scalar_replacement_pass.cpp */,
-				A94A684F22B17BBB00C661C6 /* simplification_pass.h */,
-				A94A685022B17BBB00C661C6 /* remove_duplicates_pass.h */,
-				A94A685122B17BBB00C661C6 /* redundancy_elimination.cpp */,
-				A94A685222B17BBB00C661C6 /* reflect.h */,
-				A94A685322B17BBB00C661C6 /* workaround1209.cpp */,
-				A94A685422B17BBB00C661C6 /* null_pass.h */,
-				A94A685522B17BBB00C661C6 /* const_folding_rules.h */,
-				A94A685622B17BBB00C661C6 /* scalar_replacement_pass.h */,
-				A94A685722B17BBB00C661C6 /* instruction.cpp */,
-				A94A685822B17BBB00C661C6 /* pch_source_opt.h */,
-				A94A685922B17BBB00C661C6 /* reduce_load_size.cpp */,
-				A94A685A22B17BBB00C661C6 /* redundancy_elimination.h */,
-				A94A685B22B17BBB00C661C6 /* fix_storage_class.cpp */,
-				A94A685C22B17BBB00C661C6 /* value_number_table.cpp */,
-				A94A685D22B17BBB00C661C6 /* local_ssa_elim_pass.h */,
-				A94A685E22B17BBB00C661C6 /* inline_opaque_pass.cpp */,
-				A94A685F22B17BBB00C661C6 /* replace_invalid_opc.cpp */,
-				A94A686022B17BBB00C661C6 /* loop_utils.h */,
-				A94A686122B17BBB00C661C6 /* module.h */,
-				A94A686222B17BBB00C661C6 /* dominator_analysis.cpp */,
-				A94A686322B17BBB00C661C6 /* decompose_initialized_variables_pass.cpp */,
-				A94A686422B17BBB00C661C6 /* ir_builder.h */,
-				A94A686522B17BBB00C661C6 /* loop_unswitch_pass.h */,
-				A94A686622B17BBB00C661C6 /* cfg.h */,
-				A94A686722B17BBB00C661C6 /* code_sink.h */,
-				A94A686822B17BBB00C661C6 /* loop_descriptor.h */,
-				A94A686922B17BBB00C661C6 /* generate_webgpu_initializers_pass.h */,
-				A94A686A22B17BBB00C661C6 /* instruction.h */,
-				A94A686B22B17BBB00C661C6 /* aggressive_dead_code_elim_pass.h */,
-				A94A686C22B17BBB00C661C6 /* struct_cfg_analysis.cpp */,
-				A94A686D22B17BBB00C661C6 /* vector_dce.h */,
-				A94A686E22B17BBB00C661C6 /* combine_access_chains.h */,
-				A94A686F22B17BBB00C661C6 /* pass_manager.h */,
-				A94A687022B17BBB00C661C6 /* local_access_chain_convert_pass.cpp */,
-				A94A687122B17BBB00C661C6 /* basic_block.cpp */,
-				A94A687222B17BBB00C661C6 /* iterator.h */,
-				A94A687322B17BBB00C661C6 /* licm_pass.h */,
-				A94A687422B17BBB00C661C6 /* build_module.h */,
-				A94A687522B17BBB00C661C6 /* ccp_pass.h */,
-				A94A687622B17BBB00C661C6 /* decompose_initialized_variables_pass.h */,
-				A94A687722B17BBB00C661C6 /* function.h */,
-				A94A687822B17BBB00C661C6 /* loop_fusion.cpp */,
-				A94A687922B17BBB00C661C6 /* upgrade_memory_model.cpp */,
-				A94A687A22B17BBB00C661C6 /* feature_manager.h */,
-				A94A687B22B17BBB00C661C6 /* inst_bindless_check_pass.h */,
-				A94A687C22B17BBB00C661C6 /* scalar_analysis_simplification.cpp */,
-				A94A687D22B17BBB00C661C6 /* set_spec_constant_default_value_pass.h */,
-				A94A687E22B17BBB00C661C6 /* dominator_tree.h */,
-				A94A687F22B17BBB00C661C6 /* legalize_vector_shuffle_pass.cpp */,
-				A94A688022B17BBB00C661C6 /* type_manager.h */,
-				A94A688122B17BBB00C661C6 /* compact_ids_pass.cpp */,
-				A94A688222B17BBB00C661C6 /* loop_peeling.cpp */,
-			);
-			path = opt;
-			sourceTree = "<group>";
-		};
-		A94A68BC22B17BBB00C661C6 /* val */ = {
-			isa = PBXGroup;
-			children = (
-				A94A68BD22B17BBB00C661C6 /* validate_annotation.cpp */,
-				A94A68BE22B17BBB00C661C6 /* validate_misc.cpp */,
-				A94A68BF22B17BBB00C661C6 /* validate_cfg.cpp */,
-				A94A68C022B17BBB00C661C6 /* validate_capability.cpp */,
-				A94A68C122B17BBB00C661C6 /* construct.h */,
-				A94A68C222B17BBB00C661C6 /* validate_barriers.cpp */,
-				A94A68C322B17BBB00C661C6 /* validate_non_uniform.cpp */,
-				A94A68C422B17BBB00C661C6 /* validate_scopes.cpp */,
-				A94A68C522B17BBB00C661C6 /* validate_atomics.cpp */,
-				A94A68C622B17BBB00C661C6 /* basic_block.h */,
-				A94A68C722B17BBB00C661C6 /* validate_instruction.cpp */,
-				A94A68C822B17BBB00C661C6 /* validate_decorations.cpp */,
-				A94A68C922B17BBB00C661C6 /* validate_debug.cpp */,
-				A94A68CA22B17BBB00C661C6 /* validate_builtins.cpp */,
-				A94A68CB22B17BBB00C661C6 /* validate_interfaces.cpp */,
-				A94A68CC22B17BBB00C661C6 /* validate.cpp */,
-				A94A68CD22B17BBB00C661C6 /* validation_state.h */,
-				A94A68CE22B17BBB00C661C6 /* validate_constants.cpp */,
-				A94A68CF22B17BBB00C661C6 /* validate_bitwise.cpp */,
-				A94A68D022B17BBB00C661C6 /* validate_extensions.cpp */,
-				A94A68D122B17BBB00C661C6 /* construct.cpp */,
-				A94A68D222B17BBB00C661C6 /* function.cpp */,
-				A94A68D322B17BBB00C661C6 /* validate.h */,
-				A94A68D422B17BBB00C661C6 /* validate_adjacency.cpp */,
-				A94A68D522B17BBB00C661C6 /* validate_conversion.cpp */,
-				A94A68D622B17BBB00C661C6 /* validate_datarules.cpp */,
-				A94A68D722B17BBB00C661C6 /* validate_scopes.h */,
-				A94A68D822B17BBB00C661C6 /* validate_id.cpp */,
-				A94A68D922B17BBB00C661C6 /* validate_memory_semantics.h */,
-				A94A68DA22B17BBB00C661C6 /* validate_arithmetics.cpp */,
-				A94A68DB22B17BBB00C661C6 /* validate_mode_setting.cpp */,
-				A94A68DC22B17BBB00C661C6 /* validate_memory_semantics.cpp */,
-				A94A68DD22B17BBB00C661C6 /* validate_logicals.cpp */,
-				A94A68DE22B17BBB00C661C6 /* validate_derivatives.cpp */,
-				A94A68DF22B17BBB00C661C6 /* validate_memory.cpp */,
-				A94A68E022B17BBB00C661C6 /* validate_image.cpp */,
-				A94A68E122B17BBB00C661C6 /* validate_literals.cpp */,
-				A94A68E222B17BBB00C661C6 /* instruction.cpp */,
-				A94A68E322B17BBB00C661C6 /* validate_type.cpp */,
-				A94A68E422B17BBB00C661C6 /* instruction.h */,
-				A94A68E522B17BBB00C661C6 /* validate_execution_limitations.cpp */,
-				A94A68E622B17BBB00C661C6 /* validate_layout.cpp */,
-				A94A68E722B17BBB00C661C6 /* basic_block.cpp */,
-				A94A68E822B17BBB00C661C6 /* validate_function.cpp */,
-				A94A68E922B17BBB00C661C6 /* function.h */,
-				A94A68EA22B17BBB00C661C6 /* validate_composites.cpp */,
-				A94A68EB22B17BBB00C661C6 /* validation_state.cpp */,
-				A94A68EC22B17BBB00C661C6 /* validate_primitives.cpp */,
-				A94A68ED22B17BBB00C661C6 /* decoration.h */,
-			);
-			path = val;
-			sourceTree = "<group>";
-		};
 		A9679AAB21D2699800856BF7 /* Scripts */ = {
 			isa = PBXGroup;
 			children = (
@@ -2038,7 +1604,7 @@
 		A972A82421CECC410013AB25 /* SPIRV-Tools */ = {
 			isa = PBXGroup;
 			children = (
-				A94A673D22B17BBB00C661C6 /* source */,
+				A9C2EF7722E7833C001763CE /* source */,
 			);
 			name = "SPIRV-Tools";
 			path = "glslang/External/spirv-tools";
@@ -2263,6 +1829,436 @@
 			path = "SPIRV-Cross";
 			sourceTree = "<group>";
 		};
+		A9C2EF7722E7833C001763CE /* source */ = {
+			isa = PBXGroup;
+			children = (
+				A9C2EF7822E7833C001763CE /* spirv_target_env.cpp */,
+				A9C2EF7922E7833C001763CE /* extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json */,
+				A9C2EF7A22E7833C001763CE /* spirv_fuzzer_options.h */,
+				A9C2EF7B22E7833C001763CE /* assembly_grammar.h */,
+				A9C2EF7C22E7833C001763CE /* enum_set.h */,
+				A9C2EF7D22E7833C001763CE /* CMakeLists.txt */,
+				A9C2EF7E22E7833C001763CE /* extinst.spv-amd-shader-ballot.grammar.json */,
+				A9C2EF7F22E7833C001763CE /* text.cpp */,
+				A9C2EF8022E7833C001763CE /* assembly_grammar.cpp */,
+				A9C2EF8122E7833C001763CE /* text.h */,
+				A9C2EF8222E7833C001763CE /* extensions.cpp */,
+				A9C2EF8322E7833C001763CE /* pch_source.cpp */,
+				A9C2EF8422E7833C001763CE /* util */,
+				A9C2EF9322E7833C001763CE /* spirv_target_env.h */,
+				A9C2EF9422E7833C001763CE /* table.cpp */,
+				A9C2EF9522E7833C001763CE /* reduce */,
+				A9C2EFCE22E7833C001763CE /* latest_version_opencl_std_header.h */,
+				A9C2EFCF22E7833C001763CE /* spirv_optimizer_options.cpp */,
+				A9C2EFD022E7833C001763CE /* cfa.h */,
+				A9C2EFD122E7833C001763CE /* pch_source.h */,
+				A9C2EFD222E7833C001763CE /* enum_string_mapping.h */,
+				A9C2EFD322E7833C001763CE /* spirv_fuzzer_options.cpp */,
+				A9C2EFD422E7833C001763CE /* spirv_reducer_options.h */,
+				A9C2EFD522E7833C001763CE /* spirv_validator_options.cpp */,
+				A9C2EFD622E7833C001763CE /* extinst.spv-amd-shader-trinary-minmax.grammar.json */,
+				A9C2EFD722E7833C001763CE /* print.cpp */,
+				A9C2EFD822E7833C001763CE /* spirv_definition.h */,
+				A9C2EFD922E7833C001763CE /* operand.h */,
+				A9C2EFDA22E7833C001763CE /* spirv_endian.cpp */,
+				A9C2EFDB22E7833C001763CE /* macro.h */,
+				A9C2EFDC22E7833C001763CE /* spirv_constant.h */,
+				A9C2EFDD22E7833C001763CE /* extinst.spv-amd-gcn-shader.grammar.json */,
+				A9C2EFDE22E7833C001763CE /* binary.cpp */,
+				A9C2EFDF22E7833C001763CE /* spirv_validator_options.h */,
+				A9C2EFE022E7833C001763CE /* enum_string_mapping.cpp */,
+				A9C2EFE122E7833C001763CE /* text_handler.h */,
+				A9C2EFE222E7833C001763CE /* parsed_operand.h */,
+				A9C2EFE322E7833C001763CE /* name_mapper.h */,
+				A9C2EFE422E7833C001763CE /* spirv_reducer_options.cpp */,
+				A9C2EFE522E7833C001763CE /* parsed_operand.cpp */,
+				A9C2EFE622E7833C001763CE /* diagnostic.h */,
+				A9C2EFE722E7833C001763CE /* spirv_endian.h */,
+				A9C2EFE822E7833C001763CE /* name_mapper.cpp */,
+				A9C2EFE922E7833C001763CE /* extinst.debuginfo.grammar.json */,
+				A9C2EFEA22E7833C001763CE /* link */,
+				A9C2EFED22E7833C001763CE /* software_version.cpp */,
+				A9C2EFEE22E7833C001763CE /* opcode.cpp */,
+				A9C2EFEF22E7833C001763CE /* print.h */,
+				A9C2EFF022E7833C001763CE /* ext_inst.cpp */,
+				A9C2EFF122E7833C001763CE /* disassemble.h */,
+				A9C2EFF222E7833C001763CE /* opt */,
+				A9C2F0BB22E7833C001763CE /* table.h */,
+				A9C2F0F922E7833D001763CE /* ext_inst.h */,
+				A9C2F0FA22E7833D001763CE /* diagnostic.cpp */,
+				A9C2F0FB22E7833D001763CE /* latest_version_spirv_header.h */,
+				A9C2F0FC22E7833D001763CE /* libspirv.cpp */,
+				A9C2F0FD22E7833D001763CE /* instruction.h */,
+				A9C2F0FE22E7833D001763CE /* spirv_optimizer_options.h */,
+				A9C2F0FF22E7833D001763CE /* opcode.h */,
+				A9C2F10022E7833D001763CE /* operand.cpp */,
+				A9C2F10122E7833D001763CE /* latest_version_glsl_std_450_header.h */,
+				A9C2F10222E7833D001763CE /* extensions.h */,
+				A9C2F10322E7833D001763CE /* disassemble.cpp */,
+				A9C2F10422E7833D001763CE /* binary.h */,
+				A9C2F10522E7833D001763CE /* text_handler.cpp */,
+				A9C2F10622E7833D001763CE /* val */,
+			);
+			path = source;
+			sourceTree = "<group>";
+		};
+		A9C2EF8422E7833C001763CE /* util */ = {
+			isa = PBXGroup;
+			children = (
+				A9C2EF8522E7833C001763CE /* parse_number.h */,
+				A9C2EF8622E7833C001763CE /* ilist_node.h */,
+				A9C2EF8722E7833C001763CE /* make_unique.h */,
+				A9C2EF8822E7833C001763CE /* string_utils.h */,
+				A9C2EF8922E7833C001763CE /* small_vector.h */,
+				A9C2EF8A22E7833C001763CE /* timer.cpp */,
+				A9C2EF8B22E7833C001763CE /* timer.h */,
+				A9C2EF8C22E7833C001763CE /* string_utils.cpp */,
+				A9C2EF8D22E7833C001763CE /* bit_vector.h */,
+				A9C2EF8E22E7833C001763CE /* bitutils.h */,
+				A9C2EF8F22E7833C001763CE /* hex_float.h */,
+				A9C2EF9022E7833C001763CE /* parse_number.cpp */,
+				A9C2EF9122E7833C001763CE /* bit_vector.cpp */,
+				A9C2EF9222E7833C001763CE /* ilist.h */,
+			);
+			path = util;
+			sourceTree = "<group>";
+		};
+		A9C2EF9522E7833C001763CE /* reduce */ = {
+			isa = PBXGroup;
+			children = (
+				A9C2EF9622E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.h */,
+				A9C2EF9722E7833C001763CE /* remove_selection_reduction_opportunity.cpp */,
+				A9C2EF9822E7833C001763CE /* remove_block_reduction_opportunity.h */,
+				A9C2EF9922E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h */,
+				A9C2EF9A22E7833C001763CE /* reduction_pass.cpp */,
+				A9C2EF9B22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.cpp */,
+				A9C2EF9C22E7833C001763CE /* operand_to_const_reduction_opportunity_finder.h */,
+				A9C2EF9D22E7833C001763CE /* CMakeLists.txt */,
+				A9C2EF9E22E7833C001763CE /* reduction_util.cpp */,
+				A9C2EF9F22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp */,
+				A9C2EFA022E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h */,
+				A9C2EFA122E7833C001763CE /* remove_function_reduction_opportunity_finder.cpp */,
+				A9C2EFA222E7833C001763CE /* remove_instruction_reduction_opportunity.h */,
+				A9C2EFA322E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h */,
+				A9C2EFA422E7833C001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp */,
+				A9C2EFA522E7833C001763CE /* remove_function_reduction_opportunity.cpp */,
+				A9C2EFA622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.h */,
+				A9C2EFA722E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp */,
+				A9C2EFA822E7833C001763CE /* remove_selection_reduction_opportunity_finder.cpp */,
+				A9C2EFA922E7833C001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp */,
+				A9C2EFAA22E7833C001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h */,
+				A9C2EFAB22E7833C001763CE /* merge_blocks_reduction_opportunity.cpp */,
+				A9C2EFAC22E7833C001763CE /* change_operand_reduction_opportunity.cpp */,
+				A9C2EFAD22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.h */,
+				A9C2EFAE22E7833C001763CE /* remove_function_reduction_opportunity.h */,
+				A9C2EFAF22E7833C001763CE /* change_operand_to_undef_reduction_opportunity.h */,
+				A9C2EFB022E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp */,
+				A9C2EFB122E7833C001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h */,
+				A9C2EFB222E7833C001763CE /* remove_selection_reduction_opportunity.h */,
+				A9C2EFB322E7833C001763CE /* remove_instruction_reduction_opportunity.cpp */,
+				A9C2EFB422E7833C001763CE /* remove_selection_reduction_opportunity_finder.h */,
+				A9C2EFB522E7833C001763CE /* merge_blocks_reduction_opportunity_finder.h */,
+				A9C2EFB622E7833C001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp */,
+				A9C2EFB722E7833C001763CE /* pch_source_reduce.cpp */,
+				A9C2EFB822E7833C001763CE /* reducer.cpp */,
+				A9C2EFB922E7833C001763CE /* operand_to_undef_reduction_opportunity_finder.cpp */,
+				A9C2EFBA22E7833C001763CE /* remove_function_reduction_opportunity_finder.h */,
+				A9C2EFBB22E7833C001763CE /* pch_source_reduce.h */,
+				A9C2EFBC22E7833C001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h */,
+				A9C2EFBD22E7833C001763CE /* merge_blocks_reduction_opportunity_finder.cpp */,
+				A9C2EFBE22E7833C001763CE /* reduction_opportunity.cpp */,
+				A9C2EFBF22E7833C001763CE /* reducer.h */,
+				A9C2EFC022E7833C001763CE /* change_operand_to_undef_reduction_opportunity.cpp */,
+				A9C2EFC122E7833C001763CE /* reduction_opportunity.h */,
+				A9C2EFC222E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h */,
+				A9C2EFC322E7833C001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp */,
+				A9C2EFC422E7833C001763CE /* reduction_opportunity_finder.h */,
+				A9C2EFC522E7833C001763CE /* change_operand_reduction_opportunity.h */,
+				A9C2EFC622E7833C001763CE /* remove_block_reduction_opportunity_finder.h */,
+				A9C2EFC722E7833C001763CE /* remove_block_reduction_opportunity_finder.cpp */,
+				A9C2EFC822E7833C001763CE /* reduction_util.h */,
+				A9C2EFC922E7833C001763CE /* merge_blocks_reduction_opportunity.h */,
+				A9C2EFCA22E7833C001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp */,
+				A9C2EFCB22E7833C001763CE /* structured_loop_to_selection_reduction_opportunity.cpp */,
+				A9C2EFCC22E7833C001763CE /* remove_block_reduction_opportunity.cpp */,
+				A9C2EFCD22E7833C001763CE /* reduction_pass.h */,
+			);
+			path = reduce;
+			sourceTree = "<group>";
+		};
+		A9C2EFEA22E7833C001763CE /* link */ = {
+			isa = PBXGroup;
+			children = (
+				A9C2EFEB22E7833C001763CE /* CMakeLists.txt */,
+				A9C2EFEC22E7833C001763CE /* linker.cpp */,
+			);
+			path = link;
+			sourceTree = "<group>";
+		};
+		A9C2EFF222E7833C001763CE /* opt */ = {
+			isa = PBXGroup;
+			children = (
+				A9C2EFF322E7833C001763CE /* optimizer.cpp */,
+				A9C2EFF422E7833C001763CE /* if_conversion.h */,
+				A9C2EFF522E7833C001763CE /* register_pressure.cpp */,
+				A9C2EFF622E7833C001763CE /* loop_utils.cpp */,
+				A9C2EFF722E7833C001763CE /* merge_return_pass.h */,
+				A9C2EFF822E7833C001763CE /* inline_opaque_pass.h */,
+				A9C2EFF922E7833C001763CE /* loop_fusion.h */,
+				A9C2EFFA22E7833C001763CE /* combine_access_chains.cpp */,
+				A9C2EFFB22E7833C001763CE /* build_module.cpp */,
+				A9C2EFFC22E7833C001763CE /* composite.h */,
+				A9C2EFFD22E7833C001763CE /* compact_ids_pass.h */,
+				A9C2EFFE22E7833C001763CE /* register_pressure.h */,
+				A9C2EFFF22E7833C001763CE /* tree_iterator.h */,
+				A9C2F00022E7833C001763CE /* strip_atomic_counter_memory_pass.h */,
+				A9C2F00122E7833C001763CE /* legalize_vector_shuffle_pass.h */,
+				A9C2F00222E7833C001763CE /* local_single_store_elim_pass.h */,
+				A9C2F00322E7833C001763CE /* reduce_load_size.h */,
+				A9C2F00422E7833C001763CE /* code_sink.cpp */,
+				A9C2F00522E7833C001763CE /* types.cpp */,
+				A9C2F00622E7833C001763CE /* scalar_analysis.h */,
+				A9C2F00722E7833C001763CE /* strip_debug_info_pass.h */,
+				A9C2F00822E7833C001763CE /* cfg.cpp */,
+				A9C2F00922E7833C001763CE /* strip_atomic_counter_memory_pass.cpp */,
+				A9C2F00A22E7833C001763CE /* decoration_manager.cpp */,
+				A9C2F00B22E7833C001763CE /* local_single_block_elim_pass.cpp */,
+				A9C2F00C22E7833C001763CE /* freeze_spec_constant_value_pass.cpp */,
+				A9C2F00D22E7833C001763CE /* replace_invalid_opc.h */,
+				A9C2F00E22E7833C001763CE /* local_access_chain_convert_pass.h */,
+				A9C2F00F22E7833C001763CE /* inst_bindless_check_pass.cpp */,
+				A9C2F01022E7833C001763CE /* local_redundancy_elimination.cpp */,
+				A9C2F01122E7833C001763CE /* CMakeLists.txt */,
+				A9C2F01222E7833C001763CE /* instrument_pass.cpp */,
+				A9C2F01322E7833C001763CE /* propagator.h */,
+				A9C2F01422E7833C001763CE /* instruction_list.h */,
+				A9C2F01522E7833C001763CE /* feature_manager.cpp */,
+				A9C2F01622E7833C001763CE /* pass.cpp */,
+				A9C2F01722E7833C001763CE /* loop_fission.cpp */,
+				A9C2F01822E7833C001763CE /* dominator_tree.cpp */,
+				A9C2F01922E7833C001763CE /* merge_return_pass.cpp */,
+				A9C2F01A22E7833C001763CE /* ir_context.h */,
+				A9C2F01B22E7833C001763CE /* eliminate_dead_constant_pass.cpp */,
+				A9C2F01C22E7833C001763CE /* cfg_cleanup_pass.cpp */,
+				A9C2F01D22E7833C001763CE /* const_folding_rules.cpp */,
+				A9C2F01E22E7833C001763CE /* loop_unroller.h */,
+				A9C2F01F22E7833C001763CE /* strip_debug_info_pass.cpp */,
+				A9C2F02022E7833C001763CE /* ssa_rewrite_pass.cpp */,
+				A9C2F02122E7833C001763CE /* loop_dependence.cpp */,
+				A9C2F02222E7833C001763CE /* unify_const_pass.h */,
+				A9C2F02322E7833C001763CE /* ir_loader.h */,
+				A9C2F02422E7833C001763CE /* types.h */,
+				A9C2F02522E7833C001763CE /* fold_spec_constant_op_and_composite_pass.h */,
+				A9C2F02622E7833C001763CE /* mem_pass.cpp */,
+				A9C2F02722E7833C001763CE /* basic_block.h */,
+				A9C2F02822E7833C001763CE /* remove_duplicates_pass.cpp */,
+				A9C2F02922E7833C001763CE /* dead_variable_elimination.cpp */,
+				A9C2F02A22E7833C001763CE /* block_merge_pass.h */,
+				A9C2F02B22E7833C001763CE /* module.cpp */,
+				A9C2F02C22E7833C001763CE /* fold_spec_constant_op_and_composite_pass.cpp */,
+				A9C2F02D22E7833C001763CE /* loop_unswitch_pass.cpp */,
+				A9C2F02E22E7833C001763CE /* unify_const_pass.cpp */,
+				A9C2F02F22E7833C001763CE /* type_manager.cpp */,
+				A9C2F03022E7833C001763CE /* generate_webgpu_initializers_pass.cpp */,
+				A9C2F03122E7833C001763CE /* private_to_local_pass.h */,
+				A9C2F03222E7833C001763CE /* inline_pass.cpp */,
+				A9C2F03322E7833C001763CE /* def_use_manager.h */,
+				A9C2F03422E7833C001763CE /* ir_loader.cpp */,
+				A9C2F03522E7833C001763CE /* cfg_cleanup_pass.h */,
+				A9C2F03622E7833C001763CE /* licm_pass.cpp */,
+				A9C2F03722E7833C001763CE /* eliminate_dead_functions_pass.cpp */,
+				A9C2F03822E7833C001763CE /* local_redundancy_elimination.h */,
+				A9C2F03922E7833C001763CE /* split_invalid_unreachable_pass.cpp */,
+				A9C2F03A22E7833C001763CE /* loop_peeling.h */,
+				A9C2F03B22E7833C001763CE /* vector_dce.cpp */,
+				A9C2F03C22E7833C001763CE /* block_merge_util.h */,
+				A9C2F03D22E7833C001763CE /* loop_unroller.cpp */,
+				A9C2F03E22E7833C001763CE /* constants.cpp */,
+				A9C2F03F22E7833C001763CE /* loop_fusion_pass.h */,
+				A9C2F04022E7833C001763CE /* struct_cfg_analysis.h */,
+				A9C2F04122E7833C001763CE /* def_use_manager.cpp */,
+				A9C2F04222E7833C001763CE /* strip_reflect_info_pass.cpp */,
+				A9C2F04322E7833C001763CE /* decoration_manager.h */,
+				A9C2F04422E7833C001763CE /* ccp_pass.cpp */,
+				A9C2F04522E7833C001763CE /* process_lines_pass.h */,
+				A9C2F04622E7833C001763CE /* local_single_block_elim_pass.h */,
+				A9C2F04722E7833C001763CE /* pch_source_opt.cpp */,
+				A9C2F04822E7833C001763CE /* strength_reduction_pass.h */,
+				A9C2F04922E7833C001763CE /* aggressive_dead_code_elim_pass.cpp */,
+				A9C2F04A22E7833C001763CE /* eliminate_dead_functions_util.cpp */,
+				A9C2F04B22E7833C001763CE /* simplification_pass.cpp */,
+				A9C2F04C22E7833C001763CE /* dead_branch_elim_pass.cpp */,
+				A9C2F04D22E7833C001763CE /* flatten_decoration_pass.cpp */,
+				A9C2F04E22E7833C001763CE /* dead_insert_elim_pass.h */,
+				A9C2F04F22E7833C001763CE /* folding_rules.cpp */,
+				A9C2F05022E7833C001763CE /* freeze_spec_constant_value_pass.h */,
+				A9C2F05122E7833C001763CE /* ir_context.cpp */,
+				A9C2F05222E7833C001763CE /* instrument_pass.h */,
+				A9C2F05322E7833C001763CE /* mem_pass.h */,
+				A9C2F05422E7833C001763CE /* loop_descriptor.cpp */,
+				A9C2F05522E7833C001763CE /* local_ssa_elim_pass.cpp */,
+				A9C2F05622E7833C001763CE /* eliminate_dead_members_pass.h */,
+				A9C2F05722E7833C001763CE /* function.cpp */,
+				A9C2F05822E7833C001763CE /* instruction_list.cpp */,
+				A9C2F05922E7833C001763CE /* composite.cpp */,
+				A9C2F05A22E7833C001763CE /* process_lines_pass.cpp */,
+				A9C2F05B22E7833C001763CE /* inline_pass.h */,
+				A9C2F05C22E7833C001763CE /* loop_dependence.h */,
+				A9C2F05D22E7833C001763CE /* value_number_table.h */,
+				A9C2F05E22E7833C001763CE /* flatten_decoration_pass.h */,
+				A9C2F05F22E7833C001763CE /* if_conversion.cpp */,
+				A9C2F06022E7833C001763CE /* inline_exhaustive_pass.h */,
+				A9C2F06122E7833C001763CE /* constants.h */,
+				A9C2F06222E7833C001763CE /* eliminate_dead_members_pass.cpp */,
+				A9C2F06322E7833C001763CE /* strength_reduction_pass.cpp */,
+				A9C2F06422E7833C001763CE /* block_merge_util.cpp */,
+				A9C2F06522E7833C001763CE /* upgrade_memory_model.h */,
+				A9C2F06622E7833C001763CE /* copy_prop_arrays.cpp */,
+				A9C2F06722E7833C001763CE /* pass_manager.cpp */,
+				A9C2F06822E7833C001763CE /* inline_exhaustive_pass.cpp */,
+				A9C2F06922E7833C001763CE /* loop_fission.h */,
+				A9C2F06A22E7833C001763CE /* workaround1209.h */,
+				A9C2F06B22E7833C001763CE /* loop_fusion_pass.cpp */,
+				A9C2F06C22E7833C001763CE /* log.h */,
+				A9C2F06D22E7833C001763CE /* split_invalid_unreachable_pass.h */,
+				A9C2F06E22E7833C001763CE /* copy_prop_arrays.h */,
+				A9C2F06F22E7833C001763CE /* eliminate_dead_constant_pass.h */,
+				A9C2F07022E7833C001763CE /* dead_insert_elim_pass.cpp */,
+				A9C2F07122E7833C001763CE /* ssa_rewrite_pass.h */,
+				A9C2F07222E7833C001763CE /* scalar_analysis.cpp */,
+				A9C2F07322E7833C001763CE /* dead_variable_elimination.h */,
+				A9C2F07422E7833C001763CE /* block_merge_pass.cpp */,
+				A9C2F07522E7833C001763CE /* dominator_analysis.h */,
+				A9C2F07622E7833C001763CE /* pass.h */,
+				A9C2F07722E7833C001763CE /* folding_rules.h */,
+				A9C2F07822E7833C001763CE /* eliminate_dead_functions_pass.h */,
+				A9C2F07922E7833C001763CE /* eliminate_dead_functions_util.h */,
+				A9C2F07A22E7833C001763CE /* fold.h */,
+				A9C2F07B22E7833C001763CE /* local_single_store_elim_pass.cpp */,
+				A9C2F07C22E7833C001763CE /* dead_branch_elim_pass.h */,
+				A9C2F07D22E7833C001763CE /* private_to_local_pass.cpp */,
+				A9C2F07E22E7833C001763CE /* scalar_analysis_nodes.h */,
+				A9C2F07F22E7833C001763CE /* propagator.cpp */,
+				A9C2F08022E7833C001763CE /* fix_storage_class.h */,
+				A9C2F08122E7833C001763CE /* loop_dependence_helpers.cpp */,
+				A9C2F08222E7833C001763CE /* set_spec_constant_default_value_pass.cpp */,
+				A9C2F08322E7833C001763CE /* passes.h */,
+				A9C2F08422E7833C001763CE /* fold.cpp */,
+				A9C2F08522E7833C001763CE /* strip_reflect_info_pass.h */,
+				A9C2F08622E7833C001763CE /* scalar_replacement_pass.cpp */,
+				A9C2F08722E7833C001763CE /* simplification_pass.h */,
+				A9C2F08822E7833C001763CE /* remove_duplicates_pass.h */,
+				A9C2F08922E7833C001763CE /* redundancy_elimination.cpp */,
+				A9C2F08A22E7833C001763CE /* reflect.h */,
+				A9C2F08B22E7833C001763CE /* workaround1209.cpp */,
+				A9C2F08C22E7833C001763CE /* null_pass.h */,
+				A9C2F08D22E7833C001763CE /* const_folding_rules.h */,
+				A9C2F08E22E7833C001763CE /* scalar_replacement_pass.h */,
+				A9C2F08F22E7833C001763CE /* instruction.cpp */,
+				A9C2F09022E7833C001763CE /* pch_source_opt.h */,
+				A9C2F09122E7833C001763CE /* reduce_load_size.cpp */,
+				A9C2F09222E7833C001763CE /* redundancy_elimination.h */,
+				A9C2F09322E7833C001763CE /* fix_storage_class.cpp */,
+				A9C2F09422E7833C001763CE /* value_number_table.cpp */,
+				A9C2F09522E7833C001763CE /* local_ssa_elim_pass.h */,
+				A9C2F09622E7833C001763CE /* inline_opaque_pass.cpp */,
+				A9C2F09722E7833C001763CE /* replace_invalid_opc.cpp */,
+				A9C2F09822E7833C001763CE /* loop_utils.h */,
+				A9C2F09922E7833C001763CE /* module.h */,
+				A9C2F09A22E7833C001763CE /* dominator_analysis.cpp */,
+				A9C2F09B22E7833C001763CE /* decompose_initialized_variables_pass.cpp */,
+				A9C2F09C22E7833C001763CE /* ir_builder.h */,
+				A9C2F09D22E7833C001763CE /* loop_unswitch_pass.h */,
+				A9C2F09E22E7833C001763CE /* cfg.h */,
+				A9C2F09F22E7833C001763CE /* code_sink.h */,
+				A9C2F0A022E7833C001763CE /* loop_descriptor.h */,
+				A9C2F0A122E7833C001763CE /* generate_webgpu_initializers_pass.h */,
+				A9C2F0A222E7833C001763CE /* instruction.h */,
+				A9C2F0A322E7833C001763CE /* aggressive_dead_code_elim_pass.h */,
+				A9C2F0A422E7833C001763CE /* struct_cfg_analysis.cpp */,
+				A9C2F0A522E7833C001763CE /* vector_dce.h */,
+				A9C2F0A622E7833C001763CE /* combine_access_chains.h */,
+				A9C2F0A722E7833C001763CE /* pass_manager.h */,
+				A9C2F0A822E7833C001763CE /* local_access_chain_convert_pass.cpp */,
+				A9C2F0A922E7833C001763CE /* basic_block.cpp */,
+				A9C2F0AA22E7833C001763CE /* iterator.h */,
+				A9C2F0AB22E7833C001763CE /* licm_pass.h */,
+				A9C2F0AC22E7833C001763CE /* build_module.h */,
+				A9C2F0AD22E7833C001763CE /* ccp_pass.h */,
+				A9C2F0AE22E7833C001763CE /* decompose_initialized_variables_pass.h */,
+				A9C2F0AF22E7833C001763CE /* function.h */,
+				A9C2F0B022E7833C001763CE /* loop_fusion.cpp */,
+				A9C2F0B122E7833C001763CE /* upgrade_memory_model.cpp */,
+				A9C2F0B222E7833C001763CE /* feature_manager.h */,
+				A9C2F0B322E7833C001763CE /* inst_bindless_check_pass.h */,
+				A9C2F0B422E7833C001763CE /* scalar_analysis_simplification.cpp */,
+				A9C2F0B522E7833C001763CE /* set_spec_constant_default_value_pass.h */,
+				A9C2F0B622E7833C001763CE /* dominator_tree.h */,
+				A9C2F0B722E7833C001763CE /* legalize_vector_shuffle_pass.cpp */,
+				A9C2F0B822E7833C001763CE /* type_manager.h */,
+				A9C2F0B922E7833C001763CE /* compact_ids_pass.cpp */,
+				A9C2F0BA22E7833C001763CE /* loop_peeling.cpp */,
+			);
+			path = opt;
+			sourceTree = "<group>";
+		};
+		A9C2F10622E7833D001763CE /* val */ = {
+			isa = PBXGroup;
+			children = (
+				A9C2F10722E7833D001763CE /* validate_annotation.cpp */,
+				A9C2F10822E7833D001763CE /* validate_misc.cpp */,
+				A9C2F10922E7833D001763CE /* validate_cfg.cpp */,
+				A9C2F10A22E7833D001763CE /* validate_capability.cpp */,
+				A9C2F10B22E7833D001763CE /* construct.h */,
+				A9C2F10C22E7833D001763CE /* validate_barriers.cpp */,
+				A9C2F10D22E7833D001763CE /* validate_non_uniform.cpp */,
+				A9C2F10E22E7833D001763CE /* validate_scopes.cpp */,
+				A9C2F10F22E7833D001763CE /* validate_atomics.cpp */,
+				A9C2F11022E7833D001763CE /* basic_block.h */,
+				A9C2F11122E7833D001763CE /* validate_instruction.cpp */,
+				A9C2F11222E7833D001763CE /* validate_decorations.cpp */,
+				A9C2F11322E7833D001763CE /* validate_debug.cpp */,
+				A9C2F11422E7833D001763CE /* validate_builtins.cpp */,
+				A9C2F11522E7833D001763CE /* validate_interfaces.cpp */,
+				A9C2F11622E7833D001763CE /* validate.cpp */,
+				A9C2F11722E7833D001763CE /* validation_state.h */,
+				A9C2F11822E7833D001763CE /* validate_constants.cpp */,
+				A9C2F11922E7833D001763CE /* validate_bitwise.cpp */,
+				A9C2F11A22E7833D001763CE /* validate_extensions.cpp */,
+				A9C2F11B22E7833D001763CE /* construct.cpp */,
+				A9C2F11C22E7833D001763CE /* function.cpp */,
+				A9C2F11D22E7833D001763CE /* validate.h */,
+				A9C2F11E22E7833D001763CE /* validate_adjacency.cpp */,
+				A9C2F11F22E7833D001763CE /* validate_conversion.cpp */,
+				A9C2F12022E7833D001763CE /* validate_small_type_uses.cpp */,
+				A9C2F12122E7833D001763CE /* validate_datarules.cpp */,
+				A9C2F12222E7833D001763CE /* validate_scopes.h */,
+				A9C2F12322E7833D001763CE /* validate_id.cpp */,
+				A9C2F12422E7833D001763CE /* validate_memory_semantics.h */,
+				A9C2F12522E7833D001763CE /* validate_arithmetics.cpp */,
+				A9C2F12622E7833D001763CE /* validate_mode_setting.cpp */,
+				A9C2F12722E7833D001763CE /* validate_memory_semantics.cpp */,
+				A9C2F12822E7833D001763CE /* validate_logicals.cpp */,
+				A9C2F12922E7833D001763CE /* validate_derivatives.cpp */,
+				A9C2F12A22E7833D001763CE /* validate_memory.cpp */,
+				A9C2F12B22E7833D001763CE /* validate_image.cpp */,
+				A9C2F12C22E7833D001763CE /* validate_literals.cpp */,
+				A9C2F12D22E7833D001763CE /* instruction.cpp */,
+				A9C2F12E22E7833D001763CE /* validate_type.cpp */,
+				A9C2F12F22E7833D001763CE /* instruction.h */,
+				A9C2F13022E7833D001763CE /* validate_execution_limitations.cpp */,
+				A9C2F13122E7833D001763CE /* validate_layout.cpp */,
+				A9C2F13222E7833D001763CE /* basic_block.cpp */,
+				A9C2F13322E7833D001763CE /* validate_function.cpp */,
+				A9C2F13422E7833D001763CE /* function.h */,
+				A9C2F13522E7833D001763CE /* validate_composites.cpp */,
+				A9C2F13622E7833D001763CE /* validation_state.cpp */,
+				A9C2F13722E7833D001763CE /* validate_primitives.cpp */,
+				A9C2F13822E7833D001763CE /* decoration.h */,
+			);
+			path = val;
+			sourceTree = "<group>";
+		};
 		A9F55D24198BE6A7004EC31B = {
 			isa = PBXGroup;
 			children = (
@@ -2281,187 +2277,186 @@
 			isa = PBXHeadersBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A94A6A2C22B17BBC00C661C6 /* types.h in Headers */,
-				A94A69F422B17BBC00C661C6 /* strip_debug_info_pass.h in Headers */,
-				A94A6AD422B17BBC00C661C6 /* folding_rules.h in Headers */,
-				A94A692022B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h in Headers */,
-				A94A695422B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */,
-				A94A69F222B17BBC00C661C6 /* scalar_analysis.h in Headers */,
-				A94A6B0022B17BBC00C661C6 /* null_pass.h in Headers */,
-				A94A6A9E22B17BBC00C661C6 /* loop_dependence.h in Headers */,
-				A94A6B3222B17BBC00C661C6 /* vector_dce.h in Headers */,
-				A94A6A2A22B17BBC00C661C6 /* ir_loader.h in Headers */,
-				A94A6B5422B17BBC00C661C6 /* dominator_tree.h in Headers */,
-				A94A697A22B17BBB00C661C6 /* reduction_opportunity_finder.h in Headers */,
-				A94A6A8C22B17BBC00C661C6 /* mem_pass.h in Headers */,
-				A94A69CA22B17BBC00C661C6 /* disassemble.h in Headers */,
-				A94A693822B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */,
-				A94A694622B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */,
-				A94A6A6222B17BBC00C661C6 /* loop_fusion_pass.h in Headers */,
-				A94A6A3222B17BBC00C661C6 /* basic_block.h in Headers */,
-				A94A69D422B17BBC00C661C6 /* merge_return_pass.h in Headers */,
-				A94A6B3422B17BBC00C661C6 /* combine_access_chains.h in Headers */,
-				A94A699A22B17BBB00C661C6 /* spirv_reducer_options.h in Headers */,
-				A94A69DE22B17BBC00C661C6 /* composite.h in Headers */,
-				A94A6AD022B17BBC00C661C6 /* dominator_analysis.h in Headers */,
-				A94A6AA222B17BBC00C661C6 /* flatten_decoration_pass.h in Headers */,
-				A94A69BC22B17BBB00C661C6 /* spirv_endian.h in Headers */,
-				A94A693E22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */,
-				A94A69A822B17BBB00C661C6 /* spirv_constant.h in Headers */,
-				A94A69CE22B17BBC00C661C6 /* if_conversion.h in Headers */,
-				A94A6B2C22B17BBC00C661C6 /* instruction.h in Headers */,
-				A94A696A22B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */,
-				A94A6B4022B17BBC00C661C6 /* build_module.h in Headers */,
-				A94A6BC622B17BBC00C661C6 /* binary.h in Headers */,
-				A94A691222B17BBB00C661C6 /* bitutils.h in Headers */,
-				A94A6A2022B17BBC00C661C6 /* loop_unroller.h in Headers */,
-				A94A6B2E22B17BBC00C661C6 /* aggressive_dead_code_elim_pass.h in Headers */,
-				A94A697E22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h in Headers */,
-				A94A691C22B17BBB00C661C6 /* spirv_target_env.h in Headers */,
-				A94A69E622B17BBC00C661C6 /* strip_atomic_counter_memory_pass.h in Headers */,
-				A94A6B4222B17BBC00C661C6 /* ccp_pass.h in Headers */,
-				A94A6A8A22B17BBC00C661C6 /* instrument_pass.h in Headers */,
-				A94A6A6C22B17BBC00C661C6 /* decoration_manager.h in Headers */,
-				A94A6AC022B17BBC00C661C6 /* split_invalid_unreachable_pass.h in Headers */,
-				A94A6AC222B17BBC00C661C6 /* copy_prop_arrays.h in Headers */,
-				A94A6B2822B17BBC00C661C6 /* loop_descriptor.h in Headers */,
-				A94A6B3E22B17BBC00C661C6 /* licm_pass.h in Headers */,
-				A94A69D822B17BBC00C661C6 /* loop_fusion.h in Headers */,
-				A94A690422B17BBB00C661C6 /* make_unique.h in Headers */,
-				A94A6AD222B17BBC00C661C6 /* pass.h in Headers */,
-				A94A6A7222B17BBC00C661C6 /* local_single_block_elim_pass.h in Headers */,
-				A94A6A5822B17BBC00C661C6 /* loop_peeling.h in Headers */,
-				A94A694C22B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h in Headers */,
-				A94A699222B17BBB00C661C6 /* cfa.h in Headers */,
-				A94A6A7622B17BBC00C661C6 /* strength_reduction_pass.h in Headers */,
-				A94A6A3822B17BBC00C661C6 /* block_merge_pass.h in Headers */,
-				A94A6B4E22B17BBC00C661C6 /* inst_bindless_check_pass.h in Headers */,
-				A94A69E222B17BBC00C661C6 /* register_pressure.h in Headers */,
-				A94A697422B17BBB00C661C6 /* reduction_opportunity.h in Headers */,
-				A94A6AFC22B17BBC00C661C6 /* reflect.h in Headers */,
-				A94A695A22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h in Headers */,
-				A94A6B3622B17BBC00C661C6 /* pass_manager.h in Headers */,
-				A94A6A6422B17BBC00C661C6 /* struct_cfg_analysis.h in Headers */,
-				A94A698222B17BBB00C661C6 /* reduction_util.h in Headers */,
-				A94A69EA22B17BBC00C661C6 /* local_single_store_elim_pass.h in Headers */,
-				A94A6BB822B17BBC00C661C6 /* instruction.h in Headers */,
-				A94A693622B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h in Headers */,
-				A94A6B4422B17BBC00C661C6 /* decompose_initialized_variables_pass.h in Headers */,
-				A94A6AE022B17BBC00C661C6 /* dead_branch_elim_pass.h in Headers */,
-				A94A6B0222B17BBC00C661C6 /* const_folding_rules.h in Headers */,
-				A94A68F222B17BBB00C661C6 /* assembly_grammar.h in Headers */,
-				A94A69BA22B17BBB00C661C6 /* diagnostic.h in Headers */,
-				A94A69A022B17BBB00C661C6 /* spirv_definition.h in Headers */,
-				A94A6B0C22B17BBC00C661C6 /* redundancy_elimination.h in Headers */,
-				A94A6A0C22B17BBC00C661C6 /* instruction_list.h in Headers */,
-				A94A6BFE22B17BBD00C661C6 /* validate_scopes.h in Headers */,
-				A94A6B5822B17BBC00C661C6 /* type_manager.h in Headers */,
-				A94A6AF822B17BBC00C661C6 /* remove_duplicates_pass.h in Headers */,
-				A94A6BBC22B17BBC00C661C6 /* opcode.h in Headers */,
-				A94A6AB822B17BBC00C661C6 /* loop_fission.h in Headers */,
-				A94A692422B17BBB00C661C6 /* remove_block_reduction_opportunity.h in Headers */,
-				A94A6AE822B17BBC00C661C6 /* fix_storage_class.h in Headers */,
-				A94A6AA822B17BBC00C661C6 /* constants.h in Headers */,
-				A94A69A622B17BBB00C661C6 /* macro.h in Headers */,
-				A94A6A0A22B17BBC00C661C6 /* propagator.h in Headers */,
-				A94A6A8222B17BBC00C661C6 /* dead_insert_elim_pass.h in Headers */,
-				A94A6A2E22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.h in Headers */,
-				A94A693222B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */,
-				A94A6ABE22B17BBC00C661C6 /* log.h in Headers */,
-				A94A6AB022B17BBC00C661C6 /* upgrade_memory_model.h in Headers */,
-				A94A69B422B17BBB00C661C6 /* name_mapper.h in Headers */,
-				A94A6BBA22B17BBC00C661C6 /* spirv_optimizer_options.h in Headers */,
-				A94A694E22B17BBB00C661C6 /* remove_function_reduction_opportunity.h in Headers */,
-				A94A69E422B17BBC00C661C6 /* tree_iterator.h in Headers */,
-				A94A6A9C22B17BBC00C661C6 /* inline_pass.h in Headers */,
-				A94A6B2422B17BBC00C661C6 /* cfg.h in Headers */,
-				A94A6AD622B17BBC00C661C6 /* eliminate_dead_functions_pass.h in Headers */,
-				A94A6BB422B17BBC00C661C6 /* latest_version_spirv_header.h in Headers */,
-				A94A6AC822B17BBC00C661C6 /* ssa_rewrite_pass.h in Headers */,
-				A94A6B0822B17BBC00C661C6 /* pch_source_opt.h in Headers */,
-				A94A6BC222B17BBC00C661C6 /* extensions.h in Headers */,
-				A94A6C2222B17BBD00C661C6 /* function.h in Headers */,
-				A94A690C22B17BBB00C661C6 /* timer.h in Headers */,
-				A94A695C22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h in Headers */,
-				A94A69AC22B17BBB00C661C6 /* spirv_validator_options.h in Headers */,
-				A94A6BEA22B17BBC00C661C6 /* validation_state.h in Headers */,
-				A94A691A22B17BBB00C661C6 /* ilist.h in Headers */,
-				A94A6BDC22B17BBC00C661C6 /* basic_block.h in Headers */,
-				A94A6B3C22B17BBC00C661C6 /* iterator.h in Headers */,
-				A94A6AF222B17BBC00C661C6 /* strip_reflect_info_pass.h in Headers */,
-				A94A690822B17BBB00C661C6 /* small_vector.h in Headers */,
-				A94A691422B17BBB00C661C6 /* hex_float.h in Headers */,
-				A94A6B2022B17BBC00C661C6 /* ir_builder.h in Headers */,
-				A94A6A7022B17BBC00C661C6 /* process_lines_pass.h in Headers */,
-				A94A68FA22B17BBB00C661C6 /* text.h in Headers */,
-				A94A697C22B17BBB00C661C6 /* change_operand_reduction_opportunity.h in Headers */,
-				A94A6ADA22B17BBC00C661C6 /* eliminate_dead_functions_util.h in Headers */,
-				A94A6AF622B17BBC00C661C6 /* simplification_pass.h in Headers */,
-				A94A690622B17BBB00C661C6 /* string_utils.h in Headers */,
-				A94A698E22B17BBB00C661C6 /* latest_version_opencl_std_header.h in Headers */,
-				A94A6B2A22B17BBC00C661C6 /* generate_webgpu_initializers_pass.h in Headers */,
-				A94A6AC422B17BBC00C661C6 /* eliminate_dead_constant_pass.h in Headers */,
-				A94A697022B17BBB00C661C6 /* reducer.h in Headers */,
-				A94A69E822B17BBC00C661C6 /* legalize_vector_shuffle_pass.h in Headers */,
-				A94A6A5422B17BBC00C661C6 /* local_redundancy_elimination.h in Headers */,
-				A94A69E022B17BBC00C661C6 /* compact_ids_pass.h in Headers */,
-				A94A6B1A22B17BBC00C661C6 /* module.h in Headers */,
-				A94A696622B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h in Headers */,
-				A94A6ABA22B17BBC00C661C6 /* workaround1209.h in Headers */,
-				A94A6B5E22B17BBC00C661C6 /* table.h in Headers */,
-				A94A696822B17BBB00C661C6 /* pch_source_reduce.h in Headers */,
-				A94A6AE422B17BBC00C661C6 /* scalar_analysis_nodes.h in Headers */,
-				A94A69B022B17BBB00C661C6 /* text_handler.h in Headers */,
-				A94A6B5222B17BBC00C661C6 /* set_spec_constant_default_value_pass.h in Headers */,
-				A94A699622B17BBB00C661C6 /* enum_string_mapping.h in Headers */,
-				A94A692622B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */,
-				A94A6A2822B17BBC00C661C6 /* unify_const_pass.h in Headers */,
-				A94A6B4622B17BBC00C661C6 /* function.h in Headers */,
-				A94A6AD822B17BBC00C661C6 /* common_uniform_elim_pass.h in Headers */,
-				A94A6C0222B17BBD00C661C6 /* validate_memory_semantics.h in Headers */,
-				A94A690022B17BBB00C661C6 /* parse_number.h in Headers */,
-				A94A6AA022B17BBC00C661C6 /* value_number_table.h in Headers */,
-				A94A6B1822B17BBC00C661C6 /* loop_utils.h in Headers */,
-				A94A6AEE22B17BBC00C661C6 /* passes.h in Headers */,
-				A94A6C2A22B17BBD00C661C6 /* decoration.h in Headers */,
-				A94A6BB022B17BBC00C661C6 /* ext_inst.h in Headers */,
-				A94A697622B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */,
-				A94A6A0022B17BBC00C661C6 /* replace_invalid_opc.h in Headers */,
-				A94A6B4C22B17BBC00C661C6 /* feature_manager.h in Headers */,
-				A94A6BF622B17BBD00C661C6 /* validate.h in Headers */,
-				A94A6A5C22B17BBC00C661C6 /* block_merge_util.h in Headers */,
-				A94A6ADC22B17BBC00C661C6 /* fold.h in Headers */,
-				A94A6A8622B17BBC00C661C6 /* freeze_spec_constant_value_pass.h in Headers */,
-				A94A69EC22B17BBC00C661C6 /* reduce_load_size.h in Headers */,
-				A94A68F022B17BBB00C661C6 /* spirv_fuzzer_options.h in Headers */,
-				A94A6B0422B17BBC00C661C6 /* scalar_replacement_pass.h in Headers */,
-				A94A690222B17BBB00C661C6 /* ilist_node.h in Headers */,
-				A94A6C1822B17BBD00C661C6 /* instruction.h in Headers */,
-				A94A68F422B17BBB00C661C6 /* enum_set.h in Headers */,
-				A94A69B222B17BBB00C661C6 /* parsed_operand.h in Headers */,
-				A94A6A1822B17BBC00C661C6 /* ir_context.h in Headers */,
-				A94A6AA622B17BBC00C661C6 /* inline_exhaustive_pass.h in Headers */,
-				A94A6B1222B17BBC00C661C6 /* local_ssa_elim_pass.h in Headers */,
-				A94A6B2622B17BBC00C661C6 /* code_sink.h in Headers */,
-				A94A698422B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h in Headers */,
-				A94A6A4A22B17BBC00C661C6 /* def_use_manager.h in Headers */,
-				A94A6A4E22B17BBC00C661C6 /* cfg_cleanup_pass.h in Headers */,
-				A94A69C622B17BBC00C661C6 /* print.h in Headers */,
-				A94A69D622B17BBC00C661C6 /* inline_opaque_pass.h in Headers */,
-				A94A695022B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h in Headers */,
-				A94A6A0222B17BBC00C661C6 /* local_access_chain_convert_pass.h in Headers */,
-				A94A6BC022B17BBC00C661C6 /* latest_version_glsl_std_450_header.h in Headers */,
-				A94A69A222B17BBB00C661C6 /* operand.h in Headers */,
-				A94A6BD222B17BBC00C661C6 /* construct.h in Headers */,
-				A94A6ACC22B17BBC00C661C6 /* dead_variable_elimination.h in Headers */,
-				A94A692C22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h in Headers */,
-				A94A698C22B17BBB00C661C6 /* reduction_pass.h in Headers */,
-				A94A6B2222B17BBC00C661C6 /* loop_unswitch_pass.h in Headers */,
-				A94A695622B17BBB00C661C6 /* remove_selection_reduction_opportunity.h in Headers */,
-				A94A6A4622B17BBC00C661C6 /* private_to_local_pass.h in Headers */,
-				A94A691022B17BBB00C661C6 /* bit_vector.h in Headers */,
-				A94A6A9222B17BBC00C661C6 /* eliminate_dead_members_pass.h in Headers */,
-				A94A699422B17BBB00C661C6 /* pch_source.h in Headers */,
+				A9C2F37922E7833D001763CE /* vector_dce.h in Headers */,
+				A9C2F42B22E7833D001763CE /* latest_version_glsl_std_450_header.h in Headers */,
+				A9C2F27722E7833D001763CE /* types.h in Headers */,
+				A9C2F23F22E7833D001763CE /* strip_debug_info_pass.h in Headers */,
+				A9C2F31D22E7833D001763CE /* folding_rules.h in Headers */,
+				A9C2F16B22E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.h in Headers */,
+				A9C2F48F22E7833D001763CE /* function.h in Headers */,
+				A9C2F38522E7833D001763CE /* licm_pass.h in Headers */,
+				A9C2F32B22E7833D001763CE /* scalar_analysis_nodes.h in Headers */,
+				A9C2F19F22E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */,
+				A9C2F23D22E7833D001763CE /* scalar_analysis.h in Headers */,
+				A9C2F2E722E7833D001763CE /* loop_dependence.h in Headers */,
+				A9C2F27522E7833D001763CE /* ir_loader.h in Headers */,
+				A9C2F1C522E7833D001763CE /* reduction_opportunity_finder.h in Headers */,
+				A9C2F42722E7833D001763CE /* opcode.h in Headers */,
+				A9C2F2D522E7833D001763CE /* mem_pass.h in Headers */,
+				A9C2F44722E7833D001763CE /* basic_block.h in Headers */,
+				A9C2F21522E7833D001763CE /* disassemble.h in Headers */,
+				A9C2F46F22E7833D001763CE /* validate_memory_semantics.h in Headers */,
+				A9C2F18322E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */,
+				A9C2F34B22E7833D001763CE /* scalar_replacement_pass.h in Headers */,
+				A9C2F19122E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */,
+				A9C2F2AD22E7833D001763CE /* loop_fusion_pass.h in Headers */,
+				A9C2F49722E7833D001763CE /* decoration.h in Headers */,
+				A9C2F36122E7833D001763CE /* module.h in Headers */,
+				A9C2F27D22E7833D001763CE /* basic_block.h in Headers */,
+				A9C2F43122E7833D001763CE /* binary.h in Headers */,
+				A9C2F37522E7833D001763CE /* aggressive_dead_code_elim_pass.h in Headers */,
+				A9C2F37D22E7833D001763CE /* pass_manager.h in Headers */,
+				A9C2F21F22E7833D001763CE /* merge_return_pass.h in Headers */,
+				A9C2F1E522E7833D001763CE /* spirv_reducer_options.h in Headers */,
+				A9C2F22922E7833D001763CE /* composite.h in Headers */,
+				A9C2F31922E7833D001763CE /* dominator_analysis.h in Headers */,
+				A9C2F38922E7833D001763CE /* ccp_pass.h in Headers */,
+				A9C2F2EB22E7833D001763CE /* flatten_decoration_pass.h in Headers */,
+				A9C2F20722E7833D001763CE /* spirv_endian.h in Headers */,
+				A9C2F18922E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */,
+				A9C2F1F322E7833D001763CE /* spirv_constant.h in Headers */,
+				A9C2F21922E7833D001763CE /* if_conversion.h in Headers */,
+				A9C2F1B522E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */,
+				A9C2F15D22E7833D001763CE /* bitutils.h in Headers */,
+				A9C2F26B22E7833D001763CE /* loop_unroller.h in Headers */,
+				A9C2F1C922E7833D001763CE /* remove_block_reduction_opportunity_finder.h in Headers */,
+				A9C2F16722E7833D001763CE /* spirv_target_env.h in Headers */,
+				A9C2F36D22E7833D001763CE /* code_sink.h in Headers */,
+				A9C2F23122E7833D001763CE /* strip_atomic_counter_memory_pass.h in Headers */,
+				A9C2F2D322E7833D001763CE /* instrument_pass.h in Headers */,
+				A9C2F38722E7833D001763CE /* build_module.h in Headers */,
+				A9C2F42D22E7833D001763CE /* extensions.h in Headers */,
+				A9C2F48522E7833D001763CE /* instruction.h in Headers */,
+				A9C2F32F22E7833D001763CE /* fix_storage_class.h in Headers */,
+				A9C2F36722E7833D001763CE /* ir_builder.h in Headers */,
+				A9C2F2B522E7833D001763CE /* decoration_manager.h in Headers */,
+				A9C2F33922E7833D001763CE /* strip_reflect_info_pass.h in Headers */,
+				A9C2F38322E7833D001763CE /* iterator.h in Headers */,
+				A9C2F38B22E7833D001763CE /* decompose_initialized_variables_pass.h in Headers */,
+				A9C2F34722E7833D001763CE /* null_pass.h in Headers */,
+				A9C2F30922E7833D001763CE /* split_invalid_unreachable_pass.h in Headers */,
+				A9C2F30B22E7833D001763CE /* copy_prop_arrays.h in Headers */,
+				A9C2F22322E7833D001763CE /* loop_fusion.h in Headers */,
+				A9C2F3A522E7833D001763CE /* table.h in Headers */,
+				A9C2F14F22E7833D001763CE /* make_unique.h in Headers */,
+				A9C2F31B22E7833D001763CE /* pass.h in Headers */,
+				A9C2F2BB22E7833D001763CE /* local_single_block_elim_pass.h in Headers */,
+				A9C2F2A322E7833D001763CE /* loop_peeling.h in Headers */,
+				A9C2F19722E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.h in Headers */,
+				A9C2F1DD22E7833D001763CE /* cfa.h in Headers */,
+				A9C2F2BF22E7833D001763CE /* strength_reduction_pass.h in Headers */,
+				A9C2F28322E7833D001763CE /* block_merge_pass.h in Headers */,
+				A9C2F33522E7833D001763CE /* passes.h in Headers */,
+				A9C2F46122E7833D001763CE /* validate.h in Headers */,
+				A9C2F22D22E7833D001763CE /* register_pressure.h in Headers */,
+				A9C2F1BF22E7833D001763CE /* reduction_opportunity.h in Headers */,
+				A9C2F1A522E7833D001763CE /* remove_selection_reduction_opportunity_finder.h in Headers */,
+				A9C2F2AF22E7833D001763CE /* struct_cfg_analysis.h in Headers */,
+				A9C2F1CD22E7833D001763CE /* reduction_util.h in Headers */,
+				A9C2F23522E7833D001763CE /* local_single_store_elim_pass.h in Headers */,
+				A9C2F18122E7833D001763CE /* remove_instruction_reduction_opportunity.h in Headers */,
+				A9C2F13D22E7833D001763CE /* assembly_grammar.h in Headers */,
+				A9C2F20522E7833D001763CE /* diagnostic.h in Headers */,
+				A9C2F45522E7833D001763CE /* validation_state.h in Headers */,
+				A9C2F1EB22E7833D001763CE /* spirv_definition.h in Headers */,
+				A9C2F34F22E7833D001763CE /* pch_source_opt.h in Headers */,
+				A9C2F25722E7833D001763CE /* instruction_list.h in Headers */,
+				A9C2F30122E7833D001763CE /* loop_fission.h in Headers */,
+				A9C2F16F22E7833D001763CE /* remove_block_reduction_opportunity.h in Headers */,
+				A9C2F39522E7833D001763CE /* inst_bindless_check_pass.h in Headers */,
+				A9C2F2F122E7833D001763CE /* constants.h in Headers */,
+				A9C2F1F122E7833D001763CE /* macro.h in Headers */,
+				A9C2F42522E7833D001763CE /* spirv_optimizer_options.h in Headers */,
+				A9C2F43D22E7833D001763CE /* construct.h in Headers */,
+				A9C2F25522E7833D001763CE /* propagator.h in Headers */,
+				A9C2F39322E7833D001763CE /* feature_manager.h in Headers */,
+				A9C2F2CB22E7833D001763CE /* dead_insert_elim_pass.h in Headers */,
+				A9C2F41F22E7833D001763CE /* latest_version_spirv_header.h in Headers */,
+				A9C2F39F22E7833D001763CE /* type_manager.h in Headers */,
+				A9C2F27922E7833D001763CE /* fold_spec_constant_op_and_composite_pass.h in Headers */,
+				A9C2F17D22E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */,
+				A9C2F30722E7833D001763CE /* log.h in Headers */,
+				A9C2F39B22E7833D001763CE /* dominator_tree.h in Headers */,
+				A9C2F2F922E7833D001763CE /* upgrade_memory_model.h in Headers */,
+				A9C2F1FF22E7833D001763CE /* name_mapper.h in Headers */,
+				A9C2F19922E7833D001763CE /* remove_function_reduction_opportunity.h in Headers */,
+				A9C2F22F22E7833D001763CE /* tree_iterator.h in Headers */,
+				A9C2F34922E7833D001763CE /* const_folding_rules.h in Headers */,
+				A9C2F33F22E7833D001763CE /* remove_duplicates_pass.h in Headers */,
+				A9C2F41B22E7833D001763CE /* ext_inst.h in Headers */,
+				A9C2F2E522E7833D001763CE /* inline_pass.h in Headers */,
+				A9C2F37B22E7833D001763CE /* combine_access_chains.h in Headers */,
+				A9C2F31F22E7833D001763CE /* eliminate_dead_functions_pass.h in Headers */,
+				A9C2F31122E7833D001763CE /* ssa_rewrite_pass.h in Headers */,
+				A9C2F15722E7833D001763CE /* timer.h in Headers */,
+				A9C2F42322E7833D001763CE /* instruction.h in Headers */,
+				A9C2F35922E7833D001763CE /* local_ssa_elim_pass.h in Headers */,
+				A9C2F34322E7833D001763CE /* reflect.h in Headers */,
+				A9C2F1A722E7833D001763CE /* merge_blocks_reduction_opportunity_finder.h in Headers */,
+				A9C2F1F722E7833D001763CE /* spirv_validator_options.h in Headers */,
+				A9C2F32322E7833D001763CE /* fold.h in Headers */,
+				A9C2F16522E7833D001763CE /* ilist.h in Headers */,
+				A9C2F15322E7833D001763CE /* small_vector.h in Headers */,
+				A9C2F15F22E7833D001763CE /* hex_float.h in Headers */,
+				A9C2F2B922E7833D001763CE /* process_lines_pass.h in Headers */,
+				A9C2F14522E7833D001763CE /* text.h in Headers */,
+				A9C2F1C722E7833D001763CE /* change_operand_reduction_opportunity.h in Headers */,
+				A9C2F38D22E7833D001763CE /* function.h in Headers */,
+				A9C2F15122E7833D001763CE /* string_utils.h in Headers */,
+				A9C2F1D922E7833D001763CE /* latest_version_opencl_std_header.h in Headers */,
+				A9C2F30D22E7833D001763CE /* eliminate_dead_constant_pass.h in Headers */,
+				A9C2F1BB22E7833D001763CE /* reducer.h in Headers */,
+				A9C2F35F22E7833D001763CE /* loop_utils.h in Headers */,
+				A9C2F23322E7833D001763CE /* legalize_vector_shuffle_pass.h in Headers */,
+				A9C2F29F22E7833D001763CE /* local_redundancy_elimination.h in Headers */,
+				A9C2F22B22E7833D001763CE /* compact_ids_pass.h in Headers */,
+				A9C2F1B122E7833D001763CE /* remove_function_reduction_opportunity_finder.h in Headers */,
+				A9C2F30322E7833D001763CE /* workaround1209.h in Headers */,
+				A9C2F1B322E7833D001763CE /* pch_source_reduce.h in Headers */,
+				A9C2F1FB22E7833D001763CE /* text_handler.h in Headers */,
+				A9C2F1E122E7833D001763CE /* enum_string_mapping.h in Headers */,
+				A9C2F17122E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */,
+				A9C2F27322E7833D001763CE /* unify_const_pass.h in Headers */,
+				A9C2F14B22E7833D001763CE /* parse_number.h in Headers */,
+				A9C2F2E922E7833D001763CE /* value_number_table.h in Headers */,
+				A9C2F1C122E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */,
+				A9C2F24B22E7833D001763CE /* replace_invalid_opc.h in Headers */,
+				A9C2F2A722E7833D001763CE /* block_merge_util.h in Headers */,
+				A9C2F35322E7833D001763CE /* redundancy_elimination.h in Headers */,
+				A9C2F37122E7833D001763CE /* generate_webgpu_initializers_pass.h in Headers */,
+				A9C2F2CF22E7833D001763CE /* freeze_spec_constant_value_pass.h in Headers */,
+				A9C2F23722E7833D001763CE /* reduce_load_size.h in Headers */,
+				A9C2F37322E7833D001763CE /* instruction.h in Headers */,
+				A9C2F13B22E7833D001763CE /* spirv_fuzzer_options.h in Headers */,
+				A9C2F46B22E7833D001763CE /* validate_scopes.h in Headers */,
+				A9C2F14D22E7833D001763CE /* ilist_node.h in Headers */,
+				A9C2F13F22E7833D001763CE /* enum_set.h in Headers */,
+				A9C2F1FD22E7833D001763CE /* parsed_operand.h in Headers */,
+				A9C2F26322E7833D001763CE /* ir_context.h in Headers */,
+				A9C2F36B22E7833D001763CE /* cfg.h in Headers */,
+				A9C2F2EF22E7833D001763CE /* inline_exhaustive_pass.h in Headers */,
+				A9C2F1CF22E7833D001763CE /* merge_blocks_reduction_opportunity.h in Headers */,
+				A9C2F33D22E7833D001763CE /* simplification_pass.h in Headers */,
+				A9C2F29522E7833D001763CE /* def_use_manager.h in Headers */,
+				A9C2F29922E7833D001763CE /* cfg_cleanup_pass.h in Headers */,
+				A9C2F21122E7833D001763CE /* print.h in Headers */,
+				A9C2F22122E7833D001763CE /* inline_opaque_pass.h in Headers */,
+				A9C2F19B22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.h in Headers */,
+				A9C2F39922E7833D001763CE /* set_spec_constant_default_value_pass.h in Headers */,
+				A9C2F24D22E7833D001763CE /* local_access_chain_convert_pass.h in Headers */,
+				A9C2F1ED22E7833D001763CE /* operand.h in Headers */,
+				A9C2F31522E7833D001763CE /* dead_variable_elimination.h in Headers */,
+				A9C2F32122E7833D001763CE /* eliminate_dead_functions_util.h in Headers */,
+				A9C2F17722E7833D001763CE /* operand_to_const_reduction_opportunity_finder.h in Headers */,
+				A9C2F36F22E7833D001763CE /* loop_descriptor.h in Headers */,
+				A9C2F1D722E7833D001763CE /* reduction_pass.h in Headers */,
+				A9C2F1A122E7833D001763CE /* remove_selection_reduction_opportunity.h in Headers */,
+				A9C2F29122E7833D001763CE /* private_to_local_pass.h in Headers */,
+				A9C2F15B22E7833D001763CE /* bit_vector.h in Headers */,
+				A9C2F36922E7833D001763CE /* loop_unswitch_pass.h in Headers */,
+				A9C2F2DB22E7833D001763CE /* eliminate_dead_members_pass.h in Headers */,
+				A9C2F1DF22E7833D001763CE /* pch_source.h in Headers */,
+				A9C2F32722E7833D001763CE /* dead_branch_elim_pass.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2469,187 +2464,186 @@
 			isa = PBXHeadersBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A94A6A2D22B17BBC00C661C6 /* types.h in Headers */,
-				A94A69F522B17BBC00C661C6 /* strip_debug_info_pass.h in Headers */,
-				A94A6AD522B17BBC00C661C6 /* folding_rules.h in Headers */,
-				A94A692122B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.h in Headers */,
-				A94A695522B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */,
-				A94A69F322B17BBC00C661C6 /* scalar_analysis.h in Headers */,
-				A94A6B0122B17BBC00C661C6 /* null_pass.h in Headers */,
-				A94A6A9F22B17BBC00C661C6 /* loop_dependence.h in Headers */,
-				A94A6B3322B17BBC00C661C6 /* vector_dce.h in Headers */,
-				A94A6A2B22B17BBC00C661C6 /* ir_loader.h in Headers */,
-				A94A6B5522B17BBC00C661C6 /* dominator_tree.h in Headers */,
-				A94A697B22B17BBB00C661C6 /* reduction_opportunity_finder.h in Headers */,
-				A94A6A8D22B17BBC00C661C6 /* mem_pass.h in Headers */,
-				A94A69CB22B17BBC00C661C6 /* disassemble.h in Headers */,
-				A94A693922B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */,
-				A94A694722B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */,
-				A94A6A6322B17BBC00C661C6 /* loop_fusion_pass.h in Headers */,
-				A94A6A3322B17BBC00C661C6 /* basic_block.h in Headers */,
-				A94A69D522B17BBC00C661C6 /* merge_return_pass.h in Headers */,
-				A94A6B3522B17BBC00C661C6 /* combine_access_chains.h in Headers */,
-				A94A699B22B17BBB00C661C6 /* spirv_reducer_options.h in Headers */,
-				A94A69DF22B17BBC00C661C6 /* composite.h in Headers */,
-				A94A6AD122B17BBC00C661C6 /* dominator_analysis.h in Headers */,
-				A94A6AA322B17BBC00C661C6 /* flatten_decoration_pass.h in Headers */,
-				A94A69BD22B17BBB00C661C6 /* spirv_endian.h in Headers */,
-				A94A693F22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */,
-				A94A69A922B17BBB00C661C6 /* spirv_constant.h in Headers */,
-				A94A69CF22B17BBC00C661C6 /* if_conversion.h in Headers */,
-				A94A6B2D22B17BBC00C661C6 /* instruction.h in Headers */,
-				A94A696B22B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */,
-				A94A6B4122B17BBC00C661C6 /* build_module.h in Headers */,
-				A94A6BC722B17BBC00C661C6 /* binary.h in Headers */,
-				A94A691322B17BBB00C661C6 /* bitutils.h in Headers */,
-				A94A6A2122B17BBC00C661C6 /* loop_unroller.h in Headers */,
-				A94A6B2F22B17BBC00C661C6 /* aggressive_dead_code_elim_pass.h in Headers */,
-				A94A697F22B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.h in Headers */,
-				A94A691D22B17BBB00C661C6 /* spirv_target_env.h in Headers */,
-				A94A69E722B17BBC00C661C6 /* strip_atomic_counter_memory_pass.h in Headers */,
-				A94A6B4322B17BBC00C661C6 /* ccp_pass.h in Headers */,
-				A94A6A8B22B17BBC00C661C6 /* instrument_pass.h in Headers */,
-				A94A6A6D22B17BBC00C661C6 /* decoration_manager.h in Headers */,
-				A94A6AC122B17BBC00C661C6 /* split_invalid_unreachable_pass.h in Headers */,
-				A94A6AC322B17BBC00C661C6 /* copy_prop_arrays.h in Headers */,
-				A94A6B2922B17BBC00C661C6 /* loop_descriptor.h in Headers */,
-				A94A6B3F22B17BBC00C661C6 /* licm_pass.h in Headers */,
-				A94A69D922B17BBC00C661C6 /* loop_fusion.h in Headers */,
-				A94A690522B17BBB00C661C6 /* make_unique.h in Headers */,
-				A94A6AD322B17BBC00C661C6 /* pass.h in Headers */,
-				A94A6A7322B17BBC00C661C6 /* local_single_block_elim_pass.h in Headers */,
-				A94A6A5922B17BBC00C661C6 /* loop_peeling.h in Headers */,
-				A94A694D22B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.h in Headers */,
-				A94A699322B17BBB00C661C6 /* cfa.h in Headers */,
-				A94A6A7722B17BBC00C661C6 /* strength_reduction_pass.h in Headers */,
-				A94A6A3922B17BBC00C661C6 /* block_merge_pass.h in Headers */,
-				A94A6B4F22B17BBC00C661C6 /* inst_bindless_check_pass.h in Headers */,
-				A94A69E322B17BBC00C661C6 /* register_pressure.h in Headers */,
-				A94A697522B17BBB00C661C6 /* reduction_opportunity.h in Headers */,
-				A94A6AFD22B17BBC00C661C6 /* reflect.h in Headers */,
-				A94A695B22B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.h in Headers */,
-				A94A6B3722B17BBC00C661C6 /* pass_manager.h in Headers */,
-				A94A6A6522B17BBC00C661C6 /* struct_cfg_analysis.h in Headers */,
-				A94A698322B17BBB00C661C6 /* reduction_util.h in Headers */,
-				A94A69EB22B17BBC00C661C6 /* local_single_store_elim_pass.h in Headers */,
-				A94A6BB922B17BBC00C661C6 /* instruction.h in Headers */,
-				A94A693722B17BBB00C661C6 /* remove_instruction_reduction_opportunity.h in Headers */,
-				A94A6B4522B17BBC00C661C6 /* decompose_initialized_variables_pass.h in Headers */,
-				A94A6AE122B17BBC00C661C6 /* dead_branch_elim_pass.h in Headers */,
-				A94A6B0322B17BBC00C661C6 /* const_folding_rules.h in Headers */,
-				A94A68F322B17BBB00C661C6 /* assembly_grammar.h in Headers */,
-				A94A69BB22B17BBB00C661C6 /* diagnostic.h in Headers */,
-				A94A69A122B17BBB00C661C6 /* spirv_definition.h in Headers */,
-				A94A6B0D22B17BBC00C661C6 /* redundancy_elimination.h in Headers */,
-				A94A6A0D22B17BBC00C661C6 /* instruction_list.h in Headers */,
-				A94A6BFF22B17BBD00C661C6 /* validate_scopes.h in Headers */,
-				A94A6B5922B17BBC00C661C6 /* type_manager.h in Headers */,
-				A94A6AF922B17BBC00C661C6 /* remove_duplicates_pass.h in Headers */,
-				A94A6BBD22B17BBC00C661C6 /* opcode.h in Headers */,
-				A94A6AB922B17BBC00C661C6 /* loop_fission.h in Headers */,
-				A94A692522B17BBB00C661C6 /* remove_block_reduction_opportunity.h in Headers */,
-				A94A6AE922B17BBC00C661C6 /* fix_storage_class.h in Headers */,
-				A94A6AA922B17BBC00C661C6 /* constants.h in Headers */,
-				A94A69A722B17BBB00C661C6 /* macro.h in Headers */,
-				A94A6A0B22B17BBC00C661C6 /* propagator.h in Headers */,
-				A94A6A8322B17BBC00C661C6 /* dead_insert_elim_pass.h in Headers */,
-				A94A6A2F22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.h in Headers */,
-				A94A693322B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */,
-				A94A6ABF22B17BBC00C661C6 /* log.h in Headers */,
-				A94A6AB122B17BBC00C661C6 /* upgrade_memory_model.h in Headers */,
-				A94A69B522B17BBB00C661C6 /* name_mapper.h in Headers */,
-				A94A6BBB22B17BBC00C661C6 /* spirv_optimizer_options.h in Headers */,
-				A94A694F22B17BBB00C661C6 /* remove_function_reduction_opportunity.h in Headers */,
-				A94A69E522B17BBC00C661C6 /* tree_iterator.h in Headers */,
-				A94A6A9D22B17BBC00C661C6 /* inline_pass.h in Headers */,
-				A94A6B2522B17BBC00C661C6 /* cfg.h in Headers */,
-				A94A6AD722B17BBC00C661C6 /* eliminate_dead_functions_pass.h in Headers */,
-				A94A6BB522B17BBC00C661C6 /* latest_version_spirv_header.h in Headers */,
-				A94A6AC922B17BBC00C661C6 /* ssa_rewrite_pass.h in Headers */,
-				A94A6B0922B17BBC00C661C6 /* pch_source_opt.h in Headers */,
-				A94A6BC322B17BBC00C661C6 /* extensions.h in Headers */,
-				A94A6C2322B17BBD00C661C6 /* function.h in Headers */,
-				A94A690D22B17BBB00C661C6 /* timer.h in Headers */,
-				A94A695D22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.h in Headers */,
-				A94A69AD22B17BBB00C661C6 /* spirv_validator_options.h in Headers */,
-				A94A6BEB22B17BBC00C661C6 /* validation_state.h in Headers */,
-				A94A691B22B17BBB00C661C6 /* ilist.h in Headers */,
-				A94A6BDD22B17BBC00C661C6 /* basic_block.h in Headers */,
-				A94A6B3D22B17BBC00C661C6 /* iterator.h in Headers */,
-				A94A6AF322B17BBC00C661C6 /* strip_reflect_info_pass.h in Headers */,
-				A94A690922B17BBB00C661C6 /* small_vector.h in Headers */,
-				A94A691522B17BBB00C661C6 /* hex_float.h in Headers */,
-				A94A6B2122B17BBC00C661C6 /* ir_builder.h in Headers */,
-				A94A6A7122B17BBC00C661C6 /* process_lines_pass.h in Headers */,
-				A94A68FB22B17BBB00C661C6 /* text.h in Headers */,
-				A94A697D22B17BBB00C661C6 /* change_operand_reduction_opportunity.h in Headers */,
-				A94A6ADB22B17BBC00C661C6 /* eliminate_dead_functions_util.h in Headers */,
-				A94A6AF722B17BBC00C661C6 /* simplification_pass.h in Headers */,
-				A94A690722B17BBB00C661C6 /* string_utils.h in Headers */,
-				A94A698F22B17BBB00C661C6 /* latest_version_opencl_std_header.h in Headers */,
-				A94A6B2B22B17BBC00C661C6 /* generate_webgpu_initializers_pass.h in Headers */,
-				A94A6AC522B17BBC00C661C6 /* eliminate_dead_constant_pass.h in Headers */,
-				A94A697122B17BBB00C661C6 /* reducer.h in Headers */,
-				A94A69E922B17BBC00C661C6 /* legalize_vector_shuffle_pass.h in Headers */,
-				A94A6A5522B17BBC00C661C6 /* local_redundancy_elimination.h in Headers */,
-				A94A69E122B17BBC00C661C6 /* compact_ids_pass.h in Headers */,
-				A94A6B1B22B17BBC00C661C6 /* module.h in Headers */,
-				A94A696722B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.h in Headers */,
-				A94A6ABB22B17BBC00C661C6 /* workaround1209.h in Headers */,
-				A94A6B5F22B17BBC00C661C6 /* table.h in Headers */,
-				A94A696922B17BBB00C661C6 /* pch_source_reduce.h in Headers */,
-				A94A6AE522B17BBC00C661C6 /* scalar_analysis_nodes.h in Headers */,
-				A94A69B122B17BBB00C661C6 /* text_handler.h in Headers */,
-				A94A6B5322B17BBC00C661C6 /* set_spec_constant_default_value_pass.h in Headers */,
-				A94A699722B17BBB00C661C6 /* enum_string_mapping.h in Headers */,
-				A94A692722B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */,
-				A94A6A2922B17BBC00C661C6 /* unify_const_pass.h in Headers */,
-				A94A6B4722B17BBC00C661C6 /* function.h in Headers */,
-				A94A6AD922B17BBC00C661C6 /* common_uniform_elim_pass.h in Headers */,
-				A94A6C0322B17BBD00C661C6 /* validate_memory_semantics.h in Headers */,
-				A94A690122B17BBB00C661C6 /* parse_number.h in Headers */,
-				A94A6AA122B17BBC00C661C6 /* value_number_table.h in Headers */,
-				A94A6B1922B17BBC00C661C6 /* loop_utils.h in Headers */,
-				A94A6AEF22B17BBC00C661C6 /* passes.h in Headers */,
-				A94A6C2B22B17BBD00C661C6 /* decoration.h in Headers */,
-				A94A6BB122B17BBC00C661C6 /* ext_inst.h in Headers */,
-				A94A697722B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */,
-				A94A6A0122B17BBC00C661C6 /* replace_invalid_opc.h in Headers */,
-				A94A6B4D22B17BBC00C661C6 /* feature_manager.h in Headers */,
-				A94A6BF722B17BBD00C661C6 /* validate.h in Headers */,
-				A94A6A5D22B17BBC00C661C6 /* block_merge_util.h in Headers */,
-				A94A6ADD22B17BBC00C661C6 /* fold.h in Headers */,
-				A94A6A8722B17BBC00C661C6 /* freeze_spec_constant_value_pass.h in Headers */,
-				A94A69ED22B17BBC00C661C6 /* reduce_load_size.h in Headers */,
-				A94A68F122B17BBB00C661C6 /* spirv_fuzzer_options.h in Headers */,
-				A94A6B0522B17BBC00C661C6 /* scalar_replacement_pass.h in Headers */,
-				A94A690322B17BBB00C661C6 /* ilist_node.h in Headers */,
-				A94A6C1922B17BBD00C661C6 /* instruction.h in Headers */,
-				A94A68F522B17BBB00C661C6 /* enum_set.h in Headers */,
-				A94A69B322B17BBB00C661C6 /* parsed_operand.h in Headers */,
-				A94A6A1922B17BBC00C661C6 /* ir_context.h in Headers */,
-				A94A6AA722B17BBC00C661C6 /* inline_exhaustive_pass.h in Headers */,
-				A94A6B1322B17BBC00C661C6 /* local_ssa_elim_pass.h in Headers */,
-				A94A6B2722B17BBC00C661C6 /* code_sink.h in Headers */,
-				A94A698522B17BBB00C661C6 /* merge_blocks_reduction_opportunity.h in Headers */,
-				A94A6A4B22B17BBC00C661C6 /* def_use_manager.h in Headers */,
-				A94A6A4F22B17BBC00C661C6 /* cfg_cleanup_pass.h in Headers */,
-				A94A69C722B17BBC00C661C6 /* print.h in Headers */,
-				A94A69D722B17BBC00C661C6 /* inline_opaque_pass.h in Headers */,
-				A94A695122B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.h in Headers */,
-				A94A6A0322B17BBC00C661C6 /* local_access_chain_convert_pass.h in Headers */,
-				A94A6BC122B17BBC00C661C6 /* latest_version_glsl_std_450_header.h in Headers */,
-				A94A69A322B17BBB00C661C6 /* operand.h in Headers */,
-				A94A6BD322B17BBC00C661C6 /* construct.h in Headers */,
-				A94A6ACD22B17BBC00C661C6 /* dead_variable_elimination.h in Headers */,
-				A94A692D22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.h in Headers */,
-				A94A698D22B17BBB00C661C6 /* reduction_pass.h in Headers */,
-				A94A6B2322B17BBC00C661C6 /* loop_unswitch_pass.h in Headers */,
-				A94A695722B17BBB00C661C6 /* remove_selection_reduction_opportunity.h in Headers */,
-				A94A6A4722B17BBC00C661C6 /* private_to_local_pass.h in Headers */,
-				A94A691122B17BBB00C661C6 /* bit_vector.h in Headers */,
-				A94A6A9322B17BBC00C661C6 /* eliminate_dead_members_pass.h in Headers */,
-				A94A699522B17BBB00C661C6 /* pch_source.h in Headers */,
+				A9C2F37A22E7833D001763CE /* vector_dce.h in Headers */,
+				A9C2F42C22E7833D001763CE /* latest_version_glsl_std_450_header.h in Headers */,
+				A9C2F27822E7833D001763CE /* types.h in Headers */,
+				A9C2F24022E7833D001763CE /* strip_debug_info_pass.h in Headers */,
+				A9C2F31E22E7833D001763CE /* folding_rules.h in Headers */,
+				A9C2F16C22E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.h in Headers */,
+				A9C2F49022E7833D001763CE /* function.h in Headers */,
+				A9C2F38622E7833D001763CE /* licm_pass.h in Headers */,
+				A9C2F32C22E7833D001763CE /* scalar_analysis_nodes.h in Headers */,
+				A9C2F1A022E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.h in Headers */,
+				A9C2F23E22E7833D001763CE /* scalar_analysis.h in Headers */,
+				A9C2F2E822E7833D001763CE /* loop_dependence.h in Headers */,
+				A9C2F27622E7833D001763CE /* ir_loader.h in Headers */,
+				A9C2F1C622E7833D001763CE /* reduction_opportunity_finder.h in Headers */,
+				A9C2F42822E7833D001763CE /* opcode.h in Headers */,
+				A9C2F2D622E7833D001763CE /* mem_pass.h in Headers */,
+				A9C2F44822E7833D001763CE /* basic_block.h in Headers */,
+				A9C2F21622E7833D001763CE /* disassemble.h in Headers */,
+				A9C2F47022E7833D001763CE /* validate_memory_semantics.h in Headers */,
+				A9C2F18422E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.h in Headers */,
+				A9C2F34C22E7833D001763CE /* scalar_replacement_pass.h in Headers */,
+				A9C2F19222E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.h in Headers */,
+				A9C2F2AE22E7833D001763CE /* loop_fusion_pass.h in Headers */,
+				A9C2F49822E7833D001763CE /* decoration.h in Headers */,
+				A9C2F36222E7833D001763CE /* module.h in Headers */,
+				A9C2F27E22E7833D001763CE /* basic_block.h in Headers */,
+				A9C2F43222E7833D001763CE /* binary.h in Headers */,
+				A9C2F37622E7833D001763CE /* aggressive_dead_code_elim_pass.h in Headers */,
+				A9C2F37E22E7833D001763CE /* pass_manager.h in Headers */,
+				A9C2F22022E7833D001763CE /* merge_return_pass.h in Headers */,
+				A9C2F1E622E7833D001763CE /* spirv_reducer_options.h in Headers */,
+				A9C2F22A22E7833D001763CE /* composite.h in Headers */,
+				A9C2F31A22E7833D001763CE /* dominator_analysis.h in Headers */,
+				A9C2F38A22E7833D001763CE /* ccp_pass.h in Headers */,
+				A9C2F2EC22E7833D001763CE /* flatten_decoration_pass.h in Headers */,
+				A9C2F20822E7833D001763CE /* spirv_endian.h in Headers */,
+				A9C2F18A22E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.h in Headers */,
+				A9C2F1F422E7833D001763CE /* spirv_constant.h in Headers */,
+				A9C2F21A22E7833D001763CE /* if_conversion.h in Headers */,
+				A9C2F1B622E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.h in Headers */,
+				A9C2F15E22E7833D001763CE /* bitutils.h in Headers */,
+				A9C2F26C22E7833D001763CE /* loop_unroller.h in Headers */,
+				A9C2F1CA22E7833D001763CE /* remove_block_reduction_opportunity_finder.h in Headers */,
+				A9C2F16822E7833D001763CE /* spirv_target_env.h in Headers */,
+				A9C2F36E22E7833D001763CE /* code_sink.h in Headers */,
+				A9C2F23222E7833D001763CE /* strip_atomic_counter_memory_pass.h in Headers */,
+				A9C2F2D422E7833D001763CE /* instrument_pass.h in Headers */,
+				A9C2F38822E7833D001763CE /* build_module.h in Headers */,
+				A9C2F42E22E7833D001763CE /* extensions.h in Headers */,
+				A9C2F48622E7833D001763CE /* instruction.h in Headers */,
+				A9C2F33022E7833D001763CE /* fix_storage_class.h in Headers */,
+				A9C2F36822E7833D001763CE /* ir_builder.h in Headers */,
+				A9C2F2B622E7833D001763CE /* decoration_manager.h in Headers */,
+				A9C2F33A22E7833D001763CE /* strip_reflect_info_pass.h in Headers */,
+				A9C2F38422E7833D001763CE /* iterator.h in Headers */,
+				A9C2F38C22E7833D001763CE /* decompose_initialized_variables_pass.h in Headers */,
+				A9C2F34822E7833D001763CE /* null_pass.h in Headers */,
+				A9C2F30A22E7833D001763CE /* split_invalid_unreachable_pass.h in Headers */,
+				A9C2F30C22E7833D001763CE /* copy_prop_arrays.h in Headers */,
+				A9C2F22422E7833D001763CE /* loop_fusion.h in Headers */,
+				A9C2F3A622E7833D001763CE /* table.h in Headers */,
+				A9C2F15022E7833D001763CE /* make_unique.h in Headers */,
+				A9C2F31C22E7833D001763CE /* pass.h in Headers */,
+				A9C2F2BC22E7833D001763CE /* local_single_block_elim_pass.h in Headers */,
+				A9C2F2A422E7833D001763CE /* loop_peeling.h in Headers */,
+				A9C2F19822E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.h in Headers */,
+				A9C2F1DE22E7833D001763CE /* cfa.h in Headers */,
+				A9C2F2C022E7833D001763CE /* strength_reduction_pass.h in Headers */,
+				A9C2F28422E7833D001763CE /* block_merge_pass.h in Headers */,
+				A9C2F33622E7833D001763CE /* passes.h in Headers */,
+				A9C2F46222E7833D001763CE /* validate.h in Headers */,
+				A9C2F22E22E7833D001763CE /* register_pressure.h in Headers */,
+				A9C2F1C022E7833D001763CE /* reduction_opportunity.h in Headers */,
+				A9C2F1A622E7833D001763CE /* remove_selection_reduction_opportunity_finder.h in Headers */,
+				A9C2F2B022E7833D001763CE /* struct_cfg_analysis.h in Headers */,
+				A9C2F1CE22E7833D001763CE /* reduction_util.h in Headers */,
+				A9C2F23622E7833D001763CE /* local_single_store_elim_pass.h in Headers */,
+				A9C2F18222E7833D001763CE /* remove_instruction_reduction_opportunity.h in Headers */,
+				A9C2F13E22E7833D001763CE /* assembly_grammar.h in Headers */,
+				A9C2F20622E7833D001763CE /* diagnostic.h in Headers */,
+				A9C2F45622E7833D001763CE /* validation_state.h in Headers */,
+				A9C2F1EC22E7833D001763CE /* spirv_definition.h in Headers */,
+				A9C2F35022E7833D001763CE /* pch_source_opt.h in Headers */,
+				A9C2F25822E7833D001763CE /* instruction_list.h in Headers */,
+				A9C2F30222E7833D001763CE /* loop_fission.h in Headers */,
+				A9C2F17022E7833D001763CE /* remove_block_reduction_opportunity.h in Headers */,
+				A9C2F39622E7833D001763CE /* inst_bindless_check_pass.h in Headers */,
+				A9C2F2F222E7833D001763CE /* constants.h in Headers */,
+				A9C2F1F222E7833D001763CE /* macro.h in Headers */,
+				A9C2F42622E7833D001763CE /* spirv_optimizer_options.h in Headers */,
+				A9C2F43E22E7833D001763CE /* construct.h in Headers */,
+				A9C2F25622E7833D001763CE /* propagator.h in Headers */,
+				A9C2F39422E7833D001763CE /* feature_manager.h in Headers */,
+				A9C2F2CC22E7833D001763CE /* dead_insert_elim_pass.h in Headers */,
+				A9C2F42022E7833D001763CE /* latest_version_spirv_header.h in Headers */,
+				A9C2F3A022E7833D001763CE /* type_manager.h in Headers */,
+				A9C2F27A22E7833D001763CE /* fold_spec_constant_op_and_composite_pass.h in Headers */,
+				A9C2F17E22E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.h in Headers */,
+				A9C2F30822E7833D001763CE /* log.h in Headers */,
+				A9C2F39C22E7833D001763CE /* dominator_tree.h in Headers */,
+				A9C2F2FA22E7833D001763CE /* upgrade_memory_model.h in Headers */,
+				A9C2F20022E7833D001763CE /* name_mapper.h in Headers */,
+				A9C2F19A22E7833D001763CE /* remove_function_reduction_opportunity.h in Headers */,
+				A9C2F23022E7833D001763CE /* tree_iterator.h in Headers */,
+				A9C2F34A22E7833D001763CE /* const_folding_rules.h in Headers */,
+				A9C2F34022E7833D001763CE /* remove_duplicates_pass.h in Headers */,
+				A9C2F41C22E7833D001763CE /* ext_inst.h in Headers */,
+				A9C2F2E622E7833D001763CE /* inline_pass.h in Headers */,
+				A9C2F37C22E7833D001763CE /* combine_access_chains.h in Headers */,
+				A9C2F32022E7833D001763CE /* eliminate_dead_functions_pass.h in Headers */,
+				A9C2F31222E7833D001763CE /* ssa_rewrite_pass.h in Headers */,
+				A9C2F15822E7833D001763CE /* timer.h in Headers */,
+				A9C2F42422E7833D001763CE /* instruction.h in Headers */,
+				A9C2F35A22E7833D001763CE /* local_ssa_elim_pass.h in Headers */,
+				A9C2F34422E7833D001763CE /* reflect.h in Headers */,
+				A9C2F1A822E7833D001763CE /* merge_blocks_reduction_opportunity_finder.h in Headers */,
+				A9C2F1F822E7833D001763CE /* spirv_validator_options.h in Headers */,
+				A9C2F32422E7833D001763CE /* fold.h in Headers */,
+				A9C2F16622E7833D001763CE /* ilist.h in Headers */,
+				A9C2F15422E7833D001763CE /* small_vector.h in Headers */,
+				A9C2F16022E7833D001763CE /* hex_float.h in Headers */,
+				A9C2F2BA22E7833D001763CE /* process_lines_pass.h in Headers */,
+				A9C2F14622E7833D001763CE /* text.h in Headers */,
+				A9C2F1C822E7833D001763CE /* change_operand_reduction_opportunity.h in Headers */,
+				A9C2F38E22E7833D001763CE /* function.h in Headers */,
+				A9C2F15222E7833D001763CE /* string_utils.h in Headers */,
+				A9C2F1DA22E7833D001763CE /* latest_version_opencl_std_header.h in Headers */,
+				A9C2F30E22E7833D001763CE /* eliminate_dead_constant_pass.h in Headers */,
+				A9C2F1BC22E7833D001763CE /* reducer.h in Headers */,
+				A9C2F36022E7833D001763CE /* loop_utils.h in Headers */,
+				A9C2F23422E7833D001763CE /* legalize_vector_shuffle_pass.h in Headers */,
+				A9C2F2A022E7833D001763CE /* local_redundancy_elimination.h in Headers */,
+				A9C2F22C22E7833D001763CE /* compact_ids_pass.h in Headers */,
+				A9C2F1B222E7833D001763CE /* remove_function_reduction_opportunity_finder.h in Headers */,
+				A9C2F30422E7833D001763CE /* workaround1209.h in Headers */,
+				A9C2F1B422E7833D001763CE /* pch_source_reduce.h in Headers */,
+				A9C2F1FC22E7833D001763CE /* text_handler.h in Headers */,
+				A9C2F1E222E7833D001763CE /* enum_string_mapping.h in Headers */,
+				A9C2F17222E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.h in Headers */,
+				A9C2F27422E7833D001763CE /* unify_const_pass.h in Headers */,
+				A9C2F14C22E7833D001763CE /* parse_number.h in Headers */,
+				A9C2F2EA22E7833D001763CE /* value_number_table.h in Headers */,
+				A9C2F1C222E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.h in Headers */,
+				A9C2F24C22E7833D001763CE /* replace_invalid_opc.h in Headers */,
+				A9C2F2A822E7833D001763CE /* block_merge_util.h in Headers */,
+				A9C2F35422E7833D001763CE /* redundancy_elimination.h in Headers */,
+				A9C2F37222E7833D001763CE /* generate_webgpu_initializers_pass.h in Headers */,
+				A9C2F2D022E7833D001763CE /* freeze_spec_constant_value_pass.h in Headers */,
+				A9C2F23822E7833D001763CE /* reduce_load_size.h in Headers */,
+				A9C2F37422E7833D001763CE /* instruction.h in Headers */,
+				A9C2F13C22E7833D001763CE /* spirv_fuzzer_options.h in Headers */,
+				A9C2F46C22E7833D001763CE /* validate_scopes.h in Headers */,
+				A9C2F14E22E7833D001763CE /* ilist_node.h in Headers */,
+				A9C2F14022E7833D001763CE /* enum_set.h in Headers */,
+				A9C2F1FE22E7833D001763CE /* parsed_operand.h in Headers */,
+				A9C2F26422E7833D001763CE /* ir_context.h in Headers */,
+				A9C2F36C22E7833D001763CE /* cfg.h in Headers */,
+				A9C2F2F022E7833D001763CE /* inline_exhaustive_pass.h in Headers */,
+				A9C2F1D022E7833D001763CE /* merge_blocks_reduction_opportunity.h in Headers */,
+				A9C2F33E22E7833D001763CE /* simplification_pass.h in Headers */,
+				A9C2F29622E7833D001763CE /* def_use_manager.h in Headers */,
+				A9C2F29A22E7833D001763CE /* cfg_cleanup_pass.h in Headers */,
+				A9C2F21222E7833D001763CE /* print.h in Headers */,
+				A9C2F22222E7833D001763CE /* inline_opaque_pass.h in Headers */,
+				A9C2F19C22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.h in Headers */,
+				A9C2F39A22E7833D001763CE /* set_spec_constant_default_value_pass.h in Headers */,
+				A9C2F24E22E7833D001763CE /* local_access_chain_convert_pass.h in Headers */,
+				A9C2F1EE22E7833D001763CE /* operand.h in Headers */,
+				A9C2F31622E7833D001763CE /* dead_variable_elimination.h in Headers */,
+				A9C2F32222E7833D001763CE /* eliminate_dead_functions_util.h in Headers */,
+				A9C2F17822E7833D001763CE /* operand_to_const_reduction_opportunity_finder.h in Headers */,
+				A9C2F37022E7833D001763CE /* loop_descriptor.h in Headers */,
+				A9C2F1D822E7833D001763CE /* reduction_pass.h in Headers */,
+				A9C2F1A222E7833D001763CE /* remove_selection_reduction_opportunity.h in Headers */,
+				A9C2F29222E7833D001763CE /* private_to_local_pass.h in Headers */,
+				A9C2F15C22E7833D001763CE /* bit_vector.h in Headers */,
+				A9C2F36A22E7833D001763CE /* loop_unswitch_pass.h in Headers */,
+				A9C2F2DC22E7833D001763CE /* eliminate_dead_members_pass.h in Headers */,
+				A9C2F1E022E7833D001763CE /* pch_source.h in Headers */,
+				A9C2F32822E7833D001763CE /* dead_branch_elim_pass.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -2987,200 +2981,200 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A94A6A3A22B17BBC00C661C6 /* module.cpp in Sources */,
-				A94A6B5622B17BBC00C661C6 /* legalize_vector_shuffle_pass.cpp in Sources */,
-				A94A6AAA22B17BBC00C661C6 /* eliminate_dead_members_pass.cpp in Sources */,
-				A94A6B1422B17BBC00C661C6 /* inline_opaque_pass.cpp in Sources */,
-				A94A697822B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */,
-				A94A693A22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */,
-				A94A6AA422B17BBC00C661C6 /* if_conversion.cpp in Sources */,
-				A94A6A5E22B17BBC00C661C6 /* loop_unroller.cpp in Sources */,
-				A94A6A1C22B17BBC00C661C6 /* cfg_cleanup_pass.cpp in Sources */,
-				A94A6C0A22B17BBD00C661C6 /* validate_logicals.cpp in Sources */,
-				A94A69D022B17BBC00C661C6 /* register_pressure.cpp in Sources */,
-				A94A695822B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp in Sources */,
-				A94A6A2622B17BBC00C661C6 /* loop_dependence.cpp in Sources */,
-				A94A6B0E22B17BBC00C661C6 /* fix_storage_class.cpp in Sources */,
-				A94A6A8E22B17BBC00C661C6 /* loop_descriptor.cpp in Sources */,
-				A94A6C1E22B17BBD00C661C6 /* basic_block.cpp in Sources */,
-				A94A6A1622B17BBC00C661C6 /* merge_return_pass.cpp in Sources */,
-				A94A6AB222B17BBC00C661C6 /* copy_prop_arrays.cpp in Sources */,
-				A94A6C1422B17BBD00C661C6 /* instruction.cpp in Sources */,
-				A94A6A4422B17BBC00C661C6 /* generate_webgpu_initializers_pass.cpp in Sources */,
-				A94A6AEC22B17BBC00C661C6 /* set_spec_constant_default_value_pass.cpp in Sources */,
-				A94A696222B17BBB00C661C6 /* reducer.cpp in Sources */,
-				A94A6BFC22B17BBD00C661C6 /* validate_datarules.cpp in Sources */,
-				A94A6BD022B17BBC00C661C6 /* validate_capability.cpp in Sources */,
-				A94A6A4822B17BBC00C661C6 /* inline_pass.cpp in Sources */,
-				A94A6AAC22B17BBC00C661C6 /* strength_reduction_pass.cpp in Sources */,
-				A94A6B1022B17BBC00C661C6 /* value_number_table.cpp in Sources */,
-				A94A6C1022B17BBD00C661C6 /* validate_image.cpp in Sources */,
-				A94A6B0622B17BBC00C661C6 /* instruction.cpp in Sources */,
-				A94A6BC422B17BBC00C661C6 /* disassemble.cpp in Sources */,
-				A94A6A3C22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */,
-				A94A6A5622B17BBC00C661C6 /* split_invalid_unreachable_pass.cpp in Sources */,
-				A94A68F622B17BBB00C661C6 /* text.cpp in Sources */,
-				A94A69C822B17BBC00C661C6 /* ext_inst.cpp in Sources */,
-				A94A6C2822B17BBD00C661C6 /* validate_primitives.cpp in Sources */,
-				A94A68FE22B17BBB00C661C6 /* pch_source.cpp in Sources */,
-				A94A69F622B17BBC00C661C6 /* cfg.cpp in Sources */,
-				A94A6A8422B17BBC00C661C6 /* folding_rules.cpp in Sources */,
-				A94A6AE222B17BBC00C661C6 /* private_to_local_pass.cpp in Sources */,
-				A94A6A2422B17BBC00C661C6 /* ssa_rewrite_pass.cpp in Sources */,
-				A94A6B1622B17BBC00C661C6 /* replace_invalid_opc.cpp in Sources */,
-				A94A693C22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp in Sources */,
-				A94A694222B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp in Sources */,
-				A94A6B0A22B17BBC00C661C6 /* reduce_load_size.cpp in Sources */,
-				A94A6A6022B17BBC00C661C6 /* constants.cpp in Sources */,
-				A94A694422B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */,
-				A94A6A8022B17BBC00C661C6 /* flatten_decoration_pass.cpp in Sources */,
-				A94A6A9822B17BBC00C661C6 /* composite.cpp in Sources */,
-				A94A696C22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */,
-				A94A6AB622B17BBC00C661C6 /* inline_exhaustive_pass.cpp in Sources */,
-				A94A6C2422B17BBD00C661C6 /* validate_composites.cpp in Sources */,
-				A94A691E22B17BBB00C661C6 /* table.cpp in Sources */,
-				A94A6BE422B17BBC00C661C6 /* validate_builtins.cpp in Sources */,
-				A94A6A6822B17BBC00C661C6 /* def_use_manager.cpp in Sources */,
-				A94A6AB422B17BBC00C661C6 /* pass_manager.cpp in Sources */,
-				A94A69C422B17BBC00C661C6 /* opcode.cpp in Sources */,
-				A94A6A4C22B17BBC00C661C6 /* ir_loader.cpp in Sources */,
-				A94A69FE22B17BBC00C661C6 /* freeze_spec_constant_value_pass.cpp in Sources */,
-				A94A69CC22B17BBC00C661C6 /* optimizer.cpp in Sources */,
-				A94A6BCE22B17BBC00C661C6 /* validate_cfg.cpp in Sources */,
-				A94A699822B17BBB00C661C6 /* spirv_fuzzer_options.cpp in Sources */,
-				A94A69EE22B17BBC00C661C6 /* code_sink.cpp in Sources */,
-				A94A696022B17BBB00C661C6 /* pch_source_reduce.cpp in Sources */,
-				A94A6BC822B17BBC00C661C6 /* text_handler.cpp in Sources */,
-				A94A69FA22B17BBC00C661C6 /* decoration_manager.cpp in Sources */,
-				A94A6A9A22B17BBC00C661C6 /* process_lines_pass.cpp in Sources */,
-				A94A697222B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */,
-				A94A693422B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp in Sources */,
-				A94A68EE22B17BBB00C661C6 /* spirv_target_env.cpp in Sources */,
-				A94A6BE022B17BBC00C661C6 /* validate_decorations.cpp in Sources */,
-				A94A6C1A22B17BBD00C661C6 /* validate_execution_limitations.cpp in Sources */,
-				A94A6BF822B17BBD00C661C6 /* validate_adjacency.cpp in Sources */,
-				A94A692222B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp in Sources */,
-				A94A696E22B17BBB00C661C6 /* reduction_opportunity.cpp in Sources */,
-				A94A6A2222B17BBC00C661C6 /* strip_debug_info_pass.cpp in Sources */,
-				A94A6AFA22B17BBC00C661C6 /* redundancy_elimination.cpp in Sources */,
-				A94A6A5A22B17BBC00C661C6 /* vector_dce.cpp in Sources */,
-				A94A69B622B17BBB00C661C6 /* spirv_reducer_options.cpp in Sources */,
-				A94A6A6A22B17BBC00C661C6 /* strip_reflect_info_pass.cpp in Sources */,
-				A94A6BD822B17BBC00C661C6 /* validate_scopes.cpp in Sources */,
-				A94A6BB222B17BBC00C661C6 /* diagnostic.cpp in Sources */,
-				A94A6ACE22B17BBC00C661C6 /* block_merge_pass.cpp in Sources */,
-				A94A69C222B17BBC00C661C6 /* software_version.cpp in Sources */,
-				A94A6C0022B17BBD00C661C6 /* validate_id.cpp in Sources */,
-				A94A6BDA22B17BBC00C661C6 /* validate_atomics.cpp in Sources */,
-				A94A690E22B17BBB00C661C6 /* string_utils.cpp in Sources */,
-				A94A6A1422B17BBC00C661C6 /* dominator_tree.cpp in Sources */,
-				A94A69FC22B17BBC00C661C6 /* local_single_block_elim_pass.cpp in Sources */,
-				A94A6A6E22B17BBC00C661C6 /* ccp_pass.cpp in Sources */,
-				A94A6AAE22B17BBC00C661C6 /* block_merge_util.cpp in Sources */,
-				A94A6B3A22B17BBC00C661C6 /* basic_block.cpp in Sources */,
-				A94A6BE222B17BBC00C661C6 /* validate_debug.cpp in Sources */,
-				A94A691622B17BBB00C661C6 /* parse_number.cpp in Sources */,
-				A94A6BFA22B17BBD00C661C6 /* validate_conversion.cpp in Sources */,
-				A94A6C2622B17BBD00C661C6 /* validation_state.cpp in Sources */,
-				A94A6B5022B17BBC00C661C6 /* scalar_analysis_simplification.cpp in Sources */,
-				A94A6B1E22B17BBC00C661C6 /* decompose_initialized_variables_pass.cpp in Sources */,
-				A94A6BEE22B17BBD00C661C6 /* validate_bitwise.cpp in Sources */,
-				A94A696422B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */,
-				A94A6BF222B17BBD00C661C6 /* construct.cpp in Sources */,
-				A94A69BE22B17BBB00C661C6 /* name_mapper.cpp in Sources */,
-				A94A692E22B17BBB00C661C6 /* reduction_util.cpp in Sources */,
-				A94A698A22B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp in Sources */,
-				A94A6B3022B17BBC00C661C6 /* struct_cfg_analysis.cpp in Sources */,
-				A94A6A3622B17BBC00C661C6 /* dead_variable_elimination.cpp in Sources */,
-				A94A6BB622B17BBC00C661C6 /* libspirv.cpp in Sources */,
-				A94A6A6622B17BBC00C661C6 /* common_uniform_elim_pass.cpp in Sources */,
-				A94A6AFE22B17BBC00C661C6 /* workaround1209.cpp in Sources */,
-				A94A6C0622B17BBD00C661C6 /* validate_mode_setting.cpp in Sources */,
-				A94A6B3822B17BBC00C661C6 /* local_access_chain_convert_pass.cpp in Sources */,
-				A94A69F022B17BBC00C661C6 /* types.cpp in Sources */,
-				A94A6C1222B17BBD00C661C6 /* validate_literals.cpp in Sources */,
-				A94A6A3022B17BBC00C661C6 /* mem_pass.cpp in Sources */,
-				A94A68F822B17BBB00C661C6 /* assembly_grammar.cpp in Sources */,
-				A94A6BF022B17BBD00C661C6 /* validate_extensions.cpp in Sources */,
-				A94A6BEC22B17BBD00C661C6 /* validate_constants.cpp in Sources */,
-				A94A69D222B17BBC00C661C6 /* loop_utils.cpp in Sources */,
-				A94A6A1222B17BBC00C661C6 /* loop_fission.cpp in Sources */,
-				A94A698622B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */,
-				A94A694A22B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp in Sources */,
-				A94A69DA22B17BBC00C661C6 /* combine_access_chains.cpp in Sources */,
-				A94A6A9622B17BBC00C661C6 /* instruction_list.cpp in Sources */,
-				A94A6A7422B17BBC00C661C6 /* pch_source_opt.cpp in Sources */,
-				A94A694022B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */,
-				A94A69B822B17BBB00C661C6 /* parsed_operand.cpp in Sources */,
-				A94A6A5222B17BBC00C661C6 /* eliminate_dead_functions_pass.cpp in Sources */,
-				A94A6A1E22B17BBC00C661C6 /* const_folding_rules.cpp in Sources */,
-				A94A6BD622B17BBC00C661C6 /* validate_non_uniform.cpp in Sources */,
-				A94A6AEA22B17BBC00C661C6 /* loop_dependence_helpers.cpp in Sources */,
-				A94A6C0E22B17BBD00C661C6 /* validate_memory.cpp in Sources */,
-				A94A6AF422B17BBC00C661C6 /* scalar_replacement_pass.cpp in Sources */,
-				A94A695222B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */,
-				A94A691822B17BBB00C661C6 /* bit_vector.cpp in Sources */,
-				A94A6ACA22B17BBC00C661C6 /* scalar_analysis.cpp in Sources */,
-				A94A6C1C22B17BBD00C661C6 /* validate_layout.cpp in Sources */,
-				A94A6AE622B17BBC00C661C6 /* propagator.cpp in Sources */,
-				A94A6A9422B17BBC00C661C6 /* function.cpp in Sources */,
-				A94A69C022B17BBB00C661C6 /* linker.cpp in Sources */,
-				A94A6B1C22B17BBC00C661C6 /* dominator_analysis.cpp in Sources */,
-				A94A6A7A22B17BBC00C661C6 /* eliminate_dead_functions_util.cpp in Sources */,
-				A94A68FC22B17BBB00C661C6 /* extensions.cpp in Sources */,
-				A94A6BE822B17BBC00C661C6 /* validate.cpp in Sources */,
-				A94A6A1A22B17BBC00C661C6 /* eliminate_dead_constant_pass.cpp in Sources */,
-				A94A693022B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */,
-				A94A694822B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp in Sources */,
-				A94A6B4A22B17BBC00C661C6 /* upgrade_memory_model.cpp in Sources */,
-				A94A6BCC22B17BBC00C661C6 /* validate_misc.cpp in Sources */,
-				A94A6A0422B17BBC00C661C6 /* inst_bindless_check_pass.cpp in Sources */,
-				A94A699E22B17BBB00C661C6 /* print.cpp in Sources */,
-				A94A699C22B17BBB00C661C6 /* spirv_validator_options.cpp in Sources */,
-				A94A692822B17BBB00C661C6 /* reduction_pass.cpp in Sources */,
-				A94A69DC22B17BBC00C661C6 /* build_module.cpp in Sources */,
-				A94A6AF022B17BBC00C661C6 /* fold.cpp in Sources */,
-				A94A6A0622B17BBC00C661C6 /* local_redundancy_elimination.cpp in Sources */,
-				A94A690A22B17BBB00C661C6 /* timer.cpp in Sources */,
-				A94A6A7822B17BBC00C661C6 /* aggressive_dead_code_elim_pass.cpp in Sources */,
-				A94A6BD422B17BBC00C661C6 /* validate_barriers.cpp in Sources */,
-				A94A699022B17BBB00C661C6 /* spirv_optimizer_options.cpp in Sources */,
-				A94A6A0E22B17BBC00C661C6 /* feature_manager.cpp in Sources */,
-				A94A6C1622B17BBD00C661C6 /* validate_type.cpp in Sources */,
-				A94A698822B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */,
-				A94A6B5A22B17BBC00C661C6 /* compact_ids_pass.cpp in Sources */,
-				A94A6A4222B17BBC00C661C6 /* type_manager.cpp in Sources */,
-				A94A695E22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */,
-				A94A6BDE22B17BBC00C661C6 /* validate_instruction.cpp in Sources */,
-				A94A6A0822B17BBC00C661C6 /* instrument_pass.cpp in Sources */,
-				A94A6B5C22B17BBC00C661C6 /* loop_peeling.cpp in Sources */,
-				A94A6ABC22B17BBC00C661C6 /* loop_fusion_pass.cpp in Sources */,
-				A94A6A3E22B17BBC00C661C6 /* loop_unswitch_pass.cpp in Sources */,
-				A94A6C0422B17BBD00C661C6 /* validate_arithmetics.cpp in Sources */,
-				A94A69AA22B17BBB00C661C6 /* binary.cpp in Sources */,
-				A94A6AC622B17BBC00C661C6 /* dead_insert_elim_pass.cpp in Sources */,
-				A94A6BF422B17BBD00C661C6 /* function.cpp in Sources */,
-				A94A6ADE22B17BBC00C661C6 /* local_single_store_elim_pass.cpp in Sources */,
-				A94A6BCA22B17BBC00C661C6 /* validate_annotation.cpp in Sources */,
-				A94A6A5022B17BBC00C661C6 /* licm_pass.cpp in Sources */,
-				A94A692A22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */,
-				A94A6BE622B17BBC00C661C6 /* validate_interfaces.cpp in Sources */,
-				A94A6A3422B17BBC00C661C6 /* remove_duplicates_pass.cpp in Sources */,
-				A94A69F822B17BBC00C661C6 /* strip_atomic_counter_memory_pass.cpp in Sources */,
-				A94A6C0C22B17BBD00C661C6 /* validate_derivatives.cpp in Sources */,
-				A94A6A8822B17BBC00C661C6 /* ir_context.cpp in Sources */,
-				A94A6A7E22B17BBC00C661C6 /* dead_branch_elim_pass.cpp in Sources */,
-				A94A6A9022B17BBC00C661C6 /* local_ssa_elim_pass.cpp in Sources */,
-				A94A6A1022B17BBC00C661C6 /* pass.cpp in Sources */,
-				A94A6A4022B17BBC00C661C6 /* unify_const_pass.cpp in Sources */,
-				A94A6BBE22B17BBC00C661C6 /* operand.cpp in Sources */,
-				A94A6C2022B17BBD00C661C6 /* validate_function.cpp in Sources */,
-				A94A698022B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp in Sources */,
-				A94A6A7C22B17BBC00C661C6 /* simplification_pass.cpp in Sources */,
-				A94A6B4822B17BBC00C661C6 /* loop_fusion.cpp in Sources */,
-				A94A69AE22B17BBB00C661C6 /* enum_string_mapping.cpp in Sources */,
-				A94A6C0822B17BBD00C661C6 /* validate_memory_semantics.cpp in Sources */,
-				A94A69A422B17BBB00C661C6 /* spirv_endian.cpp in Sources */,
+				A9C2F30F22E7833D001763CE /* dead_insert_elim_pass.cpp in Sources */,
+				A9C2F2BD22E7833D001763CE /* pch_source_opt.cpp in Sources */,
+				A9C2F28522E7833D001763CE /* module.cpp in Sources */,
+				A9C2F30522E7833D001763CE /* loop_fusion_pass.cpp in Sources */,
+				A9C2F33122E7833D001763CE /* loop_dependence_helpers.cpp in Sources */,
+				A9C2F44F22E7833D001763CE /* validate_builtins.cpp in Sources */,
+				A9C2F1C322E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F18522E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */,
+				A9C2F44122E7833D001763CE /* validate_non_uniform.cpp in Sources */,
+				A9C2F2B322E7833D001763CE /* strip_reflect_info_pass.cpp in Sources */,
+				A9C2F2A922E7833D001763CE /* loop_unroller.cpp in Sources */,
+				A9C2F47122E7833D001763CE /* validate_arithmetics.cpp in Sources */,
+				A9C2F26722E7833D001763CE /* cfg_cleanup_pass.cpp in Sources */,
+				A9C2F44B22E7833D001763CE /* validate_decorations.cpp in Sources */,
+				A9C2F3A322E7833D001763CE /* loop_peeling.cpp in Sources */,
+				A9C2F21B22E7833D001763CE /* register_pressure.cpp in Sources */,
+				A9C2F1A322E7833D001763CE /* remove_instruction_reduction_opportunity.cpp in Sources */,
+				A9C2F27122E7833D001763CE /* loop_dependence.cpp in Sources */,
+				A9C2F36322E7833D001763CE /* dominator_analysis.cpp in Sources */,
+				A9C2F26122E7833D001763CE /* merge_return_pass.cpp in Sources */,
+				A9C2F28F22E7833D001763CE /* generate_webgpu_initializers_pass.cpp in Sources */,
+				A9C2F47522E7833D001763CE /* validate_memory_semantics.cpp in Sources */,
+				A9C2F1AD22E7833D001763CE /* reducer.cpp in Sources */,
+				A9C2F46722E7833D001763CE /* validate_small_type_uses.cpp in Sources */,
+				A9C2F2C722E7833D001763CE /* dead_branch_elim_pass.cpp in Sources */,
+				A9C2F2C522E7833D001763CE /* simplification_pass.cpp in Sources */,
+				A9C2F38F22E7833D001763CE /* loop_fusion.cpp in Sources */,
+				A9C2F29322E7833D001763CE /* inline_pass.cpp in Sources */,
+				A9C2F28722E7833D001763CE /* fold_spec_constant_op_and_composite_pass.cpp in Sources */,
+				A9C2F2F522E7833D001763CE /* strength_reduction_pass.cpp in Sources */,
+				A9C2F2A122E7833D001763CE /* split_invalid_unreachable_pass.cpp in Sources */,
+				A9C2F35B22E7833D001763CE /* inline_opaque_pass.cpp in Sources */,
+				A9C2F14122E7833D001763CE /* text.cpp in Sources */,
+				A9C2F48322E7833D001763CE /* validate_type.cpp in Sources */,
+				A9C2F42F22E7833D001763CE /* disassemble.cpp in Sources */,
+				A9C2F2C922E7833D001763CE /* flatten_decoration_pass.cpp in Sources */,
+				A9C2F21322E7833D001763CE /* ext_inst.cpp in Sources */,
+				A9C2F14922E7833D001763CE /* pch_source.cpp in Sources */,
+				A9C2F2ED22E7833D001763CE /* if_conversion.cpp in Sources */,
+				A9C2F24122E7833D001763CE /* cfg.cpp in Sources */,
+				A9C2F31722E7833D001763CE /* block_merge_pass.cpp in Sources */,
+				A9C2F45D22E7833D001763CE /* construct.cpp in Sources */,
+				A9C2F2DD22E7833D001763CE /* function.cpp in Sources */,
+				A9C2F33722E7833D001763CE /* fold.cpp in Sources */,
+				A9C2F26F22E7833D001763CE /* ssa_rewrite_pass.cpp in Sources */,
+				A9C2F2D722E7833D001763CE /* loop_descriptor.cpp in Sources */,
+				A9C2F18722E7833D001763CE /* remove_function_reduction_opportunity.cpp in Sources */,
+				A9C2F18D22E7833D001763CE /* remove_selection_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F49322E7833D001763CE /* validation_state.cpp in Sources */,
+				A9C2F2AB22E7833D001763CE /* constants.cpp in Sources */,
+				A9C2F35722E7833D001763CE /* value_number_table.cpp in Sources */,
+				A9C2F18F22E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */,
+				A9C2F39122E7833D001763CE /* upgrade_memory_model.cpp in Sources */,
+				A9C2F1B722E7833D001763CE /* merge_blocks_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F16922E7833D001763CE /* table.cpp in Sources */,
+				A9C2F20F22E7833D001763CE /* opcode.cpp in Sources */,
+				A9C2F29722E7833D001763CE /* ir_loader.cpp in Sources */,
+				A9C2F43922E7833D001763CE /* validate_cfg.cpp in Sources */,
+				A9C2F3A122E7833D001763CE /* compact_ids_pass.cpp in Sources */,
+				A9C2F2F722E7833D001763CE /* block_merge_util.cpp in Sources */,
+				A9C2F24922E7833D001763CE /* freeze_spec_constant_value_pass.cpp in Sources */,
+				A9C2F33322E7833D001763CE /* set_spec_constant_default_value_pass.cpp in Sources */,
+				A9C2F21722E7833D001763CE /* optimizer.cpp in Sources */,
+				A9C2F37F22E7833D001763CE /* local_access_chain_convert_pass.cpp in Sources */,
+				A9C2F32D22E7833D001763CE /* propagator.cpp in Sources */,
+				A9C2F48922E7833D001763CE /* validate_layout.cpp in Sources */,
+				A9C2F47B22E7833D001763CE /* validate_memory.cpp in Sources */,
+				A9C2F48B22E7833D001763CE /* basic_block.cpp in Sources */,
+				A9C2F1E322E7833D001763CE /* spirv_fuzzer_options.cpp in Sources */,
+				A9C2F47D22E7833D001763CE /* validate_image.cpp in Sources */,
+				A9C2F45122E7833D001763CE /* validate_interfaces.cpp in Sources */,
+				A9C2F48722E7833D001763CE /* validate_execution_limitations.cpp in Sources */,
+				A9C2F23922E7833D001763CE /* code_sink.cpp in Sources */,
+				A9C2F1AB22E7833D001763CE /* pch_source_reduce.cpp in Sources */,
+				A9C2F24522E7833D001763CE /* decoration_manager.cpp in Sources */,
+				A9C2F31322E7833D001763CE /* scalar_analysis.cpp in Sources */,
+				A9C2F1BD22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.cpp in Sources */,
+				A9C2F33B22E7833D001763CE /* scalar_replacement_pass.cpp in Sources */,
+				A9C2F17F22E7833D001763CE /* remove_function_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F13922E7833D001763CE /* spirv_target_env.cpp in Sources */,
+				A9C2F16D22E7833D001763CE /* remove_selection_reduction_opportunity.cpp in Sources */,
+				A9C2F1B922E7833D001763CE /* reduction_opportunity.cpp in Sources */,
+				A9C2F26D22E7833D001763CE /* strip_debug_info_pass.cpp in Sources */,
+				A9C2F2FB22E7833D001763CE /* copy_prop_arrays.cpp in Sources */,
+				A9C2F47322E7833D001763CE /* validate_mode_setting.cpp in Sources */,
+				A9C2F46D22E7833D001763CE /* validate_id.cpp in Sources */,
+				A9C2F39722E7833D001763CE /* scalar_analysis_simplification.cpp in Sources */,
+				A9C2F45322E7833D001763CE /* validate.cpp in Sources */,
+				A9C2F43522E7833D001763CE /* validate_annotation.cpp in Sources */,
+				A9C2F2A522E7833D001763CE /* vector_dce.cpp in Sources */,
+				A9C2F20122E7833D001763CE /* spirv_reducer_options.cpp in Sources */,
+				A9C2F20D22E7833D001763CE /* software_version.cpp in Sources */,
+				A9C2F15922E7833D001763CE /* string_utils.cpp in Sources */,
+				A9C2F25F22E7833D001763CE /* dominator_tree.cpp in Sources */,
+				A9C2F43F22E7833D001763CE /* validate_barriers.cpp in Sources */,
+				A9C2F37722E7833D001763CE /* struct_cfg_analysis.cpp in Sources */,
+				A9C2F24722E7833D001763CE /* local_single_block_elim_pass.cpp in Sources */,
+				A9C2F16122E7833D001763CE /* parse_number.cpp in Sources */,
+				A9C2F1AF22E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F20922E7833D001763CE /* name_mapper.cpp in Sources */,
+				A9C2F2DF22E7833D001763CE /* instruction_list.cpp in Sources */,
+				A9C2F44D22E7833D001763CE /* validate_debug.cpp in Sources */,
+				A9C2F35122E7833D001763CE /* reduce_load_size.cpp in Sources */,
+				A9C2F17922E7833D001763CE /* reduction_util.cpp in Sources */,
+				A9C2F41D22E7833D001763CE /* diagnostic.cpp in Sources */,
+				A9C2F2C122E7833D001763CE /* aggressive_dead_code_elim_pass.cpp in Sources */,
+				A9C2F1D522E7833D001763CE /* remove_block_reduction_opportunity.cpp in Sources */,
+				A9C2F28122E7833D001763CE /* dead_variable_elimination.cpp in Sources */,
+				A9C2F23B22E7833D001763CE /* types.cpp in Sources */,
+				A9C2F27B22E7833D001763CE /* mem_pass.cpp in Sources */,
+				A9C2F14322E7833D001763CE /* assembly_grammar.cpp in Sources */,
+				A9C2F47922E7833D001763CE /* validate_derivatives.cpp in Sources */,
+				A9C2F21D22E7833D001763CE /* loop_utils.cpp in Sources */,
+				A9C2F44922E7833D001763CE /* validate_instruction.cpp in Sources */,
+				A9C2F25D22E7833D001763CE /* loop_fission.cpp in Sources */,
+				A9C2F44322E7833D001763CE /* validate_scopes.cpp in Sources */,
+				A9C2F49122E7833D001763CE /* validate_composites.cpp in Sources */,
+				A9C2F45F22E7833D001763CE /* function.cpp in Sources */,
+				A9C2F1D122E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */,
+				A9C2F19522E7833D001763CE /* change_operand_reduction_opportunity.cpp in Sources */,
+				A9C2F48122E7833D001763CE /* instruction.cpp in Sources */,
+				A9C2F35D22E7833D001763CE /* replace_invalid_opc.cpp in Sources */,
+				A9C2F22522E7833D001763CE /* combine_access_chains.cpp in Sources */,
+				A9C2F18B22E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */,
+				A9C2F20322E7833D001763CE /* parsed_operand.cpp in Sources */,
+				A9C2F29D22E7833D001763CE /* eliminate_dead_functions_pass.cpp in Sources */,
+				A9C2F2FD22E7833D001763CE /* pass_manager.cpp in Sources */,
+				A9C2F26922E7833D001763CE /* const_folding_rules.cpp in Sources */,
+				A9C2F42922E7833D001763CE /* operand.cpp in Sources */,
+				A9C2F19D22E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F36522E7833D001763CE /* decompose_initialized_variables_pass.cpp in Sources */,
+				A9C2F34522E7833D001763CE /* workaround1209.cpp in Sources */,
+				A9C2F16322E7833D001763CE /* bit_vector.cpp in Sources */,
+				A9C2F20B22E7833D001763CE /* linker.cpp in Sources */,
+				A9C2F14722E7833D001763CE /* extensions.cpp in Sources */,
+				A9C2F46922E7833D001763CE /* validate_datarules.cpp in Sources */,
+				A9C2F43722E7833D001763CE /* validate_misc.cpp in Sources */,
+				A9C2F2FF22E7833D001763CE /* inline_exhaustive_pass.cpp in Sources */,
+				A9C2F26522E7833D001763CE /* eliminate_dead_constant_pass.cpp in Sources */,
+				A9C2F17B22E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F19322E7833D001763CE /* merge_blocks_reduction_opportunity.cpp in Sources */,
+				A9C2F2E322E7833D001763CE /* process_lines_pass.cpp in Sources */,
+				A9C2F24F22E7833D001763CE /* inst_bindless_check_pass.cpp in Sources */,
+				A9C2F1E922E7833D001763CE /* print.cpp in Sources */,
+				A9C2F1E722E7833D001763CE /* spirv_validator_options.cpp in Sources */,
+				A9C2F44522E7833D001763CE /* validate_atomics.cpp in Sources */,
+				A9C2F17322E7833D001763CE /* reduction_pass.cpp in Sources */,
+				A9C2F46522E7833D001763CE /* validate_conversion.cpp in Sources */,
+				A9C2F22722E7833D001763CE /* build_module.cpp in Sources */,
+				A9C2F39D22E7833D001763CE /* legalize_vector_shuffle_pass.cpp in Sources */,
+				A9C2F25122E7833D001763CE /* local_redundancy_elimination.cpp in Sources */,
+				A9C2F15522E7833D001763CE /* timer.cpp in Sources */,
+				A9C2F2F322E7833D001763CE /* eliminate_dead_members_pass.cpp in Sources */,
+				A9C2F45922E7833D001763CE /* validate_bitwise.cpp in Sources */,
+				A9C2F2D922E7833D001763CE /* local_ssa_elim_pass.cpp in Sources */,
+				A9C2F2E122E7833D001763CE /* composite.cpp in Sources */,
+				A9C2F42122E7833D001763CE /* libspirv.cpp in Sources */,
+				A9C2F1DB22E7833D001763CE /* spirv_optimizer_options.cpp in Sources */,
+				A9C2F25922E7833D001763CE /* feature_manager.cpp in Sources */,
+				A9C2F1D322E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */,
+				A9C2F28D22E7833D001763CE /* type_manager.cpp in Sources */,
+				A9C2F2B722E7833D001763CE /* ccp_pass.cpp in Sources */,
+				A9C2F46322E7833D001763CE /* validate_adjacency.cpp in Sources */,
+				A9C2F1A922E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F25322E7833D001763CE /* instrument_pass.cpp in Sources */,
+				A9C2F43B22E7833D001763CE /* validate_capability.cpp in Sources */,
+				A9C2F47F22E7833D001763CE /* validate_literals.cpp in Sources */,
+				A9C2F34122E7833D001763CE /* redundancy_elimination.cpp in Sources */,
+				A9C2F45722E7833D001763CE /* validate_constants.cpp in Sources */,
+				A9C2F34D22E7833D001763CE /* instruction.cpp in Sources */,
+				A9C2F28922E7833D001763CE /* loop_unswitch_pass.cpp in Sources */,
+				A9C2F1F522E7833D001763CE /* binary.cpp in Sources */,
+				A9C2F29B22E7833D001763CE /* licm_pass.cpp in Sources */,
+				A9C2F17522E7833D001763CE /* operand_to_const_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F27F22E7833D001763CE /* remove_duplicates_pass.cpp in Sources */,
+				A9C2F48D22E7833D001763CE /* validate_function.cpp in Sources */,
+				A9C2F24322E7833D001763CE /* strip_atomic_counter_memory_pass.cpp in Sources */,
+				A9C2F49522E7833D001763CE /* validate_primitives.cpp in Sources */,
+				A9C2F43322E7833D001763CE /* text_handler.cpp in Sources */,
+				A9C2F25B22E7833D001763CE /* pass.cpp in Sources */,
+				A9C2F32522E7833D001763CE /* local_single_store_elim_pass.cpp in Sources */,
+				A9C2F45B22E7833D001763CE /* validate_extensions.cpp in Sources */,
+				A9C2F47722E7833D001763CE /* validate_logicals.cpp in Sources */,
+				A9C2F35522E7833D001763CE /* fix_storage_class.cpp in Sources */,
+				A9C2F32922E7833D001763CE /* private_to_local_pass.cpp in Sources */,
+				A9C2F28B22E7833D001763CE /* unify_const_pass.cpp in Sources */,
+				A9C2F38122E7833D001763CE /* basic_block.cpp in Sources */,
+				A9C2F1CB22E7833D001763CE /* remove_block_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F2C322E7833D001763CE /* eliminate_dead_functions_util.cpp in Sources */,
+				A9C2F1F922E7833D001763CE /* enum_string_mapping.cpp in Sources */,
+				A9C2F1EF22E7833D001763CE /* spirv_endian.cpp in Sources */,
+				A9C2F2D122E7833D001763CE /* ir_context.cpp in Sources */,
+				A9C2F2B122E7833D001763CE /* def_use_manager.cpp in Sources */,
+				A9C2F2CD22E7833D001763CE /* folding_rules.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -3188,200 +3182,200 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				A94A6A3B22B17BBC00C661C6 /* module.cpp in Sources */,
-				A94A6B5722B17BBC00C661C6 /* legalize_vector_shuffle_pass.cpp in Sources */,
-				A94A6AAB22B17BBC00C661C6 /* eliminate_dead_members_pass.cpp in Sources */,
-				A94A6B1522B17BBC00C661C6 /* inline_opaque_pass.cpp in Sources */,
-				A94A697922B17BBB00C661C6 /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */,
-				A94A693B22B17BBB00C661C6 /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */,
-				A94A6AA522B17BBC00C661C6 /* if_conversion.cpp in Sources */,
-				A94A6A5F22B17BBC00C661C6 /* loop_unroller.cpp in Sources */,
-				A94A6A1D22B17BBC00C661C6 /* cfg_cleanup_pass.cpp in Sources */,
-				A94A6C0B22B17BBD00C661C6 /* validate_logicals.cpp in Sources */,
-				A94A69D122B17BBC00C661C6 /* register_pressure.cpp in Sources */,
-				A94A695922B17BBB00C661C6 /* remove_instruction_reduction_opportunity.cpp in Sources */,
-				A94A6A2722B17BBC00C661C6 /* loop_dependence.cpp in Sources */,
-				A94A6B0F22B17BBC00C661C6 /* fix_storage_class.cpp in Sources */,
-				A94A6A8F22B17BBC00C661C6 /* loop_descriptor.cpp in Sources */,
-				A94A6C1F22B17BBD00C661C6 /* basic_block.cpp in Sources */,
-				A94A6A1722B17BBC00C661C6 /* merge_return_pass.cpp in Sources */,
-				A94A6AB322B17BBC00C661C6 /* copy_prop_arrays.cpp in Sources */,
-				A94A6C1522B17BBD00C661C6 /* instruction.cpp in Sources */,
-				A94A6A4522B17BBC00C661C6 /* generate_webgpu_initializers_pass.cpp in Sources */,
-				A94A6AED22B17BBC00C661C6 /* set_spec_constant_default_value_pass.cpp in Sources */,
-				A94A696322B17BBB00C661C6 /* reducer.cpp in Sources */,
-				A94A6BFD22B17BBD00C661C6 /* validate_datarules.cpp in Sources */,
-				A94A6BD122B17BBC00C661C6 /* validate_capability.cpp in Sources */,
-				A94A6A4922B17BBC00C661C6 /* inline_pass.cpp in Sources */,
-				A94A6AAD22B17BBC00C661C6 /* strength_reduction_pass.cpp in Sources */,
-				A94A6B1122B17BBC00C661C6 /* value_number_table.cpp in Sources */,
-				A94A6C1122B17BBD00C661C6 /* validate_image.cpp in Sources */,
-				A94A6B0722B17BBC00C661C6 /* instruction.cpp in Sources */,
-				A94A6BC522B17BBC00C661C6 /* disassemble.cpp in Sources */,
-				A94A6A3D22B17BBC00C661C6 /* fold_spec_constant_op_and_composite_pass.cpp in Sources */,
-				A94A6A5722B17BBC00C661C6 /* split_invalid_unreachable_pass.cpp in Sources */,
-				A94A68F722B17BBB00C661C6 /* text.cpp in Sources */,
-				A94A69C922B17BBC00C661C6 /* ext_inst.cpp in Sources */,
-				A94A6C2922B17BBD00C661C6 /* validate_primitives.cpp in Sources */,
-				A94A68FF22B17BBB00C661C6 /* pch_source.cpp in Sources */,
-				A94A69F722B17BBC00C661C6 /* cfg.cpp in Sources */,
-				A94A6A8522B17BBC00C661C6 /* folding_rules.cpp in Sources */,
-				A94A6AE322B17BBC00C661C6 /* private_to_local_pass.cpp in Sources */,
-				A94A6A2522B17BBC00C661C6 /* ssa_rewrite_pass.cpp in Sources */,
-				A94A6B1722B17BBC00C661C6 /* replace_invalid_opc.cpp in Sources */,
-				A94A693D22B17BBB00C661C6 /* remove_function_reduction_opportunity.cpp in Sources */,
-				A94A694322B17BBB00C661C6 /* remove_selection_reduction_opportunity_finder.cpp in Sources */,
-				A94A6B0B22B17BBC00C661C6 /* reduce_load_size.cpp in Sources */,
-				A94A6A6122B17BBC00C661C6 /* constants.cpp in Sources */,
-				A94A694522B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */,
-				A94A6A8122B17BBC00C661C6 /* flatten_decoration_pass.cpp in Sources */,
-				A94A6A9922B17BBC00C661C6 /* composite.cpp in Sources */,
-				A94A696D22B17BBB00C661C6 /* merge_blocks_reduction_opportunity_finder.cpp in Sources */,
-				A94A6AB722B17BBC00C661C6 /* inline_exhaustive_pass.cpp in Sources */,
-				A94A6C2522B17BBD00C661C6 /* validate_composites.cpp in Sources */,
-				A94A691F22B17BBB00C661C6 /* table.cpp in Sources */,
-				A94A6BE522B17BBC00C661C6 /* validate_builtins.cpp in Sources */,
-				A94A6A6922B17BBC00C661C6 /* def_use_manager.cpp in Sources */,
-				A94A6AB522B17BBC00C661C6 /* pass_manager.cpp in Sources */,
-				A94A69C522B17BBC00C661C6 /* opcode.cpp in Sources */,
-				A94A6A4D22B17BBC00C661C6 /* ir_loader.cpp in Sources */,
-				A94A69FF22B17BBC00C661C6 /* freeze_spec_constant_value_pass.cpp in Sources */,
-				A94A69CD22B17BBC00C661C6 /* optimizer.cpp in Sources */,
-				A94A6BCF22B17BBC00C661C6 /* validate_cfg.cpp in Sources */,
-				A94A699922B17BBB00C661C6 /* spirv_fuzzer_options.cpp in Sources */,
-				A94A69EF22B17BBC00C661C6 /* code_sink.cpp in Sources */,
-				A94A696122B17BBB00C661C6 /* pch_source_reduce.cpp in Sources */,
-				A94A6BC922B17BBC00C661C6 /* text_handler.cpp in Sources */,
-				A94A69FB22B17BBC00C661C6 /* decoration_manager.cpp in Sources */,
-				A94A6A9B22B17BBC00C661C6 /* process_lines_pass.cpp in Sources */,
-				A94A697322B17BBB00C661C6 /* change_operand_to_undef_reduction_opportunity.cpp in Sources */,
-				A94A693522B17BBB00C661C6 /* remove_function_reduction_opportunity_finder.cpp in Sources */,
-				A94A68EF22B17BBB00C661C6 /* spirv_target_env.cpp in Sources */,
-				A94A6BE122B17BBC00C661C6 /* validate_decorations.cpp in Sources */,
-				A94A6C1B22B17BBD00C661C6 /* validate_execution_limitations.cpp in Sources */,
-				A94A6BF922B17BBD00C661C6 /* validate_adjacency.cpp in Sources */,
-				A94A692322B17BBB00C661C6 /* remove_selection_reduction_opportunity.cpp in Sources */,
-				A94A696F22B17BBB00C661C6 /* reduction_opportunity.cpp in Sources */,
-				A94A6A2322B17BBC00C661C6 /* strip_debug_info_pass.cpp in Sources */,
-				A94A6AFB22B17BBC00C661C6 /* redundancy_elimination.cpp in Sources */,
-				A94A6A5B22B17BBC00C661C6 /* vector_dce.cpp in Sources */,
-				A94A69B722B17BBB00C661C6 /* spirv_reducer_options.cpp in Sources */,
-				A94A6A6B22B17BBC00C661C6 /* strip_reflect_info_pass.cpp in Sources */,
-				A94A6BD922B17BBC00C661C6 /* validate_scopes.cpp in Sources */,
-				A94A6BB322B17BBC00C661C6 /* diagnostic.cpp in Sources */,
-				A94A6ACF22B17BBC00C661C6 /* block_merge_pass.cpp in Sources */,
-				A94A69C322B17BBC00C661C6 /* software_version.cpp in Sources */,
-				A94A6C0122B17BBD00C661C6 /* validate_id.cpp in Sources */,
-				A94A6BDB22B17BBC00C661C6 /* validate_atomics.cpp in Sources */,
-				A94A690F22B17BBB00C661C6 /* string_utils.cpp in Sources */,
-				A94A6A1522B17BBC00C661C6 /* dominator_tree.cpp in Sources */,
-				A94A69FD22B17BBC00C661C6 /* local_single_block_elim_pass.cpp in Sources */,
-				A94A6A6F22B17BBC00C661C6 /* ccp_pass.cpp in Sources */,
-				A94A6AAF22B17BBC00C661C6 /* block_merge_util.cpp in Sources */,
-				A94A6B3B22B17BBC00C661C6 /* basic_block.cpp in Sources */,
-				A94A6BE322B17BBC00C661C6 /* validate_debug.cpp in Sources */,
-				A94A691722B17BBB00C661C6 /* parse_number.cpp in Sources */,
-				A94A6BFB22B17BBD00C661C6 /* validate_conversion.cpp in Sources */,
-				A94A6C2722B17BBD00C661C6 /* validation_state.cpp in Sources */,
-				A94A6B5122B17BBC00C661C6 /* scalar_analysis_simplification.cpp in Sources */,
-				A94A6B1F22B17BBC00C661C6 /* decompose_initialized_variables_pass.cpp in Sources */,
-				A94A6BEF22B17BBD00C661C6 /* validate_bitwise.cpp in Sources */,
-				A94A696522B17BBB00C661C6 /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */,
-				A94A6BF322B17BBD00C661C6 /* construct.cpp in Sources */,
-				A94A69BF22B17BBB00C661C6 /* name_mapper.cpp in Sources */,
-				A94A692F22B17BBB00C661C6 /* reduction_util.cpp in Sources */,
-				A94A698B22B17BBB00C661C6 /* remove_block_reduction_opportunity.cpp in Sources */,
-				A94A6B3122B17BBC00C661C6 /* struct_cfg_analysis.cpp in Sources */,
-				A94A6A3722B17BBC00C661C6 /* dead_variable_elimination.cpp in Sources */,
-				A94A6BB722B17BBC00C661C6 /* libspirv.cpp in Sources */,
-				A94A6A6722B17BBC00C661C6 /* common_uniform_elim_pass.cpp in Sources */,
-				A94A6AFF22B17BBC00C661C6 /* workaround1209.cpp in Sources */,
-				A94A6C0722B17BBD00C661C6 /* validate_mode_setting.cpp in Sources */,
-				A94A6B3922B17BBC00C661C6 /* local_access_chain_convert_pass.cpp in Sources */,
-				A94A69F122B17BBC00C661C6 /* types.cpp in Sources */,
-				A94A6C1322B17BBD00C661C6 /* validate_literals.cpp in Sources */,
-				A94A6A3122B17BBC00C661C6 /* mem_pass.cpp in Sources */,
-				A94A68F922B17BBB00C661C6 /* assembly_grammar.cpp in Sources */,
-				A94A6BF122B17BBD00C661C6 /* validate_extensions.cpp in Sources */,
-				A94A6BED22B17BBD00C661C6 /* validate_constants.cpp in Sources */,
-				A94A69D322B17BBC00C661C6 /* loop_utils.cpp in Sources */,
-				A94A6A1322B17BBC00C661C6 /* loop_fission.cpp in Sources */,
-				A94A698722B17BBB00C661C6 /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */,
-				A94A694B22B17BBB00C661C6 /* change_operand_reduction_opportunity.cpp in Sources */,
-				A94A69DB22B17BBC00C661C6 /* combine_access_chains.cpp in Sources */,
-				A94A6A9722B17BBC00C661C6 /* instruction_list.cpp in Sources */,
-				A94A6A7522B17BBC00C661C6 /* pch_source_opt.cpp in Sources */,
-				A94A694122B17BBB00C661C6 /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */,
-				A94A69B922B17BBB00C661C6 /* parsed_operand.cpp in Sources */,
-				A94A6A5322B17BBC00C661C6 /* eliminate_dead_functions_pass.cpp in Sources */,
-				A94A6A1F22B17BBC00C661C6 /* const_folding_rules.cpp in Sources */,
-				A94A6BD722B17BBC00C661C6 /* validate_non_uniform.cpp in Sources */,
-				A94A6AEB22B17BBC00C661C6 /* loop_dependence_helpers.cpp in Sources */,
-				A94A6C0F22B17BBD00C661C6 /* validate_memory.cpp in Sources */,
-				A94A6AF522B17BBC00C661C6 /* scalar_replacement_pass.cpp in Sources */,
-				A94A695322B17BBB00C661C6 /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */,
-				A94A691922B17BBB00C661C6 /* bit_vector.cpp in Sources */,
-				A94A6ACB22B17BBC00C661C6 /* scalar_analysis.cpp in Sources */,
-				A94A6C1D22B17BBD00C661C6 /* validate_layout.cpp in Sources */,
-				A94A6AE722B17BBC00C661C6 /* propagator.cpp in Sources */,
-				A94A6A9522B17BBC00C661C6 /* function.cpp in Sources */,
-				A94A69C122B17BBB00C661C6 /* linker.cpp in Sources */,
-				A94A6B1D22B17BBC00C661C6 /* dominator_analysis.cpp in Sources */,
-				A94A6A7B22B17BBC00C661C6 /* eliminate_dead_functions_util.cpp in Sources */,
-				A94A68FD22B17BBB00C661C6 /* extensions.cpp in Sources */,
-				A94A6BE922B17BBC00C661C6 /* validate.cpp in Sources */,
-				A94A6A1B22B17BBC00C661C6 /* eliminate_dead_constant_pass.cpp in Sources */,
-				A94A693122B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */,
-				A94A694922B17BBB00C661C6 /* merge_blocks_reduction_opportunity.cpp in Sources */,
-				A94A6B4B22B17BBC00C661C6 /* upgrade_memory_model.cpp in Sources */,
-				A94A6BCD22B17BBC00C661C6 /* validate_misc.cpp in Sources */,
-				A94A6A0522B17BBC00C661C6 /* inst_bindless_check_pass.cpp in Sources */,
-				A94A699F22B17BBB00C661C6 /* print.cpp in Sources */,
-				A94A699D22B17BBB00C661C6 /* spirv_validator_options.cpp in Sources */,
-				A94A692922B17BBB00C661C6 /* reduction_pass.cpp in Sources */,
-				A94A69DD22B17BBC00C661C6 /* build_module.cpp in Sources */,
-				A94A6AF122B17BBC00C661C6 /* fold.cpp in Sources */,
-				A94A6A0722B17BBC00C661C6 /* local_redundancy_elimination.cpp in Sources */,
-				A94A690B22B17BBB00C661C6 /* timer.cpp in Sources */,
-				A94A6A7922B17BBC00C661C6 /* aggressive_dead_code_elim_pass.cpp in Sources */,
-				A94A6BD522B17BBC00C661C6 /* validate_barriers.cpp in Sources */,
-				A94A699122B17BBB00C661C6 /* spirv_optimizer_options.cpp in Sources */,
-				A94A6A0F22B17BBC00C661C6 /* feature_manager.cpp in Sources */,
-				A94A6C1722B17BBD00C661C6 /* validate_type.cpp in Sources */,
-				A94A698922B17BBB00C661C6 /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */,
-				A94A6B5B22B17BBC00C661C6 /* compact_ids_pass.cpp in Sources */,
-				A94A6A4322B17BBC00C661C6 /* type_manager.cpp in Sources */,
-				A94A695F22B17BBB00C661C6 /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */,
-				A94A6BDF22B17BBC00C661C6 /* validate_instruction.cpp in Sources */,
-				A94A6A0922B17BBC00C661C6 /* instrument_pass.cpp in Sources */,
-				A94A6B5D22B17BBC00C661C6 /* loop_peeling.cpp in Sources */,
-				A94A6ABD22B17BBC00C661C6 /* loop_fusion_pass.cpp in Sources */,
-				A94A6A3F22B17BBC00C661C6 /* loop_unswitch_pass.cpp in Sources */,
-				A94A6C0522B17BBD00C661C6 /* validate_arithmetics.cpp in Sources */,
-				A94A69AB22B17BBB00C661C6 /* binary.cpp in Sources */,
-				A94A6AC722B17BBC00C661C6 /* dead_insert_elim_pass.cpp in Sources */,
-				A94A6BF522B17BBD00C661C6 /* function.cpp in Sources */,
-				A94A6ADF22B17BBC00C661C6 /* local_single_store_elim_pass.cpp in Sources */,
-				A94A6BCB22B17BBC00C661C6 /* validate_annotation.cpp in Sources */,
-				A94A6A5122B17BBC00C661C6 /* licm_pass.cpp in Sources */,
-				A94A692B22B17BBB00C661C6 /* operand_to_const_reduction_opportunity_finder.cpp in Sources */,
-				A94A6BE722B17BBC00C661C6 /* validate_interfaces.cpp in Sources */,
-				A94A6A3522B17BBC00C661C6 /* remove_duplicates_pass.cpp in Sources */,
-				A94A69F922B17BBC00C661C6 /* strip_atomic_counter_memory_pass.cpp in Sources */,
-				A94A6C0D22B17BBD00C661C6 /* validate_derivatives.cpp in Sources */,
-				A94A6A8922B17BBC00C661C6 /* ir_context.cpp in Sources */,
-				A94A6A7F22B17BBC00C661C6 /* dead_branch_elim_pass.cpp in Sources */,
-				A94A6A9122B17BBC00C661C6 /* local_ssa_elim_pass.cpp in Sources */,
-				A94A6A1122B17BBC00C661C6 /* pass.cpp in Sources */,
-				A94A6A4122B17BBC00C661C6 /* unify_const_pass.cpp in Sources */,
-				A94A6BBF22B17BBC00C661C6 /* operand.cpp in Sources */,
-				A94A6C2122B17BBD00C661C6 /* validate_function.cpp in Sources */,
-				A94A698122B17BBB00C661C6 /* remove_block_reduction_opportunity_finder.cpp in Sources */,
-				A94A6A7D22B17BBC00C661C6 /* simplification_pass.cpp in Sources */,
-				A94A6B4922B17BBC00C661C6 /* loop_fusion.cpp in Sources */,
-				A94A69AF22B17BBB00C661C6 /* enum_string_mapping.cpp in Sources */,
-				A94A6C0922B17BBD00C661C6 /* validate_memory_semantics.cpp in Sources */,
-				A94A69A522B17BBB00C661C6 /* spirv_endian.cpp in Sources */,
+				A9C2F31022E7833D001763CE /* dead_insert_elim_pass.cpp in Sources */,
+				A9C2F2BE22E7833D001763CE /* pch_source_opt.cpp in Sources */,
+				A9C2F28622E7833D001763CE /* module.cpp in Sources */,
+				A9C2F30622E7833D001763CE /* loop_fusion_pass.cpp in Sources */,
+				A9C2F33222E7833D001763CE /* loop_dependence_helpers.cpp in Sources */,
+				A9C2F45022E7833D001763CE /* validate_builtins.cpp in Sources */,
+				A9C2F1C422E7833D001763CE /* operand_to_dominating_id_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F18622E7833D001763CE /* simple_conditional_branch_to_branch_reduction_opportunity.cpp in Sources */,
+				A9C2F44222E7833D001763CE /* validate_non_uniform.cpp in Sources */,
+				A9C2F2B422E7833D001763CE /* strip_reflect_info_pass.cpp in Sources */,
+				A9C2F2AA22E7833D001763CE /* loop_unroller.cpp in Sources */,
+				A9C2F47222E7833D001763CE /* validate_arithmetics.cpp in Sources */,
+				A9C2F26822E7833D001763CE /* cfg_cleanup_pass.cpp in Sources */,
+				A9C2F44C22E7833D001763CE /* validate_decorations.cpp in Sources */,
+				A9C2F3A422E7833D001763CE /* loop_peeling.cpp in Sources */,
+				A9C2F21C22E7833D001763CE /* register_pressure.cpp in Sources */,
+				A9C2F1A422E7833D001763CE /* remove_instruction_reduction_opportunity.cpp in Sources */,
+				A9C2F27222E7833D001763CE /* loop_dependence.cpp in Sources */,
+				A9C2F36422E7833D001763CE /* dominator_analysis.cpp in Sources */,
+				A9C2F26222E7833D001763CE /* merge_return_pass.cpp in Sources */,
+				A9C2F29022E7833D001763CE /* generate_webgpu_initializers_pass.cpp in Sources */,
+				A9C2F47622E7833D001763CE /* validate_memory_semantics.cpp in Sources */,
+				A9C2F1AE22E7833D001763CE /* reducer.cpp in Sources */,
+				A9C2F46822E7833D001763CE /* validate_small_type_uses.cpp in Sources */,
+				A9C2F2C822E7833D001763CE /* dead_branch_elim_pass.cpp in Sources */,
+				A9C2F2C622E7833D001763CE /* simplification_pass.cpp in Sources */,
+				A9C2F39022E7833D001763CE /* loop_fusion.cpp in Sources */,
+				A9C2F29422E7833D001763CE /* inline_pass.cpp in Sources */,
+				A9C2F28822E7833D001763CE /* fold_spec_constant_op_and_composite_pass.cpp in Sources */,
+				A9C2F2F622E7833D001763CE /* strength_reduction_pass.cpp in Sources */,
+				A9C2F2A222E7833D001763CE /* split_invalid_unreachable_pass.cpp in Sources */,
+				A9C2F35C22E7833D001763CE /* inline_opaque_pass.cpp in Sources */,
+				A9C2F14222E7833D001763CE /* text.cpp in Sources */,
+				A9C2F48422E7833D001763CE /* validate_type.cpp in Sources */,
+				A9C2F43022E7833D001763CE /* disassemble.cpp in Sources */,
+				A9C2F2CA22E7833D001763CE /* flatten_decoration_pass.cpp in Sources */,
+				A9C2F21422E7833D001763CE /* ext_inst.cpp in Sources */,
+				A9C2F14A22E7833D001763CE /* pch_source.cpp in Sources */,
+				A9C2F2EE22E7833D001763CE /* if_conversion.cpp in Sources */,
+				A9C2F24222E7833D001763CE /* cfg.cpp in Sources */,
+				A9C2F31822E7833D001763CE /* block_merge_pass.cpp in Sources */,
+				A9C2F45E22E7833D001763CE /* construct.cpp in Sources */,
+				A9C2F2DE22E7833D001763CE /* function.cpp in Sources */,
+				A9C2F33822E7833D001763CE /* fold.cpp in Sources */,
+				A9C2F27022E7833D001763CE /* ssa_rewrite_pass.cpp in Sources */,
+				A9C2F2D822E7833D001763CE /* loop_descriptor.cpp in Sources */,
+				A9C2F18822E7833D001763CE /* remove_function_reduction_opportunity.cpp in Sources */,
+				A9C2F18E22E7833D001763CE /* remove_selection_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F49422E7833D001763CE /* validation_state.cpp in Sources */,
+				A9C2F2AC22E7833D001763CE /* constants.cpp in Sources */,
+				A9C2F35822E7833D001763CE /* value_number_table.cpp in Sources */,
+				A9C2F19022E7833D001763CE /* conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp in Sources */,
+				A9C2F39222E7833D001763CE /* upgrade_memory_model.cpp in Sources */,
+				A9C2F1B822E7833D001763CE /* merge_blocks_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F16A22E7833D001763CE /* table.cpp in Sources */,
+				A9C2F21022E7833D001763CE /* opcode.cpp in Sources */,
+				A9C2F29822E7833D001763CE /* ir_loader.cpp in Sources */,
+				A9C2F43A22E7833D001763CE /* validate_cfg.cpp in Sources */,
+				A9C2F3A222E7833D001763CE /* compact_ids_pass.cpp in Sources */,
+				A9C2F2F822E7833D001763CE /* block_merge_util.cpp in Sources */,
+				A9C2F24A22E7833D001763CE /* freeze_spec_constant_value_pass.cpp in Sources */,
+				A9C2F33422E7833D001763CE /* set_spec_constant_default_value_pass.cpp in Sources */,
+				A9C2F21822E7833D001763CE /* optimizer.cpp in Sources */,
+				A9C2F38022E7833D001763CE /* local_access_chain_convert_pass.cpp in Sources */,
+				A9C2F32E22E7833D001763CE /* propagator.cpp in Sources */,
+				A9C2F48A22E7833D001763CE /* validate_layout.cpp in Sources */,
+				A9C2F47C22E7833D001763CE /* validate_memory.cpp in Sources */,
+				A9C2F48C22E7833D001763CE /* basic_block.cpp in Sources */,
+				A9C2F1E422E7833D001763CE /* spirv_fuzzer_options.cpp in Sources */,
+				A9C2F47E22E7833D001763CE /* validate_image.cpp in Sources */,
+				A9C2F45222E7833D001763CE /* validate_interfaces.cpp in Sources */,
+				A9C2F48822E7833D001763CE /* validate_execution_limitations.cpp in Sources */,
+				A9C2F23A22E7833D001763CE /* code_sink.cpp in Sources */,
+				A9C2F1AC22E7833D001763CE /* pch_source_reduce.cpp in Sources */,
+				A9C2F24622E7833D001763CE /* decoration_manager.cpp in Sources */,
+				A9C2F31422E7833D001763CE /* scalar_analysis.cpp in Sources */,
+				A9C2F1BE22E7833D001763CE /* change_operand_to_undef_reduction_opportunity.cpp in Sources */,
+				A9C2F33C22E7833D001763CE /* scalar_replacement_pass.cpp in Sources */,
+				A9C2F18022E7833D001763CE /* remove_function_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F13A22E7833D001763CE /* spirv_target_env.cpp in Sources */,
+				A9C2F16E22E7833D001763CE /* remove_selection_reduction_opportunity.cpp in Sources */,
+				A9C2F1BA22E7833D001763CE /* reduction_opportunity.cpp in Sources */,
+				A9C2F26E22E7833D001763CE /* strip_debug_info_pass.cpp in Sources */,
+				A9C2F2FC22E7833D001763CE /* copy_prop_arrays.cpp in Sources */,
+				A9C2F47422E7833D001763CE /* validate_mode_setting.cpp in Sources */,
+				A9C2F46E22E7833D001763CE /* validate_id.cpp in Sources */,
+				A9C2F39822E7833D001763CE /* scalar_analysis_simplification.cpp in Sources */,
+				A9C2F45422E7833D001763CE /* validate.cpp in Sources */,
+				A9C2F43622E7833D001763CE /* validate_annotation.cpp in Sources */,
+				A9C2F2A622E7833D001763CE /* vector_dce.cpp in Sources */,
+				A9C2F20222E7833D001763CE /* spirv_reducer_options.cpp in Sources */,
+				A9C2F20E22E7833D001763CE /* software_version.cpp in Sources */,
+				A9C2F15A22E7833D001763CE /* string_utils.cpp in Sources */,
+				A9C2F26022E7833D001763CE /* dominator_tree.cpp in Sources */,
+				A9C2F44022E7833D001763CE /* validate_barriers.cpp in Sources */,
+				A9C2F37822E7833D001763CE /* struct_cfg_analysis.cpp in Sources */,
+				A9C2F24822E7833D001763CE /* local_single_block_elim_pass.cpp in Sources */,
+				A9C2F16222E7833D001763CE /* parse_number.cpp in Sources */,
+				A9C2F1B022E7833D001763CE /* operand_to_undef_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F20A22E7833D001763CE /* name_mapper.cpp in Sources */,
+				A9C2F2E022E7833D001763CE /* instruction_list.cpp in Sources */,
+				A9C2F44E22E7833D001763CE /* validate_debug.cpp in Sources */,
+				A9C2F35222E7833D001763CE /* reduce_load_size.cpp in Sources */,
+				A9C2F17A22E7833D001763CE /* reduction_util.cpp in Sources */,
+				A9C2F41E22E7833D001763CE /* diagnostic.cpp in Sources */,
+				A9C2F2C222E7833D001763CE /* aggressive_dead_code_elim_pass.cpp in Sources */,
+				A9C2F1D622E7833D001763CE /* remove_block_reduction_opportunity.cpp in Sources */,
+				A9C2F28222E7833D001763CE /* dead_variable_elimination.cpp in Sources */,
+				A9C2F23C22E7833D001763CE /* types.cpp in Sources */,
+				A9C2F27C22E7833D001763CE /* mem_pass.cpp in Sources */,
+				A9C2F14422E7833D001763CE /* assembly_grammar.cpp in Sources */,
+				A9C2F47A22E7833D001763CE /* validate_derivatives.cpp in Sources */,
+				A9C2F21E22E7833D001763CE /* loop_utils.cpp in Sources */,
+				A9C2F44A22E7833D001763CE /* validate_instruction.cpp in Sources */,
+				A9C2F25E22E7833D001763CE /* loop_fission.cpp in Sources */,
+				A9C2F44422E7833D001763CE /* validate_scopes.cpp in Sources */,
+				A9C2F49222E7833D001763CE /* validate_composites.cpp in Sources */,
+				A9C2F46022E7833D001763CE /* function.cpp in Sources */,
+				A9C2F1D222E7833D001763CE /* conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp in Sources */,
+				A9C2F19622E7833D001763CE /* change_operand_reduction_opportunity.cpp in Sources */,
+				A9C2F48222E7833D001763CE /* instruction.cpp in Sources */,
+				A9C2F35E22E7833D001763CE /* replace_invalid_opc.cpp in Sources */,
+				A9C2F22622E7833D001763CE /* combine_access_chains.cpp in Sources */,
+				A9C2F18C22E7833D001763CE /* simple_conditional_branch_to_branch_opportunity_finder.cpp in Sources */,
+				A9C2F20422E7833D001763CE /* parsed_operand.cpp in Sources */,
+				A9C2F29E22E7833D001763CE /* eliminate_dead_functions_pass.cpp in Sources */,
+				A9C2F2FE22E7833D001763CE /* pass_manager.cpp in Sources */,
+				A9C2F26A22E7833D001763CE /* const_folding_rules.cpp in Sources */,
+				A9C2F42A22E7833D001763CE /* operand.cpp in Sources */,
+				A9C2F19E22E7833D001763CE /* remove_unreferenced_instruction_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F36622E7833D001763CE /* decompose_initialized_variables_pass.cpp in Sources */,
+				A9C2F34622E7833D001763CE /* workaround1209.cpp in Sources */,
+				A9C2F16422E7833D001763CE /* bit_vector.cpp in Sources */,
+				A9C2F20C22E7833D001763CE /* linker.cpp in Sources */,
+				A9C2F14822E7833D001763CE /* extensions.cpp in Sources */,
+				A9C2F46A22E7833D001763CE /* validate_datarules.cpp in Sources */,
+				A9C2F43822E7833D001763CE /* validate_misc.cpp in Sources */,
+				A9C2F30022E7833D001763CE /* inline_exhaustive_pass.cpp in Sources */,
+				A9C2F26622E7833D001763CE /* eliminate_dead_constant_pass.cpp in Sources */,
+				A9C2F17C22E7833D001763CE /* structured_loop_to_selection_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F19422E7833D001763CE /* merge_blocks_reduction_opportunity.cpp in Sources */,
+				A9C2F2E422E7833D001763CE /* process_lines_pass.cpp in Sources */,
+				A9C2F25022E7833D001763CE /* inst_bindless_check_pass.cpp in Sources */,
+				A9C2F1EA22E7833D001763CE /* print.cpp in Sources */,
+				A9C2F1E822E7833D001763CE /* spirv_validator_options.cpp in Sources */,
+				A9C2F44622E7833D001763CE /* validate_atomics.cpp in Sources */,
+				A9C2F17422E7833D001763CE /* reduction_pass.cpp in Sources */,
+				A9C2F46622E7833D001763CE /* validate_conversion.cpp in Sources */,
+				A9C2F22822E7833D001763CE /* build_module.cpp in Sources */,
+				A9C2F39E22E7833D001763CE /* legalize_vector_shuffle_pass.cpp in Sources */,
+				A9C2F25222E7833D001763CE /* local_redundancy_elimination.cpp in Sources */,
+				A9C2F15622E7833D001763CE /* timer.cpp in Sources */,
+				A9C2F2F422E7833D001763CE /* eliminate_dead_members_pass.cpp in Sources */,
+				A9C2F45A22E7833D001763CE /* validate_bitwise.cpp in Sources */,
+				A9C2F2DA22E7833D001763CE /* local_ssa_elim_pass.cpp in Sources */,
+				A9C2F2E222E7833D001763CE /* composite.cpp in Sources */,
+				A9C2F42222E7833D001763CE /* libspirv.cpp in Sources */,
+				A9C2F1DC22E7833D001763CE /* spirv_optimizer_options.cpp in Sources */,
+				A9C2F25A22E7833D001763CE /* feature_manager.cpp in Sources */,
+				A9C2F1D422E7833D001763CE /* structured_loop_to_selection_reduction_opportunity.cpp in Sources */,
+				A9C2F28E22E7833D001763CE /* type_manager.cpp in Sources */,
+				A9C2F2B822E7833D001763CE /* ccp_pass.cpp in Sources */,
+				A9C2F46422E7833D001763CE /* validate_adjacency.cpp in Sources */,
+				A9C2F1AA22E7833D001763CE /* remove_opname_instruction_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F25422E7833D001763CE /* instrument_pass.cpp in Sources */,
+				A9C2F43C22E7833D001763CE /* validate_capability.cpp in Sources */,
+				A9C2F48022E7833D001763CE /* validate_literals.cpp in Sources */,
+				A9C2F34222E7833D001763CE /* redundancy_elimination.cpp in Sources */,
+				A9C2F45822E7833D001763CE /* validate_constants.cpp in Sources */,
+				A9C2F34E22E7833D001763CE /* instruction.cpp in Sources */,
+				A9C2F28A22E7833D001763CE /* loop_unswitch_pass.cpp in Sources */,
+				A9C2F1F622E7833D001763CE /* binary.cpp in Sources */,
+				A9C2F29C22E7833D001763CE /* licm_pass.cpp in Sources */,
+				A9C2F17622E7833D001763CE /* operand_to_const_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F28022E7833D001763CE /* remove_duplicates_pass.cpp in Sources */,
+				A9C2F48E22E7833D001763CE /* validate_function.cpp in Sources */,
+				A9C2F24422E7833D001763CE /* strip_atomic_counter_memory_pass.cpp in Sources */,
+				A9C2F49622E7833D001763CE /* validate_primitives.cpp in Sources */,
+				A9C2F43422E7833D001763CE /* text_handler.cpp in Sources */,
+				A9C2F25C22E7833D001763CE /* pass.cpp in Sources */,
+				A9C2F32622E7833D001763CE /* local_single_store_elim_pass.cpp in Sources */,
+				A9C2F45C22E7833D001763CE /* validate_extensions.cpp in Sources */,
+				A9C2F47822E7833D001763CE /* validate_logicals.cpp in Sources */,
+				A9C2F35622E7833D001763CE /* fix_storage_class.cpp in Sources */,
+				A9C2F32A22E7833D001763CE /* private_to_local_pass.cpp in Sources */,
+				A9C2F28C22E7833D001763CE /* unify_const_pass.cpp in Sources */,
+				A9C2F38222E7833D001763CE /* basic_block.cpp in Sources */,
+				A9C2F1CC22E7833D001763CE /* remove_block_reduction_opportunity_finder.cpp in Sources */,
+				A9C2F2C422E7833D001763CE /* eliminate_dead_functions_util.cpp in Sources */,
+				A9C2F1FA22E7833D001763CE /* enum_string_mapping.cpp in Sources */,
+				A9C2F1F022E7833D001763CE /* spirv_endian.cpp in Sources */,
+				A9C2F2D222E7833D001763CE /* ir_context.cpp in Sources */,
+				A9C2F2B222E7833D001763CE /* def_use_manager.cpp in Sources */,
+				A9C2F2CE22E7833D001763CE /* folding_rules.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
diff --git a/ExternalRevisions/README.md b/ExternalRevisions/README.md
index bc19d88..c9c70c2 100644
--- a/ExternalRevisions/README.md
+++ b/ExternalRevisions/README.md
@@ -182,12 +182,11 @@
 1. In the *Project Navigator*, remove the *Group* named `source` from under the *Group* named
    `External/SPIRV-Tools`.
 
-2. Drag the `External/glslang/Extermal/spirv-tools/source` file folder to the `External/SPIRV-Tools` 
+2. Drag the `External/glslang/External/spirv-tools/source` file folder to the `External/SPIRV-Tools` 
    group in the *Project Navigator* panel. In the _**Choose options for adding these files**_ dialog 
    that opens, select the _**Create groups**_ option, add the files to *both* the `SPIRV-Tools-macOS` 
    and `SPIRV-Tools-iOS` targets, and click the ***Finish*** button.
 
-
 3. Remove the *Group* named `fuzz` from under the *Group* named `External/SPIRV-Tools/source`.
 
 4. In the *Project Navigator* panel, select the `ExternalDependencies` *Xcode* project, then 
diff --git a/ExternalRevisions/SPIRV-Cross_repo_revision b/ExternalRevisions/SPIRV-Cross_repo_revision
index 30297b1..337aa79 100644
--- a/ExternalRevisions/SPIRV-Cross_repo_revision
+++ b/ExternalRevisions/SPIRV-Cross_repo_revision
@@ -1 +1 @@
-4104e363005a079acc215f0920743a8affb31278
+07bb1a53e0cb86cfb9b116623493df974ad9ccee
diff --git a/ExternalRevisions/Vulkan-Headers_repo_revision b/ExternalRevisions/Vulkan-Headers_repo_revision
index 6dd277b..ddbb6f5 100644
--- a/ExternalRevisions/Vulkan-Headers_repo_revision
+++ b/ExternalRevisions/Vulkan-Headers_repo_revision
@@ -1 +1 @@
-097a1045098213919fd56442f52c716fc78eeb27
+e3f96a9ccab9397481eb81c4d9bce4ea7590dc33
diff --git a/ExternalRevisions/Vulkan-Tools_repo_revision b/ExternalRevisions/Vulkan-Tools_repo_revision
index 8d640f2..b6a15de 100644
--- a/ExternalRevisions/Vulkan-Tools_repo_revision
+++ b/ExternalRevisions/Vulkan-Tools_repo_revision
@@ -1 +1 @@
-d2de4ac0a28766c6fb10968fdcc4d75566eef8d7
+fb1fd1d63eb20cc6f922228f04d8b96cec452b46
diff --git a/ExternalRevisions/VulkanSamples_repo_revision b/ExternalRevisions/VulkanSamples_repo_revision
index bd4a2eb..1f3f4e1 100644
--- a/ExternalRevisions/VulkanSamples_repo_revision
+++ b/ExternalRevisions/VulkanSamples_repo_revision
@@ -1 +1 @@
-c6df494e270b5afad6bf5aaca725a037abe10501
+5a52ebd648b5baf94f2346819b5cf3fdc14b4127
diff --git a/ExternalRevisions/glslang_repo_revision b/ExternalRevisions/glslang_repo_revision
index d04e537..1c370c0 100644
--- a/ExternalRevisions/glslang_repo_revision
+++ b/ExternalRevisions/glslang_repo_revision
@@ -1 +1 @@
-21eebe74214488264bbf0d19323a03c13a9e53a7
+333d1c95792692205472c457d7bec915a94c8000
diff --git a/MoltenVK/MoltenVK/API/mvk_datatypes.h b/MoltenVK/MoltenVK/API/mvk_datatypes.h
index b2c59ba..a3e9792 100644
--- a/MoltenVK/MoltenVK/API/mvk_datatypes.h
+++ b/MoltenVK/MoltenVK/API/mvk_datatypes.h
@@ -464,8 +464,8 @@
 /** Returns the Metal CPU cache mode corresponding to the specified Vulkan memory flags. */
 MTLCPUCacheMode mvkMTLCPUCacheModeFromVkMemoryPropertyFlags(VkMemoryPropertyFlags vkFlags);
 
-/** Returns the Metal resource option flags corresponding to the specified Vulkan memory flags. */
-MTLResourceOptions mvkMTLResourceOptionsFromVkMemoryPropertyFlags(VkMemoryPropertyFlags vkFlags);
+/** Returns the Metal resource option flags corresponding to the Metal storage mode and cache mode. */
+MTLResourceOptions mvkMTLResourceOptions(MTLStorageMode mtlStorageMode, MTLCPUCacheMode mtlCPUCacheMode);
 
 
 #ifdef __cplusplus
diff --git a/MoltenVK/MoltenVK/API/mvk_vulkan.h b/MoltenVK/MoltenVK/API/mvk_vulkan.h
index 1277064..aba9865 100644
--- a/MoltenVK/MoltenVK/API/mvk_vulkan.h
+++ b/MoltenVK/MoltenVK/API/mvk_vulkan.h
@@ -18,11 +18,13 @@
 
 
 /** 
- * This is a convenience header file that loads vulkan.h with the appropriate MoltenVK
- * Vulkan platform extensions automatically enabled for iOS or macOS.
+ * This is a convenience header file that loads vulkan.h with the appropriate Vulkan platform extensions.
  *
- * When building for iOS, this header automatically enables the VK_MVK_ios_surface Vulkan extension.
- * When building for macOS, this header automatically enables the VK_MVK_macos_surface Vulkan extension.
+ * This header automatically enables the VK_EXT_metal_surface Vulkan extension.
+ *
+ * When building for iOS, this header also automatically enables the obsolete VK_MVK_ios_surface Vulkan extension.
+ * When building for macOS, this header also automatically enables the obsolete VK_MVK_macos_surface Vulkan extension.
+ * Both of these extensions are obsolete. Consider using the portable VK_EXT_metal_surface extension instead.
  */
 
 #ifndef __mvk_vulkan_h_
@@ -31,6 +33,8 @@
 
 #include <Availability.h>
 
+#define VK_USE_PLATFORM_METAL_EXT				1
+
 #ifdef __IPHONE_OS_VERSION_MAX_ALLOWED
 #	define VK_USE_PLATFORM_IOS_MVK				1
 #endif
diff --git a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
index 31452e2..f5d029d 100644
--- a/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
+++ b/MoltenVK/MoltenVK/API/vk_mvk_moltenvk.h
@@ -55,7 +55,7 @@
 #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            20
+#define VK_MVK_MOLTENVK_SPEC_VERSION            21
 #define VK_MVK_MOLTENVK_EXTENSION_NAME          "VK_MVK_moltenvk"
 
 /**
@@ -102,8 +102,14 @@
  *      2: Log errors and informational messages.
  *    If neither is set, errors and informational messages are logged.
  *
- * 2. Setting the MVK_CONFIG_TRACE_VULKAN_CALLS runtime environment variable or MoltenVK compile-time
- *    build setting to 1 will cause MoltenVK to log the name of each Vulkan call made by the application.
+ * 2. Setting the MVK_CONFIG_TRACE_VULKAN_CALLS runtime environment variable or MoltenVK compile-time build
+ *    setting will cause MoltenVK to log the name of each Vulkan call made by the application. The logging
+ *    format options can be controlled by setting the value of MVK_CONFIG_TRACE_VULKAN_CALLS as follows:
+ *        0: No Vulkan call logging.
+ *        1: Log the name of each Vulkan call when the call is entered.
+ *        2: Log the name of each Vulkan call when the call is entered and exited. This effectively
+ *           brackets any other logging activity within the scope of the Vulkan call.
+ *        3: Same as option 2, plus logs the time spent inside the Vulkan function.
  *
  * 3. Setting the MVK_CONFIG_FORCE_LOW_POWER_GPU runtime environment variable or MoltenVK compile-time
  *    build setting to 1 will force MoltenVK to use a low-power GPU, if one is availble on the device.
@@ -531,6 +537,9 @@
 	VkBool32 events;							/**< If true, Metal synchronization events are supported. */
 	VkBool32 memoryBarriers;					/**< If true, full memory barriers within Metal render passes are supported. */
 	VkBool32 multisampleLayeredRendering;       /**< If true, layered rendering to multiple multi-sampled cube or texture array layers is supported. */
+	VkBool32 stencilFeedback;					/**< If true, fragment shaders that write to [[stencil]] outputs are supported. */
+	VkBool32 textureBuffers;					/**< If true, textures of type MTLTextureTypeBuffer are supported. */
+	VkBool32 postDepthCoverage;					/**< If true, coverage masks in fragment shaders post-depth-test are supported. */
 } MVKPhysicalDeviceMetalFeatures;
 
 /**
@@ -584,7 +593,8 @@
 
 /** MoltenVK performance of queue activities. */
 typedef struct {
-	MVKPerformanceTracker mtlQueueAccess;          	/** Create an MTLCommmandQueue or access an existing cached instance. */
+	MVKPerformanceTracker mtlQueueAccess;               /** Create an MTLCommmandQueue or access an existing cached instance. */
+	MVKPerformanceTracker mtlCommandBufferCompletion;   /** Completion of a MTLCommandBuffer on the GPU, from commit to completion callback. */
 } MVKQueuePerformance;
 
 /**
@@ -659,6 +669,12 @@
  * that MoltenVK expects the size of MVKConfiguration to be by setting the value of pConfiguration
  * to NULL. In that case, this function will set *pConfigurationSize to the size that MoltenVK
  * expects MVKConfiguration to be.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkInstance object you provide here must have been retrieved directly from MoltenVK,
+ * and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan objects
+ * are often changed by layers, and passing them from one layer to another, or from
+ * a layer directly to MoltenVK, will result in undefined behaviour.
  */
 VKAPI_ATTR VkResult VKAPI_CALL vkGetMoltenVKConfigurationMVK(
 	VkInstance                                  instance,
@@ -693,6 +709,12 @@
  * that MoltenVK expects the size of MVKConfiguration to be by setting the value of pConfiguration
  * to NULL. In that case, this function will set *pConfigurationSize to the size that MoltenVK
  * expects MVKConfiguration to be.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkInstance object you provide here must have been retrieved directly from MoltenVK,
+ * and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan objects
+ * are often changed by layers, and passing them from one layer to another, or from
+ * a layer directly to MoltenVK, will result in undefined behaviour.
  */
 VKAPI_ATTR VkResult VKAPI_CALL vkSetMoltenVKConfigurationMVK(
 	VkInstance                                  instance,
@@ -721,6 +743,12 @@
  * expects the size of MVKPhysicalDeviceMetalFeatures to be by setting the value of pMetalFeatures to NULL.
  * In that case, this function will set *pMetalFeaturesSize to the size that MoltenVK expects
  * MVKPhysicalDeviceMetalFeatures to be.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkPhysicalDevice object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
  */
 VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceMetalFeaturesMVK(
 	VkPhysicalDevice                            physicalDevice,
@@ -748,6 +776,12 @@
  * that MoltenVK expects the size of MVKSwapchainPerformance to be by setting the value of
  * pSwapchainPerf to NULL. In that case, this function will set *pSwapchainPerfSize to the
  * size that MoltenVK expects MVKSwapchainPerformance to be.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkDevice and VkSwapchainKHR objects you provide here must have been retrieved directly
+ * from MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
  */
 VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainPerformanceMVK(
 	VkDevice                                    device,
@@ -776,6 +810,12 @@
  * that MoltenVK expects the size of MVKPerformanceStatistics to be by setting the value of
  * pPerf to NULL. In that case, this function will set *pPerfSize to the size that MoltenVK
  * expects MVKPerformanceStatistics to be.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkDevice object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
  */
 VKAPI_ATTR VkResult VKAPI_CALL vkGetPerformanceStatisticsMVK(
 	VkDevice                                    device,
@@ -801,6 +841,12 @@
  * This needs to be called if you are creating compute shader modules from MSL
  * source code or MSL compiled code. Workgroup size is determined automatically
  * if you're using SPIR-V.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkShaderModule object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
  */
 VKAPI_ATTR void VKAPI_CALL vkSetWorkgroupSizeMVK(
     VkShaderModule                              shaderModule,
@@ -810,7 +856,15 @@
 
 #ifdef __OBJC__
 
-/** Returns, in the pMTLDevice pointer, the MTLDevice used by the VkPhysicalDevice. */
+/**
+ * Returns, in the pMTLDevice pointer, the MTLDevice used by the VkPhysicalDevice.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkPhysicalDevice object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
+ */
 VKAPI_ATTR void VKAPI_CALL vkGetMTLDeviceMVK(
     VkPhysicalDevice                           physicalDevice,
     id<MTLDevice>*                             pMTLDevice);
@@ -824,12 +878,26 @@
  * If a MTLTexture has already been created for this image, it will be destroyed.
  *
  * Returns VK_SUCCESS.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkImage object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
  */
 VKAPI_ATTR VkResult VKAPI_CALL vkSetMTLTextureMVK(
     VkImage                                     image,
     id<MTLTexture>                              mtlTexture);
 
-/** Returns, in the pMTLTexture pointer, the MTLTexture currently underlaying the VkImage. */
+/**
+ * Returns, in the pMTLTexture pointer, the MTLTexture currently underlaying the VkImage.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkImage object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
+ */
 VKAPI_ATTR void VKAPI_CALL vkGetMTLTextureMVK(
     VkImage                                     image,
     id<MTLTexture>*                             pMTLTexture);
@@ -857,6 +925,12 @@
  *   - VK_SUCCESS.
  *   - VK_ERROR_FEATURE_NOT_PRESENT if IOSurfaces are not supported on the platform.
  *   - VK_ERROR_INITIALIZATION_FAILED if ioSurface is specified and is not compatible with this VkImage.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkImage object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
  */
 VKAPI_ATTR VkResult VKAPI_CALL vkUseIOSurfaceMVK(
     VkImage                                     image,
@@ -866,6 +940,12 @@
  * Returns, in the pIOSurface pointer, the IOSurface currently underlaying the VkImage,
  * as set by the useIOSurfaceMVK() function, or returns null if the VkImage is not using
  * an IOSurface, or if the platform does not support IOSurfaces.
+ *
+ * This function is not supported by the Vulkan SDK Loader and Layers framework.
+ * The VkImage object you provide here must have been retrieved directly from
+ * MoltenVK, and not through the Vulkan SDK Loader and Layers framework. Opaque Vulkan
+ * objects are often changed by layers, and passing them from one layer to another,
+ * or from a layer directly to MoltenVK, will result in undefined behaviour.
  */
 VKAPI_ATTR void VKAPI_CALL vkGetIOSurfaceMVK(
     VkImage                                     image,
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdDebug.mm b/MoltenVK/MoltenVK/Commands/MVKCmdDebug.mm
index b7eda12..3e15659 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdDebug.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdDebug.mm
@@ -27,7 +27,7 @@
 
 void MVKCmdDebugMarker::setContent(const char* pMarkerName, const float color[4]) {
 	[_markerName release];
-	_markerName = [@(pMarkerName) retain];
+	_markerName = [[NSString alloc] initWithUTF8String: pMarkerName];	// retained
 }
 
 MVKCmdDebugMarker::MVKCmdDebugMarker(MVKCommandTypePool<MVKCmdDebugMarker>* pool)
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.mm b/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.mm
index 5eff3e4..18fe127 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdPipeline.mm
@@ -197,7 +197,7 @@
 	_offset = offset;
 
 	_pushConstants.resize(size);
-  std::copy_n((char*)pValues, size, _pushConstants.begin());
+	std::copy_n((char*)pValues, size, _pushConstants.begin());
 }
 
 void MVKCmdPushConstants::encode(MVKCommandEncoder* cmdEncoder) {
@@ -209,7 +209,7 @@
         VK_SHADER_STAGE_COMPUTE_BIT
     };
     for (auto stage : stages) {
-        if (mvkAreFlagsEnabled(_stageFlags, stage)) {
+        if (mvkAreAllFlagsEnabled(_stageFlags, stage)) {
             cmdEncoder->getPushConstants(stage)->setPushConstants(_offset, _pushConstants);
         }
     }
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.h b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.h
index 3e3b007..231924a 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.h
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.h
@@ -33,17 +33,6 @@
 #pragma mark -
 #pragma mark MVKCmdCopyImage
 
-/** Describes the Metal texture copying parameters. */
-typedef struct {
-	uint32_t	srcLevel;
-	uint32_t	srcSlice;
-	MTLOrigin	srcOrigin;
-	MTLSize		srcSize;
-	uint32_t	dstLevel;
-	uint32_t	dstSlice;
-	MTLOrigin	dstOrigin;
-} MVKMetalCopyTextureRegion;
-
 /** Vulkan command to copy image regions. */
 class MVKCmdCopyImage : public MVKCommand {
 
@@ -62,14 +51,28 @@
 		MVKCommand::MVKCommand((MVKCommandTypePool<MVKCommand>*)pool) {}
 
 protected:
-    void addMetalCopyRegions(const VkImageCopy* pRegion);
+	void setContent(VkImage srcImage, VkImageLayout srcImageLayout,
+					VkImage dstImage, VkImageLayout dstImageLayout, MVKCommandUse commandUse);
+	void addImageCopyRegion(const VkImageCopy& region);
+	void addTempBufferImageCopyRegion(const VkImageCopy& region);
 
 	MVKImage* _srcImage;
 	VkImageLayout _srcLayout;
 	MVKImage* _dstImage;
 	VkImageLayout _dstLayout;
-	std::vector<MVKMetalCopyTextureRegion> _mtlTexCopyRegions;
-    MVKCommandUse _commandUse = kMVKCommandUseNone;
+	MTLPixelFormat _srcMTLPixFmt;
+	MTLPixelFormat _dstMTLPixFmt;
+	uint32_t _srcSampleCount;
+	uint32_t _dstSampleCount;
+	bool _isSrcCompressed;
+	bool _isDstCompressed;
+	bool _canCopyFormats;
+	bool _useTempBuffer;
+	std::vector<VkImageCopy> _imageCopyRegions;
+	std::vector<VkBufferImageCopy> _srcTmpBuffImgCopies;
+	std::vector<VkBufferImageCopy> _dstTmpBuffImgCopies;
+	size_t _tmpBuffSize;
+    MVKCommandUse _commandUse;
 };
 
 
@@ -79,14 +82,11 @@
 /** Number of vertices in a BLIT rectangle. */
 #define kMVKBlitVertexCount		4
 
-/** Describes Metal texture rendering parameters. */
+/** Combines a VkImageBlit with vertices to render it. */
 typedef struct {
-	uint32_t	srcLevel;
-	uint32_t	srcSlice;
-	uint32_t	dstLevel;
-	uint32_t	dstSlice;
+	VkImageBlit region;
 	MVKVertexPosTex vertices[kMVKBlitVertexCount];
-} MVKMetalBlitTextureRender;
+} MVKImageBlitRender;
 
 /** Vulkan command to BLIT image regions. */
 class MVKCmdBlitImage : public MVKCmdCopyImage {
@@ -108,17 +108,16 @@
 	~MVKCmdBlitImage() override;
 
 protected:
-	bool canCopy(const VkImageBlit* pRegion);
-    void addMetalCopyRegions(const VkImageBlit* pRegion);
-    void addMetalBlitRenders(const VkImageBlit* pRegion);
-	void populateVertices(MVKVertexPosTex* vertices, const VkImageBlit* pRegion);
+	bool canCopy(const VkImageBlit& region);
+	void addImageBlitRegion(const VkImageBlit& region);
+	void addImageCopyRegionFromBlitRegion(const VkImageBlit& region);
+	void populateVertices(MVKVertexPosTex* vertices, const VkImageBlit& region);
     void initMTLRenderPassDescriptor();
 
 	MTLRenderPassDescriptor* _mtlRenderPassDescriptor;
 	MTLSamplerMinMagFilter _mtlFilter;
-    MTLPixelFormat _mtlPixFmt;
 	MVKRPSKeyBlitImg _blitKey;
-	std::vector<MVKMetalBlitTextureRender> _mtlTexBlitRenders;
+	std::vector<MVKImageBlitRender> _mvkImageBlitRenders;
 };
 
 
@@ -211,10 +210,12 @@
 		MVKCommand::MVKCommand((MVKCommandTypePool<MVKCommand>*)pool) {}
 
 protected:
+	bool isArrayTexture();
+
     MVKBuffer* _buffer;
     MVKImage* _image;
     VkImageLayout _imageLayout;
-    std::vector<VkBufferImageCopy> _mtlBuffImgCopyRegions;
+    std::vector<VkBufferImageCopy> _bufferImageCopyRegions;
     bool _toImage = false;
 };
 
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm
index db6c561..40c1fa1 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdTransfer.mm
@@ -38,81 +38,167 @@
 								 VkImage dstImage,
 								 VkImageLayout dstImageLayout,
 								 uint32_t regionCount,
-                                 const VkImageCopy* pRegions,
-                                 MVKCommandUse commandUse) {
-	_srcImage = (MVKImage*)srcImage;
-	_srcLayout = srcImageLayout;
-	_dstImage = (MVKImage*)dstImage;
-	_dstLayout = dstImageLayout;
-    _commandUse = commandUse;
+								 const VkImageCopy* pRegions,
+								 MVKCommandUse commandUse) {
 
-    // Deterine the total number of texture layers being affected
-    uint32_t layerCnt = 0;
-    for (uint32_t i = 0; i < regionCount; i++) {
-        layerCnt += pRegions[i].srcSubresource.layerCount;
-    }
+	setContent(srcImage, srcImageLayout, dstImage, dstImageLayout, commandUse);
 
-	// Add image regions
-    _mtlTexCopyRegions.clear();     // Clear for reuse
-    _mtlTexCopyRegions.reserve(layerCnt);
 	for (uint32_t i = 0; i < regionCount; i++) {
-		addMetalCopyRegions(&pRegions[i]);
+		addImageCopyRegion(pRegions[i]);
 	}
 
-    // Validate
-    if ((_srcImage->getMTLTextureType() == MTLTextureType3D) != (_dstImage->getMTLTextureType() == MTLTextureType3D)) {
-        setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdCopyImage(): Metal does not support copying to or from slices of a 3D texture."));
-    }
+	// Validate
+	if ( !_canCopyFormats ) {
+		setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdCopyImage(): Cannot copy between incompatible formats, such as formats of different pixel sizes."));
+	}
+	if ((_srcImage->getMTLTextureType() == MTLTextureType3D) != (_dstImage->getMTLTextureType() == MTLTextureType3D)) {
+		setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdCopyImage(): Metal does not support copying to or from slices of a 3D texture."));
+	}
 }
 
-// Adds a Metal copy region structure for each layer in the specified copy region.
-void MVKCmdCopyImage::addMetalCopyRegions(const VkImageCopy* pRegion) {
+// Sets basic content for use by this class and subclasses
+void MVKCmdCopyImage::setContent(VkImage srcImage,
+								 VkImageLayout srcImageLayout,
+								 VkImage dstImage,
+								 VkImageLayout dstImageLayout,
+								 MVKCommandUse commandUse) {
+	_srcImage = (MVKImage*)srcImage;
+	_srcLayout = srcImageLayout;
+	_srcMTLPixFmt = _srcImage->getMTLPixelFormat();
+	_srcSampleCount = mvkSampleCountFromVkSampleCountFlagBits(_srcImage->getSampleCount());
+	_isSrcCompressed = _srcImage->getIsCompressed();
+	uint32_t srcBytesPerBlock = mvkMTLPixelFormatBytesPerBlock(_srcMTLPixFmt);
 
-    MVKMetalCopyTextureRegion mtlImgRgn;
-    mtlImgRgn.srcOrigin = mvkMTLOriginFromVkOffset3D(pRegion->srcOffset);
-    mtlImgRgn.dstOrigin = mvkMTLOriginFromVkOffset3D(pRegion->dstOffset);
-    mtlImgRgn.srcSize = mvkMTLSizeFromVkExtent3D(pRegion->extent);
-    mtlImgRgn.srcLevel = pRegion->srcSubresource.mipLevel;
-    mtlImgRgn.dstLevel = pRegion->dstSubresource.mipLevel;
+	_dstImage = (MVKImage*)dstImage;
+	_dstLayout = dstImageLayout;
+	_dstMTLPixFmt = _dstImage->getMTLPixelFormat();
+	_dstSampleCount = mvkSampleCountFromVkSampleCountFlagBits(_dstImage->getSampleCount());
+	_isDstCompressed = _dstImage->getIsCompressed();
+	uint32_t dstBytesPerBlock = mvkMTLPixelFormatBytesPerBlock(_dstMTLPixFmt);
 
-    uint32_t srcBaseLayer = pRegion->srcSubresource.baseArrayLayer;
-    uint32_t dstBaseLayer = pRegion->dstSubresource.baseArrayLayer;
-    uint32_t layCnt = pRegion->srcSubresource.layerCount;
+	_canCopyFormats = (srcBytesPerBlock == dstBytesPerBlock) && (_srcSampleCount == _dstSampleCount);
+	_useTempBuffer = (_srcMTLPixFmt != _dstMTLPixFmt) && (_isSrcCompressed || _isDstCompressed);	// Different formats and at least one is compressed
 
-    for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
-		mtlImgRgn.srcSlice = srcBaseLayer + layIdx;
-		mtlImgRgn.dstSlice = dstBaseLayer + layIdx;
-        _mtlTexCopyRegions.push_back(mtlImgRgn);
+	_commandUse = commandUse;
+	_tmpBuffSize = 0;
+
+	_imageCopyRegions.clear();		// Clear for reuse
+	_srcTmpBuffImgCopies.clear();	// Clear for reuse
+	_dstTmpBuffImgCopies.clear();	// Clear for reuse
+}
+
+void MVKCmdCopyImage::addImageCopyRegion(const VkImageCopy& region) {
+	if (_useTempBuffer) {
+		addTempBufferImageCopyRegion(region);	// Convert to image->buffer->image copies
+	} else {
+		_imageCopyRegions.push_back(region);
 	}
 }
 
+// Add an image->buffer copy and buffer->image copy to replace the image->image copy
+void MVKCmdCopyImage::addTempBufferImageCopyRegion(const VkImageCopy& region) {
+	VkBufferImageCopy buffImgCpy;
+
+	// Add copy from source image to temp buffer.
+	buffImgCpy.bufferOffset = _tmpBuffSize;
+	buffImgCpy.bufferRowLength = 0;
+	buffImgCpy.bufferImageHeight = 0;
+	buffImgCpy.imageSubresource = region.srcSubresource;
+	buffImgCpy.imageOffset = region.srcOffset;
+	buffImgCpy.imageExtent = region.extent;
+	_srcTmpBuffImgCopies.push_back(buffImgCpy);
+
+	// 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 = region.extent;
+	if (_isSrcCompressed && !_isDstCompressed) {
+		VkExtent2D srcBlockExtent = mvkMTLPixelFormatBlockTexelSize(_srcMTLPixFmt);
+		dstExtent.width /= srcBlockExtent.width;
+		dstExtent.height /= srcBlockExtent.height;
+	}
+	buffImgCpy.bufferOffset = _tmpBuffSize;
+	buffImgCpy.bufferRowLength = 0;
+	buffImgCpy.bufferImageHeight = 0;
+	buffImgCpy.imageSubresource = region.dstSubresource;
+	buffImgCpy.imageOffset = region.dstOffset;
+	buffImgCpy.imageExtent = dstExtent;
+	_dstTmpBuffImgCopies.push_back(buffImgCpy);
+
+	NSUInteger bytesPerRow = mvkMTLPixelFormatBytesPerRow(_srcMTLPixFmt, region.extent.width);
+	NSUInteger bytesPerRegion = mvkMTLPixelFormatBytesPerLayer(_srcMTLPixFmt, bytesPerRow, region.extent.height);
+	_tmpBuffSize += bytesPerRegion;
+}
+
 void MVKCmdCopyImage::encode(MVKCommandEncoder* cmdEncoder) {
-    id<MTLTexture> srcMTLTex = _srcImage->getMTLTexture();
-    id<MTLTexture> dstMTLTex = _dstImage->getMTLTexture();
-    if ( !srcMTLTex || !dstMTLTex ) { return; }
+	// Unless we need to use an intermediary buffer copy, 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.
+	MTLPixelFormat mapSrcMTLPixFmt = _useTempBuffer ? _srcMTLPixFmt : _dstMTLPixFmt;
+	id<MTLTexture> srcMTLTex = _srcImage->getMTLTexture(mapSrcMTLPixFmt);
+	id<MTLTexture> dstMTLTex = _dstImage->getMTLTexture();
+	if ( !srcMTLTex || !dstMTLTex ) { return; }
 
-    if (srcMTLTex.pixelFormat != dstMTLTex.pixelFormat &&
-        mvkFormatTypeFromVkFormat(_dstImage->getVkFormat()) != kMVKFormatCompressed &&
-        mvkFormatTypeFromVkFormat(_srcImage->getVkFormat()) != kMVKFormatCompressed) {
-        // If the pixel formats don't match, Metal won't abort, but it won't
-        // do the copy either. But we can easily work around that... unless the
-        // source format is compressed.
-        srcMTLTex = [[srcMTLTex newTextureViewWithPixelFormat: dstMTLTex.pixelFormat] autorelease];
-    }
+	id<MTLBlitCommandEncoder> mtlBlitEnc = cmdEncoder->getMTLBlitEncoder(_commandUse);
 
-    id<MTLBlitCommandEncoder> mtlBlitEnc = cmdEncoder->getMTLBlitEncoder(_commandUse);
+	// If copies can be performed using direct texture-texture copying, do so
+	for (auto& cpyRgn : _imageCopyRegions) {
+		uint32_t	srcLevel = cpyRgn.srcSubresource.mipLevel;;
+		MTLOrigin	srcOrigin = mvkMTLOriginFromVkOffset3D(cpyRgn.srcOffset);;
+		MTLSize		srcSize = mvkMTLSizeFromVkExtent3D(cpyRgn.extent);
+		uint32_t	dstLevel = cpyRgn.dstSubresource.mipLevel;
+		MTLOrigin	dstOrigin = mvkMTLOriginFromVkOffset3D(cpyRgn.dstOffset);
 
-    for (auto& cpyRgn : _mtlTexCopyRegions) {
-        [mtlBlitEnc copyFromTexture: srcMTLTex
-                        sourceSlice: cpyRgn.srcSlice
-                        sourceLevel: cpyRgn.srcLevel
-                       sourceOrigin: cpyRgn.srcOrigin
-                         sourceSize: cpyRgn.srcSize
-                          toTexture: dstMTLTex
-                   destinationSlice: cpyRgn.dstSlice
-                   destinationLevel: cpyRgn.dstLevel
-                  destinationOrigin: cpyRgn.dstOrigin];
-    }
+		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];
+		}
+	}
+
+	// If copies could not be performed directly between images,
+	// use a temporary buffer acting as a waystation between the images.
+	if ( !_srcTmpBuffImgCopies.empty() ) {
+		MVKBufferDescriptorData tempBuffData;
+		tempBuffData.size = _tmpBuffSize;
+		tempBuffData.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
+		MVKBuffer* tempBuff = getCommandEncodingPool()->getTransferMVKBuffer(tempBuffData);
+
+		MVKCmdBufferImageCopy cpyCmd(&getCommandPool()->_cmdBufferImageCopyPool);
+
+		// 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((VkBuffer) tempBuff,
+						  (VkImage) _srcImage,
+						  _srcLayout,
+						  (uint32_t)_srcTmpBuffImgCopies.size(),
+						  _srcTmpBuffImgCopies.data(),
+						  false);
+		cpyCmd.encode(cmdEncoder);
+
+		// 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((VkBuffer) tempBuff,
+						  (VkImage) _dstImage,
+						  _dstLayout,
+						  (uint32_t)_dstTmpBuffImgCopies.size(),
+						  _dstTmpBuffImgCopies.data(),
+						  true);
+		cpyCmd.encode(cmdEncoder);
+	}
 }
 
 
@@ -125,134 +211,88 @@
 								 VkImageLayout dstImageLayout,
 								 uint32_t regionCount,
 								 const VkImageBlit* pRegions,
-                                 VkFilter filter,
-                                 MVKCommandUse commandUse) {
-	_srcImage = (MVKImage*)srcImage;
-	_srcLayout = srcImageLayout;
-	_dstImage = (MVKImage*)dstImage;
-	_dstLayout = dstImageLayout;
+								 VkFilter filter,
+								 MVKCommandUse commandUse) {
 
-    _mtlPixFmt = _dstImage->getMTLPixelFormat();
-    _mtlFilter = mvkMTLSamplerMinMagFilterFromVkFilter(filter);
+	MVKCmdCopyImage::setContent(srcImage, srcImageLayout, dstImage, dstImageLayout, commandUse);
 
-	_blitKey.mtlPixFmt = (uint32_t)_mtlPixFmt;
-	_blitKey.mtlTexType = (uint32_t)_srcImage->getMTLTextureType();
+	_mtlFilter = mvkMTLSamplerMinMagFilterFromVkFilter(filter);
 
-    _commandUse = commandUse;
+	_blitKey.srcMTLPixelFormat = (uint32_t)_srcMTLPixFmt;
+	_blitKey.srcMTLTextureType = (uint32_t)_srcImage->getMTLTextureType();
+	_blitKey.dstMTLPixelFormat = (uint32_t)_dstMTLPixFmt;
+	_blitKey.dstSampleCount = _dstSampleCount;
 
-	// Determine which regions can be copied and which must be rendered to the destination texture
-	bool canCopyRegion[regionCount];
-	uint32_t copyRegionCount = 0;
-	uint32_t renderRegionCount = 0;
+	_mvkImageBlitRenders.clear();		// Clear for reuse
 	for (uint32_t i = 0; i < regionCount; i++) {
-		const VkImageBlit* pRegion = &pRegions[i];
-		uint32_t layCnt = pRegion->srcSubresource.layerCount;
-		if ( canCopy(pRegion) && (_srcImage->getMTLPixelFormat() == _mtlPixFmt) ) {
-			canCopyRegion[i] = true;
-			copyRegionCount += layCnt;
-		} else {
-			canCopyRegion[i] = false;
-			renderRegionCount += layCnt;
-		}
+		addImageBlitRegion(pRegions[i]);
 	}
 
-	// Add copy and BLIT regions accordingly
-    _mtlTexCopyRegions.clear();     // Clear for reuse
-	_mtlTexCopyRegions.reserve(copyRegionCount);
-    _mtlTexBlitRenders.clear();     // Clear for reuse
-	_mtlTexBlitRenders.reserve(renderRegionCount);
+	// Validate
+	if ( !_mvkImageBlitRenders.empty() &&
+		(mvkMTLPixelFormatIsDepthFormat(_srcMTLPixFmt) ||
+		 mvkMTLPixelFormatIsStencilFormat(_srcMTLPixFmt)) ) {
 
-	for (uint32_t i = 0; i < regionCount; i++) {
-		const VkImageBlit* pRegion = &pRegions[i];
-		if (canCopyRegion[i]) {
-			addMetalCopyRegions(pRegion);
-		} else {
-			addMetalBlitRenders(pRegion);
-		}
+		setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdBlitImage(): Scaling or inverting depth/stencil images is not supported."));
+		_mvkImageBlitRenders.clear();
 	}
-
-    // Validate
-    if (_blitKey.isDepthFormat() && renderRegionCount > 0) {
-        setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdBlitImage(): Scaling of depth/stencil images is not supported."));
-    }
-    if ( !_mtlTexBlitRenders.empty() && mvkMTLPixelFormatIsStencilFormat(_mtlPixFmt)) {
-        setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdBlitImage(): Stencil image formats cannot be scaled or inverted."));
-    }
 }
 
-bool MVKCmdBlitImage::canCopy(const VkImageBlit* pRegion) {
-	VkOffset3D srcSize = mvkVkOffset3DDifference(pRegion->srcOffsets[1], pRegion->srcOffsets[0]);
-	VkOffset3D dstSize = mvkVkOffset3DDifference(pRegion->dstOffsets[1], pRegion->dstOffsets[0]);
+void MVKCmdBlitImage::addImageBlitRegion(const VkImageBlit& region) {
+	if (_canCopyFormats && canCopy(region)) {
+		addImageCopyRegionFromBlitRegion(region);	// Convert to image copy
+	} else {
+		MVKImageBlitRender blitRender;
+		blitRender.region = region;
+		populateVertices(blitRender.vertices, region);
+		_mvkImageBlitRenders.push_back(blitRender);
+	}
+}
 
-	// The source and destination sizes must be equal and not be negative in any direction
+// The source and destination sizes must be equal and not be negative in any direction
+bool MVKCmdBlitImage::canCopy(const VkImageBlit& region) {
+	VkOffset3D srcSize = mvkVkOffset3DDifference(region.srcOffsets[1], region.srcOffsets[0]);
+	VkOffset3D dstSize = mvkVkOffset3DDifference(region.dstOffsets[1], region.dstOffsets[0]);
 	return (mvkVkOffset3DsAreEqual(srcSize, dstSize) &&
 			(srcSize.x >= 0) && (srcSize.y >= 0) && (srcSize.z >= 0));
 }
 
-// Adds a Metal copy region structure for each layer in the specified BLIT region.
-void MVKCmdBlitImage::addMetalCopyRegions(const VkImageBlit* pRegion) {
+void MVKCmdBlitImage::addImageCopyRegionFromBlitRegion(const VkImageBlit& region) {
+	const VkOffset3D& so0 = region.srcOffsets[0];
+	const VkOffset3D& so1 = region.srcOffsets[1];
 
-    const VkOffset3D* pSo0 = &pRegion->srcOffsets[0];
-    const VkOffset3D* pSo1 = &pRegion->srcOffsets[1];
+	VkImageCopy cpyRgn;
+	cpyRgn.srcSubresource = region.srcSubresource;
+	cpyRgn.srcOffset = region.srcOffsets[0];
+	cpyRgn.dstSubresource = region.dstSubresource;
+	cpyRgn.dstOffset = region.dstOffsets[0];
+	cpyRgn.extent.width = so1.x - so0.x;
+	cpyRgn.extent.height = so1.y - so0.y;
+	cpyRgn.extent.depth = so1.z - so0.z;
 
-    MVKMetalCopyTextureRegion mtlImgRgn;
-    mtlImgRgn.srcOrigin = mvkMTLOriginFromVkOffset3D(*pSo0);
-    mtlImgRgn.dstOrigin = mvkMTLOriginFromVkOffset3D(pRegion->dstOffsets[0]);
-    mtlImgRgn.srcSize = MTLSizeMake((pSo1->x - pSo0->x), (pSo1->y - pSo0->y), (pSo1->z - pSo0->z));
-    mtlImgRgn.srcLevel = pRegion->srcSubresource.mipLevel;
-    mtlImgRgn.dstLevel = pRegion->dstSubresource.mipLevel;
-
-    uint32_t srcBaseLayer = pRegion->srcSubresource.baseArrayLayer;
-    uint32_t dstBaseLayer = pRegion->dstSubresource.baseArrayLayer;
-	uint32_t layCnt = pRegion->srcSubresource.layerCount;
-
-    for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
-		mtlImgRgn.srcSlice = srcBaseLayer + layIdx;
-		mtlImgRgn.dstSlice = dstBaseLayer + layIdx;
-        _mtlTexCopyRegions.push_back(mtlImgRgn);
-	}
+	MVKCmdCopyImage::addImageCopyRegion(cpyRgn);
 }
 
-// Adds a Metal BLIT render region structure for each layer in the specified BLIT region.
-void MVKCmdBlitImage::addMetalBlitRenders(const VkImageBlit* pRegion) {
-
-    MVKMetalBlitTextureRender mtlBlitRndr;
-    mtlBlitRndr.srcLevel = pRegion->srcSubresource.mipLevel;
-    mtlBlitRndr.dstLevel = pRegion->dstSubresource.mipLevel;
-    populateVertices(mtlBlitRndr.vertices, pRegion);
-
-    uint32_t srcBaseLayer = pRegion->srcSubresource.baseArrayLayer;
-	uint32_t dstBaseLayer = pRegion->dstSubresource.baseArrayLayer;
-	uint32_t layCnt = pRegion->srcSubresource.layerCount;
-
-	for (uint32_t layIdx = 0; layIdx < layCnt; layIdx++) {
-		mtlBlitRndr.srcSlice = srcBaseLayer + layIdx;
-		mtlBlitRndr.dstSlice = dstBaseLayer + layIdx;
-        _mtlTexBlitRenders.push_back(mtlBlitRndr);
-	}
-}
-
-// Populates the vertices in the specified array from the specified region.
-void MVKCmdBlitImage::populateVertices(MVKVertexPosTex* vertices, const VkImageBlit* pRegion) {
-    const VkOffset3D* pSo0 = &pRegion->srcOffsets[0];
-    const VkOffset3D* pSo1 = &pRegion->srcOffsets[1];
-    const VkOffset3D* pDo0 = &pRegion->dstOffsets[0];
-    const VkOffset3D* pDo1 = &pRegion->dstOffsets[1];
+void MVKCmdBlitImage::populateVertices(MVKVertexPosTex* vertices, const VkImageBlit& region) {
+    const VkOffset3D& so0 = region.srcOffsets[0];
+    const VkOffset3D& so1 = region.srcOffsets[1];
+    const VkOffset3D& do0 = region.dstOffsets[0];
+    const VkOffset3D& do1 = region.dstOffsets[1];
 
     // Get the extents of the source and destination textures.
-    VkExtent3D srcExtent = _srcImage->getExtent3D(pRegion->srcSubresource.mipLevel);
-    VkExtent3D dstExtent = _dstImage->getExtent3D(pRegion->dstSubresource.mipLevel);
+    VkExtent3D srcExtent = _srcImage->getExtent3D(region.srcSubresource.mipLevel);
+    VkExtent3D dstExtent = _dstImage->getExtent3D(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.
-    CGPoint srcBL = CGPointMake((CGFloat)(pSo0->x) / (CGFloat)srcExtent.width,
-                                (CGFloat)(srcExtent.height - pSo1->y) / (CGFloat)srcExtent.height);
-    CGPoint srcTR = CGPointMake((CGFloat)(pSo1->x) / (CGFloat)srcExtent.width,
-                                (CGFloat)(srcExtent.height - pSo0->y) / (CGFloat)srcExtent.height);
-    CGPoint dstBL = CGPointMake((CGFloat)(pDo0->x) / (CGFloat)dstExtent.width,
-                                (CGFloat)(dstExtent.height - pDo1->y) / (CGFloat)dstExtent.height);
-    CGPoint dstTR = CGPointMake((CGFloat)(pDo1->x) / (CGFloat)dstExtent.width,
-                                (CGFloat)(dstExtent.height - pDo0->y) / (CGFloat)dstExtent.height);
+    CGPoint srcBL = CGPointMake((CGFloat)(so0.x) / (CGFloat)srcExtent.width,
+                                (CGFloat)(srcExtent.height - so1.y) / (CGFloat)srcExtent.height);
+    CGPoint srcTR = CGPointMake((CGFloat)(so1.x) / (CGFloat)srcExtent.width,
+                                (CGFloat)(srcExtent.height - so0.y) / (CGFloat)srcExtent.height);
+    CGPoint dstBL = CGPointMake((CGFloat)(do0.x) / (CGFloat)dstExtent.width,
+                                (CGFloat)(dstExtent.height - do1.y) / (CGFloat)dstExtent.height);
+    CGPoint dstTR = CGPointMake((CGFloat)(do1.x) / (CGFloat)dstExtent.width,
+                                (CGFloat)(dstExtent.height - do0.y) / (CGFloat)dstExtent.height);
 
     // The destination region is used for vertex positions,
     // which are bounded by (-1.0 < p < 1.0) in clip-space.
@@ -282,7 +322,7 @@
     pVtx->position.y = dstTR.y;
     pVtx->texCoord.x = srcBL.x;
     pVtx->texCoord.y = (1.0 - srcTR.y);
-    
+
     // Top right vertex
     pVtx = &vertices[3];
     pVtx->position.x = dstTR.x;
@@ -293,50 +333,56 @@
 
 void MVKCmdBlitImage::encode(MVKCommandEncoder* cmdEncoder) {
 
-    // Perform those BLITs that can be covered by simple texture copying.
-    if ( !_mtlTexCopyRegions.empty() ) {
-        MVKCmdCopyImage::encode(cmdEncoder);
-    }
+	// Perform those BLITs that can be covered by simple texture copying.
+	if ( !_imageCopyRegions.empty() ) {
+		MVKCmdCopyImage::encode(cmdEncoder);
+	}
 
-    // Perform those BLITs that require rendering to destination texture.
-    if ( !_mtlTexBlitRenders.empty() && !_blitKey.isDepthFormat() ) {
+	// Perform those BLITs that require rendering to destination texture.
+	if ( !_mvkImageBlitRenders.empty() ) {
 
-        cmdEncoder->endCurrentMetalEncoding();
+		cmdEncoder->endCurrentMetalEncoding();
 
-        id<MTLTexture> srcMTLTex = _srcImage->getMTLTexture();
-        id<MTLTexture> dstMTLTex = _dstImage->getMTLTexture();
-        if ( !srcMTLTex || !dstMTLTex ) { return; }
+		id<MTLTexture> srcMTLTex = _srcImage->getMTLTexture();
+		id<MTLTexture> dstMTLTex = _dstImage->getMTLTexture();
+		if ( !srcMTLTex || !dstMTLTex ) { return; }
 
-		bool isArrayType = _blitKey.isArrayType();
+		MTLRenderPassColorAttachmentDescriptor* mtlColorAttDesc = _mtlRenderPassDescriptor.colorAttachments[0];
+		mtlColorAttDesc.texture = dstMTLTex;
 
-        MTLRenderPassColorAttachmentDescriptor* mtlColorAttDesc = _mtlRenderPassDescriptor.colorAttachments[0];
-        mtlColorAttDesc.texture = dstMTLTex;
+		uint32_t vtxBuffIdx = getDevice()->getMetalBufferIndexForVertexAttributeBinding(kMVKVertexContentBufferIndex);
 
-        uint32_t vtxBuffIdx = getDevice()->getMetalBufferIndexForVertexAttributeBinding(kMVKVertexContentBufferIndex);
+		MVKCommandEncodingPool* cmdEncPool = getCommandEncodingPool();
 
-        MVKCommandEncodingPool* cmdEncPool = getCommandEncodingPool();
+		for (auto& bltRend : _mvkImageBlitRenders) {
 
-        for (auto& bltRend : _mtlTexBlitRenders) {
+			mtlColorAttDesc.level = bltRend.region.dstSubresource.mipLevel;
 
-            // Update the render pass descriptor for the texture level and slice, and create a render encoder.
-            mtlColorAttDesc.level = bltRend.dstLevel;
-            mtlColorAttDesc.slice = bltRend.dstSlice;
-            id<MTLRenderCommandEncoder> mtlRendEnc = [cmdEncoder->_mtlCmdBuffer renderCommandEncoderWithDescriptor: _mtlRenderPassDescriptor];
-			setLabelIfNotNil(mtlRendEnc, mvkMTLRenderCommandEncoderLabel(_commandUse));
+			uint32_t srcBaseLayer = bltRend.region.srcSubresource.baseArrayLayer;
+			uint32_t dstBaseLayer = bltRend.region.dstSubresource.baseArrayLayer;
 
-            [mtlRendEnc pushDebugGroup: @"vkCmdBlitImage"];
-            [mtlRendEnc setRenderPipelineState: cmdEncPool->getCmdBlitImageMTLRenderPipelineState(_blitKey)];
-            cmdEncoder->setVertexBytes(mtlRendEnc, bltRend.vertices, sizeof(bltRend.vertices), vtxBuffIdx);
-			[mtlRendEnc setFragmentTexture: srcMTLTex atIndex: 0];
-			[mtlRendEnc setFragmentSamplerState: cmdEncPool->getCmdBlitImageMTLSamplerState(_mtlFilter) atIndex: 0];
-			if (isArrayType) {
-				cmdEncoder->setFragmentBytes(mtlRendEnc, &bltRend, sizeof(bltRend), 0);
+			uint32_t layCnt = bltRend.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 = dstBaseLayer + layIdx;
+				id<MTLRenderCommandEncoder> mtlRendEnc = [cmdEncoder->_mtlCmdBuffer renderCommandEncoderWithDescriptor: _mtlRenderPassDescriptor];
+				setLabelIfNotNil(mtlRendEnc, mvkMTLRenderCommandEncoderLabel(_commandUse));
+
+				[mtlRendEnc pushDebugGroup: @"vkCmdBlitImage"];
+				[mtlRendEnc setRenderPipelineState: cmdEncPool->getCmdBlitImageMTLRenderPipelineState(_blitKey)];
+				cmdEncoder->setVertexBytes(mtlRendEnc, bltRend.vertices, sizeof(bltRend.vertices), vtxBuffIdx);
+
+				[mtlRendEnc setFragmentTexture: srcMTLTex atIndex: 0];
+				[mtlRendEnc setFragmentSamplerState: cmdEncPool->getCmdBlitImageMTLSamplerState(_mtlFilter) atIndex: 0];
+				uint32_t srcSlice = srcBaseLayer + layIdx;
+				cmdEncoder->setFragmentBytes(mtlRendEnc, &srcSlice, sizeof(srcSlice), 0);
+
+				[mtlRendEnc drawPrimitives: MTLPrimitiveTypeTriangleStrip vertexStart: 0 vertexCount: kMVKBlitVertexCount];
+				[mtlRendEnc popDebugGroup];
+				[mtlRendEnc endEncoding];
 			}
-            [mtlRendEnc drawPrimitives: MTLPrimitiveTypeTriangleStrip vertexStart: 0 vertexCount: kMVKBlitVertexCount];
-            [mtlRendEnc popDebugGroup];
-            [mtlRendEnc endEncoding];
-        }
-    }
+		}
+	}
 }
 
 
@@ -397,7 +443,8 @@
         addResolveSlices(rslvRgn);
     }
 
-    _srcImage->getTransferDescriptorData(_transferImageData);
+    _dstImage->getTransferDescriptorData(_transferImageData);
+	_transferImageData.samples = _srcImage->getSampleCount();
 }
 
 /**
@@ -487,7 +534,7 @@
     if (expRgnCnt > 0) {
         MVKCmdBlitImage expandCmd(&getCommandPool()->_cmdBlitImagePool);
         expandCmd.setContent((VkImage)_dstImage, _dstLayout, (VkImage)xfrImage, _dstLayout,
-                             uint32_t(_expansionRegions.size()), _expansionRegions.data(),
+                             expRgnCnt, _expansionRegions.data(),
                              VK_FILTER_LINEAR, kMVKCommandUseResolveExpandImage);
         expandCmd.encode(cmdEncoder);
     }
@@ -499,7 +546,7 @@
     if (cpyRgnCnt > 0) {
         MVKCmdCopyImage copyCmd(&getCommandPool()->_cmdCopyImagePool);
         copyCmd.setContent((VkImage)_srcImage, _srcLayout, (VkImage)xfrImage, _dstLayout,
-                           uint32_t(_copyRegions.size()), _copyRegions.data(), kMVKCommandUseResolveCopyImage);
+                           cpyRgnCnt, _copyRegions.data(), kMVKCommandUseResolveCopyImage);
         copyCmd.encode(cmdEncoder);
     }
 
@@ -641,10 +688,10 @@
     _toImage = toImage;
 
     // Add buffer regions
-    _mtlBuffImgCopyRegions.clear();     // Clear for reuse
-    _mtlBuffImgCopyRegions.reserve(regionCount);
+    _bufferImageCopyRegions.clear();     // Clear for reuse
+    _bufferImageCopyRegions.reserve(regionCount);
     for (uint32_t i = 0; i < regionCount; i++) {
-        _mtlBuffImgCopyRegions.push_back(pRegions[i]);
+        _bufferImageCopyRegions.push_back(pRegions[i]);
     }
 
     // Validate
@@ -663,7 +710,7 @@
     MTLPixelFormat mtlPixFmt = _image->getMTLPixelFormat();
     MVKCommandUse cmdUse = _toImage ? kMVKCommandUseCopyBufferToImage : kMVKCommandUseCopyImageToBuffer;
 
-    for (auto& cpyRgn : _mtlBuffImgCopyRegions) {
+    for (auto& cpyRgn : _bufferImageCopyRegions) {
 
         MTLOrigin mtlTxtOrigin = mvkMTLOriginFromVkOffset3D(cpyRgn.imageOffset);
         MTLSize mtlTxtSize = mvkMTLSizeFromVkExtent3D(cpyRgn.imageExtent);
@@ -683,8 +730,8 @@
         MTLBlitOption blitOptions = MTLBlitOptionNone;
         if (mvkMTLPixelFormatIsDepthFormat(mtlPixFmt) && mvkMTLPixelFormatIsStencilFormat(mtlPixFmt)) {
             VkImageAspectFlags imgFlags = cpyRgn.imageSubresource.aspectMask;
-            bool wantDepth = mvkAreFlagsEnabled(imgFlags, VK_IMAGE_ASPECT_DEPTH_BIT);
-            bool wantStencil = mvkAreFlagsEnabled(imgFlags, VK_IMAGE_ASPECT_STENCIL_BIT);
+            bool wantDepth = mvkAreAllFlagsEnabled(imgFlags, VK_IMAGE_ASPECT_DEPTH_BIT);
+            bool wantStencil = mvkAreAllFlagsEnabled(imgFlags, VK_IMAGE_ASPECT_STENCIL_BIT);
 
             // The stencil component is always 1 byte per pixel.
 			// Don't reduce depths of 32-bit depth/stencil formats.
@@ -708,12 +755,10 @@
 #endif
 
 #if MVK_MACOS
-        if (_toImage && mvkFormatTypeFromMTLPixelFormat(mtlPixFmt) == kMVKFormatCompressed &&
-            mtlTexture.textureType == MTLTextureType3D) {
-            // If we're copying to a compressed 3D image, the image data need to be decompressed.
-            // If we're copying to mip level 0, we can skip the copy and just decode
-            // directly into the image. Otherwise, we need to use an intermediate
-            // buffer.
+		// If we're copying to a compressed 3D image, the image data need to be decompressed.
+		// If we're copying to mip level 0, we can skip the copy and just decode
+		// directly into the image. Otherwise, we need to use an intermediate buffer.
+        if (_toImage && _image->getIsCompressed() && mtlTexture.textureType == MTLTextureType3D) {
             MVKCmdCopyBufferToImageInfo info;
             info.srcRowStride = bytesPerRow & 0xffffffff;
             info.srcRowStrideHigh = bytesPerRow >> 32;
@@ -778,6 +823,10 @@
             if (!needsTempBuff) { continue; }
         }
 #endif
+
+		// Don't supply bytes per image if not an arrayed texture
+		if ( !isArrayTexture() ) { bytesPerImg = 0; }
+
         id<MTLBlitCommandEncoder> mtlBlitEnc = cmdEncoder->getMTLBlitEncoder(cmdUse);
 
         for (uint32_t lyrIdx = 0; lyrIdx < cpyRgn.imageSubresource.layerCount; lyrIdx++) {
@@ -808,6 +857,16 @@
     }
 }
 
+bool MVKCmdBufferImageCopy::isArrayTexture() {
+	MTLTextureType mtlTexType = _image->getMTLTextureType();
+	return (mtlTexType == MTLTextureType3D ||
+			mtlTexType == MTLTextureType2DArray ||
+#if MVK_MACOS
+			mtlTexType == MTLTextureType2DMultisampleArray ||
+#endif
+			mtlTexType == MTLTextureType1DArray);
+}
+
 
 #pragma mark -
 #pragma mark MVKCmdClearAttachments
@@ -852,22 +911,22 @@
     // The depth value (including vertex position Z value) is held in the last index.
     _clearColors[kMVKClearAttachmentDepthStencilIndex] = { mtlDepthVal, mtlDepthVal, mtlDepthVal, mtlDepthVal };
 
-    _clearRects.clear();
+    _clearRects.clear();		// Clear for reuse
     _clearRects.reserve(rectCount);
     for (uint32_t i = 0; i < rectCount; i++) {
         _clearRects.push_back(pRects[i]);
     }
 
+	_vertices.clear();			// Clear for reuse
     _vertices.reserve(rectCount * 6);
 }
 
-/** Populates the vertices for all clear rectangles within an attachment of the specified size. */
+// Populates the vertices for all clear rectangles within an attachment of the specified size.
 void MVKCmdClearAttachments::populateVertices(float attWidth, float attHeight) {
-    _vertices.clear();
     for (auto& rect : _clearRects) { populateVertices(rect, attWidth, attHeight); }
 }
 
-/** Populates the vertices from the specified rectangle within an attachment of the specified size. */
+// Populates the vertices from the specified rectangle within an attachment of the specified size.
 void MVKCmdClearAttachments::populateVertices(VkClearRect& clearRect, float attWidth, float attHeight) {
 
     // Determine the positions of the four edges of the
@@ -989,13 +1048,20 @@
 	_mtlStencilClearValue = mvkMTLClearStencilFromVkClearValue(clearValue);
 
     // Add subresource ranges
-    _subresourceRanges.clear();
+    _subresourceRanges.clear();		// Clear for reuse
     _subresourceRanges.reserve(rangeCount);
     for (uint32_t i = 0; i < rangeCount; i++) {
         _subresourceRanges.push_back(pRanges[i]);
     }
+
+	// Validate
+	if ( !_image->getSupportsAllFormatFeatures(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) ) {
+		setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdClearImage(): Format %s cannot be cleared on this device.", mvkVkFormatName(_image->getVkFormat())));
+	}
 }
 void MVKCmdClearImage::encode(MVKCommandEncoder* cmdEncoder) {
+	if (getConfigurationResult()) { return; }
+
 	id<MTLTexture> imgMTLTex = _image->getMTLTexture();
     if ( !imgMTLTex ) { return; }
 
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandBuffer.mm b/MoltenVK/MoltenVK/Commands/MVKCommandBuffer.mm
index 48fdab7..40dfbd9 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandBuffer.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandBuffer.mm
@@ -42,14 +42,14 @@
 	_canAcceptCommands = true;
 
 	VkCommandBufferUsageFlags usage = pBeginInfo->flags;
-	_isReusable = !mvkAreFlagsEnabled(usage, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
-	_supportsConcurrentExecution = mvkAreFlagsEnabled(usage, VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
+	_isReusable = !mvkAreAllFlagsEnabled(usage, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
+	_supportsConcurrentExecution = mvkAreAllFlagsEnabled(usage, VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
 
 	// If this is a secondary command buffer, and contains inheritance info, set the inheritance info and determine
 	// whether it contains render pass continuation info. Otherwise, clear the inheritance info, and ignore it.
 	const VkCommandBufferInheritanceInfo* pInheritInfo = (_isSecondary ? pBeginInfo->pInheritanceInfo : NULL);
 	bool hasInheritInfo = mvkSetOrClear(&_secondaryInheritanceInfo, pInheritInfo);
-	_doesContinueRenderPass = mvkAreFlagsEnabled(usage, VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT) && hasInheritInfo;
+	_doesContinueRenderPass = mvkAreAllFlagsEnabled(usage, VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT) && hasInheritInfo;
 
 	return getConfigurationResult();
 }
@@ -76,7 +76,7 @@
 	_initialVisibilityResultMTLBuffer = nil;		// not retained
 	setConfigurationResult(VK_NOT_READY);
 
-	if (mvkAreFlagsEnabled(flags, VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)) {
+	if (mvkAreAllFlagsEnabled(flags, VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)) {
 		// TODO: what are we releasing or returning here?
 	}
 
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm
index 328ff5c..641832e 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm
@@ -44,7 +44,10 @@
 MVKPipeline* MVKPipelineCommandEncoderState::getPipeline() { return _pipeline; }
 
 void MVKPipelineCommandEncoderState::encodeImpl(uint32_t stage) {
-    if (_pipeline) { _pipeline->encode(_cmdEncoder, stage); }
+    if (_pipeline) {
+		_pipeline->encode(_cmdEncoder, stage);
+		_pipeline->bindPushConstants(_cmdEncoder);
+	}
 }
 
 void MVKPipelineCommandEncoderState::resetImpl() {
@@ -167,9 +170,14 @@
     }
 }
 
+// At this point, I have been marked not-dirty, under the assumption that I will make changes to the encoder.
+// However, some of the paths below decide not to actually make any changes to the encoder. In that case,
+// I should remain dirty until I actually do make encoder changes.
 void MVKPushConstantsCommandEncoderState::encodeImpl(uint32_t stage) {
     if (_pushConstants.empty() ) { return; }
 
+	_isDirty = true;	// Stay dirty until I actually decide to make a change to the encoder
+
     switch (_shaderStage) {
         case VK_SHADER_STAGE_VERTEX_BIT:
             if (stage == (isTessellating() ? kMVKGraphicsStageVertex : kMVKGraphicsStageRasterization)) {
@@ -177,6 +185,7 @@
                                             _pushConstants.data(),
                                             _pushConstants.size(),
                                             _mtlBufferIndex);
+				_isDirty = false;	// Okay, I changed the encoder
             }
             break;
         case VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT:
@@ -185,6 +194,7 @@
                                              _pushConstants.data(),
                                              _pushConstants.size(),
                                              _mtlBufferIndex);
+				_isDirty = false;	// Okay, I changed the encoder
             }
             break;
         case VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT:
@@ -193,6 +203,7 @@
                                             _pushConstants.data(),
                                             _pushConstants.size(),
                                             _mtlBufferIndex);
+				_isDirty = false;	// Okay, I changed the encoder
             }
             break;
         case VK_SHADER_STAGE_FRAGMENT_BIT:
@@ -201,6 +212,7 @@
                                               _pushConstants.data(),
                                               _pushConstants.size(),
                                               _mtlBufferIndex);
+				_isDirty = false;	// Okay, I changed the encoder
             }
             break;
         case VK_SHADER_STAGE_COMPUTE_BIT:
@@ -208,6 +220,7 @@
                                          _pushConstants.data(),
                                          _pushConstants.size(),
                                          _mtlBufferIndex);
+			_isDirty = false;	// Okay, I changed the encoder
             break;
         default:
             MVKAssert(false, "Unsupported shader stage: %d", _shaderStage);
@@ -272,10 +285,10 @@
     if ( !(_cmdEncoder->supportsDynamicState(VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK) &&
            mvkIsAnyFlagEnabled(faceMask, VK_STENCIL_FRONT_AND_BACK)) ) { return; }
 
-    if (mvkAreFlagsEnabled(faceMask, VK_STENCIL_FACE_FRONT_BIT)) {
+    if (mvkAreAllFlagsEnabled(faceMask, VK_STENCIL_FACE_FRONT_BIT)) {
         _depthStencilData.frontFaceStencilData.readMask = stencilCompareMask;
     }
-    if (mvkAreFlagsEnabled(faceMask, VK_STENCIL_FACE_BACK_BIT)) {
+    if (mvkAreAllFlagsEnabled(faceMask, VK_STENCIL_FACE_BACK_BIT)) {
         _depthStencilData.backFaceStencilData.readMask = stencilCompareMask;
     }
 
@@ -289,10 +302,10 @@
     if ( !(_cmdEncoder->supportsDynamicState(VK_DYNAMIC_STATE_STENCIL_WRITE_MASK) &&
            mvkIsAnyFlagEnabled(faceMask, VK_STENCIL_FRONT_AND_BACK)) ) { return; }
 
-    if (mvkAreFlagsEnabled(faceMask, VK_STENCIL_FACE_FRONT_BIT)) {
+    if (mvkAreAllFlagsEnabled(faceMask, VK_STENCIL_FACE_FRONT_BIT)) {
         _depthStencilData.frontFaceStencilData.writeMask = stencilWriteMask;
     }
-    if (mvkAreFlagsEnabled(faceMask, VK_STENCIL_FACE_BACK_BIT)) {
+    if (mvkAreAllFlagsEnabled(faceMask, VK_STENCIL_FACE_BACK_BIT)) {
         _depthStencilData.backFaceStencilData.writeMask = stencilWriteMask;
     }
 
@@ -342,10 +355,10 @@
     if ( !(_cmdEncoder->supportsDynamicState(VK_DYNAMIC_STATE_STENCIL_REFERENCE) &&
            mvkIsAnyFlagEnabled(faceMask, VK_STENCIL_FRONT_AND_BACK)) ) { return; }
 
-    if (mvkAreFlagsEnabled(faceMask, VK_STENCIL_FACE_FRONT_BIT)) {
+    if (mvkAreAllFlagsEnabled(faceMask, VK_STENCIL_FACE_FRONT_BIT)) {
         _frontFaceValue = stencilReference;
     }
-    if (mvkAreFlagsEnabled(faceMask, VK_STENCIL_FACE_BACK_BIT)) {
+    if (mvkAreAllFlagsEnabled(faceMask, VK_STENCIL_FACE_BACK_BIT)) {
         _backFaceValue = stencilReference;
     }
 
@@ -793,7 +806,7 @@
     NSUInteger offset = pQueryPool->getVisibilityResultOffset(query);
     NSUInteger maxOffset = _cmdEncoder->_pDeviceMetalFeatures->maxQueryBufferSize - kMVKQuerySlotSizeInBytes;
 
-    bool shouldCount = _cmdEncoder->_pDeviceFeatures->occlusionQueryPrecise && mvkAreFlagsEnabled(flags, VK_QUERY_CONTROL_PRECISE_BIT);
+    bool shouldCount = _cmdEncoder->_pDeviceFeatures->occlusionQueryPrecise && mvkAreAllFlagsEnabled(flags, VK_QUERY_CONTROL_PRECISE_BIT);
     _mtlVisibilityResultMode = shouldCount ? MTLVisibilityResultModeCounting : MTLVisibilityResultModeBoolean;
     _mtlVisibilityResultOffset = min(offset, maxOffset);
 
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandPool.mm b/MoltenVK/MoltenVK/Commands/MVKCommandPool.mm
index 3bdb118..1c5d51e 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandPool.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandPool.mm
@@ -33,7 +33,7 @@
 
 // Reset all of the command buffers
 VkResult MVKCommandPool::reset(VkCommandPoolResetFlags flags) {
-	bool releaseRez = mvkAreFlagsEnabled(flags, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
+	bool releaseRez = mvkAreAllFlagsEnabled(flags, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
 
 	VkCommandBufferResetFlags cmdBuffFlags = releaseRez ? VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT : 0;
 
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.h b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.h
index 55bef82..a14e2de 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.h
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.h
@@ -35,25 +35,38 @@
  * This structure can be used as a key in a std::map and std::unordered_map.
  */
 typedef struct MVKRPSKeyBlitImg_t {
-	uint16_t mtlPixFmt = 0;			/**< MTLPixelFormat */
-	uint16_t mtlTexType = 0;		/**< MTLTextureType */
+	uint16_t srcMTLPixelFormat = 0;			/**< as MTLPixelFormat */
+	uint16_t srcMTLTextureType = 0;			/**< as MTLTextureType */
+	uint16_t dstMTLPixelFormat = 0;			/**< as MTLPixelFormat */
+	uint16_t dstSampleCount = 0;
 
 	bool operator==(const MVKRPSKeyBlitImg_t& rhs) const {
-		return ((mtlPixFmt == rhs.mtlPixFmt) && (mtlTexType == rhs.mtlTexType));
+		if (srcMTLPixelFormat != rhs.srcMTLPixelFormat) { return false; }
+		if (srcMTLTextureType != rhs.srcMTLTextureType) { return false; }
+		if (dstMTLPixelFormat != rhs.dstMTLPixelFormat) { return false; }
+		if (dstSampleCount != rhs.dstSampleCount) { return false; }
+		return true;
 	}
 
-	inline MTLPixelFormat getMTLPixelFormat() { return (MTLPixelFormat)mtlPixFmt; }
+	inline MTLPixelFormat getSrcMTLPixelFormat() { return (MTLPixelFormat)srcMTLPixelFormat; }
 
-	inline bool isDepthFormat() { return mvkMTLPixelFormatIsDepthFormat(getMTLPixelFormat()); }
+	inline MTLPixelFormat getDstMTLPixelFormat() { return (MTLPixelFormat)dstMTLPixelFormat; }
 
-	inline MTLTextureType getMTLTextureType() { return (MTLTextureType)mtlTexType; }
-
-	inline bool isArrayType() { return (mtlTexType == MTLTextureType2DArray) || (mtlTexType == MTLTextureType1DArray); }
+	inline bool isSrcArrayType() {
+		return (srcMTLTextureType == MTLTextureType2DArray ||
+#if MVK_MACOS
+				srcMTLTextureType == MTLTextureType2DMultisampleArray ||
+#endif
+				srcMTLTextureType == MTLTextureType1DArray); }
 
 	std::size_t hash() const {
-		std::size_t hash = mtlTexType;
+		std::size_t hash = srcMTLPixelFormat;
 		hash <<= 16;
-		hash |= mtlPixFmt;
+		hash |= srcMTLTextureType;
+		hash <<= 16;
+		hash |= dstMTLPixelFormat;
+		hash <<= 16;
+		hash |= dstSampleCount;
 		return hash;
 	}
 
@@ -344,8 +357,8 @@
      */
     id<MTLDepthStencilState> newMTLDepthStencilState(MVKMTLDepthStencilDescriptorData& dsData);
 
-    /** Returns an autoreleased MTLStencilDescriptor constructed from the stencil data. */
-    MTLStencilDescriptor* getMTLStencilDescriptor(MVKMTLStencilDescriptorData& sData);
+    /** Returns an retained MTLStencilDescriptor constructed from the stencil data. */
+    MTLStencilDescriptor* newMTLStencilDescriptor(MVKMTLStencilDescriptorData& sData);
 
     /**
      * Returns a new MVKImage configured with content held in Private storage.
@@ -392,15 +405,15 @@
 protected:
 	void initMTLLibrary();
 	void initImageDeviceMemory();
-	id<MTLFunction> getBlitFragFunction(MVKRPSKeyBlitImg& blitKey);
-	id<MTLFunction> getClearVertFunction(MVKRPSKeyClearAtt& attKey);
-	id<MTLFunction> getClearFragFunction(MVKRPSKeyClearAtt& attKey);
+	id<MTLFunction> newBlitFragFunction(MVKRPSKeyBlitImg& blitKey);
+	id<MTLFunction> newClearVertFunction(MVKRPSKeyClearAtt& attKey);
+	id<MTLFunction> newClearFragFunction(MVKRPSKeyClearAtt& attKey);
 	NSString* getMTLFormatTypeString(MTLPixelFormat mtlPixFmt);
-    id<MTLFunction> getFunctionNamed(const char* funcName);
+    id<MTLFunction> newFunctionNamed(const char* funcName);
 	id<MTLFunction> newMTLFunction(NSString* mslSrcCode, NSString* funcName);
 	id<MTLRenderPipelineState> newMTLRenderPipelineState(MTLRenderPipelineDescriptor* plDesc,
 														 MVKVulkanAPIDeviceObject* owner);
-	id<MTLComputePipelineState> newMTLComputePipelineState(id<MTLFunction> mtlFunction,
+	id<MTLComputePipelineState> newMTLComputePipelineState(const char* funcName,
 														   MVKVulkanAPIDeviceObject* owner);
 
 	id<MTLLibrary> _mtlLibrary;
diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm
index 29d56a7..20b6f32 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCommandResourceFactory.mm
@@ -33,13 +33,16 @@
 
 id<MTLRenderPipelineState> MVKCommandResourceFactory::newCmdBlitImageMTLRenderPipelineState(MVKRPSKeyBlitImg& blitKey,
 																							MVKVulkanAPIDeviceObject* owner) {
-    MTLRenderPipelineDescriptor* plDesc = [[[MTLRenderPipelineDescriptor alloc] init] autorelease];
+	id<MTLFunction> vtxFunc = newFunctionNamed("vtxCmdBlitImage");				// temp retain
+	id<MTLFunction> fragFunc = newBlitFragFunction(blitKey);					// temp retain
+    MTLRenderPipelineDescriptor* plDesc = [MTLRenderPipelineDescriptor new];	// temp retain
     plDesc.label = @"CmdBlitImage";
 
-	plDesc.vertexFunction = getFunctionNamed("vtxCmdBlitImage");
-    plDesc.fragmentFunction = getBlitFragFunction(blitKey);
+	plDesc.vertexFunction = vtxFunc;
+	plDesc.fragmentFunction = fragFunc;
+	plDesc.sampleCount = blitKey.dstSampleCount;
 
-	plDesc.colorAttachments[0].pixelFormat = blitKey.getMTLPixelFormat();
+	plDesc.colorAttachments[0].pixelFormat = blitKey.getDstMTLPixelFormat();
 
     MTLVertexDescriptor* vtxDesc = plDesc.vertexDescriptor;
 
@@ -70,12 +73,18 @@
     vbDesc.stepRate = 1;
     vbDesc.stride = vtxStride;
 
-    return newMTLRenderPipelineState(plDesc, owner);
+    id<MTLRenderPipelineState> rps = newMTLRenderPipelineState(plDesc, owner);
+
+	[vtxFunc release];															// temp release
+	[fragFunc release];															// temp release
+	[plDesc release];															// temp release
+
+	return rps;
 }
 
 id<MTLSamplerState> MVKCommandResourceFactory::newCmdBlitImageMTLSamplerState(MTLSamplerMinMagFilter mtlFilter) {
 
-    MTLSamplerDescriptor* sDesc = [[[MTLSamplerDescriptor alloc] init] autorelease];
+    MTLSamplerDescriptor* sDesc = [MTLSamplerDescriptor new];					// temp retain
     sDesc.rAddressMode = MTLSamplerAddressModeClampToZero;
     sDesc.sAddressMode = MTLSamplerAddressModeClampToZero;
     sDesc.tAddressMode = MTLSamplerAddressModeClampToZero;
@@ -83,15 +92,22 @@
     sDesc.normalizedCoordinates = YES;
     sDesc.minFilter = mtlFilter;
     sDesc.magFilter = mtlFilter;
-    return [getMTLDevice() newSamplerStateWithDescriptor: sDesc];
+
+	id<MTLSamplerState> ss = [getMTLDevice() newSamplerStateWithDescriptor: sDesc];
+
+	[sDesc release];															// temp release
+
+	return ss;
 }
 
 id<MTLRenderPipelineState> MVKCommandResourceFactory::newCmdClearMTLRenderPipelineState(MVKRPSKeyClearAtt& attKey,
 																						MVKVulkanAPIDeviceObject* owner) {
-    MTLRenderPipelineDescriptor* plDesc = [[[MTLRenderPipelineDescriptor alloc] init] autorelease];
+	id<MTLFunction> vtxFunc = newClearVertFunction(attKey);						// temp retain
+	id<MTLFunction> fragFunc = newClearFragFunction(attKey);					// temp retain
+	MTLRenderPipelineDescriptor* plDesc = [MTLRenderPipelineDescriptor new];	// temp retain
     plDesc.label = @"CmdClearAttachments";
-	plDesc.vertexFunction = getClearVertFunction(attKey);
-    plDesc.fragmentFunction = getClearFragFunction(attKey);
+	plDesc.vertexFunction = vtxFunc;
+    plDesc.fragmentFunction = fragFunc;
 	plDesc.sampleCount = attKey.mtlSampleCount;
 	plDesc.inputPrimitiveTopologyMVK = MTLPrimitiveTopologyClassTriangle;
 
@@ -126,19 +142,23 @@
     vbDesc.stepRate = 1;
     vbDesc.stride = vtxStride;
 
-    return newMTLRenderPipelineState(plDesc, owner);
+	id<MTLRenderPipelineState> rps = newMTLRenderPipelineState(plDesc, owner);
+
+	[vtxFunc release];															// temp release
+	[fragFunc release];															// temp release
+	[plDesc release];															// temp release
+
+	return rps;
 }
 
-id<MTLFunction> MVKCommandResourceFactory::getBlitFragFunction(MVKRPSKeyBlitImg& blitKey) {
-	id<MTLFunction> mtlFunc = nil;
-
-	NSString* typeStr = getMTLFormatTypeString(blitKey.getMTLPixelFormat());
-
-	bool isArrayType = blitKey.isArrayType();
-	NSString* arraySuffix = isArrayType ? @"_array" : @"";
-	NSString* sliceArg = isArrayType ? @", blitInfo.srcSlice" : @"";
-
+id<MTLFunction> MVKCommandResourceFactory::newBlitFragFunction(MVKRPSKeyBlitImg& blitKey) {
 	@autoreleasepool {
+		NSString* typeStr = getMTLFormatTypeString(blitKey.getSrcMTLPixelFormat());
+
+		bool isArrayType = blitKey.isSrcArrayType();
+		NSString* arraySuffix = isArrayType ? @"_array" : @"";
+		NSString* sliceArg = isArrayType ? @", srcSlice" : @"";
+
 		NSMutableString* msl = [NSMutableString stringWithCapacity: (2 * KIBI) ];
 		[msl appendLineMVK: @"#include <metal_stdlib>"];
 		[msl appendLineMVK: @"using namespace metal;"];
@@ -148,39 +168,25 @@
 		[msl appendLineMVK: @"    float2 v_texCoord;"];
 		[msl appendLineMVK: @"} VaryingsPosTex;"];
 		[msl appendLineMVK];
-		if (isArrayType) {
-			[msl appendLineMVK: @"typedef struct {"];
-			[msl appendLineMVK: @"    uint srcLevel;"];
-			[msl appendLineMVK: @"    uint srcSlice;"];
-			[msl appendLineMVK: @"    uint dstLevel;"];
-			[msl appendLineMVK: @"    uint dstSlice;"];
-			[msl appendLineMVK: @"} BlitInfo;"];
-			[msl appendLineMVK];
-		}
 
 		NSString* funcName = @"fragBlit";
 		[msl appendFormat: @"fragment %@4 %@(VaryingsPosTex varyings [[stage_in]],", typeStr, funcName];
 		[msl appendLineMVK];
 		[msl appendFormat: @"                         texture2d%@<%@> texture [[texture(0)]],", arraySuffix, typeStr];
 		[msl appendLineMVK];
-		if (isArrayType) {
-			[msl appendLineMVK: @"                         sampler sampler [[sampler(0)]],"];
-			[msl appendLineMVK: @"                         constant BlitInfo& blitInfo [[buffer(0)]]) {"];
-		} else {
-			[msl appendLineMVK: @"                         sampler sampler [[sampler(0)]]) {"];
-		}
+		[msl appendLineMVK: @"                         sampler sampler [[sampler(0)]],"];
+		[msl appendLineMVK: @"                         constant uint& srcSlice [[buffer(0)]]) {"];
 		[msl appendFormat: @"    return texture.sample(sampler, varyings.v_texCoord%@);", sliceArg];
 		[msl appendLineMVK];
 		[msl appendLineMVK: @"}"];
 
-		mtlFunc = newMTLFunction(msl, funcName);
 //		MVKLogDebug("\n%s", msl.UTF8String);
+
+		return newMTLFunction(msl, funcName);
 	}
-	return [mtlFunc autorelease];
 }
 
-id<MTLFunction> MVKCommandResourceFactory::getClearVertFunction(MVKRPSKeyClearAtt& attKey) {
-	id<MTLFunction> mtlFunc = nil;
+id<MTLFunction> MVKCommandResourceFactory::newClearVertFunction(MVKRPSKeyClearAtt& attKey) {
 	@autoreleasepool {
 		NSMutableString* msl = [NSMutableString stringWithCapacity: (2 * KIBI) ];
 		[msl appendLineMVK: @"#include <metal_stdlib>"];
@@ -209,14 +215,13 @@
 		[msl appendLineMVK: @"    return varyings;"];
 		[msl appendLineMVK: @"}"];
 
-		mtlFunc = newMTLFunction(msl, funcName);
 //		MVKLogDebug("\n%s", msl.UTF8String);
+
+		return newMTLFunction(msl, funcName);
 	}
-	return [mtlFunc autorelease];
 }
 
-id<MTLFunction> MVKCommandResourceFactory::getClearFragFunction(MVKRPSKeyClearAtt& attKey) {
-	id<MTLFunction> mtlFunc = nil;
+id<MTLFunction> MVKCommandResourceFactory::newClearFragFunction(MVKRPSKeyClearAtt& attKey) {
 	@autoreleasepool {
 		NSMutableString* msl = [NSMutableString stringWithCapacity: (2 * KIBI) ];
 		[msl appendLineMVK: @"#include <metal_stdlib>"];
@@ -255,10 +260,10 @@
 		[msl appendLineMVK: @"    return ccOut;"];
 		[msl appendLineMVK: @"}"];
 
-		mtlFunc = newMTLFunction(msl, funcName);
 //		MVKLogDebug("\n%s", msl.UTF8String);
+
+		return newMTLFunction(msl, funcName);
 	}
-	return [mtlFunc autorelease];
 }
 
 NSString* MVKCommandResourceFactory::getMTLFormatTypeString(MTLPixelFormat mtlPixFmt) {
@@ -277,12 +282,12 @@
 
 id<MTLDepthStencilState> MVKCommandResourceFactory::newMTLDepthStencilState(bool useDepth, bool useStencil) {
 
-	MTLDepthStencilDescriptor* dsDesc = [[[MTLDepthStencilDescriptor alloc] init] autorelease];
+	MTLDepthStencilDescriptor* dsDesc = [MTLDepthStencilDescriptor new];	// temp retain
 	dsDesc.depthCompareFunction = MTLCompareFunctionAlways;
 	dsDesc.depthWriteEnabled = useDepth;
 
 	if (useStencil) {
-		MTLStencilDescriptor* sDesc = [[[MTLStencilDescriptor alloc] init] autorelease];
+		MTLStencilDescriptor* sDesc = [MTLStencilDescriptor new];			// temp retain
 		sDesc.stencilCompareFunction = MTLCompareFunctionAlways;
 		sDesc.stencilFailureOperation = MTLStencilOperationReplace;
 		sDesc.depthFailureOperation = MTLStencilOperationReplace;
@@ -290,28 +295,42 @@
 
 		dsDesc.frontFaceStencil = sDesc;
 		dsDesc.backFaceStencil = sDesc;
+
+		[sDesc release];													// temp release
 	} else {
 		dsDesc.frontFaceStencil = nil;
 		dsDesc.backFaceStencil = nil;
 	}
 
-	return [getMTLDevice() newDepthStencilStateWithDescriptor: dsDesc];
+	id<MTLDepthStencilState> dss = [getMTLDevice() newDepthStencilStateWithDescriptor: dsDesc];
+
+	[dsDesc release];														// temp release
+
+	return dss;
 }
 
 id<MTLDepthStencilState> MVKCommandResourceFactory::newMTLDepthStencilState(MVKMTLDepthStencilDescriptorData& dsData) {
-    MTLDepthStencilDescriptor* dsDesc = [[[MTLDepthStencilDescriptor alloc] init] autorelease];
+	MTLStencilDescriptor* fsDesc = newMTLStencilDescriptor(dsData.frontFaceStencilData);	// temp retain
+	MTLStencilDescriptor* bsDesc = newMTLStencilDescriptor(dsData.backFaceStencilData);		// temp retain
+	MTLDepthStencilDescriptor* dsDesc = [MTLDepthStencilDescriptor new];					// temp retain
     dsDesc.depthCompareFunction = (MTLCompareFunction)dsData.depthCompareFunction;
     dsDesc.depthWriteEnabled = dsData.depthWriteEnabled;
-    dsDesc.frontFaceStencil = getMTLStencilDescriptor(dsData.frontFaceStencilData);
-    dsDesc.backFaceStencil = getMTLStencilDescriptor(dsData.backFaceStencilData);
+	dsDesc.frontFaceStencil = fsDesc;
+    dsDesc.backFaceStencil = bsDesc;
 
-    return [getMTLDevice() newDepthStencilStateWithDescriptor: dsDesc];
+	id<MTLDepthStencilState> dss = [getMTLDevice() newDepthStencilStateWithDescriptor: dsDesc];
+
+	[fsDesc release];																		// temp release
+	[bsDesc release];																		// temp release
+	[dsDesc release];																		// temp release
+
+	return dss;
 }
 
-MTLStencilDescriptor* MVKCommandResourceFactory::getMTLStencilDescriptor(MVKMTLStencilDescriptorData& sData) {
+MTLStencilDescriptor* MVKCommandResourceFactory::newMTLStencilDescriptor(MVKMTLStencilDescriptorData& sData) {
     if ( !sData.enabled ) { return nil; }
 
-    MTLStencilDescriptor* sDesc = [[[MTLStencilDescriptor alloc] init] autorelease];
+    MTLStencilDescriptor* sDesc = [MTLStencilDescriptor new];		// retained
     sDesc.stencilCompareFunction = (MTLCompareFunction)sData.stencilCompareFunction;
     sDesc.stencilFailureOperation = (MTLStencilOperation)sData.stencilFailureOperation;
     sDesc.depthFailureOperation = (MTLStencilOperation)sData.depthFailureOperation;
@@ -374,66 +393,75 @@
 }
 
 id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdCopyBufferBytesMTLComputePipelineState(MVKVulkanAPIDeviceObject* owner) {
-	return newMTLComputePipelineState(getFunctionNamed("cmdCopyBufferBytes"), owner);
+	return newMTLComputePipelineState("cmdCopyBufferBytes", owner);
 }
 
 id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdFillBufferMTLComputePipelineState(MVKVulkanAPIDeviceObject* owner) {
-	return newMTLComputePipelineState(getFunctionNamed("cmdFillBuffer"), owner);
+	return newMTLComputePipelineState("cmdFillBuffer", owner);
 }
 
 id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdCopyBufferToImage3DDecompressMTLComputePipelineState(bool needTempBuf,
 																												  MVKVulkanAPIDeviceObject* owner) {
-	return newMTLComputePipelineState(getFunctionNamed(needTempBuf
-													   ? "cmdCopyBufferToImage3DDecompressTempBufferDXTn"
-													   : "cmdCopyBufferToImage3DDecompressDXTn"), owner);
+	return newMTLComputePipelineState(needTempBuf
+									  ? "cmdCopyBufferToImage3DDecompressTempBufferDXTn"
+									  : "cmdCopyBufferToImage3DDecompressDXTn", owner);
 }
 
 id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdDrawIndirectConvertBuffersMTLComputePipelineState(bool indexed,
 																											   MVKVulkanAPIDeviceObject* owner) {
-	return newMTLComputePipelineState(getFunctionNamed(indexed
-													   ? "cmdDrawIndexedIndirectConvertBuffers"
-													   : "cmdDrawIndirectConvertBuffers"), owner);
+	return newMTLComputePipelineState(indexed
+									  ? "cmdDrawIndexedIndirectConvertBuffers"
+									  : "cmdDrawIndirectConvertBuffers", owner);
 }
 
 id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdDrawIndexedCopyIndexBufferMTLComputePipelineState(MTLIndexType type,
 																											   MVKVulkanAPIDeviceObject* owner) {
-	return newMTLComputePipelineState(getFunctionNamed(type == MTLIndexTypeUInt16
-													   ? "cmdDrawIndexedCopyIndex16Buffer"
-													   : "cmdDrawIndexedCopyIndex32Buffer"), owner);
+	return newMTLComputePipelineState(type == MTLIndexTypeUInt16
+									  ? "cmdDrawIndexedCopyIndex16Buffer"
+									  : "cmdDrawIndexedCopyIndex32Buffer", owner);
 }
 
 id<MTLComputePipelineState> MVKCommandResourceFactory::newCmdCopyQueryPoolResultsMTLComputePipelineState(MVKVulkanAPIDeviceObject* owner) {
-	return newMTLComputePipelineState(getFunctionNamed("cmdCopyQueryPoolResultsToBuffer"), owner);
+	return newMTLComputePipelineState("cmdCopyQueryPoolResultsToBuffer", owner);
 }
 
 
 #pragma mark Support methods
 
-id<MTLFunction> MVKCommandResourceFactory::getFunctionNamed(const char* funcName) {
-    uint64_t startTime = _device->getPerformanceTimestamp();
-    id<MTLFunction> mtlFunc = [[_mtlLibrary newFunctionWithName: @(funcName)] autorelease];
-    _device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.functionRetrieval, startTime);
-    return mtlFunc;
+// Returns the retained MTLFunction with the name.
+// The caller is responsible for releasing the returned function object.
+id<MTLFunction> MVKCommandResourceFactory::newFunctionNamed(const char* funcName) {
+	uint64_t startTime = _device->getPerformanceTimestamp();
+	NSString* nsFuncName = [[NSString alloc] initWithUTF8String: funcName];		// temp retained
+	id<MTLFunction> mtlFunc = [_mtlLibrary newFunctionWithName: nsFuncName];	// retained
+	[nsFuncName release];														// temp release
+	_device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.functionRetrieval, startTime);
+	return mtlFunc;
 }
 
 id<MTLFunction> MVKCommandResourceFactory::newMTLFunction(NSString* mslSrcCode, NSString* funcName) {
 	@autoreleasepool {
+		id<MTLFunction> mtlFunc = nil;
 		NSError* err = nil;
+
 		uint64_t startTime = _device->getPerformanceTimestamp();
-		id<MTLLibrary> mtlLib = [[getMTLDevice() newLibraryWithSource: mslSrcCode
-															  options: getDevice()->getMTLCompileOptions()
-																error: &err] autorelease];
+		id<MTLLibrary> mtlLib = [getMTLDevice() newLibraryWithSource: mslSrcCode
+															 options: getDevice()->getMTLCompileOptions()
+															   error: &err];	// temp retain
 		_device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.mslCompile, startTime);
+
 		if (err) {
 			reportError(VK_ERROR_INITIALIZATION_FAILED,
 						"Could not compile support shader from MSL source (Error code %li):\n%s\n%s",
 						(long)err.code, mslSrcCode.UTF8String, err.localizedDescription.UTF8String);
-			return nil;
+		} else {
+			startTime = _device->getPerformanceTimestamp();
+			mtlFunc = [mtlLib newFunctionWithName: funcName];
+			_device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.functionRetrieval, startTime);
 		}
 
-		startTime = _device->getPerformanceTimestamp();
-		id<MTLFunction> mtlFunc = [mtlLib newFunctionWithName: funcName];
-		_device->addActivityPerformance(_device->_performanceStatistics.shaderCompilation.functionRetrieval, startTime);
+		[mtlLib release];														// temp release
+
 		return mtlFunc;
 	}
 }
@@ -446,11 +474,13 @@
     return rps;
 }
 
-id<MTLComputePipelineState> MVKCommandResourceFactory::newMTLComputePipelineState(id<MTLFunction> mtlFunction,
+id<MTLComputePipelineState> MVKCommandResourceFactory::newMTLComputePipelineState(const char* funcName,
 																				  MVKVulkanAPIDeviceObject* owner) {
+	id<MTLFunction> mtlFunc = newFunctionNamed(funcName);							// temp retain
 	MVKComputePipelineCompiler* plc = new MVKComputePipelineCompiler(owner);
-	id<MTLComputePipelineState> cps = plc->newMTLComputePipelineState(mtlFunction);		// retained
+	id<MTLComputePipelineState> cps = plc->newMTLComputePipelineState(mtlFunc);		// retained
 	plc->destroy();
+	[mtlFunc release];																// temp release
     return cps;
 }
 
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm b/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm
index 18da46f..ee23a31 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm
@@ -45,6 +45,12 @@
 	pMemoryRequirements->size = getByteCount();
 	pMemoryRequirements->alignment = _byteAlignment;
 	pMemoryRequirements->memoryTypeBits = _device->getPhysicalDevice()->getAllMemoryTypes();
+#if MVK_MACOS
+	// Textures must not use shared memory
+	if (mvkIsAnyFlagEnabled(_usage, VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)) {
+		mvkDisableFlag(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getHostCoherentMemoryTypes());
+	}
+#endif
 #if MVK_IOS
 	// Memoryless storage is not allowed for buffers
 	mvkDisableFlag(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getLazilyAllocatedMemoryTypes());
@@ -156,24 +162,25 @@
 		lock_guard<mutex> lock(_lock);
 		if (_mtlTexture) { return _mtlTexture; }
 
-        MTLTextureDescriptor* mtlTexDesc = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat: _mtlPixelFormat
-                                                                                              width: _textureSize.width
-                                                                                             height: _textureSize.height
-                                                                                          mipmapped: NO];
-#if MVK_MACOS
-        // Textures on Mac cannot use shared storage, so force managed.
-        if (_buffer->getMTLBuffer().storageMode == MTLStorageModeShared) {
-            mtlTexDesc.storageMode = MTLStorageModeManaged;
-        } else {
-            mtlTexDesc.storageMode = _buffer->getMTLBuffer().storageMode;
-        }
-#else
-        mtlTexDesc.storageMode = _buffer->getMTLBuffer().storageMode;
-#endif
-        mtlTexDesc.cpuCacheMode = _buffer->getMTLBuffer().cpuCacheMode;
-        mtlTexDesc.usage = MTLTextureUsageShaderRead;
+        MTLTextureUsage usage = MTLTextureUsageShaderRead;
         if ( mvkIsAnyFlagEnabled(_buffer->getUsage(), VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) ) {
-            mtlTexDesc.usage |= MTLTextureUsageShaderWrite;
+            usage |= MTLTextureUsageShaderWrite;
+        }
+        id<MTLBuffer> mtlBuff = _buffer->getMTLBuffer();
+        MTLTextureDescriptor* mtlTexDesc;
+        if ( _device->_pMetalFeatures->textureBuffers ) {
+            mtlTexDesc = [MTLTextureDescriptor textureBufferDescriptorWithPixelFormat: _mtlPixelFormat
+                                                                                width: _textureSize.width
+                                                                      resourceOptions: (mtlBuff.cpuCacheMode << MTLResourceCPUCacheModeShift) | (mtlBuff.storageMode << MTLResourceStorageModeShift)
+                                                                                usage: usage];
+        } else {
+            mtlTexDesc = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat: _mtlPixelFormat
+                                                                            width: _textureSize.width
+                                                                           height: _textureSize.height
+                                                                        mipmapped: NO];
+            mtlTexDesc.storageMode = mtlBuff.storageMode;
+            mtlTexDesc.cpuCacheMode = mtlBuff.cpuCacheMode;
+            mtlTexDesc.usage = usage;
         }
 		_mtlTexture = [_buffer->getMTLBuffer() newTextureWithDescriptor: mtlTexDesc
 																 offset: _mtlBufferOffset
@@ -199,17 +206,25 @@
     if (byteCount == VK_WHOLE_SIZE) { byteCount = _buffer->getByteCount() - pCreateInfo->offset; }    // Remaining bytes in buffer
     size_t blockCount = byteCount / bytesPerBlock;
 
-	// But Metal requires the texture to be a 2D texture. Determine the number of 2D rows we need and their width.
-	// Multiple rows will automatically align with PoT max texture dimension, but need to align upwards if less than full single row.
-	size_t maxBlocksPerRow = _device->_pMetalFeatures->maxTextureDimension / fmtBlockSize.width;
-	size_t blocksPerRow = min(blockCount, maxBlocksPerRow);
-	_mtlBytesPerRow = mvkAlignByteOffset(blocksPerRow * bytesPerBlock, _device->getVkFormatTexelBufferAlignment(pCreateInfo->format, this));
+	if ( !_device->_pMetalFeatures->textureBuffers ) {
+		// But Metal requires the texture to be a 2D texture. Determine the number of 2D rows we need and their width.
+		// Multiple rows will automatically align with PoT max texture dimension, but need to align upwards if less than full single row.
+		size_t maxBlocksPerRow = _device->_pMetalFeatures->maxTextureDimension / fmtBlockSize.width;
+		size_t blocksPerRow = min(blockCount, maxBlocksPerRow);
+		_mtlBytesPerRow = mvkAlignByteOffset(blocksPerRow * bytesPerBlock, _device->getVkFormatTexelBufferAlignment(pCreateInfo->format, this));
 
-	size_t rowCount = blockCount / blocksPerRow;
-	if (blockCount % blocksPerRow) { rowCount++; }
+		size_t rowCount = blockCount / blocksPerRow;
+		if (blockCount % blocksPerRow) { rowCount++; }
 
-	_textureSize.width = uint32_t(blocksPerRow * fmtBlockSize.width);
-	_textureSize.height = uint32_t(rowCount * fmtBlockSize.height);
+		_textureSize.width = uint32_t(blocksPerRow * fmtBlockSize.width);
+		_textureSize.height = uint32_t(rowCount * fmtBlockSize.height);
+	} else {
+		// With native texture buffers we don't need to bother with any of that.
+		// We can just use a simple 1D texel array.
+		_textureSize.width = uint32_t(blockCount * fmtBlockSize.width);
+		_textureSize.height = 1;
+		_mtlBytesPerRow = byteCount;
+	}
 
     if ( !_device->_pMetalFeatures->texelBuffers ) {
         setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "Texel buffers are not supported on this device."));
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h
index 755199e..6bd5ae8 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.h
@@ -93,7 +93,7 @@
               MVKShaderResourceBinding& dslMTLRezIdxOffsets);
 
 	/** Populates the specified shader converter context, at the specified descriptor set binding. */
-	void populateShaderConverterContext(mvk::SPIRVToMSLConverterContext& context,
+	void populateShaderConverterContext(mvk::SPIRVToMSLConversionConfiguration& context,
                                         MVKShaderResourceBinding& dslMTLRezIdxOffsets,
                                         uint32_t dslIndex);
 
@@ -160,27 +160,32 @@
 
 
 	/** Populates the specified shader converter context, at the specified DSL index. */
-	void populateShaderConverterContext(mvk::SPIRVToMSLConverterContext& context,
+	void populateShaderConverterContext(mvk::SPIRVToMSLConversionConfiguration& context,
                                         MVKShaderResourceBinding& dslMTLRezIdxOffsets,
                                         uint32_t dslIndex);
 
 	/** Returns true if this layout is for push descriptors only. */
 	bool isPushDescriptorLayout() const { return _isPushDescriptorLayout; }
 
-	/** Constructs an instance for the specified device. */
 	MVKDescriptorSetLayout(MVKDevice* device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo);
 
+	~MVKDescriptorSetLayout();
+
 protected:
 
 	friend class MVKDescriptorSetLayoutBinding;
 	friend class MVKPipelineLayout;
 	friend class MVKDescriptorSet;
+	friend class MVKDescriptorPool;
 
 	void propogateDebugName() override {}
-	
+	void addDescriptorPool(MVKDescriptorPool* mvkDescPool) { _descriptorPools.insert(mvkDescPool); }
+	void removeDescriptorPool(MVKDescriptorPool* mvkDescPool) { _descriptorPools.erase(mvkDescPool); }
+
 	MVKVectorInline<MVKDescriptorSetLayoutBinding, 8> _bindings;
 	std::unordered_map<uint32_t, uint32_t> _bindingToIndex;
 	MVKShaderResourceBinding _mtlResourceCounts;
+	std::unordered_set<MVKDescriptorPool*> _descriptorPools;
 	bool _isPushDescriptorLayout : 1;
 };
 
@@ -357,6 +362,9 @@
 	/** Destoys all currently allocated descriptor sets. */
 	VkResult reset(VkDescriptorPoolResetFlags flags);
 
+	/** Removes the pool associated with a descriptor set layout. */
+	void removeDescriptorSetPool(MVKDescriptorSetLayout* mvkDescSetLayout);
+
 	/** Constructs an instance for the specified device. */
 	MVKDescriptorPool(MVKDevice* device, const VkDescriptorPoolCreateInfo* pCreateInfo);
 
@@ -366,6 +374,7 @@
 protected:
 	void propogateDebugName() override {}
 	MVKDescriptorSetPool* getDescriptorSetPool(MVKDescriptorSetLayout* mvkDescSetLayout);
+	void returnDescriptorSet(MVKDescriptorSet* mvkDescSet);
 
 	uint32_t _maxSets;
 	std::unordered_set<MVKDescriptorSet*> _allocatedSets;
@@ -427,7 +436,7 @@
  * If the shader stage binding has a binding defined for the specified stage, populates
  * the context at the descriptor set binding from the shader stage resource binding.
  */
-void mvkPopulateShaderConverterContext(mvk::SPIRVToMSLConverterContext& context,
+void mvkPopulateShaderConverterContext(mvk::SPIRVToMSLConversionConfiguration& context,
 									   MVKShaderStageResourceBinding& ssRB,
 									   spv::ExecutionModel stage,
 									   uint32_t descriptorSetIndex,
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm
index 93ab0ae..1f97ac0 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDescriptorSet.mm
@@ -375,7 +375,7 @@
 	return true;
 }
 
-void MVKDescriptorSetLayoutBinding::populateShaderConverterContext(SPIRVToMSLConverterContext& context,
+void MVKDescriptorSetLayoutBinding::populateShaderConverterContext(SPIRVToMSLConversionConfiguration& context,
                                                                    MVKShaderResourceBinding& dslMTLRezIdxOffsets,
                                                                    uint32_t dslIndex) {
 
@@ -409,7 +409,7 @@
 
 	for (uint32_t i = kMVKShaderStageVertex; i < kMVKShaderStageMax; i++) {
         // Determine if this binding is used by this shader stage
-        _applyToStage[i] = mvkAreFlagsEnabled(pBinding->stageFlags, mvkVkShaderStageFlagBitsFromMVKShaderStage(MVKShaderStage(i)));
+        _applyToStage[i] = mvkAreAllFlagsEnabled(pBinding->stageFlags, mvkVkShaderStageFlagBitsFromMVKShaderStage(MVKShaderStage(i)));
 	    // If this binding is used by the shader, set the Metal resource index
         if (_applyToStage[i]) {
             initMetalResourceIndexOffsets(&_mtlResourceIndexOffsets.stages[i],
@@ -632,7 +632,7 @@
     }
 }
 
-void MVKDescriptorSetLayout::populateShaderConverterContext(SPIRVToMSLConverterContext& context,
+void MVKDescriptorSetLayout::populateShaderConverterContext(SPIRVToMSLConversionConfiguration& context,
                                                             MVKShaderResourceBinding& dslMTLRezIdxOffsets,
 															uint32_t dslIndex) {
 	uint32_t bindCnt = (uint32_t)_bindings.size();
@@ -652,6 +652,10 @@
     }
 }
 
+MVKDescriptorSetLayout::~MVKDescriptorSetLayout() {
+	for (auto& dsPool : _descriptorPools) { dsPool->removeDescriptorSetPool(this); }
+}
+
 
 #pragma mark -
 #pragma mark MVKDescriptorBinding
@@ -1021,41 +1025,66 @@
 VkResult MVKDescriptorPool::freeDescriptorSets(uint32_t count, const VkDescriptorSet* pDescriptorSets) {
 	for (uint32_t dsIdx = 0; dsIdx < count; dsIdx++) {
 		MVKDescriptorSet* mvkDS = (MVKDescriptorSet*)pDescriptorSets[dsIdx];
-		if (_allocatedSets.erase(mvkDS)) {
-			getDescriptorSetPool(mvkDS->_pLayout)->returnObject(mvkDS);
-		}
+		if (_allocatedSets.erase(mvkDS)) { returnDescriptorSet(mvkDS); }
 	}
 	return VK_SUCCESS;
 }
 
 // Return any allocated descriptor sets to their pools
 VkResult MVKDescriptorPool::reset(VkDescriptorPoolResetFlags flags) {
-	for (auto& mvkDS : _allocatedSets) {
-		getDescriptorSetPool(mvkDS->_pLayout)->returnObject(mvkDS);
-	}
+	for (auto& mvkDS : _allocatedSets) { returnDescriptorSet(mvkDS); }
 	_allocatedSets.clear();
 	return VK_SUCCESS;
 }
 
+// Returns the descriptor set to its pool, or if that pool doesn't exist, the descriptor set is destroyed
+void MVKDescriptorPool::returnDescriptorSet(MVKDescriptorSet* mvkDescSet) {
+	MVKDescriptorSetLayout* dsLayout = mvkDescSet->_pLayout;
+	MVKDescriptorSetPool* dsPool = dsLayout ? _descriptorSetPools[dsLayout] : nullptr;
+	if (dsPool) {
+		dsPool->returnObject(mvkDescSet);
+	} else {
+		mvkDescSet->destroy();
+		_descriptorSetPools.erase(dsLayout);
+	}
+}
+
 // Returns the pool of descriptor sets that use a specific layout, lazily creating it if necessary
 MVKDescriptorSetPool* MVKDescriptorPool::getDescriptorSetPool(MVKDescriptorSetLayout* mvkDescSetLayout) {
 	MVKDescriptorSetPool* dsp = _descriptorSetPools[mvkDescSetLayout];
 	if ( !dsp ) {
 		dsp = new MVKDescriptorSetPool(_device);
 		_descriptorSetPools[mvkDescSetLayout] = dsp;
+		mvkDescSetLayout->addDescriptorPool(this);		// tell layout to track me
 	}
 	return dsp;
 }
 
+// Remove the descriptor set pool associated with the descriptor set layout,
+// and make sure any allocated sets don't try to return back to their pools.
+void MVKDescriptorPool::removeDescriptorSetPool(MVKDescriptorSetLayout* mvkDescSetLayout) {
+	MVKDescriptorSetPool* dsp = _descriptorSetPools[mvkDescSetLayout];
+	if (dsp) { dsp->destroy(); }
+	_descriptorSetPools.erase(mvkDescSetLayout);
+
+	for (auto& mvkDS : _allocatedSets) {
+		if (mvkDS->_pLayout == mvkDescSetLayout) { mvkDS->_pLayout = nullptr; }
+	}
+}
+
 MVKDescriptorPool::MVKDescriptorPool(MVKDevice* device,
 									 const VkDescriptorPoolCreateInfo* pCreateInfo) : MVKVulkanAPIDeviceObject(device) {
 	_maxSets = pCreateInfo->maxSets;
 }
 
-// Return any allocated sets to their pools and then destroy all the pools.
+// Return any allocated sets to their pools and then destroy all the pools,
+// and ensure any descriptor set layouts used as keys are notified.
 MVKDescriptorPool::~MVKDescriptorPool() {
 	reset(0);
-	for (auto& pair : _descriptorSetPools) { pair.second->destroy(); }
+	for (auto& pair : _descriptorSetPools) {
+		pair.first->removeDescriptorPool(this);
+		if (pair.second) { pair.second->destroy(); }
+	}
 }
 
 
@@ -1142,7 +1171,7 @@
 	}
 }
 
-void mvkPopulateShaderConverterContext(SPIRVToMSLConverterContext& context,
+void mvkPopulateShaderConverterContext(SPIRVToMSLConversionConfiguration& context,
 									   MVKShaderStageResourceBinding& ssRB,
 									   spv::ExecutionModel stage,
 									   uint32_t descriptorSetIndex,
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
index 92764a2..3a92cac 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.h
@@ -88,6 +88,9 @@
 	/** Returns a pointer to the Vulkan instance. */
 	MVKInstance* getInstance() override { return _mvkInstance; }
 
+	/** Populates the specified array with the supported extensions of this device. */
+	VkResult getExtensionProperties(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
+
 	/** Populates the specified structure with the features of this device. */
 	void getFeatures(VkPhysicalDeviceFeatures* features);
 
@@ -285,13 +288,18 @@
 	bool getSupportsGPUFamily(MTLGPUFamily gpuFamily);
 
 	/** Populates the specified structure with the Metal-specific features of this device. */
-	const MVKPhysicalDeviceMetalFeatures* getMetalFeatures() { return &_metalFeatures; }
+	inline const MVKPhysicalDeviceMetalFeatures* getMetalFeatures() { return &_metalFeatures; }
 
 	/** Returns the underlying Metal device. */
 	inline id<MTLDevice> getMTLDevice() { return _mtlDevice; }
     
     /*** Replaces the underlying Metal device .*/
-    inline void replaceMTLDevice(id<MTLDevice> mtlDevice) { [_mtlDevice autorelease]; _mtlDevice = [mtlDevice retain]; }
+    inline void replaceMTLDevice(id<MTLDevice> mtlDevice) {
+		if (mtlDevice != _mtlDevice) {
+			[_mtlDevice release];
+			_mtlDevice = [mtlDevice retain];
+		}
+	}
 
 #pragma mark Construction
 
@@ -326,6 +334,8 @@
 	void initGPUInfoProperties();
 	void initMemoryProperties();
 	uint64_t getRecommendedMaxWorkingSetSize();
+	void initExtensions();
+	MVKExtensionList* getSupportedExtensions(const char* pLayerName = nullptr);
 	std::vector<MVKQueueFamily*>& getQueueFamilies();
 	void initPipelineCacheUUID();
 	uint32_t getHighestMTLFeatureSet();
@@ -335,9 +345,11 @@
 
 	id<MTLDevice> _mtlDevice;
 	MVKInstance* _mvkInstance;
+	MVKExtensionList _supportedExtensions;
 	VkPhysicalDeviceFeatures _features;
 	MVKPhysicalDeviceMetalFeatures _metalFeatures;
 	VkPhysicalDeviceProperties _properties;
+	VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT _texelBuffAlignProperties;
 	VkPhysicalDeviceMemoryProperties _memoryProperties;
 	std::vector<MVKQueueFamily*> _queueFamilies;
 	uint32_t _allMemoryTypes;
@@ -538,10 +550,10 @@
      *
      * If endTime is zero or not supplied, the current time is used.
      */
-    inline void addActivityPerformance(MVKPerformanceTracker& shaderCompilationEvent,
+    inline void addActivityPerformance(MVKPerformanceTracker& activityTracker,
 									   uint64_t startTime, uint64_t endTime = 0) {
 		if (_pMVKConfig->performanceTracking) {
-			addActivityPerformanceImpl(shaderCompilationEvent, startTime, endTime);
+			addActivityPerformanceImpl(activityTracker, startTime, endTime);
 		}
 	};
 
@@ -555,7 +567,7 @@
 	inline id<MTLDevice> getMTLDevice() { return _physicalDevice->getMTLDevice(); }
 
 	/** Returns standard compilation options to be used when compiling MSL shaders. */
-	MTLCompileOptions* getMTLCompileOptions();
+	inline MTLCompileOptions* getMTLCompileOptions() { return _mtlCompileOptions; }
 
 	/** Returns the Metal vertex buffer index to use for the specified vertex attribute binding number.  */
 	uint32_t getMetalBufferIndexForVertexAttributeBinding(uint32_t binding);
@@ -609,8 +621,11 @@
 	const VkPhysicalDevice16BitStorageFeatures _enabledStorage16Features;
 	const VkPhysicalDevice8BitStorageFeaturesKHR _enabledStorage8Features;
 	const VkPhysicalDeviceFloat16Int8FeaturesKHR _enabledF16I8Features;
+	const VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR _enabledUBOLayoutFeatures;
 	const VkPhysicalDeviceVariablePointerFeatures _enabledVarPtrFeatures;
 	const VkPhysicalDeviceHostQueryResetFeaturesEXT _enabledHostQryResetFeatures;
+	const VkPhysicalDeviceScalarBlockLayoutFeaturesEXT _enabledScalarLayoutFeatures;
+	const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT _enabledTexelBuffAlignFeatures;
 	const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT _enabledVtxAttrDivFeatures;
 	const VkPhysicalDevicePortabilitySubsetFeaturesEXTX _enabledPortabilityFeatures;
 
@@ -656,18 +671,20 @@
 	MVKResource* addResource(MVKResource* rez);
 	MVKResource* removeResource(MVKResource* rez);
     void initPerformanceTracking();
-	void initPhysicalDevice(MVKPhysicalDevice* physicalDevice);
+	void initPhysicalDevice(MVKPhysicalDevice* physicalDevice, const VkDeviceCreateInfo* pCreateInfo);
 	void initQueues(const VkDeviceCreateInfo* pCreateInfo);
+	void initMTLCompileOptions();
 	void enableFeatures(const VkDeviceCreateInfo* pCreateInfo);
 	void enableFeatures(const VkBool32* pEnable, const VkBool32* pRequested, const VkBool32* pAvailable, uint32_t count);
 	void enableExtensions(const VkDeviceCreateInfo* pCreateInfo);
-    const char* getActivityPerformanceDescription(MVKPerformanceTracker& shaderCompilationEvent);
+    const char* getActivityPerformanceDescription(MVKPerformanceTracker& activityTracker);
 	uint64_t getPerformanceTimestampImpl();
-	void addActivityPerformanceImpl(MVKPerformanceTracker& shaderCompilationEvent,
+	void addActivityPerformanceImpl(MVKPerformanceTracker& activityTracker,
 									uint64_t startTime, uint64_t endTime);
 
 	MVKPhysicalDevice* _physicalDevice;
     MVKCommandResourceFactory* _commandResourceFactory;
+	MTLCompileOptions* _mtlCompileOptions;
 	std::vector<std::vector<MVKQueue*>> _queuesByQueueFamilyIndex;
 	std::vector<MVKResource*> _resources;
 	std::mutex _rezLock;
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
index e136c1f..5dd967e 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
@@ -56,6 +56,11 @@
 #pragma mark -
 #pragma mark MVKPhysicalDevice
 
+VkResult MVKPhysicalDevice::getExtensionProperties(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
+	MVKExtensionList* extensions = getSupportedExtensions(pLayerName);
+	return extensions->getProperties(pCount, pProperties);
+}
+
 void MVKPhysicalDevice::getFeatures(VkPhysicalDeviceFeatures* features) {
     if (features) { *features = _features; }
 }
@@ -64,8 +69,7 @@
     if (features) {
         features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
         features->features = _features;
-        auto* next = (VkBaseOutStructure*)features->pNext;
-        while (next) {
+        for (auto* next = (VkBaseOutStructure*)features->pNext; next; next = next->pNext) {
             switch ((uint32_t)next->sType) {
                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: {
                     auto* storageFeatures = (VkPhysicalDevice16BitStorageFeatures*)next;
@@ -88,6 +92,11 @@
                     f16Features->shaderInt8 = true;
                     break;
                 }
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR: {
+                    auto* uboLayoutFeatures = (VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR*)next;
+                    uboLayoutFeatures->uniformBufferStandardLayout = true;
+                    break;
+                }
                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES: {
                     auto* varPtrFeatures = (VkPhysicalDeviceVariablePointerFeatures*)next;
                     varPtrFeatures->variablePointersStorageBuffer = true;
@@ -99,6 +108,16 @@
                     hostQueryResetFeatures->hostQueryReset = true;
                     break;
                 }
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: {
+                    auto* scalarLayoutFeatures = (VkPhysicalDeviceScalarBlockLayoutFeaturesEXT*)next;
+                    scalarLayoutFeatures->scalarBlockLayout = true;
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: {
+                    auto* texelBuffAlignFeatures = (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*)next;
+                    texelBuffAlignFeatures->texelBufferAlignment = _metalFeatures.texelBuffers && [_mtlDevice respondsToSelector: @selector(minimumLinearTextureAlignmentForPixelFormat:)];
+                    break;
+                }
                 case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: {
                     auto* divisorFeatures = (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*)next;
                     divisorFeatures->vertexAttributeInstanceRateDivisor = true;
@@ -114,10 +133,14 @@
                     portabilityFeatures->samplerMipLodBias = false;
                     break;
                 }
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS2_FEATURES_INTEL: {
+                    auto* shaderIntFuncsFeatures = (VkPhysicalDeviceShaderIntegerFunctions2INTEL*)next;
+                    shaderIntFuncsFeatures->shaderIntegerFunctions2 = true;
+                    break;
+                }
                 default:
                     break;
             }
-            next = next->pNext;
         }
     }
 }
@@ -130,42 +153,44 @@
     if (properties) {
         properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
         properties->properties = _properties;
-		auto* next = (MVKVkAPIStructHeader*)properties->pNext;
-		while (next) {
+		for (auto* next = (VkBaseOutStructure*)properties->pNext; next; next = next->pNext) {
 			switch ((uint32_t)next->sType) {
             case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES: {
                 auto* pointClipProps = (VkPhysicalDevicePointClippingProperties*)next;
                 pointClipProps->pointClippingBehavior = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES;
-                next = (MVKVkAPIStructHeader*)pointClipProps->pNext;
                 break;
             }
             case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES: {
                 auto* maint3Props = (VkPhysicalDeviceMaintenance3Properties*)next;
-                maint3Props->maxPerSetDescriptors = (_metalFeatures.maxPerStageBufferCount + _metalFeatures.maxPerStageTextureCount + _metalFeatures.maxPerStageSamplerCount) * 2;
+                maint3Props->maxPerSetDescriptors = (_metalFeatures.maxPerStageBufferCount + _metalFeatures.maxPerStageTextureCount + _metalFeatures.maxPerStageSamplerCount) * 4;
                 maint3Props->maxMemoryAllocationSize = _metalFeatures.maxMTLBufferSize;
-                next = (MVKVkAPIStructHeader*)maint3Props->pNext;
                 break;
             }
             case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR: {
                 auto* pushDescProps = (VkPhysicalDevicePushDescriptorPropertiesKHR*)next;
                 pushDescProps->maxPushDescriptors = _properties.limits.maxPerStageResources;
-                next = (MVKVkAPIStructHeader*)pushDescProps->pNext;
+                break;
+            }
+            case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT: {
+                auto* texelBuffAlignProps = (VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*)next;
+                // Save the 'next' pointer; we'll unintentionally overwrite it
+                // on the next line. Put it back when we're done.
+                void* savedNext = texelBuffAlignProps->pNext;
+                *texelBuffAlignProps = _texelBuffAlignProperties;
+                texelBuffAlignProps->pNext = savedNext;
                 break;
             }
             case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: {
                 auto* divisorProps = (VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*)next;
                 divisorProps->maxVertexAttribDivisor = kMVKUndefinedLargeUInt32;
-                next = (MVKVkAPIStructHeader*)divisorProps->pNext;
                 break;
             }
 			case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_EXTX: {
 				auto* portabilityProps = (VkPhysicalDevicePortabilitySubsetPropertiesEXTX*)next;
 				portabilityProps->minVertexInputBindingStrideAlignment = 4;
-				next = (MVKVkAPIStructHeader*)portabilityProps->pNext;
 				break;
 			}
             default:
-                next = (MVKVkAPIStructHeader*)next->pNext;
                 break;
             }
         }
@@ -221,6 +246,7 @@
 		return VK_ERROR_FORMAT_NOT_SUPPORTED;
 	}
 
+	MVKFormatType mvkFmt = mvkFormatTypeFromVkFormat(format);
 	bool hasAttachmentUsage = mvkIsAnyFlagEnabled(usage, (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
 														  VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
 														  VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
@@ -241,8 +267,7 @@
 			if (tiling == VK_IMAGE_TILING_LINEAR) { return VK_ERROR_FORMAT_NOT_SUPPORTED; }
 
 			// Metal does not allow compressed or depth/stencil formats on 1D textures
-			if (mvkFormatTypeFromVkFormat(format) == kMVKFormatDepthStencil ||
-				mvkFormatTypeFromVkFormat(format) == kMVKFormatCompressed) {
+			if (mvkFmt == kMVKFormatDepthStencil || mvkFmt == kMVKFormatCompressed) {
 				return VK_ERROR_FORMAT_NOT_SUPPORTED;
 			}
             maxExt.width = pLimits->maxImageDimension1D;
@@ -263,8 +288,7 @@
 			if (tiling == VK_IMAGE_TILING_LINEAR) {
 				// Linear textures have additional restrictions under Metal:
 				// - They may not be depth/stencil or compressed textures.
-				if (mvkFormatTypeFromVkFormat(format) == kMVKFormatDepthStencil ||
-					mvkFormatTypeFromVkFormat(format) == kMVKFormatCompressed) {
+				if (mvkFmt == kMVKFormatDepthStencil || mvkFmt == kMVKFormatCompressed) {
 					return VK_ERROR_FORMAT_NOT_SUPPORTED;
 				}
 #if MVK_MACOS
@@ -281,7 +305,7 @@
 				// Compressed multisampled textures aren't supported.
 				// Multisampled cube textures aren't supported.
 				// Non-renderable multisampled textures aren't supported.
-				if (mvkFormatTypeFromVkFormat(format) == kMVKFormatCompressed ||
+				if (mvkFmt == kMVKFormatCompressed ||
 					mvkIsAnyFlagEnabled(flags, VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) ||
 					!mvkIsAnyFlagEnabled(fmtProps.optimalTilingFeatures, VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT|VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) ) {
 					sampleCounts = VK_SAMPLE_COUNT_1_BIT;
@@ -295,18 +319,17 @@
                 return VK_ERROR_FORMAT_NOT_SUPPORTED;
             }
 			// Metal does not allow compressed or depth/stencil formats on 3D textures
-			if (mvkFormatTypeFromVkFormat(format) == kMVKFormatDepthStencil
+			if (mvkFmt == kMVKFormatDepthStencil
 #if MVK_IOS
-				|| mvkFormatTypeFromVkFormat(format) == kMVKFormatCompressed
+				|| mvkFmt == kMVKFormatCompressed
 #endif
 				) {
 				return VK_ERROR_FORMAT_NOT_SUPPORTED;
 			}
 #if MVK_MACOS
-			if (mvkFormatTypeFromVkFormat(format) == kMVKFormatCompressed) {
-				// If this is a compressed format and there's no codec, it isn't
-				// supported.
-				if (!mvkCanDecodeFormat(format) ) { return VK_ERROR_FORMAT_NOT_SUPPORTED; }
+			// If this is a compressed format and there's no codec, it isn't supported.
+			if ((mvkFmt == kMVKFormatCompressed) && !mvkCanDecodeFormat(format)) {
+				return VK_ERROR_FORMAT_NOT_SUPPORTED;
 			}
 #endif
             maxExt.width = pLimits->maxImageDimension3D;
@@ -321,8 +344,7 @@
 			if (tiling == VK_IMAGE_TILING_LINEAR) { return VK_ERROR_FORMAT_NOT_SUPPORTED; }
 
 			// Metal does not allow compressed or depth/stencil formats on anything but 2D textures
-			if (mvkFormatTypeFromVkFormat(format) == kMVKFormatDepthStencil ||
-				mvkFormatTypeFromVkFormat(format) == kMVKFormatCompressed) {
+			if (mvkFmt == kMVKFormatDepthStencil || mvkFmt == kMVKFormatCompressed) {
 				return VK_ERROR_FORMAT_NOT_SUPPORTED;
 			}
             maxExt = { 1, 1, 1};
@@ -457,24 +479,47 @@
 		MTLPixelFormatBGRA8Unorm,
 		MTLPixelFormatBGRA8Unorm_sRGB,
 		MTLPixelFormatRGBA16Float,
+		MTLPixelFormatBGR10A2Unorm,
 	};
 
-	const uint mtlFmtsCnt = sizeof(mtlFormats) / sizeof(MTLPixelFormat);
+	MVKVectorInline<VkColorSpaceKHR, 16> colorSpaces;
+	colorSpaces.push_back(VK_COLOR_SPACE_SRGB_NONLINEAR_KHR);
+#if MVK_MACOS
+	if (getInstance()->_enabledExtensions.vk_EXT_swapchain_colorspace.enabled) {
+		// 10.11 supports some but not all of the color spaces specified by VK_EXT_swapchain_colorspace.
+		colorSpaces.push_back(VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT);
+		colorSpaces.push_back(VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT);
+		colorSpaces.push_back(VK_COLOR_SPACE_BT709_NONLINEAR_EXT);
+		colorSpaces.push_back(VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT);
+		colorSpaces.push_back(VK_COLOR_SPACE_PASS_THROUGH_EXT);
+		if (mvkOSVersion() >= 10.12) {
+			colorSpaces.push_back(VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT);
+			colorSpaces.push_back(VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT);
+		}
+	}
+#endif
+
+	uint mtlFmtsCnt = sizeof(mtlFormats) / sizeof(MTLPixelFormat);
+	if (!mvkMTLPixelFormatIsSupported(MTLPixelFormatBGR10A2Unorm)) { mtlFmtsCnt--; }
+
+	const uint vkFmtsCnt = mtlFmtsCnt * (uint)colorSpaces.size();
 
 	// If properties aren't actually being requested yet, simply update the returned count
 	if ( !pSurfaceFormats ) {
-		*pCount = mtlFmtsCnt;
+		*pCount = vkFmtsCnt;
 		return VK_SUCCESS;
 	}
 
 	// Determine how many results we'll return, and return that number
-	VkResult result = (*pCount >= mtlFmtsCnt) ? VK_SUCCESS : VK_INCOMPLETE;
-	*pCount = min(*pCount, mtlFmtsCnt);
+	VkResult result = (*pCount >= vkFmtsCnt) ? VK_SUCCESS : VK_INCOMPLETE;
+	*pCount = min(*pCount, vkFmtsCnt);
 
 	// Now populate the supplied array
-	for (uint fmtIdx = 0; fmtIdx < *pCount; fmtIdx++) {
-		pSurfaceFormats[fmtIdx].format = mvkVkFormatFromMTLPixelFormat(mtlFormats[fmtIdx]);
-		pSurfaceFormats[fmtIdx].colorSpace = VK_COLORSPACE_SRGB_NONLINEAR_KHR;
+	for (uint csIdx = 0, idx = 0; idx < *pCount && csIdx < colorSpaces.size(); csIdx++) {
+		for (uint fmtIdx = 0; idx < *pCount && fmtIdx < mtlFmtsCnt; fmtIdx++, idx++) {
+			pSurfaceFormats[idx].format = mvkVkFormatFromMTLPixelFormat(mtlFormats[fmtIdx]);
+			pSurfaceFormats[idx].colorSpace = colorSpaces[csIdx];
+		}
 	}
 
 	return result;
@@ -679,7 +724,7 @@
 
 #pragma mark Construction
 
-MVKPhysicalDevice::MVKPhysicalDevice(MVKInstance* mvkInstance, id<MTLDevice> mtlDevice) {
+MVKPhysicalDevice::MVKPhysicalDevice(MVKInstance* mvkInstance, id<MTLDevice> mtlDevice) : _supportedExtensions(this, true) {
 	_mvkInstance = mvkInstance;
 	_mtlDevice = [mtlDevice retain];
 
@@ -687,6 +732,7 @@
 	initFeatures();             // Call second.
 	initProperties();           // Call third.
 	initMemoryProperties();
+	initExtensions();
 	logGPUInfo();
 }
 
@@ -734,6 +780,7 @@
 	if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily1_v5] ) {
 		_metalFeatures.mslVersionEnum = MTLLanguageVersion2_1;
 		MVK_SET_FROM_ENV_OR_BUILD_BOOL(_metalFeatures.events, MVK_ALLOW_METAL_EVENTS);
+		_metalFeatures.textureBuffers = true;
 	}
 
 	if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily3_v1] ) {
@@ -752,8 +799,13 @@
 		_metalFeatures.arrayOfSamplers = true;
 	}
 
+	if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily4_v1] ) {
+		_metalFeatures.postDepthCoverage = true;
+	}
+
 	if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily5_v1] ) {
 		_metalFeatures.layeredRendering = true;
+		_metalFeatures.stencilFeedback = true;
 	}
 
 #endif
@@ -792,10 +844,12 @@
         _metalFeatures.multisampleArrayTextures = true;
 		MVK_SET_FROM_ENV_OR_BUILD_BOOL(_metalFeatures.events, MVK_ALLOW_METAL_EVENTS);
         _metalFeatures.memoryBarriers = true;
+        _metalFeatures.textureBuffers = true;
     }
 
 	if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_macOS_GPUFamily2_v1] ) {
 		_metalFeatures.multisampleLayeredRendering = _metalFeatures.layeredRendering;
+		_metalFeatures.stencilFeedback = true;
 	}
 
 #endif
@@ -819,7 +873,7 @@
 
 	switch (_metalFeatures.mslVersionEnum) {
 		case MTLLanguageVersion2_2:
-			_metalFeatures.mslVersion = SPIRVToMSLConverterOptions::makeMSLVersion(2, 2);
+			setMSLVersion(2, 2);
 			break;
 		case MTLLanguageVersion2_1:
 			setMSLVersion(2, 1);
@@ -913,7 +967,7 @@
 		_features.tessellationShader = true;
 		_features.shaderTessellationAndGeometryPointSize = true;
 	}
-  
+
 	if ( [_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily4_v1] ) {
 		_features.imageCubeArray = true;
 	}
@@ -1087,7 +1141,11 @@
 	_properties.limits.maxDescriptorSetStorageImages = (_properties.limits.maxPerStageDescriptorStorageImages * 4);
 	_properties.limits.maxDescriptorSetInputAttachments = (_properties.limits.maxPerStageDescriptorInputAttachments * 4);
 
-	_properties.limits.maxTexelBufferElements = _properties.limits.maxImageDimension2D * _properties.limits.maxImageDimension2D;
+	if (_metalFeatures.textureBuffers) {
+		_properties.limits.maxTexelBufferElements = (uint32_t)_metalFeatures.maxMTLBufferSize;
+	} else {
+		_properties.limits.maxTexelBufferElements = _properties.limits.maxImageDimension2D * _properties.limits.maxImageDimension2D;
+	}
 	_properties.limits.maxUniformBufferRange = (uint32_t)_metalFeatures.maxMTLBufferSize;
 	_properties.limits.maxStorageBufferRange = (uint32_t)_metalFeatures.maxMTLBufferSize;
 	_properties.limits.maxPushConstantsSize = (4 * KIBI);
@@ -1098,14 +1156,87 @@
     _properties.limits.bufferImageGranularity = _metalFeatures.mtlBufferAlignment;
     _properties.limits.nonCoherentAtomSize = _metalFeatures.mtlBufferAlignment;
 
+    if ([_mtlDevice respondsToSelector: @selector(minimumLinearTextureAlignmentForPixelFormat:)]) {
+        // Figure out the greatest alignment required by all supported formats, and
+        // whether or not they only require alignment to a single texel. We'll use this
+        // information to fill out the VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT
+        // struct.
+        uint32_t maxStorage = 0, maxUniform = 0;
+        bool singleTexelStorage = true, singleTexelUniform = true;
+        mvkEnumerateSupportedFormats({0, 0, VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT}, true, [&](VkFormat vk) {
+            NSUInteger alignment;
+            if ([_mtlDevice respondsToSelector: @selector(minimumTextureBufferAlignmentForPixelFormat:)]) {
+                alignment = [_mtlDevice minimumTextureBufferAlignmentForPixelFormat: mvkMTLPixelFormatFromVkFormat(vk)];
+            } else {
+                alignment = [_mtlDevice minimumLinearTextureAlignmentForPixelFormat: mvkMTLPixelFormatFromVkFormat(vk)];
+            }
+            VkFormatProperties props = mvkVkFormatProperties(vk, getFormatIsSupported(vk));
+            // For uncompressed formats, this is the size of a single texel.
+            // Note that no implementations of Metal support compressed formats
+            // in a linear texture (including texture buffers). It's likely that even
+            // if they did, this would be the absolute minimum alignment.
+            uint32_t texelSize = mvkVkFormatBytesPerBlock(vk);
+            // From the spec:
+            //   "If the size of a single texel is a multiple of three bytes, then
+            //    the size of a single component of the format is used instead."
+            if (texelSize % 3 == 0) {
+                switch (mvkFormatTypeFromVkFormat(vk)) {
+                case kMVKFormatColorInt8:
+                case kMVKFormatColorUInt8:
+                    texelSize = 1;
+                    break;
+                case kMVKFormatColorHalf:
+                case kMVKFormatColorInt16:
+                case kMVKFormatColorUInt16:
+                    texelSize = 2;
+                    break;
+                case kMVKFormatColorFloat:
+                case kMVKFormatColorInt32:
+                case kMVKFormatColorUInt32:
+                default:
+                    texelSize = 4;
+                    break;
+                }
+            }
+            if (mvkAreAllFlagsEnabled(props.bufferFeatures, VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)) {
+                maxStorage = max(maxStorage, uint32_t(alignment));
+                if (alignment % texelSize != 0) { singleTexelStorage = false; }
+            }
+            if (mvkAreAllFlagsEnabled(props.bufferFeatures, VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)) {
+                maxUniform = max(maxUniform, uint32_t(alignment));
+                if (alignment % texelSize != 0) { singleTexelUniform = false; }
+            }
+            return true;
+        });
+        _texelBuffAlignProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT;
+        _texelBuffAlignProperties.storageTexelBufferOffsetAlignmentBytes = maxStorage;
+        _texelBuffAlignProperties.storageTexelBufferOffsetSingleTexelAlignment = singleTexelStorage;
+        _texelBuffAlignProperties.uniformTexelBufferOffsetAlignmentBytes = maxUniform;
+        _texelBuffAlignProperties.uniformTexelBufferOffsetSingleTexelAlignment = singleTexelUniform;
+        _properties.limits.minTexelBufferOffsetAlignment = max(maxStorage, maxUniform);
+    } else {
+#if MVK_IOS
+        if ([_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily3_v1]) {
+            _properties.limits.minTexelBufferOffsetAlignment = 16;
+        } else {
+            _properties.limits.minTexelBufferOffsetAlignment = 64;
+        }
+#endif
+#if MVK_MACOS
+        _properties.limits.minTexelBufferOffsetAlignment = 256;
+#endif
+        _texelBuffAlignProperties.storageTexelBufferOffsetAlignmentBytes = _properties.limits.minTexelBufferOffsetAlignment;
+        _texelBuffAlignProperties.storageTexelBufferOffsetSingleTexelAlignment = VK_FALSE;
+        _texelBuffAlignProperties.uniformTexelBufferOffsetAlignmentBytes = _properties.limits.minTexelBufferOffsetAlignment;
+        _texelBuffAlignProperties.uniformTexelBufferOffsetSingleTexelAlignment = VK_FALSE;
+    }
+
 #if MVK_IOS
     _properties.limits.maxFragmentInputComponents = 60;
 
     if ([_mtlDevice supportsFeatureSet: MTLFeatureSet_iOS_GPUFamily3_v1]) {
-        _properties.limits.minTexelBufferOffsetAlignment = 16;
         _properties.limits.optimalBufferCopyOffsetAlignment = 16;
     } else {
-        _properties.limits.minTexelBufferOffsetAlignment = 64;
         _properties.limits.optimalBufferCopyOffsetAlignment = 64;
     }
 
@@ -1122,7 +1253,6 @@
 #endif
 #if MVK_MACOS
     _properties.limits.maxFragmentInputComponents = 128;
-    _properties.limits.minTexelBufferOffsetAlignment = 256;
     _properties.limits.optimalBufferCopyOffsetAlignment = 256;
 
     if ([_mtlDevice supportsFeatureSet: MTLFeatureSet_macOS_GPUFamily1_v2]) {
@@ -1657,6 +1787,21 @@
 	return 128 * MEBI;		// Conservative minimum for macOS GPU's & iOS shared memory
 }
 
+void MVKPhysicalDevice::initExtensions() {
+	if (!_metalFeatures.postDepthCoverage) {
+		_supportedExtensions.vk_EXT_post_depth_coverage.enabled = false;
+	}
+	if (!_metalFeatures.stencilFeedback) {
+		_supportedExtensions.vk_EXT_shader_stencil_export.enabled = false;
+	}
+}
+
+// Return all extensions supported by this physical device.
+MVKExtensionList* MVKPhysicalDevice::getSupportedExtensions(const char* pLayerName) {
+	if (!pLayerName || strcmp(pLayerName, "MoltenVK") == 0) { return &_supportedExtensions; }
+	return getInstance()->getLayerManager()->getLayerNamed(pLayerName)->getSupportedExtensions();
+}
+
 void MVKPhysicalDevice::logGPUInfo() {
 	string devTypeStr;
 	switch (_properties.deviceType) {
@@ -1740,9 +1885,11 @@
 
 #endif
 
-	MVKLogInfo(logMsg.c_str(), _properties.deviceName, devTypeStr.c_str(), _properties.vendorID, _properties.deviceID,
-			   [[[NSUUID alloc] initWithUUIDBytes: _properties.pipelineCacheUUID] autorelease].UUIDString.UTF8String,
-			   SPIRVToMSLConverterOptions::printMSLVersion(_metalFeatures.mslVersion).c_str());
+	NSUUID* nsUUID = [[NSUUID alloc] initWithUUIDBytes: _properties.pipelineCacheUUID];		// temp retain
+	MVKLogInfo(logMsg.c_str(), _properties.deviceName, devTypeStr.c_str(),
+			   _properties.vendorID, _properties.deviceID, nsUUID.UUIDString.UTF8String,
+			   SPIRVToMSLConversionOptions::printMSLVersion(_metalFeatures.mslVersion).c_str());
+	[nsUUID release];																		// temp release
 }
 
 MVKPhysicalDevice::~MVKPhysicalDevice() {
@@ -1988,7 +2135,7 @@
         // See if this pipeline has a parent. This can come either directly
         // via basePipelineHandle or indirectly via basePipelineIndex.
         MVKPipeline* parentPL = VK_NULL_HANDLE;
-        if ( mvkAreFlagsEnabled(pCreateInfo->flags, VK_PIPELINE_CREATE_DERIVATIVE_BIT) ) {
+        if ( mvkAreAllFlagsEnabled(pCreateInfo->flags, VK_PIPELINE_CREATE_DERIVATIVE_BIT) ) {
             VkPipeline vkParentPL = pCreateInfo->basePipelineHandle;
             int32_t parentPLIdx = pCreateInfo->basePipelineIndex;
             if ( !vkParentPL && (parentPLIdx >= 0)) { vkParentPL = pPipelines[parentPLIdx]; }
@@ -2144,43 +2291,44 @@
 
 uint64_t MVKDevice::getPerformanceTimestampImpl() { return mvkGetTimestamp(); }
 
-void MVKDevice::addActivityPerformanceImpl(MVKPerformanceTracker& shaderCompilationEvent,
+void MVKDevice::addActivityPerformanceImpl(MVKPerformanceTracker& activityTracker,
 										   uint64_t startTime, uint64_t endTime) {
     lock_guard<mutex> lock(_perfLock);
 
 	double currInterval = mvkGetElapsedMilliseconds(startTime, endTime);
-	shaderCompilationEvent.minimumDuration = ((shaderCompilationEvent.minimumDuration == 0.0)
+	activityTracker.minimumDuration = ((activityTracker.minimumDuration == 0.0)
 											  ? currInterval :
-											  min(currInterval, shaderCompilationEvent.minimumDuration));
-    shaderCompilationEvent.maximumDuration = max(currInterval, shaderCompilationEvent.maximumDuration);
-    double totalInterval = (shaderCompilationEvent.averageDuration * shaderCompilationEvent.count++) + currInterval;
-    shaderCompilationEvent.averageDuration = totalInterval / shaderCompilationEvent.count;
+											  min(currInterval, activityTracker.minimumDuration));
+    activityTracker.maximumDuration = max(currInterval, activityTracker.maximumDuration);
+    double totalInterval = (activityTracker.averageDuration * activityTracker.count++) + currInterval;
+    activityTracker.averageDuration = totalInterval / activityTracker.count;
 
 	if (_pMVKConfig->performanceLoggingFrameCount) {
 		MVKLogInfo("Performance to %s count: %d curr: %.3f ms, min: %.3f ms, max: %.3f ms, avg: %.3f ms",
-				   getActivityPerformanceDescription(shaderCompilationEvent),
-				   shaderCompilationEvent.count,
+				   getActivityPerformanceDescription(activityTracker),
+				   activityTracker.count,
 				   currInterval,
-				   shaderCompilationEvent.minimumDuration,
-				   shaderCompilationEvent.maximumDuration,
-				   shaderCompilationEvent.averageDuration);
+				   activityTracker.minimumDuration,
+				   activityTracker.maximumDuration,
+				   activityTracker.averageDuration);
 	}
 }
 
-const char* MVKDevice::getActivityPerformanceDescription(MVKPerformanceTracker& shaderCompilationEvent) {
-	if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.hashShaderCode) { return "hash shader SPIR-V code"; }
-    if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.spirvToMSL) { return "convert SPIR-V to MSL source code"; }
-    if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.mslCompile) { return "compile MSL source code into a MTLLibrary"; }
-    if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.mslLoad) { return "load pre-compiled MSL code into a MTLLibrary"; }
-	if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.shaderLibraryFromCache) { return "retrieve shader library from the cache"; }
-    if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.functionRetrieval) { return "retrieve a MTLFunction from a MTLLibrary"; }
-    if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.functionSpecialization) { return "specialize a retrieved MTLFunction"; }
-    if (&shaderCompilationEvent == &_performanceStatistics.shaderCompilation.pipelineCompile) { return "compile MTLFunctions into a pipeline"; }
-	if (&shaderCompilationEvent == &_performanceStatistics.pipelineCache.sizePipelineCache) { return "calculate cache size required to write MSL to pipeline cache"; }
-	if (&shaderCompilationEvent == &_performanceStatistics.pipelineCache.writePipelineCache) { return "write MSL to pipeline cache"; }
-	if (&shaderCompilationEvent == &_performanceStatistics.pipelineCache.readPipelineCache) { return "read MSL from pipeline cache"; }
-	if (&shaderCompilationEvent == &_performanceStatistics.queue.mtlQueueAccess) { return "access MTLCommandQueue"; }
-    return "Unknown shader compile event";
+const char* MVKDevice::getActivityPerformanceDescription(MVKPerformanceTracker& activityTracker) {
+	if (&activityTracker == &_performanceStatistics.shaderCompilation.hashShaderCode) { return "hash shader SPIR-V code"; }
+    if (&activityTracker == &_performanceStatistics.shaderCompilation.spirvToMSL) { return "convert SPIR-V to MSL source code"; }
+    if (&activityTracker == &_performanceStatistics.shaderCompilation.mslCompile) { return "compile MSL source code into a MTLLibrary"; }
+    if (&activityTracker == &_performanceStatistics.shaderCompilation.mslLoad) { return "load pre-compiled MSL code into a MTLLibrary"; }
+	if (&activityTracker == &_performanceStatistics.shaderCompilation.shaderLibraryFromCache) { return "retrieve shader library from the cache"; }
+    if (&activityTracker == &_performanceStatistics.shaderCompilation.functionRetrieval) { return "retrieve a MTLFunction from a MTLLibrary"; }
+    if (&activityTracker == &_performanceStatistics.shaderCompilation.functionSpecialization) { return "specialize a retrieved MTLFunction"; }
+    if (&activityTracker == &_performanceStatistics.shaderCompilation.pipelineCompile) { return "compile MTLFunctions into a pipeline"; }
+	if (&activityTracker == &_performanceStatistics.pipelineCache.sizePipelineCache) { return "calculate cache size required to write MSL to pipeline cache"; }
+	if (&activityTracker == &_performanceStatistics.pipelineCache.writePipelineCache) { return "write MSL to pipeline cache"; }
+	if (&activityTracker == &_performanceStatistics.pipelineCache.readPipelineCache) { return "read MSL from pipeline cache"; }
+	if (&activityTracker == &_performanceStatistics.queue.mtlQueueAccess) { return "access MTLCommandQueue"; }
+	if (&activityTracker == &_performanceStatistics.queue.mtlCommandBufferCompletion) { return "complete MTLCommandBuffer"; }
+    return "Unknown performance activity";
 }
 
 void MVKDevice::getPerformanceStatistics(MVKPerformanceStatistics* pPerf) {
@@ -2192,12 +2340,6 @@
 
 #pragma mark Metal
 
-MTLCompileOptions* MVKDevice::getMTLCompileOptions() {
-	MTLCompileOptions* opts = [[MTLCompileOptions new] autorelease];
-	opts.languageVersion = _pMetalFeatures->mslVersionEnum;
-	return opts;
-}
-
 uint32_t MVKDevice::getMetalBufferIndexForVertexAttributeBinding(uint32_t binding) {
 	return ((_pMetalFeatures->maxPerStageBufferCount - 1) - binding);
 }
@@ -2257,21 +2399,26 @@
 	_enabledStorage16Features(),
 	_enabledStorage8Features(),
 	_enabledF16I8Features(),
+	_enabledUBOLayoutFeatures(),
 	_enabledVarPtrFeatures(),
 	_enabledHostQryResetFeatures(),
+	_enabledScalarLayoutFeatures(),
+	_enabledTexelBuffAlignFeatures(),
 	_enabledVtxAttrDivFeatures(),
 	_enabledPortabilityFeatures(),
 	_enabledExtensions(this)
 {
 
 	initPerformanceTracking();
-	initPhysicalDevice(physicalDevice);
+	initPhysicalDevice(physicalDevice, pCreateInfo);
 	enableFeatures(pCreateInfo);
 	enableExtensions(pCreateInfo);
 
     _globalVisibilityResultMTLBuffer = nil;
     _globalVisibilityQueryCount = 0;
 
+	initMTLCompileOptions();	// Before command resource factory
+
 	_commandResourceFactory = new MVKCommandResourceFactory(this);
 
 	initQueues(pCreateInfo);
@@ -2301,11 +2448,30 @@
 	_performanceStatistics.pipelineCache.writePipelineCache = initPerf;
 	_performanceStatistics.pipelineCache.readPipelineCache = initPerf;
 	_performanceStatistics.queue.mtlQueueAccess = initPerf;
+	_performanceStatistics.queue.mtlCommandBufferCompletion = initPerf;
 }
 
-void MVKDevice::initPhysicalDevice(MVKPhysicalDevice* physicalDevice) {
+void MVKDevice::initPhysicalDevice(MVKPhysicalDevice* physicalDevice, const VkDeviceCreateInfo* pCreateInfo) {
 
-	_physicalDevice = physicalDevice;
+	const VkDeviceGroupDeviceCreateInfo* pGroupCreateInfo = nullptr;
+	for (const auto* next = (const VkBaseInStructure*)pCreateInfo->pNext; next; next = next->pNext) {
+		switch (next->sType) {
+		case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:
+			pGroupCreateInfo = (const VkDeviceGroupDeviceCreateInfo*)next;
+			break;
+		default:
+			break;
+		}
+	}
+
+	// If I was given physical devices for a grouped device, use them.
+	// At this time, we only support device groups consisting of a single member,
+	// so this is sufficient for now.
+	if (pGroupCreateInfo && pGroupCreateInfo->physicalDeviceCount)
+		_physicalDevice = MVKPhysicalDevice::getMVKPhysicalDevice(pGroupCreateInfo->pPhysicalDevices[0]);
+	else
+		_physicalDevice = physicalDevice;
+
 	_pMVKConfig = _physicalDevice->_mvkInstance->getMoltenVKConfiguration();
 	_pMetalFeatures = _physicalDevice->getMetalFeatures();
 	_pProperties = &_physicalDevice->_properties;
@@ -2333,8 +2499,11 @@
 	memset((void*)&_enabledStorage16Features, 0, sizeof(_enabledStorage16Features));
 	memset((void*)&_enabledStorage8Features, 0, sizeof(_enabledStorage8Features));
 	memset((void*)&_enabledF16I8Features, 0, sizeof(_enabledF16I8Features));
+	memset((void*)&_enabledUBOLayoutFeatures, 0, sizeof(_enabledUBOLayoutFeatures));
 	memset((void*)&_enabledVarPtrFeatures, 0, sizeof(_enabledVarPtrFeatures));
 	memset((void*)&_enabledHostQryResetFeatures, 0, sizeof(_enabledHostQryResetFeatures));
+	memset((void*)&_enabledScalarLayoutFeatures, 0, sizeof(_enabledScalarLayoutFeatures));
+	memset((void*)&_enabledTexelBuffAlignFeatures, 0, sizeof(_enabledTexelBuffAlignFeatures));
 	memset((void*)&_enabledVtxAttrDivFeatures, 0, sizeof(_enabledVtxAttrDivFeatures));
 	memset((void*)&_enabledPortabilityFeatures, 0, sizeof(_enabledPortabilityFeatures));
 
@@ -2347,17 +2516,29 @@
 	pdVtxAttrDivFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT;
 	pdVtxAttrDivFeatures.pNext = &pdPortabilityFeatures;
 
+	VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT pdTexelBuffAlignFeatures;
+	pdTexelBuffAlignFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT;
+	pdTexelBuffAlignFeatures.pNext = &pdVtxAttrDivFeatures;
+
+	VkPhysicalDeviceScalarBlockLayoutFeaturesEXT pdScalarLayoutFeatures;
+	pdScalarLayoutFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT;
+	pdScalarLayoutFeatures.pNext = &pdTexelBuffAlignFeatures;
+
 	VkPhysicalDeviceHostQueryResetFeaturesEXT pdHostQryResetFeatures;
 	pdHostQryResetFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT;
-	pdHostQryResetFeatures.pNext = &pdVtxAttrDivFeatures;
+	pdHostQryResetFeatures.pNext = &pdScalarLayoutFeatures;
 
 	VkPhysicalDeviceVariablePointerFeatures pdVarPtrFeatures;
 	pdVarPtrFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES;
 	pdVarPtrFeatures.pNext = &pdHostQryResetFeatures;
 
+	VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR pdUBOLayoutFeatures;
+	pdUBOLayoutFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR;
+	pdUBOLayoutFeatures.pNext = &pdVarPtrFeatures;
+
 	VkPhysicalDeviceFloat16Int8FeaturesKHR pdF16I8Features;
 	pdF16I8Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR;
-	pdF16I8Features.pNext = &pdVarPtrFeatures;
+	pdF16I8Features.pNext = &pdUBOLayoutFeatures;
 
 	VkPhysicalDevice8BitStorageFeaturesKHR pdStorage8Features;
 	pdStorage8Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR;
@@ -2411,6 +2592,13 @@
 							   &pdF16I8Features.shaderFloat16, 2);
 				break;
 			}
+			case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR: {
+				auto* requestedFeatures = (VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR*)next;
+				enableFeatures(&_enabledUBOLayoutFeatures.uniformBufferStandardLayout,
+							   &requestedFeatures->uniformBufferStandardLayout,
+							   &pdUBOLayoutFeatures.uniformBufferStandardLayout, 1);
+				break;
+			}
 			case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES: {
 				auto* requestedFeatures = (VkPhysicalDeviceVariablePointerFeatures*)next;
 				enableFeatures(&_enabledVarPtrFeatures.variablePointersStorageBuffer,
@@ -2425,6 +2613,20 @@
 							   &pdHostQryResetFeatures.hostQueryReset, 1);
 				break;
 			}
+			case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT: {
+				auto* requestedFeatures = (VkPhysicalDeviceScalarBlockLayoutFeaturesEXT*)next;
+				enableFeatures(&_enabledScalarLayoutFeatures.scalarBlockLayout,
+							   &requestedFeatures->scalarBlockLayout,
+							   &pdScalarLayoutFeatures.scalarBlockLayout, 1);
+				break;
+			}
+			case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: {
+				auto* requestedFeatures = (VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*)next;
+				enableFeatures(&_enabledTexelBuffAlignFeatures.texelBufferAlignment,
+							   &requestedFeatures->texelBufferAlignment,
+							   &pdTexelBuffAlignFeatures.texelBufferAlignment, 1);
+				break;
+			}
 			case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: {
 				auto* requestedFeatures = (VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*)next;
 				enableFeatures(&_enabledVtxAttrDivFeatures.vertexAttributeInstanceRateDivisor,
@@ -2459,7 +2661,7 @@
 	MVKExtensionList* pWritableExtns = (MVKExtensionList*)&_enabledExtensions;
 	setConfigurationResult(pWritableExtns->enable(pCreateInfo->enabledExtensionCount,
 												  pCreateInfo->ppEnabledExtensionNames,
-												  getInstance()->getDriverLayer()->getSupportedExtensions()));
+												  getPhysicalDevice()->getSupportedExtensions()));
 }
 
 // Create the command queues
@@ -2482,12 +2684,19 @@
 	}
 }
 
+void MVKDevice::initMTLCompileOptions() {
+	_mtlCompileOptions = [MTLCompileOptions new];	// retained
+	_mtlCompileOptions.languageVersion = _pMetalFeatures->mslVersionEnum;
+}
+
 MVKDevice::~MVKDevice() {
 	for (auto& queues : _queuesByQueueFamilyIndex) {
 		mvkDestroyContainerContents(queues);
 	}
-    [_globalVisibilityResultMTLBuffer release];
 	_commandResourceFactory->destroy();
+
+	[_mtlCompileOptions release];
+    [_globalVisibilityResultMTLBuffer release];
 }
 
 
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h
index 5c13988..c87b443 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.h
@@ -101,7 +101,7 @@
 	inline MTLCPUCacheMode getMTLCPUCacheMode() { return _mtlCPUCacheMode; }
 
 	/** Returns the Metal reource options used by this memory allocation. */
-	inline MTLResourceOptions getMTLResourceOptions() { return _mtlResourceOptions; }
+	inline MTLResourceOptions getMTLResourceOptions() { return mvkMTLResourceOptions(_mtlStorageMode, _mtlCPUCacheMode); }
 
 
 #pragma mark Construction
@@ -139,7 +139,6 @@
 	void* _pHostMemory = nullptr;
 	bool _isMapped = false;
 	bool _isDedicated = false;
-	MTLResourceOptions _mtlResourceOptions;
 	MTLStorageMode _mtlStorageMode;
 	MTLCPUCacheMode _mtlCPUCacheMode;
 };
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm
index b179646..ee4aedf 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceMemory.mm
@@ -163,10 +163,10 @@
 
 	// If host memory was already allocated, it is copied into the new MTLBuffer, and then released.
 	if (_pHostMemory) {
-		_mtlBuffer = [getMTLDevice() newBufferWithBytes: _pHostMemory length: memLen options: _mtlResourceOptions];     // retained
+		_mtlBuffer = [getMTLDevice() newBufferWithBytes: _pHostMemory length: memLen options: getMTLResourceOptions()];     // retained
 		freeHostMemory();
 	} else {
-		_mtlBuffer = [getMTLDevice() newBufferWithLength: memLen options: _mtlResourceOptions];     // retained
+		_mtlBuffer = [getMTLDevice() newBufferWithLength: memLen options: getMTLResourceOptions()];     // retained
 	}
 	_pMemory = isMemoryHostAccessible() ? _mtlBuffer.contents : nullptr;
 
@@ -210,7 +210,6 @@
 								 const VkAllocationCallbacks* pAllocator) : MVKVulkanAPIDeviceObject(device) {
 	// Set Metal memory parameters
 	VkMemoryPropertyFlags vkMemProps = _device->_pMemoryProperties->memoryTypes[pAllocateInfo->memoryTypeIndex].propertyFlags;
-	_mtlResourceOptions = mvkMTLResourceOptionsFromVkMemoryPropertyFlags(vkMemProps);
 	_mtlStorageMode = mvkMTLStorageModeFromVkMemoryPropertyFlags(vkMemProps);
 	_mtlCPUCacheMode = mvkMTLCPUCacheModeFromVkMemoryPropertyFlags(vkMemProps);
 
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.h b/MoltenVK/MoltenVK/GPUObjects/MVKImage.h
index db47a1d..0cbf0d0 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.h
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.h
@@ -22,6 +22,7 @@
 #include "MVKSync.h"
 #include "MVKVector.h"
 #include <MoltenVKSPIRVToMSLConverter/SPIRVToMSLConverter.h>
+#include <unordered_map>
 #include <mutex>
 
 #import <IOSurface/IOSurfaceRef.h>
@@ -61,6 +62,21 @@
     /** Returns the Vulkan image format of this image. */
     VkFormat getVkFormat();
 
+	/** Returns whether this image is compressed. */
+	bool getIsCompressed();
+
+	/**
+	 * Returns whether the format of this image supports ANY of the indicated feature flags,
+	 * taking into consideration whether this image is using linear or optimal tiling.
+	 */
+	bool getSupportsAnyFormatFeature(VkFormatFeatureFlags requiredFormatFeatureFlags);
+
+	/**
+	 * Returns whether the format of this image supports ALL of the indicated feature flags,
+	 * taking into consideration whether this image is using linear or optimal tiling.
+	 */
+	bool getSupportsAllFormatFeatures(VkFormatFeatureFlags requiredFormatFeatureFlags);
+
 	/** 
 	 * Returns the 3D extent of this image at the base mipmap level.
 	 * For 2D or cube images, the Z component will be 1.  
@@ -139,6 +155,9 @@
 	/** Returns the Metal texture underlying this image. */
 	id<MTLTexture> getMTLTexture();
 
+	/** Returns a Metal texture that interprets the pixels in the specified format. */
+	id<MTLTexture> getMTLTexture(MTLPixelFormat mtlPixFmt);
+
     /**
      * Sets this image to use the specified MTLTexture.
      *
@@ -218,17 +237,17 @@
 
 	void propogateDebugName() override;
 	MVKImageSubresource* getSubresource(uint32_t mipLevel, uint32_t arrayLayer);
-	void validateConfig(const VkImageCreateInfo* pCreateInfo);
-	VkSampleCountFlagBits validateSamples(const VkImageCreateInfo* pCreateInfo);
-	uint32_t validateMipLevels(const VkImageCreateInfo* pCreateInfo);
-	bool validateLinear(const VkImageCreateInfo* pCreateInfo);
+	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);
 	virtual id<MTLTexture> newMTLTexture();
 	void resetMTLTexture();
     void resetIOSurface();
-	MTLTextureDescriptor* getMTLTextureDescriptor();
+	MTLTextureDescriptor* newMTLTextureDescriptor();
     void updateMTLTextureContent(MVKImageSubresource& subresource, VkDeviceSize offset, VkDeviceSize size);
     void getMTLTextureContent(MVKImageSubresource& subresource, VkDeviceSize offset, VkDeviceSize size);
 	bool shouldFlushHostMemory();
@@ -239,6 +258,7 @@
 						   VkImageMemoryBarrier* pImageMemoryBarrier);
 
 	std::vector<MVKImageSubresource> _subresources;
+	std::unordered_map<NSUInteger, id<MTLTexture>> _mtlTextureViews;
     VkExtent3D _extent;
     uint32_t _mipLevels;
     uint32_t _arrayLayers;
@@ -361,7 +381,7 @@
 
 protected:
 	void propogateDebugName() override {}
-	MTLSamplerDescriptor* getMTLSamplerDescriptor(const VkSamplerCreateInfo* pCreateInfo);
+	MTLSamplerDescriptor* newMTLSamplerDescriptor(const VkSamplerCreateInfo* pCreateInfo);
 	void initConstExprSampler(const VkSamplerCreateInfo* pCreateInfo);
 
 	id<MTLSamplerState> _mtlSamplerState;
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
index 96ebc14..4f2683e 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
@@ -41,6 +41,24 @@
 
 VkFormat MVKImage::getVkFormat() { return mvkVkFormatFromMTLPixelFormat(_mtlPixelFormat); }
 
+bool MVKImage::getIsCompressed() {
+	return mvkFormatTypeFromMTLPixelFormat(_mtlPixelFormat) == kMVKFormatCompressed;
+}
+
+bool MVKImage::getSupportsAnyFormatFeature(VkFormatFeatureFlags requiredFormatFeatureFlags) {
+	VkFormatProperties props;
+	_device->getPhysicalDevice()->getFormatProperties(getVkFormat(), &props);
+	VkFormatFeatureFlags imageFeatureFlags = _isLinear ? props.linearTilingFeatures : props.optimalTilingFeatures;
+	return mvkIsAnyFlagEnabled(imageFeatureFlags, requiredFormatFeatureFlags);
+}
+
+bool MVKImage::getSupportsAllFormatFeatures(VkFormatFeatureFlags requiredFormatFeatureFlags) {
+	VkFormatProperties props;
+	_device->getPhysicalDevice()->getFormatProperties(getVkFormat(), &props);
+	VkFormatFeatureFlags imageFeatureFlags = _isLinear ? props.linearTilingFeatures : props.optimalTilingFeatures;
+	return mvkAreAllFlagsEnabled(imageFeatureFlags, requiredFormatFeatureFlags);
+}
+
 VkExtent3D MVKImage::getExtent3D(uint32_t mipLevel) {
 	return mvkMipmapLevelSizeFromBaseSize3D(_extent, mipLevel);
 }
@@ -157,13 +175,14 @@
 										   ? _device->getPhysicalDevice()->getPrivateMemoryTypes()
 										   : _device->getPhysicalDevice()->getAllMemoryTypes());
 #if MVK_MACOS
-	if (!_isLinear) {  // XXX Linear images must support host-coherent memory
+	// Metal on macOS does not provide native support for host-coherent memory, but Vulkan requires it for Linear images
+	if ( !_isLinear ) {
 		mvkDisableFlag(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getHostCoherentMemoryTypes());
 	}
 #endif
 #if MVK_IOS
 	// Only transient attachments may use memoryless storage
-	if (!mvkAreFlagsEnabled(_usage, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) ) {
+	if (!mvkAreAllFlagsEnabled(_usage, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) ) {
 		mvkDisableFlag(pMemoryRequirements->memoryTypeBits, _device->getPhysicalDevice()->getLazilyAllocatedMemoryTypes());
 	}
 #endif
@@ -279,6 +298,22 @@
 	return _mtlTexture;
 }
 
+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 texture.
+		lock_guard<mutex> lock(_lock);
+		mtlTex = _mtlTextureViews[mtlPixFmt];
+		if ( !mtlTex ) {
+			mtlTex = [getMTLTexture() newTextureViewWithPixelFormat: mtlPixFmt];	// retained
+			_mtlTextureViews[mtlPixFmt] = mtlTex;
+		}
+	}
+	return mtlTex;
+}
+
 VkResult MVKImage::setMTLTexture(id<MTLTexture> mtlTexture) {
     lock_guard<mutex> lock(_lock);
     resetMTLTexture();
@@ -308,15 +343,21 @@
 // This implementation creates a new MTLTexture from a MTLTextureDescriptor and possible IOSurface.
 // Subclasses may override this function to create the MTLTexture in a different manner.
 id<MTLTexture> MVKImage::newMTLTexture() {
-    if (_ioSurface) {
-        return [getMTLDevice() newTextureWithDescriptor: getMTLTextureDescriptor() iosurface: _ioSurface plane: 0];
+	id<MTLTexture> mtlTex = nil;
+	MTLTextureDescriptor* mtlTexDesc = newMTLTextureDescriptor();	// temp retain
+
+	if (_ioSurface) {
+		mtlTex = [getMTLDevice() newTextureWithDescriptor: mtlTexDesc iosurface: _ioSurface plane: 0];
 	} else if (_usesTexelBuffer) {
-        return [_deviceMemory->_mtlBuffer newTextureWithDescriptor: getMTLTextureDescriptor()
-															offset: getDeviceMemoryOffset()
-													   bytesPerRow: _subresources[0].layout.rowPitch];
-    } else {
-        return [getMTLDevice() newTextureWithDescriptor: getMTLTextureDescriptor()];
-    }
+		mtlTex = [_deviceMemory->_mtlBuffer newTextureWithDescriptor: mtlTexDesc
+															  offset: getDeviceMemoryOffset()
+														 bytesPerRow: _subresources[0].layout.rowPitch];
+	} else {
+		mtlTex = [getMTLDevice() newTextureWithDescriptor: mtlTexDesc];
+	}
+
+	[mtlTexDesc release];											// temp release
+	return mtlTex;
 }
 
 // Removes and releases the MTLTexture object, so that it can be lazily created by getMTLTexture().
@@ -355,14 +396,16 @@
     } else {
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
-        _ioSurface = IOSurfaceCreate((CFDictionaryRef)@{
-                                                        (id)kIOSurfaceWidth: @(_extent.width),
-                                                        (id)kIOSurfaceHeight: @(_extent.height),
-                                                        (id)kIOSurfaceBytesPerElement: @(mvkMTLPixelFormatBytesPerBlock(_mtlPixelFormat)),
-                                                        (id)kIOSurfaceElementWidth: @(mvkMTLPixelFormatBlockTexelSize(_mtlPixelFormat).width),
-                                                        (id)kIOSurfaceElementHeight: @(mvkMTLPixelFormatBlockTexelSize(_mtlPixelFormat).height),
-                                                        (id)kIOSurfaceIsGlobal: @(true),    // Deprecated but needed for interprocess transfers
-                                                        });
+		@autoreleasepool {
+			_ioSurface = IOSurfaceCreate((CFDictionaryRef)@{
+															(id)kIOSurfaceWidth: @(_extent.width),
+															(id)kIOSurfaceHeight: @(_extent.height),
+															(id)kIOSurfaceBytesPerElement: @(mvkMTLPixelFormatBytesPerBlock(_mtlPixelFormat)),
+															(id)kIOSurfaceElementWidth: @(mvkMTLPixelFormatBlockTexelSize(_mtlPixelFormat).width),
+															(id)kIOSurfaceElementHeight: @(mvkMTLPixelFormatBlockTexelSize(_mtlPixelFormat).height),
+															(id)kIOSurfaceIsGlobal: @(true),    // Deprecated but needed for interprocess transfers
+															});
+		}
 #pragma clang diagnostic pop
 
     }
@@ -373,25 +416,21 @@
 }
 
 MTLTextureUsage MVKImage::getMTLTextureUsage() {
+
 	MTLTextureUsage usage = mvkMTLTextureUsageFromVkImageUsageFlags(_usage);
 
-	// If this is a depth/stencil texture, and the device supports it, tell
-	// Metal we may create texture views of this, too.
-	if ((_mtlPixelFormat == MTLPixelFormatDepth32Float_Stencil8
-#if MVK_MACOS
-		 || _mtlPixelFormat == MTLPixelFormatDepth24Unorm_Stencil8
-#endif
-		) && _device->_pMetalFeatures->stencilViews) {
-		mvkEnableFlag(usage, MTLTextureUsagePixelFormatView);
+	// Remove view usage from D/S if Metal doesn't support it
+	if ( !_device->_pMetalFeatures->stencilViews &&
+		mvkMTLPixelFormatIsDepthFormat(_mtlPixelFormat) &&
+		mvkMTLPixelFormatIsStencilFormat(_mtlPixelFormat)) {
+
+		mvkDisableFlag(usage, MTLTextureUsagePixelFormatView);
 	}
 
-	// If this format doesn't support being blitted to, and the usage
-	// doesn't specify use as an attachment, turn off
-	// MTLTextureUsageRenderTarget.
-	VkFormatProperties props;
-	_device->getPhysicalDevice()->getFormatProperties(getVkFormat(), &props);
-	if (!mvkAreFlagsEnabled(_isLinear ? props.linearTilingFeatures : props.optimalTilingFeatures, VK_FORMAT_FEATURE_BLIT_DST_BIT) &&
-		!mvkIsAnyFlagEnabled(_usage, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)) {
+	// If this format doesn't support being rendered to, disable MTLTextureUsageRenderTarget.
+	if ( !getSupportsAnyFormatFeature(VK_FORMAT_FEATURE_BLIT_DST_BIT |
+									  VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
+									  VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) ) {
 		mvkDisableFlag(usage, MTLTextureUsageRenderTarget);
 	}
 
@@ -405,9 +444,10 @@
 	return usage;
 }
 
-// Returns an autoreleased Metal texture descriptor constructed from the properties of this image.
-MTLTextureDescriptor* MVKImage::getMTLTextureDescriptor() {
-	MTLTextureDescriptor* mtlTexDesc = [[MTLTextureDescriptor alloc] init];
+// 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() {
+	MTLTextureDescriptor* mtlTexDesc = [MTLTextureDescriptor new];	// retained
 #if MVK_MACOS
 	if (_is3DCompressed) {
 		// Metal doesn't yet support 3D compressed textures, so we'll decompress
@@ -430,7 +470,7 @@
 	mtlTexDesc.storageModeMVK = getMTLStorageMode();
 	mtlTexDesc.cpuCacheMode = getMTLCPUCacheMode();
 
-	return [mtlTexDesc autorelease];
+	return mtlTexDesc;
 }
 
 MTLStorageMode MVKImage::getMTLStorageMode() {
@@ -569,18 +609,22 @@
     _arrayLayers = max(pCreateInfo->arrayLayers, minDim);
 
 	// Perform validation and adjustments before configuring other settings
-	validateConfig(pCreateInfo);
-	_samples = validateSamples(pCreateInfo);
-	_mipLevels = validateMipLevels(pCreateInfo);
-	_isLinear = validateLinear(pCreateInfo);
+	bool isAttachment = mvkIsAnyFlagEnabled(pCreateInfo->usage, (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
+																 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
+																 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
+																 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT));
+	validateConfig(pCreateInfo, isAttachment);
+	_samples = validateSamples(pCreateInfo, isAttachment);
+	_mipLevels = validateMipLevels(pCreateInfo, isAttachment);
+	_isLinear = validateLinear(pCreateInfo, isAttachment);
 
 	_mtlPixelFormat = getMTLPixelFormatFromVkFormat(pCreateInfo->format);
 	_mtlTextureType = mvkMTLTextureTypeFromVkImageType(pCreateInfo->imageType, _arrayLayers, _samples > VK_SAMPLE_COUNT_1_BIT);
 	_usage = pCreateInfo->usage;
 
 	_is3DCompressed = (pCreateInfo->imageType == VK_IMAGE_TYPE_3D) && (mvkFormatTypeFromVkFormat(pCreateInfo->format) == kMVKFormatCompressed);
-	_isDepthStencilAttachment = (mvkAreFlagsEnabled(pCreateInfo->usage, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) ||
-								 mvkAreFlagsEnabled(mvkVkFormatProperties(pCreateInfo->format).optimalTilingFeatures, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT));
+	_isDepthStencilAttachment = (mvkAreAllFlagsEnabled(pCreateInfo->usage, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) ||
+								 mvkAreAllFlagsEnabled(mvkVkFormatProperties(pCreateInfo->format).optimalTilingFeatures, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT));
 	_canSupportMTLTextureView = !_isDepthStencilAttachment || _device->_pMetalFeatures->stencilViews;
 	_hasExpectedTexelSize = (mvkMTLPixelFormatBytesPerBlock(_mtlPixelFormat) == mvkVkFormatBytesPerBlock(pCreateInfo->format));
 
@@ -593,7 +637,7 @@
     initSubresources(pCreateInfo);
 }
 
-void MVKImage::validateConfig(const VkImageCreateInfo* pCreateInfo) {
+void MVKImage::validateConfig(const VkImageCreateInfo* pCreateInfo, bool isAttachment) {
 
 	bool is2D = pCreateInfo->imageType == VK_IMAGE_TYPE_2D;
 	bool isCompressed = mvkFormatTypeFromVkFormat(pCreateInfo->format) == kMVKFormatCompressed;
@@ -612,18 +656,18 @@
 	if ((mvkFormatTypeFromVkFormat(pCreateInfo->format) == kMVKFormatDepthStencil) && !is2D ) {
 		setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : Under Metal, depth/stencil formats may only be used with 2D images."));
 	}
-
-	bool isAttachment = mvkIsAnyFlagEnabled(pCreateInfo->usage, (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT));
 	if (isAttachment && (pCreateInfo->arrayLayers > 1) && !_device->_pMetalFeatures->layeredRendering) {
 		setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : This device does not support rendering to array (layered) attachments."));
 	}
-
+	if (isAttachment && (pCreateInfo->imageType == VK_IMAGE_TYPE_1D)) {
+		setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : This device does not support rendering to 1D attachments."));
+	}
 	if (mvkIsAnyFlagEnabled(pCreateInfo->flags, VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT)) {
 		setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : Metal does not allow uncompressed views of compressed images."));
 	}
 }
 
-VkSampleCountFlagBits MVKImage::validateSamples(const VkImageCreateInfo* pCreateInfo) {
+VkSampleCountFlagBits MVKImage::validateSamples(const VkImageCreateInfo* pCreateInfo, bool isAttachment) {
 
 	VkSampleCountFlagBits validSamples = pCreateInfo->samples;
 
@@ -644,8 +688,6 @@
 			setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : This device does not support multisampled array textures. Setting sample count to 1."));
 			validSamples = VK_SAMPLE_COUNT_1_BIT;
 		}
-
-		bool isAttachment = mvkIsAnyFlagEnabled(pCreateInfo->usage, (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT));
 		if (isAttachment && !_device->_pMetalFeatures->multisampleLayeredRendering) {
 			setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : This device does not support rendering to multisampled array (layered) attachments. Setting sample count to 1."));
 			validSamples = VK_SAMPLE_COUNT_1_BIT;
@@ -655,7 +697,7 @@
 	return validSamples;
 }
 
-uint32_t MVKImage::validateMipLevels(const VkImageCreateInfo* pCreateInfo) {
+uint32_t MVKImage::validateMipLevels(const VkImageCreateInfo* pCreateInfo, bool isAttachment) {
 	uint32_t minDim = 1;
 	uint32_t validMipLevels = max(pCreateInfo->mipLevels, minDim);
 
@@ -669,7 +711,7 @@
 	return validMipLevels;
 }
 
-bool MVKImage::validateLinear(const VkImageCreateInfo* pCreateInfo) {
+bool MVKImage::validateLinear(const VkImageCreateInfo* pCreateInfo, bool isAttachment) {
 
 	if (pCreateInfo->tiling != VK_IMAGE_TILING_LINEAR ) { return false; }
 
@@ -701,8 +743,8 @@
 	}
 
 #if MVK_MACOS
-	if ( mvkIsAnyFlagEnabled(pCreateInfo->usage, (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) ) {
-		setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : If tiling is VK_IMAGE_TILING_LINEAR, usage must not include VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, or VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT."));
+	if (isAttachment) {
+		setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImage() : This device does not support rendering to linear (VK_IMAGE_TILING_LINEAR) images."));
 		isLin = false;
 	}
 #endif
@@ -757,6 +799,7 @@
 	if (_deviceMemory) { _deviceMemory->removeImage(this); }
 	resetMTLTexture();
     resetIOSurface();
+	for (auto elem : _mtlTextureViews) { [elem.second release]; }
 }
 
 
@@ -890,10 +933,10 @@
 		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 (!mvkAreFlagsEnabled(_usage, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)) {
-			setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): 2D views on 3D images are only supported for color attachments."));
-		} else if (mvkIsAnyFlagEnabled(_usage, ~VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)) {
-			reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCreateImageView(): 2D views on 3D images are only supported for color attachments.");
+		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)) {
+			report