129 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();5bool cond2();6void foo();7 8void test1() {9 for (;;) {10 foo();11 }12}13// CHECK-LABEL: define hidden spir_func void @_Z5test1v()14// CHECK-SAME: [[A0:#[0-9]+]] {15// CHECK: entry:16// CHECK: [[T0:%[0-9]+]] = call token @llvm.experimental.convergence.entry()17// CHECK: for.cond:18// CHECK: [[T1:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T0]]) ]19// CHECK: call spir_func void @_Z3foov() [[A3:#[0-9]+]] [ "convergencectrl"(token [[T1]]) ]20 21void test2() {22 for (;cond();) {23 foo();24 }25}26// CHECK-LABEL: define hidden spir_func void @_Z5test2v()27// CHECK-SAME: [[A0]] {28// CHECK: entry:29// CHECK: [[T0:%[0-9]+]] = call token @llvm.experimental.convergence.entry()30// CHECK: for.cond:31// CHECK: [[T1:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T0]]) ]32// CHECK: call spir_func noundef i1 @_Z4condv() [[A3]] [ "convergencectrl"(token [[T1]]) ]33// CHECK: for.body:34// CHECK: call spir_func void @_Z3foov() [[A3]] [ "convergencectrl"(token [[T1]]) ]35 36void test3() {37 for (cond();;) {38 foo();39 }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: call spir_func noundef i1 @_Z4condv() [[A3]] [ "convergencectrl"(token [[T0]]) ]46// CHECK: for.cond:47// CHECK: [[T1:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T0]]) ]48// CHECK: call spir_func void @_Z3foov() [[A3]] [ "convergencectrl"(token [[T1]]) ]49 50void test4() {51 for (cond();cond2();) {52 foo();53 }54}55// CHECK-LABEL: define hidden spir_func void @_Z5test4v()56// CHECK-SAME: [[A0]] {57// CHECK: entry:58// CHECK: [[T0:%[0-9]+]] = call token @llvm.experimental.convergence.entry()59// CHECK: call spir_func noundef i1 @_Z4condv() [[A3]] [ "convergencectrl"(token [[T0]]) ]60// CHECK: for.cond:61// CHECK: [[T1:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T0]]) ]62// CHECK: call spir_func noundef i1 @_Z5cond2v() [[A3]] [ "convergencectrl"(token [[T1]]) ]63// CHECK: for.body:64// CHECK: call spir_func void @_Z3foov() [[A3]] [ "convergencectrl"(token [[T1]]) ]65 66void test5() {67 for (cond();cond2();foo()) {68 }69}70// CHECK-LABEL: define hidden spir_func void @_Z5test5v()71// CHECK-SAME: [[A0]] {72// CHECK: entry:73// CHECK: [[T0:%[0-9]+]] = call token @llvm.experimental.convergence.entry()74// CHECK: call spir_func noundef i1 @_Z4condv() [[A3]] [ "convergencectrl"(token [[T0]]) ]75// CHECK: for.cond:76// CHECK: [[T1:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T0]]) ]77// CHECK: call spir_func noundef i1 @_Z5cond2v() [[A3]] [ "convergencectrl"(token [[T1]]) ]78// CHECK: for.inc:79// CHECK: call spir_func void @_Z3foov() [[A3]] [ "convergencectrl"(token [[T1]]) ]80 81void test6() {82 for (cond();cond2();foo()) {83 if (cond()) {84 foo();85 break;86 }87 }88}89// CHECK-LABEL: define hidden spir_func void @_Z5test6v()90// CHECK-SAME: [[A0]] {91// CHECK: entry:92// CHECK: [[T0:%[0-9]+]] = call token @llvm.experimental.convergence.entry()93// CHECK: call spir_func noundef i1 @_Z4condv() [[A3]] [ "convergencectrl"(token [[T0]]) ]94// CHECK: for.cond:95// CHECK: [[T1:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T0]]) ]96// CHECK: call spir_func noundef i1 @_Z5cond2v() [[A3]] [ "convergencectrl"(token [[T1]]) ]97// CHECK: for.body:98// CHECK: [[C1:%[a-zA-Z0-9]+]] = call spir_func noundef i1 @_Z4condv() [[A3]] [ "convergencectrl"(token [[T1]]) ]99// CHECK: br i1 [[C1]], label %if.then, label %if.end100// CHECK: if.then:101// CHECK: call spir_func void @_Z3foov() [[A3]] [ "convergencectrl"(token [[T1]]) ]102// CHECK: br label %for.end103// CHECK: if.end:104// CHECK: br label %for.inc105// CHECK: for.inc:106// CHECK: call spir_func void @_Z3foov() [[A3]] [ "convergencectrl"(token [[T1]]) ]107 108void test7() {109 for (cond();;) {110 for (cond();;) {111 foo();112 }113 }114}115// CHECK-LABEL: define hidden spir_func void @_Z5test7v()116// CHECK-SAME: [[A0]] {117// CHECK: entry:118// CHECK: [[T0:%[0-9]+]] = call token @llvm.experimental.convergence.entry()119// CHECK: call spir_func noundef i1 @_Z4condv() [[A3]] [ "convergencectrl"(token [[T0]]) ]120// CHECK: for.cond:121// CHECK: [[T1:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T0]]) ]122// CHECK: call spir_func noundef i1 @_Z4condv() [[A3]] [ "convergencectrl"(token [[T1]]) ]123// CHECK: for.cond3:124// CHECK: [[T2:%[0-9]+]] = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token [[T1]]) ]125// CHECK: call spir_func void @_Z3foov() [[A3]] [ "convergencectrl"(token [[T2]]) ]126 127// CHECK-DAG: attributes [[A0]] = { {{.*}}convergent{{.*}} }128// CHECK-DAG: attributes [[A3]] = { {{.*}}convergent{{.*}} }129