diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index 5cc4ecc..290f898 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -116,6 +116,13 @@
   return s;
 }
 
+const char* LoopAttribute() {
+  // Force loops not to be unrolled to work around FXC compilation issues when
+  // it attempts and fails to unroll loops when it contains gradient operations.
+  // https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-while
+  return "[loop] ";
+}
+
 }  // namespace
 
 SanitizedResult::SanitizedResult() = default;
@@ -2828,7 +2835,7 @@
   };
 
   TINT_SCOPED_ASSIGNMENT(emit_continuing_, emit_continuing);
-  line() << "while (true) {";
+  line() << LoopAttribute() << "while (true) {";
   {
     ScopedIndent si(this);
     if (!EmitStatements(stmt->body->statements)) {
@@ -2898,7 +2905,7 @@
     };
 
     TINT_SCOPED_ASSIGNMENT(emit_continuing_, emit_continuing);
-    line() << "while (true) {";
+    line() << LoopAttribute() << "while (true) {";
     increment_indent();
     TINT_DEFER({
       decrement_indent();
@@ -2921,7 +2928,7 @@
     // For-loop can be generated.
     {
       auto out = line();
-      out << "for";
+      out << LoopAttribute() << "for";
       {
         ScopedParen sp(out);
 
diff --git a/src/writer/hlsl/generator_impl_continue_test.cc b/src/writer/hlsl/generator_impl_continue_test.cc
index e312b82..80baf57 100644
--- a/src/writer/hlsl/generator_impl_continue_test.cc
+++ b/src/writer/hlsl/generator_impl_continue_test.cc
@@ -30,7 +30,7 @@
   gen.increment_indent();
 
   ASSERT_TRUE(gen.EmitStatement(loop)) << gen.error();
-  EXPECT_EQ(gen.result(), R"(  while (true) {
+  EXPECT_EQ(gen.result(), R"(  [loop] while (true) {
     continue;
   }
 )");
diff --git a/src/writer/hlsl/generator_impl_loop_test.cc b/src/writer/hlsl/generator_impl_loop_test.cc
index a66782e..c6a919f 100644
--- a/src/writer/hlsl/generator_impl_loop_test.cc
+++ b/src/writer/hlsl/generator_impl_loop_test.cc
@@ -34,7 +34,7 @@
   gen.increment_indent();
 
   ASSERT_TRUE(gen.EmitStatement(l)) << gen.error();
-  EXPECT_EQ(gen.result(), R"(  while (true) {
+  EXPECT_EQ(gen.result(), R"(  [loop] while (true) {
     discard;
   }
 )");
@@ -54,7 +54,7 @@
   gen.increment_indent();
 
   ASSERT_TRUE(gen.EmitStatement(l)) << gen.error();
-  EXPECT_EQ(gen.result(), R"(  while (true) {
+  EXPECT_EQ(gen.result(), R"(  [loop] while (true) {
     discard;
     {
       a_statement();
@@ -88,8 +88,8 @@
   gen.increment_indent();
 
   ASSERT_TRUE(gen.EmitStatement(outer)) << gen.error();
-  EXPECT_EQ(gen.result(), R"(  while (true) {
-    while (true) {
+  EXPECT_EQ(gen.result(), R"(  [loop] while (true) {
+    [loop] while (true) {
       discard;
       {
         a_statement();
@@ -142,7 +142,7 @@
   gen.increment_indent();
 
   ASSERT_TRUE(gen.EmitStatement(outer)) << gen.error();
-  EXPECT_EQ(gen.result(), R"(  while (true) {
+  EXPECT_EQ(gen.result(), R"(  [loop] while (true) {
     float lhs = 2.400000095f;
     float other = 0.0f;
     {
@@ -169,7 +169,7 @@
 
   ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
   EXPECT_EQ(gen.result(), R"(  {
-    for(; ; ) {
+    [loop] for(; ; ) {
       a_statement();
     }
   }
@@ -193,7 +193,7 @@
 
   ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
   EXPECT_EQ(gen.result(), R"(  {
-    for(int i = 0; ; ) {
+    [loop] for(int i = 0; ; ) {
       a_statement();
     }
   }
@@ -223,7 +223,7 @@
       tint_tmp = false;
     }
     bool b = (tint_tmp);
-    for(; ; ) {
+    [loop] for(; ; ) {
       a_statement();
     }
   }
@@ -246,7 +246,7 @@
 
   ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
   EXPECT_EQ(gen.result(), R"(  {
-    for(; true; ) {
+    [loop] for(; true; ) {
       a_statement();
     }
   }
@@ -272,7 +272,7 @@
 
   ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
   EXPECT_EQ(gen.result(), R"(  {
-    while (true) {
+    [loop] while (true) {
       bool tint_tmp = true;
       if (tint_tmp) {
         tint_tmp = false;
@@ -302,7 +302,7 @@
 
   ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
   EXPECT_EQ(gen.result(), R"(  {
-    for(; ; i = (i + 1)) {
+    [loop] for(; ; i = (i + 1)) {
       a_statement();
     }
   }
@@ -329,7 +329,7 @@
 
   ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
   EXPECT_EQ(gen.result(), R"(  {
-    while (true) {
+    [loop] while (true) {
       a_statement();
       bool tint_tmp = true;
       if (tint_tmp) {
@@ -358,7 +358,7 @@
 
   ASSERT_TRUE(gen.EmitStatement(f)) << gen.error();
   EXPECT_EQ(gen.result(), R"(  {
-    for(int i = 0; true; i = (i + 1)) {
+    [loop] for(int i = 0; true; i = (i + 1)) {
       a_statement();
     }
   }
@@ -394,7 +394,7 @@
       tint_tmp = false;
     }
     bool i = (tint_tmp);
-    while (true) {
+    [loop] while (true) {
       bool tint_tmp_1 = true;
       if (tint_tmp_1) {
         tint_tmp_1 = false;
diff --git a/test/array/assign_to_function_var.wgsl.expected.hlsl b/test/array/assign_to_function_var.wgsl.expected.hlsl
index 5b15fc1..f5c4ff0 100644
--- a/test/array/assign_to_function_var.wgsl.expected.hlsl
+++ b/test/array/assign_to_function_var.wgsl.expected.hlsl
@@ -32,7 +32,7 @@
 tint_symbol_1_ret tint_symbol_1(uint4 buffer[4], uint offset) {
   tint_padded_array_element arr_1[4] = (tint_padded_array_element[4])0;
   {
-    for(uint i = 0u; (i < 4u); i = (i + 1u)) {
+    [loop] for(uint i = 0u; (i < 4u); i = (i + 1u)) {
       const uint scalar_offset = ((offset + (i * 16u))) / 4;
       arr_1[i].el = asint(buffer[scalar_offset / 4][scalar_offset % 4]);
     }
@@ -44,7 +44,7 @@
 tint_symbol_3_ret tint_symbol_3(RWByteAddressBuffer buffer, uint offset) {
   tint_padded_array_element arr_2[4] = (tint_padded_array_element[4])0;
   {
-    for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
+    [loop] for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
       arr_2[i_1].el = asint(buffer.Load((offset + (i_1 * 16u))));
     }
   }
diff --git a/test/array/assign_to_private_var.wgsl.expected.hlsl b/test/array/assign_to_private_var.wgsl.expected.hlsl
index 8cd8ee1..4fd9d45 100644
--- a/test/array/assign_to_private_var.wgsl.expected.hlsl
+++ b/test/array/assign_to_private_var.wgsl.expected.hlsl
@@ -34,7 +34,7 @@
 tint_symbol_1_ret tint_symbol_1(uint4 buffer[4], uint offset) {
   tint_padded_array_element arr_1[4] = (tint_padded_array_element[4])0;
   {
-    for(uint i = 0u; (i < 4u); i = (i + 1u)) {
+    [loop] for(uint i = 0u; (i < 4u); i = (i + 1u)) {
       const uint scalar_offset = ((offset + (i * 16u))) / 4;
       arr_1[i].el = asint(buffer[scalar_offset / 4][scalar_offset % 4]);
     }
@@ -46,7 +46,7 @@
 tint_symbol_3_ret tint_symbol_3(RWByteAddressBuffer buffer, uint offset) {
   tint_padded_array_element arr_2[4] = (tint_padded_array_element[4])0;
   {
-    for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
+    [loop] for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
       arr_2[i_1].el = asint(buffer.Load((offset + (i_1 * 16u))));
     }
   }
diff --git a/test/array/assign_to_storage_var.wgsl.expected.hlsl b/test/array/assign_to_storage_var.wgsl.expected.hlsl
index 8825ef3..8e9d0b6 100644
--- a/test/array/assign_to_storage_var.wgsl.expected.hlsl
+++ b/test/array/assign_to_storage_var.wgsl.expected.hlsl
@@ -33,7 +33,7 @@
 void tint_symbol_1(RWByteAddressBuffer buffer, uint offset, tint_padded_array_element value[4]) {
   tint_padded_array_element array[4] = value;
   {
-    for(uint i = 0u; (i < 4u); i = (i + 1u)) {
+    [loop] for(uint i = 0u; (i < 4u); i = (i + 1u)) {
       buffer.Store((offset + (i * 16u)), asuint(array[i].el));
     }
   }
@@ -43,7 +43,7 @@
 tint_symbol_3_ret tint_symbol_3(uint4 buffer[4], uint offset) {
   tint_padded_array_element arr_1[4] = (tint_padded_array_element[4])0;
   {
-    for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
+    [loop] for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
       const uint scalar_offset = ((offset + (i_1 * 16u))) / 4;
       arr_1[i_1].el = asint(buffer[scalar_offset / 4][scalar_offset % 4]);
     }
@@ -55,7 +55,7 @@
 tint_symbol_5_ret tint_symbol_5(RWByteAddressBuffer buffer, uint offset) {
   tint_padded_array_element arr_2[4] = (tint_padded_array_element[4])0;
   {
-    for(uint i_2 = 0u; (i_2 < 4u); i_2 = (i_2 + 1u)) {
+    [loop] for(uint i_2 = 0u; (i_2 < 4u); i_2 = (i_2 + 1u)) {
       arr_2[i_2].el = asint(buffer.Load((offset + (i_2 * 16u))));
     }
   }
@@ -65,7 +65,7 @@
 void tint_symbol_9(RWByteAddressBuffer buffer, uint offset, int value[2]) {
   int array_3[2] = value;
   {
-    for(uint i_3 = 0u; (i_3 < 2u); i_3 = (i_3 + 1u)) {
+    [loop] for(uint i_3 = 0u; (i_3 < 2u); i_3 = (i_3 + 1u)) {
       buffer.Store((offset + (i_3 * 4u)), asuint(array_3[i_3]));
     }
   }
@@ -74,7 +74,7 @@
 void tint_symbol_8(RWByteAddressBuffer buffer, uint offset, int value[3][2]) {
   int array_2[3][2] = value;
   {
-    for(uint i_4 = 0u; (i_4 < 3u); i_4 = (i_4 + 1u)) {
+    [loop] for(uint i_4 = 0u; (i_4 < 3u); i_4 = (i_4 + 1u)) {
       tint_symbol_9(buffer, (offset + (i_4 * 8u)), array_2[i_4]);
     }
   }
@@ -83,7 +83,7 @@
 void tint_symbol_7(RWByteAddressBuffer buffer, uint offset, int value[4][3][2]) {
   int array_1[4][3][2] = value;
   {
-    for(uint i_5 = 0u; (i_5 < 4u); i_5 = (i_5 + 1u)) {
+    [loop] for(uint i_5 = 0u; (i_5 < 4u); i_5 = (i_5 + 1u)) {
       tint_symbol_8(buffer, (offset + (i_5 * 24u)), array_1[i_5]);
     }
   }
diff --git a/test/array/assign_to_workgroup_var.wgsl.expected.hlsl b/test/array/assign_to_workgroup_var.wgsl.expected.hlsl
index 43a8a1c..b60b974 100644
--- a/test/array/assign_to_workgroup_var.wgsl.expected.hlsl
+++ b/test/array/assign_to_workgroup_var.wgsl.expected.hlsl
@@ -34,7 +34,7 @@
 tint_symbol_1_ret tint_symbol_1(uint4 buffer[4], uint offset) {
   tint_padded_array_element arr_1[4] = (tint_padded_array_element[4])0;
   {
-    for(uint i = 0u; (i < 4u); i = (i + 1u)) {
+    [loop] for(uint i = 0u; (i < 4u); i = (i + 1u)) {
       const uint scalar_offset = ((offset + (i * 16u))) / 4;
       arr_1[i].el = asint(buffer[scalar_offset / 4][scalar_offset % 4]);
     }
@@ -46,7 +46,7 @@
 tint_symbol_3_ret tint_symbol_3(RWByteAddressBuffer buffer, uint offset) {
   tint_padded_array_element arr_2[4] = (tint_padded_array_element[4])0;
   {
-    for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
+    [loop] for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
       arr_2[i_1].el = asint(buffer.Load((offset + (i_1 * 16u))));
     }
   }
diff --git a/test/buffer/storage/dynamic_index/read.wgsl.expected.hlsl b/test/buffer/storage/dynamic_index/read.wgsl.expected.hlsl
index 789126b..25056c1 100644
--- a/test/buffer/storage/dynamic_index/read.wgsl.expected.hlsl
+++ b/test/buffer/storage/dynamic_index/read.wgsl.expected.hlsl
@@ -16,7 +16,7 @@
 tint_symbol_11_ret tint_symbol_11(ByteAddressBuffer buffer, uint offset) {
   int4 arr_1[4] = (int4[4])0;
   {
-    for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
+    [loop] for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
       arr_1[i_1] = asint(buffer.Load4((offset + (i_1 * 16u))));
     }
   }
diff --git a/test/buffer/storage/dynamic_index/write.wgsl.expected.hlsl b/test/buffer/storage/dynamic_index/write.wgsl.expected.hlsl
index d267673..3fb60a2 100644
--- a/test/buffer/storage/dynamic_index/write.wgsl.expected.hlsl
+++ b/test/buffer/storage/dynamic_index/write.wgsl.expected.hlsl
@@ -18,7 +18,7 @@
 void tint_symbol_11(RWByteAddressBuffer buffer, uint offset, int4 value[4]) {
   int4 array[4] = value;
   {
-    for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
+    [loop] for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
       buffer.Store4((offset + (i_1 * 16u)), asuint(array[i_1]));
     }
   }
diff --git a/test/buffer/storage/static_index/read.wgsl.expected.hlsl b/test/buffer/storage/static_index/read.wgsl.expected.hlsl
index 42a6a71..667739b 100644
--- a/test/buffer/storage/static_index/read.wgsl.expected.hlsl
+++ b/test/buffer/storage/static_index/read.wgsl.expected.hlsl
@@ -24,7 +24,7 @@
 tint_symbol_10_ret tint_symbol_10(ByteAddressBuffer buffer, uint offset) {
   tint_padded_array_element arr[4] = (tint_padded_array_element[4])0;
   {
-    for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
+    [loop] for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
       arr[i_1].el = tint_symbol_9(buffer, (offset + (i_1 * 16u)));
     }
   }
diff --git a/test/buffer/storage/static_index/write.wgsl.expected.hlsl b/test/buffer/storage/static_index/write.wgsl.expected.hlsl
index 8c9b7ea..8a2e683 100644
--- a/test/buffer/storage/static_index/write.wgsl.expected.hlsl
+++ b/test/buffer/storage/static_index/write.wgsl.expected.hlsl
@@ -25,7 +25,7 @@
 void tint_symbol_10(RWByteAddressBuffer buffer, uint offset, tint_padded_array_element value[4]) {
   tint_padded_array_element array[4] = value;
   {
-    for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
+    [loop] for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
       tint_symbol_9(buffer, (offset + (i_1 * 16u)), array[i_1].el);
     }
   }
diff --git a/test/buffer/uniform/dynamic_index/read.wgsl.expected.hlsl b/test/buffer/uniform/dynamic_index/read.wgsl.expected.hlsl
index b110fb7..0d7bd06 100644
--- a/test/buffer/uniform/dynamic_index/read.wgsl.expected.hlsl
+++ b/test/buffer/uniform/dynamic_index/read.wgsl.expected.hlsl
@@ -26,7 +26,7 @@
 tint_symbol_12_ret tint_symbol_12(uint4 buffer[96], uint offset) {
   int4 arr_1[4] = (int4[4])0;
   {
-    for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
+    [loop] for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
       const uint scalar_offset_5 = ((offset + (i_1 * 16u))) / 4;
       arr_1[i_1] = asint(buffer[scalar_offset_5 / 4]);
     }
diff --git a/test/buffer/uniform/static_index/read.wgsl.expected.hlsl b/test/buffer/uniform/static_index/read.wgsl.expected.hlsl
index f66c81b..9fa1d03 100644
--- a/test/buffer/uniform/static_index/read.wgsl.expected.hlsl
+++ b/test/buffer/uniform/static_index/read.wgsl.expected.hlsl
@@ -35,7 +35,7 @@
 tint_symbol_11_ret tint_symbol_11(uint4 buffer[13], uint offset) {
   tint_padded_array_element arr[4] = (tint_padded_array_element[4])0;
   {
-    for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
+    [loop] for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
       arr[i_1].el = tint_symbol_10(buffer, (offset + (i_1 * 16u)));
     }
   }
diff --git a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.hlsl b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.hlsl
index 0ea2ad6..0c590e4 100644
--- a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.hlsl
+++ b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.hlsl
@@ -15,7 +15,7 @@
 
 void f_inner(uint local_invocation_index) {
   {
-    for(uint idx = local_invocation_index; (idx < 64u); idx = (idx + 1u)) {
+    [loop] for(uint idx = local_invocation_index; (idx < 64u); idx = (idx + 1u)) {
       const uint i = idx;
       s.data[i] = 0;
     }
diff --git a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.hlsl b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.hlsl
index 1098254..5080be8 100644
--- a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.hlsl
+++ b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.hlsl
@@ -15,7 +15,7 @@
 
 void f_inner(uint local_invocation_index) {
   {
-    for(uint idx = local_invocation_index; (idx < 64u); idx = (idx + 1u)) {
+    [loop] for(uint idx = local_invocation_index; (idx < 64u); idx = (idx + 1u)) {
       const uint i = idx;
       s.data[i] = 0;
     }
diff --git a/test/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.hlsl b/test/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.hlsl
index d821643..4c8362a 100644
--- a/test/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.hlsl
+++ b/test/bug/fxc/gradient_in_varying_loop/1112.wgsl.expected.hlsl
@@ -12,7 +12,7 @@
 float4 main_inner(float2 vUV) {
   const float3 random = randomTexture.Sample(tint_symbol, vUV).rgb;
   int i = 0;
-  while (true) {
+  [loop] while (true) {
     if ((i < 1)) {
     } else {
       break;
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.hlsl b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.hlsl
index 7b10259..00000e9 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.hlsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_loop.wgsl.expected.hlsl
@@ -21,7 +21,7 @@
 
 void foo() {
   {
-    for(int i = 0; (i < 2); i = (i + 1)) {
+    [loop] for(int i = 0; (i < 2); i = (i + 1)) {
       set_float2(v2f, i, 1.0f);
       set_int3(v3i, i, 1);
       set_uint4(v4u, i, 1u);
@@ -33,7 +33,7 @@
 [numthreads(1, 1, 1)]
 void main() {
   {
-    for(int i = 0; (i < 2); i = (i + 1)) {
+    [loop] for(int i = 0; (i < 2); i = (i + 1)) {
       foo();
     }
   }
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.hlsl b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.hlsl
index 64b4fea..cc096ac 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.hlsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_call_with_no_loop.wgsl.expected.hlsl
@@ -30,7 +30,7 @@
 [numthreads(1, 1, 1)]
 void main() {
   {
-    for(int i = 0; (i < 2); i = (i + 1)) {
+    [loop] for(int i = 0; (i < 2); i = (i + 1)) {
       foo();
     }
   }
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.hlsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.hlsl
index 158e0e1..13dd87c 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.hlsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl.expected.hlsl
@@ -61,7 +61,7 @@
   bool3 v3b = bool3(false, false, false);
   bool4 v4b = bool4(false, false, false, false);
   {
-    for(int i = 0; (i < 2); i = (i + 1)) {
+    [loop] for(int i = 0; (i < 2); i = (i + 1)) {
       set_float2(v2f, i, 1.0f);
       set_float3(v3f, i, 1.0f);
       set_float4(v4f, i, 1.0f);
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.hlsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.hlsl
index 6cabffe..0c3db07 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.hlsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_repeated.wgsl.expected.hlsl
@@ -25,7 +25,7 @@
   bool2 v2b = bool2(false, false);
   bool2 v2b_2 = bool2(false, false);
   {
-    for(int i = 0; (i < 2); i = (i + 1)) {
+    [loop] for(int i = 0; (i < 2); i = (i + 1)) {
       set_float2(v2f, i, 1.0f);
       set_int3(v3i, i, 1);
       set_uint4(v4u, i, 1u);
diff --git a/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.hlsl b/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.hlsl
index 1461d03..0740864 100644
--- a/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.hlsl
+++ b/test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl.expected.hlsl
@@ -61,7 +61,7 @@
   bool3 v3b = bool3(false, false, false);
   bool4 v4b = bool4(false, false, false, false);
   {
-    for(int i = 0; (i < 2); i = (i + 1)) {
+    [loop] for(int i = 0; (i < 2); i = (i + 1)) {
       set_float2(v2f, i, 1.0f);
       set_int2(v2i, i, 1);
       set_uint2(v2u, i, 1u);
diff --git a/test/bug/tint/1064.wgsl.expected.hlsl b/test/bug/tint/1064.wgsl.expected.hlsl
index 56911a4..ed00540 100644
--- a/test/bug/tint/1064.wgsl.expected.hlsl
+++ b/test/bug/tint/1064.wgsl.expected.hlsl
@@ -1,5 +1,5 @@
 void main() {
-  while (true) {
+  [loop] while (true) {
     if (false) {
     } else {
       break;
diff --git a/test/bug/tint/1081.wgsl.expected.hlsl b/test/bug/tint/1081.wgsl.expected.hlsl
index 056c225..1aba907 100644
--- a/test/bug/tint/1081.wgsl.expected.hlsl
+++ b/test/bug/tint/1081.wgsl.expected.hlsl
@@ -22,7 +22,7 @@
 
 int main_inner(int3 x) {
   int y = x.x;
-  while (true) {
+  [loop] while (true) {
     const int r = f(y);
     if ((r == 0)) {
       break;
diff --git a/test/bug/tint/1121.wgsl.expected.hlsl b/test/bug/tint/1121.wgsl.expected.hlsl
index 12d8865..a5ab12d 100644
--- a/test/bug/tint/1121.wgsl.expected.hlsl
+++ b/test/bug/tint/1121.wgsl.expected.hlsl
@@ -52,9 +52,9 @@
   const int TILE_SIZE = 16;
   const int TILE_COUNT_X = 2;
   {
-    for(int y_1 = 0; (y_1 < 2); y_1 = (y_1 + 1)) {
+    [loop] for(int y_1 = 0; (y_1 < 2); y_1 = (y_1 + 1)) {
       {
-        for(int x_1 = 0; (x_1 < TILE_COUNT_X); x_1 = (x_1 + 1)) {
+        [loop] for(int x_1 = 0; (x_1 < TILE_COUNT_X); x_1 = (x_1 + 1)) {
           int2 tilePixel0Idx = int2((x_1 * TILE_SIZE), (y_1 * TILE_SIZE));
           float2 floorCoord = (((2.0f * float2(tilePixel0Idx)) / asfloat(uniforms[10]).xy) - float2((1.0f).xx));
           float2 ceilCoord = (((2.0f * float2((tilePixel0Idx + int2((TILE_SIZE).xx)))) / asfloat(uniforms[10]).xy) - float2((1.0f).xx));
@@ -66,7 +66,7 @@
           frustumPlanes[3] = float4(0.0f, -1.0f, (viewCeilCoord.y / viewNear), 0.0f);
           float dp = 0.0f;
           {
-            for(uint i = 0u; (i < 6u); i = (i + 1u)) {
+            [loop] for(uint i = 0u; (i < 6u); i = (i + 1u)) {
               float4 p = float4(0.0f, 0.0f, 0.0f, 0.0f);
               if ((frustumPlanes[i].x > 0.0f)) {
                 p.x = boxMax.x;
diff --git a/test/bug/tint/221.wgsl.expected.hlsl b/test/bug/tint/221.wgsl.expected.hlsl
index ea467ea..04406bb 100644
--- a/test/bug/tint/221.wgsl.expected.hlsl
+++ b/test/bug/tint/221.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 [numthreads(1, 1, 1)]
 void main() {
   uint i = 0u;
-  while (true) {
+  [loop] while (true) {
     if ((i >= b.Load(0u))) {
       break;
     }
diff --git a/test/bug/tint/534.wgsl.expected.hlsl b/test/bug/tint/534.wgsl.expected.hlsl
index 03518c7..0bee2d8 100644
--- a/test/bug/tint/534.wgsl.expected.hlsl
+++ b/test/bug/tint/534.wgsl.expected.hlsl
@@ -32,7 +32,7 @@
   uint4 srcColorBits = uint4(0u, 0u, 0u, 0u);
   uint4 dstColorBits = uint4(dstColor);
   {
-    for(uint i = 0u; (i < uniforms[0].w); i = (i + 1u)) {
+    [loop] for(uint i = 0u; (i < uniforms[0].w); i = (i + 1u)) {
       set_uint4(srcColorBits, i, ConvertToFp16FloatValue(srcColor[i]));
       bool tint_tmp_1 = success;
       if (tint_tmp_1) {
diff --git a/test/bug/tint/744.wgsl.expected.hlsl b/test/bug/tint/744.wgsl.expected.hlsl
index 0b1434e..7870d26 100644
--- a/test/bug/tint/744.wgsl.expected.hlsl
+++ b/test/bug/tint/744.wgsl.expected.hlsl
@@ -15,7 +15,7 @@
   const uint dimOutter = uniforms[1].y;
   uint result = 0u;
   {
-    for(uint i = 0u; (i < dimInner); i = (i + 1u)) {
+    [loop] for(uint i = 0u; (i < dimInner); i = (i + 1u)) {
       const uint a = (i + (resultCell.x * dimInner));
       const uint b = (resultCell.y + (i * dimOutter));
       result = (result + (firstMatrix.Load((4u * a)) * secondMatrix.Load((4u * b))));
diff --git a/test/bug/tint/749.spvasm.expected.hlsl b/test/bug/tint/749.spvasm.expected.hlsl
index 3fef834..0b5ecf8 100644
--- a/test/bug/tint/749.spvasm.expected.hlsl
+++ b/test/bug/tint/749.spvasm.expected.hlsl
@@ -153,7 +153,7 @@
   const QuicksortObject tint_symbol_11 = {tint_symbol_10};
   obj = tint_symbol_11;
   obj = x_960;
-  while (true) {
+  [loop] while (true) {
     const int x_961 = pivot;
     pivot = 0;
     pivot = x_961;
@@ -453,7 +453,7 @@
   p = 0;
   p = x_1027;
   stack[x_100_save] = x_99;
-  while (true) {
+  [loop] while (true) {
     const float3 x_566 = float3(x_563.x, x_563.x, x_563.x);
     const int x_1028 = h_1;
     h_1 = 0;
diff --git a/test/bug/tint/757.wgsl.expected.hlsl b/test/bug/tint/757.wgsl.expected.hlsl
index 8be66c6..d144aff 100644
--- a/test/bug/tint/757.wgsl.expected.hlsl
+++ b/test/bug/tint/757.wgsl.expected.hlsl
@@ -14,7 +14,7 @@
   flatIndex = (flatIndex * 1u);
   float4 texel = myTexture.Load(int4(int3(int2(GlobalInvocationID.xy), 0), 0));
   {
-    for(uint i = 0u; (i < 1u); i = (i + 1u)) {
+    [loop] for(uint i = 0u; (i < 1u); i = (i + 1u)) {
       result.Store((4u * (flatIndex + i)), asuint(texel.r));
     }
   }
diff --git a/test/bug/tint/870.spvasm.expected.hlsl b/test/bug/tint/870.spvasm.expected.hlsl
index db19a18..69b21b9 100644
--- a/test/bug/tint/870.spvasm.expected.hlsl
+++ b/test/bug/tint/870.spvasm.expected.hlsl
@@ -4,7 +4,7 @@
 tint_symbol_ret tint_symbol(ByteAddressBuffer buffer, uint offset) {
   int arr[6] = (int[6])0;
   {
-    for(uint i = 0u; (i < 6u); i = (i + 1u)) {
+    [loop] for(uint i = 0u; (i < 6u); i = (i + 1u)) {
       arr[i] = asint(buffer.Load((offset + (i * 4u))));
     }
   }
diff --git a/test/bug/tint/914.wgsl.expected.hlsl b/test/bug/tint/914.wgsl.expected.hlsl
index b4add28..4c2e060 100644
--- a/test/bug/tint/914.wgsl.expected.hlsl
+++ b/test/bug/tint/914.wgsl.expected.hlsl
@@ -56,7 +56,7 @@
 
 void main_inner(uint3 local_id, uint3 global_id, uint local_invocation_index) {
   {
-    for(uint idx = local_invocation_index; (idx < 4096u); idx = (idx + 256u)) {
+    [loop] for(uint idx = local_invocation_index; (idx < 4096u); idx = (idx + 256u)) {
       const uint i = (idx / 64u);
       const uint i_1 = (idx % 64u);
       mm_Asub[i][i_1] = 0.0f;
@@ -73,7 +73,7 @@
   float ACached = 0.0f;
   float BCached[4] = (float[4])0;
   {
-    for(uint index = 0u; (index < (RowPerThread * ColPerThread)); index = (index + 1u)) {
+    [loop] for(uint index = 0u; (index < (RowPerThread * ColPerThread)); index = (index + 1u)) {
       acc[index] = 0.0f;
     }
   }
@@ -82,11 +82,11 @@
   const uint RowPerThreadB = (TileInner / 16u);
   const uint tileRowB = (local_id.y * RowPerThreadB);
   {
-    for(uint t = 0u; (t < numTiles); t = (t + 1u)) {
+    [loop] for(uint t = 0u; (t < numTiles); t = (t + 1u)) {
       {
-        for(uint innerRow = 0u; (innerRow < RowPerThread); innerRow = (innerRow + 1u)) {
+        [loop] for(uint innerRow = 0u; (innerRow < RowPerThread); innerRow = (innerRow + 1u)) {
           {
-            for(uint innerCol = 0u; (innerCol < ColPerThreadA); innerCol = (innerCol + 1u)) {
+            [loop] for(uint innerCol = 0u; (innerCol < ColPerThreadA); innerCol = (innerCol + 1u)) {
               const uint inputRow = (tileRow + innerRow);
               const uint inputCol = (tileColA + innerCol);
               mm_Asub[inputRow][inputCol] = mm_readA((globalRow + innerRow), ((t * TileInner) + inputCol));
@@ -95,9 +95,9 @@
         }
       }
       {
-        for(uint innerRow = 0u; (innerRow < RowPerThreadB); innerRow = (innerRow + 1u)) {
+        [loop] for(uint innerRow = 0u; (innerRow < RowPerThreadB); innerRow = (innerRow + 1u)) {
           {
-            for(uint innerCol = 0u; (innerCol < ColPerThread); innerCol = (innerCol + 1u)) {
+            [loop] for(uint innerCol = 0u; (innerCol < ColPerThread); innerCol = (innerCol + 1u)) {
               const uint inputRow = (tileRowB + innerRow);
               const uint inputCol = (tileCol + innerCol);
               mm_Bsub[innerCol][inputCol] = mm_readB(((t * TileInner) + inputRow), (globalCol + innerCol));
@@ -107,17 +107,17 @@
       }
       GroupMemoryBarrierWithGroupSync();
       {
-        for(uint k = 0u; (k < TileInner); k = (k + 1u)) {
+        [loop] for(uint k = 0u; (k < TileInner); k = (k + 1u)) {
           {
-            for(uint inner = 0u; (inner < ColPerThread); inner = (inner + 1u)) {
+            [loop] for(uint inner = 0u; (inner < ColPerThread); inner = (inner + 1u)) {
               BCached[inner] = mm_Bsub[k][(tileCol + inner)];
             }
           }
           {
-            for(uint innerRow = 0u; (innerRow < RowPerThread); innerRow = (innerRow + 1u)) {
+            [loop] for(uint innerRow = 0u; (innerRow < RowPerThread); innerRow = (innerRow + 1u)) {
               ACached = mm_Asub[(tileRow + innerRow)][k];
               {
-                for(uint innerCol = 0u; (innerCol < ColPerThread); innerCol = (innerCol + 1u)) {
+                [loop] for(uint innerCol = 0u; (innerCol < ColPerThread); innerCol = (innerCol + 1u)) {
                   const uint index = ((innerRow * ColPerThread) + innerCol);
                   acc[index] = (acc[index] + (ACached * BCached[innerCol]));
                 }
@@ -130,9 +130,9 @@
     }
   }
   {
-    for(uint innerRow = 0u; (innerRow < RowPerThread); innerRow = (innerRow + 1u)) {
+    [loop] for(uint innerRow = 0u; (innerRow < RowPerThread); innerRow = (innerRow + 1u)) {
       {
-        for(uint innerCol = 0u; (innerCol < ColPerThread); innerCol = (innerCol + 1u)) {
+        [loop] for(uint innerCol = 0u; (innerCol < ColPerThread); innerCol = (innerCol + 1u)) {
           const uint index = ((innerRow * ColPerThread) + innerCol);
           mm_write((globalRow + innerRow), (globalCol + innerCol), acc[index]);
         }
diff --git a/test/bug/tint/942.wgsl.expected.hlsl b/test/bug/tint/942.wgsl.expected.hlsl
index 2325c62..7c38bdc 100644
--- a/test/bug/tint/942.wgsl.expected.hlsl
+++ b/test/bug/tint/942.wgsl.expected.hlsl
@@ -18,7 +18,7 @@
 
 void main_inner(uint3 WorkGroupID, uint3 LocalInvocationID, uint local_invocation_index) {
   {
-    for(uint idx = local_invocation_index; (idx < 1024u); idx = (idx + 64u)) {
+    [loop] for(uint idx = local_invocation_index; (idx < 1024u); idx = (idx + 64u)) {
       const uint i_1 = (idx / 256u);
       const uint i_2 = (idx % 256u);
       tile[i_1][i_2] = float3(0.0f, 0.0f, 0.0f);
@@ -31,9 +31,9 @@
   const int2 dims = tint_tmp.xy;
   const int2 baseIndex = (int2(((WorkGroupID.xy * uint2(params[0].y, 4u)) + (LocalInvocationID.xy * uint2(4u, 1u)))) - int2(int(filterOffset), 0));
   {
-    for(uint r = 0u; (r < 4u); r = (r + 1u)) {
+    [loop] for(uint r = 0u; (r < 4u); r = (r + 1u)) {
       {
-        for(uint c = 0u; (c < 4u); c = (c + 1u)) {
+        [loop] for(uint c = 0u; (c < 4u); c = (c + 1u)) {
           int2 loadIndex = (baseIndex + int2(int(c), int(r)));
           if ((flip[0].x != 0u)) {
             loadIndex = loadIndex.yx;
@@ -45,9 +45,9 @@
   }
   GroupMemoryBarrierWithGroupSync();
   {
-    for(uint r = 0u; (r < 4u); r = (r + 1u)) {
+    [loop] for(uint r = 0u; (r < 4u); r = (r + 1u)) {
       {
-        for(uint c = 0u; (c < 4u); c = (c + 1u)) {
+        [loop] for(uint c = 0u; (c < 4u); c = (c + 1u)) {
           int2 writeIndex = (baseIndex + int2(int(c), int(r)));
           if ((flip[0].x != 0u)) {
             writeIndex = writeIndex.yx;
@@ -64,7 +64,7 @@
           if ((tint_tmp_1)) {
             float3 acc = float3(0.0f, 0.0f, 0.0f);
             {
-              for(uint f = 0u; (f < params[0].x); f = (f + 1u)) {
+              [loop] for(uint f = 0u; (f < params[0].x); f = (f + 1u)) {
                 uint i = ((center + f) - filterOffset);
                 acc = (acc + ((1.0f / float(params[0].x)) * tile[r][i]));
               }
diff --git a/test/bug/tint/943.spvasm.expected.hlsl b/test/bug/tint/943.spvasm.expected.hlsl
index 38e87d3..bdf9b12 100644
--- a/test/bug/tint/943.spvasm.expected.hlsl
+++ b/test/bug/tint/943.spvasm.expected.hlsl
@@ -186,10 +186,10 @@
   numTiles = (((x_152 - 1) / 64) + 1);
   innerRow = 0;
   {
-    for(; (innerRow < 1); innerRow = (innerRow + 1)) {
+    [loop] for(; (innerRow < 1); innerRow = (innerRow + 1)) {
       innerCol = 0;
       {
-        for(; (innerCol < 1); innerCol = (innerCol + 1)) {
+        [loop] for(; (innerCol < 1); innerCol = (innerCol + 1)) {
           acc[innerRow][innerCol] = 0.0f;
         }
       }
@@ -201,13 +201,13 @@
   tileRowB = (asint(x_192) * 1);
   t = 0;
   {
-    for(; (t < numTiles); t = (t + 1)) {
+    [loop] for(; (t < numTiles); t = (t + 1)) {
       innerRow_1 = 0;
       {
-        for(; (innerRow_1 < 1); innerRow_1 = (innerRow_1 + 1)) {
+        [loop] for(; (innerRow_1 < 1); innerRow_1 = (innerRow_1 + 1)) {
           innerCol_1 = 0;
           {
-            for(; (innerCol_1 < 64); innerCol_1 = (innerCol_1 + 1)) {
+            [loop] for(; (innerCol_1 < 64); innerCol_1 = (innerCol_1 + 1)) {
               inputRow = (tileRow + innerRow_1);
               inputCol = (tileColA + innerCol_1);
               const int x_233 = inputRow;
@@ -224,10 +224,10 @@
       }
       innerRow_2 = 0;
       {
-        for(; (innerRow_2 < 1); innerRow_2 = (innerRow_2 + 1)) {
+        [loop] for(; (innerRow_2 < 1); innerRow_2 = (innerRow_2 + 1)) {
           innerCol_2 = 0;
           {
-            for(; (innerCol_2 < 1); innerCol_2 = (innerCol_2 + 1)) {
+            [loop] for(; (innerCol_2 < 1); innerCol_2 = (innerCol_2 + 1)) {
               inputRow_1 = (tileRowB + innerRow_2);
               inputCol_1 = (tileCol + innerCol_2);
               const int x_278 = inputRow_1;
@@ -245,10 +245,10 @@
       GroupMemoryBarrierWithGroupSync();
       k = 0;
       {
-        for(; (k < 64); k = (k + 1)) {
+        [loop] for(; (k < 64); k = (k + 1)) {
           inner = 0;
           {
-            for(; (inner < 1); inner = (inner + 1)) {
+            [loop] for(; (inner < 1); inner = (inner + 1)) {
               const int x_314 = inner;
               const float x_320 = mm_Bsub[k][(tileCol + inner)];
               BCached[x_314] = x_320;
@@ -256,12 +256,12 @@
           }
           innerRow_3 = 0;
           {
-            for(; (innerRow_3 < 1); innerRow_3 = (innerRow_3 + 1)) {
+            [loop] for(; (innerRow_3 < 1); innerRow_3 = (innerRow_3 + 1)) {
               const float x_338 = mm_Asub[(tileRow + innerRow_3)][k];
               ACached = x_338;
               innerCol_3 = 0;
               {
-                for(; (innerCol_3 < 1); innerCol_3 = (innerCol_3 + 1)) {
+                [loop] for(; (innerCol_3 < 1); innerCol_3 = (innerCol_3 + 1)) {
                   const int x_347 = innerRow_3;
                   const int x_348 = innerCol_3;
                   const float x_349 = ACached;
@@ -279,9 +279,9 @@
   }
   innerRow_4 = 0;
   {
-    for(; (innerRow_4 < 1); innerRow_4 = (innerRow_4 + 1)) {
+    [loop] for(; (innerRow_4 < 1); innerRow_4 = (innerRow_4 + 1)) {
       innerCol_4 = 0;
-      while (true) {
+      [loop] while (true) {
         bool x_393 = false;
         bool x_394_phi = false;
         if ((innerCol_4 < 1)) {
@@ -352,7 +352,7 @@
     mm_Bsub[i_1][i_2] = 0.0f;
   }
   {
-    for(uint idx = local_invocation_index; (idx < 4096u); idx = (idx + 64u)) {
+    [loop] for(uint idx = local_invocation_index; (idx < 4096u); idx = (idx + 64u)) {
       const uint i = (idx / 64u);
       const uint i_1 = (idx % 64u);
       mm_Asub[i][i_1] = 0.0f;
diff --git a/test/bug/tint/948.wgsl.expected.hlsl b/test/bug/tint/948.wgsl.expected.hlsl
index 869f3e3..5a253ad 100644
--- a/test/bug/tint/948.wgsl.expected.hlsl
+++ b/test/bug/tint/948.wgsl.expected.hlsl
@@ -62,7 +62,7 @@
   stageUnits = (float2(1.0f, 1.0f) / x_111);
   i = 0;
   {
-    for(; (i < 2); i = (i + 1)) {
+    [loop] for(; (i < 2); i = (i + 1)) {
       switch(i) {
         case 1: {
           const float2 x_150 = tileID;
@@ -93,7 +93,7 @@
         mt = ((x_181 * x_184) % 1.0f);
         f = 0.0f;
         {
-          for(; (f < 8.0f); f = (f + 1.0f)) {
+          [loop] for(; (f < 8.0f); f = (f + 1.0f)) {
             const float x_197 = animationData.y;
             if ((x_197 > mt)) {
               const float x_203 = animationData.x;
diff --git a/test/bug/tint/949.wgsl.expected.hlsl b/test/bug/tint/949.wgsl.expected.hlsl
index e875c0d..4869166 100644
--- a/test/bug/tint/949.wgsl.expected.hlsl
+++ b/test/bug/tint/949.wgsl.expected.hlsl
@@ -244,7 +244,7 @@
   currSampledHeight = 1.0f;
   i = 0;
   {
-    for(; (i < 15); i = (i + 1)) {
+    [loop] for(; (i < 15); i = (i + 1)) {
       const float4 x_397 = TextureSamplerTexture.Sample(TextureSamplerSampler, (v_uv + vCurrOffset));
       currSampledHeight = x_397.w;
       if ((currSampledHeight > currRayHeight)) {
diff --git a/test/bug/tint/990.wgsl.expected.hlsl b/test/bug/tint/990.wgsl.expected.hlsl
index 80751f8..49ec198 100644
--- a/test/bug/tint/990.wgsl.expected.hlsl
+++ b/test/bug/tint/990.wgsl.expected.hlsl
@@ -6,7 +6,7 @@
 void f() {
   int i = 0;
   {
-    for(; ; ) {
+    [loop] for(; ; ) {
     }
   }
 }
diff --git a/test/layout/storage/mat2x2/stride/16.spvasm.expected.hlsl b/test/layout/storage/mat2x2/stride/16.spvasm.expected.hlsl
index f9ad3ad..18bd54d 100644
--- a/test/layout/storage/mat2x2/stride/16.spvasm.expected.hlsl
+++ b/test/layout/storage/mat2x2/stride/16.spvasm.expected.hlsl
@@ -18,7 +18,7 @@
 tint_symbol_ret tint_symbol(RWByteAddressBuffer buffer, uint offset) {
   tint_padded_array_element arr_1[2] = (tint_padded_array_element[2])0;
   {
-    for(uint i = 0u; (i < 2u); i = (i + 1u)) {
+    [loop] for(uint i = 0u; (i < 2u); i = (i + 1u)) {
       arr_1[i].el = asfloat(buffer.Load2((offset + (i * 16u))));
     }
   }
@@ -28,7 +28,7 @@
 void tint_symbol_2(RWByteAddressBuffer buffer, uint offset, tint_padded_array_element value[2]) {
   tint_padded_array_element array[2] = value;
   {
-    for(uint i_1 = 0u; (i_1 < 2u); i_1 = (i_1 + 1u)) {
+    [loop] for(uint i_1 = 0u; (i_1 < 2u); i_1 = (i_1 + 1u)) {
       buffer.Store2((offset + (i_1 * 16u)), asuint(array[i_1].el));
     }
   }
diff --git a/test/loops/loop.wgsl.expected.hlsl b/test/loops/loop.wgsl.expected.hlsl
index 44b45fd..8eed4b2 100644
--- a/test/loops/loop.wgsl.expected.hlsl
+++ b/test/loops/loop.wgsl.expected.hlsl
@@ -5,7 +5,7 @@
 
 int f() {
   int i = 0;
-  while (true) {
+  [loop] while (true) {
     i = (i + 1);
     if ((i > 4)) {
       return i;
diff --git a/test/loops/loop_with_continuing.wgsl.expected.hlsl b/test/loops/loop_with_continuing.wgsl.expected.hlsl
index 0d57d1f..440ef88 100644
--- a/test/loops/loop_with_continuing.wgsl.expected.hlsl
+++ b/test/loops/loop_with_continuing.wgsl.expected.hlsl
@@ -5,7 +5,7 @@
 
 int f() {
   int i = 0;
-  while (true) {
+  [loop] while (true) {
     if ((i > 4)) {
       return i;
     }
diff --git a/test/loops/nested_loops.wgsl.expected.hlsl b/test/loops/nested_loops.wgsl.expected.hlsl
index 793339e..5278d00 100644
--- a/test/loops/nested_loops.wgsl.expected.hlsl
+++ b/test/loops/nested_loops.wgsl.expected.hlsl
@@ -6,12 +6,12 @@
 int f() {
   int i = 0;
   int j = 0;
-  while (true) {
+  [loop] while (true) {
     i = (i + 1);
     if ((i > 4)) {
       return 1;
     }
-    while (true) {
+    [loop] while (true) {
       j = (j + 1);
       if ((j > 4)) {
         return 2;
diff --git a/test/loops/nested_loops_with_continuing.wgsl.expected.hlsl b/test/loops/nested_loops_with_continuing.wgsl.expected.hlsl
index 9ccdf02..8d795a8 100644
--- a/test/loops/nested_loops_with_continuing.wgsl.expected.hlsl
+++ b/test/loops/nested_loops_with_continuing.wgsl.expected.hlsl
@@ -6,11 +6,11 @@
 int f() {
   int i = 0;
   int j = 0;
-  while (true) {
+  [loop] while (true) {
     if ((i > 4)) {
       return 1;
     }
-    while (true) {
+    [loop] while (true) {
       if ((j > 4)) {
         return 2;
       }
diff --git a/test/samples/compute_boids.wgsl.expected.hlsl b/test/samples/compute_boids.wgsl.expected.hlsl
index a19fa71..b94e5e7 100644
--- a/test/samples/compute_boids.wgsl.expected.hlsl
+++ b/test/samples/compute_boids.wgsl.expected.hlsl
@@ -60,7 +60,7 @@
   float2 pos = float2(0.0f, 0.0f);
   float2 vel = float2(0.0f, 0.0f);
   {
-    for(uint i = 0u; (i < 5u); i = (i + 1u)) {
+    [loop] for(uint i = 0u; (i < 5u); i = (i + 1u)) {
       if ((i == index)) {
         continue;
       }
diff --git a/test/statements/for/basic.wgsl.expected.hlsl b/test/statements/for/basic.wgsl.expected.hlsl
index f215f4b..2236503 100644
--- a/test/statements/for/basic.wgsl.expected.hlsl
+++ b/test/statements/for/basic.wgsl.expected.hlsl
@@ -8,7 +8,7 @@
 
 void f() {
   {
-    for(int i = 0; (i < 5); i = (i + 1)) {
+    [loop] for(int i = 0; (i < 5); i = (i + 1)) {
       some_loop_body();
     }
   }
diff --git a/test/statements/for/complex.wgsl.expected.hlsl b/test/statements/for/complex.wgsl.expected.hlsl
index b48727f..ebc9720 100644
--- a/test/statements/for/complex.wgsl.expected.hlsl
+++ b/test/statements/for/complex.wgsl.expected.hlsl
@@ -10,7 +10,7 @@
   int j = 0;
   {
     int i = 0;
-    while (true) {
+    [loop] while (true) {
       bool tint_tmp = (i < 5);
       if (tint_tmp) {
         tint_tmp = (j < 10);
diff --git a/test/statements/for/condition.wgsl.expected.hlsl b/test/statements/for/condition.wgsl.expected.hlsl
index e4456e0..96122e5 100644
--- a/test/statements/for/condition.wgsl.expected.hlsl
+++ b/test/statements/for/condition.wgsl.expected.hlsl
@@ -6,7 +6,7 @@
 void f() {
   int i = 0;
   {
-    for(; (i < 4); ) {
+    [loop] for(; (i < 4); ) {
     }
   }
 }
diff --git a/test/statements/for/continuing.wgsl.expected.hlsl b/test/statements/for/continuing.wgsl.expected.hlsl
index b3ec736..3e2e847 100644
--- a/test/statements/for/continuing.wgsl.expected.hlsl
+++ b/test/statements/for/continuing.wgsl.expected.hlsl
@@ -6,7 +6,7 @@
 void f() {
   int i = 0;
   {
-    for(; ; i = (i + 1)) {
+    [loop] for(; ; i = (i + 1)) {
     }
   }
 }
diff --git a/test/statements/for/empty.wgsl.expected.hlsl b/test/statements/for/empty.wgsl.expected.hlsl
index cd85e1a..fe6edee 100644
--- a/test/statements/for/empty.wgsl.expected.hlsl
+++ b/test/statements/for/empty.wgsl.expected.hlsl
@@ -5,7 +5,7 @@
 
 void f() {
   {
-    for(; ; ) {
+    [loop] for(; ; ) {
     }
   }
 }
diff --git a/test/statements/for/initializer.wgsl.expected.hlsl b/test/statements/for/initializer.wgsl.expected.hlsl
index e614afd..57b4e10 100644
--- a/test/statements/for/initializer.wgsl.expected.hlsl
+++ b/test/statements/for/initializer.wgsl.expected.hlsl
@@ -5,7 +5,7 @@
 
 void f() {
   {
-    for(int i = 0; ; ) {
+    [loop] for(int i = 0; ; ) {
     }
   }
 }
diff --git a/test/statements/for/scoping.wgsl.expected.hlsl b/test/statements/for/scoping.wgsl.expected.hlsl
index 143b1e3..65cfcf7 100644
--- a/test/statements/for/scoping.wgsl.expected.hlsl
+++ b/test/statements/for/scoping.wgsl.expected.hlsl
@@ -5,7 +5,7 @@
 
 void f() {
   {
-    for(int must_not_collide = 0; ; ) {
+    [loop] for(int must_not_collide = 0; ; ) {
     }
   }
   int must_not_collide = 0;
diff --git a/test/var/initialization/workgroup/array.wgsl.expected.hlsl b/test/var/initialization/workgroup/array.wgsl.expected.hlsl
index 95222e9..21c4cab 100644
--- a/test/var/initialization/workgroup/array.wgsl.expected.hlsl
+++ b/test/var/initialization/workgroup/array.wgsl.expected.hlsl
@@ -6,7 +6,7 @@
 
 void main_inner(uint local_invocation_index) {
   {
-    for(uint idx = local_invocation_index; (idx < 3u); idx = (idx + 1u)) {
+    [loop] for(uint idx = local_invocation_index; (idx < 3u); idx = (idx + 1u)) {
       const uint i = idx;
       v[i] = 0;
     }
