Repository: gfx-rs/naga (Rust)

Issue:
[wgsl-in] Phony assignment
Hi, phony assignments in WGSL input seem to not be recognised by naga currently

code example (slightly altered copy of an example in the spec https://gpuweb.github.io/gpuweb/wgsl/#phony-assignment-section, since as this is an example use it should presumably definitely work):
```
var <private> counter: i32;

fn increment_and_yield_previous() -> i32 {
	let previous = counter;
	counter = counter + 1;
	return previous;
}

@stage(compute) @workgroup_size(1)
fn compute_main(
) {
	_ = increment_and_yield_previous();
}
```

resultant error:
```
error: unknown local function `_`
   ┌─ phonytest.wgsl:12:2
   │
12 │     _ = increment_and_yield_previous();
   │     ^ unknown local function

Could not parse WGSL
```


Discussion:
We currently allow the `_` identifier for let and var assignments and this works like phony assignment but according to the spec (and this issue) we shouldn't require let/var since the `_` is not supposed to be an identifier and therefore not able to be declared via let/var.
It is strange for phony assignment not requiring `let`.
@stshine see https://github.com/gpuweb/gpuweb/pull/2127 for the reasons behind it



Patch:
diff --git a/src/front/wgsl/lexer.rs b/src/front/wgsl/lexer.rs
index 91986d552a..212e41f2bf 100644
--- a/src/front/wgsl/lexer.rs
+++ b/src/front/wgsl/lexer.rs
@@ -544,6 +544,9 @@ impl<'a> Lexer<'a> {
 
     pub(super) fn next_ident_with_span(&mut self) -> Result<(&'a str, Span), Error<'a>> {
         match self.next() {
+            (Token::Word(word), span) if word == "_" => {
+                Err(Error::InvalidIdentifierUnderscore(span))
+            }
             (Token::Word(word), span) if word.starts_with("__") => {
                 Err(Error::ReservedIdentifierPrefix(span))
             }
diff --git a/src/front/wgsl/mod.rs b/src/front/wgsl/mod.rs
index 610c8c5f89..5e5502f4b5 100644
--- a/src/front/wgsl/mod.rs
+++ b/src/front/wgsl/mod.rs
@@ -147,6 +147,7 @@ pub enum Error<'a> {
     InvalidForInitializer(Span),
     InvalidGatherComponent(Span, i32),
     InvalidConstructorComponentType(Span, i32),
+    InvalidIdentifierUnderscore(Span),
     ReservedIdentifierPrefix(Span),
     UnknownAddressSpace(Span),
     UnknownAttribute(Span),
@@ -362,6 +363,11 @@ impl<'a> Error<'a> {
                 labels: vec![(bad_span.clone(), "invalid component type".into())],
                 notes: vec![],
             },
+            Error::InvalidIdentifierUnderscore(ref bad_span) => ParseError {
+                message: "Identifier can't be '_'".to_string(),
+                labels: vec![(bad_span.clone(), "invalid identifier".into())],
+                notes: vec!["Use phony assignment instead ('_ =' notice the absence of 'let' or 'var')".to_string()],
+            },
             Error::ReservedIdentifierPrefix(ref bad_span) => ParseError {
                 message: format!("Identifier starts with a reserved prefix: '{}'", &source[bad_span.clone()]),
                 labels: vec![(bad_span.clone(), "invalid identifier".into())],
@@ -3489,6 +3495,21 @@ impl Parser {
             (Token::Word(word), _) => {
                 let mut emitter = super::Emitter::default();
                 let statement = match word {
+                    "_" => {
+                        let _ = lexer.next();
+                        emitter.start(context.expressions);
+                        lexer.expect(Token::Operation('='))?;
+                        let expr_id = self.parse_general_expression(
+                            lexer,
+                            context.as_expression(block, &mut emitter),
+                        )?;
+                        lexer.expect(Token::Separator(';'))?;
+                        block.extend(emitter.finish(context.expressions));
+                        // TODO: the situation here could be improved but
+                        // for now this is necessary to get the expressions emitted
+                        context.named_expressions.insert(expr_id, "_".to_string());
+                        None
+                    }
                     "let" => {
                         let _ = lexer.next();
                         emitter.start(context.expressions);


Test patch:
diff --git a/tests/in/access.wgsl b/tests/in/access.wgsl
index 4ad05f2014..c80d0349d3 100644
--- a/tests/in/access.wgsl
+++ b/tests/in/access.wgsl
@@ -28,13 +28,13 @@ fn test_matrix_within_struct_accesses() {
     idx--;
 
 	// loads
-    var _ = baz.m;
-    var _ = baz.m[0];
-    var _ = baz.m[idx];
-    var _ = baz.m[0][1];
-    var _ = baz.m[0][idx];
-    var _ = baz.m[idx][1];
-    var _ = baz.m[idx][idx];
+    _ = baz.m;
+    _ = baz.m[0];
+    _ = baz.m[idx];
+    _ = baz.m[0][1];
+    _ = baz.m[0][idx];
+    _ = baz.m[idx][1];
+    _ = baz.m[idx][idx];
 
     var t = Baz(mat3x2<f32>(vec2<f32>(1.0), vec2<f32>(2.0), vec2<f32>(3.0)));
 
@@ -83,7 +83,7 @@ fn foo_vert(@builtin(vertex_index) vi: u32) -> @builtin(position) vec4<f32> {
 	c[vi + 1u] = 42;
 	let value = c[vi];
 
-	var _ = test_arr_as_arg(array<array<f32, 10>, 5>());
+	_ = test_arr_as_arg(array<array<f32, 10>, 5>());
 
 	return vec4<f32>(_matrix * vec4<f32>(vec4<i32>(value)), 2.0);
 }
diff --git a/tests/in/globals.wgsl b/tests/in/globals.wgsl
index 6e571e2718..89ab106f9d 100644
--- a/tests/in/globals.wgsl
+++ b/tests/in/globals.wgsl
@@ -39,17 +39,17 @@ fn test_msl_packed_vec3() {
     let data = alignment;
 
     // loads
-    let _ = data.v3;
-    let _ = data.v3.zx;
+    _ = data.v3;
+    _ = data.v3.zx;
     test_msl_packed_vec3_as_arg(data.v3);
 
     // matrix vector multiplication
-    let _ = data.v3 * mat3x3<f32>();
-    let _ = mat3x3<f32>() * data.v3;
+    _ = data.v3 * mat3x3<f32>();
+    _ = mat3x3<f32>() * data.v3;
 
     // scalar vector multiplication
-    let _ = data.v3 * 2.0;
-    let _ = 2.0 * data.v3;
+    _ = data.v3 * 2.0;
+    _ = 2.0 * data.v3;
 }
 
 @compute @workgroup_size(1)
diff --git a/tests/in/operators.wgsl b/tests/in/operators.wgsl
index f623294991..cfc5896595 100644
--- a/tests/in/operators.wgsl
+++ b/tests/in/operators.wgsl
@@ -54,211 +54,211 @@ fn constructors() -> f32 {
     );
 
     // zero value constructors
-    var _ = bool();
-    var _ = i32();
-    var _ = u32();
-    var _ = f32();
-    var _ = vec2<u32>();
-    var _ = mat2x2<f32>();
-    var _ = array<Foo, 3>();
-    var _ = Foo();
+    _ = bool();
+    _ = i32();
+    _ = u32();
+    _ = f32();
+    _ = vec2<u32>();
+    _ = mat2x2<f32>();
+    _ = array<Foo, 3>();
+    _ = Foo();
 
     // constructors that infer their type from their parameters
-    var _ = vec2(0u);
-    var _ = mat2x2(vec2(0.), vec2(0.));
-    var _ = array(0, 1, 2, 3);
+    _ = vec2(0u);
+    _ = mat2x2(vec2(0.), vec2(0.));
+    _ = array(0, 1, 2, 3);
 
     return foo.a.x;
 }
 
 fn logical() {
     // unary
-    let _ = !true;
-    let _ = !vec2(true);
+    _ = !true;
+    _ = !vec2(true);
 
     // binary
-    let _ = true || false;
-    let _ = true && false;
-    let _ = true | false;
-    let _ = vec3(true) | vec3(false);
-    let _ = true & false;
-    let _ = vec4(true) & vec4(false);
+    _ = true || false;
+    _ = true && false;
+    _ = true | false;
+    _ = vec3(true) | vec3(false);
+    _ = true & false;
+    _ = vec4(true) & vec4(false);
 }
 
 fn arithmetic() {
     // unary
     // TODO: uncomment when we get the changes from https://github.com/gfx-rs/rspirv/pull/231
-    // let _ = -1;
-    let _ = -1.0;
-    let _ = -vec2(1);
-    let _ = -vec2(1.0);
+    // _ = -1;
+    _ = -1.0;
+    _ = -vec2(1);
+    _ = -vec2(1.0);
 
     // binary
     // Addition
-    let _ = 2 + 1;
-    let _ = 2u + 1u;
-    let _ = 2.0 + 1.0;
-    let _ = vec2(2) + vec2(1);
-    let _ = vec3(2u) + vec3(1u);
-    let _ = vec4(2.0) + vec4(1.0);
+    _ = 2 + 1;
+    _ = 2u + 1u;
+    _ = 2.0 + 1.0;
+    _ = vec2(2) + vec2(1);
+    _ = vec3(2u) + vec3(1u);
+    _ = vec4(2.0) + vec4(1.0);
 
     // Subtraction
-    let _ = 2 - 1;
-    let _ = 2u - 1u;
-    let _ = 2.0 - 1.0;
-    let _ = vec2(2) - vec2(1);
-    let _ = vec3(2u) - vec3(1u);
-    let _ = vec4(2.0) - vec4(1.0);
+    _ = 2 - 1;
+    _ = 2u - 1u;
+    _ = 2.0 - 1.0;
+    _ = vec2(2) - vec2(1);
+    _ = vec3(2u) - vec3(1u);
+    _ = vec4(2.0) - vec4(1.0);
 
     // Multiplication
-    let _ = 2 * 1;
-    let _ = 2u * 1u;
-    let _ = 2.0 * 1.0;
-    let _ = vec2(2) * vec2(1);
-    let _ = vec3(2u) * vec3(1u);
-    let _ = vec4(2.0) * vec4(1.0);
+    _ = 2 * 1;
+    _ = 2u * 1u;
+    _ = 2.0 * 1.0;
+    _ = vec2(2) * vec2(1);
+    _ = vec3(2u) * vec3(1u);
+    _ = vec4(2.0) * vec4(1.0);
 
     // Division
-    let _ = 2 / 1;
-    let _ = 2u / 1u;
-    let _ = 2.0 / 1.0;
-    let _ = vec2(2) / vec2(1);
-    let _ = vec3(2u) / vec3(1u);
-    let _ = vec4(2.0) / vec4(1.0);
+    _ = 2 / 1;
+    _ = 2u / 1u;
+    _ = 2.0 / 1.0;
+    _ = vec2(2) / vec2(1);
+    _ = vec3(2u) / vec3(1u);
+    _ = vec4(2.0) / vec4(1.0);
 
     // Remainder
-    let _ = 2 % 1;
-    let _ = 2u % 1u;
-    let _ = 2.0 % 1.0;
-    let _ = vec2(2) % vec2(1);
-    let _ = vec3(2u) % vec3(1u);
-    let _ = vec4(2.0) % vec4(1.0);
+    _ = 2 % 1;
+    _ = 2u % 1u;
+    _ = 2.0 % 1.0;
+    _ = vec2(2) % vec2(1);
+    _ = vec3(2u) % vec3(1u);
+    _ = vec4(2.0) % vec4(1.0);
 
     // Binary arithmetic expressions with mixed scalar and vector operands
-    let _ = vec2(2) + 1;
-    let _ = 2 + vec2(1);
-    let _ = vec2(2u) + 1u;
-    let _ = 2u + vec2(1u);
-    let _ = vec2(2.0) + 1.0;
-    let _ = 2.0 + vec2(1.0);
-
-    let _ = vec2(2) - 1;
-    let _ = 2 - vec2(1);
-    let _ = vec2(2u) - 1u;
-    let _ = 2u - vec2(1u);
-    let _ = vec2(2.0) - 1.0;
-    let _ = 2.0 - vec2(1.0);
-
-    let _ = vec2(2) * 1;
-    let _ = 2 * vec2(1);
-    let _ = vec2(2u) * 1u;
-    let _ = 2u * vec2(1u);
-    let _ = vec2(2.0) * 1.0;
-    let _ = 2.0 * vec2(1.0);
-
-    let _ = vec2(2) / 1;
-    let _ = 2 / vec2(1);
-    let _ = vec2(2u) / 1u;
-    let _ = 2u / vec2(1u);
-    let _ = vec2(2.0) / 1.0;
-    let _ = 2.0 / vec2(1.0);
-
-    let _ = vec2(2) % 1;
-    let _ = 2 % vec2(1);
-    let _ = vec2(2u) % 1u;
-    let _ = 2u % vec2(1u);
-    let _ = vec2(2.0) % 1.0;
-    let _ = 2.0 % vec2(1.0);
+    _ = vec2(2) + 1;
+    _ = 2 + vec2(1);
+    _ = vec2(2u) + 1u;
+    _ = 2u + vec2(1u);
+    _ = vec2(2.0) + 1.0;
+    _ = 2.0 + vec2(1.0);
+
+    _ = vec2(2) - 1;
+    _ = 2 - vec2(1);
+    _ = vec2(2u) - 1u;
+    _ = 2u - vec2(1u);
+    _ = vec2(2.0) - 1.0;
+    _ = 2.0 - vec2(1.0);
+
+    _ = vec2(2) * 1;
+    _ = 2 * vec2(1);
+    _ = vec2(2u) * 1u;
+    _ = 2u * vec2(1u);
+    _ = vec2(2.0) * 1.0;
+    _ = 2.0 * vec2(1.0);
+
+    _ = vec2(2) / 1;
+    _ = 2 / vec2(1);
+    _ = vec2(2u) / 1u;
+    _ = 2u / vec2(1u);
+    _ = vec2(2.0) / 1.0;
+    _ = 2.0 / vec2(1.0);
+
+    _ = vec2(2) % 1;
+    _ = 2 % vec2(1);
+    _ = vec2(2u) % 1u;
+    _ = 2u % vec2(1u);
+    _ = vec2(2.0) % 1.0;
+    _ = 2.0 % vec2(1.0);
 
     // Matrix arithmetic
-    let _ = mat3x3<f32>() + mat3x3<f32>();
-    let _ = mat3x3<f32>() - mat3x3<f32>();
+    _ = mat3x3<f32>() + mat3x3<f32>();
+    _ = mat3x3<f32>() - mat3x3<f32>();
 
-    let _ = mat3x3<f32>() * 1.0;
-    let _ = 2.0 * mat3x3<f32>();
+    _ = mat3x3<f32>() * 1.0;
+    _ = 2.0 * mat3x3<f32>();
 
-    let _ = mat4x3<f32>() * vec4(1.0);
-    let _ = vec3(2.0) * mat4x3<f32>();
+    _ = mat4x3<f32>() * vec4(1.0);
+    _ = vec3(2.0) * mat4x3<f32>();
 
-    let _ = mat4x3<f32>() * mat3x4<f32>();
+    _ = mat4x3<f32>() * mat3x4<f32>();
 }
 
 fn bit() {
     // unary
-    let _ = ~1;
-    let _ = ~1u;
-    let _ = ~vec2(1);
-    let _ = ~vec3(1u);
+    _ = ~1;
+    _ = ~1u;
+    _ = ~vec2(1);
+    _ = ~vec3(1u);
 
     // binary
-    let _ = 2 | 1;
-    let _ = 2u | 1u;
-    let _ = vec2(2) | vec2(1);
-    let _ = vec3(2u) | vec3(1u);
-
-    let _ = 2 & 1;
-    let _ = 2u & 1u;
-    let _ = vec2(2) & vec2(1);
-    let _ = vec3(2u) & vec3(1u);
-
-    let _ = 2 ^ 1;
-    let _ = 2u ^ 1u;
-    let _ = vec2(2) ^ vec2(1);
-    let _ = vec3(2u) ^ vec3(1u);
-
-    let _ = 2 << 1u;
-    let _ = 2u << 1u;
-    let _ = vec2(2) << vec2(1u);
-    let _ = vec3(2u) << vec3(1u);
-
-    let _ = 2 >> 1u;
-    let _ = 2u >> 1u;
-    let _ = vec2(2) >> vec2(1u);
-    let _ = vec3(2u) >> vec3(1u);
+    _ = 2 | 1;
+    _ = 2u | 1u;
+    _ = vec2(2) | vec2(1);
+    _ = vec3(2u) | vec3(1u);
+
+    _ = 2 & 1;
+    _ = 2u & 1u;
+    _ = vec2(2) & vec2(1);
+    _ = vec3(2u) & vec3(1u);
+
+    _ = 2 ^ 1;
+    _ = 2u ^ 1u;
+    _ = vec2(2) ^ vec2(1);
+    _ = vec3(2u) ^ vec3(1u);
+
+    _ = 2 << 1u;
+    _ = 2u << 1u;
+    _ = vec2(2) << vec2(1u);
+    _ = vec3(2u) << vec3(1u);
+
+    _ = 2 >> 1u;
+    _ = 2u >> 1u;
+    _ = vec2(2) >> vec2(1u);
+    _ = vec3(2u) >> vec3(1u);
 }
 
 fn comparison() {
-    let _ = 2 == 1;
-    let _ = 2u == 1u;
-    let _ = 2.0 == 1.0;
-    let _ = vec2(2) == vec2(1);
-    let _ = vec3(2u) == vec3(1u);
-    let _ = vec4(2.0) == vec4(1.0);
-
-    let _ = 2 != 1;
-    let _ = 2u != 1u;
-    let _ = 2.0 != 1.0;
-    let _ = vec2(2) != vec2(1);
-    let _ = vec3(2u) != vec3(1u);
-    let _ = vec4(2.0) != vec4(1.0);
-
-    let _ = 2 < 1;
-    let _ = 2u < 1u;
-    let _ = 2.0 < 1.0;
-    let _ = vec2(2) < vec2(1);
-    let _ = vec3(2u) < vec3(1u);
-    let _ = vec4(2.0) < vec4(1.0);
-
-    let _ = 2 <= 1;
-    let _ = 2u <= 1u;
-    let _ = 2.0 <= 1.0;
-    let _ = vec2(2) <= vec2(1);
-    let _ = vec3(2u) <= vec3(1u);
-    let _ = vec4(2.0) <= vec4(1.0);
-
-    let _ = 2 > 1;
-    let _ = 2u > 1u;
-    let _ = 2.0 > 1.0;
-    let _ = vec2(2) > vec2(1);
-    let _ = vec3(2u) > vec3(1u);
-    let _ = vec4(2.0) > vec4(1.0);
-
-    let _ = 2 >= 1;
-    let _ = 2u >= 1u;
-    let _ = 2.0 >= 1.0;
-    let _ = vec2(2) >= vec2(1);
-    let _ = vec3(2u) >= vec3(1u);
-    let _ = vec4(2.0) >= vec4(1.0);
+    _ = 2 == 1;
+    _ = 2u == 1u;
+    _ = 2.0 == 1.0;
+    _ = vec2(2) == vec2(1);
+    _ = vec3(2u) == vec3(1u);
+    _ = vec4(2.0) == vec4(1.0);
+
+    _ = 2 != 1;
+    _ = 2u != 1u;
+    _ = 2.0 != 1.0;
+    _ = vec2(2) != vec2(1);
+    _ = vec3(2u) != vec3(1u);
+    _ = vec4(2.0) != vec4(1.0);
+
+    _ = 2 < 1;
+    _ = 2u < 1u;
+    _ = 2.0 < 1.0;
+    _ = vec2(2) < vec2(1);
+    _ = vec3(2u) < vec3(1u);
+    _ = vec4(2.0) < vec4(1.0);
+
+    _ = 2 <= 1;
+    _ = 2u <= 1u;
+    _ = 2.0 <= 1.0;
+    _ = vec2(2) <= vec2(1);
+    _ = vec3(2u) <= vec3(1u);
+    _ = vec4(2.0) <= vec4(1.0);
+
+    _ = 2 > 1;
+    _ = 2u > 1u;
+    _ = 2.0 > 1.0;
+    _ = vec2(2) > vec2(1);
+    _ = vec3(2u) > vec3(1u);
+    _ = vec4(2.0) > vec4(1.0);
+
+    _ = 2 >= 1;
+    _ = 2u >= 1u;
+    _ = 2.0 >= 1.0;
+    _ = vec2(2) >= vec2(1);
+    _ = vec3(2u) >= vec3(1u);
+    _ = vec4(2.0) >= vec4(1.0);
 }
 
 fn assignment() {
@@ -281,10 +281,10 @@ fn assignment() {
 
 @compute @workgroup_size(1)
 fn main() {
-    let _ = builtins();
-    let _ = splat();
-    let _ = bool_cast(v_f32_one.xyz);
-    let _ = constructors();
+    _ = builtins();
+    _ = splat();
+    _ = bool_cast(v_f32_one.xyz);
+    _ = constructors();
 
     logical();
     arithmetic();
diff --git a/tests/out/glsl/access.foo_vert.Vertex.glsl b/tests/out/glsl/access.foo_vert.Vertex.glsl
index 267dc2cea1..b5b4804d76 100644
--- a/tests/out/glsl/access.foo_vert.Vertex.glsl
+++ b/tests/out/glsl/access.foo_vert.Vertex.glsl
@@ -22,50 +22,36 @@ uniform Baz_block_1Vertex { Baz _group_0_binding_1_vs; };
 
 void test_matrix_within_struct_accesses() {
     int idx = 9;
-    mat3x2 unnamed_1 = mat3x2(0.0);
-    vec2 unnamed_2 = vec2(0.0);
-    vec2 unnamed_3 = vec2(0.0);
-    float unnamed_4 = 0.0;
-    float unnamed_5 = 0.0;
-    float unnamed_6 = 0.0;
-    float unnamed_7 = 0.0;
     Baz t = Baz(mat3x2(0.0));
     int _e4 = idx;
     idx = (_e4 - 1);
-    mat3x2 _e8 = _group_0_binding_1_vs.m;
-    unnamed_1 = _e8;
-    vec2 _e13 = _group_0_binding_1_vs.m[0];
-    unnamed_2 = _e13;
-    int _e16 = idx;
-    vec2 _e18 = _group_0_binding_1_vs.m[_e16];
-    unnamed_3 = _e18;
-    float _e25 = _group_0_binding_1_vs.m[0][1];
-    unnamed_4 = _e25;
+    mat3x2 unnamed = _group_0_binding_1_vs.m;
+    vec2 unnamed_1 = _group_0_binding_1_vs.m[0];
+    int _e14 = idx;
+    vec2 unnamed_2 = _group_0_binding_1_vs.m[_e14];
+    float unnamed_3 = _group_0_binding_1_vs.m[0][1];
+    int _e26 = idx;
+    float unnamed_4 = _group_0_binding_1_vs.m[0][_e26];
     int _e30 = idx;
-    float _e32 = _group_0_binding_1_vs.m[0][_e30];
-    unnamed_5 = _e32;
-    int _e35 = idx;
-    float _e39 = _group_0_binding_1_vs.m[_e35][1];
-    unnamed_6 = _e39;
-    int _e42 = idx;
-    int _e44 = idx;
-    float _e46 = _group_0_binding_1_vs.m[_e42][_e44];
-    unnamed_7 = _e46;
+    float unnamed_5 = _group_0_binding_1_vs.m[_e30][1];
+    int _e36 = idx;
+    int _e38 = idx;
+    float unnamed_6 = _group_0_binding_1_vs.m[_e36][_e38];
     t = Baz(mat3x2(vec2(1.0), vec2(2.0), vec2(3.0)));
-    int _e57 = idx;
-    idx = (_e57 + 1);
+    int _e50 = idx;
+    idx = (_e50 + 1);
     t.m = mat3x2(vec2(6.0), vec2(5.0), vec2(4.0));
     t.m[0] = vec2(9.0);
-    int _e74 = idx;
-    t.m[_e74] = vec2(90.0);
+    int _e67 = idx;
+    t.m[_e67] = vec2(90.0);
     t.m[0][1] = 10.0;
-    int _e87 = idx;
-    t.m[0][_e87] = 20.0;
-    int _e91 = idx;
-    t.m[_e91][1] = 30.0;
-    int _e97 = idx;
-    int _e99 = idx;
-    t.m[_e97][_e99] = 40.0;
+    int _e80 = idx;
+    t.m[0][_e80] = 20.0;
+    int _e84 = idx;
+    t.m[_e84][1] = 30.0;
+    int _e90 = idx;
+    int _e92 = idx;
+    t.m[_e90][_e92] = 40.0;
     return;
 }
 
@@ -82,7 +68,6 @@ void main() {
     uint vi = uint(gl_VertexID);
     float foo = 0.0;
     int c[5] = int[5](0, 0, 0, 0, 0);
-    float unnamed = 0.0;
     float baz_1 = foo;
     foo = 1.0;
     test_matrix_within_struct_accesses();
@@ -95,7 +80,6 @@ void main() {
     c[(vi + 1u)] = 42;
     int value = c[vi];
     float _e42 = test_arr_as_arg(float[5][10](float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), float[10](0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)));
-    unnamed = _e42;
     gl_Position = vec4((_matrix * vec4(ivec4(value))), 2.0);
     gl_Position.yz = vec2(-gl_Position.y, gl_Position.z * 2.0 - gl_Position.w);
     return;
diff --git a/tests/out/glsl/operators.main.Compute.glsl b/tests/out/glsl/operators.main.Compute.glsl
index bf7a7d847c..a27e97939a 100644
--- a/tests/out/glsl/operators.main.Compute.glsl
+++ b/tests/out/glsl/operators.main.Compute.glsl
@@ -35,174 +35,163 @@ vec3 bool_cast(vec3 x) {
 
 float constructors() {
     Foo foo = Foo(vec4(0.0), 0);
-    bool unnamed = false;
-    int unnamed_1 = 0;
-    uint unnamed_2 = 0u;
-    float unnamed_3 = 0.0;
-    uvec2 unnamed_4 = uvec2(0u, 0u);
-    mat2x2 unnamed_5 = mat2x2(vec2(0.0, 0.0), vec2(0.0, 0.0));
-    Foo unnamed_6[3] = Foo[3](Foo(vec4(0.0, 0.0, 0.0, 0.0), 0), Foo(vec4(0.0, 0.0, 0.0, 0.0), 0), Foo(vec4(0.0, 0.0, 0.0, 0.0), 0));
-    Foo unnamed_7 = Foo(vec4(0.0, 0.0, 0.0, 0.0), 0);
-    uvec2 unnamed_8 = uvec2(0u);
-    mat2x2 unnamed_9 = mat2x2(0.0);
-    int unnamed_10[4] = int[4](0, 0, 0, 0);
     foo = Foo(vec4(1.0), 1);
     mat2x2 mat2comp = mat2x2(vec2(1.0, 0.0), vec2(0.0, 1.0));
     mat4x4 mat4comp = mat4x4(vec4(1.0, 0.0, 0.0, 0.0), vec4(0.0, 1.0, 0.0, 0.0), vec4(0.0, 0.0, 1.0, 0.0), vec4(0.0, 0.0, 0.0, 1.0));
-    unnamed_8 = uvec2(0u);
-    unnamed_9 = mat2x2(vec2(0.0), vec2(0.0));
-    unnamed_10 = int[4](0, 1, 2, 3);
-    float _e70 = foo.a.x;
-    return _e70;
+    uvec2 unnamed = uvec2(0u);
+    mat2x2 unnamed_1 = mat2x2(vec2(0.0), vec2(0.0));
+    int unnamed_2[4] = int[4](0, 1, 2, 3);
+    float _e59 = foo.a.x;
+    return _e59;
 }
 
 void logical() {
-    bool unnamed_11 = (!true);
-    bvec2 unnamed_12 = not(bvec2(true));
-    bool unnamed_13 = (true || false);
-    bool unnamed_14 = (true && false);
-    bool unnamed_15 = (true || false);
-    bvec3 unnamed_16 = bvec3(bvec3(true).x || bvec3(false).x, bvec3(true).y || bvec3(false).y, bvec3(true).z || bvec3(false).z);
-    bool unnamed_17 = (true && false);
-    bvec4 unnamed_18 = bvec4(bvec4(true).x && bvec4(false).x, bvec4(true).y && bvec4(false).y, bvec4(true).z && bvec4(false).z, bvec4(true).w && bvec4(false).w);
+    bool unnamed_3 = (!true);
+    bvec2 unnamed_4 = not(bvec2(true));
+    bool unnamed_5 = (true || false);
+    bool unnamed_6 = (true && false);
+    bool unnamed_7 = (true || false);
+    bvec3 unnamed_8 = bvec3(bvec3(true).x || bvec3(false).x, bvec3(true).y || bvec3(false).y, bvec3(true).z || bvec3(false).z);
+    bool unnamed_9 = (true && false);
+    bvec4 unnamed_10 = bvec4(bvec4(true).x && bvec4(false).x, bvec4(true).y && bvec4(false).y, bvec4(true).z && bvec4(false).z, bvec4(true).w && bvec4(false).w);
 }
 
 void arithmetic() {
-    ivec2 unnamed_19 = (-ivec2(1));
-    vec2 unnamed_20 = (-vec2(1.0));
-    int unnamed_21 = (2 + 1);
-    uint unnamed_22 = (2u + 1u);
-    float unnamed_23 = (2.0 + 1.0);
-    ivec2 unnamed_24 = (ivec2(2) + ivec2(1));
-    uvec3 unnamed_25 = (uvec3(2u) + uvec3(1u));
-    vec4 unnamed_26 = (vec4(2.0) + vec4(1.0));
-    int unnamed_27 = (2 - 1);
-    uint unnamed_28 = (2u - 1u);
-    float unnamed_29 = (2.0 - 1.0);
-    ivec2 unnamed_30 = (ivec2(2) - ivec2(1));
-    uvec3 unnamed_31 = (uvec3(2u) - uvec3(1u));
-    vec4 unnamed_32 = (vec4(2.0) - vec4(1.0));
-    int unnamed_33 = (2 * 1);
-    uint unnamed_34 = (2u * 1u);
-    float unnamed_35 = (2.0 * 1.0);
-    ivec2 unnamed_36 = (ivec2(2) * ivec2(1));
-    uvec3 unnamed_37 = (uvec3(2u) * uvec3(1u));
-    vec4 unnamed_38 = (vec4(2.0) * vec4(1.0));
-    int unnamed_39 = (2 / 1);
-    uint unnamed_40 = (2u / 1u);
-    float unnamed_41 = (2.0 / 1.0);
-    ivec2 unnamed_42 = (ivec2(2) / ivec2(1));
-    uvec3 unnamed_43 = (uvec3(2u) / uvec3(1u));
-    vec4 unnamed_44 = (vec4(2.0) / vec4(1.0));
-    int unnamed_45 = (2 % 1);
-    uint unnamed_46 = (2u % 1u);
-    float unnamed_47 = (2.0 - 1.0 * trunc(2.0 / 1.0));
-    ivec2 unnamed_48 = (ivec2(2) % ivec2(1));
-    uvec3 unnamed_49 = (uvec3(2u) % uvec3(1u));
-    vec4 unnamed_50 = (vec4(2.0) - vec4(1.0) * trunc(vec4(2.0) / vec4(1.0)));
-    ivec2 unnamed_51 = (ivec2(2) + ivec2(1));
-    ivec2 unnamed_52 = (ivec2(2) + ivec2(1));
-    uvec2 unnamed_53 = (uvec2(2u) + uvec2(1u));
-    uvec2 unnamed_54 = (uvec2(2u) + uvec2(1u));
-    vec2 unnamed_55 = (vec2(2.0) + vec2(1.0));
-    vec2 unnamed_56 = (vec2(2.0) + vec2(1.0));
-    ivec2 unnamed_57 = (ivec2(2) - ivec2(1));
-    ivec2 unnamed_58 = (ivec2(2) - ivec2(1));
-    uvec2 unnamed_59 = (uvec2(2u) - uvec2(1u));
-    uvec2 unnamed_60 = (uvec2(2u) - uvec2(1u));
-    vec2 unnamed_61 = (vec2(2.0) - vec2(1.0));
-    vec2 unnamed_62 = (vec2(2.0) - vec2(1.0));
-    ivec2 unnamed_63 = (ivec2(2) * 1);
-    ivec2 unnamed_64 = (2 * ivec2(1));
-    uvec2 unnamed_65 = (uvec2(2u) * 1u);
-    uvec2 unnamed_66 = (2u * uvec2(1u));
-    vec2 unnamed_67 = (vec2(2.0) * 1.0);
-    vec2 unnamed_68 = (2.0 * vec2(1.0));
-    ivec2 unnamed_69 = (ivec2(2) / ivec2(1));
-    ivec2 unnamed_70 = (ivec2(2) / ivec2(1));
-    uvec2 unnamed_71 = (uvec2(2u) / uvec2(1u));
-    uvec2 unnamed_72 = (uvec2(2u) / uvec2(1u));
-    vec2 unnamed_73 = (vec2(2.0) / vec2(1.0));
-    vec2 unnamed_74 = (vec2(2.0) / vec2(1.0));
-    ivec2 unnamed_75 = (ivec2(2) % ivec2(1));
-    ivec2 unnamed_76 = (ivec2(2) % ivec2(1));
-    uvec2 unnamed_77 = (uvec2(2u) % uvec2(1u));
-    uvec2 unnamed_78 = (uvec2(2u) % uvec2(1u));
-    vec2 unnamed_79 = (vec2(2.0) - vec2(1.0) * trunc(vec2(2.0) / vec2(1.0)));
-    vec2 unnamed_80 = (vec2(2.0) - vec2(1.0) * trunc(vec2(2.0) / vec2(1.0)));
-    mat3x3 unnamed_81 = (mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)) + mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)));
-    mat3x3 unnamed_82 = (mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)) - mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)));
-    mat3x3 unnamed_83 = (mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)) * 1.0);
-    mat3x3 unnamed_84 = (2.0 * mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)));
-    vec3 unnamed_85 = (mat4x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)) * vec4(1.0));
-    vec4 unnamed_86 = (vec3(2.0) * mat4x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)));
-    mat3x3 unnamed_87 = (mat4x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)) * mat3x4(vec4(0.0, 0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0)));
+    ivec2 unnamed_11 = (-ivec2(1));
+    vec2 unnamed_12 = (-vec2(1.0));
+    int unnamed_13 = (2 + 1);
+    uint unnamed_14 = (2u + 1u);
+    float unnamed_15 = (2.0 + 1.0);
+    ivec2 unnamed_16 = (ivec2(2) + ivec2(1));
+    uvec3 unnamed_17 = (uvec3(2u) + uvec3(1u));
+    vec4 unnamed_18 = (vec4(2.0) + vec4(1.0));
+    int unnamed_19 = (2 - 1);
+    uint unnamed_20 = (2u - 1u);
+    float unnamed_21 = (2.0 - 1.0);
+    ivec2 unnamed_22 = (ivec2(2) - ivec2(1));
+    uvec3 unnamed_23 = (uvec3(2u) - uvec3(1u));
+    vec4 unnamed_24 = (vec4(2.0) - vec4(1.0));
+    int unnamed_25 = (2 * 1);
+    uint unnamed_26 = (2u * 1u);
+    float unnamed_27 = (2.0 * 1.0);
+    ivec2 unnamed_28 = (ivec2(2) * ivec2(1));
+    uvec3 unnamed_29 = (uvec3(2u) * uvec3(1u));
+    vec4 unnamed_30 = (vec4(2.0) * vec4(1.0));
+    int unnamed_31 = (2 / 1);
+    uint unnamed_32 = (2u / 1u);
+    float unnamed_33 = (2.0 / 1.0);
+    ivec2 unnamed_34 = (ivec2(2) / ivec2(1));
+    uvec3 unnamed_35 = (uvec3(2u) / uvec3(1u));
+    vec4 unnamed_36 = (vec4(2.0) / vec4(1.0));
+    int unnamed_37 = (2 % 1);
+    uint unnamed_38 = (2u % 1u);
+    float unnamed_39 = (2.0 - 1.0 * trunc(2.0 / 1.0));
+    ivec2 unnamed_40 = (ivec2(2) % ivec2(1));
+    uvec3 unnamed_41 = (uvec3(2u) % uvec3(1u));
+    vec4 unnamed_42 = (vec4(2.0) - vec4(1.0) * trunc(vec4(2.0) / vec4(1.0)));
+    ivec2 unnamed_43 = (ivec2(2) + ivec2(1));
+    ivec2 unnamed_44 = (ivec2(2) + ivec2(1));
+    uvec2 unnamed_45 = (uvec2(2u) + uvec2(1u));
+    uvec2 unnamed_46 = (uvec2(2u) + uvec2(1u));
+    vec2 unnamed_47 = (vec2(2.0) + vec2(1.0));
+    vec2 unnamed_48 = (vec2(2.0) + vec2(1.0));
+    ivec2 unnamed_49 = (ivec2(2) - ivec2(1));
+    ivec2 unnamed_50 = (ivec2(2) - ivec2(1));
+    uvec2 unnamed_51 = (uvec2(2u) - uvec2(1u));
+    uvec2 unnamed_52 = (uvec2(2u) - uvec2(1u));
+    vec2 unnamed_53 = (vec2(2.0) - vec2(1.0));
+    vec2 unnamed_54 = (vec2(2.0) - vec2(1.0));
+    ivec2 unnamed_55 = (ivec2(2) * 1);
+    ivec2 unnamed_56 = (2 * ivec2(1));
+    uvec2 unnamed_57 = (uvec2(2u) * 1u);
+    uvec2 unnamed_58 = (2u * uvec2(1u));
+    vec2 unnamed_59 = (vec2(2.0) * 1.0);
+    vec2 unnamed_60 = (2.0 * vec2(1.0));
+    ivec2 unnamed_61 = (ivec2(2) / ivec2(1));
+    ivec2 unnamed_62 = (ivec2(2) / ivec2(1));
+    uvec2 unnamed_63 = (uvec2(2u) / uvec2(1u));
+    uvec2 unnamed_64 = (uvec2(2u) / uvec2(1u));
+    vec2 unnamed_65 = (vec2(2.0) / vec2(1.0));
+    vec2 unnamed_66 = (vec2(2.0) / vec2(1.0));
+    ivec2 unnamed_67 = (ivec2(2) % ivec2(1));
+    ivec2 unnamed_68 = (ivec2(2) % ivec2(1));
+    uvec2 unnamed_69 = (uvec2(2u) % uvec2(1u));
+    uvec2 unnamed_70 = (uvec2(2u) % uvec2(1u));
+    vec2 unnamed_71 = (vec2(2.0) - vec2(1.0) * trunc(vec2(2.0) / vec2(1.0)));
+    vec2 unnamed_72 = (vec2(2.0) - vec2(1.0) * trunc(vec2(2.0) / vec2(1.0)));
+    mat3x3 unnamed_73 = (mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)) + mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)));
+    mat3x3 unnamed_74 = (mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)) - mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)));
+    mat3x3 unnamed_75 = (mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)) * 1.0);
+    mat3x3 unnamed_76 = (2.0 * mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)));
+    vec3 unnamed_77 = (mat4x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)) * vec4(1.0));
+    vec4 unnamed_78 = (vec3(2.0) * mat4x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)));
+    mat3x3 unnamed_79 = (mat4x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)) * mat3x4(vec4(0.0, 0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0)));
 }
 
 void bit() {
-    int unnamed_88 = (~1);
-    uint unnamed_89 = (~1u);
-    ivec2 unnamed_90 = (~ivec2(1));
-    uvec3 unnamed_91 = (~uvec3(1u));
-    int unnamed_92 = (2 | 1);
-    uint unnamed_93 = (2u | 1u);
-    ivec2 unnamed_94 = (ivec2(2) | ivec2(1));
-    uvec3 unnamed_95 = (uvec3(2u) | uvec3(1u));
-    int unnamed_96 = (2 & 1);
-    uint unnamed_97 = (2u & 1u);
-    ivec2 unnamed_98 = (ivec2(2) & ivec2(1));
-    uvec3 unnamed_99 = (uvec3(2u) & uvec3(1u));
-    int unnamed_100 = (2 ^ 1);
-    uint unnamed_101 = (2u ^ 1u);
-    ivec2 unnamed_102 = (ivec2(2) ^ ivec2(1));
-    uvec3 unnamed_103 = (uvec3(2u) ^ uvec3(1u));
-    int unnamed_104 = (2 << 1u);
-    uint unnamed_105 = (2u << 1u);
-    ivec2 unnamed_106 = (ivec2(2) << uvec2(1u));
-    uvec3 unnamed_107 = (uvec3(2u) << uvec3(1u));
-    int unnamed_108 = (2 >> 1u);
-    uint unnamed_109 = (2u >> 1u);
-    ivec2 unnamed_110 = (ivec2(2) >> uvec2(1u));
-    uvec3 unnamed_111 = (uvec3(2u) >> uvec3(1u));
+    int unnamed_80 = (~1);
+    uint unnamed_81 = (~1u);
+    ivec2 unnamed_82 = (~ivec2(1));
+    uvec3 unnamed_83 = (~uvec3(1u));
+    int unnamed_84 = (2 | 1);
+    uint unnamed_85 = (2u | 1u);
+    ivec2 unnamed_86 = (ivec2(2) | ivec2(1));
+    uvec3 unnamed_87 = (uvec3(2u) | uvec3(1u));
+    int unnamed_88 = (2 & 1);
+    uint unnamed_89 = (2u & 1u);
+    ivec2 unnamed_90 = (ivec2(2) & ivec2(1));
+    uvec3 unnamed_91 = (uvec3(2u) & uvec3(1u));
+    int unnamed_92 = (2 ^ 1);
+    uint unnamed_93 = (2u ^ 1u);
+    ivec2 unnamed_94 = (ivec2(2) ^ ivec2(1));
+    uvec3 unnamed_95 = (uvec3(2u) ^ uvec3(1u));
+    int unnamed_96 = (2 << 1u);
+    uint unnamed_97 = (2u << 1u);
+    ivec2 unnamed_98 = (ivec2(2) << uvec2(1u));
+    uvec3 unnamed_99 = (uvec3(2u) << uvec3(1u));
+    int unnamed_100 = (2 >> 1u);
+    uint unnamed_101 = (2u >> 1u);
+    ivec2 unnamed_102 = (ivec2(2) >> uvec2(1u));
+    uvec3 unnamed_103 = (uvec3(2u) >> uvec3(1u));
 }
 
 void comparison() {
-    bool unnamed_112 = (2 == 1);
-    bool unnamed_113 = (2u == 1u);
-    bool unnamed_114 = (2.0 == 1.0);
-    bvec2 unnamed_115 = equal(ivec2(2), ivec2(1));
-    bvec3 unnamed_116 = equal(uvec3(2u), uvec3(1u));
-    bvec4 unnamed_117 = equal(vec4(2.0), vec4(1.0));
-    bool unnamed_118 = (2 != 1);
-    bool unnamed_119 = (2u != 1u);
-    bool unnamed_120 = (2.0 != 1.0);
-    bvec2 unnamed_121 = notEqual(ivec2(2), ivec2(1));
-    bvec3 unnamed_122 = notEqual(uvec3(2u), uvec3(1u));
-    bvec4 unnamed_123 = notEqual(vec4(2.0), vec4(1.0));
-    bool unnamed_124 = (2 < 1);
-    bool unnamed_125 = (2u < 1u);
-    bool unnamed_126 = (2.0 < 1.0);
-    bvec2 unnamed_127 = lessThan(ivec2(2), ivec2(1));
-    bvec3 unnamed_128 = lessThan(uvec3(2u), uvec3(1u));
-    bvec4 unnamed_129 = lessThan(vec4(2.0), vec4(1.0));
-    bool unnamed_130 = (2 <= 1);
-    bool unnamed_131 = (2u <= 1u);
-    bool unnamed_132 = (2.0 <= 1.0);
-    bvec2 unnamed_133 = lessThanEqual(ivec2(2), ivec2(1));
-    bvec3 unnamed_134 = lessThanEqual(uvec3(2u), uvec3(1u));
-    bvec4 unnamed_135 = lessThanEqual(vec4(2.0), vec4(1.0));
-    bool unnamed_136 = (2 > 1);
-    bool unnamed_137 = (2u > 1u);
-    bool unnamed_138 = (2.0 > 1.0);
-    bvec2 unnamed_139 = greaterThan(ivec2(2), ivec2(1));
-    bvec3 unnamed_140 = greaterThan(uvec3(2u), uvec3(1u));
-    bvec4 unnamed_141 = greaterThan(vec4(2.0), vec4(1.0));
-    bool unnamed_142 = (2 >= 1);
-    bool unnamed_143 = (2u >= 1u);
-    bool unnamed_144 = (2.0 >= 1.0);
-    bvec2 unnamed_145 = greaterThanEqual(ivec2(2), ivec2(1));
-    bvec3 unnamed_146 = greaterThanEqual(uvec3(2u), uvec3(1u));
-    bvec4 unnamed_147 = greaterThanEqual(vec4(2.0), vec4(1.0));
+    bool unnamed_104 = (2 == 1);
+    bool unnamed_105 = (2u == 1u);
+    bool unnamed_106 = (2.0 == 1.0);
+    bvec2 unnamed_107 = equal(ivec2(2), ivec2(1));
+    bvec3 unnamed_108 = equal(uvec3(2u), uvec3(1u));
+    bvec4 unnamed_109 = equal(vec4(2.0), vec4(1.0));
+    bool unnamed_110 = (2 != 1);
+    bool unnamed_111 = (2u != 1u);
+    bool unnamed_112 = (2.0 != 1.0);
+    bvec2 unnamed_113 = notEqual(ivec2(2), ivec2(1));
+    bvec3 unnamed_114 = notEqual(uvec3(2u), uvec3(1u));
+    bvec4 unnamed_115 = notEqual(vec4(2.0), vec4(1.0));
+    bool unnamed_116 = (2 < 1);
+    bool unnamed_117 = (2u < 1u);
+    bool unnamed_118 = (2.0 < 1.0);
+    bvec2 unnamed_119 = lessThan(ivec2(2), ivec2(1));
+    bvec3 unnamed_120 = lessThan(uvec3(2u), uvec3(1u));
+    bvec4 unnamed_121 = lessThan(vec4(2.0), vec4(1.0));
+    bool unnamed_122 = (2 <= 1);
+    bool unnamed_123 = (2u <= 1u);
+    bool unnamed_124 = (2.0 <= 1.0);
+    bvec2 unnamed_125 = lessThanEqual(ivec2(2), ivec2(1));
+    bvec3 unnamed_126 = lessThanEqual(uvec3(2u), uvec3(1u));
+    bvec4 unnamed_127 = lessThanEqual(vec4(2.0), vec4(1.0));
+    bool unnamed_128 = (2 > 1);
+    bool unnamed_129 = (2u > 1u);
+    bool unnamed_130 = (2.0 > 1.0);
+    bvec2 unnamed_131 = greaterThan(ivec2(2), ivec2(1));
+    bvec3 unnamed_132 = greaterThan(uvec3(2u), uvec3(1u));
+    bvec4 unnamed_133 = greaterThan(vec4(2.0), vec4(1.0));
+    bool unnamed_134 = (2 >= 1);
+    bool unnamed_135 = (2u >= 1u);
+    bool unnamed_136 = (2.0 >= 1.0);
+    bvec2 unnamed_137 = greaterThanEqual(ivec2(2), ivec2(1));
+    bvec3 unnamed_138 = greaterThanEqual(uvec3(2u), uvec3(1u));
+    bvec4 unnamed_139 = greaterThanEqual(vec4(2.0), vec4(1.0));
 }
 
 void assignment() {
diff --git a/tests/out/hlsl/access.hlsl b/tests/out/hlsl/access.hlsl
index b94bc16bc8..3403cb39ee 100644
--- a/tests/out/hlsl/access.hlsl
+++ b/tests/out/hlsl/access.hlsl
@@ -58,51 +58,37 @@ Baz ConstructBaz(float3x2 arg0) {
 void test_matrix_within_struct_accesses()
 {
     int idx = 9;
-    float3x2 unnamed_1 = (float3x2)0;
-    float2 unnamed_2 = (float2)0;
-    float2 unnamed_3 = (float2)0;
-    float unnamed_4 = (float)0;
-    float unnamed_5 = (float)0;
-    float unnamed_6 = (float)0;
-    float unnamed_7 = (float)0;
     Baz t = (Baz)0;
 
     int _expr4 = idx;
     idx = (_expr4 - 1);
-    float3x2 _expr8 = GetMatmOnBaz(baz);
-    unnamed_1 = _expr8;
-    float2 _expr13 = GetMatmOnBaz(baz)[0];
-    unnamed_2 = _expr13;
-    int _expr16 = idx;
-    float2 _expr18 = GetMatmOnBaz(baz)[_expr16];
-    unnamed_3 = _expr18;
-    float _expr25 = GetMatmOnBaz(baz)[0][1];
-    unnamed_4 = _expr25;
+    float3x2 unnamed = GetMatmOnBaz(baz);
+    float2 unnamed_1 = GetMatmOnBaz(baz)[0];
+    int _expr14 = idx;
+    float2 unnamed_2 = GetMatmOnBaz(baz)[_expr14];
+    float unnamed_3 = GetMatmOnBaz(baz)[0][1];
+    int _expr26 = idx;
+    float unnamed_4 = GetMatmOnBaz(baz)[0][_expr26];
     int _expr30 = idx;
-    float _expr32 = GetMatmOnBaz(baz)[0][_expr30];
-    unnamed_5 = _expr32;
-    int _expr35 = idx;
-    float _expr39 = GetMatmOnBaz(baz)[_expr35][1];
-    unnamed_6 = _expr39;
-    int _expr42 = idx;
-    int _expr44 = idx;
-    float _expr46 = GetMatmOnBaz(baz)[_expr42][_expr44];
-    unnamed_7 = _expr46;
+    float unnamed_5 = GetMatmOnBaz(baz)[_expr30][1];
+    int _expr36 = idx;
+    int _expr38 = idx;
+    float unnamed_6 = GetMatmOnBaz(baz)[_expr36][_expr38];
     t = ConstructBaz(float3x2((1.0).xx, (2.0).xx, (3.0).xx));
-    int _expr57 = idx;
-    idx = (_expr57 + 1);
+    int _expr50 = idx;
+    idx = (_expr50 + 1);
     SetMatmOnBaz(t, float3x2((6.0).xx, (5.0).xx, (4.0).xx));
     t.m_0 = (9.0).xx;
-    int _expr74 = idx;
-    SetMatVecmOnBaz(t, (90.0).xx, _expr74);
+    int _expr67 = idx;
+    SetMatVecmOnBaz(t, (90.0).xx, _expr67);
     t.m_0[1] = 10.0;
-    int _expr87 = idx;
-    t.m_0[_expr87] = 20.0;
-    int _expr91 = idx;
-    SetMatScalarmOnBaz(t, 30.0, _expr91, 1);
-    int _expr97 = idx;
-    int _expr99 = idx;
-    SetMatScalarmOnBaz(t, 40.0, _expr97, _expr99);
+    int _expr80 = idx;
+    t.m_0[_expr80] = 20.0;
+    int _expr84 = idx;
+    SetMatScalarmOnBaz(t, 30.0, _expr84, 1);
+    int _expr90 = idx;
+    int _expr92 = idx;
+    SetMatScalarmOnBaz(t, 40.0, _expr90, _expr92);
     return;
 }
 
@@ -133,7 +119,6 @@ float4 foo_vert(uint vi : SV_VertexID) : SV_Position
 {
     float foo = 0.0;
     int c[5] = {(int)0,(int)0,(int)0,(int)0,(int)0};
-    float unnamed = (float)0;
 
     float baz_1 = foo;
     foo = 1.0;
@@ -150,7 +135,6 @@ float4 foo_vert(uint vi : SV_VertexID) : SV_Position
     c[(vi + 1u)] = 42;
     int value = c[vi];
     const float _e42 = test_arr_as_arg(Constructarray5_array10_float__(Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), Constructarray10_float_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)));
-    unnamed = _e42;
     return float4(mul(float4((value).xxxx), _matrix), 2.0);
 }
 
