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

    <tr>
        <th>Summary</th>
        <td>
            [SPIR-V] Invalid OpPhi lowering
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    `phi_node_issue.ll`:

```llvm
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-G1"
target triple = "spirv64-unknown-unknown-unknown"

declare i64 @_Z14atomic_cmpxchgPU8CLglobalVlll(ptr addrspace(1), i64, i64)

define spir_kernel void @_Z3foo13CLDeviceArrayI5Int64Li0ELi1EE(ptr addrspace(1) %0) {
conversion:
  br label %L6

L6: ; preds = %L6, %conversion
  %value_phi = phi i64 [ 0, %conversion ], [ %1, %L6 ]
  %1 = call i64 @_Z14atomic_cmpxchgPU8CLglobalVlll(ptr addrspace(1) %0, i64 %value_phi, i64 0)
  br label %L6
}
```

Compiling with `llc -filetype=obj phi_node_issue.ll -o phi_node_issue.spv, I get the following SPIR-V:

```llvm
; SPIR-V
; Version: 1.4
; Generator: LLVM LLVM SPIR-V Backend; 20
; Bound: 34
; Schema: 0
 OpCapability Kernel
               OpCapability Addresses
 OpCapability Int64
          %1 = OpExtInstImport "OpenCL.std"
 OpMemoryModel Physical64 OpenCL
               OpEntryPoint Kernel %_Z3foo13CLDeviceArrayI5Int64Li0ELi1EE "_Z3foo13CLDeviceArrayI5Int64Li0ELi1EE"
               OpExecutionMode %_Z3foo13CLDeviceArrayI5Int64Li0ELi1EE ContractionOff
 OpSource OpenCL_CPP 100000
               OpName %_Z3foo13CLDeviceArrayI5Int64Li0ELi1EE "_Z3foo13CLDeviceArrayI5Int64Li0ELi1EE"
               OpName %conversion "conversion"
               OpName %value_phi "value_phi"
 OpName %L6 "L6"
      %ulong = OpTypeInt 64 0
%_ptr_CrossWorkgroup_ulong = OpTypePointer CrossWorkgroup %ulong
       %void = OpTypeVoid
 %uint = OpTypeInt 32 0
          %8 = OpConstantNull %ulong
          %9 = OpTypeFunction %void %_ptr_CrossWorkgroup_ulong
     %uint_0 = OpConstant %uint 0
     %uint_2 = OpConstant %uint 2
%_Z3foo13CLDeviceArrayI5Int64Li0ELi1EE = OpFunction %void None %9
 %13 = OpFunctionParameter %_ptr_CrossWorkgroup_ulong
 %conversion = OpLabel
               OpBranch %L6
         %L6 = OpLabel
  %value_phi = OpPhi %ulong %8 %conversion %15 %L6
         %15 = OpAtomicCompareExchange %uint %13 %uint_2 %uint_0 %uint_0 %8 %value_phi
               OpBranch %L6
               OpFunctionEnd
```

Running `spirv-val phi_node_issue.spv` then errors with:

```
error: line 26: OpPhi's result type <id> '4[%ulong]' does not match incoming value <id> '15[%15]' type <id> '7[%uint]'.
  %value_phi = OpPhi %ulong %8 %conversion %15 %L6
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVttu2zgQ_Rr6hZBBURfLD37wJSmMdRuj3c0C-2LQEm2xoUiBpJT47xdDyZfYbjdFNzBKlTxzeDgz5AyzVuwV5xOUzFCyGLDGldpMrKi4VjYvWbMdbHVxmKCU1KXYKF3wjbC24UMpUUpQNEXE_1LS_aRsK0Smjpk9d7hgjkl20I3DKFpgRCkPRBqjaJrGQRumKJqGadBSmIlo0Ea0_4izHjP2GJoFbTiGRZoAPkmPn0kIs0lIgzYkngeG4FOIKD3rcEbUkh812FqYNo2DRr0o_aqux84SkWnBc8kMxyKNMYrJ5p8wZk5XIt_kVf2Wl_v1X9l8tZd6y-SzlBLRrHYGs6IwtmY5RzQLER0jOgeK0zA-su-E4hjEbF64UVziVoui2ynaaR1G89WCtyLnU2PYYZkslUvjlSAPKxE-PPxgN4xoQvw4miEyzbVqubFCqy5WGG8NlmzLJQBXaadlBf7EKJrh2vDC9o6CZTqHjwsWoEA0aZls-KYuhcfC6L2UzDC5scEoWfjJZAYLYQ9YpX6hJww9Uc6k_F1_9x6YdzwXUo9zpIvBPVeMFpfJ3DlnrqtaSKH2-FW4Evskz3GwE5K7Q81RtNDb7_jmeuBAX0_augUNS-xzsuR4p6XUr0D9bb38Gjz_8D5BaHpI95_nU1BxOIz7yU9cccOcNjC9Wj1_7v7pDPGM5S9cFQCkpLeY6QZmpjg6cnzLS14xmAIMfqrnrGZbIYU74D98mnrXvft7B5oWheHWcntj7vP3nfUp7k_1w5tbKuuWVa2Ng1v6VHM1Xw2tK7oLiZ_qz7zS5vBZF1zidXmwImcyjXGHvCfrQTlzWGuhXK8ddvzQ7QIFH7yG9O7ObzxvnNAK1H5817lWzrAcDJ92u-7U33Rjct6fcjNfr3FI4O_etl9Y9Qu7_eYZj5td3nRKL96Kn5tdPCGUXlzSPthHGDwTlMJTdGZDNGmkVvs-d_481HypHPZ3m0zh_LUzm7nR1v6tzcve6KbeXFv4vOAGv4eduM_SQat_mU-mz1oUsA5YSK73MiKKyXWaZz1mrpV1TLkvjZR3turA4wvCx0b5dDir-MnpjkS9rg252vUkmFwj6Y-QtHfoxxLKc9xI_qKVD-W491kYXSHXzLCKQzD-63RX6eZZVvCG38u0mWEqL0-v-6WLIauujG-q2lO99sl5zDUfxat0T8LkLj9Me4qpr2BQQ5jhD295ydSenxOnc8Y5COfAXX5l7-vYLxz1uH709IMqbivc10YpKEIoJb43Clom79WulEDVUpgbo4315fC2YiEy9etQQiR0ONQ3F96ZiI4sNtw20mGonRhFc1GgCJ6iUQxN6PFGQMcwwoXmFivtcMVcXmKhcl2BUO-Kd8Zh0lnD6E1v6Ec9vVCugwz_n6ifDj4oJlExjsZswCfhKIlHSTQeZ4NyMk5Hox2P86zY8jTZxSENw2wbRmQ3iqKE5AMxoYQmJCPjMInGSTbM8l2WjUiaM1KQZEdRTHjFhBxCOzDUZj_wQZmECc3SaOCbGOubeEoVf8V-FR7MZDEwEzAKts3eophIYZ090zjhpO_---YiWeClapkURe8HqV-5EWo_aIyclM7VFiJOHxF93AtXNtthritEH32f0g1BbfR3njtEH70Oi-hjL7Sd0H8DAAD__wceqNM">