41 lines · plain
1// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \2// RUN: spirv-pc-vulkan-library %s -emit-llvm -disable-llvm-passes -o - | FileCheck %s3 4// CHECK: define hidden spir_func void @{{.*main.*}}() [[A0:#[0-9]+]] {5void main() {6// CHECK: entry:7// CHECK: %[[CT_ENTRY:[0-9]+]] = call token @llvm.experimental.convergence.entry()8// CHECK: br label %[[LABEL_WHILE_COND:.+]]9 int cond = 0;10 11// CHECK: [[LABEL_WHILE_COND]]:12// CHECK: %[[CT_LOOP:[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %[[CT_ENTRY]]) ]13// CHECK: br label %[[LABEL_WHILE_BODY:.+]]14 while (true) {15 16// CHECK: [[LABEL_WHILE_BODY]]:17// CHECK: br i1 {{%.+}}, label %[[LABEL_IF_THEN:.+]], label %[[LABEL_IF_END:.+]]18 19// CHECK: [[LABEL_IF_THEN]]:20// CHECK: call spir_func i32 @__hlsl_wave_get_lane_index() [ "convergencectrl"(token %[[CT_LOOP]]) ]21// CHECK: br label %[[LABEL_WHILE_END:.+]]22 if (cond == 2) {23 uint index = WaveGetLaneIndex();24 break;25 }26 27// CHECK: [[LABEL_IF_END]]:28// CHECK: br label %[[LABEL_WHILE_COND]]29 cond++;30 }31 32// CHECK: [[LABEL_WHILE_END]]:33// CHECK: ret void34}35 36// CHECK-DAG: declare spir_func i32 @__hlsl_wave_get_lane_index() [[A1:#[0-9]+]]37 38// CHECK-DAG: attributes [[A0]] = {{{.*}}convergent{{.*}}}39// CHECK-DAG: attributes [[A1]] = {{{.*}}convergent{{.*}}}40 41