Remove if-break deprecation

This CL removes support or if-break and requires the use of break-if.

Bug: tint:1724
Change-Id: I8311de2f0ce11b5af7fada71d258ae441f9e42f8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/111100
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
diff --git a/src/tint/resolver/resolver_behavior_test.cc b/src/tint/resolver/resolver_behavior_test.cc
index 01b7890..6f405a3 100644
--- a/src/tint/resolver/resolver_behavior_test.cc
+++ b/src/tint/resolver/resolver_behavior_test.cc
@@ -557,16 +557,6 @@
     EXPECT_EQ(r()->error(), "12:34 error: loop does not exit");
 }
 
-TEST_F(ResolverBehaviorTest, StmtLoopEmpty_ContIfTrueBreak) {
-    auto* stmt = Loop(Block(), Block(If(true, Block(Break()))));
-    WrapInFunction(stmt);
-
-    ASSERT_TRUE(r()->Resolve()) << r()->error();
-
-    auto* sem = Sem().Get(stmt);
-    EXPECT_EQ(sem->Behaviors(), sem::Behavior::kNext);
-}
-
 TEST_F(ResolverBehaviorTest, StmtLoopEmpty_BreakIf) {
     auto* stmt = Loop(Block(), Block(BreakIf(true)));
     WrapInFunction(stmt);
diff --git a/src/tint/resolver/validation_test.cc b/src/tint/resolver/validation_test.cc
index 85b6967..2e41bf1 100644
--- a/src/tint/resolver/validation_test.cc
+++ b/src/tint/resolver/validation_test.cc
@@ -1029,10 +1029,10 @@
                                                   //   }
                                                   // }
     WrapInFunction(Loop(Block(), cont));
-    EXPECT_TRUE(r()->Resolve()) << r()->error();
+    EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
-              "12:34 warning: use of deprecated language feature: `break` must not be used to exit "
-              "from a continuing block. Use `break-if` instead.");
+              "12:34 error: `break` must not be used to exit from a continuing block. "
+              "Use `break-if` instead.");
 }
 
 TEST_F(ResolverValidationTest, Stmt_BreakInIfElseInContinuing) {
@@ -1043,10 +1043,10 @@
                                              //   }
                                              // }
     WrapInFunction(Loop(Block(), cont));
-    EXPECT_TRUE(r()->Resolve()) << r()->error();
+    EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
-              "12:34 warning: use of deprecated language feature: `break` must not be used to exit "
-              "from a continuing block. Use `break-if` instead.");
+              "12:34 error: `break` must not be used to exit from a continuing block. "
+              "Use `break-if` instead.");
 }
 
 TEST_F(ResolverValidationTest, Stmt_BreakInContinuing) {
@@ -1056,12 +1056,8 @@
     WrapInFunction(Loop(Block(), cont));
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
-              "12:34 warning: use of deprecated language feature: `break` must not be used to exit "
-              "from a continuing block. Use `break-if` instead.\n"
-              "12:34 error: break statement in a continuing block must be the single "
-              "statement of an if statement's true or false block, and that if "
-              "statement must be the last statement of the continuing block\n"
-              "12:34 note: break statement is not directly in if statement block");
+              "12:34 error: `break` must not be used to exit from a continuing block. "
+              "Use `break-if` instead.");
 }
 
 TEST_F(ResolverValidationTest, Stmt_BreakInIfInIfInContinuing) {
@@ -1075,13 +1071,8 @@
     WrapInFunction(Loop(Block(), cont));
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
-              "12:34 warning: use of deprecated language feature: `break` must not be used to exit "
-              "from a continuing block. Use `break-if` instead.\n"
-              "12:34 error: break statement in a continuing block must be the single "
-              "statement of an if statement's true or false block, and that if "
-              "statement must be the last statement of the continuing block\n"
-              "56:78 note: if statement containing break statement is not directly in "
-              "continuing block");
+              "12:34 error: `break` must not be used to exit from a continuing block. "
+              "Use `break-if` instead.");
 }
 
 TEST_F(ResolverValidationTest, Stmt_BreakInIfTrueMultipleStmtsInContinuing) {
@@ -1094,12 +1085,8 @@
     WrapInFunction(Loop(Block(), cont));
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
-              "12:34 warning: use of deprecated language feature: `break` must not be used to exit "
-              "from a continuing block. Use `break-if` instead.\n"
-              "12:34 error: break statement in a continuing block must be the single "
-              "statement of an if statement's true or false block, and that if "
-              "statement must be the last statement of the continuing block\n"
-              "56:78 note: if statement block contains multiple statements");
+              "12:34 error: `break` must not be used to exit from a continuing block. "
+              "Use `break-if` instead.");
 }
 
 TEST_F(ResolverValidationTest, Stmt_BreakInIfElseMultipleStmtsInContinuing) {
@@ -1113,12 +1100,8 @@
     WrapInFunction(Loop(Block(), cont));
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
-              "12:34 warning: use of deprecated language feature: `break` must not be used to exit "
-              "from a continuing block. Use `break-if` instead.\n"
-              "12:34 error: break statement in a continuing block must be the single "
-              "statement of an if statement's true or false block, and that if "
-              "statement must be the last statement of the continuing block\n"
-              "56:78 note: if statement block contains multiple statements");
+              "12:34 error: `break` must not be used to exit from a continuing block. "
+              "Use `break-if` instead.");
 }
 
 TEST_F(ResolverValidationTest, Stmt_BreakInIfElseIfInContinuing) {
@@ -1131,12 +1114,8 @@
     WrapInFunction(Loop(Block(), cont));
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
-              "12:34 warning: use of deprecated language feature: `break` must not be used to exit "
-              "from a continuing block. Use `break-if` instead.\n"
-              "12:34 error: break statement in a continuing block must be the single "
-              "statement of an if statement's true or false block, and that if "
-              "statement must be the last statement of the continuing block\n"
-              "56:78 note: else has condition");
+              "12:34 error: `break` must not be used to exit from a continuing block. "
+              "Use `break-if` instead.");
 }
 
 TEST_F(ResolverValidationTest, Stmt_BreakInIfNonEmptyElseInContinuing) {
@@ -1150,12 +1129,8 @@
     WrapInFunction(Loop(Block(), cont));
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
-              "12:34 warning: use of deprecated language feature: `break` must not be used to exit "
-              "from a continuing block. Use `break-if` instead.\n"
-              "12:34 error: break statement in a continuing block must be the single "
-              "statement of an if statement's true or false block, and that if "
-              "statement must be the last statement of the continuing block\n"
-              "56:78 note: non-empty false block");
+              "12:34 error: `break` must not be used to exit from a continuing block. "
+              "Use `break-if` instead.");
 }
 
 TEST_F(ResolverValidationTest, Stmt_BreakInIfElseNonEmptyTrueInContinuing) {
@@ -1169,12 +1144,8 @@
     WrapInFunction(Loop(Block(), cont));
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
-              "12:34 warning: use of deprecated language feature: `break` must not be used to exit "
-              "from a continuing block. Use `break-if` instead.\n"
-              "12:34 error: break statement in a continuing block must be the single "
-              "statement of an if statement's true or false block, and that if "
-              "statement must be the last statement of the continuing block\n"
-              "56:78 note: non-empty true block");
+              "12:34 error: `break` must not be used to exit from a continuing block. "
+              "Use `break-if` instead.");
 }
 
 TEST_F(ResolverValidationTest, Stmt_BreakInIfInContinuingNotLast) {
@@ -1187,13 +1158,8 @@
     WrapInFunction(Loop(Block(), cont));
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
-              "12:34 warning: use of deprecated language feature: `break` must not be used to exit "
-              "from a continuing block. Use `break-if` instead.\n"
-              "12:34 error: break statement in a continuing block must be the single "
-              "statement of an if statement's true or false block, and that if "
-              "statement must be the last statement of the continuing block\n"
-              "56:78 note: if statement containing break statement is not the last "
-              "statement of the continuing block");
+              "12:34 error: `break` must not be used to exit from a continuing block. "
+              "Use `break-if` instead.");
 }
 
 TEST_F(ResolverValidationTest, Stmt_BreakNotInLoopOrSwitch) {
diff --git a/src/tint/resolver/validator.cc b/src/tint/resolver/validator.cc
index f7d6cb3..db93bbe 100644
--- a/src/tint/resolver/validator.cc
+++ b/src/tint/resolver/validator.cc
@@ -1438,64 +1438,11 @@
         AddError("break statement must be in a loop or switch case", stmt->Declaration()->source);
         return false;
     }
