11ed65febSNathan Gauër; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-vulkan-compute %s -o - -filetype=obj | spirv-val %} 20c07e7c2SNathan Gauër; RUN: llc -mtriple=spirv-unknown-vulkan-compute -O0 %s -o - | FileCheck %s 30c07e7c2SNathan Gauër 40c07e7c2SNathan Gauërtarget datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-G1" 50c07e7c2SNathan Gauërtarget triple = "spirv-unknown-vulkan-compute" 60c07e7c2SNathan Gauër 70c07e7c2SNathan Gauërdefine internal spir_func void @main() #0 { 80c07e7c2SNathan Gauër 90c07e7c2SNathan Gauër; CHECK: %[[#entry:]] = OpLabel 100c07e7c2SNathan Gauër; CHECK: OpBranch %[[#while_cond:]] 110c07e7c2SNathan Gauërentry: 120c07e7c2SNathan Gauër %0 = call token @llvm.experimental.convergence.entry() 130c07e7c2SNathan Gauër %idx = alloca i32, align 4 140c07e7c2SNathan Gauër store i32 -1, ptr %idx, align 4 150c07e7c2SNathan Gauër br label %while.cond 160c07e7c2SNathan Gauër 170c07e7c2SNathan Gauër; CHECK: %[[#while_cond]] = OpLabel 180c07e7c2SNathan Gauër; CHECK: OpBranchConditional %[[#cond:]] %[[#while_body:]] %[[#while_end:]] 190c07e7c2SNathan Gauërwhile.cond: 200c07e7c2SNathan Gauër %1 = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %0) ] 210c07e7c2SNathan Gauër %2 = load i32, ptr %idx, align 4 220c07e7c2SNathan Gauër %cmp = icmp ne i32 %2, 0 230c07e7c2SNathan Gauër br i1 %cmp, label %while.body, label %while.end 240c07e7c2SNathan Gauër 25*53326ee0SNathan Gauër; CHECK: %[[#while_end]] = OpLabel 26*53326ee0SNathan Gauër; CHECK-NEXT: OpReturn 27*53326ee0SNathan Gauërwhile.end: 28*53326ee0SNathan Gauër ret void 29*53326ee0SNathan Gauër 300c07e7c2SNathan Gauër; CHECK: %[[#while_body]] = OpLabel 310c07e7c2SNathan Gauër; CHECK: OpBranch %[[#while_cond]] 320c07e7c2SNathan Gauërwhile.body: 330c07e7c2SNathan Gauër %3 = call i32 @__hlsl_wave_get_lane_index() [ "convergencectrl"(token %1) ] 340c07e7c2SNathan Gauër store i32 %3, ptr %idx, align 4 350c07e7c2SNathan Gauër br label %while.cond 360c07e7c2SNathan Gauër 370c07e7c2SNathan Gauër} 380c07e7c2SNathan Gauër 390c07e7c2SNathan Gauërdeclare token @llvm.experimental.convergence.entry() #2 400c07e7c2SNathan Gauërdeclare token @llvm.experimental.convergence.loop() #2 410c07e7c2SNathan Gauërdeclare i32 @__hlsl_wave_get_lane_index() #3 420c07e7c2SNathan Gauër 430c07e7c2SNathan Gauërattributes #0 = { convergent noinline norecurse nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" } 440c07e7c2SNathan Gauërattributes #1 = { convergent norecurse "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" "no-trapping-math"="true" "stack-protector-buffer-size"="8" } 450c07e7c2SNathan Gauërattributes #2 = { convergent nocallback nofree nosync nounwind willreturn memory(none) } 460c07e7c2SNathan Gauërattributes #3 = { convergent } 470c07e7c2SNathan Gauër 480c07e7c2SNathan Gauër!llvm.module.flags = !{!0, !1} 490c07e7c2SNathan Gauër 500c07e7c2SNathan Gauër!0 = !{i32 1, !"wchar_size", i32 4} 510c07e7c2SNathan Gauër!1 = !{i32 4, !"dx.disable_optimizations", i32 1} 52