test: Add loop test cases

Bug: tint:833
Bug: tint:914
Change-Id: Ieb34c734ad08c632c8d4e6152d856ec28f35cf85
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/55249
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: David Neto <dneto@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
This commit is contained in:
Ben Clayton 2021-06-21 19:04:56 +00:00 committed by Tint LUCI CQ
parent c3f8fdfe69
commit def7313523
20 changed files with 525 additions and 0 deletions

10
test/loops/loop.wgsl Normal file
View File

@ -0,0 +1,10 @@
fn f() -> i32 {
var i : i32;
loop {
i = i + 1;
if (i > 4) {
return i;
}
}
return 0;
}

View File

@ -0,0 +1,15 @@
[numthreads(1, 1, 1)]
void unused_entry_point() {
return;
}
int f() {
int i = 0;
while (true) {
i = (i + 1);
if ((i > 4)) {
return i;
}
}
return 0;
}

View File

@ -0,0 +1,14 @@
#include <metal_stdlib>
using namespace metal;
int f() {
int i = 0;
while (true) {
i = (i + 1);
if ((i > 4)) {
return i;
}
}
return 0;
}

View File

@ -0,0 +1,51 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 27
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
OpExecutionMode %unused_entry_point LocalSize 1 1 1
OpName %unused_entry_point "unused_entry_point"
OpName %f "f"
OpName %i "i"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
%5 = OpTypeFunction %int
%_ptr_Function_int = OpTypePointer Function %int
%11 = OpConstantNull %int
%int_1 = OpConstant %int 1
%int_4 = OpConstant %int 4
%bool = OpTypeBool
%int_0 = OpConstant %int 0
%unused_entry_point = OpFunction %void None %1
%4 = OpLabel
OpReturn
OpFunctionEnd
%f = OpFunction %int None %5
%8 = OpLabel
%i = OpVariable %_ptr_Function_int Function %11
OpBranch %12
%12 = OpLabel
OpLoopMerge %13 %14 None
OpBranch %15
%15 = OpLabel
%16 = OpLoad %int %i
%18 = OpIAdd %int %16 %int_1
OpStore %i %18
%19 = OpLoad %int %i
%21 = OpSGreaterThan %bool %19 %int_4
OpSelectionMerge %23 None
OpBranchConditional %21 %24 %23
%24 = OpLabel
%25 = OpLoad %int %i
OpReturnValue %25
%23 = OpLabel
OpBranch %14
%14 = OpLabel
OpBranch %12
%13 = OpLabel
OpReturnValue %int_0
OpFunctionEnd

View File

@ -0,0 +1,10 @@
fn f() -> i32 {
var i : i32;
loop {
i = (i + 1);
if ((i > 4)) {
return i;
}
}
return 0;
}

View File

@ -0,0 +1,12 @@
fn f() -> i32 {
var i : i32;
loop {
if (i > 4) {
return i;
}
continuing {
i = i + 1;
}
}
return 0;
}

View File

@ -0,0 +1,17 @@
[numthreads(1, 1, 1)]
void unused_entry_point() {
return;
}
int f() {
int i = 0;
while (true) {
if ((i > 4)) {
return i;
}
{
i = (i + 1);
}
}
return 0;
}

View File

@ -0,0 +1,16 @@
#include <metal_stdlib>
using namespace metal;
int f() {
int i = 0;
while (true) {
if ((i > 4)) {
return i;
}
{
i = (i + 1);
}
}
return 0;
}

View File