-    if (auto* continuing = ClosestContinuing(/*stop_at_loop*/ true, current_statement)) {
-        AddWarning(
-            "use of deprecated language feature: `break` must not be used to exit from "
-            "a continuing block. Use `break-if` instead.",
+    if (ClosestContinuing(/*stop_at_loop*/ true, current_statement) != nullptr) {
+        AddError(
+            "`break` must not be used to exit from a continuing block. Use `break-if` instead.",
             stmt->Declaration()->source);
-
-        auto fail = [&](const char* note_msg, const Source& note_src) {
-            constexpr const char* kErrorMsg =
-                "break statement in a continuing block must be the single statement of an if "
-                "statement's true or false block, and that if statement must be the last statement "
-                "of the continuing block";
-            AddError(kErrorMsg, stmt->Declaration()->source);
-            AddNote(note_msg, note_src);
-            return false;
-        };
-
-        if (auto* block = stmt->Parent()->As<sem::BlockStatement>()) {
-            auto* block_parent = block->Parent();
-            auto* if_stmt = block_parent->As<sem::IfStatement>();
-            if (!if_stmt) {
-                return fail("break statement is not directly in if statement block",
-                            stmt->Declaration()->source);
-            }
-            if (block->Declaration()->statements.Length() != 1) {
-                return fail("if statement block contains multiple statements",
-                            block->Declaration()->source);
-            }
-
-            if (if_stmt->Parent()->Is<sem::IfStatement>()) {
-                return fail("else has condition", if_stmt->Declaration()->source);
-            }
-
-            bool el_contains_break = block->Declaration() == if_stmt->Declaration()->else_statement;
-            if (el_contains_break) {
-                if (auto* true_block = if_stmt->Declaration()->body; !true_block->Empty()) {
-                    return fail("non-empty true block", true_block->source);
-                }
-            } else {
-                auto* else_stmt = if_stmt->Declaration()->else_statement;
-                if (else_stmt) {
-                    return fail("non-empty false block", else_stmt->source);
-                }
-            }
-
-            if (if_stmt->Parent()->Declaration() != continuing) {
-                return fail(
-                    "if statement containing break statement is not directly in continuing block",
-                    if_stmt->Declaration()->source);
-            }
-            if (auto* cont_block = continuing->As<ast::BlockStatement>()) {
-                if (if_stmt->Declaration() != cont_block->Last()) {
-                    return fail(
-                        "if statement containing break statement is not the last statement of the "
-                        "continuing block",
-                        if_stmt->Declaration()->source);
-                }
-            }
-        }
+        return false;
     }
     return true;
 }
diff --git a/src/tint/transform/remove_unreachable_statements_test.cc b/src/tint/transform/remove_unreachable_statements_test.cc
index 3e8c2b6..9267e6f 100644
--- a/src/tint/transform/remove_unreachable_statements_test.cc
+++ b/src/tint/transform/remove_unreachable_statements_test.cc
@@ -209,9 +209,7 @@
   loop {
 
     continuing {
-      if (true) {
-        break;
-      }
+      break if true;
     }
   }
   var preserve_me = 1;
diff --git a/src/tint/writer/spirv/builder.cc b/src/tint/writer/spirv/builder.cc
index 3c28de3..9b1e077 100644
--- a/src/tint/writer/spirv/builder.cc
+++ b/src/tint/writer/spirv/builder.cc
@@ -3403,54 +3403,6 @@
 }
 
 bool Builder::GenerateIfStatement(const ast::IfStatement* stmt) {
-    if (!continuing_stack_.empty() &&
-        stmt == continuing_stack_.back().last_statement->As<ast::IfStatement>()) {
-        const ContinuingInfo& ci = continuing_stack_.back();
-        // Match one of two patterns: the break-if and break-unless patterns.
-        //
-        // The break-if pattern:
-        //  continuing { ...
-        //    if (cond) { break; }
-        //  }
-        //
-        // The break-unless pattern:
-        //  continuing { ...
-        //    if (cond) {} else {break;}
-        //  }
-        //
-        // TODO(crbug.com/tint/1451): Remove this when the if break construct is made an error.
-        auto is_just_a_break = [](const ast::BlockStatement* block) {
-            return block && (block->statements.Length() == 1) &&
-                   block->Last()->Is<ast::BreakStatement>();
-        };
-        if (is_just_a_break(stmt->body) && stmt->else_statement == nullptr) {
-            // It's a break-if.
-            TINT_ASSERT(Writer, !backedge_stack_.empty());
-            const auto cond_id = GenerateExpressionWithLoadIfNeeded(stmt->condition);
-            if (!cond_id) {
-                return false;
-            }
-            backedge_stack_.back() = Backedge(
-                spv::Op::OpBranchConditional,
-                {Operand(cond_id), Operand(ci.break_target_id), Operand(ci.loop_header_id)});
-            return true;
-        } else if (stmt->body->Empty()) {
-            auto* es_block = As<ast::BlockStatement>(stmt->else_statement);
-            if (es_block && is_just_a_break(es_block)) {
-                // It's a break-unless.
-                TINT_ASSERT(Writer, !backedge_stack_.empty());
-                const auto cond_id = GenerateExpressionWithLoadIfNeeded(stmt->condition);
-                if (!cond_id) {
-                    return false;
-                }
-                backedge_stack_.back() = Backedge(
-                    spv::Op::OpBranchConditional,
-                    {Operand(cond_id), Operand(ci.loop_header_id), Operand(ci.break_target_id)});
-                return true;
-            }
-        }
-    }
-
     if (!GenerateConditionalBlock(stmt->condition, stmt->body, stmt->else_statement)) {
         return false;
     }
diff --git a/src/tint/writer/spirv/builder_loop_test.cc b/src/tint/writer/spirv/builder_loop_test.cc
index e27cac4..9d19bde 100644
--- a/src/tint/writer/spirv/builder_loop_test.cc
+++ b/src/tint/writer/spirv/builder_loop_test.cc
@@ -332,44 +332,6 @@
 )");
 }
 
