writer/msl: Fix continuing block emission

Inline the `continuing` block in the places where `continue` is called.

Simplifies the emission, and fixes emission of `let` statements in the loop.

This fix matches the same approach in writer/hlsl.
See: https://dawn-review.googlesource.com/c/tint/+/51784

Fixed: tint:833
Fixed: tint:914
Change-Id: If4d8cde62dfaf8efa24272854ca7ff5edc0a8234
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/55341
Commit-Queue: Ben Clayton <bclayton@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
Ben Clayton
2021-06-21 08:49:27 +00:00
committed by Tint LUCI CQ
parent c15baf695d
commit 663271dca4
16 changed files with 2061 additions and 2168 deletions

View File

@@ -1,37 +1,33 @@
SKIP: FAILED
#include <metal_stdlib>
[[block]]
using namespace metal;
struct tint_symbol_2 {
/* 0x0000 */ uint buffer_size[2];
};
struct SB_RO {
arg_0 : array<i32>;
/* 0x0000 */ int arg_0[1];
};
struct tint_symbol {
float4 value [[position]];
};
[[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
fn arrayLength_1588cd() {
var res : u32 = arrayLength(&(sb_ro.arg_0));
void arrayLength_1588cd(constant tint_symbol_2& tint_symbol_3) {
uint res = ((tint_symbol_3.buffer_size[1u] - 0u) / 4u);
}
struct tint_symbol {
[[builtin(position)]]
value : vec4<f32>;
};
[[stage(vertex)]]
fn vertex_main() -> tint_symbol {
arrayLength_1588cd();
let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
vertex tint_symbol vertex_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_1588cd(tint_symbol_3);
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
[[stage(fragment)]]
fn fragment_main() {
arrayLength_1588cd();
fragment void fragment_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_1588cd(tint_symbol_3);
return;
}
[[stage(compute)]]
fn compute_main() {
arrayLength_1588cd();
kernel void compute_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_1588cd(tint_symbol_3);
return;
}
Failed to generate: error: Unknown import method: arrayLength

View File

@@ -1,37 +1,33 @@
SKIP: FAILED
#include <metal_stdlib>
[[block]]
using namespace metal;
struct tint_symbol_2 {
/* 0x0000 */ uint buffer_size[1];
};
struct SB_RW {
arg_0 : array<i32>;
/* 0x0000 */ int arg_0[1];
};
struct tint_symbol {
float4 value [[position]];
};
[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
fn arrayLength_61b1c7() {
var res : u32 = arrayLength(&(sb_rw.arg_0));
void arrayLength_61b1c7(constant tint_symbol_2& tint_symbol_3) {
uint res = ((tint_symbol_3.buffer_size[0u] - 0u) / 4u);
}
struct tint_symbol {
[[builtin(position)]]
value : vec4<f32>;
};
[[stage(vertex)]]
fn vertex_main() -> tint_symbol {
arrayLength_61b1c7();
let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
vertex tint_symbol vertex_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_61b1c7(tint_symbol_3);
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
[[stage(fragment)]]
fn fragment_main() {
arrayLength_61b1c7();
fragment void fragment_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_61b1c7(tint_symbol_3);
return;
}
[[stage(compute)]]
fn compute_main() {
arrayLength_61b1c7();
kernel void compute_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_61b1c7(tint_symbol_3);
return;
}
Failed to generate: error: Unknown import method: arrayLength

View File

@@ -1,37 +1,33 @@
SKIP: FAILED
#include <metal_stdlib>
[[block]]
using namespace metal;
struct tint_symbol_2 {
/* 0x0000 */ uint buffer_size[2];
};
struct SB_RO {
arg_0 : array<f32>;
/* 0x0000 */ float arg_0[1];
};
struct tint_symbol {
float4 value [[position]];
};
[[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
fn arrayLength_a0f5ca() {
var res : u32 = arrayLength(&(sb_ro.arg_0));
void arrayLength_a0f5ca(constant tint_symbol_2& tint_symbol_3) {
uint res = ((tint_symbol_3.buffer_size[1u] - 0u) / 4u);
}
struct tint_symbol {
[[builtin(position)]]
value : vec4<f32>;
};
[[stage(vertex)]]
fn vertex_main() -> tint_symbol {
arrayLength_a0f5ca();
let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
vertex tint_symbol vertex_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_a0f5ca(tint_symbol_3);
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
[[stage(fragment)]]
fn fragment_main() {
arrayLength_a0f5ca();
fragment void fragment_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_a0f5ca(tint_symbol_3);
return;
}
[[stage(compute)]]
fn compute_main() {
arrayLength_a0f5ca();
kernel void compute_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_a0f5ca(tint_symbol_3);
return;
}
Failed to generate: error: Unknown import method: arrayLength

View File

@@ -1,37 +1,33 @@
SKIP: FAILED
#include <metal_stdlib>
[[block]]
using namespace metal;
struct tint_symbol_2 {
/* 0x0000 */ uint buffer_size[1];
};
struct SB_RW {
arg_0 : array<f32>;
/* 0x0000 */ float arg_0[1];
};
struct tint_symbol {
float4 value [[position]];
};
[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
fn arrayLength_cdd123() {
var res : u32 = arrayLength(&(sb_rw.arg_0));
void arrayLength_cdd123(constant tint_symbol_2& tint_symbol_3) {
uint res = ((tint_symbol_3.buffer_size[0u] - 0u) / 4u);
}
struct tint_symbol {
[[builtin(position)]]
value : vec4<f32>;
};
[[stage(vertex)]]
fn vertex_main() -> tint_symbol {
arrayLength_cdd123();
let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
vertex tint_symbol vertex_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_cdd123(tint_symbol_3);
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
[[stage(fragment)]]
fn fragment_main() {
arrayLength_cdd123();
fragment void fragment_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_cdd123(tint_symbol_3);
return;
}
[[stage(compute)]]
fn compute_main() {
arrayLength_cdd123();
kernel void compute_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_cdd123(tint_symbol_3);
return;
}
Failed to generate: error: Unknown import method: arrayLength

View File

@@ -1,37 +1,33 @@
SKIP: FAILED
#include <metal_stdlib>
[[block]]
using namespace metal;
struct tint_symbol_2 {
/* 0x0000 */ uint buffer_size[2];
};
struct SB_RO {
arg_0 : array<u32>;
/* 0x0000 */ uint arg_0[1];
};
struct tint_symbol {
float4 value [[position]];
};
[[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
fn arrayLength_cfca0a() {
var res : u32 = arrayLength(&(sb_ro.arg_0));
void arrayLength_cfca0a(constant tint_symbol_2& tint_symbol_3) {
uint res = ((tint_symbol_3.buffer_size[1u] - 0u) / 4u);
}
struct tint_symbol {
[[builtin(position)]]
value : vec4<f32>;
};
[[stage(vertex)]]
fn vertex_main() -> tint_symbol {
arrayLength_cfca0a();
let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
vertex tint_symbol vertex_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_cfca0a(tint_symbol_3);
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
[[stage(fragment)]]
fn fragment_main() {
arrayLength_cfca0a();
fragment void fragment_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_cfca0a(tint_symbol_3);
return;
}
[[stage(compute)]]
fn compute_main() {
arrayLength_cfca0a();
kernel void compute_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_cfca0a(tint_symbol_3);
return;
}
Failed to generate: error: Unknown import method: arrayLength

View File

@@ -1,37 +1,33 @@
SKIP: FAILED
#include <metal_stdlib>
[[block]]
using namespace metal;
struct tint_symbol_2 {
/* 0x0000 */ uint buffer_size[1];
};
struct SB_RW {
arg_0 : array<u32>;
/* 0x0000 */ uint arg_0[1];
};
struct tint_symbol {
float4 value [[position]];
};
[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
fn arrayLength_eb510f() {
var res : u32 = arrayLength(&(sb_rw.arg_0));
void arrayLength_eb510f(constant tint_symbol_2& tint_symbol_3) {
uint res = ((tint_symbol_3.buffer_size[0u] - 0u) / 4u);
}
struct tint_symbol {
[[builtin(position)]]
value : vec4<f32>;
};
[[stage(vertex)]]
fn vertex_main() -> tint_symbol {
arrayLength_eb510f();
let tint_symbol_1 : tint_symbol = tint_symbol(vec4<f32>());
vertex tint_symbol vertex_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_eb510f(tint_symbol_3);
tint_symbol const tint_symbol_1 = {.value=float4()};
return tint_symbol_1;
}
[[stage(fragment)]]
fn fragment_main() {
arrayLength_eb510f();
fragment void fragment_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_eb510f(tint_symbol_3);
return;
}
[[stage(compute)]]
fn compute_main() {
arrayLength_eb510f();
kernel void compute_main(constant tint_symbol_2& tint_symbol_3 [[buffer(30)]]) {
arrayLength_eb510f(tint_symbol_3);
return;
}
Failed to generate: error: Unknown import method: arrayLength