// 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();
}