-TEST_F(BuilderTest, Loop_WithContinuing_BreakUnless_ConditionIsVar) {
-    // loop {
-    //   continuing {
-    //     var cond = true;
-    //     if (cond) {} else { break; }
-    //   }
-    // }
-    auto* cond_var = Decl(Var("cond", Expr(true)));
-    auto* if_stmt = If(Expr("cond"), Block(), Else(Block(Break())));
-    auto* continuing = Block(cond_var, if_stmt);
-    auto* loop = Loop(Block(), continuing);
-    WrapInFunction(loop);
-
-    spirv::Builder& b = Build();
-
-    b.push_function(Function{});
-
-    EXPECT_TRUE(b.GenerateLoopStatement(loop)) << b.error();
-    EXPECT_EQ(DumpInstructions(b.types()), R"(%5 = OpTypeBool
-%6 = OpConstantTrue %5
-%8 = OpTypePointer Function %5
-%9 = OpConstantNull %5
-)");
-    EXPECT_EQ(DumpInstructions(b.functions()[0].instructions()),
-              R"(OpBranch %1
-%1 = OpLabel
-OpLoopMerge %2 %3 None
-OpBranch %4
-%4 = OpLabel
-OpBranch %3
-%3 = OpLabel
-OpStore %7 %6
-%10 = OpLoad %5 %7
-OpBranchConditional %10 %1 %2
-%2 = OpLabel
-)");
-}
-
 TEST_F(BuilderTest, Loop_WithContinuing_BreakIf_Nested) {
     // Make sure the right backedge and break target are used.
     // loop {
@@ -421,58 +383,5 @@
 )");
 }
 