diff --git a/tests/out/hlsl/operators.hlsl b/tests/out/hlsl/operators.hlsl
index b23d47799f..020a28ca40 100644
--- a/tests/out/hlsl/operators.hlsl
+++ b/tests/out/hlsl/operators.hlsl
@@ -57,182 +57,168 @@ int Constructarray4_int_(int arg0, int arg1, int arg2, int arg3)[4] {
 float constructors()
 {
     Foo foo = (Foo)0;
-    bool unnamed = false;
-    int unnamed_1 = 0;
-    uint unnamed_2 = 0u;
-    float unnamed_3 = 0.0;
-    uint2 unnamed_4 = uint2(0u, 0u);
-    float2x2 unnamed_5 = float2x2(float2(0.0, 0.0), float2(0.0, 0.0));
-    Foo unnamed_6[3] = Constructarray3_Foo_(ConstructFoo(float4(0.0, 0.0, 0.0, 0.0), 0), ConstructFoo(float4(0.0, 0.0, 0.0, 0.0), 0), ConstructFoo(float4(0.0, 0.0, 0.0, 0.0), 0));
-    Foo unnamed_7 = ConstructFoo(float4(0.0, 0.0, 0.0, 0.0), 0);
-    uint2 unnamed_8 = (uint2)0;
-    float2x2 unnamed_9 = (float2x2)0;
-    int unnamed_10[4] = {(int)0,(int)0,(int)0,(int)0};
 
     foo = ConstructFoo((1.0).xxxx, 1);
     float2x2 mat2comp = float2x2(float2(1.0, 0.0), float2(0.0, 1.0));
     float4x4 mat4comp = float4x4(float4(1.0, 0.0, 0.0, 0.0), float4(0.0, 1.0, 0.0, 0.0), float4(0.0, 0.0, 1.0, 0.0), float4(0.0, 0.0, 0.0, 1.0));
-    unnamed_8 = (0u).xx;
-    unnamed_9 = float2x2((0.0).xx, (0.0).xx);
-    {
-        int _result[4]=Constructarray4_int_(0, 1, 2, 3);
-        for(int _i=0; _i<4; ++_i) unnamed_10[_i] = _result[_i];
-    }
-    float _expr70 = foo.a.x;
-    return _expr70;
+    uint2 unnamed = (0u).xx;
+    float2x2 unnamed_1 = float2x2((0.0).xx, (0.0).xx);
+    int unnamed_2[4] = Constructarray4_int_(0, 1, 2, 3);
+    float _expr59 = foo.a.x;
+    return _expr59;
 }
 
 void logical()
 {
-    bool unnamed_11 = !true;
-    bool2 unnamed_12 = !(true).xx;
-    bool unnamed_13 = (true || false);
-    bool unnamed_14 = (true && false);
-    bool unnamed_15 = (true | false);
-    bool3 unnamed_16 = ((true).xxx | (false).xxx);
-    bool unnamed_17 = (true & false);
-    bool4 unnamed_18 = ((true).xxxx & (false).xxxx);
+    bool unnamed_3 = !true;
+    bool2 unnamed_4 = !(true).xx;
+    bool unnamed_5 = (true || false);
+    bool unnamed_6 = (true && false);
+    bool unnamed_7 = (true | false);
+    bool3 unnamed_8 = ((true).xxx | (false).xxx);
+    bool unnamed_9 = (true & false);
+    bool4 unnamed_10 = ((true).xxxx & (false).xxxx);
 }
 
 void arithmetic()
 {
-    int2 unnamed_19 = -(1).xx;
-    float2 unnamed_20 = -(1.0).xx;
-    int unnamed_21 = (2 + 1);
-    uint unnamed_22 = (2u + 1u);
-    float unnamed_23 = (2.0 + 1.0);
-    int2 unnamed_24 = ((2).xx + (1).xx);
-    uint3 unnamed_25 = ((2u).xxx + (1u).xxx);
-    float4 unnamed_26 = ((2.0).xxxx + (1.0).xxxx);
-    int unnamed_27 = (2 - 1);
-    uint unnamed_28 = (2u - 1u);
-    float unnamed_29 = (2.0 - 1.0);
-    int2 unnamed_30 = ((2).xx - (1).xx);
-    uint3 unnamed_31 = ((2u).xxx - (1u).xxx);
-    float4 unnamed_32 = ((2.0).xxxx - (1.0).xxxx);
-    int unnamed_33 = (2 * 1);
-    uint unnamed_34 = (2u * 1u);
-    float unnamed_35 = (2.0 * 1.0);
-    int2 unnamed_36 = ((2).xx * (1).xx);
-    uint3 unnamed_37 = ((2u).xxx * (1u).xxx);
-    float4 unnamed_38 = ((2.0).xxxx * (1.0).xxxx);
-    int unnamed_39 = (2 / 1);
-    uint unnamed_40 = (2u / 1u);
-    float unnamed_41 = (2.0 / 1.0);
-    int2 unnamed_42 = ((2).xx / (1).xx);
-    uint3 unnamed_43 = ((2u).xxx / (1u).xxx);
-    float4 unnamed_44 = ((2.0).xxxx / (1.0).xxxx);
-    int unnamed_45 = (2 % 1);
-    uint unnamed_46 = (2u % 1u);
-    float unnamed_47 = (2.0 % 1.0);
-    int2 unnamed_48 = ((2).xx % (1).xx);
-    uint3 unnamed_49 = ((2u).xxx % (1u).xxx);
-    float4 unnamed_50 = ((2.0).xxxx % (1.0).xxxx);
-    int2 unnamed_51 = ((2).xx + (1).xx);
-    int2 unnamed_52 = ((2).xx + (1).xx);
-    uint2 unnamed_53 = ((2u).xx + (1u).xx);
-    uint2 unnamed_54 = ((2u).xx + (1u).xx);
-    float2 unnamed_55 = ((2.0).xx + (1.0).xx);
-    float2 unnamed_56 = ((2.0).xx + (1.0).xx);
-    int2 unnamed_57 = ((2).xx - (1).xx);
-    int2 unnamed_58 = ((2).xx - (1).xx);
-    uint2 unnamed_59 = ((2u).xx - (1u).xx);
-    uint2 unnamed_60 = ((2u).xx - (1u).xx);
-    float2 unnamed_61 = ((2.0).xx - (1.0).xx);
-    float2 unnamed_62 = ((2.0).xx - (1.0).xx);
-    int2 unnamed_63 = ((2).xx * 1);
-    int2 unnamed_64 = (2 * (1).xx);
-    uint2 unnamed_65 = ((2u).xx * 1u);
-    uint2 unnamed_66 = (2u * (1u).xx);
-    float2 unnamed_67 = ((2.0).xx * 1.0);
-    float2 unnamed_68 = (2.0 * (1.0).xx);
-    int2 unnamed_69 = ((2).xx / (1).xx);
-    int2 unnamed_70 = ((2).xx / (1).xx);
-    uint2 unnamed_71 = ((2u).xx / (1u).xx);
-    uint2 unnamed_72 = ((2u).xx / (1u).xx);
-    float2 unnamed_73 = ((2.0).xx / (1.0).xx);
-    float2 unnamed_74 = ((2.0).xx / (1.0).xx);
-    int2 unnamed_75 = ((2).xx % (1).xx);
-    int2 unnamed_76 = ((2).xx % (1).xx);
-    uint2 unnamed_77 = ((2u).xx % (1u).xx);
-    uint2 unnamed_78 = ((2u).xx % (1u).xx);
-    float2 unnamed_79 = ((2.0).xx % (1.0).xx);
-    float2 unnamed_80 = ((2.0).xx % (1.0).xx);
-    float3x3 unnamed_81 = (float3x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)) + float3x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)));
-    float3x3 unnamed_82 = (float3x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)) - float3x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)));
-    float3x3 unnamed_83 = mul(1.0, float3x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)));
-    float3x3 unnamed_84 = mul(float3x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)), 2.0);
-    float3 unnamed_85 = mul((1.0).xxxx, float4x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)));
-    float4 unnamed_86 = mul(float4x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)), (2.0).xxx);
-    float3x3 unnamed_87 = mul(float3x4(float4(0.0, 0.0, 0.0, 0.0), float4(0.0, 0.0, 0.0, 0.0), float4(0.0, 0.0, 0.0, 0.0)), float4x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)));
+    int2 unnamed_11 = -(1).xx;
+    float2 unnamed_12 = -(1.0).xx;
+    int unnamed_13 = (2 + 1);
+    uint unnamed_14 = (2u + 1u);
+    float unnamed_15 = (2.0 + 1.0);
+    int2 unnamed_16 = ((2).xx + (1).xx);
+    uint3 unnamed_17 = ((2u).xxx + (1u).xxx);
+    float4 unnamed_18 = ((2.0).xxxx + (1.0).xxxx);
+    int unnamed_19 = (2 - 1);
+    uint unnamed_20 = (2u - 1u);
+    float unnamed_21 = (2.0 - 1.0);
+    int2 unnamed_22 = ((2).xx - (1).xx);
+    uint3 unnamed_23 = ((2u).xxx - (1u).xxx);
+    float4 unnamed_24 = ((2.0).xxxx - (1.0).xxxx);
+    int unnamed_25 = (2 * 1);
+    uint unnamed_26 = (2u * 1u);
+    float unnamed_27 = (2.0 * 1.0);
+    int2 unnamed_28 = ((2).xx * (1).xx);
+    uint3 unnamed_29 = ((2u).xxx * (1u).xxx);
+    float4 unnamed_30 = ((2.0).xxxx * (1.0).xxxx);
+    int unnamed_31 = (2 / 1);
+    uint unnamed_32 = (2u / 1u);
+    float unnamed_33 = (2.0 / 1.0);
+    int2 unnamed_34 = ((2).xx / (1).xx);
+    uint3 unnamed_35 = ((2u).xxx / (1u).xxx);
+    float4 unnamed_36 = ((2.0).xxxx / (1.0).xxxx);
+    int unnamed_37 = (2 % 1);
+    uint unnamed_38 = (2u % 1u);
+    float unnamed_39 = (2.0 % 1.0);
+    int2 unnamed_40 = ((2).xx % (1).xx);
+    uint3 unnamed_41 = ((2u).xxx % (1u).xxx);
+    float4 unnamed_42 = ((2.0).xxxx % (1.0).xxxx);
+    int2 unnamed_43 = ((2).xx + (1).xx);
+    int2 unnamed_44 = ((2).xx + (1).xx);
+    uint2 unnamed_45 = ((2u).xx + (1u).xx);
+    uint2 unnamed_46 = ((2u).xx + (1u).xx);
+    float2 unnamed_47 = ((2.0).xx + (1.0).xx);
+    float2 unnamed_48 = ((2.0).xx + (1.0).xx);
+    int2 unnamed_49 = ((2).xx - (1).xx);
+    int2 unnamed_50 = ((2).xx - (1).xx);
+    uint2 unnamed_51 = ((2u).xx - (1u).xx);
+    uint2 unnamed_52 = ((2u).xx - (1u).xx);
+    float2 unnamed_53 = ((2.0).xx - (1.0).xx);
+    float2 unnamed_54 = ((2.0).xx - (1.0).xx);
+    int2 unnamed_55 = ((2).xx * 1);
+    int2 unnamed_56 = (2 * (1).xx);
+    uint2 unnamed_57 = ((2u).xx * 1u);
+    uint2 unnamed_58 = (2u * (1u).xx);
+    float2 unnamed_59 = ((2.0).xx * 1.0);
+    float2 unnamed_60 = (2.0 * (1.0).xx);
+    int2 unnamed_61 = ((2).xx / (1).xx);
+    int2 unnamed_62 = ((2).xx / (1).xx);
+    uint2 unnamed_63 = ((2u).xx / (1u).xx);
+    uint2 unnamed_64 = ((2u).xx / (1u).xx);
+    float2 unnamed_65 = ((2.0).xx / (1.0).xx);
+    float2 unnamed_66 = ((2.0).xx / (1.0).xx);
+    int2 unnamed_67 = ((2).xx % (1).xx);
+    int2 unnamed_68 = ((2).xx % (1).xx);
+    uint2 unnamed_69 = ((2u).xx % (1u).xx);
+    uint2 unnamed_70 = ((2u).xx % (1u).xx);
+    float2 unnamed_71 = ((2.0).xx % (1.0).xx);
+    float2 unnamed_72 = ((2.0).xx % (1.0).xx);
+    float3x3 unnamed_73 = (float3x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)) + float3x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)));
+    float3x3 unnamed_74 = (float3x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)) - float3x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)));
+    float3x3 unnamed_75 = mul(1.0, float3x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)));
+    float3x3 unnamed_76 = mul(float3x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)), 2.0);
+    float3 unnamed_77 = mul((1.0).xxxx, float4x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)));
+    float4 unnamed_78 = mul(float4x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)), (2.0).xxx);
+    float3x3 unnamed_79 = mul(float3x4(float4(0.0, 0.0, 0.0, 0.0), float4(0.0, 0.0, 0.0, 0.0), float4(0.0, 0.0, 0.0, 0.0)), float4x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)));
 }
 
 void bit()
 {
-    int unnamed_88 = ~1;
-    uint unnamed_89 = ~1u;
-    int2 unnamed_90 = ~(1).xx;
-    uint3 unnamed_91 = ~(1u).xxx;
-    int unnamed_92 = (2 | 1);
-    uint unnamed_93 = (2u | 1u);
-    int2 unnamed_94 = ((2).xx | (1).xx);
-    uint3 unnamed_95 = ((2u).xxx | (1u).xxx);
-    int unnamed_96 = (2 & 1);
-    uint unnamed_97 = (2u & 1u);
-    int2 unnamed_98 = ((2).xx & (1).xx);
-    uint3 unnamed_99 = ((2u).xxx & (1u).xxx);
-    int unnamed_100 = (2 ^ 1);
-    uint unnamed_101 = (2u ^ 1u);
-    int2 unnamed_102 = ((2).xx ^ (1).xx);
-    uint3 unnamed_103 = ((2u).xxx ^ (1u).xxx);
-    int unnamed_104 = (2 << 1u);
-    uint unnamed_105 = (2u << 1u);
-    int2 unnamed_106 = ((2).xx << (1u).xx);
-    uint3 unnamed_107 = ((2u).xxx << (1u).xxx);
-    int unnamed_108 = (2 >> 1u);
-    uint unnamed_109 = (2u >> 1u);
-    int2 unnamed_110 = ((2).xx >> (1u).xx);
-    uint3 unnamed_111 = ((2u).xxx >> (1u).xxx);
+    int unnamed_80 = ~1;
+    uint unnamed_81 = ~1u;
+    int2 unnamed_82 = ~(1).xx;
+    uint3 unnamed_83 = ~(1u).xxx;
+    int unnamed_84 = (2 | 1);
+    uint unnamed_85 = (2u | 1u);
+    int2 unnamed_86 = ((2).xx | (1).xx);
+    uint3 unnamed_87 = ((2u).xxx | (1u).xxx);
+    int unnamed_88 = (2 & 1);
+    uint unnamed_89 = (2u & 1u);
+    int2 unnamed_90 = ((2).xx & (1).xx);
+    uint3 unnamed_91 = ((2u).xxx & (1u).xxx);
+    int unnamed_92 = (2 ^ 1);
+    uint unnamed_93 = (2u ^ 1u);
+    int2 unnamed_94 = ((2).xx ^ (1).xx);
+    uint3 unnamed_95 = ((2u).xxx ^ (1u).xxx);
+    int unnamed_96 = (2 << 1u);
+    uint unnamed_97 = (2u << 1u);
+    int2 unnamed_98 = ((2).xx << (1u).xx);
+    uint3 unnamed_99 = ((2u).xxx << (1u).xxx);
+    int unnamed_100 = (2 >> 1u);
+    uint unnamed_101 = (2u >> 1u);
+    int2 unnamed_102 = ((2).xx >> (1u).xx);
+    uint3 unnamed_103 = ((2u).xxx >> (1u).xxx);
 }
 
 void comparison()
 {
-    bool unnamed_112 = (2 == 1);
-    bool unnamed_113 = (2u == 1u);
-    bool unnamed_114 = (2.0 == 1.0);
-    bool2 unnamed_115 = ((2).xx == (1).xx);
-    bool3 unnamed_116 = ((2u).xxx == (1u).xxx);
-    bool4 unnamed_117 = ((2.0).xxxx == (1.0).xxxx);
-    bool unnamed_118 = (2 != 1);
-    bool unnamed_119 = (2u != 1u);
-    bool unnamed_120 = (2.0 != 1.0);
-    bool2 unnamed_121 = ((2).xx != (1).xx);
-    bool3 unnamed_122 = ((2u).xxx != (1u).xxx);
-    bool4 unnamed_123 = ((2.0).xxxx != (1.0).xxxx);
-    bool unnamed_124 = (2 < 1);
-    bool unnamed_125 = (2u < 1u);
-    bool unnamed_126 = (2.0 < 1.0);
-    bool2 unnamed_127 = ((2).xx < (1).xx);
-    bool3 unnamed_128 = ((2u).xxx < (1u).xxx);
-    bool4 unnamed_129 = ((2.0).xxxx < (1.0).xxxx);
-    bool unnamed_130 = (2 <= 1);
-    bool unnamed_131 = (2u <= 1u);
-    bool unnamed_132 = (2.0 <= 1.0);
-    bool2 unnamed_133 = ((2).xx <= (1).xx);
-    bool3 unnamed_134 = ((2u).xxx <= (1u).xxx);
-    bool4 unnamed_135 = ((2.0).xxxx <= (1.0).xxxx);
-    bool unnamed_136 = (2 > 1);
-    bool unnamed_137 = (2u > 1u);
-    bool unnamed_138 = (2.0 > 1.0);
-    bool2 unnamed_139 = ((2).xx > (1).xx);
-    bool3 unnamed_140 = ((2u).xxx > (1u).xxx);
-    bool4 unnamed_141 = ((2.0).xxxx > (1.0).xxxx);
-    bool unnamed_142 = (2 >= 1);
-    bool unnamed_143 = (2u >= 1u);
-    bool unnamed_144 = (2.0 >= 1.0);
-    bool2 unnamed_145 = ((2).xx >= (1).xx);
-    bool3 unnamed_146 = ((2u).xxx >= (1u).xxx);
-    bool4 unnamed_147 = ((2.0).xxxx >= (1.0).xxxx);
+    bool unnamed_104 = (2 == 1);
+    bool unnamed_105 = (2u == 1u);
+    bool unnamed_106 = (2.0 == 1.0);
+    bool2 unnamed_107 = ((2).xx == (1).xx);
+    bool3 unnamed_108 = ((2u).xxx == (1u).xxx);
+    bool4 unnamed_109 = ((2.0).xxxx == (1.0).xxxx);
+    bool unnamed_110 = (2 != 1);
+    bool unnamed_111 = (2u != 1u);
+    bool unnamed_112 = (2.0 != 1.0);
+    bool2 unnamed_113 = ((2).xx != (1).xx);
+    bool3 unnamed_114 = ((2u).xxx != (1u).xxx);
+    bool4 unnamed_115 = ((2.0).xxxx != (1.0).xxxx);
+    bool unnamed_116 = (2 < 1);
+    bool unnamed_117 = (2u < 1u);
+    bool unnamed_118 = (2.0 < 1.0);
+    bool2 unnamed_119 = ((2).xx < (1).xx);
+    bool3 unnamed_120 = ((2u).xxx < (1u).xxx);
+    bool4 unnamed_121 = ((2.0).xxxx < (1.0).xxxx);
+    bool unnamed_122 = (2 <= 1);
+    bool unnamed_123 = (2u <= 1u);
+    bool unnamed_124 = (2.0 <= 1.0);
+    bool2 unnamed_125 = ((2).xx <= (1).xx);
+    bool3 unnamed_126 = ((2u).xxx <= (1u).xxx);
+    bool4 unnamed_127 = ((2.0).xxxx <= (1.0).xxxx);
+    bool unnamed_128 = (2 > 1);
+    bool unnamed_129 = (2u > 1u);
+    bool unnamed_130 = (2.0 > 1.0);
+    bool2 unnamed_131 = ((2).xx > (1).xx);
+    bool3 unnamed_132 = ((2u).xxx > (1u).xxx);
+    bool4 unnamed_133 = ((2.0).xxxx > (1.0).xxxx);
+    bool unnamed_134 = (2 >= 1);
+    bool unnamed_135 = (2u >= 1u);
+    bool unnamed_136 = (2.0 >= 1.0);
+    bool2 unnamed_137 = ((2).xx >= (1).xx);
+    bool3 unnamed_138 = ((2u).xxx >= (1u).xxx);
+    bool4 unnamed_139 = ((2.0).xxxx >= (1.0).xxxx);
 }
 
 void assignment()
