| // RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \ |
| // RUN: spirv-pc-vulkan-library %s -emit-llvm -disable-llvm-passes -o - | FileCheck %s |
| |
| int process() { |
| // CHECK: entry: |
| // CHECK: %[[#entry_token:]] = call token @llvm.experimental.convergence.entry() |
| int val = 0; |
| |
| // CHECK: for.cond: |
| // CHECK-NEXT: %[[#]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %[[#entry_token]]) ] |
| // CHECK: br i1 {{.*}}, label %for.body, label %for.end |
| for (int i = 0; i < 10; ++i) { |
| |
| // CHECK: for.body: |
| // CHECK: br label %for.inc |
| val = i; |
| |
| // CHECK: for.inc: |
| // CHECK: br label %for.cond |
| } |
| |
| // CHECK: for.end: |
| // CHECK: br label %for.cond1 |
| |
| // Infinite loop |
| for ( ; ; ) { |
| // CHECK: for.cond1: |
| // CHECK-NEXT: %[[#]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %[[#entry_token]]) ] |
| // CHECK: br label %for.cond1 |
| val = 0; |
| } |
| |
| // CHECK-NEXT: } |
| // This loop in unreachable. Not generated. |
| // Null body |
| for (int j = 0; j < 10; ++j) |
| ; |
| return val; |
| } |
| |
| [numthreads(1, 1, 1)] |
| void main() { |
| process(); |
| } |