-TEST_F(BuilderTest, Loop_WithContinuing_BreakUnless_Nested) {
-    // Make sure the right backedge and break target are used.
-    // loop {
-    //   continuing {
-    //     loop {
-    //       continuing {
-    //         if (true) {} else { break; }
-    //       }
-    //     }
-    //     if (true) {} else { break; }
-    //   }
-    // }
-
-    auto* inner_if_stmt = If(Expr(true), Block(), Else(Block(Break())));
-    auto* inner_continuing = Block(inner_if_stmt);
-    auto* inner_loop = Loop(Block(), inner_continuing);
-
-    auto* outer_if_stmt = If(Expr(true), Block(), Else(Block(Break())));
-    auto* outer_continuing = Block(inner_loop, outer_if_stmt);
-    auto* outer_loop = Loop(Block(), outer_continuing);
-
-    WrapInFunction(outer_loop);
-
-    spirv::Builder& b = Build();
-
-    b.push_function(Function{});
-
-    EXPECT_TRUE(b.GenerateLoopStatement(outer_loop)) << b.error();
-    EXPECT_EQ(DumpInstructions(b.types()), R"(%9 = OpTypeBool
-%10 = OpConstantTrue %9
-)");
-    EXPECT_EQ(DumpInstructions(b.functions()[0].instructions()),
-              R"(OpBranch %1
-%1 = OpLabel
-OpLoopMerge %2 %3 None
-OpBranch %4
-%4 = OpLabel
-OpBranch %3
-%3 = OpLabel
-OpBranch %5
-%5 = OpLabel
-OpLoopMerge %6 %7 None
-OpBranch %8
-%8 = OpLabel
-OpBranch %7
-%7 = OpLabel
-OpBranchConditional %10 %5 %6
-%6 = OpLabel
-OpBranchConditional %10 %1 %2
-%2 = OpLabel
-)");
-}
-
 }  // namespace
 }  // namespace tint::writer::spirv
diff --git a/test/tint/bug/tint/1064.wgsl b/test/tint/bug/tint/1064.wgsl
index db344ea..b884701 100644
--- a/test/tint/bug/tint/1064.wgsl
+++ b/test/tint/bug/tint/1064.wgsl
@@ -7,10 +7,7 @@
     }
 
     continuing {
-       if (true) {
-       } else {
-        break;
-       }
+       break if !true;
     }
   }
 }
diff --git a/test/tint/bug/tint/1064.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/1064.wgsl.expected.dxc.hlsl
index be35136..5871a6b 100644
--- a/test/tint/bug/tint/1064.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1064.wgsl.expected.dxc.hlsl
@@ -1,7 +1,3 @@
-bug/tint/1064.wgsl:12:9 warning: use of deprecated language feature: `break` must not be used to exit from a continuing block. Use `break-if` instead.
-        break;
-        ^^^^^
-
 void main() {
   while (true) {
     if (false) {
@@ -9,10 +5,7 @@
       break;
     }
     {
-      if (true) {
-      } else {
-        break;
-      }
+      if (false) { break; }
     }
   }
   return;
diff --git a/test/tint/bug/tint/1064.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/1064.wgsl.expected.fxc.hlsl
index be35136..5871a6b 100644
--- a/test/tint/bug/tint/1064.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1064.wgsl.expected.fxc.hlsl
@@ -1,7 +1,3 @@
-bug/tint/1064.wgsl:12:9 warning: use of deprecated language feature: `break` must not be used to exit from a continuing block. Use `break-if` instead.
-        break;
-        ^^^^^
-
 void main() {
   while (true) {
     if (false) {
@@ -9,10 +5,7 @@
       break;
     }
     {
-      if (true) {
-      } else {
-        break;
-      }
+      if (false) { break; }
     }
   }
   return;
diff --git a/test/tint/bug/tint/1064.wgsl.expected.glsl b/test/tint/bug/tint/1064.wgsl.expected.glsl
index b181e85..674da4d 100644
--- a/test/tint/bug/tint/1064.wgsl.expected.glsl
+++ b/test/tint/bug/tint/1064.wgsl.expected.glsl
@@ -1,7 +1,3 @@
-bug/tint/1064.wgsl:12:9 warning: use of deprecated language feature: `break` must not be used to exit from a continuing block. Use `break-if` instead.
-        break;
-        ^^^^^
-
 #version 310 es
 precision mediump float;
 
@@ -12,10 +8,7 @@
       break;
     }
     {
-      if (true) {
-      } else {
-        break;
-      }
+      if (false) { break; }
     }
   }
 }