diff --git a/tests/out/msl/access.msl b/tests/out/msl/access.msl
index 8ba6750c7e..5bcdd7d498 100644
--- a/tests/out/msl/access.msl
+++ b/tests/out/msl/access.msl
@@ -29,66 +29,52 @@ struct Bar {
 struct Baz {
     metal::float3x2 m;
 };
-struct type_12 {
+struct type_11 {
     float inner[10];
 };
-struct type_13 {
-    type_12 inner[5];
+struct type_12 {
+    type_11 inner[5];
 };
-struct type_17 {
+struct type_16 {
     int inner[5];
 };
-constant type_12 const_type_12_ = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
-constant type_13 const_type_13_ = {const_type_12_, const_type_12_, const_type_12_, const_type_12_, const_type_12_};
+constant type_11 const_type_11_ = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
+constant type_12 const_type_12_ = {const_type_11_, const_type_11_, const_type_11_, const_type_11_, const_type_11_};
 
 void test_matrix_within_struct_accesses(
     constant Baz& baz
 ) {
     int idx = 9;
-    metal::float3x2 unnamed_1;
-    metal::float2 unnamed_2;
-    metal::float2 unnamed_3;
-    float unnamed_4;
-    float unnamed_5;
-    float unnamed_6;
-    float unnamed_7;
     Baz t;
     int _e4 = idx;
     idx = _e4 - 1;
-    metal::float3x2 _e8 = baz.m;
-    unnamed_1 = _e8;
-    metal::float2 _e13 = baz.m[0];
-    unnamed_2 = _e13;
-    int _e16 = idx;
-    metal::float2 _e18 = baz.m[_e16];
-    unnamed_3 = _e18;
-    float _e25 = baz.m[0].y;
-    unnamed_4 = _e25;
+    metal::float3x2 unnamed = baz.m;
+    metal::float2 unnamed_1 = baz.m[0];
+    int _e14 = idx;
+    metal::float2 unnamed_2 = baz.m[_e14];
+    float unnamed_3 = baz.m[0].y;
+    int _e26 = idx;
+    float unnamed_4 = baz.m[0][_e26];
     int _e30 = idx;
-    float _e32 = baz.m[0][_e30];
-    unnamed_5 = _e32;
-    int _e35 = idx;
-    float _e39 = baz.m[_e35].y;
-    unnamed_6 = _e39;
-    int _e42 = idx;
-    int _e44 = idx;
-    float _e46 = baz.m[_e42][_e44];
-    unnamed_7 = _e46;
+    float unnamed_5 = baz.m[_e30].y;
+    int _e36 = idx;
+    int _e38 = idx;
+    float unnamed_6 = baz.m[_e36][_e38];
     t = Baz {metal::float3x2(metal::float2(1.0), metal::float2(2.0), metal::float2(3.0))};
-    int _e57 = idx;
-    idx = _e57 + 1;
+    int _e50 = idx;
+    idx = _e50 + 1;
     t.m = metal::float3x2(metal::float2(6.0), metal::float2(5.0), metal::float2(4.0));
     t.m[0] = metal::float2(9.0);
-    int _e74 = idx;
-    t.m[_e74] = metal::float2(90.0);
+    int _e67 = idx;
+    t.m[_e67] = metal::float2(90.0);
     t.m[0].y = 10.0;
-    int _e87 = idx;
-    t.m[0][_e87] = 20.0;
-    int _e91 = idx;
-    t.m[_e91].y = 30.0;
-    int _e97 = idx;
-    int _e99 = idx;
-    t.m[_e97][_e99] = 40.0;
+    int _e80 = idx;
+    t.m[0][_e80] = 20.0;
+    int _e84 = idx;
+    t.m[_e84].y = 30.0;
+    int _e90 = idx;
+    int _e92 = idx;
+    t.m[_e90][_e92] = 40.0;
     return;
 }
 
@@ -100,7 +86,7 @@ float read_from_private(
 }
 
 float test_arr_as_arg(
-    type_13 a
+    type_12 a
 ) {
     return a.inner[4].inner[9];
 }
@@ -117,8 +103,7 @@ vertex foo_vertOutput foo_vert(
 , constant _mslBufferSizes& _buffer_sizes [[buffer(24)]]
 ) {
     float foo = 0.0;
-    type_17 c;
-    float unnamed;
+    type_16 c;
     float baz_1 = foo;
     foo = 1.0;
     test_matrix_within_struct_accesses(baz);
@@ -127,11 +112,10 @@ vertex foo_vertOutput foo_vert(
     float b = bar._matrix[3].x;
     int a_1 = bar.data[(1 + (_buffer_sizes.size0 - 120 - 8) / 8) - 2u].value;
     float _e28 = read_from_private(foo);
-    for(int _i=0; _i<5; ++_i) c.inner[_i] = type_17 {a_1, static_cast<int>(b), 3, 4, 5}.inner[_i];
+    for(int _i=0; _i<5; ++_i) c.inner[_i] = type_16 {a_1, static_cast<int>(b), 3, 4, 5}.inner[_i];
     c.inner[vi + 1u] = 42;
     int value = c.inner[vi];
-    float _e42 = test_arr_as_arg(const_type_13_);
-    unnamed = _e42;
+    float _e42 = test_arr_as_arg(const_type_12_);
     return foo_vertOutput { metal::float4(_matrix * static_cast<metal::float4>(metal::int4(value)), 2.0) };
 }
 
diff --git a/tests/out/msl/operators.msl b/tests/out/msl/operators.msl
index 02a9fd6f79..d47f543be4 100644
--- a/tests/out/msl/operators.msl
+++ b/tests/out/msl/operators.msl
@@ -59,178 +59,167 @@ metal::float3 bool_cast(
 float constructors(
 ) {
     Foo foo;
-    bool unnamed = false;
-    int unnamed_1 = 0;
-    uint unnamed_2 = 0u;
-    float unnamed_3 = 0.0;
-    metal::uint2 unnamed_4 = const_type_11_;
-    metal::float2x2 unnamed_5 = const_type_7_;
-    type_12 unnamed_6 = const_type_12_;
-    Foo unnamed_7 = const_Foo;
-    metal::uint2 unnamed_8;
-    metal::float2x2 unnamed_9;
-    type_13 unnamed_10;
     foo = Foo {metal::float4(1.0), 1};
     metal::float2x2 mat2comp = metal::float2x2(metal::float2(1.0, 0.0), metal::float2(0.0, 1.0));
     metal::float4x4 mat4comp = metal::float4x4(metal::float4(1.0, 0.0, 0.0, 0.0), metal::float4(0.0, 1.0, 0.0, 0.0), metal::float4(0.0, 0.0, 1.0, 0.0), metal::float4(0.0, 0.0, 0.0, 1.0));
-    unnamed_8 = metal::uint2(0u);
-    unnamed_9 = metal::float2x2(metal::float2(0.0), metal::float2(0.0));
-    for(int _i=0; _i<4; ++_i) unnamed_10.inner[_i] = type_13 {0, 1, 2, 3}.inner[_i];
-    float _e70 = foo.a.x;
-    return _e70;
+    metal::uint2 unnamed = metal::uint2(0u);
+    metal::float2x2 unnamed_1 = metal::float2x2(metal::float2(0.0), metal::float2(0.0));
+    type_13 unnamed_2 = type_13 {0, 1, 2, 3};
+    float _e59 = foo.a.x;
+    return _e59;
 }
 
 void logical(
 ) {
-    bool unnamed_11 = !true;
-    metal::bool2 unnamed_12 = !metal::bool2(true);
-    bool unnamed_13 = true || false;
-    bool unnamed_14 = true && false;
-    bool unnamed_15 = true | false;
-    metal::bool3 unnamed_16 = metal::bool3(true) | metal::bool3(false);
-    bool unnamed_17 = true & false;
-    metal::bool4 unnamed_18 = metal::bool4(true) & metal::bool4(false);
+    bool unnamed_3 = !true;
+    metal::bool2 unnamed_4 = !metal::bool2(true);
+    bool unnamed_5 = true || false;
+    bool unnamed_6 = true && false;
+    bool unnamed_7 = true | false;
+    metal::bool3 unnamed_8 = metal::bool3(true) | metal::bool3(false);
+    bool unnamed_9 = true & false;
+    metal::bool4 unnamed_10 = metal::bool4(true) & metal::bool4(false);
 }
 
 void arithmetic(
 ) {
-    metal::int2 unnamed_19 = -metal::int2(1);
-    metal::float2 unnamed_20 = -metal::float2(1.0);
-    int unnamed_21 = 2 + 1;
-    uint unnamed_22 = 2u + 1u;
-    float unnamed_23 = 2.0 + 1.0;
-    metal::int2 unnamed_24 = metal::int2(2) + metal::int2(1);
-    metal::uint3 unnamed_25 = metal::uint3(2u) + metal::uint3(1u);
-    metal::float4 unnamed_26 = metal::float4(2.0) + metal::float4(1.0);
-    int unnamed_27 = 2 - 1;
-    uint unnamed_28 = 2u - 1u;
-    float unnamed_29 = 2.0 - 1.0;
-    metal::int2 unnamed_30 = metal::int2(2) - metal::int2(1);
-    metal::uint3 unnamed_31 = metal::uint3(2u) - metal::uint3(1u);
-    metal::float4 unnamed_32 = metal::float4(2.0) - metal::float4(1.0);
-    int unnamed_33 = 2 * 1;
-    uint unnamed_34 = 2u * 1u;
-    float unnamed_35 = 2.0 * 1.0;
-    metal::int2 unnamed_36 = metal::int2(2) * metal::int2(1);
-    metal::uint3 unnamed_37 = metal::uint3(2u) * metal::uint3(1u);
-    metal::float4 unnamed_38 = metal::float4(2.0) * metal::float4(1.0);
-    int unnamed_39 = 2 / 1;
-    uint unnamed_40 = 2u / 1u;
-    float unnamed_41 = 2.0 / 1.0;
-    metal::int2 unnamed_42 = metal::int2(2) / metal::int2(1);
-    metal::uint3 unnamed_43 = metal::uint3(2u) / metal::uint3(1u);
-    metal::float4 unnamed_44 = metal::float4(2.0) / metal::float4(1.0);
-    int unnamed_45 = 2 % 1;
-    uint unnamed_46 = 2u % 1u;
-    float unnamed_47 = metal::fmod(2.0, 1.0);
-    metal::int2 unnamed_48 = metal::int2(2) % metal::int2(1);
-    metal::uint3 unnamed_49 = metal::uint3(2u) % metal::uint3(1u);
-    metal::float4 unnamed_50 = metal::fmod(metal::float4(2.0), metal::float4(1.0));
-    metal::int2 unnamed_51 = metal::int2(2) + metal::int2(1);
-    metal::int2 unnamed_52 = metal::int2(2) + metal::int2(1);
-    metal::uint2 unnamed_53 = metal::uint2(2u) + metal::uint2(1u);
-    metal::uint2 unnamed_54 = metal::uint2(2u) + metal::uint2(1u);
-    metal::float2 unnamed_55 = metal::float2(2.0) + metal::float2(1.0);
-    metal::float2 unnamed_56 = metal::float2(2.0) + metal::float2(1.0);
-    metal::int2 unnamed_57 = metal::int2(2) - metal::int2(1);
-    metal::int2 unnamed_58 = metal::int2(2) - metal::int2(1);
-    metal::uint2 unnamed_59 = metal::uint2(2u) - metal::uint2(1u);
-    metal::uint2 unnamed_60 = metal::uint2(2u) - metal::uint2(1u);
-    metal::float2 unnamed_61 = metal::float2(2.0) - metal::float2(1.0);
-    metal::float2 unnamed_62 = metal::float2(2.0) - metal::float2(1.0);
-    metal::int2 unnamed_63 = metal::int2(2) * 1;
-    metal::int2 unnamed_64 = 2 * metal::int2(1);
-    metal::uint2 unnamed_65 = metal::uint2(2u) * 1u;
-    metal::uint2 unnamed_66 = 2u * metal::uint2(1u);
-    metal::float2 unnamed_67 = metal::float2(2.0) * 1.0;
-    metal::float2 unnamed_68 = 2.0 * metal::float2(1.0);
-    metal::int2 unnamed_69 = metal::int2(2) / metal::int2(1);
-    metal::int2 unnamed_70 = metal::int2(2) / metal::int2(1);
-    metal::uint2 unnamed_71 = metal::uint2(2u) / metal::uint2(1u);
-    metal::uint2 unnamed_72 = metal::uint2(2u) / metal::uint2(1u);
-    metal::float2 unnamed_73 = metal::float2(2.0) / metal::float2(1.0);
-    metal::float2 unnamed_74 = metal::float2(2.0) / metal::float2(1.0);
-    metal::int2 unnamed_75 = metal::int2(2) % metal::int2(1);
-    metal::int2 unnamed_76 = metal::int2(2) % metal::int2(1);
-    metal::uint2 unnamed_77 = metal::uint2(2u) % metal::uint2(1u);
-    metal::uint2 unnamed_78 = metal::uint2(2u) % metal::uint2(1u);
-    metal::float2 unnamed_79 = metal::fmod(metal::float2(2.0), metal::float2(1.0));
-    metal::float2 unnamed_80 = metal::fmod(metal::float2(2.0), metal::float2(1.0));
-    metal::float3x3 unnamed_81 = const_type_14_ + const_type_14_;
-    metal::float3x3 unnamed_82 = const_type_14_ - const_type_14_;
-    metal::float3x3 unnamed_83 = const_type_14_ * 1.0;
-    metal::float3x3 unnamed_84 = 2.0 * const_type_14_;
-    metal::float3 unnamed_85 = const_type_15_ * metal::float4(1.0);
-    metal::float4 unnamed_86 = metal::float3(2.0) * const_type_15_;
-    metal::float3x3 unnamed_87 = const_type_15_ * const_type_16_;
+    metal::int2 unnamed_11 = -metal::int2(1);
+    metal::float2 unnamed_12 = -metal::float2(1.0);
+    int unnamed_13 = 2 + 1;
+    uint unnamed_14 = 2u + 1u;
+    float unnamed_15 = 2.0 + 1.0;
+    metal::int2 unnamed_16 = metal::int2(2) + metal::int2(1);
+    metal::uint3 unnamed_17 = metal::uint3(2u) + metal::uint3(1u);
+    metal::float4 unnamed_18 = metal::float4(2.0) + metal::float4(1.0);
+    int unnamed_19 = 2 - 1;
+    uint unnamed_20 = 2u - 1u;
+    float unnamed_21 = 2.0 - 1.0;
+    metal::int2 unnamed_22 = metal::int2(2) - metal::int2(1);
+    metal::uint3 unnamed_23 = metal::uint3(2u) - metal::uint3(1u);
+    metal::float4 unnamed_24 = metal::float4(2.0) - metal::float4(1.0);
+    int unnamed_25 = 2 * 1;
+    uint unnamed_26 = 2u * 1u;
+    float unnamed_27 = 2.0 * 1.0;
+    metal::int2 unnamed_28 = metal::int2(2) * metal::int2(1);
+    metal::uint3 unnamed_29 = metal::uint3(2u) * metal::uint3(1u);
+    metal::float4 unnamed_30 = metal::float4(2.0) * metal::float4(1.0);
+    int unnamed_31 = 2 / 1;
+    uint unnamed_32 = 2u / 1u;
+    float unnamed_33 = 2.0 / 1.0;
+    metal::int2 unnamed_34 = metal::int2(2) / metal::int2(1);
+    metal::uint3 unnamed_35 = metal::uint3(2u) / metal::uint3(1u);
+    metal::float4 unnamed_36 = metal::float4(2.0) / metal::float4(1.0);
+    int unnamed_37 = 2 % 1;
+    uint unnamed_38 = 2u % 1u;
+    float unnamed_39 = metal::fmod(2.0, 1.0);
+    metal::int2 unnamed_40 = metal::int2(2) % metal::int2(1);
+    metal::uint3 unnamed_41 = metal::uint3(2u) % metal::uint3(1u);
+    metal::float4 unnamed_42 = metal::fmod(metal::float4(2.0), metal::float4(1.0));
+    metal::int2 unnamed_43 = metal::int2(2) + metal::int2(1);
+    metal::int2 unnamed_44 = metal::int2(2) + metal::int2(1);
+    metal::uint2 unnamed_45 = metal::uint2(2u) + metal::uint2(1u);
+    metal::uint2 unnamed_46 = metal::uint2(2u) + metal::uint2(1u);
+    metal::float2 unnamed_47 = metal::float2(2.0) + metal::float2(1.0);
+    metal::float2 unnamed_48 = metal::float2(2.0) + metal::float2(1.0);
+    metal::int2 unnamed_49 = metal::int2(2) - metal::int2(1);
+    metal::int2 unnamed_50 = metal::int2(2) - metal::int2(1);
+    metal::uint2 unnamed_51 = metal::uint2(2u) - metal::uint2(1u);
+    metal::uint2 unnamed_52 = metal::uint2(2u) - metal::uint2(1u);
+    metal::float2 unnamed_53 = metal::float2(2.0) - metal::float2(1.0);
+    metal::float2 unnamed_54 = metal::float2(2.0) - metal::float2(1.0);
+    metal::int2 unnamed_55 = metal::int2(2) * 1;
+    metal::int2 unnamed_56 = 2 * metal::int2(1);
+    metal::uint2 unnamed_57 = metal::uint2(2u) * 1u;
+    metal::uint2 unnamed_58 = 2u * metal::uint2(1u);
+    metal::float2 unnamed_59 = metal::float2(2.0) * 1.0;
+    metal::float2 unnamed_60 = 2.0 * metal::float2(1.0);
+    metal::int2 unnamed_61 = metal::int2(2) / metal::int2(1);
+    metal::int2 unnamed_62 = metal::int2(2) / metal::int2(1);
+    metal::uint2 unnamed_63 = metal::uint2(2u) / metal::uint2(1u);
+    metal::uint2 unnamed_64 = metal::uint2(2u) / metal::uint2(1u);
+    metal::float2 unnamed_65 = metal::float2(2.0) / metal::float2(1.0);
+    metal::float2 unnamed_66 = metal::float2(2.0) / metal::float2(1.0);
+    metal::int2 unnamed_67 = metal::int2(2) % metal::int2(1);
+    metal::int2 unnamed_68 = metal::int2(2) % metal::int2(1);
+    metal::uint2 unnamed_69 = metal::uint2(2u) % metal::uint2(1u);
+    metal::uint2 unnamed_70 = metal::uint2(2u) % metal::uint2(1u);
+    metal::float2 unnamed_71 = metal::fmod(metal::float2(2.0), metal::float2(1.0));
+    metal::float2 unnamed_72 = metal::fmod(metal::float2(2.0), metal::float2(1.0));
+    metal::float3x3 unnamed_73 = const_type_14_ + const_type_14_;
+    metal::float3x3 unnamed_74 = const_type_14_ - const_type_14_;
+    metal::float3x3 unnamed_75 = const_type_14_ * 1.0;
+    metal::float3x3 unnamed_76 = 2.0 * const_type_14_;
+    metal::float3 unnamed_77 = const_type_15_ * metal::float4(1.0);
+    metal::float4 unnamed_78 = metal::float3(2.0) * const_type_15_;
+    metal::float3x3 unnamed_79 = const_type_15_ * const_type_16_;
 }
 
 void bit(
 ) {
-    int unnamed_88 = ~1;
-    uint unnamed_89 = ~1u;
-    metal::int2 unnamed_90 = ~metal::int2(1);
-    metal::uint3 unnamed_91 = ~metal::uint3(1u);
-    int unnamed_92 = 2 | 1;
-    uint unnamed_93 = 2u | 1u;
-    metal::int2 unnamed_94 = metal::int2(2) | metal::int2(1);
-    metal::uint3 unnamed_95 = metal::uint3(2u) | metal::uint3(1u);
-    int unnamed_96 = 2 & 1;
-    uint unnamed_97 = 2u & 1u;
-    metal::int2 unnamed_98 = metal::int2(2) & metal::int2(1);
-    metal::uint3 unnamed_99 = metal::uint3(2u) & metal::uint3(1u);
-    int unnamed_100 = 2 ^ 1;
-    uint unnamed_101 = 2u ^ 1u;
-    metal::int2 unnamed_102 = metal::int2(2) ^ metal::int2(1);
-    metal::uint3 unnamed_103 = metal::uint3(2u) ^ metal::uint3(1u);
-    int unnamed_104 = 2 << 1u;
-    uint unnamed_105 = 2u << 1u;
-    metal::int2 unnamed_106 = metal::int2(2) << metal::uint2(1u);
-    metal::uint3 unnamed_107 = metal::uint3(2u) << metal::uint3(1u);
-    int unnamed_108 = 2 >> 1u;
-    uint unnamed_109 = 2u >> 1u;
-    metal::int2 unnamed_110 = metal::int2(2) >> metal::uint2(1u);
-    metal::uint3 unnamed_111 = metal::uint3(2u) >> metal::uint3(1u);
+    int unnamed_80 = ~1;
+    uint unnamed_81 = ~1u;
+    metal::int2 unnamed_82 = ~metal::int2(1);
+    metal::uint3 unnamed_83 = ~metal::uint3(1u);
+    int unnamed_84 = 2 | 1;
+    uint unnamed_85 = 2u | 1u;
+    metal::int2 unnamed_86 = metal::int2(2) | metal::int2(1);
+    metal::uint3 unnamed_87 = metal::uint3(2u) | metal::uint3(1u);
+    int unnamed_88 = 2 & 1;
+    uint unnamed_89 = 2u & 1u;
+    metal::int2 unnamed_90 = metal::int2(2) & metal::int2(1);
+    metal::uint3 unnamed_91 = metal::uint3(2u) & metal::uint3(1u);
+    int unnamed_92 = 2 ^ 1;
+    uint unnamed_93 = 2u ^ 1u;
+    metal::int2 unnamed_94 = metal::int2(2) ^ metal::int2(1);
+    metal::uint3 unnamed_95 = metal::uint3(2u) ^ metal::uint3(1u);
+    int unnamed_96 = 2 << 1u;
+    uint unnamed_97 = 2u << 1u;
+    metal::int2 unnamed_98 = metal::int2(2) << metal::uint2(1u);
+    metal::uint3 unnamed_99 = metal::uint3(2u) << metal::uint3(1u);
+    int unnamed_100 = 2 >> 1u;
+    uint unnamed_101 = 2u >> 1u;
+    metal::int2 unnamed_102 = metal::int2(2) >> metal::uint2(1u);
+    metal::uint3 unnamed_103 = metal::uint3(2u) >> metal::uint3(1u);
 }
 
 void comparison(
 ) {
-    bool unnamed_112 = 2 == 1;
-    bool unnamed_113 = 2u == 1u;
-    bool unnamed_114 = 2.0 == 1.0;
-    metal::bool2 unnamed_115 = metal::int2(2) == metal::int2(1);
-    metal::bool3 unnamed_116 = metal::uint3(2u) == metal::uint3(1u);
-    metal::bool4 unnamed_117 = metal::float4(2.0) == metal::float4(1.0);
-    bool unnamed_118 = 2 != 1;
-    bool unnamed_119 = 2u != 1u;
-    bool unnamed_120 = 2.0 != 1.0;
-    metal::bool2 unnamed_121 = metal::int2(2) != metal::int2(1);
-    metal::bool3 unnamed_122 = metal::uint3(2u) != metal::uint3(1u);
-    metal::bool4 unnamed_123 = metal::float4(2.0) != metal::float4(1.0);
-    bool unnamed_124 = 2 < 1;
-    bool unnamed_125 = 2u < 1u;
-    bool unnamed_126 = 2.0 < 1.0;
-    metal::bool2 unnamed_127 = metal::int2(2) < metal::int2(1);
-    metal::bool3 unnamed_128 = metal::uint3(2u) < metal::uint3(1u);
-    metal::bool4 unnamed_129 = metal::float4(2.0) < metal::float4(1.0);
-    bool unnamed_130 = 2 <= 1;
-    bool unnamed_131 = 2u <= 1u;
-    bool unnamed_132 = 2.0 <= 1.0;
-    metal::bool2 unnamed_133 = metal::int2(2) <= metal::int2(1);
-    metal::bool3 unnamed_134 = metal::uint3(2u) <= metal::uint3(1u);
-    metal::bool4 unnamed_135 = metal::float4(2.0) <= metal::float4(1.0);
-    bool unnamed_136 = 2 > 1;
-    bool unnamed_137 = 2u > 1u;
-    bool unnamed_138 = 2.0 > 1.0;
-    metal::bool2 unnamed_139 = metal::int2(2) > metal::int2(1);
-    metal::bool3 unnamed_140 = metal::uint3(2u) > metal::uint3(1u);
-    metal::bool4 unnamed_141 = metal::float4(2.0) > metal::float4(1.0);
-    bool unnamed_142 = 2 >= 1;
-    bool unnamed_143 = 2u >= 1u;
-    bool unnamed_144 = 2.0 >= 1.0;
-    metal::bool2 unnamed_145 = metal::int2(2) >= metal::int2(1);
-    metal::bool3 unnamed_146 = metal::uint3(2u) >= metal::uint3(1u);
-    metal::bool4 unnamed_147 = metal::float4(2.0) >= metal::float4(1.0);
+    bool unnamed_104 = 2 == 1;
+    bool unnamed_105 = 2u == 1u;
+    bool unnamed_106 = 2.0 == 1.0;
+    metal::bool2 unnamed_107 = metal::int2(2) == metal::int2(1);
+    metal::bool3 unnamed_108 = metal::uint3(2u) == metal::uint3(1u);
+    metal::bool4 unnamed_109 = metal::float4(2.0) == metal::float4(1.0);
+    bool unnamed_110 = 2 != 1;
+    bool unnamed_111 = 2u != 1u;
+    bool unnamed_112 = 2.0 != 1.0;
+    metal::bool2 unnamed_113 = metal::int2(2) != metal::int2(1);
+    metal::bool3 unnamed_114 = metal::uint3(2u) != metal::uint3(1u);
+    metal::bool4 unnamed_115 = metal::float4(2.0) != metal::float4(1.0);
+    bool unnamed_116 = 2 < 1;
+    bool unnamed_117 = 2u < 1u;
+    bool unnamed_118 = 2.0 < 1.0;
+    metal::bool2 unnamed_119 = metal::int2(2) < metal::int2(1);
+    metal::bool3 unnamed_120 = metal::uint3(2u) < metal::uint3(1u);
+    metal::bool4 unnamed_121 = metal::float4(2.0) < metal::float4(1.0);
+    bool unnamed_122 = 2 <= 1;
+    bool unnamed_123 = 2u <= 1u;
+    bool unnamed_124 = 2.0 <= 1.0;
+    metal::bool2 unnamed_125 = metal::int2(2) <= metal::int2(1);
+    metal::bool3 unnamed_126 = metal::uint3(2u) <= metal::uint3(1u);
+    metal::bool4 unnamed_127 = metal::float4(2.0) <= metal::float4(1.0);
+    bool unnamed_128 = 2 > 1;
+    bool unnamed_129 = 2u > 1u;
+    bool unnamed_130 = 2.0 > 1.0;
+    metal::bool2 unnamed_131 = metal::int2(2) > metal::int2(1);
+    metal::bool3 unnamed_132 = metal::uint3(2u) > metal::uint3(1u);
+    metal::bool4 unnamed_133 = metal::float4(2.0) > metal::float4(1.0);
+    bool unnamed_134 = 2 >= 1;
+    bool unnamed_135 = 2u >= 1u;
+    bool unnamed_136 = 2.0 >= 1.0;
+    metal::bool2 unnamed_137 = metal::int2(2) >= metal::int2(1);
+    metal::bool3 unnamed_138 = metal::uint3(2u) >= metal::uint3(1u);
+    metal::bool4 unnamed_139 = metal::float4(2.0) >= metal::float4(1.0);
 }
 
 void assignment(
diff --git a/tests/out/spv/access.spvasm b/tests/out/spv/access.spvasm
index a50474190c..fa5c64395e 100644
--- a/tests/out/spv/access.spvasm
+++ b/tests/out/spv/access.spvasm
@@ -1,16 +1,16 @@
 ; SPIR-V
 ; Version: 1.1
 ; Generator: rspirv
-; Bound: 227
+; Bound: 218
 OpCapability Shader
 OpExtension "SPV_KHR_storage_buffer_storage_class"
 %1 = OpExtInstImport "GLSL.std.450"
 OpMemoryModel Logical GLSL450
-OpEntryPoint Vertex %150 "foo_vert" %145 %148
-OpEntryPoint Fragment %187 "foo_frag" %186
-OpEntryPoint GLCompute %204 "atomics"
-OpExecutionMode %187 OriginUpperLeft
-OpExecutionMode %204 LocalSize 1 1 1
+OpEntryPoint Vertex %141 "foo_vert" %136 %139
+OpEntryPoint Fragment %178 "foo_frag" %177
+OpEntryPoint GLCompute %195 "atomics"
+OpExecutionMode %178 OriginUpperLeft
+OpExecutionMode %195 LocalSize 1 1 1
 OpSource GLSL 450
 OpMemberName %32 0 "value"
 OpName %32 "AlignedWrapper"
@@ -25,27 +25,19 @@ OpName %43 "Baz"
 OpName %52 "bar"
 OpName %54 "baz"
 OpName %57 "idx"
-OpName %59 "_"
-OpName %61 "_"
-OpName %63 "_"
-OpName %64 "_"
-OpName %65 "_"
-OpName %66 "_"
-OpName %67 "_"
-OpName %68 "t"
-OpName %71 "test_matrix_within_struct_accesses"
-OpName %128 "foo"
-OpName %129 "read_from_private"
-OpName %134 "a"
-OpName %135 "test_arr_as_arg"
-OpName %140 "foo"
-OpName %141 "c"
-OpName %143 "_"
-OpName %145 "vi"
-OpName %150 "foo_vert"
-OpName %187 "foo_frag"
-OpName %202 "tmp"
-OpName %204 "atomics"
+OpName %59 "t"
+OpName %62 "test_matrix_within_struct_accesses"
+OpName %120 "foo"
+OpName %121 "read_from_private"
+OpName %126 "a"
+OpName %127 "test_arr_as_arg"
+OpName %132 "foo"
+OpName %133 "c"
+OpName %136 "vi"
+OpName %141 "foo_vert"
+OpName %178 "foo_frag"
+OpName %193 "tmp"
+OpName %195 "atomics"
 OpMemberDecorate %32 0 Offset 0
 OpDecorate %37 ArrayStride 16
 OpDecorate %39 ArrayStride 8
@@ -72,9 +64,9 @@ OpDecorate %54 DescriptorSet 0
 OpDecorate %54 Binding 1
 OpDecorate %55 Block
 OpMemberDecorate %55 0 Offset 0
-OpDecorate %145 BuiltIn VertexIndex
-OpDecorate %148 BuiltIn Position
-OpDecorate %186 Location 0
+OpDecorate %136 BuiltIn VertexIndex
+OpDecorate %139 BuiltIn Position
+OpDecorate %177 Location 0
 %2 = OpTypeVoid
 %4 = OpTypeInt 32 1
 %3 = OpConstant  %4  2
@@ -131,226 +123,209 @@ OpDecorate %186 Location 0
 %56 = OpTypePointer Uniform %55
 %54 = OpVariable  %56  Uniform
 %58 = OpTypePointer Function %4
-%60 = OpTypePointer Function %42
-%62 = OpTypePointer Function %36
-%69 = OpTypePointer Function %43
-%72 = OpTypeFunction %2
-%73 = OpTypePointer Uniform %43
-%78 = OpTypePointer Uniform %42
-%81 = OpTypePointer Uniform %36
-%87 = OpTypePointer Uniform %9
-%112 = OpTypePointer Function %36
-%118 = OpTypePointer Function %9
-%130 = OpTypeFunction %9 %44
-%136 = OpTypeFunction %9 %46
-%142 = OpTypePointer Function %49
-%146 = OpTypePointer Input %26
-%145 = OpVariable  %146  Input
-%149 = OpTypePointer Output %47
-%148 = OpVariable  %149  Output
-%155 = OpTypePointer StorageBuffer %33
-%158 = OpTypePointer StorageBuffer %39
-%161 = OpTypePointer StorageBuffer %34
-%162 = OpTypePointer StorageBuffer %9
-%165 = OpTypePointer StorageBuffer %40
-%168 = OpTypePointer StorageBuffer %32
-%169 = OpConstant  %26  4
-%180 = OpTypeVector %4 4
-%186 = OpVariable  %149  Output
-%206 = OpTypePointer StorageBuffer %4
-%209 = OpConstant  %26  64
-%71 = OpFunction  %2  None %72
-%70 = OpLabel
-%66 = OpVariable  %44  Function
-%63 = OpVariable  %62  Function
+%60 = OpTypePointer Function %43
+%63 = OpTypeFunction %2
+%64 = OpTypePointer Uniform %43
+%69 = OpTypePointer Uniform %42
+%72 = OpTypePointer Uniform %36
+%78 = OpTypePointer Uniform %9
+%98 = OpTypePointer Function %42
+%104 = OpTypePointer Function %36
+%110 = OpTypePointer Function %9
+%122 = OpTypeFunction %9 %44
+%128 = OpTypeFunction %9 %46
+%134 = OpTypePointer Function %49
+%137 = OpTypePointer Input %26
+%136 = OpVariable  %137  Input
+%140 = OpTypePointer Output %47
+%139 = OpVariable  %140  Output
+%146 = OpTypePointer StorageBuffer %33
+%149 = OpTypePointer StorageBuffer %39
+%152 = OpTypePointer StorageBuffer %34
+%153 = OpTypePointer StorageBuffer %9
+%156 = OpTypePointer StorageBuffer %40
+%159 = OpTypePointer StorageBuffer %32
+%160 = OpConstant  %26  4
+%171 = OpTypeVector %4 4
+%177 = OpVariable  %140  Output
+%197 = OpTypePointer StorageBuffer %4
+%200 = OpConstant  %26  64
+%62 = OpFunction  %2  None %63
+%61 = OpLabel
 %57 = OpVariable  %58  Function %5
-%67 = OpVariable  %44  Function
-%64 = OpVariable  %44  Function
 %59 = OpVariable  %60  Function
-%68 = OpVariable  %69  Function
-%65 = OpVariable  %44  Function
-%61 = OpVariable  %62  Function
-%74 = OpAccessChain  %73  %54 %31
-OpBranch %75
-%75 = OpLabel
-%76 = OpLoad  %4  %57
-%77 = OpISub  %4  %76 %6
-OpStore %57 %77
-%79 = OpAccessChain  %78  %74 %31
-%80 = OpLoad  %42  %79
-OpStore %59 %80
-%82 = OpAccessChain  %81  %74 %31 %31
-%83 = OpLoad  %36  %82
-OpStore %61 %83
+%65 = OpAccessChain  %64  %54 %31
+OpBranch %66
+%66 = OpLabel
+%67 = OpLoad  %4  %57
+%68 = OpISub  %4  %67 %6
+OpStore %57 %68
+%70 = OpAccessChain  %69  %65 %31
+%71 = OpLoad  %42  %70
+%73 = OpAccessChain  %72  %65 %31 %31
+%74 = OpLoad  %36  %73
+%75 = OpLoad  %4  %57
+%76 = OpAccessChain  %72  %65 %31 %75
+%77 = OpLoad  %36  %76
+%79 = OpAccessChain  %78  %65 %31 %31 %29
+%80 = OpLoad  %9  %79
+%81 = OpLoad  %4  %57
+%82 = OpAccessChain  %78  %65 %31 %31 %81
+%83 = OpLoad  %9  %82
 %84 = OpLoad  %4  %57
-%85 = OpAccessChain  %81  %74 %31 %84
-%86 = OpLoad  %36  %85
-OpStore %63 %86
-%88 = OpAccessChain  %87  %74 %31 %31 %29
-%89 = OpLoad  %9  %88
-OpStore %64 %89
-%90 = OpLoad  %4  %57
-%91 = OpAccessChain  %87  %74 %31 %31 %90
-%92 = OpLoad  %9  %91
-OpStore %65 %92
-%93 = OpLoad  %4  %57
-%94 = OpAccessChain  %87  %74 %31 %93 %29
-%95 = OpLoad  %9  %94
-OpStore %66 %95
+%85 = OpAccessChain  %78  %65 %31 %84 %29
+%86 = OpLoad  %9  %85
+%87 = OpLoad  %4  %57
+%88 = OpLoad  %4  %57
+%89 = OpAccessChain  %78  %65 %31 %87 %88
+%90 = OpLoad  %9  %89
+%91 = OpCompositeConstruct  %36  %8 %8
+%92 = OpCompositeConstruct  %36  %10 %10
+%93 = OpCompositeConstruct  %36  %11 %11
+%94 = OpCompositeConstruct  %42  %91 %92 %93
+%95 = OpCompositeConstruct  %43  %94
+OpStore %59 %95
 %96 = OpLoad  %4  %57
-%97 = OpLoad  %4  %57
-%98 = OpAccessChain  %87  %74 %31 %96 %97
-%99 = OpLoad  %9  %98
-OpStore %67 %99
-%100 = OpCompositeConstruct  %36  %8 %8
-%101 = OpCompositeConstruct  %36  %10 %10
-%102 = OpCompositeConstruct  %36  %11 %11
-%103 = OpCompositeConstruct  %42  %100 %101 %102
-%104 = OpCompositeConstruct  %43  %103
-OpStore %68 %104
-%105 = OpLoad  %4  %57
-%106 = OpIAdd  %4  %105 %6
-OpStore %57 %106
-%107 = OpCompositeConstruct  %36  %12 %12
-%108 = OpCompositeConstruct  %36  %13 %13
-%109 = OpCompositeConstruct  %36  %14 %14
-%110 = OpCompositeConstruct  %42  %107 %108 %109
-%111 = OpAccessChain  %60  %68 %31
-OpStore %111 %110
-%113 = OpCompositeConstruct  %36  %15 %15
-%114 = OpAccessChain  %112  %68 %31 %31
-OpStore %114 %113
-%115 = OpLoad  %4  %57
-%116 = OpCompositeConstruct  %36  %16 %16
-%117 = OpAccessChain  %112  %68 %31 %115
-OpStore %117 %116
-%119 = OpAccessChain  %118  %68 %31 %31 %29
-OpStore %119 %17
-%120 = OpLoad  %4  %57
-%121 = OpAccessChain  %118  %68 %31 %31 %120
-OpStore %121 %18
-%122 = OpLoad  %4  %57
-%123 = OpAccessChain  %118  %68 %31 %122 %29
-OpStore %123 %19
-%124 = OpLoad  %4  %57
-%125 = OpLoad  %4  %57
-%126 = OpAccessChain  %118  %68 %31 %124 %125
-OpStore %126 %20
+%97 = OpIAdd  %4  %96 %6
+OpStore %57 %97
+%99 = OpCompositeConstruct  %36  %12 %12
+%100 = OpCompositeConstruct  %36  %13 %13
+%101 = OpCompositeConstruct  %36  %14 %14
+%102 = OpCompositeConstruct  %42  %99 %100 %101
+%103 = OpAccessChain  %98  %59 %31
+OpStore %103 %102
+%105 = OpCompositeConstruct  %36  %15 %15
+%106 = OpAccessChain  %104  %59 %31 %31
+OpStore %106 %105
+%107 = OpLoad  %4  %57
+%108 = OpCompositeConstruct  %36  %16 %16
+%109 = OpAccessChain  %104  %59 %31 %107
+OpStore %109 %108
+%111 = OpAccessChain  %110  %59 %31 %31 %29
+OpStore %111 %17
+%112 = OpLoad  %4  %57
+%113 = OpAccessChain  %110  %59 %31 %31 %112
+OpStore %113 %18
+%114 = OpLoad  %4  %57
+%115 = OpAccessChain  %110  %59 %31 %114 %29
+OpStore %115 %19
+%116 = OpLoad  %4  %57
+%117 = OpLoad  %4  %57
+%118 = OpAccessChain  %110  %59 %31 %116 %117
+OpStore %118 %20
 OpReturn
 OpFunctionEnd
-%129 = OpFunction  %9  None %130
-%128 = OpFunctionParameter  %44
-%127 = OpLabel
-OpBranch %131
-%131 = OpLabel
-%132 = OpLoad  %9  %128
-OpReturnValue %132
+%121 = OpFunction  %9  None %122
+%120 = OpFunctionParameter  %44
+%119 = OpLabel
+OpBranch %123
+%123 = OpLabel
+%124 = OpLoad  %9  %120
+OpReturnValue %124
 OpFunctionEnd
-%135 = OpFunction  %9  None %136
-%134 = OpFunctionParameter  %46
-%133 = OpLabel
-OpBranch %137
-%137 = OpLabel
-%138 = OpCompositeExtract  %45  %134 4
-%139 = OpCompositeExtract  %9  %138 9
-OpReturnValue %139
+%127 = OpFunction  %9  None %128
+%126 = OpFunctionParameter  %46
+%125 = OpLabel
+OpBranch %129
+%129 = OpLabel
+%130 = OpCompositeExtract  %45  %126 4
+%131 = OpCompositeExtract  %9  %130 9
+OpReturnValue %131
 OpFunctionEnd
-%150 = OpFunction  %2  None %72
-%144 = OpLabel
-%140 = OpVariable  %44  Function %24
-%141 = OpVariable  %142  Function
-%143 = OpVariable  %44  Function
-%147 = OpLoad  %26  %145
-%151 = OpAccessChain  %73  %54 %31
-OpBranch %152
-%152 = OpLabel
-%153 = OpLoad  %9  %140
-OpStore %140 %8
-%154 = OpFunctionCall  %2  %71
-%156 = OpAccessChain  %155  %52 %31
-%157 = OpLoad  %33  %156
-%159 = OpAccessChain  %158  %52 %25
-%160 = OpLoad  %39  %159
-%163 = OpAccessChain  %162  %52 %31 %25 %31
-%164 = OpLoad  %9  %163
-%166 = OpArrayLength  %26  %52 4
-%167 = OpISub  %26  %166 %27
-%170 = OpAccessChain  %48  %52 %169 %167 %31
-%171 = OpLoad  %4  %170
-%172 = OpFunctionCall  %9  %129 %140
-%173 = OpConvertFToS  %4  %164
-%174 = OpCompositeConstruct  %49  %171 %173 %28 %23 %22
-OpStore %141 %174
-%175 = OpIAdd  %26  %147 %29
-%176 = OpAccessChain  %58  %141 %175
-OpStore %176 %30
-%177 = OpAccessChain  %58  %141 %147
-%178 = OpLoad  %4  %177
-%179 = OpFunctionCall  %9  %135 %51
-OpStore %143 %179
-%181 = OpCompositeConstruct  %180  %178 %178 %178 %178
-%182 = OpConvertSToF  %47  %181
-%183 = OpMatrixTimesVector  %34  %157 %182
-%184 = OpCompositeConstruct  %47  %183 %10
-OpStore %148 %184
+%141 = OpFunction  %2  None %63
+%135 = OpLabel
+%132 = OpVariable  %44  Function %24
+%133 = OpVariable  %134  Function
+%138 = OpLoad  %26  %136
+%142 = OpAccessChain  %64  %54 %31
+OpBranch %143
+%143 = OpLabel
+%144 = OpLoad  %9  %132
+OpStore %132 %8
+%145 = OpFunctionCall  %2  %62
+%147 = OpAccessChain  %146  %52 %31
+%148 = OpLoad  %33  %147
+%150 = OpAccessChain  %149  %52 %25
+%151 = OpLoad  %39  %150
+%154 = OpAccessChain  %153  %52 %31 %25 %31
+%155 = OpLoad  %9  %154
+%157 = OpArrayLength  %26  %52 4
+%158 = OpISub  %26  %157 %27
+%161 = OpAccessChain  %48  %52 %160 %158 %31
+%162 = OpLoad  %4  %161
+%163 = OpFunctionCall  %9  %121 %132
+%164 = OpConvertFToS  %4  %155
+%165 = OpCompositeConstruct  %49  %162 %164 %28 %23 %22
+OpStore %133 %165
+%166 = OpIAdd  %26  %138 %29
+%167 = OpAccessChain  %58  %133 %166
+OpStore %167 %30
+%168 = OpAccessChain  %58  %133 %138
+%169 = OpLoad  %4  %168
+%170 = OpFunctionCall  %9  %127 %51
+%172 = OpCompositeConstruct  %171  %169 %169 %169 %169
+%173 = OpConvertSToF  %47  %172
+%174 = OpMatrixTimesVector  %34  %148 %173
+%175 = OpCompositeConstruct  %47  %174 %10
+OpStore %139 %175
 OpReturn
 OpFunctionEnd
-%187 = OpFunction  %2  None %72
-%185 = OpLabel
-OpBranch %188
-%188 = OpLabel
-%189 = OpAccessChain  %162  %52 %31 %29 %27
-OpStore %189 %8
-%190 = OpCompositeConstruct  %34  %24 %24 %24
-%191 = OpCompositeConstruct  %34  %8 %8 %8
-%192 = OpCompositeConstruct  %34  %10 %10 %10
-%193 = OpCompositeConstruct  %34  %11 %11 %11
-%194 = OpCompositeConstruct  %33  %190 %191 %192 %193
-%195 = OpAccessChain  %155  %52 %31
-OpStore %195 %194
-%196 = OpCompositeConstruct  %38  %31 %31
-%197 = OpCompositeConstruct  %38  %29 %29
-%198 = OpCompositeConstruct  %39  %196 %197
-%199 = OpAccessChain  %158  %52 %25
-OpStore %199 %198
-%200 = OpAccessChain  %48  %52 %169 %29 %31
-OpStore %200 %6
-%201 = OpCompositeConstruct  %47  %24 %24 %24 %24
-OpStore %186 %201
+%178 = OpFunction  %2  None %63
+%176 = OpLabel
+OpBranch %179
+%179 = OpLabel
+%180 = OpAccessChain  %153  %52 %31 %29 %27
+OpStore %180 %8
+%181 = OpCompositeConstruct  %34  %24 %24 %24
+%182 = OpCompositeConstruct  %34  %8 %8 %8
+%183 = OpCompositeConstruct  %34  %10 %10 %10
+%184 = OpCompositeConstruct  %34  %11 %11 %11
+%185 = OpCompositeConstruct  %33  %181 %182 %183 %184
+%186 = OpAccessChain  %146  %52 %31
+OpStore %186 %185
+%187 = OpCompositeConstruct  %38  %31 %31
+%188 = OpCompositeConstruct  %38  %29 %29
+%189 = OpCompositeConstruct  %39  %187 %188
+%190 = OpAccessChain  %149  %52 %25
+OpStore %190 %189
+%191 = OpAccessChain  %48  %52 %160 %29 %31
+OpStore %191 %6
+%192 = OpCompositeConstruct  %47  %24 %24 %24 %24
+OpStore %177 %192
 OpReturn
 OpFunctionEnd
-%204 = OpFunction  %2  None %72
-%203 = OpLabel
-%202 = OpVariable  %58  Function
-OpBranch %205
-%205 = OpLabel
-%207 = OpAccessChain  %206  %52 %27
-%208 = OpAtomicLoad  %4  %207 %6 %209
-%211 = OpAccessChain  %206  %52 %27
-%210 = OpAtomicIAdd  %4  %211 %6 %209 %22
-OpStore %202 %210
-%213 = OpAccessChain  %206  %52 %27
-%212 = OpAtomicISub  %4  %213 %6 %209 %22
-OpStore %202 %212
-%215 = OpAccessChain  %206  %52 %27
-%214 = OpAtomicAnd  %4  %215 %6 %209 %22
-OpStore %202 %214
-%217 = OpAccessChain  %206  %52 %27
-%216 = OpAtomicOr  %4  %217 %6 %209 %22
-OpStore %202 %216
-%219 = OpAccessChain  %206  %52 %27
-%218 = OpAtomicXor  %4  %219 %6 %209 %22
-OpStore %202 %218
-%221 = OpAccessChain  %206  %52 %27
-%220 = OpAtomicSMin  %4  %221 %6 %209 %22
-OpStore %202 %220
-%223 = OpAccessChain  %206  %52 %27
-%222 = OpAtomicSMax  %4  %223 %6 %209 %22
-OpStore %202 %222
-%225 = OpAccessChain  %206  %52 %27
-%224 = OpAtomicExchange  %4  %225 %6 %209 %22
-OpStore %202 %224
-%226 = OpAccessChain  %206  %52 %27
-OpAtomicStore %226 %6 %209 %208
+%195 = OpFunction  %2  None %63
+%194 = OpLabel
+%193 = OpVariable  %58  Function
+OpBranch %196
+%196 = OpLabel
+%198 = OpAccessChain  %197  %52 %27
+%199 = OpAtomicLoad  %4  %198 %6 %200
+%202 = OpAccessChain  %197  %52 %27
+%201 = OpAtomicIAdd  %4  %202 %6 %200 %22
+OpStore %193 %201
+%204 = OpAccessChain  %197  %52 %27
+%203 = OpAtomicISub  %4  %204 %6 %200 %22
+OpStore %193 %203
+%206 = OpAccessChain  %197  %52 %27
+%205 = OpAtomicAnd  %4  %206 %6 %200 %22
+OpStore %193 %205
+%208 = OpAccessChain  %197  %52 %27
+%207 = OpAtomicOr  %4  %208 %6 %200 %22
+OpStore %193 %207
+%210 = OpAccessChain  %197  %52 %27
+%209 = OpAtomicXor  %4  %210 %6 %200 %22
+OpStore %193 %209
+%212 = OpAccessChain  %197  %52 %27
+%211 = OpAtomicSMin  %4  %212 %6 %200 %22
+OpStore %193 %211
+%214 = OpAccessChain  %197  %52 %27
+%213 = OpAtomicSMax  %4  %214 %6 %200 %22
+OpStore %193 %213
+%216 = OpAccessChain  %197  %52 %27
+%215 = OpAtomicExchange  %4  %216 %6 %200 %22
+OpStore %193 %215
+%217 = OpAccessChain  %197  %52 %27
+OpAtomicStore %217 %6 %200 %199
 OpReturn
 OpFunctionEnd
\ No newline at end of file
diff --git a/tests/out/spv/operators.spvasm b/tests/out/spv/operators.spvasm
index 8801c2f24e..8de46ea3da 100644
--- a/tests/out/spv/operators.spvasm
+++ b/tests/out/spv/operators.spvasm
@@ -1,12 +1,12 @@
 ; SPIR-V
 ; Version: 1.1
 ; Generator: rspirv
-; Bound: 519
+; Bound: 501
 OpCapability Shader
 %1 = OpExtInstImport "GLSL.std.450"
 OpMemoryModel Logical GLSL450
-OpEntryPoint GLCompute %507 "main"
-OpExecutionMode %507 LocalSize 1 1 1
+OpEntryPoint GLCompute %489 "main"
+OpExecutionMode %489 LocalSize 1 1 1
 OpMemberDecorate %30 0 Offset 0
 OpMemberDecorate %30 1 Offset 16
 OpDecorate %35 ArrayStride 32
@@ -67,21 +67,14 @@ OpDecorate %36 ArrayStride 4
 %98 = OpTypeFunction %29 %29
 %100 = OpTypeVector %10 3
 %107 = OpTypePointer Function %30
-%109 = OpTypePointer Function %10
-%111 = OpTypePointer Function %8
-%113 = OpTypePointer Function %20
-%115 = OpTypePointer Function %4
-%117 = OpTypePointer Function %34
-%119 = OpTypePointer Function %32
-%121 = OpTypePointer Function %35
-%126 = OpTypePointer Function %36
-%129 = OpTypeFunction %4
-%146 = OpTypePointer Function %26
-%147 = OpTypePointer Function %4
-%152 = OpTypeFunction %2
-%155 = OpTypeVector %10 2
-%171 = OpTypeVector %8 2
-%182 = OpTypeVector %20 3
+%110 = OpTypeFunction %4
+%127 = OpTypePointer Function %26
+%128 = OpTypePointer Function %4
+%133 = OpTypeFunction %2
+%136 = OpTypeVector %10 2
+%152 = OpTypeVector %8 2
+%163 = OpTypeVector %20 3
+%458 = OpTypePointer Function %8
 %55 = OpFunction  %26  None %56
 %54 = OpLabel
 OpBranch %57
@@ -140,437 +133,423 @@ OpBranch %99
 %105 = OpSelect  %29  %102 %104 %103
 OpReturnValue %105
 OpFunctionEnd
-%128 = OpFunction  %4  None %129
-%127 = OpLabel
-%123 = OpVariable  %117  Function
-%118 = OpVariable  %119  Function %46
-%112 = OpVariable  %113  Function %19
+%109 = OpFunction  %4  None %110
+%108 = OpLabel
 %106 = OpVariable  %107  Function
-%124 = OpVariable  %119  Function
-%120 = OpVariable  %121  Function %49
-%114 = OpVariable  %115  Function %5
-%108 = OpVariable  %109  Function %12
-%125 = OpVariable  %126  Function
-%122 = OpVariable  %107  Function %48
-%116 = OpVariable  %117  Function %44
-%110 = OpVariable  %111  Function %11
-OpBranch %130
-%130 = OpLabel
-%131 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%132 = OpCompositeConstruct  %30  %131 %7
-OpStore %106 %132
-%133 = OpCompositeConstruct  %31  %3 %5
-%134 = OpCompositeConstruct  %31  %5 %3
-%135 = OpCompositeConstruct  %32  %133 %134
-%136 = OpCompositeConstruct  %26  %3 %5 %5 %5
-%137 = OpCompositeConstruct  %26  %5 %3 %5 %5
-%138 = OpCompositeConstruct  %26  %5 %5 %3 %5
-%139 = OpCompositeConstruct  %26  %5 %5 %5 %3
-%140 = OpCompositeConstruct  %33  %136 %137 %138 %139
-%141 = OpCompositeConstruct  %34  %19 %19
-OpStore %123 %141
-%142 = OpCompositeConstruct  %31  %5 %5
-%143 = OpCompositeConstruct  %31  %5 %5
-%144 = OpCompositeConstruct  %32  %142 %143
-OpStore %124 %144
-%145 = OpCompositeConstruct  %36  %11 %7 %18 %21
-OpStore %125 %145
-%148 = OpAccessChain  %147  %106 %19 %19
-%149 = OpLoad  %4  %148
-OpReturnValue %149
+OpBranch %111
+%111 = OpLabel
+%112 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%113 = OpCompositeConstruct  %30  %112 %7
+OpStore %106 %113
+%114 = OpCompositeConstruct  %31  %3 %5
+%115 = OpCompositeConstruct  %31  %5 %3
+%116 = OpCompositeConstruct  %32  %114 %115
+%117 = OpCompositeConstruct  %26  %3 %5 %5 %5
+%118 = OpCompositeConstruct  %26  %5 %3 %5 %5
+%119 = OpCompositeConstruct  %26  %5 %5 %3 %5
+%120 = OpCompositeConstruct  %26  %5 %5 %5 %3
+%121 = OpCompositeConstruct  %33  %117 %118 %119 %120
+%122 = OpCompositeConstruct  %34  %19 %19
+%123 = OpCompositeConstruct  %31  %5 %5
+%124 = OpCompositeConstruct  %31  %5 %5
+%125 = OpCompositeConstruct  %32  %123 %124
+%126 = OpCompositeConstruct  %36  %11 %7 %18 %21
+%129 = OpAccessChain  %128  %106 %19 %19
+%130 = OpLoad  %4  %129
+OpReturnValue %130
 OpFunctionEnd
-%151 = OpFunction  %2  None %152
-%150 = OpLabel
-OpBranch %153
-%153 = OpLabel
-%154 = OpLogicalNot  %10  %9
-%156 = OpCompositeConstruct  %155  %9 %9
-%157 = OpLogicalNot  %155  %156
-%158 = OpLogicalOr  %10  %9 %12
-%159 = OpLogicalAnd  %10  %9 %12
-%160 = OpLogicalOr  %10  %9 %12
-%161 = OpCompositeConstruct  %100  %9 %9 %9
-%162 = OpCompositeConstruct  %100  %12 %12 %12
-%163 = OpLogicalOr  %100  %161 %162
-%164 = OpLogicalAnd  %10  %9 %12
-%165 = OpCompositeConstruct  %28  %9 %9 %9 %9
-%166 = OpCompositeConstruct  %28  %12 %12 %12 %12
-%167 = OpLogicalAnd  %28  %165 %166
+%132 = OpFunction  %2  None %133
+%131 = OpLabel
+OpBranch %134
+%134 = OpLabel
+%135 = OpLogicalNot  %10  %9
+%137 = OpCompositeConstruct  %136  %9 %9
+%138 = OpLogicalNot  %136  %137
+%139 = OpLogicalOr  %10  %9 %12
+%140 = OpLogicalAnd  %10  %9 %12
+%141 = OpLogicalOr  %10  %9 %12
+%142 = OpCompositeConstruct  %100  %9 %9 %9
+%143 = OpCompositeConstruct  %100  %12 %12 %12
+%144 = OpLogicalOr  %100  %142 %143
+%145 = OpLogicalAnd  %10  %9 %12
+%146 = OpCompositeConstruct  %28  %9 %9 %9 %9
+%147 = OpCompositeConstruct  %28  %12 %12 %12 %12
+%148 = OpLogicalAnd  %28  %146 %147
 OpReturn
 OpFunctionEnd
-%169 = OpFunction  %2  None %152
-%168 = OpLabel
-OpBranch %170
-%170 = OpLabel
-%172 = OpCompositeConstruct  %171  %7 %7
-%173 = OpSNegate  %171  %172
-%174 = OpCompositeConstruct  %31  %3 %3
-%175 = OpFNegate  %31  %174
-%176 = OpIAdd  %8  %18 %7
-%177 = OpIAdd  %20  %24 %25
-%178 = OpFAdd  %4  %14 %3
-%179 = OpCompositeConstruct  %171  %18 %18
-%180 = OpCompositeConstruct  %171  %7 %7
-%181 = OpIAdd  %171  %179 %180
-%183 = OpCompositeConstruct  %182  %24 %24 %24
-%184 = OpCompositeConstruct  %182  %25 %25 %25
-%185 = OpIAdd  %182  %183 %184
-%186 = OpCompositeConstruct  %26  %14 %14 %14 %14
-%187 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%188 = OpFAdd  %26  %186 %187
-%189 = OpISub  %8  %18 %7
-%190 = OpISub  %20  %24 %25
-%191 = OpFSub  %4  %14 %3
-%192 = OpCompositeConstruct  %171  %18 %18
-%193 = OpCompositeConstruct  %171  %7 %7
-%194 = OpISub  %171  %192 %193
-%195 = OpCompositeConstruct  %182  %24 %24 %24
-%196 = OpCompositeConstruct  %182  %25 %25 %25
-%197 = OpISub  %182  %195 %196
-%198 = OpCompositeConstruct  %26  %14 %14 %14 %14
-%199 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%200 = OpFSub  %26  %198 %199
-%201 = OpIMul  %8  %18 %7
-%202 = OpIMul  %20  %24 %25
-%203 = OpFMul  %4  %14 %3
-%204 = OpCompositeConstruct  %171  %18 %18
-%205 = OpCompositeConstruct  %171  %7 %7
-%206 = OpIMul  %171  %204 %205
-%207 = OpCompositeConstruct  %182  %24 %24 %24
-%208 = OpCompositeConstruct  %182  %25 %25 %25
-%209 = OpIMul  %182  %207 %208
-%210 = OpCompositeConstruct  %26  %14 %14 %14 %14
-%211 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%212 = OpFMul  %26  %210 %211
-%213 = OpSDiv  %8  %18 %7
-%214 = OpUDiv  %20  %24 %25
-%215 = OpFDiv  %4  %14 %3
-%216 = OpCompositeConstruct  %171  %18 %18
-%217 = OpCompositeConstruct  %171  %7 %7
-%218 = OpSDiv  %171  %216 %217
-%219 = OpCompositeConstruct  %182  %24 %24 %24
-%220 = OpCompositeConstruct  %182  %25 %25 %25
-%221 = OpUDiv  %182  %219 %220
-%222 = OpCompositeConstruct  %26  %14 %14 %14 %14
-%223 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%224 = OpFDiv  %26  %222 %223
-%225 = OpSMod  %8  %18 %7
-%226 = OpUMod  %20  %24 %25
-%227 = OpFRem  %4  %14 %3
-%228 = OpCompositeConstruct  %171  %18 %18
-%229 = OpCompositeConstruct  %171  %7 %7
-%230 = OpSMod  %171  %228 %229
-%231 = OpCompositeConstruct  %182  %24 %24 %24
-%232 = OpCompositeConstruct  %182  %25 %25 %25
-%233 = OpUMod  %182  %231 %232
-%234 = OpCompositeConstruct  %26  %14 %14 %14 %14
-%235 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%236 = OpFRem  %26  %234 %235
-%237 = OpCompositeConstruct  %171  %18 %18
-%238 = OpCompositeConstruct  %171  %7 %7
-%239 = OpIAdd  %171  %237 %238
-%240 = OpCompositeConstruct  %171  %7 %7
-%241 = OpCompositeConstruct  %171  %18 %18
-%242 = OpIAdd  %171  %241 %240
-%243 = OpCompositeConstruct  %34  %24 %24
-%244 = OpCompositeConstruct  %34  %25 %25
-%245 = OpIAdd  %34  %243 %244
-%246 = OpCompositeConstruct  %34  %25 %25
-%247 = OpCompositeConstruct  %34  %24 %24
-%248 = OpIAdd  %34  %247 %246
-%249 = OpCompositeConstruct  %31  %14 %14
-%250 = OpCompositeConstruct  %31  %3 %3
-%251 = OpFAdd  %31  %249 %250
-%252 = OpCompositeConstruct  %31  %3 %3
-%253 = OpCompositeConstruct  %31  %14 %14
-%254 = OpFAdd  %31  %253 %252
-%255 = OpCompositeConstruct  %171  %18 %18
-%256 = OpCompositeConstruct  %171  %7 %7
-%257 = OpISub  %171  %255 %256
-%258 = OpCompositeConstruct  %171  %7 %7
-%259 = OpCompositeConstruct  %171  %18 %18
-%260 = OpISub  %171  %259 %258
-%261 = OpCompositeConstruct  %34  %24 %24
+%150 = OpFunction  %2  None %133
+%149 = OpLabel
+OpBranch %151
+%151 = OpLabel
+%153 = OpCompositeConstruct  %152  %7 %7
+%154 = OpSNegate  %152  %153
+%155 = OpCompositeConstruct  %31  %3 %3
+%156 = OpFNegate  %31  %155
+%157 = OpIAdd  %8  %18 %7
+%158 = OpIAdd  %20  %24 %25
+%159 = OpFAdd  %4  %14 %3
+%160 = OpCompositeConstruct  %152  %18 %18
+%161 = OpCompositeConstruct  %152  %7 %7
+%162 = OpIAdd  %152  %160 %161
+%164 = OpCompositeConstruct  %163  %24 %24 %24
+%165 = OpCompositeConstruct  %163  %25 %25 %25
+%166 = OpIAdd  %163  %164 %165
+%167 = OpCompositeConstruct  %26  %14 %14 %14 %14
+%168 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%169 = OpFAdd  %26  %167 %168
+%170 = OpISub  %8  %18 %7
+%171 = OpISub  %20  %24 %25
+%172 = OpFSub  %4  %14 %3
+%173 = OpCompositeConstruct  %152  %18 %18
+%174 = OpCompositeConstruct  %152  %7 %7
+%175 = OpISub  %152  %173 %174
+%176 = OpCompositeConstruct  %163  %24 %24 %24
+%177 = OpCompositeConstruct  %163  %25 %25 %25
+%178 = OpISub  %163  %176 %177
+%179 = OpCompositeConstruct  %26  %14 %14 %14 %14
+%180 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%181 = OpFSub  %26  %179 %180
+%182 = OpIMul  %8  %18 %7
+%183 = OpIMul  %20  %24 %25
+%184 = OpFMul  %4  %14 %3
+%185 = OpCompositeConstruct  %152  %18 %18
+%186 = OpCompositeConstruct  %152  %7 %7
+%187 = OpIMul  %152  %185 %186
+%188 = OpCompositeConstruct  %163  %24 %24 %24
+%189 = OpCompositeConstruct  %163  %25 %25 %25
+%190 = OpIMul  %163  %188 %189
+%191 = OpCompositeConstruct  %26  %14 %14 %14 %14
+%192 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%193 = OpFMul  %26  %191 %192
+%194 = OpSDiv  %8  %18 %7
+%195 = OpUDiv  %20  %24 %25
+%196 = OpFDiv  %4  %14 %3
+%197 = OpCompositeConstruct  %152  %18 %18
+%198 = OpCompositeConstruct  %152  %7 %7
+%199 = OpSDiv  %152  %197 %198
+%200 = OpCompositeConstruct  %163  %24 %24 %24
+%201 = OpCompositeConstruct  %163  %25 %25 %25
+%202 = OpUDiv  %163  %200 %201
+%203 = OpCompositeConstruct  %26  %14 %14 %14 %14
+%204 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%205 = OpFDiv  %26  %203 %204
+%206 = OpSMod  %8  %18 %7
+%207 = OpUMod  %20  %24 %25
+%208 = OpFRem  %4  %14 %3
+%209 = OpCompositeConstruct  %152  %18 %18
+%210 = OpCompositeConstruct  %152  %7 %7
+%211 = OpSMod  %152  %209 %210
+%212 = OpCompositeConstruct  %163  %24 %24 %24
+%213 = OpCompositeConstruct  %163  %25 %25 %25
+%214 = OpUMod  %163  %212 %213
+%215 = OpCompositeConstruct  %26  %14 %14 %14 %14
+%216 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%217 = OpFRem  %26  %215 %216
+%218 = OpCompositeConstruct  %152  %18 %18
+%219 = OpCompositeConstruct  %152  %7 %7
+%220 = OpIAdd  %152  %218 %219
+%221 = OpCompositeConstruct  %152  %7 %7
+%222 = OpCompositeConstruct  %152  %18 %18
+%223 = OpIAdd  %152  %222 %221
+%224 = OpCompositeConstruct  %34  %24 %24
+%225 = OpCompositeConstruct  %34  %25 %25
+%226 = OpIAdd  %34  %224 %225
+%227 = OpCompositeConstruct  %34  %25 %25
+%228 = OpCompositeConstruct  %34  %24 %24
+%229 = OpIAdd  %34  %228 %227
+%230 = OpCompositeConstruct  %31  %14 %14
+%231 = OpCompositeConstruct  %31  %3 %3
+%232 = OpFAdd  %31  %230 %231
+%233 = OpCompositeConstruct  %31  %3 %3
+%234 = OpCompositeConstruct  %31  %14 %14
+%235 = OpFAdd  %31  %234 %233
+%236 = OpCompositeConstruct  %152  %18 %18
+%237 = OpCompositeConstruct  %152  %7 %7
+%238 = OpISub  %152  %236 %237
+%239 = OpCompositeConstruct  %152  %7 %7
+%240 = OpCompositeConstruct  %152  %18 %18
+%241 = OpISub  %152  %240 %239
+%242 = OpCompositeConstruct  %34  %24 %24
+%243 = OpCompositeConstruct  %34  %25 %25
+%244 = OpISub  %34  %242 %243
+%245 = OpCompositeConstruct  %34  %25 %25
+%246 = OpCompositeConstruct  %34  %24 %24
+%247 = OpISub  %34  %246 %245
+%248 = OpCompositeConstruct  %31  %14 %14
+%249 = OpCompositeConstruct  %31  %3 %3
+%250 = OpFSub  %31  %248 %249
+%251 = OpCompositeConstruct  %31  %3 %3
+%252 = OpCompositeConstruct  %31  %14 %14
+%253 = OpFSub  %31  %252 %251
+%254 = OpCompositeConstruct  %152  %18 %18
+%256 = OpCompositeConstruct  %152  %7 %7
+%255 = OpIMul  %152  %254 %256
+%257 = OpCompositeConstruct  %152  %7 %7
+%259 = OpCompositeConstruct  %152  %18 %18
+%258 = OpIMul  %152  %257 %259
+%260 = OpCompositeConstruct  %34  %24 %24
 %262 = OpCompositeConstruct  %34  %25 %25
-%263 = OpISub  %34  %261 %262
-%264 = OpCompositeConstruct  %34  %25 %25
+%261 = OpIMul  %34  %260 %262
+%263 = OpCompositeConstruct  %34  %25 %25
 %265 = OpCompositeConstruct  %34  %24 %24
-%266 = OpISub  %34  %265 %264
-%267 = OpCompositeConstruct  %31  %14 %14
+%264 = OpIMul  %34  %263 %265
+%266 = OpCompositeConstruct  %31  %14 %14
+%267 = OpVectorTimesScalar  %31  %266 %3
 %268 = OpCompositeConstruct  %31  %3 %3
-%269 = OpFSub  %31  %267 %268
-%270 = OpCompositeConstruct  %31  %3 %3
-%271 = OpCompositeConstruct  %31  %14 %14
-%272 = OpFSub  %31  %271 %270
-%273 = OpCompositeConstruct  %171  %18 %18
-%275 = OpCompositeConstruct  %171  %7 %7
-%274 = OpIMul  %171  %273 %275
-%276 = OpCompositeConstruct  %171  %7 %7
-%278 = OpCompositeConstruct  %171  %18 %18
-%277 = OpIMul  %171  %276 %278
-%279 = OpCompositeConstruct  %34  %24 %24
-%281 = OpCompositeConstruct  %34  %25 %25
-%280 = OpIMul  %34  %279 %281
-%282 = OpCompositeConstruct  %34  %25 %25
-%284 = OpCompositeConstruct  %34  %24 %24
-%283 = OpIMul  %34  %282 %284
-%285 = OpCompositeConstruct  %31  %14 %14
-%286 = OpVectorTimesScalar  %31  %285 %3
-%287 = OpCompositeConstruct  %31  %3 %3
-%288 = OpVectorTimesScalar  %31  %287 %14
-%289 = OpCompositeConstruct  %171  %18 %18
-%290 = OpCompositeConstruct  %171  %7 %7
-%291 = OpSDiv  %171  %289 %290
-%292 = OpCompositeConstruct  %171  %7 %7
-%293 = OpCompositeConstruct  %171  %18 %18
-%294 = OpSDiv  %171  %293 %292
-%295 = OpCompositeConstruct  %34  %24 %24
-%296 = OpCompositeConstruct  %34  %25 %25
-%297 = OpUDiv  %34  %295 %296
-%298 = OpCompositeConstruct  %34  %25 %25
-%299 = OpCompositeConstruct  %34  %24 %24
-%300 = OpUDiv  %34  %299 %298
-%301 = OpCompositeConstruct  %31  %14 %14
-%302 = OpCompositeConstruct  %31  %3 %3
-%303 = OpFDiv  %31  %301 %302
-%304 = OpCompositeConstruct  %31  %3 %3
-%305 = OpCompositeConstruct  %31  %14 %14
-%306 = OpFDiv  %31  %305 %304
-%307 = OpCompositeConstruct  %171  %18 %18
-%308 = OpCompositeConstruct  %171  %7 %7
-%309 = OpSMod  %171  %307 %308
-%310 = OpCompositeConstruct  %171  %7 %7
-%311 = OpCompositeConstruct  %171  %18 %18
-%312 = OpSMod  %171  %311 %310
-%313 = OpCompositeConstruct  %34  %24 %24
-%314 = OpCompositeConstruct  %34  %25 %25
-%315 = OpUMod  %34  %313 %314
-%316 = OpCompositeConstruct  %34  %25 %25
-%317 = OpCompositeConstruct  %34  %24 %24
-%318 = OpUMod  %34  %317 %316
-%319 = OpCompositeConstruct  %31  %14 %14
-%320 = OpCompositeConstruct  %31  %3 %3
-%321 = OpFRem  %31  %319 %320
-%322 = OpCompositeConstruct  %31  %3 %3
-%323 = OpCompositeConstruct  %31  %14 %14
-%324 = OpFRem  %31  %323 %322
-%326 = OpCompositeExtract  %29  %51 0
-%327 = OpCompositeExtract  %29  %51 0
-%328 = OpFAdd  %29  %326 %327
-%329 = OpCompositeExtract  %29  %51 1
-%330 = OpCompositeExtract  %29  %51 1
-%331 = OpFAdd  %29  %329 %330
-%332 = OpCompositeExtract  %29  %51 2
-%333 = OpCompositeExtract  %29  %51 2
-%334 = OpFAdd  %29  %332 %333
-%325 = OpCompositeConstruct  %37  %328 %331 %334
-%336 = OpCompositeExtract  %29  %51 0
-%337 = OpCompositeExtract  %29  %51 0
-%338 = OpFSub  %29  %336 %337
-%339 = OpCompositeExtract  %29  %51 1
-%340 = OpCompositeExtract  %29  %51 1
-%341 = OpFSub  %29  %339 %340
-%342 = OpCompositeExtract  %29  %51 2
-%343 = OpCompositeExtract  %29  %51 2
-%344 = OpFSub  %29  %342 %343
-%335 = OpCompositeConstruct  %37  %338 %341 %344
-%345 = OpMatrixTimesScalar  %37  %51 %3
-%346 = OpMatrixTimesScalar  %37  %51 %14
-%347 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%348 = OpMatrixTimesVector  %29  %52 %347
-%349 = OpCompositeConstruct  %29  %14 %14 %14
-%350 = OpVectorTimesMatrix  %26  %349 %52
-%351 = OpMatrixTimesMatrix  %37  %52 %53
+%269 = OpVectorTimesScalar  %31  %268 %14
+%270 = OpCompositeConstruct  %152  %18 %18
+%271 = OpCompositeConstruct  %152  %7 %7
+%272 = OpSDiv  %152  %270 %271
+%273 = OpCompositeConstruct  %152  %7 %7
+%274 = OpCompositeConstruct  %152  %18 %18
+%275 = OpSDiv  %152  %274 %273
+%276 = OpCompositeConstruct  %34  %24 %24
+%277 = OpCompositeConstruct  %34  %25 %25
+%278 = OpUDiv  %34  %276 %277
+%279 = OpCompositeConstruct  %34  %25 %25
+%280 = OpCompositeConstruct  %34  %24 %24
+%281 = OpUDiv  %34  %280 %279
+%282 = OpCompositeConstruct  %31  %14 %14
+%283 = OpCompositeConstruct  %31  %3 %3
+%284 = OpFDiv  %31  %282 %283
+%285 = OpCompositeConstruct  %31  %3 %3
+%286 = OpCompositeConstruct  %31  %14 %14
+%287 = OpFDiv  %31  %286 %285
+%288 = OpCompositeConstruct  %152  %18 %18
+%289 = OpCompositeConstruct  %152  %7 %7
+%290 = OpSMod  %152  %288 %289
+%291 = OpCompositeConstruct  %152  %7 %7
+%292 = OpCompositeConstruct  %152  %18 %18
+%293 = OpSMod  %152  %292 %291
+%294 = OpCompositeConstruct  %34  %24 %24
+%295 = OpCompositeConstruct  %34  %25 %25
+%296 = OpUMod  %34  %294 %295
+%297 = OpCompositeConstruct  %34  %25 %25
+%298 = OpCompositeConstruct  %34  %24 %24
+%299 = OpUMod  %34  %298 %297
+%300 = OpCompositeConstruct  %31  %14 %14
+%301 = OpCompositeConstruct  %31  %3 %3
+%302 = OpFRem  %31  %300 %301
+%303 = OpCompositeConstruct  %31  %3 %3
+%304 = OpCompositeConstruct  %31  %14 %14
+%305 = OpFRem  %31  %304 %303
+%307 = OpCompositeExtract  %29  %51 0
+%308 = OpCompositeExtract  %29  %51 0
+%309 = OpFAdd  %29  %307 %308
+%310 = OpCompositeExtract  %29  %51 1
+%311 = OpCompositeExtract  %29  %51 1
+%312 = OpFAdd  %29  %310 %311
+%313 = OpCompositeExtract  %29  %51 2
+%314 = OpCompositeExtract  %29  %51 2
+%315 = OpFAdd  %29  %313 %314
+%306 = OpCompositeConstruct  %37  %309 %312 %315
+%317 = OpCompositeExtract  %29  %51 0
+%318 = OpCompositeExtract  %29  %51 0
+%319 = OpFSub  %29  %317 %318
+%320 = OpCompositeExtract  %29  %51 1
+%321 = OpCompositeExtract  %29  %51 1
+%322 = OpFSub  %29  %320 %321
+%323 = OpCompositeExtract  %29  %51 2
+%324 = OpCompositeExtract  %29  %51 2
+%325 = OpFSub  %29  %323 %324
+%316 = OpCompositeConstruct  %37  %319 %322 %325
+%326 = OpMatrixTimesScalar  %37  %51 %3
+%327 = OpMatrixTimesScalar  %37  %51 %14
+%328 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%329 = OpMatrixTimesVector  %29  %52 %328
+%330 = OpCompositeConstruct  %29  %14 %14 %14
+%331 = OpVectorTimesMatrix  %26  %330 %52
+%332 = OpMatrixTimesMatrix  %37  %52 %53
 OpReturn
 OpFunctionEnd
-%353 = OpFunction  %2  None %152
-%352 = OpLabel
-OpBranch %354
-%354 = OpLabel
-%355 = OpNot  %8  %7
-%356 = OpNot  %20  %25
-%357 = OpCompositeConstruct  %171  %7 %7
-%358 = OpNot  %171  %357
-%359 = OpCompositeConstruct  %182  %25 %25 %25
-%360 = OpNot  %182  %359
-%361 = OpBitwiseOr  %8  %18 %7
-%362 = OpBitwiseOr  %20  %24 %25
-%363 = OpCompositeConstruct  %171  %18 %18
-%364 = OpCompositeConstruct  %171  %7 %7
-%365 = OpBitwiseOr  %171  %363 %364
-%366 = OpCompositeConstruct  %182  %24 %24 %24
-%367 = OpCompositeConstruct  %182  %25 %25 %25
-%368 = OpBitwiseOr  %182  %366 %367
-%369 = OpBitwiseAnd  %8  %18 %7
-%370 = OpBitwiseAnd  %20  %24 %25
-%371 = OpCompositeConstruct  %171  %18 %18
-%372 = OpCompositeConstruct  %171  %7 %7
-%373 = OpBitwiseAnd  %171  %371 %372
-%374 = OpCompositeConstruct  %182  %24 %24 %24
-%375 = OpCompositeConstruct  %182  %25 %25 %25
-%376 = OpBitwiseAnd  %182  %374 %375
-%377 = OpBitwiseXor  %8  %18 %7
-%378 = OpBitwiseXor  %20  %24 %25
-%379 = OpCompositeConstruct  %171  %18 %18
-%380 = OpCompositeConstruct  %171  %7 %7
-%381 = OpBitwiseXor  %171  %379 %380
-%382 = OpCompositeConstruct  %182  %24 %24 %24
-%383 = OpCompositeConstruct  %182  %25 %25 %25
-%384 = OpBitwiseXor  %182  %382 %383
-%385 = OpShiftLeftLogical  %8  %18 %25
-%386 = OpShiftLeftLogical  %20  %24 %25
-%387 = OpCompositeConstruct  %171  %18 %18
-%388 = OpCompositeConstruct  %34  %25 %25
-%389 = OpShiftLeftLogical  %171  %387 %388
-%390 = OpCompositeConstruct  %182  %24 %24 %24
-%391 = OpCompositeConstruct  %182  %25 %25 %25
-%392 = OpShiftLeftLogical  %182  %390 %391
-%393 = OpShiftRightArithmetic  %8  %18 %25
-%394 = OpShiftRightLogical  %20  %24 %25
-%395 = OpCompositeConstruct  %171  %18 %18
-%396 = OpCompositeConstruct  %34  %25 %25
-%397 = OpShiftRightArithmetic  %171  %395 %396
-%398 = OpCompositeConstruct  %182  %24 %24 %24
-%399 = OpCompositeConstruct  %182  %25 %25 %25
-%400 = OpShiftRightLogical  %182  %398 %399
+%334 = OpFunction  %2  None %133
+%333 = OpLabel
+OpBranch %335
+%335 = OpLabel
+%336 = OpNot  %8  %7
+%337 = OpNot  %20  %25
+%338 = OpCompositeConstruct  %152  %7 %7
+%339 = OpNot  %152  %338
+%340 = OpCompositeConstruct  %163  %25 %25 %25
+%341 = OpNot  %163  %340
+%342 = OpBitwiseOr  %8  %18 %7
+%343 = OpBitwiseOr  %20  %24 %25
+%344 = OpCompositeConstruct  %152  %18 %18
+%345 = OpCompositeConstruct  %152  %7 %7
+%346 = OpBitwiseOr  %152  %344 %345
+%347 = OpCompositeConstruct  %163  %24 %24 %24
+%348 = OpCompositeConstruct  %163  %25 %25 %25
+%349 = OpBitwiseOr  %163  %347 %348
+%350 = OpBitwiseAnd  %8  %18 %7
+%351 = OpBitwiseAnd  %20  %24 %25
+%352 = OpCompositeConstruct  %152  %18 %18
+%353 = OpCompositeConstruct  %152  %7 %7
+%354 = OpBitwiseAnd  %152  %352 %353
+%355 = OpCompositeConstruct  %163  %24 %24 %24
+%356 = OpCompositeConstruct  %163  %25 %25 %25
+%357 = OpBitwiseAnd  %163  %355 %356
+%358 = OpBitwiseXor  %8  %18 %7
+%359 = OpBitwiseXor  %20  %24 %25
+%360 = OpCompositeConstruct  %152  %18 %18
+%361 = OpCompositeConstruct  %152  %7 %7
+%362 = OpBitwiseXor  %152  %360 %361
+%363 = OpCompositeConstruct  %163  %24 %24 %24
+%364 = OpCompositeConstruct  %163  %25 %25 %25
+%365 = OpBitwiseXor  %163  %363 %364
+%366 = OpShiftLeftLogical  %8  %18 %25
+%367 = OpShiftLeftLogical  %20  %24 %25
+%368 = OpCompositeConstruct  %152  %18 %18
+%369 = OpCompositeConstruct  %34  %25 %25
+%370 = OpShiftLeftLogical  %152  %368 %369
+%371 = OpCompositeConstruct  %163  %24 %24 %24
+%372 = OpCompositeConstruct  %163  %25 %25 %25
+%373 = OpShiftLeftLogical  %163  %371 %372
+%374 = OpShiftRightArithmetic  %8  %18 %25
+%375 = OpShiftRightLogical  %20  %24 %25
+%376 = OpCompositeConstruct  %152  %18 %18
+%377 = OpCompositeConstruct  %34  %25 %25
+%378 = OpShiftRightArithmetic  %152  %376 %377
+%379 = OpCompositeConstruct  %163  %24 %24 %24
+%380 = OpCompositeConstruct  %163  %25 %25 %25
+%381 = OpShiftRightLogical  %163  %379 %380
 OpReturn
 OpFunctionEnd
-%402 = OpFunction  %2  None %152
-%401 = OpLabel
-OpBranch %403
-%403 = OpLabel
-%404 = OpIEqual  %10  %18 %7
-%405 = OpIEqual  %10  %24 %25
-%406 = OpFOrdEqual  %10  %14 %3
-%407 = OpCompositeConstruct  %171  %18 %18
-%408 = OpCompositeConstruct  %171  %7 %7
-%409 = OpIEqual  %155  %407 %408
-%410 = OpCompositeConstruct  %182  %24 %24 %24
-%411 = OpCompositeConstruct  %182  %25 %25 %25
-%412 = OpIEqual  %100  %410 %411
-%413 = OpCompositeConstruct  %26  %14 %14 %14 %14
-%414 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%415 = OpFOrdEqual  %28  %413 %414
-%416 = OpINotEqual  %10  %18 %7
-%417 = OpINotEqual  %10  %24 %25
-%418 = OpFOrdNotEqual  %10  %14 %3
-%419 = OpCompositeConstruct  %171  %18 %18
-%420 = OpCompositeConstruct  %171  %7 %7
-%421 = OpINotEqual  %155  %419 %420
-%422 = OpCompositeConstruct  %182  %24 %24 %24
-%423 = OpCompositeConstruct  %182  %25 %25 %25
-%424 = OpINotEqual  %100  %422 %423
-%425 = OpCompositeConstruct  %26  %14 %14 %14 %14
-%426 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%427 = OpFOrdNotEqual  %28  %425 %426
-%428 = OpSLessThan  %10  %18 %7
-%429 = OpULessThan  %10  %24 %25
-%430 = OpFOrdLessThan  %10  %14 %3
-%431 = OpCompositeConstruct  %171  %18 %18
-%432 = OpCompositeConstruct  %171  %7 %7
-%433 = OpSLessThan  %155  %431 %432
-%434 = OpCompositeConstruct  %182  %24 %24 %24
-%435 = OpCompositeConstruct  %182  %25 %25 %25
-%436 = OpULessThan  %100  %434 %435
-%437 = OpCompositeConstruct  %26  %14 %14 %14 %14
-%438 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%439 = OpFOrdLessThan  %28  %437 %438
-%440 = OpSLessThanEqual  %10  %18 %7
-%441 = OpULessThanEqual  %10  %24 %25
-%442 = OpFOrdLessThanEqual  %10  %14 %3
-%443 = OpCompositeConstruct  %171  %18 %18
-%444 = OpCompositeConstruct  %171  %7 %7
-%445 = OpSLessThanEqual  %155  %443 %444
-%446 = OpCompositeConstruct  %182  %24 %24 %24
-%447 = OpCompositeConstruct  %182  %25 %25 %25
-%448 = OpULessThanEqual  %100  %446 %447
-%449 = OpCompositeConstruct  %26  %14 %14 %14 %14
-%450 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%451 = OpFOrdLessThanEqual  %28  %449 %450
-%452 = OpSGreaterThan  %10  %18 %7
-%453 = OpUGreaterThan  %10  %24 %25
-%454 = OpFOrdGreaterThan  %10  %14 %3
-%455 = OpCompositeConstruct  %171  %18 %18
-%456 = OpCompositeConstruct  %171  %7 %7
-%457 = OpSGreaterThan  %155  %455 %456
-%458 = OpCompositeConstruct  %182  %24 %24 %24
-%459 = OpCompositeConstruct  %182  %25 %25 %25
-%460 = OpUGreaterThan  %100  %458 %459
-%461 = OpCompositeConstruct  %26  %14 %14 %14 %14
-%462 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%463 = OpFOrdGreaterThan  %28  %461 %462
-%464 = OpSGreaterThanEqual  %10  %18 %7
-%465 = OpUGreaterThanEqual  %10  %24 %25
-%466 = OpFOrdGreaterThanEqual  %10  %14 %3
-%467 = OpCompositeConstruct  %171  %18 %18
-%468 = OpCompositeConstruct  %171  %7 %7
-%469 = OpSGreaterThanEqual  %155  %467 %468
-%470 = OpCompositeConstruct  %182  %24 %24 %24
-%471 = OpCompositeConstruct  %182  %25 %25 %25
-%472 = OpUGreaterThanEqual  %100  %470 %471
-%473 = OpCompositeConstruct  %26  %14 %14 %14 %14
-%474 = OpCompositeConstruct  %26  %3 %3 %3 %3
-%475 = OpFOrdGreaterThanEqual  %28  %473 %474
+%383 = OpFunction  %2  None %133
+%382 = OpLabel
+OpBranch %384
+%384 = OpLabel
+%385 = OpIEqual  %10  %18 %7
+%386 = OpIEqual  %10  %24 %25
+%387 = OpFOrdEqual  %10  %14 %3
+%388 = OpCompositeConstruct  %152  %18 %18
+%389 = OpCompositeConstruct  %152  %7 %7
+%390 = OpIEqual  %136  %388 %389
+%391 = OpCompositeConstruct  %163  %24 %24 %24
+%392 = OpCompositeConstruct  %163  %25 %25 %25
+%393 = OpIEqual  %100  %391 %392
+%394 = OpCompositeConstruct  %26  %14 %14 %14 %14
+%395 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%396 = OpFOrdEqual  %28  %394 %395
+%397 = OpINotEqual  %10  %18 %7
+%398 = OpINotEqual  %10  %24 %25
+%399 = OpFOrdNotEqual  %10  %14 %3
+%400 = OpCompositeConstruct  %152  %18 %18
+%401 = OpCompositeConstruct  %152  %7 %7
+%402 = OpINotEqual  %136  %400 %401
+%403 = OpCompositeConstruct  %163  %24 %24 %24
+%404 = OpCompositeConstruct  %163  %25 %25 %25
+%405 = OpINotEqual  %100  %403 %404
+%406 = OpCompositeConstruct  %26  %14 %14 %14 %14
+%407 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%408 = OpFOrdNotEqual  %28  %406 %407
+%409 = OpSLessThan  %10  %18 %7
+%410 = OpULessThan  %10  %24 %25
+%411 = OpFOrdLessThan  %10  %14 %3
+%412 = OpCompositeConstruct  %152  %18 %18
+%413 = OpCompositeConstruct  %152  %7 %7
+%414 = OpSLessThan  %136  %412 %413
+%415 = OpCompositeConstruct  %163  %24 %24 %24
+%416 = OpCompositeConstruct  %163  %25 %25 %25
+%417 = OpULessThan  %100  %415 %416
+%418 = OpCompositeConstruct  %26  %14 %14 %14 %14
+%419 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%420 = OpFOrdLessThan  %28  %418 %419
+%421 = OpSLessThanEqual  %10  %18 %7
+%422 = OpULessThanEqual  %10  %24 %25
+%423 = OpFOrdLessThanEqual  %10  %14 %3
+%424 = OpCompositeConstruct  %152  %18 %18
+%425 = OpCompositeConstruct  %152  %7 %7
+%426 = OpSLessThanEqual  %136  %424 %425
+%427 = OpCompositeConstruct  %163  %24 %24 %24
+%428 = OpCompositeConstruct  %163  %25 %25 %25
+%429 = OpULessThanEqual  %100  %427 %428
+%430 = OpCompositeConstruct  %26  %14 %14 %14 %14
+%431 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%432 = OpFOrdLessThanEqual  %28  %430 %431
+%433 = OpSGreaterThan  %10  %18 %7
+%434 = OpUGreaterThan  %10  %24 %25
+%435 = OpFOrdGreaterThan  %10  %14 %3
+%436 = OpCompositeConstruct  %152  %18 %18
+%437 = OpCompositeConstruct  %152  %7 %7
+%438 = OpSGreaterThan  %136  %436 %437
+%439 = OpCompositeConstruct  %163  %24 %24 %24
+%440 = OpCompositeConstruct  %163  %25 %25 %25
+%441 = OpUGreaterThan  %100  %439 %440
+%442 = OpCompositeConstruct  %26  %14 %14 %14 %14
+%443 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%444 = OpFOrdGreaterThan  %28  %442 %443
+%445 = OpSGreaterThanEqual  %10  %18 %7
+%446 = OpUGreaterThanEqual  %10  %24 %25
+%447 = OpFOrdGreaterThanEqual  %10  %14 %3
+%448 = OpCompositeConstruct  %152  %18 %18
+%449 = OpCompositeConstruct  %152  %7 %7
+%450 = OpSGreaterThanEqual  %136  %448 %449
+%451 = OpCompositeConstruct  %163  %24 %24 %24
+%452 = OpCompositeConstruct  %163  %25 %25 %25
+%453 = OpUGreaterThanEqual  %100  %451 %452
+%454 = OpCompositeConstruct  %26  %14 %14 %14 %14
+%455 = OpCompositeConstruct  %26  %3 %3 %3 %3
+%456 = OpFOrdGreaterThanEqual  %28  %454 %455
 OpReturn
 OpFunctionEnd
-%478 = OpFunction  %2  None %152
-%477 = OpLabel
-%476 = OpVariable  %111  Function %7
-OpBranch %479
-%479 = OpLabel
-%480 = OpLoad  %8  %476
-%481 = OpIAdd  %8  %480 %7
-OpStore %476 %481
-%482 = OpLoad  %8  %476
-%483 = OpISub  %8  %482 %7
-OpStore %476 %483
-%484 = OpLoad  %8  %476
-%485 = OpLoad  %8  %476
-%486 = OpIMul  %8  %484 %485
-OpStore %476 %486
-%487 = OpLoad  %8  %476
-%488 = OpLoad  %8  %476
-%489 = OpSDiv  %8  %487 %488
-OpStore %476 %489
-%490 = OpLoad  %8  %476
-%491 = OpSMod  %8  %490 %7
-OpStore %476 %491
-%492 = OpLoad  %8  %476
-%493 = OpBitwiseAnd  %8  %492 %11
-OpStore %476 %493
-%494 = OpLoad  %8  %476
-%495 = OpBitwiseOr  %8  %494 %11
-OpStore %476 %495
-%496 = OpLoad  %8  %476
-%497 = OpBitwiseXor  %8  %496 %11
-OpStore %476 %497
-%498 = OpLoad  %8  %476
-%499 = OpShiftLeftLogical  %8  %498 %24
-OpStore %476 %499
-%500 = OpLoad  %8  %476
-%501 = OpShiftRightArithmetic  %8  %500 %25
-OpStore %476 %501
-%502 = OpLoad  %8  %476
-%503 = OpIAdd  %8  %502 %7
-OpStore %476 %503
-%504 = OpLoad  %8  %476
-%505 = OpISub  %8  %504 %7
-OpStore %476 %505
+%460 = OpFunction  %2  None %133
+%459 = OpLabel
+%457 = OpVariable  %458  Function %7
+OpBranch %461
+%461 = OpLabel
+%462 = OpLoad  %8  %457
+%463 = OpIAdd  %8  %462 %7
+OpStore %457 %463
+%464 = OpLoad  %8  %457
+%465 = OpISub  %8  %464 %7
+OpStore %457 %465
+%466 = OpLoad  %8  %457
+%467 = OpLoad  %8  %457
+%468 = OpIMul  %8  %466 %467
+OpStore %457 %468
+%469 = OpLoad  %8  %457
+%470 = OpLoad  %8  %457
+%471 = OpSDiv  %8  %469 %470
+OpStore %457 %471
+%472 = OpLoad  %8  %457
+%473 = OpSMod  %8  %472 %7
+OpStore %457 %473
+%474 = OpLoad  %8  %457
+%475 = OpBitwiseAnd  %8  %474 %11
+OpStore %457 %475
+%476 = OpLoad  %8  %457
+%477 = OpBitwiseOr  %8  %476 %11
+OpStore %457 %477
+%478 = OpLoad  %8  %457
+%479 = OpBitwiseXor  %8  %478 %11
+OpStore %457 %479
+%480 = OpLoad  %8  %457
+%481 = OpShiftLeftLogical  %8  %480 %24
+OpStore %457 %481
+%482 = OpLoad  %8  %457
+%483 = OpShiftRightArithmetic  %8  %482 %25
+OpStore %457 %483
+%484 = OpLoad  %8  %457
+%485 = OpIAdd  %8  %484 %7
+OpStore %457 %485
+%486 = OpLoad  %8  %457
+%487 = OpISub  %8  %486 %7
+OpStore %457 %487
 OpReturn
 OpFunctionEnd
-%507 = OpFunction  %2  None %152
-%506 = OpLabel
-OpBranch %508
-%508 = OpLabel
-%509 = OpFunctionCall  %26  %55
-%510 = OpFunctionCall  %26  %80
-%511 = OpVectorShuffle  %29  %40 %40 0 1 2
-%512 = OpFunctionCall  %29  %97 %511
-%513 = OpFunctionCall  %4  %128
-%514 = OpFunctionCall  %2  %151
-%515 = OpFunctionCall  %2  %169
-%516 = OpFunctionCall  %2  %353
-%517 = OpFunctionCall  %2  %402
-%518 = OpFunctionCall  %2  %478
+%489 = OpFunction  %2  None %133
+%488 = OpLabel
+OpBranch %490
+%490 = OpLabel
+%491 = OpFunctionCall  %26  %55
+%492 = OpFunctionCall  %26  %80
+%493 = OpVectorShuffle  %29  %40 %40 0 1 2
+%494 = OpFunctionCall  %29  %97 %493
+%495 = OpFunctionCall  %4  %109
+%496 = OpFunctionCall  %2  %132
+%497 = OpFunctionCall  %2  %150
+%498 = OpFunctionCall  %2  %334
+%499 = OpFunctionCall  %2  %383
+%500 = OpFunctionCall  %2  %460
 OpReturn
 OpFunctionEnd
\ No newline at end of file
diff --git a/tests/out/wgsl/access.wgsl b/tests/out/wgsl/access.wgsl
index 0fd4b7fd3a..98d53fb9ba 100644
--- a/tests/out/wgsl/access.wgsl
+++ b/tests/out/wgsl/access.wgsl
@@ -21,51 +21,37 @@ var<uniform> baz: Baz;
 
 fn test_matrix_within_struct_accesses() {
     var idx: i32 = 9;
-    var unnamed_1: mat3x2<f32>;
-    var unnamed_2: vec2<f32>;
-    var unnamed_3: vec2<f32>;
-    var unnamed_4: f32;
-    var unnamed_5: f32;
-    var unnamed_6: f32;
-    var unnamed_7: f32;
     var t: Baz;
 
     let _e4 = idx;
     idx = (_e4 - 1);
-    let _e8 = baz.m;
-    unnamed_1 = _e8;
-    let _e13 = baz.m[0];
-    unnamed_2 = _e13;
-    let _e16 = idx;
-    let _e18 = baz.m[_e16];
-    unnamed_3 = _e18;
-    let _e25 = baz.m[0][1];
-    unnamed_4 = _e25;
+    let unnamed = baz.m;
+    let unnamed_1 = baz.m[0];
+    let _e14 = idx;
+    let unnamed_2 = baz.m[_e14];
+    let unnamed_3 = baz.m[0][1];
+    let _e26 = idx;
+    let unnamed_4 = baz.m[0][_e26];
     let _e30 = idx;
-    let _e32 = baz.m[0][_e30];
-    unnamed_5 = _e32;
-    let _e35 = idx;
-    let _e39 = baz.m[_e35][1];
-    unnamed_6 = _e39;
-    let _e42 = idx;
-    let _e44 = idx;
-    let _e46 = baz.m[_e42][_e44];
-    unnamed_7 = _e46;
+    let unnamed_5 = baz.m[_e30][1];
+    let _e36 = idx;
+    let _e38 = idx;
+    let unnamed_6 = baz.m[_e36][_e38];
     t = Baz(mat3x2<f32>(vec2<f32>(1.0), vec2<f32>(2.0), vec2<f32>(3.0)));
-    let _e57 = idx;
-    idx = (_e57 + 1);
+    let _e50 = idx;
+    idx = (_e50 + 1);
     t.m = mat3x2<f32>(vec2<f32>(6.0), vec2<f32>(5.0), vec2<f32>(4.0));
     t.m[0] = vec2<f32>(9.0);
-    let _e74 = idx;
-    t.m[_e74] = vec2<f32>(90.0);
+    let _e67 = idx;
+    t.m[_e67] = vec2<f32>(90.0);
     t.m[0][1] = 10.0;
-    let _e87 = idx;
-    t.m[0][_e87] = 20.0;
-    let _e91 = idx;
-    t.m[_e91][1] = 30.0;
-    let _e97 = idx;
-    let _e99 = idx;
-    t.m[_e97][_e99] = 40.0;
+    let _e80 = idx;
+    t.m[0][_e80] = 20.0;
+    let _e84 = idx;
+    t.m[_e84][1] = 30.0;
+    let _e90 = idx;
+    let _e92 = idx;
+    t.m[_e90][_e92] = 40.0;
     return;
 }
 
@@ -82,7 +68,6 @@ fn test_arr_as_arg(a: array<array<f32,10>,5>) -> f32 {
 fn foo_vert(@builtin(vertex_index) vi: u32) -> @builtin(position) vec4<f32> {
     var foo: f32 = 0.0;
     var c: array<i32,5>;
-    var unnamed: f32;
 
     let baz_1 = foo;
     foo = 1.0;
@@ -97,7 +82,6 @@ fn foo_vert(@builtin(vertex_index) vi: u32) -> @builtin(position) vec4<f32> {
     c[(vi + 1u)] = 42;
     let value = c[vi];
     let _e42 = test_arr_as_arg(array<array<f32,10>,5>(array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), array<f32,10>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)));
-    unnamed = _e42;
     return vec4<f32>((_matrix * vec4<f32>(vec4<i32>(value))), 2.0);
 }
 
diff --git a/tests/out/wgsl/operators.wgsl b/tests/out/wgsl/operators.wgsl
index 19660d36d4..f9144dd772 100644
--- a/tests/out/wgsl/operators.wgsl
+++ b/tests/out/wgsl/operators.wgsl
@@ -32,175 +32,164 @@ fn bool_cast(x: vec3<f32>) -> vec3<f32> {
 
 fn constructors() -> f32 {
     var foo: Foo;
-    var unnamed: bool = false;
-    var unnamed_1: i32 = 0;
-    var unnamed_2: u32 = 0u;
-    var unnamed_3: f32 = 0.0;
-    var unnamed_4: vec2<u32> = vec2<u32>(0u, 0u);
-    var unnamed_5: mat2x2<f32> = mat2x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-    var unnamed_6: array<Foo,3> = array<Foo,3>(Foo(vec4<f32>(0.0, 0.0, 0.0, 0.0), 0), Foo(vec4<f32>(0.0, 0.0, 0.0, 0.0), 0), Foo(vec4<f32>(0.0, 0.0, 0.0, 0.0), 0));
-    var unnamed_7: Foo = Foo(vec4<f32>(0.0, 0.0, 0.0, 0.0), 0);
-    var unnamed_8: vec2<u32>;
-    var unnamed_9: mat2x2<f32>;
-    var unnamed_10: array<i32,4u>;
 
     foo = Foo(vec4<f32>(1.0), 1);
     let mat2comp = mat2x2<f32>(vec2<f32>(1.0, 0.0), vec2<f32>(0.0, 1.0));
     let mat4comp = mat4x4<f32>(vec4<f32>(1.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 1.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 1.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 1.0));
-    unnamed_8 = vec2<u32>(0u);
-    unnamed_9 = mat2x2<f32>(vec2<f32>(0.0), vec2<f32>(0.0));
-    unnamed_10 = array<i32,4u>(0, 1, 2, 3);
-    let _e70 = foo.a.x;
-    return _e70;
+    let unnamed = vec2<u32>(0u);
+    let unnamed_1 = mat2x2<f32>(vec2<f32>(0.0), vec2<f32>(0.0));
+    let unnamed_2 = array<i32,4u>(0, 1, 2, 3);
+    let _e59 = foo.a.x;
+    return _e59;
 }
 
 fn logical() {
-    let unnamed_11 = !(true);
-    let unnamed_12 = !(vec2<bool>(true));
-    let unnamed_13 = (true || false);
-    let unnamed_14 = (true && false);
-    let unnamed_15 = (true | false);
-    let unnamed_16 = (vec3<bool>(true) | vec3<bool>(false));
-    let unnamed_17 = (true & false);
-    let unnamed_18 = (vec4<bool>(true) & vec4<bool>(false));
+    let unnamed_3 = !(true);
+    let unnamed_4 = !(vec2<bool>(true));
+    let unnamed_5 = (true || false);
+    let unnamed_6 = (true && false);
+    let unnamed_7 = (true | false);
+    let unnamed_8 = (vec3<bool>(true) | vec3<bool>(false));
+    let unnamed_9 = (true & false);
+    let unnamed_10 = (vec4<bool>(true) & vec4<bool>(false));
 }
 
 fn arithmetic() {
-    let unnamed_19 = -(vec2<i32>(1));
-    let unnamed_20 = -(vec2<f32>(1.0));
-    let unnamed_21 = (2 + 1);
-    let unnamed_22 = (2u + 1u);
-    let unnamed_23 = (2.0 + 1.0);
-    let unnamed_24 = (vec2<i32>(2) + vec2<i32>(1));
-    let unnamed_25 = (vec3<u32>(2u) + vec3<u32>(1u));
-    let unnamed_26 = (vec4<f32>(2.0) + vec4<f32>(1.0));
-    let unnamed_27 = (2 - 1);
-    let unnamed_28 = (2u - 1u);
-    let unnamed_29 = (2.0 - 1.0);
-    let unnamed_30 = (vec2<i32>(2) - vec2<i32>(1));
-    let unnamed_31 = (vec3<u32>(2u) - vec3<u32>(1u));
-    let unnamed_32 = (vec4<f32>(2.0) - vec4<f32>(1.0));
-    let unnamed_33 = (2 * 1);
-    let unnamed_34 = (2u * 1u);
-    let unnamed_35 = (2.0 * 1.0);
-    let unnamed_36 = (vec2<i32>(2) * vec2<i32>(1));
-    let unnamed_37 = (vec3<u32>(2u) * vec3<u32>(1u));
-    let unnamed_38 = (vec4<f32>(2.0) * vec4<f32>(1.0));
-    let unnamed_39 = (2 / 1);
-    let unnamed_40 = (2u / 1u);
-    let unnamed_41 = (2.0 / 1.0);
-    let unnamed_42 = (vec2<i32>(2) / vec2<i32>(1));
-    let unnamed_43 = (vec3<u32>(2u) / vec3<u32>(1u));
-    let unnamed_44 = (vec4<f32>(2.0) / vec4<f32>(1.0));
-    let unnamed_45 = (2 % 1);
-    let unnamed_46 = (2u % 1u);
-    let unnamed_47 = (2.0 % 1.0);
-    let unnamed_48 = (vec2<i32>(2) % vec2<i32>(1));
-    let unnamed_49 = (vec3<u32>(2u) % vec3<u32>(1u));
-    let unnamed_50 = (vec4<f32>(2.0) % vec4<f32>(1.0));
-    let unnamed_51 = (vec2<i32>(2) + vec2<i32>(1));
-    let unnamed_52 = (vec2<i32>(2) + vec2<i32>(1));
-    let unnamed_53 = (vec2<u32>(2u) + vec2<u32>(1u));
-    let unnamed_54 = (vec2<u32>(2u) + vec2<u32>(1u));
-    let unnamed_55 = (vec2<f32>(2.0) + vec2<f32>(1.0));
-    let unnamed_56 = (vec2<f32>(2.0) + vec2<f32>(1.0));
-    let unnamed_57 = (vec2<i32>(2) - vec2<i32>(1));
-    let unnamed_58 = (vec2<i32>(2) - vec2<i32>(1));
-    let unnamed_59 = (vec2<u32>(2u) - vec2<u32>(1u));
-    let unnamed_60 = (vec2<u32>(2u) - vec2<u32>(1u));
-    let unnamed_61 = (vec2<f32>(2.0) - vec2<f32>(1.0));
-    let unnamed_62 = (vec2<f32>(2.0) - vec2<f32>(1.0));
-    let unnamed_63 = (vec2<i32>(2) * 1);
-    let unnamed_64 = (2 * vec2<i32>(1));
-    let unnamed_65 = (vec2<u32>(2u) * 1u);
-    let unnamed_66 = (2u * vec2<u32>(1u));
-    let unnamed_67 = (vec2<f32>(2.0) * 1.0);
-    let unnamed_68 = (2.0 * vec2<f32>(1.0));
-    let unnamed_69 = (vec2<i32>(2) / vec2<i32>(1));
-    let unnamed_70 = (vec2<i32>(2) / vec2<i32>(1));
-    let unnamed_71 = (vec2<u32>(2u) / vec2<u32>(1u));
-    let unnamed_72 = (vec2<u32>(2u) / vec2<u32>(1u));
-    let unnamed_73 = (vec2<f32>(2.0) / vec2<f32>(1.0));
-    let unnamed_74 = (vec2<f32>(2.0) / vec2<f32>(1.0));
-    let unnamed_75 = (vec2<i32>(2) % vec2<i32>(1));
-    let unnamed_76 = (vec2<i32>(2) % vec2<i32>(1));
-    let unnamed_77 = (vec2<u32>(2u) % vec2<u32>(1u));
-    let unnamed_78 = (vec2<u32>(2u) % vec2<u32>(1u));
-    let unnamed_79 = (vec2<f32>(2.0) % vec2<f32>(1.0));
-    let unnamed_80 = (vec2<f32>(2.0) % vec2<f32>(1.0));
-    let unnamed_81 = (mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)) + mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
-    let unnamed_82 = (mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)) - mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
-    let unnamed_83 = (mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)) * 1.0);
-    let unnamed_84 = (2.0 * mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
-    let unnamed_85 = (mat4x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)) * vec4<f32>(1.0));
-    let unnamed_86 = (vec3<f32>(2.0) * mat4x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
-    let unnamed_87 = (mat4x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)) * mat3x4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0)));
+    let unnamed_11 = -(vec2<i32>(1));
+    let unnamed_12 = -(vec2<f32>(1.0));
+    let unnamed_13 = (2 + 1);
+    let unnamed_14 = (2u + 1u);
+    let unnamed_15 = (2.0 + 1.0);
+    let unnamed_16 = (vec2<i32>(2) + vec2<i32>(1));
+    let unnamed_17 = (vec3<u32>(2u) + vec3<u32>(1u));
+    let unnamed_18 = (vec4<f32>(2.0) + vec4<f32>(1.0));
+    let unnamed_19 = (2 - 1);
+    let unnamed_20 = (2u - 1u);
+    let unnamed_21 = (2.0 - 1.0);
+    let unnamed_22 = (vec2<i32>(2) - vec2<i32>(1));
+    let unnamed_23 = (vec3<u32>(2u) - vec3<u32>(1u));
+    let unnamed_24 = (vec4<f32>(2.0) - vec4<f32>(1.0));
+    let unnamed_25 = (2 * 1);
+    let unnamed_26 = (2u * 1u);
+    let unnamed_27 = (2.0 * 1.0);
+    let unnamed_28 = (vec2<i32>(2) * vec2<i32>(1));
+    let unnamed_29 = (vec3<u32>(2u) * vec3<u32>(1u));
+    let unnamed_30 = (vec4<f32>(2.0) * vec4<f32>(1.0));
+    let unnamed_31 = (2 / 1);
+    let unnamed_32 = (2u / 1u);
+    let unnamed_33 = (2.0 / 1.0);
+    let unnamed_34 = (vec2<i32>(2) / vec2<i32>(1));
+    let unnamed_35 = (vec3<u32>(2u) / vec3<u32>(1u));
+    let unnamed_36 = (vec4<f32>(2.0) / vec4<f32>(1.0));
+    let unnamed_37 = (2 % 1);
+    let unnamed_38 = (2u % 1u);
+    let unnamed_39 = (2.0 % 1.0);
+    let unnamed_40 = (vec2<i32>(2) % vec2<i32>(1));
+    let unnamed_41 = (vec3<u32>(2u) % vec3<u32>(1u));
+    let unnamed_42 = (vec4<f32>(2.0) % vec4<f32>(1.0));
+    let unnamed_43 = (vec2<i32>(2) + vec2<i32>(1));
+    let unnamed_44 = (vec2<i32>(2) + vec2<i32>(1));
+    let unnamed_45 = (vec2<u32>(2u) + vec2<u32>(1u));
+    let unnamed_46 = (vec2<u32>(2u) + vec2<u32>(1u));
+    let unnamed_47 = (vec2<f32>(2.0) + vec2<f32>(1.0));
+    let unnamed_48 = (vec2<f32>(2.0) + vec2<f32>(1.0));
+    let unnamed_49 = (vec2<i32>(2) - vec2<i32>(1));
+    let unnamed_50 = (vec2<i32>(2) - vec2<i32>(1));
+    let unnamed_51 = (vec2<u32>(2u) - vec2<u32>(1u));
+    let unnamed_52 = (vec2<u32>(2u) - vec2<u32>(1u));
+    let unnamed_53 = (vec2<f32>(2.0) - vec2<f32>(1.0));
+    let unnamed_54 = (vec2<f32>(2.0) - vec2<f32>(1.0));
+    let unnamed_55 = (vec2<i32>(2) * 1);
+    let unnamed_56 = (2 * vec2<i32>(1));
+    let unnamed_57 = (vec2<u32>(2u) * 1u);
+    let unnamed_58 = (2u * vec2<u32>(1u));
+    let unnamed_59 = (vec2<f32>(2.0) * 1.0);
+    let unnamed_60 = (2.0 * vec2<f32>(1.0));
+    let unnamed_61 = (vec2<i32>(2) / vec2<i32>(1));
+    let unnamed_62 = (vec2<i32>(2) / vec2<i32>(1));
+    let unnamed_63 = (vec2<u32>(2u) / vec2<u32>(1u));
+    let unnamed_64 = (vec2<u32>(2u) / vec2<u32>(1u));
+    let unnamed_65 = (vec2<f32>(2.0) / vec2<f32>(1.0));
+    let unnamed_66 = (vec2<f32>(2.0) / vec2<f32>(1.0));
+    let unnamed_67 = (vec2<i32>(2) % vec2<i32>(1));
+    let unnamed_68 = (vec2<i32>(2) % vec2<i32>(1));
+    let unnamed_69 = (vec2<u32>(2u) % vec2<u32>(1u));
+    let unnamed_70 = (vec2<u32>(2u) % vec2<u32>(1u));
+    let unnamed_71 = (vec2<f32>(2.0) % vec2<f32>(1.0));
+    let unnamed_72 = (vec2<f32>(2.0) % vec2<f32>(1.0));
+    let unnamed_73 = (mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)) + mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
+    let unnamed_74 = (mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)) - mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
+    let unnamed_75 = (mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)) * 1.0);
+    let unnamed_76 = (2.0 * mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
+    let unnamed_77 = (mat4x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)) * vec4<f32>(1.0));
+    let unnamed_78 = (vec3<f32>(2.0) * mat4x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
+    let unnamed_79 = (mat4x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)) * mat3x4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0)));
 }
 
 fn bit() {
-    let unnamed_88 = ~(1);
-    let unnamed_89 = ~(1u);
-    let unnamed_90 = !(vec2<i32>(1));
-    let unnamed_91 = !(vec3<u32>(1u));
-    let unnamed_92 = (2 | 1);
-    let unnamed_93 = (2u | 1u);
-    let unnamed_94 = (vec2<i32>(2) | vec2<i32>(1));
-    let unnamed_95 = (vec3<u32>(2u) | vec3<u32>(1u));
-    let unnamed_96 = (2 & 1);
-    let unnamed_97 = (2u & 1u);
-    let unnamed_98 = (vec2<i32>(2) & vec2<i32>(1));
-    let unnamed_99 = (vec3<u32>(2u) & vec3<u32>(1u));
-    let unnamed_100 = (2 ^ 1);
-    let unnamed_101 = (2u ^ 1u);
-    let unnamed_102 = (vec2<i32>(2) ^ vec2<i32>(1));
-    let unnamed_103 = (vec3<u32>(2u) ^ vec3<u32>(1u));
-    let unnamed_104 = (2 << 1u);
-    let unnamed_105 = (2u << 1u);
-    let unnamed_106 = (vec2<i32>(2) << vec2<u32>(1u));
-    let unnamed_107 = (vec3<u32>(2u) << vec3<u32>(1u));
-    let unnamed_108 = (2 >> 1u);
-    let unnamed_109 = (2u >> 1u);
-    let unnamed_110 = (vec2<i32>(2) >> vec2<u32>(1u));
-    let unnamed_111 = (vec3<u32>(2u) >> vec3<u32>(1u));
+    let unnamed_80 = ~(1);
+    let unnamed_81 = ~(1u);
+    let unnamed_82 = !(vec2<i32>(1));
+    let unnamed_83 = !(vec3<u32>(1u));
+    let unnamed_84 = (2 | 1);
+    let unnamed_85 = (2u | 1u);
+    let unnamed_86 = (vec2<i32>(2) | vec2<i32>(1));
+    let unnamed_87 = (vec3<u32>(2u) | vec3<u32>(1u));
+    let unnamed_88 = (2 & 1);
+    let unnamed_89 = (2u & 1u);
+    let unnamed_90 = (vec2<i32>(2) & vec2<i32>(1));
+    let unnamed_91 = (vec3<u32>(2u) & vec3<u32>(1u));
+    let unnamed_92 = (2 ^ 1);
+    let unnamed_93 = (2u ^ 1u);
+    let unnamed_94 = (vec2<i32>(2) ^ vec2<i32>(1));
+    let unnamed_95 = (vec3<u32>(2u) ^ vec3<u32>(1u));
+    let unnamed_96 = (2 << 1u);
+    let unnamed_97 = (2u << 1u);
+    let unnamed_98 = (vec2<i32>(2) << vec2<u32>(1u));
+    let unnamed_99 = (vec3<u32>(2u) << vec3<u32>(1u));
+    let unnamed_100 = (2 >> 1u);
+    let unnamed_101 = (2u >> 1u);
+    let unnamed_102 = (vec2<i32>(2) >> vec2<u32>(1u));
+    let unnamed_103 = (vec3<u32>(2u) >> vec3<u32>(1u));
 }
 
 fn comparison() {
-    let unnamed_112 = (2 == 1);
-    let unnamed_113 = (2u == 1u);
-    let unnamed_114 = (2.0 == 1.0);
-    let unnamed_115 = (vec2<i32>(2) == vec2<i32>(1));
-    let unnamed_116 = (vec3<u32>(2u) == vec3<u32>(1u));
-    let unnamed_117 = (vec4<f32>(2.0) == vec4<f32>(1.0));
-    let unnamed_118 = (2 != 1);
-    let unnamed_119 = (2u != 1u);
-    let unnamed_120 = (2.0 != 1.0);
-    let unnamed_121 = (vec2<i32>(2) != vec2<i32>(1));
-    let unnamed_122 = (vec3<u32>(2u) != vec3<u32>(1u));
-    let unnamed_123 = (vec4<f32>(2.0) != vec4<f32>(1.0));
-    let unnamed_124 = (2 < 1);
-    let unnamed_125 = (2u < 1u);
-    let unnamed_126 = (2.0 < 1.0);
-    let unnamed_127 = (vec2<i32>(2) < vec2<i32>(1));
-    let unnamed_128 = (vec3<u32>(2u) < vec3<u32>(1u));
-    let unnamed_129 = (vec4<f32>(2.0) < vec4<f32>(1.0));
-    let unnamed_130 = (2 <= 1);
-    let unnamed_131 = (2u <= 1u);
-    let unnamed_132 = (2.0 <= 1.0);
-    let unnamed_133 = (vec2<i32>(2) <= vec2<i32>(1));
-    let unnamed_134 = (vec3<u32>(2u) <= vec3<u32>(1u));
-    let unnamed_135 = (vec4<f32>(2.0) <= vec4<f32>(1.0));
-    let unnamed_136 = (2 > 1);
-    let unnamed_137 = (2u > 1u);
-    let unnamed_138 = (2.0 > 1.0);
-    let unnamed_139 = (vec2<i32>(2) > vec2<i32>(1));
-    let unnamed_140 = (vec3<u32>(2u) > vec3<u32>(1u));
-    let unnamed_141 = (vec4<f32>(2.0) > vec4<f32>(1.0));
-    let unnamed_142 = (2 >= 1);
-    let unnamed_143 = (2u >= 1u);
-    let unnamed_144 = (2.0 >= 1.0);
-    let unnamed_145 = (vec2<i32>(2) >= vec2<i32>(1));
-    let unnamed_146 = (vec3<u32>(2u) >= vec3<u32>(1u));
-    let unnamed_147 = (vec4<f32>(2.0) >= vec4<f32>(1.0));
+    let unnamed_104 = (2 == 1);
+    let unnamed_105 = (2u == 1u);
+    let unnamed_106 = (2.0 == 1.0);
+    let unnamed_107 = (vec2<i32>(2) == vec2<i32>(1));
+    let unnamed_108 = (vec3<u32>(2u) == vec3<u32>(1u));
+    let unnamed_109 = (vec4<f32>(2.0) == vec4<f32>(1.0));
+    let unnamed_110 = (2 != 1);
+    let unnamed_111 = (2u != 1u);
+    let unnamed_112 = (2.0 != 1.0);
+    let unnamed_113 = (vec2<i32>(2) != vec2<i32>(1));
+    let unnamed_114 = (vec3<u32>(2u) != vec3<u32>(1u));
+    let unnamed_115 = (vec4<f32>(2.0) != vec4<f32>(1.0));
+    let unnamed_116 = (2 < 1);
+    let unnamed_117 = (2u < 1u);
+    let unnamed_118 = (2.0 < 1.0);
+    let unnamed_119 = (vec2<i32>(2) < vec2<i32>(1));
+    let unnamed_120 = (vec3<u32>(2u) < vec3<u32>(1u));
+    let unnamed_121 = (vec4<f32>(2.0) < vec4<f32>(1.0));
+    let unnamed_122 = (2 <= 1);
+    let unnamed_123 = (2u <= 1u);
+    let unnamed_124 = (2.0 <= 1.0);
+    let unnamed_125 = (vec2<i32>(2) <= vec2<i32>(1));
+    let unnamed_126 = (vec3<u32>(2u) <= vec3<u32>(1u));
+    let unnamed_127 = (vec4<f32>(2.0) <= vec4<f32>(1.0));
+    let unnamed_128 = (2 > 1);
+    let unnamed_129 = (2u > 1u);
+    let unnamed_130 = (2.0 > 1.0);
+    let unnamed_131 = (vec2<i32>(2) > vec2<i32>(1));
+    let unnamed_132 = (vec3<u32>(2u) > vec3<u32>(1u));
+    let unnamed_133 = (vec4<f32>(2.0) > vec4<f32>(1.0));
+    let unnamed_134 = (2 >= 1);
+    let unnamed_135 = (2u >= 1u);
+    let unnamed_136 = (2.0 >= 1.0);
+    let unnamed_137 = (vec2<i32>(2) >= vec2<i32>(1));
+    let unnamed_138 = (vec3<u32>(2u) >= vec3<u32>(1u));
+    let unnamed_139 = (vec4<f32>(2.0) >= vec4<f32>(1.0));
 }
 
 fn assignment() {
diff --git a/tests/wgsl-errors.rs b/tests/wgsl-errors.rs
index caf855e1b6..e5823c2501 100644
--- a/tests/wgsl-errors.rs
+++ b/tests/wgsl-errors.rs
@@ -171,14 +171,14 @@ fn type_not_constructible() {
     check(
         r#"
             fn x() {
-                var _ = atomic<i32>(0);
+                _ = atomic<i32>(0);
             }
         "#,
         r#"error: type `atomic` is not constructible
-  ┌─ wgsl:3:25
+  ┌─ wgsl:3:21
   │
-3 │                 var _ = atomic<i32>(0);
-  │                         ^^^^^^ type is not constructible
+3 │                 _ = atomic<i32>(0);
+  │                     ^^^^^^ type is not constructible
 
 "#,
     );
@@ -189,14 +189,14 @@ fn type_not_inferrable() {
     check(
         r#"
             fn x() {
-                var _ = vec2();
+                _ = vec2();
             }
         "#,
         r#"error: type can't be inferred
-  ┌─ wgsl:3:25
+  ┌─ wgsl:3:21
   │
-3 │                 var _ = vec2();
-  │                         ^^^^ type can't be inferred
+3 │                 _ = vec2();
+  │                     ^^^^ type can't be inferred
 
 "#,
     );
@@ -207,14 +207,14 @@ fn unexpected_constructor_parameters() {
     check(
         r#"
             fn x() {
-                var _ = i32(0, 1);
+                _ = i32(0, 1);
             }
         "#,
         r#"error: unexpected components
-  ┌─ wgsl:3:31
+  ┌─ wgsl:3:27
   │
-3 │                 var _ = i32(0, 1);
-  │                               ^^ unexpected components
+3 │                 _ = i32(0, 1);
+  │                           ^^ unexpected components
 
 "#,
     );
@@ -225,14 +225,14 @@ fn constructor_parameter_type_mismatch() {
     check(
         r#"
             fn x() {
-                var _ = mat2x2<f32>(array(0, 1), vec2(2, 3));
+                _ = mat2x2<f32>(array(0, 1), vec2(2, 3));
             }
         "#,
         r#"error: invalid type for constructor component at index [0]
-  ┌─ wgsl:3:37
+  ┌─ wgsl:3:33
   │
-3 │                 var _ = mat2x2<f32>(array(0, 1), vec2(2, 3));
-  │                                     ^^^^^^^^^^^ invalid component type
+3 │                 _ = mat2x2<f32>(array(0, 1), vec2(2, 3));
+  │                                 ^^^^^^^^^^^ invalid component type
 
 "#,
     );