@ -0,0 +1,51 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 27
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
OpExecutionMode %unused_entry_point LocalSize 1 1 1
OpName %unused_entry_point "unused_entry_point"
OpName %f "f"
OpName %i "i"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
%5 = OpTypeFunction %int
%_ptr_Function_int = OpTypePointer Function %int
%11 = OpConstantNull %int
%int_4 = OpConstant %int 4
%bool = OpTypeBool
%int_1 = OpConstant %int 1
%int_0 = OpConstant %int 0
%unused_entry_point = OpFunction %void None %1
%4 = OpLabel
OpReturn
OpFunctionEnd
%f = OpFunction %int None %5
%8 = OpLabel
%i = OpVariable %_ptr_Function_int Function %11
OpBranch %12
%12 = OpLabel
OpLoopMerge %13 %14 None
OpBranch %15
%15 = OpLabel
%16 = OpLoad %int %i
%18 = OpSGreaterThan %bool %16 %int_4
OpSelectionMerge %20 None
OpBranchConditional %18 %21 %20
%21 = OpLabel
%22 = OpLoad %int %i
OpReturnValue %22
%20 = OpLabel
OpBranch %14
%14 = OpLabel
%23 = OpLoad %int %i
%25 = OpIAdd %int %23 %int_1
OpStore %i %25
OpBranch %12
%13 = OpLabel
OpReturnValue %int_0
OpFunctionEnd

View File

@ -0,0 +1,13 @@
fn f() -> i32 {
var i : i32;
loop {
if ((i > 4)) {
return i;
}
continuing {
i = (i + 1);
}
}
return 0;
}

View File

@ -0,0 +1,17 @@
fn f() -> i32 {
var i : i32;
var j : i32;
loop {
i = i + 1;
if (i > 4) {
return 1;
}
loop {
j = j + 1;
if (j > 4) {
return 2;
}
}
}
return 0;
}

View File

@ -0,0 +1,22 @@
[numthreads(1, 1, 1)]
void unused_entry_point() {
return;
}
int f() {
int i = 0;
int j = 0;
while (true) {
i = (i + 1);
if ((i > 4)) {
return 1;
}
while (true) {
j = (j + 1);
if ((j > 4)) {
return 2;
}
}
}
return 0;
}

View File

@ -0,0 +1,21 @@
#include <metal_stdlib>
using namespace metal;
int f() {
int i = 0;
int j = 0;
while (true) {
i = (i + 1);
if ((i > 4)) {
return 1;
}
while (true) {
j = (j + 1);
if ((j > 4)) {
return 2;
}
}
}
return 0;
}

View File

@ -0,0 +1,72 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 38
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
OpExecutionMode %unused_entry_point LocalSize 1 1 1
OpName %unused_entry_point "unused_entry_point"
OpName %f "f"
OpName %i "i"
OpName %j "j"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
%5 = OpTypeFunction %int
%_ptr_Function_int = OpTypePointer Function %int
%11 = OpConstantNull %int
%int_1 = OpConstant %int 1
%int_4 = OpConstant %int 4
%bool = OpTypeBool
%int_2 = OpConstant %int 2
%int_0 = OpConstant %int 0
%unused_entry_point = OpFunction %void None %1
%4 = OpLabel
OpReturn
OpFunctionEnd
%f = OpFunction %int None %5
%8 = OpLabel
%i = OpVariable %_ptr_Function_int Function %11
%j = OpVariable %_ptr_Function_int Function %11
OpBranch %13
%13 = OpLabel
OpLoopMerge %14 %15 None
OpBranch %16
%16 = OpLabel
%17 = OpLoad %int %i
%19 = OpIAdd %int %17 %int_1
OpStore %i %19
%20 = OpLoad %int %i
%22 = OpSGreaterThan %bool %20 %int_4
OpSelectionMerge %24 None
OpBranchConditional %22 %25 %24
%25 = OpLabel
OpReturnValue %int_1
%24 = OpLabel
OpBranch %26
%26 = OpLabel
OpLoopMerge %27 %28 None
OpBranch %29
%29 = OpLabel
%30 = OpLoad %int %j
%31 = OpIAdd %int %30 %int_1
OpStore %j %31
%32 = OpLoad %int %j
%33 = OpSGreaterThan %bool %32 %int_4
OpSelectionMerge %34 None
OpBranchConditional %33 %35 %34
%35 = OpLabel
OpReturnValue %int_2
%34 = OpLabel
OpBranch %28
%28 = OpLabel
OpBranch %26
%27 = OpLabel
OpBranch %15
%15 = OpLabel
OpBranch %13
%14 = OpLabel
OpReturnValue %int_0
OpFunctionEnd

