reader/wgsl: Generate ForLoopStatements

Instead of LoopStatements.

Update the writers to handle these.

Fixed: tint:952
Change-Id: Ibef66e133224810efc28c224d910b5e21f71f8d6
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/57203
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/test/samples/compute_boids.wgsl.expected.wgsl b/test/samples/compute_boids.wgsl.expected.wgsl
index 09cb30f..dd981f4 100644
--- a/test/samples/compute_boids.wgsl.expected.wgsl
+++ b/test/samples/compute_boids.wgsl.expected.wgsl
@@ -52,32 +52,22 @@
   var cVelCount : i32 = 0;
   var pos : vec2<f32>;
   var vel : vec2<f32>;
-  {
-    var i : u32 = 0u;
-    loop {
-      if (!((i < 5u))) {
-        break;
-      }
-      if ((i == index)) {
-        continue;
-      }
-      pos = particlesA.particles[i].pos.xy;
-      vel = particlesA.particles[i].vel.xy;
-      if ((distance(pos, vPos) < params.rule1Distance)) {
-        cMass = (cMass + pos);
-        cMassCount = (cMassCount + 1);
-      }
-      if ((distance(pos, vPos) < params.rule2Distance)) {
-        colVel = (colVel - (pos - vPos));
-      }
-      if ((distance(pos, vPos) < params.rule3Distance)) {
-        cVel = (cVel + vel);
-        cVelCount = (cVelCount + 1);
-      }
-
-      continuing {
-        i = (i + 1u);
-      }
+  for(var i : u32 = 0u; (i < 5u); i = (i + 1u)) {
+    if ((i == index)) {
+      continue;
+    }
+    pos = particlesA.particles[i].pos.xy;
+    vel = particlesA.particles[i].vel.xy;
+    if ((distance(pos, vPos) < params.rule1Distance)) {
+      cMass = (cMass + pos);
+      cMassCount = (cMassCount + 1);
+    }
+    if ((distance(pos, vPos) < params.rule2Distance)) {
+      colVel = (colVel - (pos - vPos));
+    }
+    if ((distance(pos, vPos) < params.rule3Distance)) {
+      cVel = (cVel + vel);
+      cVelCount = (cVelCount + 1);
     }
   }
   if ((cMassCount > 0)) {