96 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 4bool cond();5void foo();6 7void test1() {8 do {9 } while (cond());10}11// CHECK-LABEL: define hidden spir_func void @_Z5test1v()12// CHECK-SAME: [[A0:#[0-9]+]] {13// CHECK: entry:14// CHECK: [[T0:%[0-9]+]] = call token @llvm.experimental.convergence.entry()15// CHECK: do.body:16// CHECK: [[T1:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T0]]) ]17// CHECK: do.cond:18// CHECK: call spir_func noundef i1 @_Z4condv() [[A3:#[0-9]+]] [ "convergencectrl"(token [[T1]]) ]19 20void test2() {21 do {22 foo();23 } while (cond());24}25// CHECK-LABEL: define hidden spir_func void @_Z5test2v()26// CHECK-SAME: [[A0]] {27// CHECK: entry:28// CHECK: [[T0:%[0-9]+]] = call token @llvm.experimental.convergence.entry()29// CHECK: do.body:30// CHECK: [[T1:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T0]]) ]31// CHECK: call spir_func void @_Z3foov() [[A3]] [ "convergencectrl"(token [[T1]]) ]32// CHECK: do.cond:33// CHECK: call spir_func noundef i1 @_Z4condv() [[A3]] [ "convergencectrl"(token [[T1]]) ]34 35void test3() {36 do {37 if (cond())38 foo();39 } while (cond());40}41// CHECK-LABEL: define hidden spir_func void @_Z5test3v()42// CHECK-SAME: [[A0]] {43// CHECK: entry:44// CHECK: [[T0:%[0-9]+]] = call token @llvm.experimental.convergence.entry()45// CHECK: do.body:46// CHECK: [[T1:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T0]]) ]47// CHECK: if.then:48// CHECK: call spir_func void @_Z3foov() [[A3]] [ "convergencectrl"(token [[T1]]) ]49// CHECK: do.cond:50// CHECK: call spir_func noundef i1 @_Z4condv() [[A3]] [ "convergencectrl"(token [[T1]]) ]51 52void test4() {53 do {54 if (cond()) {55 foo();56 break;57 }58 } while (cond());59}60// CHECK-LABEL: define hidden spir_func void @_Z5test4v()61// CHECK-SAME: [[A0]] {62// CHECK: entry:63// CHECK: [[T0:%[0-9]+]] = call token @llvm.experimental.convergence.entry()64// CHECK: do.body:65// CHECK: [[T1:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T0]]) ]66// CHECK: if.then:67// CHECK: call spir_func void @_Z3foov() [[A3]] [ "convergencectrl"(token [[T1]]) ]68// CHECK: do.cond:69// CHECK: call spir_func noundef i1 @_Z4condv() [[A3]] [ "convergencectrl"(token [[T1]]) ]70 71void test5() {72 do {73 while (cond()) {74 if (cond()) {75 foo();76 break;77 }78 }79 } while (cond());80}81// CHECK-LABEL: define hidden spir_func void @_Z5test5v()82// CHECK-SAME: [[A0]] {83// CHECK: entry:84// CHECK: [[T0:%[0-9]+]] = call token @llvm.experimental.convergence.entry()85// CHECK: do.body:86// CHECK: [[T1:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T0]]) ]87// CHECK: while.cond:88// CHECK: [[T2:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T1]]) ]89// CHECK: if.then:90// CHECK: call spir_func void @_Z3foov() [[A3]] [ "convergencectrl"(token [[T2]]) ]91// CHECK: do.cond:92// CHECK: call spir_func noundef i1 @_Z4condv() [[A3]] [ "convergencectrl"(token [[T1]]) ]93 94// CHECK-DAG: attributes [[A0]] = { {{.*}}convergent{{.*}} }95// CHECK-DAG: attributes [[A3]] = { {{.*}}convergent{{.*}} }96