View File

@ -0,0 +1,17 @@
fn f() -> i32 {
var i : i32;
var j : i32;
loop {
i = (i + 1);
if ((i > 4)) {
return 1;
}
loop {
j = (j + 1);
if ((j > 4)) {
return 2;
}
}
}
return 0;
}

View File

@ -0,0 +1,21 @@
fn f() -> i32 {
var i : i32;
var j : i32;
loop {
if (i > 4) {
return 1;
}
loop {
if (j > 4) {
return 2;
}
continuing {
j = j + 1;
}
}
continuing {
i = i + 1;
}
}
return 0;
}

View File

@ -0,0 +1,26 @@
[numthreads(1, 1, 1)]
void unused_entry_point() {
return;
}
int f() {
int i = 0;
int j = 0;
while (true) {
if ((i > 4)) {
return 1;
}
while (true) {
if ((j > 4)) {
return 2;
}
{
j = (j + 1);
}
}
{
i = (i + 1);
}
}
return 0;
}

View File

@ -0,0 +1,25 @@
#include <metal_stdlib>
using namespace metal;
int f() {
int i = 0;
int j = 0;
while (true) {
if ((i > 4)) {
return 1;
}
while (true) {
if ((j > 4)) {
return 2;
}
{
j = (j + 1);
}
}
{
i = (i + 1);
}
}
return 0;
}

View File

@ -0,0 +1,72 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 38
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
OpExecutionMode %unused_entry_point LocalSize 1 1 1
OpName %unused_entry_point "unused_entry_point"
OpName %f "f"
OpName %i "i"
OpName %j "j"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
%5 = OpTypeFunction %int
%_ptr_Function_int = OpTypePointer Function %int
%11 = OpConstantNull %int
%int_4 = OpConstant %int 4
%bool = OpTypeBool
%int_1 = OpConstant %int 1
%int_2 = OpConstant %int 2
%int_0 = OpConstant %int 0
%unused_entry_point = OpFunction %void None %1
%4 = OpLabel
OpReturn
OpFunctionEnd
%f = OpFunction %int None %5
%8 = OpLabel
%i = OpVariable %_ptr_Function_int Function %11
%j = OpVariable %_ptr_Function_int Function %11
OpBranch %13
%13 = OpLabel
OpLoopMerge %14 %15 None
OpBranch %16
%16 = OpLabel
%17 = OpLoad %int %i
%19 = OpSGreaterThan %bool %17 %int_4
OpSelectionMerge %21 None
OpBranchConditional %19 %22 %21
%22 = OpLabel
OpReturnValue %int_1
%21 = OpLabel
OpBranch %24
%24 = OpLabel
OpLoopMerge %25 %26 None
OpBranch %27
%27 = OpLabel
%28 = OpLoad %int %j
%29 = OpSGreaterThan %bool %28 %int_4
OpSelectionMerge %30 None
OpBranchConditional %29 %31 %30
%31 = OpLabel
OpReturnValue %int_2
%30 = OpLabel
OpBranch %26
%26 = OpLabel
%33 = OpLoad %int %j
%34 = OpIAdd %int %33 %int_1
OpStore %j %34
OpBranch %24
%25 = OpLabel
OpBranch %15
%15 = OpLabel
%35 = OpLoad %int %i
%36 = OpIAdd %int %35 %int_1
OpStore %i %36
OpBranch %13
%14 = OpLabel
OpReturnValue %int_0
OpFunctionEnd

View File

@ -0,0 +1,23 @@
fn f() -> i32 {
var i : i32;
var j : i32;
loop {
if ((i > 4)) {
return 1;
}
loop {
if ((j > 4)) {
return 2;
}
continuing {
j = (j + 1);
}
}
continuing {
i = (i + 1);
}
}
return 0;
}