diff --git a/src/valid/expression.rs b/src/valid/expression.rs index 7fb64ab988..bde272dfe0 100644 --- a/src/valid/expression.rs +++ b/src/valid/expression.rs @@ -670,7 +670,6 @@ impl super::Validator { Some(Sk::Uint) | Some(Sk::Sint) | Some(Sk::Float) => true, Some(Sk::Bool) | None => false, }; - //TODO: should we be more restrictive here? I.e. expect scalar only to the left. let types_match = match (left_inner, right_inner) { (&Ti::Scalar { kind: kind1, .. }, &Ti::Scalar { kind: kind2, .. }) | (&Ti::Vector { kind: kind1, .. }, &Ti::Scalar { kind: kind2, .. }) diff --git a/tests/in/operators.wgsl b/tests/in/operators.wgsl index 5ad2a2a2b5..8522e830cf 100644 --- a/tests/in/operators.wgsl +++ b/tests/in/operators.wgsl @@ -28,11 +28,6 @@ fn splat() -> vec4 { return a.xyxy + vec4(b); } -fn unary() -> i32 { - let a = 1; - if !true { return a; } else { return ~a; }; -} - fn bool_cast(x: vec3) -> vec3 { let y = vec3(x); return vec3(y); @@ -76,52 +71,203 @@ fn constructors() -> f32 { return foo.a.x; } -fn modulo() { - // Modulo operator on float scalar or vector must be converted to mod function for GLSL - let a = 1 % 1; - let b = 1.0 % 1.0; - let c = vec3(1) % vec3(1); - let d = vec3(1.0) % vec3(1.0); -} - -fn scalar_times_matrix() { - let model = 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), - ); - - let assertion: mat4x4 = 2.0 * model; -} - fn logical() { - let a = true | false; - let b = true & false; + // unary + let _ = !true; + // let _ = !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); } -fn binary_assignment() { +fn arithmetic() { + // unary + let _ = -1; + let _ = -1.0; + let _ = -vec2(1); + let _ = -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); + + // 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); + + // 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); + + // 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); + + // 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); + + // Binary arithmetic expressions with mixed scalar and vector operands + let _ = vec2(2) + 1; + let _ = 2 + vec2(1); + + let _ = vec2(2) - 1; + let _ = 2 - vec2(1); + + let _ = vec2(2) * 1; + let _ = 2 * vec2(1); + + let _ = vec2(2) / 1; + let _ = 2 / vec2(1); + + let _ = vec2(2) % 1; + let _ = 2 % vec2(1); + + // Matrix arithmetic + // let _ = mat3x3() + mat3x3(); + // let _ = mat3x3() - mat3x3(); + + let _ = mat3x3() * 1.0; + let _ = 2.0 * mat3x3(); + + let _ = mat4x3() * vec4(1.0); + let _ = vec3(2.0) * mat4x3(); + + let _ = mat4x3() * mat3x4(); +} + +fn bit() { + // unary + let _ = ~1; + let _ = ~1u; + // let _ = ~vec2(1); + // let _ = ~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); +} + +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); +} + +fn assignment() { var a = 1; + a += 1; a -= 1; a *= a; a /= a; a %= 1; - a ^= 0; a &= 0; + a |= 0; + a ^= 0; + a <<= 2u; + a >>= 1u; + a++; a--; } @stage(compute) @workgroup_size(1) fn main() { - let a = builtins(); - let b = splat(); - let c = unary(); - let d = bool_cast(v_f32_one.xyz); - let e = constructors(); - modulo(); - scalar_times_matrix(); + let _ = builtins(); + let _ = splat(); + let _ = bool_cast(v_f32_one.xyz); + let _ = constructors(); + logical(); - binary_assignment(); + arithmetic(); + bit(); + comparison(); + assignment(); } diff --git a/tests/out/glsl/operators.main.Compute.glsl b/tests/out/glsl/operators.main.Compute.glsl index 76486c837c..1f8bdcc9b0 100644 --- a/tests/out/glsl/operators.main.Compute.glsl +++ b/tests/out/glsl/operators.main.Compute.glsl @@ -28,14 +28,6 @@ vec4 splat() { return (a_1.xyxy + vec4(b)); } -int unary() { - if ((! true)) { - return 1; - } else { - return (~ 1); - } -} - vec3 bool_cast(vec3 x) { bvec3 y = bvec3(x); return vec3(y); @@ -64,24 +56,131 @@ float constructors() { return _e70; } -void modulo() { - int a_2 = (1 % 1); - float b_1 = (1.0 - 1.0 * trunc(1.0 / 1.0)); - ivec3 c = (ivec3(1) % ivec3(1)); - vec3 d = (vec3(1.0) - vec3(1.0) * trunc(vec3(1.0) / vec3(1.0))); -} - -void scalar_times_matrix() { - mat4x4 model = 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)); - mat4x4 assertion = (2.0 * model); -} - void logical() { - bool a_3 = (true || false); - bool b_2 = (true && false); + bool unnamed_11 = (! true); + bool unnamed_12 = (true || false); + bool unnamed_13 = (true && false); + bool unnamed_14 = (true || false); + bvec3 unnamed_15 = (bvec3(true) | bvec3(false)); + bool unnamed_16 = (true && false); + bvec4 unnamed_17 = (bvec4(true) & bvec4(false)); } -void binary_assignment() { +void arithmetic() { + ivec2 unnamed_18 = (- ivec2(1)); + vec2 unnamed_19 = (- vec2(1.0)); + int unnamed_20 = (2 + 1); + uint unnamed_21 = (2u + 1u); + float unnamed_22 = (2.0 + 1.0); + ivec2 unnamed_23 = (ivec2(2) + ivec2(1)); + uvec3 unnamed_24 = (uvec3(2u) + uvec3(1u)); + vec4 unnamed_25 = (vec4(2.0) + vec4(1.0)); + int unnamed_26 = (2 - 1); + uint unnamed_27 = (2u - 1u); + float unnamed_28 = (2.0 - 1.0); + ivec2 unnamed_29 = (ivec2(2) - ivec2(1)); + uvec3 unnamed_30 = (uvec3(2u) - uvec3(1u)); + vec4 unnamed_31 = (vec4(2.0) - vec4(1.0)); + int unnamed_32 = (2 * 1); + uint unnamed_33 = (2u * 1u); + float unnamed_34 = (2.0 * 1.0); + ivec2 unnamed_35 = (ivec2(2) * ivec2(1)); + uvec3 unnamed_36 = (uvec3(2u) * uvec3(1u)); + vec4 unnamed_37 = (vec4(2.0) * vec4(1.0)); + int unnamed_38 = (2 / 1); + uint unnamed_39 = (2u / 1u); + float unnamed_40 = (2.0 / 1.0); + ivec2 unnamed_41 = (ivec2(2) / ivec2(1)); + uvec3 unnamed_42 = (uvec3(2u) / uvec3(1u)); + vec4 unnamed_43 = (vec4(2.0) / vec4(1.0)); + int unnamed_44 = (2 % 1); + uint unnamed_45 = (2u % 1u); + float unnamed_46 = (2.0 - 1.0 * trunc(2.0 / 1.0)); + ivec2 unnamed_47 = (ivec2(2) % ivec2(1)); + uvec3 unnamed_48 = (uvec3(2u) % uvec3(1u)); + vec4 unnamed_49 = (vec4(2.0) - vec4(1.0) * trunc(vec4(2.0) / vec4(1.0))); + ivec2 unnamed_50 = (ivec2(2) + ivec2(1)); + ivec2 unnamed_51 = (ivec2(2) + ivec2(1)); + ivec2 unnamed_52 = (ivec2(2) - ivec2(1)); + ivec2 unnamed_53 = (ivec2(2) - ivec2(1)); + ivec2 unnamed_54 = (ivec2(2) * 1); + ivec2 unnamed_55 = (2 * ivec2(1)); + ivec2 unnamed_56 = (ivec2(2) / ivec2(1)); + ivec2 unnamed_57 = (ivec2(2) / ivec2(1)); + ivec2 unnamed_58 = (ivec2(2) % ivec2(1)); + ivec2 unnamed_59 = (ivec2(2) % ivec2(1)); + mat3x3 unnamed_60 = (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_61 = (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_62 = (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_63 = (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_64 = (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_65 = (~ 1); + uint unnamed_66 = (~ 1u); + int unnamed_67 = (2 | 1); + uint unnamed_68 = (2u | 1u); + ivec2 unnamed_69 = (ivec2(2) | ivec2(1)); + uvec3 unnamed_70 = (uvec3(2u) | uvec3(1u)); + int unnamed_71 = (2 & 1); + uint unnamed_72 = (2u & 1u); + ivec2 unnamed_73 = (ivec2(2) & ivec2(1)); + uvec3 unnamed_74 = (uvec3(2u) & uvec3(1u)); + int unnamed_75 = (2 ^ 1); + uint unnamed_76 = (2u ^ 1u); + ivec2 unnamed_77 = (ivec2(2) ^ ivec2(1)); + uvec3 unnamed_78 = (uvec3(2u) ^ uvec3(1u)); + int unnamed_79 = (2 << 1u); + uint unnamed_80 = (2u << 1u); + ivec2 unnamed_81 = (ivec2(2) << uvec2(1u)); + uvec3 unnamed_82 = (uvec3(2u) << uvec3(1u)); + int unnamed_83 = (2 >> 1u); + uint unnamed_84 = (2u >> 1u); + ivec2 unnamed_85 = (ivec2(2) >> uvec2(1u)); + uvec3 unnamed_86 = (uvec3(2u) >> uvec3(1u)); +} + +void comparison() { + bool unnamed_87 = (2 == 1); + bool unnamed_88 = (2u == 1u); + bool unnamed_89 = (2.0 == 1.0); + bvec2 unnamed_90 = equal(ivec2(2), ivec2(1)); + bvec3 unnamed_91 = equal(uvec3(2u), uvec3(1u)); + bvec4 unnamed_92 = equal(vec4(2.0), vec4(1.0)); + bool unnamed_93 = (2 != 1); + bool unnamed_94 = (2u != 1u); + bool unnamed_95 = (2.0 != 1.0); + bvec2 unnamed_96 = notEqual(ivec2(2), ivec2(1)); + bvec3 unnamed_97 = notEqual(uvec3(2u), uvec3(1u)); + bvec4 unnamed_98 = notEqual(vec4(2.0), vec4(1.0)); + bool unnamed_99 = (2 < 1); + bool unnamed_100 = (2u < 1u); + bool unnamed_101 = (2.0 < 1.0); + bvec2 unnamed_102 = lessThan(ivec2(2), ivec2(1)); + bvec3 unnamed_103 = lessThan(uvec3(2u), uvec3(1u)); + bvec4 unnamed_104 = lessThan(vec4(2.0), vec4(1.0)); + bool unnamed_105 = (2 <= 1); + bool unnamed_106 = (2u <= 1u); + bool unnamed_107 = (2.0 <= 1.0); + bvec2 unnamed_108 = lessThanEqual(ivec2(2), ivec2(1)); + bvec3 unnamed_109 = lessThanEqual(uvec3(2u), uvec3(1u)); + bvec4 unnamed_110 = lessThanEqual(vec4(2.0), vec4(1.0)); + bool unnamed_111 = (2 > 1); + bool unnamed_112 = (2u > 1u); + bool unnamed_113 = (2.0 > 1.0); + bvec2 unnamed_114 = greaterThan(ivec2(2), ivec2(1)); + bvec3 unnamed_115 = greaterThan(uvec3(2u), uvec3(1u)); + bvec4 unnamed_116 = greaterThan(vec4(2.0), vec4(1.0)); + bool unnamed_117 = (2 >= 1); + bool unnamed_118 = (2u >= 1u); + bool unnamed_119 = (2.0 >= 1.0); + bvec2 unnamed_120 = greaterThanEqual(ivec2(2), ivec2(1)); + bvec3 unnamed_121 = greaterThanEqual(uvec3(2u), uvec3(1u)); + bvec4 unnamed_122 = greaterThanEqual(vec4(2.0), vec4(1.0)); +} + +void assignment() { int a = 1; int _e6 = a; a = (_e6 + 1); @@ -96,26 +195,32 @@ void binary_assignment() { int _e18 = a; a = (_e18 % 1); int _e21 = a; - a = (_e21 ^ 0); + a = (_e21 & 0); int _e24 = a; - a = (_e24 & 0); + a = (_e24 | 0); int _e27 = a; - a = (_e27 + 1); + a = (_e27 ^ 0); int _e30 = a; - a = (_e30 - 1); + a = (_e30 << 2u); + int _e33 = a; + a = (_e33 >> 1u); + int _e36 = a; + a = (_e36 + 1); + int _e39 = a; + a = (_e39 - 1); return; } void main() { vec4 _e4 = builtins(); vec4 _e5 = splat(); - int _e6 = unary(); - vec3 _e8 = bool_cast(vec4(1.0, 1.0, 1.0, 1.0).xyz); - float _e9 = constructors(); - modulo(); - scalar_times_matrix(); + vec3 _e7 = bool_cast(vec4(1.0, 1.0, 1.0, 1.0).xyz); + float _e8 = constructors(); logical(); - binary_assignment(); + arithmetic(); + bit(); + comparison(); + assignment(); return; } diff --git a/tests/out/hlsl/operators.hlsl b/tests/out/hlsl/operators.hlsl index 984d519f92..ec4af04b97 100644 --- a/tests/out/hlsl/operators.hlsl +++ b/tests/out/hlsl/operators.hlsl @@ -43,15 +43,6 @@ float4 splat() return (a_1.xyxy + float4(b)); } -int unary() -{ - if (!true) { - return 1; - } else { - return ~1; - } -} - float3 bool_cast(float3 x) { bool3 y = bool3(x); @@ -91,27 +82,135 @@ float constructors() return _expr70; } -void modulo() -{ - int a_2 = (1 % 1); - float b_1 = (1.0 % 1.0); - int3 c = (int3(1.xxx) % int3(1.xxx)); - float3 d = (float3(1.0.xxx) % float3(1.0.xxx)); -} - -void scalar_times_matrix() -{ - float4x4 model = 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)); - float4x4 assertion = mul(model, 2.0); -} - void logical() { - bool a_3 = (true | false); - bool b_2 = (true & false); + bool unnamed_11 = !true; + bool unnamed_12 = (true || false); + bool unnamed_13 = (true && false); + bool unnamed_14 = (true | false); + bool3 unnamed_15 = (bool3(true.xxx) | bool3(false.xxx)); + bool unnamed_16 = (true & false); + bool4 unnamed_17 = (bool4(true.xxxx) & bool4(false.xxxx)); } -void binary_assignment() +void arithmetic() +{ + int2 unnamed_18 = -int2(1.xx); + float2 unnamed_19 = -float2(1.0.xx); + int unnamed_20 = (2 + 1); + uint unnamed_21 = (2u + 1u); + float unnamed_22 = (2.0 + 1.0); + int2 unnamed_23 = (int2(2.xx) + int2(1.xx)); + uint3 unnamed_24 = (uint3(2u.xxx) + uint3(1u.xxx)); + float4 unnamed_25 = (float4(2.0.xxxx) + float4(1.0.xxxx)); + int unnamed_26 = (2 - 1); + uint unnamed_27 = (2u - 1u); + float unnamed_28 = (2.0 - 1.0); + int2 unnamed_29 = (int2(2.xx) - int2(1.xx)); + uint3 unnamed_30 = (uint3(2u.xxx) - uint3(1u.xxx)); + float4 unnamed_31 = (float4(2.0.xxxx) - float4(1.0.xxxx)); + int unnamed_32 = (2 * 1); + uint unnamed_33 = (2u * 1u); + float unnamed_34 = (2.0 * 1.0); + int2 unnamed_35 = (int2(2.xx) * int2(1.xx)); + uint3 unnamed_36 = (uint3(2u.xxx) * uint3(1u.xxx)); + float4 unnamed_37 = (float4(2.0.xxxx) * float4(1.0.xxxx)); + int unnamed_38 = (2 / 1); + uint unnamed_39 = (2u / 1u); + float unnamed_40 = (2.0 / 1.0); + int2 unnamed_41 = (int2(2.xx) / int2(1.xx)); + uint3 unnamed_42 = (uint3(2u.xxx) / uint3(1u.xxx)); + float4 unnamed_43 = (float4(2.0.xxxx) / float4(1.0.xxxx)); + int unnamed_44 = (2 % 1); + uint unnamed_45 = (2u % 1u); + float unnamed_46 = (2.0 % 1.0); + int2 unnamed_47 = (int2(2.xx) % int2(1.xx)); + uint3 unnamed_48 = (uint3(2u.xxx) % uint3(1u.xxx)); + float4 unnamed_49 = (float4(2.0.xxxx) % float4(1.0.xxxx)); + int2 unnamed_50 = (int2(2.xx) + int2(1.xx)); + int2 unnamed_51 = (int2(2.xx) + int2(1.xx)); + int2 unnamed_52 = (int2(2.xx) - int2(1.xx)); + int2 unnamed_53 = (int2(2.xx) - int2(1.xx)); + int2 unnamed_54 = (int2(2.xx) * 1); + int2 unnamed_55 = (2 * int2(1.xx)); + int2 unnamed_56 = (int2(2.xx) / int2(1.xx)); + int2 unnamed_57 = (int2(2.xx) / int2(1.xx)); + int2 unnamed_58 = (int2(2.xx) % int2(1.xx)); + int2 unnamed_59 = (int2(2.xx) % int2(1.xx)); + float3x3 unnamed_60 = 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_61 = 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_62 = mul(float4(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_63 = 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)), float3(2.0.xxx)); + float3x3 unnamed_64 = 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_65 = ~1; + uint unnamed_66 = ~1u; + int unnamed_67 = (2 | 1); + uint unnamed_68 = (2u | 1u); + int2 unnamed_69 = (int2(2.xx) | int2(1.xx)); + uint3 unnamed_70 = (uint3(2u.xxx) | uint3(1u.xxx)); + int unnamed_71 = (2 & 1); + uint unnamed_72 = (2u & 1u); + int2 unnamed_73 = (int2(2.xx) & int2(1.xx)); + uint3 unnamed_74 = (uint3(2u.xxx) & uint3(1u.xxx)); + int unnamed_75 = (2 ^ 1); + uint unnamed_76 = (2u ^ 1u); + int2 unnamed_77 = (int2(2.xx) ^ int2(1.xx)); + uint3 unnamed_78 = (uint3(2u.xxx) ^ uint3(1u.xxx)); + int unnamed_79 = (2 << 1u); + uint unnamed_80 = (2u << 1u); + int2 unnamed_81 = (int2(2.xx) << uint2(1u.xx)); + uint3 unnamed_82 = (uint3(2u.xxx) << uint3(1u.xxx)); + int unnamed_83 = (2 >> 1u); + uint unnamed_84 = (2u >> 1u); + int2 unnamed_85 = (int2(2.xx) >> uint2(1u.xx)); + uint3 unnamed_86 = (uint3(2u.xxx) >> uint3(1u.xxx)); +} + +void comparison() +{ + bool unnamed_87 = (2 == 1); + bool unnamed_88 = (2u == 1u); + bool unnamed_89 = (2.0 == 1.0); + bool2 unnamed_90 = (int2(2.xx) == int2(1.xx)); + bool3 unnamed_91 = (uint3(2u.xxx) == uint3(1u.xxx)); + bool4 unnamed_92 = (float4(2.0.xxxx) == float4(1.0.xxxx)); + bool unnamed_93 = (2 != 1); + bool unnamed_94 = (2u != 1u); + bool unnamed_95 = (2.0 != 1.0); + bool2 unnamed_96 = (int2(2.xx) != int2(1.xx)); + bool3 unnamed_97 = (uint3(2u.xxx) != uint3(1u.xxx)); + bool4 unnamed_98 = (float4(2.0.xxxx) != float4(1.0.xxxx)); + bool unnamed_99 = (2 < 1); + bool unnamed_100 = (2u < 1u); + bool unnamed_101 = (2.0 < 1.0); + bool2 unnamed_102 = (int2(2.xx) < int2(1.xx)); + bool3 unnamed_103 = (uint3(2u.xxx) < uint3(1u.xxx)); + bool4 unnamed_104 = (float4(2.0.xxxx) < float4(1.0.xxxx)); + bool unnamed_105 = (2 <= 1); + bool unnamed_106 = (2u <= 1u); + bool unnamed_107 = (2.0 <= 1.0); + bool2 unnamed_108 = (int2(2.xx) <= int2(1.xx)); + bool3 unnamed_109 = (uint3(2u.xxx) <= uint3(1u.xxx)); + bool4 unnamed_110 = (float4(2.0.xxxx) <= float4(1.0.xxxx)); + bool unnamed_111 = (2 > 1); + bool unnamed_112 = (2u > 1u); + bool unnamed_113 = (2.0 > 1.0); + bool2 unnamed_114 = (int2(2.xx) > int2(1.xx)); + bool3 unnamed_115 = (uint3(2u.xxx) > uint3(1u.xxx)); + bool4 unnamed_116 = (float4(2.0.xxxx) > float4(1.0.xxxx)); + bool unnamed_117 = (2 >= 1); + bool unnamed_118 = (2u >= 1u); + bool unnamed_119 = (2.0 >= 1.0); + bool2 unnamed_120 = (int2(2.xx) >= int2(1.xx)); + bool3 unnamed_121 = (uint3(2u.xxx) >= uint3(1u.xxx)); + bool4 unnamed_122 = (float4(2.0.xxxx) >= float4(1.0.xxxx)); +} + +void assignment() { int a = 1; @@ -128,13 +227,19 @@ void binary_assignment() int _expr18 = a; a = (_expr18 % 1); int _expr21 = a; - a = (_expr21 ^ 0); + a = (_expr21 & 0); int _expr24 = a; - a = (_expr24 & 0); + a = (_expr24 | 0); int _expr27 = a; - a = (_expr27 + 1); + a = (_expr27 ^ 0); int _expr30 = a; - a = (_expr30 - 1); + a = (_expr30 << 2u); + int _expr33 = a; + a = (_expr33 >> 1u); + int _expr36 = a; + a = (_expr36 + 1); + int _expr39 = a; + a = (_expr39 - 1); return; } @@ -143,12 +248,12 @@ void main() { const float4 _e4 = builtins(); const float4 _e5 = splat(); - const int _e6 = unary(); - const float3 _e8 = bool_cast(float4(1.0, 1.0, 1.0, 1.0).xyz); - const float _e9 = constructors(); - modulo(); - scalar_times_matrix(); + const float3 _e7 = bool_cast(float4(1.0, 1.0, 1.0, 1.0).xyz); + const float _e8 = constructors(); logical(); - binary_assignment(); + arithmetic(); + bit(); + comparison(); + assignment(); return; } diff --git a/tests/out/msl/operators.msl b/tests/out/msl/operators.msl index 65a5f61c4e..e71b196d98 100644 --- a/tests/out/msl/operators.msl +++ b/tests/out/msl/operators.msl @@ -24,6 +24,10 @@ constant metal::float2x2 const_type_7_ = {const_type_6_, const_type_6_}; constant metal::float4 const_type = {0.0, 0.0, 0.0, 0.0}; constant Foo const_Foo = {const_type, 0}; constant type_12 const_type_12_ = {const_Foo, const_Foo, const_Foo}; +constant metal::float3 const_type_4_ = {0.0, 0.0, 0.0}; +constant metal::float3x3 const_type_14_ = {const_type_4_, const_type_4_, const_type_4_}; +constant metal::float4x3 const_type_15_ = {const_type_4_, const_type_4_, const_type_4_, const_type_4_}; +constant metal::float3x4 const_type_16_ = {const_type, const_type, const_type}; metal::float4 builtins( ) { @@ -45,15 +49,6 @@ metal::float4 splat( return a_1.xyxy + static_cast(b); } -int unary( -) { - if (!true) { - return 1; - } else { - return ~1; - } -} - metal::float3 bool_cast( metal::float3 x ) { @@ -85,27 +80,135 @@ float constructors( return _e70; } -void modulo( -) { - int a_2 = 1 % 1; - float b_1 = metal::fmod(1.0, 1.0); - metal::int3 c = metal::int3(1) % metal::int3(1); - metal::float3 d = metal::fmod(metal::float3(1.0), metal::float3(1.0)); -} - -void scalar_times_matrix( -) { - metal::float4x4 model = 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)); - metal::float4x4 assertion = 2.0 * model; -} - void logical( ) { - bool a_3 = true | false; - bool b_2 = true & false; + bool unnamed_11 = !true; + bool unnamed_12 = true || false; + bool unnamed_13 = true && false; + bool unnamed_14 = true | false; + metal::bool3 unnamed_15 = metal::bool3(true) | metal::bool3(false); + bool unnamed_16 = true & false; + metal::bool4 unnamed_17 = metal::bool4(true) & metal::bool4(false); } -void binary_assignment( +void arithmetic( +) { + metal::int2 unnamed_18 = -metal::int2(1); + metal::float2 unnamed_19 = -metal::float2(1.0); + int unnamed_20 = 2 + 1; + uint unnamed_21 = 2u + 1u; + float unnamed_22 = 2.0 + 1.0; + metal::int2 unnamed_23 = metal::int2(2) + metal::int2(1); + metal::uint3 unnamed_24 = metal::uint3(2u) + metal::uint3(1u); + metal::float4 unnamed_25 = metal::float4(2.0) + metal::float4(1.0); + int unnamed_26 = 2 - 1; + uint unnamed_27 = 2u - 1u; + float unnamed_28 = 2.0 - 1.0; + metal::int2 unnamed_29 = metal::int2(2) - metal::int2(1); + metal::uint3 unnamed_30 = metal::uint3(2u) - metal::uint3(1u); + metal::float4 unnamed_31 = metal::float4(2.0) - metal::float4(1.0); + int unnamed_32 = 2 * 1; + uint unnamed_33 = 2u * 1u; + float unnamed_34 = 2.0 * 1.0; + metal::int2 unnamed_35 = metal::int2(2) * metal::int2(1); + metal::uint3 unnamed_36 = metal::uint3(2u) * metal::uint3(1u); + metal::float4 unnamed_37 = metal::float4(2.0) * metal::float4(1.0); + int unnamed_38 = 2 / 1; + uint unnamed_39 = 2u / 1u; + float unnamed_40 = 2.0 / 1.0; + metal::int2 unnamed_41 = metal::int2(2) / metal::int2(1); + metal::uint3 unnamed_42 = metal::uint3(2u) / metal::uint3(1u); + metal::float4 unnamed_43 = metal::float4(2.0) / metal::float4(1.0); + int unnamed_44 = 2 % 1; + uint unnamed_45 = 2u % 1u; + float unnamed_46 = metal::fmod(2.0, 1.0); + metal::int2 unnamed_47 = metal::int2(2) % metal::int2(1); + metal::uint3 unnamed_48 = metal::uint3(2u) % metal::uint3(1u); + metal::float4 unnamed_49 = metal::fmod(metal::float4(2.0), metal::float4(1.0)); + metal::int2 unnamed_50 = metal::int2(2) + metal::int2(1); + metal::int2 unnamed_51 = metal::int2(2) + metal::int2(1); + metal::int2 unnamed_52 = metal::int2(2) - metal::int2(1); + metal::int2 unnamed_53 = metal::int2(2) - metal::int2(1); + metal::int2 unnamed_54 = metal::int2(2) * 1; + metal::int2 unnamed_55 = 2 * metal::int2(1); + metal::int2 unnamed_56 = metal::int2(2) / metal::int2(1); + metal::int2 unnamed_57 = metal::int2(2) / metal::int2(1); + metal::int2 unnamed_58 = metal::int2(2) % metal::int2(1); + metal::int2 unnamed_59 = metal::int2(2) % metal::int2(1); + metal::float3x3 unnamed_60 = const_type_14_ * 1.0; + metal::float3x3 unnamed_61 = 2.0 * const_type_14_; + metal::float3 unnamed_62 = const_type_15_ * metal::float4(1.0); + metal::float4 unnamed_63 = metal::float3(2.0) * const_type_15_; + metal::float3x3 unnamed_64 = const_type_15_ * const_type_16_; +} + +void bit( +) { + int unnamed_65 = ~1; + uint unnamed_66 = ~1u; + int unnamed_67 = 2 | 1; + uint unnamed_68 = 2u | 1u; + metal::int2 unnamed_69 = metal::int2(2) | metal::int2(1); + metal::uint3 unnamed_70 = metal::uint3(2u) | metal::uint3(1u); + int unnamed_71 = 2 & 1; + uint unnamed_72 = 2u & 1u; + metal::int2 unnamed_73 = metal::int2(2) & metal::int2(1); + metal::uint3 unnamed_74 = metal::uint3(2u) & metal::uint3(1u); + int unnamed_75 = 2 ^ 1; + uint unnamed_76 = 2u ^ 1u; + metal::int2 unnamed_77 = metal::int2(2) ^ metal::int2(1); + metal::uint3 unnamed_78 = metal::uint3(2u) ^ metal::uint3(1u); + int unnamed_79 = 2 << 1u; + uint unnamed_80 = 2u << 1u; + metal::int2 unnamed_81 = metal::int2(2) << metal::uint2(1u); + metal::uint3 unnamed_82 = metal::uint3(2u) << metal::uint3(1u); + int unnamed_83 = 2 >> 1u; + uint unnamed_84 = 2u >> 1u; + metal::int2 unnamed_85 = metal::int2(2) >> metal::uint2(1u); + metal::uint3 unnamed_86 = metal::uint3(2u) >> metal::uint3(1u); +} + +void comparison( +) { + bool unnamed_87 = 2 == 1; + bool unnamed_88 = 2u == 1u; + bool unnamed_89 = 2.0 == 1.0; + metal::bool2 unnamed_90 = metal::int2(2) == metal::int2(1); + metal::bool3 unnamed_91 = metal::uint3(2u) == metal::uint3(1u); + metal::bool4 unnamed_92 = metal::float4(2.0) == metal::float4(1.0); + bool unnamed_93 = 2 != 1; + bool unnamed_94 = 2u != 1u; + bool unnamed_95 = 2.0 != 1.0; + metal::bool2 unnamed_96 = metal::int2(2) != metal::int2(1); + metal::bool3 unnamed_97 = metal::uint3(2u) != metal::uint3(1u); + metal::bool4 unnamed_98 = metal::float4(2.0) != metal::float4(1.0); + bool unnamed_99 = 2 < 1; + bool unnamed_100 = 2u < 1u; + bool unnamed_101 = 2.0 < 1.0; + metal::bool2 unnamed_102 = metal::int2(2) < metal::int2(1); + metal::bool3 unnamed_103 = metal::uint3(2u) < metal::uint3(1u); + metal::bool4 unnamed_104 = metal::float4(2.0) < metal::float4(1.0); + bool unnamed_105 = 2 <= 1; + bool unnamed_106 = 2u <= 1u; + bool unnamed_107 = 2.0 <= 1.0; + metal::bool2 unnamed_108 = metal::int2(2) <= metal::int2(1); + metal::bool3 unnamed_109 = metal::uint3(2u) <= metal::uint3(1u); + metal::bool4 unnamed_110 = metal::float4(2.0) <= metal::float4(1.0); + bool unnamed_111 = 2 > 1; + bool unnamed_112 = 2u > 1u; + bool unnamed_113 = 2.0 > 1.0; + metal::bool2 unnamed_114 = metal::int2(2) > metal::int2(1); + metal::bool3 unnamed_115 = metal::uint3(2u) > metal::uint3(1u); + metal::bool4 unnamed_116 = metal::float4(2.0) > metal::float4(1.0); + bool unnamed_117 = 2 >= 1; + bool unnamed_118 = 2u >= 1u; + bool unnamed_119 = 2.0 >= 1.0; + metal::bool2 unnamed_120 = metal::int2(2) >= metal::int2(1); + metal::bool3 unnamed_121 = metal::uint3(2u) >= metal::uint3(1u); + metal::bool4 unnamed_122 = metal::float4(2.0) >= metal::float4(1.0); +} + +void assignment( ) { int a = 1; int _e6 = a; @@ -121,13 +224,19 @@ void binary_assignment( int _e18 = a; a = _e18 % 1; int _e21 = a; - a = _e21 ^ 0; + a = _e21 & 0; int _e24 = a; - a = _e24 & 0; + a = _e24 | 0; int _e27 = a; - a = _e27 + 1; + a = _e27 ^ 0; int _e30 = a; - a = _e30 - 1; + a = _e30 << 2u; + int _e33 = a; + a = _e33 >> 1u; + int _e36 = a; + a = _e36 + 1; + int _e39 = a; + a = _e39 - 1; return; } @@ -135,12 +244,12 @@ kernel void main_( ) { metal::float4 _e4 = builtins(); metal::float4 _e5 = splat(); - int _e6 = unary(); - metal::float3 _e8 = bool_cast(v_f32_one.xyz); - float _e9 = constructors(); - modulo(); - scalar_times_matrix(); + metal::float3 _e7 = bool_cast(v_f32_one.xyz); + float _e8 = constructors(); logical(); - binary_assignment(); + arithmetic(); + bit(); + comparison(); + assignment(); return; } diff --git a/tests/out/spv/operators.spvasm b/tests/out/spv/operators.spvasm index be03133c90..1c95c27117 100644 --- a/tests/out/spv/operators.spvasm +++ b/tests/out/spv/operators.spvasm @@ -1,16 +1,16 @@ ; SPIR-V ; Version: 1.1 ; Generator: rspirv -; Bound: 214 +; Bound: 434 OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 -OpEntryPoint GLCompute %202 "main" -OpExecutionMode %202 LocalSize 1 1 1 -OpMemberDecorate %27 0 Offset 0 -OpMemberDecorate %27 1 Offset 16 -OpDecorate %32 ArrayStride 32 -OpDecorate %33 ArrayStride 4 +OpEntryPoint GLCompute %422 "main" +OpExecutionMode %422 LocalSize 1 1 1 +OpMemberDecorate %31 0 Offset 0 +OpMemberDecorate %31 1 Offset 16 +OpDecorate %36 ArrayStride 32 +OpDecorate %37 ArrayStride 4 %2 = OpTypeVoid %4 = OpTypeFloat 32 %3 = OpConstant %4 1.0 @@ -32,241 +32,460 @@ OpDecorate %33 ArrayStride 4 %19 = OpConstant %20 0 %21 = OpConstant %8 3 %22 = OpConstant %20 4 -%23 = OpTypeVector %4 4 -%24 = OpTypeVector %8 4 -%25 = OpTypeVector %10 4 -%26 = OpTypeVector %4 3 -%27 = OpTypeStruct %23 %8 -%28 = OpTypeVector %4 2 -%29 = OpTypeMatrix %28 2 -%30 = OpTypeMatrix %23 4 -%31 = OpTypeVector %20 2 -%32 = OpTypeArray %27 %21 -%33 = OpTypeArray %8 %22 -%34 = OpConstantComposite %23 %3 %3 %3 %3 -%35 = OpConstantComposite %23 %5 %5 %5 %5 -%36 = OpConstantComposite %23 %6 %6 %6 %6 -%37 = OpConstantComposite %24 %7 %7 %7 %7 -%38 = OpConstantComposite %31 %19 %19 -%39 = OpConstantComposite %28 %5 %5 -%40 = OpConstantComposite %29 %39 %39 -%41 = OpConstantComposite %23 %5 %5 %5 %5 -%42 = OpConstantComposite %27 %41 %11 -%43 = OpConstantComposite %32 %42 %42 %42 -%46 = OpTypeFunction %23 -%87 = OpTypeFunction %8 -%94 = OpConstantNull %8 -%98 = OpTypeFunction %26 %26 -%100 = OpTypeVector %10 3 -%107 = OpTypePointer Function %27 -%109 = OpTypePointer Function %10 -%111 = OpTypePointer Function %8 -%113 = OpTypePointer Function %20 -%115 = OpTypePointer Function %4 -%117 = OpTypePointer Function %31 -%119 = OpTypePointer Function %29 -%121 = OpTypePointer Function %32 -%126 = OpTypePointer Function %33 -%129 = OpTypeFunction %4 -%146 = OpTypePointer Function %23 -%147 = OpTypePointer Function %4 -%152 = OpTypeFunction %2 -%156 = OpTypeVector %8 3 -%45 = OpFunction %23 None %46 -%44 = OpLabel -OpBranch %47 -%47 = OpLabel -%48 = OpSelect %8 %9 %7 %11 -%50 = OpCompositeConstruct %25 %9 %9 %9 %9 -%49 = OpSelect %23 %50 %34 %35 -%51 = OpCompositeConstruct %25 %12 %12 %12 %12 -%52 = OpSelect %23 %51 %35 %34 -%53 = OpExtInst %23 %1 FMix %35 %34 %36 -%55 = OpCompositeConstruct %23 %13 %13 %13 %13 -%54 = OpExtInst %23 %1 FMix %35 %34 %55 -%56 = OpCompositeExtract %8 %37 0 -%57 = OpBitcast %4 %56 -%58 = OpBitcast %23 %37 -%59 = OpConvertFToS %24 %35 -%60 = OpCompositeConstruct %24 %48 %48 %48 %48 -%61 = OpIAdd %24 %60 %59 -%62 = OpConvertSToF %23 %61 -%63 = OpFAdd %23 %62 %49 -%64 = OpFAdd %23 %63 %53 -%65 = OpFAdd %23 %64 %54 -%66 = OpCompositeConstruct %23 %57 %57 %57 %57 -%67 = OpFAdd %23 %65 %66 -%68 = OpFAdd %23 %67 %58 -OpReturnValue %68 +%23 = OpConstant %8 4294967295 +%24 = OpConstant %4 -1.0 +%25 = OpConstant %20 2 +%26 = OpConstant %20 1 +%27 = OpTypeVector %4 4 +%28 = OpTypeVector %8 4 +%29 = OpTypeVector %10 4 +%30 = OpTypeVector %4 3 +%31 = OpTypeStruct %27 %8 +%32 = OpTypeVector %4 2 +%33 = OpTypeMatrix %32 2 +%34 = OpTypeMatrix %27 4 +%35 = OpTypeVector %20 2 +%36 = OpTypeArray %31 %21 +%37 = OpTypeArray %8 %22 +%38 = OpTypeMatrix %30 3 +%39 = OpTypeMatrix %30 4 +%40 = OpTypeMatrix %27 3 +%41 = OpConstantComposite %27 %3 %3 %3 %3 +%42 = OpConstantComposite %27 %5 %5 %5 %5 +%43 = OpConstantComposite %27 %6 %6 %6 %6 +%44 = OpConstantComposite %28 %7 %7 %7 %7 +%45 = OpConstantComposite %35 %19 %19 +%46 = OpConstantComposite %32 %5 %5 +%47 = OpConstantComposite %33 %46 %46 +%48 = OpConstantComposite %27 %5 %5 %5 %5 +%49 = OpConstantComposite %31 %48 %11 +%50 = OpConstantComposite %36 %49 %49 %49 +%51 = OpConstantComposite %30 %5 %5 %5 +%52 = OpConstantComposite %38 %51 %51 %51 +%53 = OpConstantComposite %39 %51 %51 %51 %51 +%54 = OpConstantComposite %40 %48 %48 %48 +%57 = OpTypeFunction %27 +%99 = OpTypeFunction %30 %30 +%101 = OpTypeVector %10 3 +%108 = OpTypePointer Function %31 +%110 = OpTypePointer Function %10 +%112 = OpTypePointer Function %8 +%114 = OpTypePointer Function %20 +%116 = OpTypePointer Function %4 +%118 = OpTypePointer Function %35 +%120 = OpTypePointer Function %33 +%122 = OpTypePointer Function %36 +%127 = OpTypePointer Function %37 +%130 = OpTypeFunction %4 +%147 = OpTypePointer Function %27 +%148 = OpTypePointer Function %4 +%153 = OpTypeFunction %2 +%169 = OpTypeVector %8 2 +%180 = OpTypeVector %20 3 +%323 = OpTypeVector %10 2 +%56 = OpFunction %27 None %57 +%55 = OpLabel +OpBranch %58 +%58 = OpLabel +%59 = OpSelect %8 %9 %7 %11 +%61 = OpCompositeConstruct %29 %9 %9 %9 %9 +%60 = OpSelect %27 %61 %41 %42 +%62 = OpCompositeConstruct %29 %12 %12 %12 %12 +%63 = OpSelect %27 %62 %42 %41 +%64 = OpExtInst %27 %1 FMix %42 %41 %43 +%66 = OpCompositeConstruct %27 %13 %13 %13 %13 +%65 = OpExtInst %27 %1 FMix %42 %41 %66 +%67 = OpCompositeExtract %8 %44 0 +%68 = OpBitcast %4 %67 +%69 = OpBitcast %27 %44 +%70 = OpConvertFToS %28 %42 +%71 = OpCompositeConstruct %28 %59 %59 %59 %59 +%72 = OpIAdd %28 %71 %70 +%73 = OpConvertSToF %27 %72 +%74 = OpFAdd %27 %73 %60 +%75 = OpFAdd %27 %74 %64 +%76 = OpFAdd %27 %75 %65 +%77 = OpCompositeConstruct %27 %68 %68 %68 %68 +%78 = OpFAdd %27 %76 %77 +%79 = OpFAdd %27 %78 %69 +OpReturnValue %79 OpFunctionEnd -%70 = OpFunction %23 None %46 -%69 = OpLabel -OpBranch %71 -%71 = OpLabel -%72 = OpCompositeConstruct %28 %14 %14 -%73 = OpCompositeConstruct %28 %3 %3 -%74 = OpFAdd %28 %73 %72 -%75 = OpCompositeConstruct %28 %15 %15 -%76 = OpFSub %28 %74 %75 -%77 = OpCompositeConstruct %28 %16 %16 -%78 = OpFDiv %28 %76 %77 -%79 = OpCompositeConstruct %24 %17 %17 %17 %17 -%80 = OpCompositeConstruct %24 %18 %18 %18 %18 -%81 = OpSMod %24 %79 %80 -%82 = OpVectorShuffle %23 %78 %78 0 1 0 1 -%83 = OpConvertSToF %23 %81 -%84 = OpFAdd %23 %82 %83 -OpReturnValue %84 +%81 = OpFunction %27 None %57 +%80 = OpLabel +OpBranch %82 +%82 = OpLabel +%83 = OpCompositeConstruct %32 %14 %14 +%84 = OpCompositeConstruct %32 %3 %3 +%85 = OpFAdd %32 %84 %83 +%86 = OpCompositeConstruct %32 %15 %15 +%87 = OpFSub %32 %85 %86 +%88 = OpCompositeConstruct %32 %16 %16 +%89 = OpFDiv %32 %87 %88 +%90 = OpCompositeConstruct %28 %17 %17 %17 %17 +%91 = OpCompositeConstruct %28 %18 %18 %18 %18 +%92 = OpSMod %28 %90 %91 +%93 = OpVectorShuffle %27 %89 %89 0 1 0 1 +%94 = OpConvertSToF %27 %92 +%95 = OpFAdd %27 %93 %94 +OpReturnValue %95 OpFunctionEnd -%86 = OpFunction %8 None %87 -%85 = OpLabel -OpBranch %88 -%88 = OpLabel -%89 = OpLogicalNot %10 %9 -OpSelectionMerge %90 None -OpBranchConditional %89 %91 %92 -%91 = OpLabel -OpReturnValue %7 -%92 = OpLabel -%93 = OpNot %8 %7 -OpReturnValue %93 -%90 = OpLabel -OpReturnValue %94 +%98 = OpFunction %30 None %99 +%97 = OpFunctionParameter %30 +%96 = OpLabel +OpBranch %100 +%100 = OpLabel +%102 = OpCompositeConstruct %30 %5 %5 %5 +%103 = OpFUnordNotEqual %101 %97 %102 +%104 = OpCompositeConstruct %30 %5 %5 %5 +%105 = OpCompositeConstruct %30 %3 %3 %3 +%106 = OpSelect %30 %103 %105 %104 +OpReturnValue %106 OpFunctionEnd -%97 = OpFunction %26 None %98 -%96 = OpFunctionParameter %26 -%95 = OpLabel -OpBranch %99 -%99 = OpLabel -%101 = OpCompositeConstruct %26 %5 %5 %5 -%102 = OpFUnordNotEqual %100 %96 %101 -%103 = OpCompositeConstruct %26 %5 %5 %5 -%104 = OpCompositeConstruct %26 %3 %3 %3 -%105 = OpSelect %26 %102 %104 %103 -OpReturnValue %105 -OpFunctionEnd -%128 = OpFunction %4 None %129 -%127 = OpLabel -%123 = OpVariable %117 Function -%118 = OpVariable %119 Function %40 -%112 = OpVariable %113 Function %19 -%106 = OpVariable %107 Function -%124 = OpVariable %119 Function -%120 = OpVariable %121 Function %43 -%114 = OpVariable %115 Function %5 -%108 = OpVariable %109 Function %12 -%125 = OpVariable %126 Function -%122 = OpVariable %107 Function %42 -%116 = OpVariable %117 Function %38 -%110 = OpVariable %111 Function %11 -OpBranch %130 -%130 = OpLabel -%131 = OpCompositeConstruct %23 %3 %3 %3 %3 -%132 = OpCompositeConstruct %27 %131 %7 -OpStore %106 %132 -%133 = OpCompositeConstruct %28 %3 %5 -%134 = OpCompositeConstruct %28 %5 %3 -%135 = OpCompositeConstruct %29 %133 %134 -%136 = OpCompositeConstruct %23 %3 %5 %5 %5 -%137 = OpCompositeConstruct %23 %5 %3 %5 %5 -%138 = OpCompositeConstruct %23 %5 %5 %3 %5 -%139 = OpCompositeConstruct %23 %5 %5 %5 %3 -%140 = OpCompositeConstruct %30 %136 %137 %138 %139 -%141 = OpCompositeConstruct %31 %19 %19 -OpStore %123 %141 -%142 = OpCompositeConstruct %28 %5 %5 -%143 = OpCompositeConstruct %28 %5 %5 -%144 = OpCompositeConstruct %29 %142 %143 -OpStore %124 %144 -%145 = OpCompositeConstruct %33 %11 %7 %18 %21 +%129 = OpFunction %4 None %130 +%128 = OpLabel +%124 = OpVariable %118 Function +%119 = OpVariable %120 Function %47 +%113 = OpVariable %114 Function %19 +%107 = OpVariable %108 Function +%125 = OpVariable %120 Function +%121 = OpVariable %122 Function %50 +%115 = OpVariable %116 Function %5 +%109 = OpVariable %110 Function %12 +%126 = OpVariable %127 Function +%123 = OpVariable %108 Function %49 +%117 = OpVariable %118 Function %45 +%111 = OpVariable %112 Function %11 +OpBranch %131 +%131 = OpLabel +%132 = OpCompositeConstruct %27 %3 %3 %3 %3 +%133 = OpCompositeConstruct %31 %132 %7 +OpStore %107 %133 +%134 = OpCompositeConstruct %32 %3 %5 +%135 = OpCompositeConstruct %32 %5 %3 +%136 = OpCompositeConstruct %33 %134 %135 +%137 = OpCompositeConstruct %27 %3 %5 %5 %5 +%138 = OpCompositeConstruct %27 %5 %3 %5 %5 +%139 = OpCompositeConstruct %27 %5 %5 %3 %5 +%140 = OpCompositeConstruct %27 %5 %5 %5 %3 +%141 = OpCompositeConstruct %34 %137 %138 %139 %140 +%142 = OpCompositeConstruct %35 %19 %19 +OpStore %124 %142 +%143 = OpCompositeConstruct %32 %5 %5 +%144 = OpCompositeConstruct %32 %5 %5 +%145 = OpCompositeConstruct %33 %143 %144 OpStore %125 %145 -%148 = OpAccessChain %147 %106 %19 %19 -%149 = OpLoad %4 %148 -OpReturnValue %149 +%146 = OpCompositeConstruct %37 %11 %7 %18 %21 +OpStore %126 %146 +%149 = OpAccessChain %148 %107 %19 %19 +%150 = OpLoad %4 %149 +OpReturnValue %150 OpFunctionEnd -%151 = OpFunction %2 None %152 -%150 = OpLabel -OpBranch %153 -%153 = OpLabel -%154 = OpSMod %8 %7 %7 -%155 = OpFRem %4 %3 %3 -%157 = OpCompositeConstruct %156 %7 %7 %7 -%158 = OpCompositeConstruct %156 %7 %7 %7 -%159 = OpSMod %156 %157 %158 -%160 = OpCompositeConstruct %26 %3 %3 %3 -%161 = OpCompositeConstruct %26 %3 %3 %3 -%162 = OpFRem %26 %160 %161 +%152 = OpFunction %2 None %153 +%151 = OpLabel +OpBranch %154 +%154 = OpLabel +%155 = OpLogicalNot %10 %9 +%156 = OpLogicalOr %10 %9 %12 +%157 = OpLogicalAnd %10 %9 %12 +%158 = OpLogicalOr %10 %9 %12 +%159 = OpCompositeConstruct %101 %9 %9 %9 +%160 = OpCompositeConstruct %101 %12 %12 %12 +%161 = OpLogicalOr %101 %159 %160 +%162 = OpLogicalAnd %10 %9 %12 +%163 = OpCompositeConstruct %29 %9 %9 %9 %9 +%164 = OpCompositeConstruct %29 %12 %12 %12 %12 +%165 = OpLogicalAnd %29 %163 %164 OpReturn OpFunctionEnd -%164 = OpFunction %2 None %152 -%163 = OpLabel -OpBranch %165 -%165 = OpLabel -%166 = OpCompositeConstruct %23 %3 %5 %5 %5 -%167 = OpCompositeConstruct %23 %5 %3 %5 %5 -%168 = OpCompositeConstruct %23 %5 %5 %3 %5 -%169 = OpCompositeConstruct %23 %5 %5 %5 %3 -%170 = OpCompositeConstruct %30 %166 %167 %168 %169 -%171 = OpMatrixTimesScalar %30 %170 %14 +%167 = OpFunction %2 None %153 +%166 = OpLabel +OpBranch %168 +%168 = OpLabel +%170 = OpCompositeConstruct %169 %7 %7 +%171 = OpSNegate %169 %170 +%172 = OpCompositeConstruct %32 %3 %3 +%173 = OpFNegate %32 %172 +%174 = OpIAdd %8 %18 %7 +%175 = OpIAdd %20 %25 %26 +%176 = OpFAdd %4 %14 %3 +%177 = OpCompositeConstruct %169 %18 %18 +%178 = OpCompositeConstruct %169 %7 %7 +%179 = OpIAdd %169 %177 %178 +%181 = OpCompositeConstruct %180 %25 %25 %25 +%182 = OpCompositeConstruct %180 %26 %26 %26 +%183 = OpIAdd %180 %181 %182 +%184 = OpCompositeConstruct %27 %14 %14 %14 %14 +%185 = OpCompositeConstruct %27 %3 %3 %3 %3 +%186 = OpFAdd %27 %184 %185 +%187 = OpISub %8 %18 %7 +%188 = OpISub %20 %25 %26 +%189 = OpFSub %4 %14 %3 +%190 = OpCompositeConstruct %169 %18 %18 +%191 = OpCompositeConstruct %169 %7 %7 +%192 = OpISub %169 %190 %191 +%193 = OpCompositeConstruct %180 %25 %25 %25 +%194 = OpCompositeConstruct %180 %26 %26 %26 +%195 = OpISub %180 %193 %194 +%196 = OpCompositeConstruct %27 %14 %14 %14 %14 +%197 = OpCompositeConstruct %27 %3 %3 %3 %3 +%198 = OpFSub %27 %196 %197 +%199 = OpIMul %8 %18 %7 +%200 = OpIMul %20 %25 %26 +%201 = OpFMul %4 %14 %3 +%202 = OpCompositeConstruct %169 %18 %18 +%203 = OpCompositeConstruct %169 %7 %7 +%204 = OpIMul %169 %202 %203 +%205 = OpCompositeConstruct %180 %25 %25 %25 +%206 = OpCompositeConstruct %180 %26 %26 %26 +%207 = OpIMul %180 %205 %206 +%208 = OpCompositeConstruct %27 %14 %14 %14 %14 +%209 = OpCompositeConstruct %27 %3 %3 %3 %3 +%210 = OpFMul %27 %208 %209 +%211 = OpSDiv %8 %18 %7 +%212 = OpUDiv %20 %25 %26 +%213 = OpFDiv %4 %14 %3 +%214 = OpCompositeConstruct %169 %18 %18 +%215 = OpCompositeConstruct %169 %7 %7 +%216 = OpSDiv %169 %214 %215 +%217 = OpCompositeConstruct %180 %25 %25 %25 +%218 = OpCompositeConstruct %180 %26 %26 %26 +%219 = OpUDiv %180 %217 %218 +%220 = OpCompositeConstruct %27 %14 %14 %14 %14 +%221 = OpCompositeConstruct %27 %3 %3 %3 %3 +%222 = OpFDiv %27 %220 %221 +%223 = OpSMod %8 %18 %7 +%224 = OpUMod %20 %25 %26 +%225 = OpFRem %4 %14 %3 +%226 = OpCompositeConstruct %169 %18 %18 +%227 = OpCompositeConstruct %169 %7 %7 +%228 = OpSMod %169 %226 %227 +%229 = OpCompositeConstruct %180 %25 %25 %25 +%230 = OpCompositeConstruct %180 %26 %26 %26 +%231 = OpUMod %180 %229 %230 +%232 = OpCompositeConstruct %27 %14 %14 %14 %14 +%233 = OpCompositeConstruct %27 %3 %3 %3 %3 +%234 = OpFRem %27 %232 %233 +%235 = OpCompositeConstruct %169 %18 %18 +%236 = OpCompositeConstruct %169 %7 %7 +%237 = OpIAdd %169 %235 %236 +%238 = OpCompositeConstruct %169 %7 %7 +%239 = OpCompositeConstruct %169 %18 %18 +%240 = OpIAdd %169 %239 %238 +%241 = OpCompositeConstruct %169 %18 %18 +%242 = OpCompositeConstruct %169 %7 %7 +%243 = OpISub %169 %241 %242 +%244 = OpCompositeConstruct %169 %7 %7 +%245 = OpCompositeConstruct %169 %18 %18 +%246 = OpISub %169 %245 %244 +%247 = OpCompositeConstruct %169 %18 %18 +%248 = OpVectorTimesScalar %169 %247 %7 +%249 = OpCompositeConstruct %169 %7 %7 +%250 = OpVectorTimesScalar %169 %249 %18 +%251 = OpCompositeConstruct %169 %18 %18 +%252 = OpCompositeConstruct %169 %7 %7 +%253 = OpSDiv %169 %251 %252 +%254 = OpCompositeConstruct %169 %7 %7 +%255 = OpCompositeConstruct %169 %18 %18 +%256 = OpSDiv %169 %255 %254 +%257 = OpCompositeConstruct %169 %18 %18 +%258 = OpCompositeConstruct %169 %7 %7 +%259 = OpSMod %169 %257 %258 +%260 = OpCompositeConstruct %169 %7 %7 +%261 = OpCompositeConstruct %169 %18 %18 +%262 = OpSMod %169 %261 %260 +%263 = OpMatrixTimesScalar %38 %52 %3 +%264 = OpMatrixTimesScalar %38 %52 %14 +%265 = OpCompositeConstruct %27 %3 %3 %3 %3 +%266 = OpMatrixTimesVector %30 %53 %265 +%267 = OpCompositeConstruct %30 %14 %14 %14 +%268 = OpVectorTimesMatrix %27 %267 %53 +%269 = OpMatrixTimesMatrix %38 %53 %54 OpReturn OpFunctionEnd -%173 = OpFunction %2 None %152 -%172 = OpLabel -OpBranch %174 -%174 = OpLabel -%175 = OpLogicalOr %10 %9 %12 -%176 = OpLogicalAnd %10 %9 %12 +%271 = OpFunction %2 None %153 +%270 = OpLabel +OpBranch %272 +%272 = OpLabel +%273 = OpNot %8 %7 +%274 = OpNot %20 %26 +%275 = OpBitwiseOr %8 %18 %7 +%276 = OpBitwiseOr %20 %25 %26 +%277 = OpCompositeConstruct %169 %18 %18 +%278 = OpCompositeConstruct %169 %7 %7 +%279 = OpBitwiseOr %169 %277 %278 +%280 = OpCompositeConstruct %180 %25 %25 %25 +%281 = OpCompositeConstruct %180 %26 %26 %26 +%282 = OpBitwiseOr %180 %280 %281 +%283 = OpBitwiseAnd %8 %18 %7 +%284 = OpBitwiseAnd %20 %25 %26 +%285 = OpCompositeConstruct %169 %18 %18 +%286 = OpCompositeConstruct %169 %7 %7 +%287 = OpBitwiseAnd %169 %285 %286 +%288 = OpCompositeConstruct %180 %25 %25 %25 +%289 = OpCompositeConstruct %180 %26 %26 %26 +%290 = OpBitwiseAnd %180 %288 %289 +%291 = OpBitwiseXor %8 %18 %7 +%292 = OpBitwiseXor %20 %25 %26 +%293 = OpCompositeConstruct %169 %18 %18 +%294 = OpCompositeConstruct %169 %7 %7 +%295 = OpBitwiseXor %169 %293 %294 +%296 = OpCompositeConstruct %180 %25 %25 %25 +%297 = OpCompositeConstruct %180 %26 %26 %26 +%298 = OpBitwiseXor %180 %296 %297 +%299 = OpShiftLeftLogical %8 %18 %26 +%300 = OpShiftLeftLogical %20 %25 %26 +%301 = OpCompositeConstruct %169 %18 %18 +%302 = OpCompositeConstruct %35 %26 %26 +%303 = OpShiftLeftLogical %169 %301 %302 +%304 = OpCompositeConstruct %180 %25 %25 %25 +%305 = OpCompositeConstruct %180 %26 %26 %26 +%306 = OpShiftLeftLogical %180 %304 %305 +%307 = OpShiftRightArithmetic %8 %18 %26 +%308 = OpShiftRightLogical %20 %25 %26 +%309 = OpCompositeConstruct %169 %18 %18 +%310 = OpCompositeConstruct %35 %26 %26 +%311 = OpShiftRightArithmetic %169 %309 %310 +%312 = OpCompositeConstruct %180 %25 %25 %25 +%313 = OpCompositeConstruct %180 %26 %26 %26 +%314 = OpShiftRightLogical %180 %312 %313 OpReturn OpFunctionEnd -%179 = OpFunction %2 None %152 -%178 = OpLabel -%177 = OpVariable %111 Function %7 -OpBranch %180 -%180 = OpLabel -%181 = OpLoad %8 %177 -%182 = OpIAdd %8 %181 %7 -OpStore %177 %182 -%183 = OpLoad %8 %177 -%184 = OpISub %8 %183 %7 -OpStore %177 %184 -%185 = OpLoad %8 %177 -%186 = OpLoad %8 %177 -%187 = OpIMul %8 %185 %186 -OpStore %177 %187 -%188 = OpLoad %8 %177 -%189 = OpLoad %8 %177 -%190 = OpSDiv %8 %188 %189 -OpStore %177 %190 -%191 = OpLoad %8 %177 -%192 = OpSMod %8 %191 %7 -OpStore %177 %192 -%193 = OpLoad %8 %177 -%194 = OpBitwiseXor %8 %193 %11 -OpStore %177 %194 -%195 = OpLoad %8 %177 -%196 = OpBitwiseAnd %8 %195 %11 -OpStore %177 %196 -%197 = OpLoad %8 %177 -%198 = OpIAdd %8 %197 %7 -OpStore %177 %198 -%199 = OpLoad %8 %177 -%200 = OpISub %8 %199 %7 -OpStore %177 %200 +%316 = OpFunction %2 None %153 +%315 = OpLabel +OpBranch %317 +%317 = OpLabel +%318 = OpIEqual %10 %18 %7 +%319 = OpIEqual %10 %25 %26 +%320 = OpFOrdEqual %10 %14 %3 +%321 = OpCompositeConstruct %169 %18 %18 +%322 = OpCompositeConstruct %169 %7 %7 +%324 = OpIEqual %323 %321 %322 +%325 = OpCompositeConstruct %180 %25 %25 %25 +%326 = OpCompositeConstruct %180 %26 %26 %26 +%327 = OpIEqual %101 %325 %326 +%328 = OpCompositeConstruct %27 %14 %14 %14 %14 +%329 = OpCompositeConstruct %27 %3 %3 %3 %3 +%330 = OpFOrdEqual %29 %328 %329 +%331 = OpINotEqual %10 %18 %7 +%332 = OpINotEqual %10 %25 %26 +%333 = OpFOrdNotEqual %10 %14 %3 +%334 = OpCompositeConstruct %169 %18 %18 +%335 = OpCompositeConstruct %169 %7 %7 +%336 = OpINotEqual %323 %334 %335 +%337 = OpCompositeConstruct %180 %25 %25 %25 +%338 = OpCompositeConstruct %180 %26 %26 %26 +%339 = OpINotEqual %101 %337 %338 +%340 = OpCompositeConstruct %27 %14 %14 %14 %14 +%341 = OpCompositeConstruct %27 %3 %3 %3 %3 +%342 = OpFOrdNotEqual %29 %340 %341 +%343 = OpSLessThan %10 %18 %7 +%344 = OpULessThan %10 %25 %26 +%345 = OpFOrdLessThan %10 %14 %3 +%346 = OpCompositeConstruct %169 %18 %18 +%347 = OpCompositeConstruct %169 %7 %7 +%348 = OpSLessThan %323 %346 %347 +%349 = OpCompositeConstruct %180 %25 %25 %25 +%350 = OpCompositeConstruct %180 %26 %26 %26 +%351 = OpULessThan %101 %349 %350 +%352 = OpCompositeConstruct %27 %14 %14 %14 %14 +%353 = OpCompositeConstruct %27 %3 %3 %3 %3 +%354 = OpFOrdLessThan %29 %352 %353 +%355 = OpSLessThanEqual %10 %18 %7 +%356 = OpULessThanEqual %10 %25 %26 +%357 = OpFOrdLessThanEqual %10 %14 %3 +%358 = OpCompositeConstruct %169 %18 %18 +%359 = OpCompositeConstruct %169 %7 %7 +%360 = OpSLessThanEqual %323 %358 %359 +%361 = OpCompositeConstruct %180 %25 %25 %25 +%362 = OpCompositeConstruct %180 %26 %26 %26 +%363 = OpULessThanEqual %101 %361 %362 +%364 = OpCompositeConstruct %27 %14 %14 %14 %14 +%365 = OpCompositeConstruct %27 %3 %3 %3 %3 +%366 = OpFOrdLessThanEqual %29 %364 %365 +%367 = OpSGreaterThan %10 %18 %7 +%368 = OpUGreaterThan %10 %25 %26 +%369 = OpFOrdGreaterThan %10 %14 %3 +%370 = OpCompositeConstruct %169 %18 %18 +%371 = OpCompositeConstruct %169 %7 %7 +%372 = OpSGreaterThan %323 %370 %371 +%373 = OpCompositeConstruct %180 %25 %25 %25 +%374 = OpCompositeConstruct %180 %26 %26 %26 +%375 = OpUGreaterThan %101 %373 %374 +%376 = OpCompositeConstruct %27 %14 %14 %14 %14 +%377 = OpCompositeConstruct %27 %3 %3 %3 %3 +%378 = OpFOrdGreaterThan %29 %376 %377 +%379 = OpSGreaterThanEqual %10 %18 %7 +%380 = OpUGreaterThanEqual %10 %25 %26 +%381 = OpFOrdGreaterThanEqual %10 %14 %3 +%382 = OpCompositeConstruct %169 %18 %18 +%383 = OpCompositeConstruct %169 %7 %7 +%384 = OpSGreaterThanEqual %323 %382 %383 +%385 = OpCompositeConstruct %180 %25 %25 %25 +%386 = OpCompositeConstruct %180 %26 %26 %26 +%387 = OpUGreaterThanEqual %101 %385 %386 +%388 = OpCompositeConstruct %27 %14 %14 %14 %14 +%389 = OpCompositeConstruct %27 %3 %3 %3 %3 +%390 = OpFOrdGreaterThanEqual %29 %388 %389 OpReturn OpFunctionEnd -%202 = OpFunction %2 None %152 -%201 = OpLabel -OpBranch %203 -%203 = OpLabel -%204 = OpFunctionCall %23 %45 -%205 = OpFunctionCall %23 %70 -%206 = OpFunctionCall %8 %86 -%207 = OpVectorShuffle %26 %34 %34 0 1 2 -%208 = OpFunctionCall %26 %97 %207 -%209 = OpFunctionCall %4 %128 -%210 = OpFunctionCall %2 %151 -%211 = OpFunctionCall %2 %164 -%212 = OpFunctionCall %2 %173 -%213 = OpFunctionCall %2 %179 +%393 = OpFunction %2 None %153 +%392 = OpLabel +%391 = OpVariable %112 Function %7 +OpBranch %394 +%394 = OpLabel +%395 = OpLoad %8 %391 +%396 = OpIAdd %8 %395 %7 +OpStore %391 %396 +%397 = OpLoad %8 %391 +%398 = OpISub %8 %397 %7 +OpStore %391 %398 +%399 = OpLoad %8 %391 +%400 = OpLoad %8 %391 +%401 = OpIMul %8 %399 %400 +OpStore %391 %401 +%402 = OpLoad %8 %391 +%403 = OpLoad %8 %391 +%404 = OpSDiv %8 %402 %403 +OpStore %391 %404 +%405 = OpLoad %8 %391 +%406 = OpSMod %8 %405 %7 +OpStore %391 %406 +%407 = OpLoad %8 %391 +%408 = OpBitwiseAnd %8 %407 %11 +OpStore %391 %408 +%409 = OpLoad %8 %391 +%410 = OpBitwiseOr %8 %409 %11 +OpStore %391 %410 +%411 = OpLoad %8 %391 +%412 = OpBitwiseXor %8 %411 %11 +OpStore %391 %412 +%413 = OpLoad %8 %391 +%414 = OpShiftLeftLogical %8 %413 %25 +OpStore %391 %414 +%415 = OpLoad %8 %391 +%416 = OpShiftRightArithmetic %8 %415 %26 +OpStore %391 %416 +%417 = OpLoad %8 %391 +%418 = OpIAdd %8 %417 %7 +OpStore %391 %418 +%419 = OpLoad %8 %391 +%420 = OpISub %8 %419 %7 +OpStore %391 %420 +OpReturn +OpFunctionEnd +%422 = OpFunction %2 None %153 +%421 = OpLabel +OpBranch %423 +%423 = OpLabel +%424 = OpFunctionCall %27 %56 +%425 = OpFunctionCall %27 %81 +%426 = OpVectorShuffle %30 %41 %41 0 1 2 +%427 = OpFunctionCall %30 %98 %426 +%428 = OpFunctionCall %4 %129 +%429 = OpFunctionCall %2 %152 +%430 = OpFunctionCall %2 %167 +%431 = OpFunctionCall %2 %271 +%432 = OpFunctionCall %2 %316 +%433 = OpFunctionCall %2 %393 OpReturn OpFunctionEnd \ No newline at end of file diff --git a/tests/out/wgsl/operators.wgsl b/tests/out/wgsl/operators.wgsl index d2ce238570..297b752402 100644 --- a/tests/out/wgsl/operators.wgsl +++ b/tests/out/wgsl/operators.wgsl @@ -25,14 +25,6 @@ fn splat() -> vec4 { return (a_1.xyxy + vec4(b)); } -fn unary() -> i32 { - if !(true) { - return 1; - } else { - return ~(1); - } -} - fn bool_cast(x: vec3) -> vec3 { let y = vec3(x); return vec3(y); @@ -62,24 +54,131 @@ fn constructors() -> f32 { return _e70; } -fn modulo() { - let a_2 = (1 % 1); - let b_1 = (1.0 % 1.0); - let c = (vec3(1) % vec3(1)); - let d = (vec3(1.0) % vec3(1.0)); -} - -fn scalar_times_matrix() { - let model = 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)); - let assertion = (2.0 * model); -} - fn logical() { - let a_3 = (true | false); - let b_2 = (true & false); + let unnamed_11 = !(true); + let unnamed_12 = (true || false); + let unnamed_13 = (true && false); + let unnamed_14 = (true | false); + let unnamed_15 = (vec3(true) | vec3(false)); + let unnamed_16 = (true & false); + let unnamed_17 = (vec4(true) & vec4(false)); } -fn binary_assignment() { +fn arithmetic() { + let unnamed_18 = -(vec2(1)); + let unnamed_19 = -(vec2(1.0)); + let unnamed_20 = (2 + 1); + let unnamed_21 = (2u + 1u); + let unnamed_22 = (2.0 + 1.0); + let unnamed_23 = (vec2(2) + vec2(1)); + let unnamed_24 = (vec3(2u) + vec3(1u)); + let unnamed_25 = (vec4(2.0) + vec4(1.0)); + let unnamed_26 = (2 - 1); + let unnamed_27 = (2u - 1u); + let unnamed_28 = (2.0 - 1.0); + let unnamed_29 = (vec2(2) - vec2(1)); + let unnamed_30 = (vec3(2u) - vec3(1u)); + let unnamed_31 = (vec4(2.0) - vec4(1.0)); + let unnamed_32 = (2 * 1); + let unnamed_33 = (2u * 1u); + let unnamed_34 = (2.0 * 1.0); + let unnamed_35 = (vec2(2) * vec2(1)); + let unnamed_36 = (vec3(2u) * vec3(1u)); + let unnamed_37 = (vec4(2.0) * vec4(1.0)); + let unnamed_38 = (2 / 1); + let unnamed_39 = (2u / 1u); + let unnamed_40 = (2.0 / 1.0); + let unnamed_41 = (vec2(2) / vec2(1)); + let unnamed_42 = (vec3(2u) / vec3(1u)); + let unnamed_43 = (vec4(2.0) / vec4(1.0)); + let unnamed_44 = (2 % 1); + let unnamed_45 = (2u % 1u); + let unnamed_46 = (2.0 % 1.0); + let unnamed_47 = (vec2(2) % vec2(1)); + let unnamed_48 = (vec3(2u) % vec3(1u)); + let unnamed_49 = (vec4(2.0) % vec4(1.0)); + let unnamed_50 = (vec2(2) + vec2(1)); + let unnamed_51 = (vec2(2) + vec2(1)); + let unnamed_52 = (vec2(2) - vec2(1)); + let unnamed_53 = (vec2(2) - vec2(1)); + let unnamed_54 = (vec2(2) * 1); + let unnamed_55 = (2 * vec2(1)); + let unnamed_56 = (vec2(2) / vec2(1)); + let unnamed_57 = (vec2(2) / vec2(1)); + let unnamed_58 = (vec2(2) % vec2(1)); + let unnamed_59 = (vec2(2) % vec2(1)); + let unnamed_60 = (mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)) * 1.0); + let unnamed_61 = (2.0 * mat3x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0))); + let unnamed_62 = (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)); + let unnamed_63 = (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))); + let unnamed_64 = (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))); +} + +fn bit() { + let unnamed_65 = ~(1); + let unnamed_66 = ~(1u); + let unnamed_67 = (2 | 1); + let unnamed_68 = (2u | 1u); + let unnamed_69 = (vec2(2) | vec2(1)); + let unnamed_70 = (vec3(2u) | vec3(1u)); + let unnamed_71 = (2 & 1); + let unnamed_72 = (2u & 1u); + let unnamed_73 = (vec2(2) & vec2(1)); + let unnamed_74 = (vec3(2u) & vec3(1u)); + let unnamed_75 = (2 ^ 1); + let unnamed_76 = (2u ^ 1u); + let unnamed_77 = (vec2(2) ^ vec2(1)); + let unnamed_78 = (vec3(2u) ^ vec3(1u)); + let unnamed_79 = (2 << 1u); + let unnamed_80 = (2u << 1u); + let unnamed_81 = (vec2(2) << vec2(1u)); + let unnamed_82 = (vec3(2u) << vec3(1u)); + let unnamed_83 = (2 >> 1u); + let unnamed_84 = (2u >> 1u); + let unnamed_85 = (vec2(2) >> vec2(1u)); + let unnamed_86 = (vec3(2u) >> vec3(1u)); +} + +fn comparison() { + let unnamed_87 = (2 == 1); + let unnamed_88 = (2u == 1u); + let unnamed_89 = (2.0 == 1.0); + let unnamed_90 = (vec2(2) == vec2(1)); + let unnamed_91 = (vec3(2u) == vec3(1u)); + let unnamed_92 = (vec4(2.0) == vec4(1.0)); + let unnamed_93 = (2 != 1); + let unnamed_94 = (2u != 1u); + let unnamed_95 = (2.0 != 1.0); + let unnamed_96 = (vec2(2) != vec2(1)); + let unnamed_97 = (vec3(2u) != vec3(1u)); + let unnamed_98 = (vec4(2.0) != vec4(1.0)); + let unnamed_99 = (2 < 1); + let unnamed_100 = (2u < 1u); + let unnamed_101 = (2.0 < 1.0); + let unnamed_102 = (vec2(2) < vec2(1)); + let unnamed_103 = (vec3(2u) < vec3(1u)); + let unnamed_104 = (vec4(2.0) < vec4(1.0)); + let unnamed_105 = (2 <= 1); + let unnamed_106 = (2u <= 1u); + let unnamed_107 = (2.0 <= 1.0); + let unnamed_108 = (vec2(2) <= vec2(1)); + let unnamed_109 = (vec3(2u) <= vec3(1u)); + let unnamed_110 = (vec4(2.0) <= vec4(1.0)); + let unnamed_111 = (2 > 1); + let unnamed_112 = (2u > 1u); + let unnamed_113 = (2.0 > 1.0); + let unnamed_114 = (vec2(2) > vec2(1)); + let unnamed_115 = (vec3(2u) > vec3(1u)); + let unnamed_116 = (vec4(2.0) > vec4(1.0)); + let unnamed_117 = (2 >= 1); + let unnamed_118 = (2u >= 1u); + let unnamed_119 = (2.0 >= 1.0); + let unnamed_120 = (vec2(2) >= vec2(1)); + let unnamed_121 = (vec3(2u) >= vec3(1u)); + let unnamed_122 = (vec4(2.0) >= vec4(1.0)); +} + +fn assignment() { var a: i32 = 1; let _e6 = a; @@ -95,13 +194,19 @@ fn binary_assignment() { let _e18 = a; a = (_e18 % 1); let _e21 = a; - a = (_e21 ^ 0); + a = (_e21 & 0); let _e24 = a; - a = (_e24 & 0); + a = (_e24 | 0); let _e27 = a; - a = (_e27 + 1); + a = (_e27 ^ 0); let _e30 = a; - a = (_e30 - 1); + a = (_e30 << 2u); + let _e33 = a; + a = (_e33 >> 1u); + let _e36 = a; + a = (_e36 + 1); + let _e39 = a; + a = (_e39 - 1); return; } @@ -109,12 +214,12 @@ fn binary_assignment() { fn main() { let _e4 = builtins(); let _e5 = splat(); - let _e6 = unary(); - let _e8 = bool_cast(vec4(1.0, 1.0, 1.0, 1.0).xyz); - let _e9 = constructors(); - modulo(); - scalar_times_matrix(); + let _e7 = bool_cast(vec4(1.0, 1.0, 1.0, 1.0).xyz); + let _e8 = constructors(); logical(); - binary_assignment(); + arithmetic(); + bit(); + comparison(); + assignment(); return; }