diff --git a/test/tint/bug/tint/1064.wgsl.expected.msl b/test/tint/bug/tint/1064.wgsl.expected.msl
index 7a8759a..194a6cf 100644
--- a/test/tint/bug/tint/1064.wgsl.expected.msl
+++ b/test/tint/bug/tint/1064.wgsl.expected.msl
@@ -1,7 +1,3 @@
-bug/tint/1064.wgsl:12:9 warning: use of deprecated language feature: `break` must not be used to exit from a continuing block. Use `break-if` instead.
-        break;
-        ^^^^^
-
 #include <metal_stdlib>
 
 using namespace metal;
@@ -12,10 +8,7 @@
       break;
     }
     {
-      if (true) {
-      } else {
-        break;
-      }
+      if (false) { break; }
     }
   }
   return;
diff --git a/test/tint/bug/tint/1064.wgsl.expected.spvasm b/test/tint/bug/tint/1064.wgsl.expected.spvasm
index 1051a7a..44ce3a3 100644
--- a/test/tint/bug/tint/1064.wgsl.expected.spvasm
+++ b/test/tint/bug/tint/1064.wgsl.expected.spvasm
@@ -1,11 +1,7 @@
-bug/tint/1064.wgsl:12:9 warning: use of deprecated language feature: `break` must not be used to exit from a continuing block. Use `break-if` instead.
-        break;
-        ^^^^^
-
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 15
+; Bound: 14
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -16,7 +12,6 @@
           %1 = OpTypeFunction %void
        %bool = OpTypeBool
          %10 = OpConstantNull %bool
-       %true = OpConstantTrue %bool
        %main = OpFunction %void None %1
           %4 = OpLabel
                OpBranch %5
@@ -33,7 +28,7 @@
          %11 = OpLabel
                OpBranch %7
           %7 = OpLabel
-               OpBranchConditional %true %5 %6
+               OpBranchConditional %10 %6 %5
           %6 = OpLabel
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/bug/tint/1064.wgsl.expected.wgsl b/test/tint/bug/tint/1064.wgsl.expected.wgsl
index d267bdb..787399a 100644
--- a/test/tint/bug/tint/1064.wgsl.expected.wgsl
+++ b/test/tint/bug/tint/1064.wgsl.expected.wgsl
@@ -1,7 +1,3 @@
-bug/tint/1064.wgsl:12:9 warning: use of deprecated language feature: `break` must not be used to exit from a continuing block. Use `break-if` instead.
-        break;
-        ^^^^^
-
 @fragment
 fn main() {
   loop {
@@ -11,10 +7,7 @@
     }
 
     continuing {
-      if (true) {
-      } else {
-        break;
-      }
+      break if !(true);
     }
   }
 }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl
index 8d5b860..868ce50 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl
@@ -23,10 +23,7 @@
     break;
 
     continuing {
-      if (false) {
-      } else {
-        break;
-      }
+      break if !(false);
     }
   }
   return;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl
index 7ae5656..6afce13 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl
@@ -144,10 +144,7 @@
       continuing {
         let x_189 : i32 = x_6.x_GLF_uniform_int_values[2].el;
         let x_191 : i32 = x_6.x_GLF_uniform_int_values[3].el;
-        if ((x_189 == x_191)) {
-        } else {
-          break;
-        }
+        break if !(x_189 == x_191);
       }
     }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl
index 10b0b75..492d398 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl
@@ -128,19 +128,13 @@
 
       continuing {
         let x_123 : f32 = gl_FragCoord.x;
-        if ((x_123 < -1.0)) {
-        } else {
-          break;
-        }
+        break if !(x_123 < -1.0);
       }
     }
 
     continuing {
       let x_126 : f32 = gl_FragCoord.y;
-      if ((x_126 < -1.0)) {
-      } else {
-        break;
-      }
+      break if !(x_126 < -1.0);
     }
   }
   let x_128 : vec4<f32> = c;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl
index 1903882..cb8ca0d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl
@@ -44,10 +44,7 @@
     return;
 
     continuing {
-      if (false) {
-      } else {
-        break;
-      }
+      break if !(false);
     }
   }
   let x_66 : i32 = x_5.x_GLF_uniform_int_values[1].el;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl
index a79e26b..7580317 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl
@@ -44,10 +44,7 @@
         let x_67 : i32 = c;
         let x_68 : i32 = a;
         let x_69 : i32 = b;
-        if (((x_67 & (x_68 | x_69)) == 0)) {
-        } else {
-          break;
-        }
+        break if !((x_67 & (x_68 | x_69)) == 0);
       }
     }
     let x_74 : f32 = x_6.one;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl
index 277b9a2..fcd9732 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl
@@ -30,10 +30,7 @@
     continuing {
       let x_66 : i32 = i;
       let x_68 : i32 = x_7.x_GLF_uniform_int_values[1].el;
-      if ((x_66 < x_68)) {
-      } else {
-        break;
-      }
+      break if !(x_66 < x_68);
     }
   }
   let x_71 : i32 = x_7.x_GLF_uniform_int_values[0].el;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl
index a8d8cea..84733f5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl
@@ -11,10 +11,7 @@
 
     continuing {
       let x_35 : f32 = gl_FragCoord.x;
-      if (((x_35 >= 0.0) & false)) {
-      } else {
-        break;
-      }
+      break if !((x_35 >= 0.0) & false);
     }
   }
   let x_8 : i32 = i;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl
index ed6eebe..303534a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl
@@ -17,10 +17,7 @@
     continuing {
       let x_34 : f32 = f;
       let x_36 : f32 = x_6.one;
-      if ((10.0 > clamp(x_34, 8.0, (9.0 + x_36)))) {
-      } else {
-        break;
-      }
+      break if !(10.0 > clamp(x_34, 8.0, (9.0 + x_36)));
     }
   }
   let x_40 : f32 = f;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl
index cf243d6..b13b024 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl
@@ -43,10 +43,7 @@
           continuing {
             let x_88 : f32 = gl_FragCoord.x;
             let x_90 : f32 = x_8.x_GLF_uniform_float_values[2].el;
-            if ((x_88 < x_90)) {
-            } else {
-              break;
-            }
+            break if !(x_88 < x_90);
           }
         }
       }
@@ -60,10 +57,7 @@
       continuing {
         let x_101 : f32 = gl_FragCoord.y;
         let x_103 : f32 = x_8.x_GLF_uniform_float_values[2].el;
-        if ((x_101 < x_103)) {
-        } else {
-          break;
-        }
+        break if !(x_101 < x_103);
       }
     }
   }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl
index a997432..6c05483 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl
@@ -43,10 +43,7 @@
 
     continuing {
       let x_39 : i32 = x_GLF_global_loop_count;
-      if ((true & (x_39 < 100))) {
-      } else {
-        break;
-      }
+      break if !(true & (x_39 < 100));
     }
   }
   let x_42 : i32 = func_();
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl
index 4f3baca..f4afbba 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl
@@ -30,10 +30,7 @@
 
     continuing {
       let x_39 : i32 = a;
-      if ((x_39 != 1)) {
-      } else {
-        break;
-      }
+      break if !(x_39 != 1);
     }
   }
   let x_41 : i32 = a;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl
index 8b6de3d..ac822d1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl
@@ -30,10 +30,7 @@
       continuing {
         x_48_phi = vec4<f32>();
         x_49_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
+        break if !(false);
       }
     }
     x_48 = x_48_phi;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl
index a4ddb5c..8682748 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl
@@ -29,10 +29,7 @@
     continuing {
       x_34_phi = 1.0;
       x_48_phi = 1.0;
-      if (false) {
-      } else {
-        break;
-      }
+      break if !(false);
     }
   }
   let x_48 : f32 = x_48_phi;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl
index 79c369b..fbff6ca 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl
@@ -332,10 +332,7 @@
 
                                                                                 continuing {
                                                                                   let x_373 : i32 = x_GLF_global_loop_count;
-                                                                                  if ((x_373 < 98)) {
-                                                                                  } else {
-                                                                                    break;
-                                                                                  }
+                                                                                  break if !(x_373 < 98);
                                                                                 }
                                                                               }
                                                                               let x_375 : i32 = i_37;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl
index c243164..32190d7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl
@@ -192,10 +192,7 @@
                                   continuing {
                                     let x_225 : i32 = x_GLF_global_loop_count;
                                     let x_227 : i32 = x_10.x_GLF_uniform_int_values[3].el;
-                                    if ((x_225 < (100 - x_227))) {
-                                    } else {
-                                      break;
-                                    }
+                                    break if !(x_225 < (100 - x_227));
                                   }
                                 }
                                 let x_231 : f32 = x_7.x_GLF_uniform_float_values[0].el;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl
index 9f4c8f1..2a4c9b9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl
@@ -58,10 +58,7 @@
 
     continuing {
       let x_72 : f32 = a;
-      if (!((x_72 == 0.0))) {
-      } else {
-        break;
-      }
+      break if !((x_72 == 0.0));
     }
   }
   let x_75 : i32 = x_8.x_GLF_uniform_int_values[1].el;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl
index 13e7aed..4a2742d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl
@@ -64,10 +64,7 @@
         continuing {
           let x_72 : i32 = a;
           let x_74 : i32 = x_7.x_GLF_uniform_int_values[1].el;
-          if ((x_72 < x_74)) {
-          } else {
-            break;
-          }
+          break if !(x_72 < x_74);
         }
       }
       let x_77 : f32 = gl_FragCoord.y;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl
index 8c354c5..7a1c963 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl
@@ -41,10 +41,7 @@
     a = 0.0;
 
     continuing {
-      if (false) {
-      } else {
-        break;
-      }
+      break if !(false);
     }
   }
   let x_63 : f32 = a;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl
index 4a5526b..b34e84b 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl
@@ -30,10 +30,7 @@
       continuing {
         let x_50 : i32 = x_5.x_GLF_uniform_int_values[1].el;
         let x_52 : i32 = x_5.x_GLF_uniform_int_values[0].el;
-        if ((x_50 > x_52)) {
-        } else {
-          break;
-        }
+        break if !(x_50 > x_52);
       }
     }
     return;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl
index 27eede7..d5c9c06 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl
@@ -31,10 +31,7 @@
       }
 
       continuing {
-        if (false) {
-        } else {
-          break;
-        }
+        break if !(false);
       }
     }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl
index fadf785..c882710 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl
@@ -44,10 +44,7 @@
       x_GLF_color = vec4<f32>(x_53, x_53, x_53, x_53);
 
       continuing {
-        if (true) {
-        } else {
-          break;
-        }
+        break if !(true);
       }
     }
   } else {
@@ -83,10 +80,7 @@
       continuing {
         let x_82 : f32 = x_7.zero;
         let x_84 : f32 = x_5.x_GLF_uniform_float_values[0].el;
-        if ((x_82 > x_84)) {
-        } else {
-          break;
-        }
+        break if !(x_82 > x_84);
       }
     }
   }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl
index 2c83684..2e3fd9c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl
@@ -58,10 +58,7 @@
 
     continuing {
       let x_87 : i32 = one;
-      if ((x_87 < 0)) {
-      } else {
-        break;
-      }
+      break if !(x_87 < 0);
     }
   }
   var x_102 : bool;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl
index 0a907b9..8124d91 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl
@@ -92,10 +92,7 @@
     continuing {
       let x_111 : f32 = x_6.injectionSwitch.x;
       let x_113 : f32 = x_6.injectionSwitch.y;
-      if ((x_111 > x_113)) {
-      } else {
-        break;
-      }
+      break if !(x_111 > x_113);
     }
   }
   return;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl
index 0fbc4eb..ab4c158 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl
@@ -26,10 +26,7 @@
 
       continuing {
         x_46_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
+        break if !(false);
       }
     }
     let x_46 : bool = x_46_phi;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl
index 1f09f47..a93d7e2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl
@@ -22,10 +22,7 @@
     discard;
 
     continuing {
-      if (false) {
-      } else {
-        break;
-      }
+      break if !(false);
     }
   }
   return;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl
index ce12bf7..9e6806c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl
@@ -35,19 +35,13 @@
 
       continuing {
         x_45_phi = x_39;
-        if ((x_39 < 100)) {
-        } else {
-          break;
-        }
+        break if !(x_39 < 100);
       }
     }
 
     continuing {
       x_38_phi = x_39;
-      if ((x_39 < 100)) {
-      } else {
-        break;
-      }
+      break if !(x_39 < 100);
     }
   }
   return 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl
index 83e36a6..a9d43c5 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl
@@ -12,10 +12,7 @@
 
         continuing {
           let x_32 : f32 = gl_FragCoord.x;
-          if ((x_32 < 0.0)) {
-          } else {
-            break;
-          }
+          break if !(x_32 < 0.0);
         }
       }
     }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl
index 2ca87f2..b0913b0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl
@@ -39,10 +39,7 @@
     break;
 
     continuing {
-      if (false) {
-      } else {
-        break;
-      }
+      break if !(false);
     }
   }
   let x_70 : i32 = x_46;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl
index 7c36589..2d12653 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl
@@ -60,10 +60,7 @@
 
       continuing {
         let x_82 : f32 = x_8.injectionSwitch.y;
-        if ((0.0 > x_82)) {
-        } else {
-          break;
-        }
+        break if !(0.0 > x_82);
       }
     }
 
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl
index fe4a229..590dfbf 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl
@@ -98,10 +98,7 @@
 
     continuing {
       let x_113 : i32 = i;
-      if ((x_113 < 200)) {
-      } else {
-        break;
-      }
+      break if !(x_113 < 200);
     }
   }
   x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl
index 2eda8e3..d45d8e1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl
@@ -35,10 +35,7 @@
     continuing {
       x_40_phi = x_40;
       x_42_phi = x_43;
-      if (false) {
-      } else {
-        break;
-      }
+      break if !(false);
     }
   }
   x_36 = false;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl
index ed302ea..d65c516 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl
@@ -73,10 +73,7 @@
       continuing {
         x_38_phi = x_39;
         x_41_phi = x_42;
-        if ((x_34 < 0)) {
-        } else {
-          break;
-        }
+        break if !(x_34 < 0);
       }
     }
     if (x_39) {
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl
index 2521351..950c0f9 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl
@@ -38,10 +38,7 @@
           loop {
 
             continuing {
-              if (true) {
-              } else {
-                break;
-              }
+              break if !(true);
             }
           }
         }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl
index fb36a0a..07d27b1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl
@@ -324,10 +324,7 @@
 
     continuing {
       let x_440 : bool = canwalk;
-      if (x_440) {
-      } else {
-        break;
-      }
+      break if !(x_440);
     }
   }
   x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl
