Convince the metal compiler that loops are never infinite
Disable the end2end infinite loop tests for now
Bug: crbug.com/371840056
Change-Id: I300d61e4929942e41ca9c451c88f304e9b58f1f4
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/210338
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: David Neto <dneto@google.com>
diff --git a/test/tint/loops/continue_in_switch.wgsl.expected.msl b/test/tint/loops/continue_in_switch.wgsl.expected.msl
index e7349b0c..93cfb99 100644
--- a/test/tint/loops/continue_in_switch.wgsl.expected.msl
+++ b/test/tint/loops/continue_in_switch.wgsl.expected.msl
@@ -3,12 +3,12 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
kernel void f() {
bool tint_continue = false;
- TINT_ISOLATE_UB(tint_volatile_true) for(int i = 0; (i < 4); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
+ for(int i = 0; (i < 4); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
+ TINT_ISOLATE_UB(tint_volatile_false);
tint_continue = false;
switch(i) {
case 0: {
diff --git a/test/tint/loops/continue_in_switch_with_breakif.wgsl.expected.msl b/test/tint/loops/continue_in_switch_with_breakif.wgsl.expected.msl
index e0ef3e1..e944287 100644
--- a/test/tint/loops/continue_in_switch_with_breakif.wgsl.expected.msl
+++ b/test/tint/loops/continue_in_switch_with_breakif.wgsl.expected.msl
@@ -3,13 +3,13 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
kernel void f() {
int i = 0;
bool tint_continue = false;
- TINT_ISOLATE_UB(tint_volatile_true) while(true) {
+ while(true) {
+ TINT_ISOLATE_UB(tint_volatile_false);
tint_continue = false;
switch(i) {
case 0: {
diff --git a/test/tint/loops/loop.wgsl.expected.msl b/test/tint/loops/loop.wgsl.expected.msl
index 3ab3d8e..e641dc5 100644
--- a/test/tint/loops/loop.wgsl.expected.msl
+++ b/test/tint/loops/loop.wgsl.expected.msl
@@ -3,12 +3,12 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
int f() {
int i = 0;
- TINT_ISOLATE_UB(tint_volatile_true) while(true) {
+ while(true) {
+ TINT_ISOLATE_UB(tint_volatile_false);
i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)));
if ((i > 4)) {
return i;
diff --git a/test/tint/loops/loop_with_break_if.wgsl.expected.msl b/test/tint/loops/loop_with_break_if.wgsl.expected.msl
index 08f6c09..e97f8c6 100644
--- a/test/tint/loops/loop_with_break_if.wgsl.expected.msl
+++ b/test/tint/loops/loop_with_break_if.wgsl.expected.msl
@@ -3,12 +3,12 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
int f() {
int i = 0;
- TINT_ISOLATE_UB(tint_volatile_true) while(true) {
+ while(true) {
+ TINT_ISOLATE_UB(tint_volatile_false);
if ((i > 4)) {
return i;
}
diff --git a/test/tint/loops/loop_with_continuing.wgsl.expected.msl b/test/tint/loops/loop_with_continuing.wgsl.expected.msl
index 2f3b467..78da287 100644
--- a/test/tint/loops/loop_with_continuing.wgsl.expected.msl
+++ b/test/tint/loops/loop_with_continuing.wgsl.expected.msl
@@ -3,12 +3,12 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
int f() {
int i = 0;
- TINT_ISOLATE_UB(tint_volatile_true) while(true) {
+ while(true) {
+ TINT_ISOLATE_UB(tint_volatile_false);
if ((i > 4)) {
return i;
}
diff --git a/test/tint/loops/multiple_continues.wgsl.expected.msl b/test/tint/loops/multiple_continues.wgsl.expected.msl
index 76e84d7..73cc270 100644
--- a/test/tint/loops/multiple_continues.wgsl.expected.msl
+++ b/test/tint/loops/multiple_continues.wgsl.expected.msl
@@ -3,12 +3,12 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
kernel void tint_symbol() {
bool tint_continue = false;
- TINT_ISOLATE_UB(tint_volatile_true) for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
+ for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
+ TINT_ISOLATE_UB(tint_volatile_false);
tint_continue = false;
switch(i) {
case 0: {
diff --git a/test/tint/loops/multiple_switch.wgsl.expected.msl b/test/tint/loops/multiple_switch.wgsl.expected.msl
index 7728952..8dd8fe4 100644
--- a/test/tint/loops/multiple_switch.wgsl.expected.msl
+++ b/test/tint/loops/multiple_switch.wgsl.expected.msl
@@ -3,13 +3,13 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
kernel void tint_symbol() {
int i = 0;
bool tint_continue = false;
- TINT_ISOLATE_UB(tint_volatile_true) for(int i_1 = 0; (i_1 < 2); i_1 = as_type<int>((as_type<uint>(i_1) + as_type<uint>(1)))) {
+ for(int i_1 = 0; (i_1 < 2); i_1 = as_type<int>((as_type<uint>(i_1) + as_type<uint>(1)))) {
+ TINT_ISOLATE_UB(tint_volatile_false);
tint_continue = false;
switch(i_1) {
case 0: {
diff --git a/test/tint/loops/nested_loop_loop_switch.wgsl.expected.msl b/test/tint/loops/nested_loop_loop_switch.wgsl.expected.msl
index eb32ea2..5b0f057 100644
--- a/test/tint/loops/nested_loop_loop_switch.wgsl.expected.msl
+++ b/test/tint/loops/nested_loop_loop_switch.wgsl.expected.msl
@@ -3,13 +3,14 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
kernel void tint_symbol() {
- TINT_ISOLATE_UB(tint_volatile_true) for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)))) {
+ for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)))) {
+ TINT_ISOLATE_UB(tint_volatile_false);
bool tint_continue = false;
- TINT_ISOLATE_UB(tint_volatile_true_1) for(int j = 0; (j < 2); j = as_type<int>((as_type<uint>(j) + as_type<uint>(2)))) {
+ for(int j = 0; (j < 2); j = as_type<int>((as_type<uint>(j) + as_type<uint>(2)))) {
+ TINT_ISOLATE_UB(tint_volatile_false_1);
tint_continue = false;
switch(i) {
case 0: {
diff --git a/test/tint/loops/nested_loop_switch_loop_switch.wgsl.expected.msl b/test/tint/loops/nested_loop_switch_loop_switch.wgsl.expected.msl
index 9ac0463..0455c39 100644
--- a/test/tint/loops/nested_loop_switch_loop_switch.wgsl.expected.msl
+++ b/test/tint/loops/nested_loop_switch_loop_switch.wgsl.expected.msl
@@ -3,17 +3,18 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
kernel void tint_symbol() {
bool tint_continue_1 = false;
- TINT_ISOLATE_UB(tint_volatile_true) for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)))) {
+ for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)))) {
+ TINT_ISOLATE_UB(tint_volatile_false);
tint_continue_1 = false;
switch(i) {
case 0: {
bool tint_continue = false;
- TINT_ISOLATE_UB(tint_volatile_true_1) for(int j = 0; (j < 2); j = as_type<int>((as_type<uint>(j) + as_type<uint>(2)))) {
+ for(int j = 0; (j < 2); j = as_type<int>((as_type<uint>(j) + as_type<uint>(2)))) {
+ TINT_ISOLATE_UB(tint_volatile_false_1);
tint_continue = false;
switch(j) {
case 0: {
diff --git a/test/tint/loops/nested_loop_switch_loop_switch_switch.wgsl.expected.msl b/test/tint/loops/nested_loop_switch_loop_switch_switch.wgsl.expected.msl
index c3b1e93..3cfa334 100644
--- a/test/tint/loops/nested_loop_switch_loop_switch_switch.wgsl.expected.msl
+++ b/test/tint/loops/nested_loop_switch_loop_switch_switch.wgsl.expected.msl
@@ -3,18 +3,19 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
kernel void tint_symbol() {
int k = 0;
bool tint_continue_1 = false;
- TINT_ISOLATE_UB(tint_volatile_true) for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)))) {
+ for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)))) {
+ TINT_ISOLATE_UB(tint_volatile_false);
tint_continue_1 = false;
switch(i) {
case 0: {
bool tint_continue = false;
- TINT_ISOLATE_UB(tint_volatile_true_1) for(int j = 0; (j < 2); j = as_type<int>((as_type<uint>(j) + as_type<uint>(2)))) {
+ for(int j = 0; (j < 2); j = as_type<int>((as_type<uint>(j) + as_type<uint>(2)))) {
+ TINT_ISOLATE_UB(tint_volatile_false_1);
tint_continue = false;
switch(j) {
case 0: {
diff --git a/test/tint/loops/nested_loop_switch_switch.wgsl.expected.msl b/test/tint/loops/nested_loop_switch_switch.wgsl.expected.msl
index e122be4..8564b09 100644
--- a/test/tint/loops/nested_loop_switch_switch.wgsl.expected.msl
+++ b/test/tint/loops/nested_loop_switch_switch.wgsl.expected.msl
@@ -3,13 +3,13 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
kernel void tint_symbol() {
int j = 0;
bool tint_continue = false;
- TINT_ISOLATE_UB(tint_volatile_true) for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)))) {
+ for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)))) {
+ TINT_ISOLATE_UB(tint_volatile_false);
tint_continue = false;
switch(i) {
case 0: {
diff --git a/test/tint/loops/nested_loops.wgsl.expected.msl b/test/tint/loops/nested_loops.wgsl.expected.msl
index 8f176cb..d3f2bcf 100644
--- a/test/tint/loops/nested_loops.wgsl.expected.msl
+++ b/test/tint/loops/nested_loops.wgsl.expected.msl
@@ -3,18 +3,19 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
int f() {
int i = 0;
int j = 0;
- TINT_ISOLATE_UB(tint_volatile_true) while(true) {
+ while(true) {
+ TINT_ISOLATE_UB(tint_volatile_false);
i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)));
if ((i > 4)) {
return 1;
}
- TINT_ISOLATE_UB(tint_volatile_true_1) while(true) {
+ while(true) {
+ TINT_ISOLATE_UB(tint_volatile_false_1);
j = as_type<int>((as_type<uint>(j) + as_type<uint>(1)));
if ((j > 4)) {
return 2;
diff --git a/test/tint/loops/nested_loops_with_continuing.wgsl.expected.msl b/test/tint/loops/nested_loops_with_continuing.wgsl.expected.msl
index 25ea8bc..d0155f3 100644
--- a/test/tint/loops/nested_loops_with_continuing.wgsl.expected.msl
+++ b/test/tint/loops/nested_loops_with_continuing.wgsl.expected.msl
@@ -3,17 +3,18 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
int f() {
int i = 0;
int j = 0;
- TINT_ISOLATE_UB(tint_volatile_true) while(true) {
+ while(true) {
+ TINT_ISOLATE_UB(tint_volatile_false);
if ((i > 4)) {
return 1;
}
- TINT_ISOLATE_UB(tint_volatile_true_1) while(true) {
+ while(true) {
+ TINT_ISOLATE_UB(tint_volatile_false_1);
if ((j > 4)) {
return 2;
}
diff --git a/test/tint/loops/single_continue.wgsl.expected.msl b/test/tint/loops/single_continue.wgsl.expected.msl
index 113c92c..d095344 100644
--- a/test/tint/loops/single_continue.wgsl.expected.msl
+++ b/test/tint/loops/single_continue.wgsl.expected.msl
@@ -3,12 +3,12 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
kernel void tint_symbol() {
bool tint_continue = false;
- TINT_ISOLATE_UB(tint_volatile_true) for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
+ for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
+ TINT_ISOLATE_UB(tint_volatile_false);
tint_continue = false;
switch(i) {
case 0: {
diff --git a/test/tint/loops/while.wgsl.expected.msl b/test/tint/loops/while.wgsl.expected.msl
index d044fb0..1d8717d 100644
--- a/test/tint/loops/while.wgsl.expected.msl
+++ b/test/tint/loops/while.wgsl.expected.msl
@@ -3,12 +3,12 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
int f() {
int i = 0;
- TINT_ISOLATE_UB(tint_volatile_true) while((i < 4)) {
+ while((i < 4)) {
+ TINT_ISOLATE_UB(tint_volatile_false);
i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)));
}
return i;
diff --git a/test/tint/loops/while_with_continue.wgsl.expected.msl b/test/tint/loops/while_with_continue.wgsl.expected.msl
index 35233d4..6827095 100644
--- a/test/tint/loops/while_with_continue.wgsl.expected.msl
+++ b/test/tint/loops/while_with_continue.wgsl.expected.msl
@@ -3,12 +3,12 @@
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
- volatile bool VOLATILE_NAME = true; \
- if (VOLATILE_NAME)
+ {volatile bool VOLATILE_NAME = false; if (VOLATILE_NAME) break;}
int f() {
int i = 0;
- TINT_ISOLATE_UB(tint_volatile_true) while((i < 4)) {
+ while((i < 4)) {
+ TINT_ISOLATE_UB(tint_volatile_false);
i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)));
continue;
}