diff options
| author | Yong He <yonghe@outlook.com> | 2022-10-10 15:59:45 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-10 15:59:45 -0700 |
| commit | 768e62f6c7541439e2edc18dad5fb3846d2e05f9 (patch) | |
| tree | 8c68424ee65905b77d3ecb4c7659c5fdcc6ab948 /tests/language-feature/multi-level-break.slang | |
| parent | 8487678d6504459935fec07886d2e53ed688ac2f (diff) | |
Support multi-level break + single-return conversion + general inline. (#2436)
* Support multi-level break.
* Single return.
* Add test for inlining `void` return-type functions.
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tests/language-feature/multi-level-break.slang')
| -rw-r--r-- | tests/language-feature/multi-level-break.slang | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/language-feature/multi-level-break.slang b/tests/language-feature/multi-level-break.slang new file mode 100644 index 000000000..5ebe82e36 --- /dev/null +++ b/tests/language-feature/multi-level-break.slang @@ -0,0 +1,52 @@ +// multi-level-break.slang + +//TEST(compute):COMPARE_COMPUTE: -shaderobj +//DISABLE_TEST(compute):COMPARE_COMPUTE:-cpu -shaderobj + +int test(int r) +{ + int result = 0; +iLoop: + for (int i = 0; i < 2; i++) + { + jLoop: + for (int j = 0; j < 3; j++) + { + for (;;) + { + result++; + if (r == 0) + { + // When r == 0, we break out the outter most loop, + // resulting the inner most statement being run only once. + break iLoop; + } + else if (r == 1) + { + // When r == 1, we break out the `j` loop, + // resulting the inner most statement being run loop-i times. + break jLoop; + } + else + { + // When r takes other values, we break out the inner most loop p, + // resulting the inner most statement being run i*j times. + break; + } + } + } + } + return result; +} + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + outputBuffer[0] = test(0); + outputBuffer[1] = test(1); + outputBuffer[2] = test(2); + outputBuffer[3] = 0; +} |
