<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/97311>97311</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [SPIR-V] Incorrect builtin implementation for work_group_all
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:SPIR-V
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          michalpaszkowski
      </td>
    </tr>
</table>

<pre>
    ```
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v12
8:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024"
target triple = "spir64-unknown-unknown"

; Function Attrs: nounwind
define spir_kernel void @test_wg_all(ptr addrspace(1) %input, ptr addrspace(1) %output) #0 !kernel_arg_addr_space !7 !kernel_arg_access_qual !8 !kernel_arg_type !9
 !kernel_arg_type_qual !10 !kernel_arg_base_type !9 !spirv.ParameterDecorations !11 {
entry:
  %0 = call spir_func i64 @_Z13get_global_idj(i32 0) #1
  %1 = insertelement <3 x i64> undef, i64 %0, i32 0
  %2 = call spir_func i64 @_Z13get_global_idj(i32 1) #1
  %3 = insertelement <3 x i64> %1, i64 %2, i32 1
  %4 = call spir_func i64 @_Z13get_global_idj(i32 2) #1
  %5 = insertelement <3 x i64> %3, i64 %4, i32 2
  %call = extractelement <3 x i64> %5, i32 0
  %conv = trunc i64 %call to i32
  %idxprom = sext i32 %conv to i64
  %arrayidx = getelementptr inbounds float, ptr addrspace(1) %input, i64 %idxprom
  %6 = load float, ptr addrspace(1) %arrayidx, align 4
  %add = add nsw i32 %conv, 1
  %idxprom1 = sext i32 %add to i64
  %arrayidx2 = getelementptr inbounds float, ptr addrspace(1) %input, i64 %idxprom1
  %7 = load float, ptr addrspace(1) %arrayidx2, align 4
  %cmp = fcmp ogt float %6, %7
  %conv3 = select i1 %cmp, i32 1, i32 0
  %8 = icmp ne i32 %conv3, 0
  %9 = zext i1 %8 to i32
  %10 = call spir_func i32 @_Z14work_group_alli(i32 %9) #2
  %call41 = icmp ne i32 %10, 0
  %call4 = select i1 %call41, i32 1, i32 0
  %idxprom5 = sext i32 %conv to i64
 %arrayidx6 = getelementptr inbounds i32, ptr addrspace(1) %output, i64 %idxprom5
  store i32 %call4, ptr addrspace(1) %arrayidx6, align 4
 ret void
}

; Function Attrs: nounwind willreturn memory(none)
declare spir_func i64 @_Z13get_global_idj(i32) #1

; Function Attrs: convergent nounwind
declare spir_func i32 @_Z14work_group_alli(i32) #2

attributes #0 = { nounwind }
attributes #1 = { nounwind willreturn memory(none) }
attributes #2 = { convergent nounwind }

!spirv.MemoryModel = !{!0}
!opencl.enable.FP_CONTRACT = !{}
!spirv.Source = !{!1}
!opencl.spir.version = !{!2}
!opencl.ocl.version = !{!3}
!opencl.used.extensions = !{!4}
!opencl.used.optional.core.features = !{!5}
!spirv.Generator = !{!6}

!0 = !{i32 2, i32 2}
!1 = !{i32 3, i32 300000}
!2 = !{i32 2, i32 0}
!3 = !{i32 3, i32 0}
!4 = !{!"cl_khr_subgroups"}
!5 = !{}
!6 = !{i16 6, i16 14}
!7 = !{i32 1, i32 1}
!8 = !{!"none", !"none"}
!9 = !{!"float*", !"int*"}
!10 = !{!"", !""}
!11 = !{!5, !5}
```

