HLSL-IR: Fix fmod polyfill

Order of operations was wrong.

Bug: 375406903
Change-Id: I0a62b122294431200ab313fd996306efb55d6618
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/212834
Auto-Submit: Antonio Maiorano <amaiorano@google.com>
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/lang/hlsl/writer/binary_test.cc b/src/tint/lang/hlsl/writer/binary_test.cc
index a2ff2dc..0494e05 100644
--- a/src/tint/lang/hlsl/writer/binary_test.cc
+++ b/src/tint/lang/hlsl/writer/binary_test.cc
@@ -236,7 +236,7 @@
   float v_1 = right;
   float v_2 = (v / v_1);
   float v_3 = floor(v_2);
-  float val = ((v - (((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3))) * v_1);
+  float val = (v - ((((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
 )");
@@ -266,7 +266,7 @@
   float16_t v_1 = right;
   float16_t v_2 = (v / v_1);
   float16_t v_3 = floor(v_2);
-  float16_t val = ((v - (((v_2 < float16_t(0.0h))) ? (ceil(v_2)) : (v_3))) * v_1);
+  float16_t val = (v - ((((v_2 < float16_t(0.0h))) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
 )");
@@ -296,7 +296,7 @@
   float3 v_1 = right;
   float3 v_2 = (v / v_1);
   float3 v_3 = floor(v_2);
-  float3 val = ((v - (((v_2 < (0.0f).xxx)) ? (ceil(v_2)) : (v_3))) * v_1);
+  float3 val = (v - ((((v_2 < (0.0f).xxx)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
 )");
@@ -326,7 +326,7 @@
   vector<float16_t, 3> v_1 = right;
   vector<float16_t, 3> v_2 = (v / v_1);
   vector<float16_t, 3> v_3 = floor(v_2);
-  vector<float16_t, 3> val = ((v - (((v_2 < (float16_t(0.0h)).xxx)) ? (ceil(v_2)) : (v_3))) * v_1);
+  vector<float16_t, 3> val = (v - ((((v_2 < (float16_t(0.0h)).xxx)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
 )");
diff --git a/src/tint/lang/hlsl/writer/raise/binary_polyfill.cc b/src/tint/lang/hlsl/writer/raise/binary_polyfill.cc
index 93ffba6..542f5fb 100644
--- a/src/tint/lang/hlsl/writer/raise/binary_polyfill.cc
+++ b/src/tint/lang/hlsl/writer/raise/binary_polyfill.cc
@@ -125,9 +125,10 @@
             d->SetValue(div->Result(0));
 
             auto* trunc = b.Call(type, core::BuiltinFn::kTrunc, d);
-            auto* sub = b.Subtract(type, binary->LHS(), trunc);
-            auto* mul = b.Multiply(type, sub, binary->RHS());
-            binary->Result(0)->ReplaceAllUsesWith(mul->Result(0));
+            auto* mul = b.Multiply(type, trunc, binary->RHS());
+            auto* sub = b.Subtract(type, binary->LHS(), mul);
+
+            binary->Result(0)->ReplaceAllUsesWith(sub->Result(0));
         });
         binary->Destroy();
     }
diff --git a/src/tint/lang/hlsl/writer/raise/binary_polyfill_test.cc b/src/tint/lang/hlsl/writer/raise/binary_polyfill_test.cc
index 6b3381f..95161af 100644
--- a/src/tint/lang/hlsl/writer/raise/binary_polyfill_test.cc
+++ b/src/tint/lang/hlsl/writer/raise/binary_polyfill_test.cc
@@ -67,8 +67,8 @@
     %4:f32 = div %x, %y
     %5:f32 = let %4
     %6:f32 = trunc %5
-    %7:f32 = sub %x, %6
-    %8:f32 = mul %7, %y
+    %7:f32 = mul %6, %y
+    %8:f32 = sub %x, %7
     %a:f32 = let %8
     ret
   }
@@ -106,8 +106,8 @@
     %4:f16 = div %x, %y
     %5:f16 = let %4
     %6:f16 = trunc %5
-    %7:f16 = sub %x, %6
-    %8:f16 = mul %7, %y
+    %7:f16 = mul %6, %y
+    %8:f16 = sub %x, %7
     %a:f16 = let %8
     ret
   }
@@ -145,8 +145,8 @@
     %4:vec3<f32> = div %x, %y
     %5:vec3<f32> = let %4
     %6:vec3<f32> = trunc %5
-    %7:vec3<f32> = sub %x, %6
-    %8:vec3<f32> = mul %7, %y
+    %7:vec3<f32> = mul %6, %y
+    %8:vec3<f32> = sub %x, %7
     %a:vec3<f32> = let %8
     ret
   }
@@ -184,8 +184,8 @@
     %4:vec3<f16> = div %x, %y
     %5:vec3<f16> = let %4
     %6:vec3<f16> = trunc %5
-    %7:vec3<f16> = sub %x, %6
-    %8:vec3<f16> = mul %7, %y
+    %7:vec3<f16> = mul %6, %y
+    %8:vec3<f16> = sub %x, %7
     %a:vec3<f16> = let %8
     ret
   }
diff --git a/test/tint/bug/chromium/1434271.wgsl.expected.ir.dxc.hlsl b/test/tint/bug/chromium/1434271.wgsl.expected.ir.dxc.hlsl
index 1ca5ee2..4550e4c 100644
--- a/test/tint/bug/chromium/1434271.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/bug/chromium/1434271.wgsl.expected.ir.dxc.hlsl
@@ -138,7 +138,7 @@
     uint v_19 = (uint(dst_offset) * 4u);
     float v_20 = (sum / 4.0f);
     float v_21 = floor(v_20);
-    buf_out.Store((0u + v_19), asuint(((sum - (((v_20 < 0.0f)) ? (ceil(v_20)) : (v_21))) * 4.0f)));
+    buf_out.Store((0u + v_19), asuint((sum - ((((v_20 < 0.0f)) ? (ceil(v_20)) : (v_21)) * 4.0f))));
     float4 v_22 = float4(a, (a * b), ((a / b) + c), sum);
     float4 probabilities = (v_22 + max(sum, 0.0f));
     tex_out[int2(coord.xy)] = probabilities;
diff --git a/test/tint/bug/tint/948.wgsl.expected.ir.dxc.hlsl b/test/tint/bug/tint/948.wgsl.expected.ir.dxc.hlsl
index f6cbb6c..08c16eb 100644
--- a/test/tint/bug/tint/948.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/bug/tint/948.wgsl.expected.ir.dxc.hlsl
@@ -129,7 +129,7 @@
         float x_184 = animationData.z;
         float v_6 = ((x_181 * x_184) / 1.0f);
         float v_7 = floor(v_6);
-        mt = (((x_181 * x_184) - (((v_6 < 0.0f)) ? (ceil(v_6)) : (v_7))) * 1.0f);
+        mt = ((x_181 * x_184) - ((((v_6 < 0.0f)) ? (ceil(v_6)) : (v_7)) * 1.0f));
         f = 0.0f;
         {
           while(true) {
diff --git a/test/tint/bug/tint/948.wgsl.expected.ir.fxc.hlsl b/test/tint/bug/tint/948.wgsl.expected.ir.fxc.hlsl
index f6cbb6c..08c16eb 100644
--- a/test/tint/bug/tint/948.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/bug/tint/948.wgsl.expected.ir.fxc.hlsl
@@ -129,7 +129,7 @@
         float x_184 = animationData.z;
         float v_6 = ((x_181 * x_184) / 1.0f);
         float v_7 = floor(v_6);
-        mt = (((x_181 * x_184) - (((v_6 < 0.0f)) ? (ceil(v_6)) : (v_7))) * 1.0f);
+        mt = ((x_181 * x_184) - ((((v_6 < 0.0f)) ? (ceil(v_6)) : (v_7)) * 1.0f));
         f = 0.0f;
         {
           while(true) {
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl
index 0fb9d68..bc69276 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl
@@ -5,6 +5,6 @@
   float16_t b = float16_t(2.0h);
   float16_t v = (a / b);
   float16_t v_1 = floor(v);
-  float16_t r = ((a - (((v < float16_t(0.0h))) ? (ceil(v)) : (v_1))) * b);
+  float16_t r = (a - ((((v < float16_t(0.0h))) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl
index 730021d..9908ad0 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl
@@ -5,6 +5,6 @@
   float b = 2.0f;
   float v = (a / b);
   float v_1 = floor(v);
-  float r = ((a - (((v < 0.0f)) ? (ceil(v)) : (v_1))) * b);
+  float r = (a - ((((v < 0.0f)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl
index 730021d..9908ad0 100644
--- a/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl
@@ -5,6 +5,6 @@
   float b = 2.0f;
   float v = (a / b);
   float v_1 = floor(v);
-  float r = ((a - (((v < 0.0f)) ? (ceil(v)) : (v_1))) * b);
+  float r = (a - ((((v < 0.0f)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod/scalar-vec3/f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod/scalar-vec3/f16.wgsl.expected.ir.dxc.hlsl
index 2612d2b..df780c0 100644
--- a/test/tint/expressions/binary/mod/scalar-vec3/f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-vec3/f16.wgsl.expected.ir.dxc.hlsl
@@ -5,6 +5,6 @@
   vector<float16_t, 3> b = vector<float16_t, 3>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h));
   vector<float16_t, 3> v = (a / b);
   vector<float16_t, 3> v_1 = floor(v);
-  vector<float16_t, 3> r = ((a - (((v < (float16_t(0.0h)).xxx)) ? (ceil(v)) : (v_1))) * b);
+  vector<float16_t, 3> r = (a - ((((v < (float16_t(0.0h)).xxx)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod/scalar-vec3/f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod/scalar-vec3/f32.wgsl.expected.ir.dxc.hlsl
index a6cd51c..cfc737a 100644
--- a/test/tint/expressions/binary/mod/scalar-vec3/f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-vec3/f32.wgsl.expected.ir.dxc.hlsl
@@ -5,6 +5,6 @@
   float3 b = float3(1.0f, 2.0f, 3.0f);
   float3 v = (a / b);
   float3 v_1 = floor(v);
-  float3 r = ((a - (((v < (0.0f).xxx)) ? (ceil(v)) : (v_1))) * b);
+  float3 r = (a - ((((v < (0.0f).xxx)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod/scalar-vec3/f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/binary/mod/scalar-vec3/f32.wgsl.expected.ir.fxc.hlsl
index a6cd51c..cfc737a 100644
--- a/test/tint/expressions/binary/mod/scalar-vec3/f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/binary/mod/scalar-vec3/f32.wgsl.expected.ir.fxc.hlsl
@@ -5,6 +5,6 @@
   float3 b = float3(1.0f, 2.0f, 3.0f);
   float3 v = (a / b);
   float3 v_1 = floor(v);
-  float3 r = ((a - (((v < (0.0f).xxx)) ? (ceil(v)) : (v_1))) * b);
+  float3 r = (a - ((((v < (0.0f).xxx)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.ir.dxc.hlsl
index a84f8bd..71d6dba 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/f16.wgsl.expected.ir.dxc.hlsl
@@ -5,6 +5,6 @@
   float16_t b = float16_t(4.0h);
   vector<float16_t, 3> v = (a / b);
   vector<float16_t, 3> v_1 = floor(v);
-  vector<float16_t, 3> r = ((a - (((v < (float16_t(0.0h)).xxx)) ? (ceil(v)) : (v_1))) * b);
+  vector<float16_t, 3> r = (a - ((((v < (float16_t(0.0h)).xxx)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.ir.dxc.hlsl
index 6823cf2..7646188 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.ir.dxc.hlsl
@@ -5,6 +5,6 @@
   float b = 4.0f;
   float3 v = (a / b);
   float3 v_1 = floor(v);
-  float3 r = ((a - (((v < (0.0f).xxx)) ? (ceil(v)) : (v_1))) * b);
+  float3 r = (a - ((((v < (0.0f).xxx)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.ir.fxc.hlsl
index 6823cf2..7646188 100644
--- a/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-scalar/f32.wgsl.expected.ir.fxc.hlsl
@@ -5,6 +5,6 @@
   float b = 4.0f;
   float3 v = (a / b);
   float3 v_1 = floor(v);
-  float3 r = ((a - (((v < (0.0f).xxx)) ? (ceil(v)) : (v_1))) * b);
+  float3 r = (a - ((((v < (0.0f).xxx)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl
index d19be8b..aa56681 100644
--- a/test/tint/expressions/binary/mod/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl
@@ -5,6 +5,6 @@
   vector<float16_t, 3> b = vector<float16_t, 3>(float16_t(4.0h), float16_t(5.0h), float16_t(6.0h));
   vector<float16_t, 3> v = (a / b);
   vector<float16_t, 3> v_1 = floor(v);
-  vector<float16_t, 3> r = ((a - (((v < (float16_t(0.0h)).xxx)) ? (ceil(v)) : (v_1))) * b);
+  vector<float16_t, 3> r = (a - ((((v < (float16_t(0.0h)).xxx)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl
index 6cccbf8..58e0cfb 100644
--- a/test/tint/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl
@@ -5,6 +5,6 @@
   float3 b = float3(4.0f, 5.0f, 6.0f);
   float3 v = (a / b);
   float3 v_1 = floor(v);
-  float3 r = ((a - (((v < (0.0f).xxx)) ? (ceil(v)) : (v_1))) * b);
+  float3 r = (a - ((((v < (0.0f).xxx)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl
index 6cccbf8..58e0cfb 100644
--- a/test/tint/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/binary/mod/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl
@@ -5,6 +5,6 @@
   float3 b = float3(4.0f, 5.0f, 6.0f);
   float3 v = (a / b);
   float3 v_1 = floor(v);
-  float3 r = ((a - (((v < (0.0f).xxx)) ? (ceil(v)) : (v_1))) * b);
+  float3 r = (a - ((((v < (0.0f).xxx)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl
index 15885e9..c2043dc 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl
@@ -5,6 +5,6 @@
   float16_t b = float16_t(0.0h);
   float16_t v = (a / b);
   float16_t v_1 = floor(v);
-  float16_t r = ((a - (((v < float16_t(0.0h))) ? (ceil(v)) : (v_1))) * b);
+  float16_t r = (a - ((((v < float16_t(0.0h))) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl
index 6b72400..b27bda8 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl
@@ -5,6 +5,6 @@
   float b = 0.0f;
   float v = (a / b);
   float v_1 = floor(v);
-  float r = ((a - (((v < 0.0f)) ? (ceil(v)) : (v_1))) * b);
+  float r = (a - ((((v < 0.0f)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl
index 6b72400..b27bda8 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl
@@ -5,6 +5,6 @@
   float b = 0.0f;
   float v = (a / b);
   float v_1 = floor(v);
-  float r = ((a - (((v < 0.0f)) ? (ceil(v)) : (v_1))) * b);
+  float r = (a - ((((v < 0.0f)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl
index f0f2f46..d3b3de6 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl
@@ -5,6 +5,6 @@
   vector<float16_t, 3> b = vector<float16_t, 3>(float16_t(0.0h), float16_t(5.0h), float16_t(0.0h));
   vector<float16_t, 3> v = (a / b);
   vector<float16_t, 3> v_1 = floor(v);
-  vector<float16_t, 3> r = ((a - (((v < (float16_t(0.0h)).xxx)) ? (ceil(v)) : (v_1))) * b);
+  vector<float16_t, 3> r = (a - ((((v < (float16_t(0.0h)).xxx)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl
index db05a09..84e0f7a 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl
@@ -5,6 +5,6 @@
   float3 b = float3(0.0f, 5.0f, 0.0f);
   float3 v = (a / b);
   float3 v_1 = floor(v);
-  float3 r = ((a - (((v < (0.0f).xxx)) ? (ceil(v)) : (v_1))) * b);
+  float3 r = (a - ((((v < (0.0f).xxx)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl
index db05a09..84e0f7a 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_constant/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl
@@ -5,6 +5,6 @@
   float3 b = float3(0.0f, 5.0f, 0.0f);
   float3 v = (a / b);
   float3 v_1 = floor(v);
-  float3 r = ((a - (((v < (0.0f).xxx)) ? (ceil(v)) : (v_1))) * b);
+  float3 r = (a - ((((v < (0.0f).xxx)) ? (ceil(v)) : (v_1)) * b));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl
index 46e181e..b5ab9d7 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl
@@ -7,6 +7,6 @@
   float16_t v_1 = (b + b);
   float16_t v_2 = (v / v_1);
   float16_t v_3 = floor(v_2);
-  float16_t r = ((v - (((v_2 < float16_t(0.0h))) ? (ceil(v_2)) : (v_3))) * v_1);
+  float16_t r = (v - ((((v_2 < float16_t(0.0h))) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl
index 362add9..df08375 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl
@@ -7,6 +7,6 @@
   float v_1 = (b + b);
   float v_2 = (v / v_1);
   float v_3 = floor(v_2);
-  float r = ((v - (((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3))) * v_1);
+  float r = (v - ((((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl
index 362add9..df08375 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl
@@ -7,6 +7,6 @@
   float v_1 = (b + b);
   float v_2 = (v / v_1);
   float v_3 = floor(v_2);
-  float r = ((v - (((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3))) * v_1);
+  float r = (v - ((((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl
index 44e97b4..cec938d 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl
@@ -7,6 +7,6 @@
   vector<float16_t, 3> v_1 = (b + b);
   vector<float16_t, 3> v_2 = (v / v_1);
   vector<float16_t, 3> v_3 = floor(v_2);
-  vector<float16_t, 3> r = ((v - (((v_2 < (float16_t(0.0h)).xxx)) ? (ceil(v_2)) : (v_3))) * v_1);
+  vector<float16_t, 3> r = (v - ((((v_2 < (float16_t(0.0h)).xxx)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl
index ca2e06e..b9893a8 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl
@@ -7,6 +7,6 @@
   float3 v_1 = (b + b);
   float3 v_2 = (v / v_1);
   float3 v_3 = floor(v_2);
-  float3 r = ((v - (((v_2 < (0.0f).xxx)) ? (ceil(v_2)) : (v_3))) * v_1);
+  float3 r = (v - ((((v_2 < (0.0f).xxx)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl
index ca2e06e..b9893a8 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_expression/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl
@@ -7,6 +7,6 @@
   float3 v_1 = (b + b);
   float3 v_2 = (v / v_1);
   float3 v_3 = floor(v_2);
-  float3 r = ((v - (((v_2 < (0.0f).xxx)) ? (ceil(v_2)) : (v_3))) * v_1);
+  float3 r = (v - ((((v_2 < (0.0f).xxx)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl
index 85f8f96..4595a76 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f16.wgsl.expected.ir.dxc.hlsl
@@ -7,6 +7,6 @@
   float16_t v_1 = b;
   float16_t v_2 = (v / v_1);
   float16_t v_3 = floor(v_2);
-  float16_t r = ((v - (((v_2 < float16_t(0.0h))) ? (ceil(v_2)) : (v_3))) * v_1);
+  float16_t r = (v - ((((v_2 < float16_t(0.0h))) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl
index 506db84..a1a03b5 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.dxc.hlsl
@@ -7,6 +7,6 @@
   float v_1 = b;
   float v_2 = (v / v_1);
   float v_3 = floor(v_2);
-  float r = ((v - (((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3))) * v_1);
+  float r = (v - ((((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl
index 506db84..a1a03b5 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/scalar-scalar/f32.wgsl.expected.ir.fxc.hlsl
@@ -7,6 +7,6 @@
   float v_1 = b;
   float v_2 = (v / v_1);
   float v_3 = floor(v_2);
-  float r = ((v - (((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3))) * v_1);
+  float r = (v - ((((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl
index 4d56461..0ef56e6 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f16.wgsl.expected.ir.dxc.hlsl
@@ -7,6 +7,6 @@
   vector<float16_t, 3> v_1 = b;
   vector<float16_t, 3> v_2 = (v / v_1);
   vector<float16_t, 3> v_3 = floor(v_2);
-  vector<float16_t, 3> r = ((v - (((v_2 < (float16_t(0.0h)).xxx)) ? (ceil(v_2)) : (v_3))) * v_1);
+  vector<float16_t, 3> r = (v - ((((v_2 < (float16_t(0.0h)).xxx)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl
index b4827ba..a1e0035 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.dxc.hlsl
@@ -7,6 +7,6 @@
   float3 v_1 = b;
   float3 v_2 = (v / v_1);
   float3 v_3 = floor(v_2);
-  float3 r = ((v - (((v_2 < (0.0f).xxx)) ? (ceil(v_2)) : (v_3))) * v_1);
+  float3 r = (v - ((((v_2 < (0.0f).xxx)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
diff --git a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl
index b4827ba..a1e0035 100644
--- a/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/binary/mod_by_zero/by_identifier/vec3-vec3/f32.wgsl.expected.ir.fxc.hlsl
@@ -7,6 +7,6 @@
   float3 v_1 = b;
   float3 v_2 = (v / v_1);
   float3 v_3 = floor(v_2);
-  float3 r = ((v - (((v_2 < (0.0f).xxx)) ? (ceil(v_2)) : (v_3))) * v_1);
+  float3 r = (v - ((((v_2 < (0.0f).xxx)) ? (ceil(v_2)) : (v_3)) * v_1));
 }
 
diff --git a/test/tint/statements/compound_assign/divide_by_zero.wgsl.expected.ir.dxc.hlsl b/test/tint/statements/compound_assign/divide_by_zero.wgsl.expected.ir.dxc.hlsl
index b07f1c4..fd4a1fc 100644
--- a/test/tint/statements/compound_assign/divide_by_zero.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/statements/compound_assign/divide_by_zero.wgsl.expected.ir.dxc.hlsl
@@ -17,14 +17,14 @@
   float v_1 = b;
   float v_2 = (v_1 / 0.0f);
   float v_3 = floor(v_2);
-  b = ((v_1 - (((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3))) * 0.0f);
+  b = (v_1 - ((((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3)) * 0.0f));
   float v_4 = float(maybe_zero);
   b = (b / v_4);
   float v_5 = float(maybe_zero);
   float v_6 = b;
   float v_7 = (v_6 / v_5);
   float v_8 = floor(v_7);
-  b = ((v_6 - (((v_7 < 0.0f)) ? (ceil(v_7)) : (v_8))) * v_5);
+  b = (v_6 - ((((v_7 < 0.0f)) ? (ceil(v_7)) : (v_8)) * v_5));
 }
 
 [numthreads(1, 1, 1)]
diff --git a/test/tint/statements/compound_assign/divide_by_zero.wgsl.expected.ir.fxc.hlsl b/test/tint/statements/compound_assign/divide_by_zero.wgsl.expected.ir.fxc.hlsl
index b07f1c4..fd4a1fc 100644
--- a/test/tint/statements/compound_assign/divide_by_zero.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/statements/compound_assign/divide_by_zero.wgsl.expected.ir.fxc.hlsl
@@ -17,14 +17,14 @@
   float v_1 = b;
   float v_2 = (v_1 / 0.0f);
   float v_3 = floor(v_2);
-  b = ((v_1 - (((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3))) * 0.0f);
+  b = (v_1 - ((((v_2 < 0.0f)) ? (ceil(v_2)) : (v_3)) * 0.0f));
   float v_4 = float(maybe_zero);
   b = (b / v_4);
   float v_5 = float(maybe_zero);
   float v_6 = b;
   float v_7 = (v_6 / v_5);
   float v_8 = floor(v_7);
-  b = ((v_6 - (((v_7 < 0.0f)) ? (ceil(v_7)) : (v_8))) * v_5);
+  b = (v_6 - ((((v_7 < 0.0f)) ? (ceil(v_7)) : (v_8)) * v_5));
 }
 
 [numthreads(1, 1, 1)]