index d4e6eff..574f905 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl
@@ -333,10 +333,7 @@
 
     continuing {
       let x_450 : bool = canwalk;
-      if (x_450) {
-      } else {
-        break;
-      }
+      break if !(x_450);
     }
   }
   x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl
index e4deef2..fe062ed 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl
@@ -214,10 +214,7 @@
 
     continuing {
       let x_127 : i32 = i_3;
-      if ((x_127 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_127 < 10);
     }
   }
   j_1 = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl
index 912ceaa..7f093e7 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl
@@ -218,10 +218,7 @@
 
     continuing {
       let x_128 : i32 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_128 < 10);
     }
   }
   j_1 = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl
index b73ca1c..eafd332 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl
@@ -218,10 +218,7 @@
 
     continuing {
       let x_129 : i32 = i_3;
-      if ((x_129 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_129 < 10);
     }
   }
   j_1 = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl
index 81b22d3..a338125 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl
@@ -368,10 +368,7 @@
 
     continuing {
       let x_468 : bool = canwalk;
-      if (x_468) {
-      } else {
-        break;
-      }
+      break if !(x_468);
     }
   }
   x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl
index edf5b87..9f086d2 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl
@@ -330,10 +330,7 @@
 
     continuing {
       let x_444 : bool = canwalk;
-      if (x_444) {
-      } else {
-        break;
-      }
+      break if !(x_444);
     }
   }
   x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl
index 23603de..0173772 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl
@@ -96,10 +96,7 @@
 
     continuing {
       x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_64 < 10);
     }
   }
   x_103_phi = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl
index 389189b..39e2084 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl
@@ -93,10 +93,7 @@
 
     continuing {
       x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_64 < 10);
     }
   }
   x_102_phi = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl
index 2b78fba..b18744c 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl
@@ -208,10 +208,7 @@
 
     continuing {
       let x_124 : i32 = i_3;
-      if ((x_124 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_124 < 10);
     }
   }
   j_1 = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl
index f7b359c..22b0567 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl
@@ -208,10 +208,7 @@
 
     continuing {
       let x_126 : i32 = i_3;
-      if ((x_126 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_126 < 10);
     }
   }
   j_1 = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl
index bcff64c..f2582e0 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl
@@ -316,10 +316,7 @@
 
     continuing {
       let x_128 : i32 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_128 < 10);
     }
   }
   j_1 = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl
index 70a93ab..d450ab3 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl
@@ -315,10 +315,7 @@
 
     continuing {
       let x_128 : i32 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_128 < 10);
     }
   }
   j_1 = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl
index 0648a59..0e82039 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl
@@ -156,10 +156,7 @@
 
     continuing {
       let x_136 : i32 = i_3;
-      if ((x_136 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_136 < 10);
     }
   }
   j_1 = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl
index 28907ef..5960625 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl
@@ -156,10 +156,7 @@
 
     continuing {
       let x_136 : i32 = i_3;
-      if ((x_136 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_136 < 10);
     }
   }
   j_1 = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl
index e4573de..db0b53d 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl
@@ -242,10 +242,7 @@
 
     continuing {
       let x_133 : i32 = i_3;
-      if ((x_133 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_133 < 10);
     }
   }
   j_1 = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl
index 803c071..bcc7488 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl
@@ -60,10 +60,7 @@
 
     continuing {
       x_65_phi = x_66;
-      if ((x_66 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_66 < 10);
     }
   }
   x_93_phi = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl
index b400724..27d35ad 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl
@@ -209,10 +209,7 @@
 
     continuing {
       let x_125 : i32 = i_3;
-      if ((x_125 < 10)) {
-      } else {
-        break;
-      }
+      break if !(x_125 < 10);
     }
   }
   j_1 = 0;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl
index cdddf1f..0d269dd 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl
@@ -28,10 +28,7 @@
     }
 
     continuing {
-      if (false) {
-      } else {
-        break;
-      }
+      break if !(false);
     }
   }
   let x_8 : i32 = merge_();
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl
index 1dc822f..f725a48 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl
@@ -60,18 +60,12 @@
           }
 
           continuing {
-            if (false) {
-            } else {
-              break;
-            }
+            break if !(false);
           }
         }
 
         continuing {
-          if (false) {
-          } else {
-            break;
-          }
+          break if !(false);
         }
       }
     }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl
index 3cadb54..95ec091 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl
@@ -43,10 +43,7 @@
     continuing {
       x_11 = x_11_phi;
       x_10_phi = x_11;
-      if (false) {
-      } else {
-        break;
-      }
+      break if !(false);
     }
   }
   return x_11;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl
index dafad00..1f32d4a 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl
@@ -15,10 +15,7 @@
     loop {
 
       continuing {
-        if (false) {
-        } else {
-          break;
-        }
+        break if !(false);
       }
     }
     m = 1;
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl b/test/tint/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl
index 317778e..0a86345 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl
@@ -24,10 +24,7 @@
 
     continuing {
       x_41 = x_6.injectionSwitch.y;
-      if ((0.0 > x_41)) {
-      } else {
-        break;
-      }
+      break if !(0.0 > x_41);
     }
   }
   let x_43 : i32 = i32(x_41);