Assertion hit when compiling with SPIR-V backend:
```
SPIRVBuiltins.cpp:1058: bool llvm::generateGroupInst(const llvm::SPIRV::IncomingCall*, llvm::MachineIRBuilder&, llvm::SPIRVGlobalRegistry*): Assertion `ArgInstruction->getOpcode() == TargetOpcode::G_CONSTANT && "Only constant bool value args are supported"' failed.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0WE1v2zoW_TX0hrAhUpZsLbxwkpeii74WafAWszEo6VrmC01qSMpO-usHl5JtSXbSoMAULaWK5x4eHl5-WTgnKw2wIskdSR4movE7Y1d7WeyEqoX79WKO7kVOclO-rUgadX-jBxKtvbAVeFoKL5R4M42nJH6ghHOY1iRep_NLMZWMxOsl_pvK5eWVpSRed8VUxpzE666YykH8dlC3HdQdBiwHPu8hD4O4w3zZjxuyZIGAL9tyemC87eZy9DlDMp6kbTk9nF9PHxKGiHM5PbAoaOo_OB946K2sFZz8c7W06Xza6Bdtjvr0PMd0ZXxHHxtdeGk0XXtvHYnXVJtGH6UuW0wJW6mBIt_mBawGRQ9GlpTMIw_Ob47VRihF-LL2loqytK4WBRC-ZIRnlPBE6rrxhN_T9wCm8QGB_4kjSjhr29kIW20wYBMisGIxri0KcG7z30YorFmOqv1bHcKytis3as-hbNxwLhxcCLBACw6zH8KKPXiwD1AYK9A6FwgYJYu7tiHQ3r6RuHOZYiejMDCFUKq1ctvogsp0jj5u_sPiCvymUiYXaiPLfwlfypjTqDOF9YhYIJLagfWgYA8a58x9TF9pSPe_aKNL2KLhgZ4nUXgPdBca_id62A098W_1oOieHH6S02eZ_4kcfkNO8hk5cU_O_CSH91iCECSCV29F8T5TcsvbwuhDiPb23I2O0xtE97CyfK2t2Qe4g1cfyE4ciE7nPbSwVrzJ8jXAKzjpwpkldW4aXTq6VUZ8ON_OE7IT1knoNZMGfmVE-Xu2kyTECCUrTQeCyzJw4VO7Y793GMCunWBXVmDsu07w_4cVfVmLP_CC3zaj2NeBbIsvpvItYTAcA7CxURbFnRkKCk8l60guE-hG8i3bCYBNaOj7HZK-j8wC8ldwmrWhV-nJbq9byBom5vxo7MumsqapcRuQ3cxE9m5yjqfVnN0SyKKxuoC90f1A8aED3SAmn5hTvTFLP0okNOUTO9g4j5KTKueNvQwGduEzaZRep5EFH7bfbv9ePHx-O6dHqZQF31hN97A39o3wpTYaCM9OW32hhIXPr8DD9fcjEWg92ArX0PHx4qrN3yTXMK_aUnhvZd54cN0ZAg9Bi7tL389ODZHsGvmBS--x8DPLjW7S8SCdDhLfAvs3U4LqDm0MDxCcRZcIzkwNulAz0CJXMHv8sbn__vfz0_r-uR_Tw7fcP01jCxjSshu0iJ4dwDocrAGa30CbQt0GxzfAjYNyBq8etGuPSP2A-XsBpsa8EWpWGAuzLQjfWBgFJ9f9_QIarPDGDpHptfdRD9GdIU7bf4-VjVDxCRVH-KcP5e8RDlDxe4QD1Hwon3BeqM3Lzm5ck4dp4PAA3wtI3smCtN8cS2lYSfBl6PxipKq3rvZQyytV7Xzg7abV_9CLyq6iuu1zPYiU-vSpb390FTwIGsPZOEFaZC9RhrfOtlw7PCRiMu-kp8cdaFqYfS2V1BU9Sr-jP398fZr-Q3NRvIAuzwf6ERui_rlrpPJSu1lR1-GCluBtj-bGKKrUYY_B8bpq8xS-4GB-1c4TviyMdr6HCXTt61ddmL3U1X24Ya2xWxfcN1HspIavT9h0CZbwdAgIRF_Ckv0ElXR4J0GSDIVdOk_SaG0rFGObsGpPSfxXBf57XZgSt6Ww8sUPaPFzuGp2NaGRL7gg_Xxe__1Mg4AUL5_ftXqjoV9C-9aDg1ANUGErR8Ny39S1sR7KMJoLuhVSQTkb-TspV3GZxZmYwIotWLZMIh4nk90qytK4XC4Fg22R5wyi7TzKShZlizRPy5RP5IpHfB4tIsZSFsV8FsOiyFLIiyQS2yhjZB7BXkg1Q79mxlYT6VwDq2wRMzZRIgflwg8anF-Gv80HlJw8TOwKQ6d5Uzkyj5R03l3IvPQq_CDShSQPFAfTWjzJ5G2uULmv27NGuEXSrbF0uONNGqtWO-9r3EMJfyT8sZJ-1-SzwuwJfwxj3T6mtTX_QuEJfwwdcYQ_tn05rPj_AgAA__8D1_IV">