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

    <tr>
        <th>Summary</th>
        <td>
            SIOptimizeVGPRLiveRange introduces register with broken liveness
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AMDGPU
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            perlfu,
            Flakebi,
            ruiling
      </td>
    </tr>

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

<pre>
    This testcase fails the verifier after SIOptimizeVGPRLiveRange runs:


Checking IF-ELSE-ENDIF: %bb.1 %bb.2 %bb.4
Found Else blocks: %bb.1 %bb.3 %bb.0 
Optimizing %4
Removing AliveBlock %bb.1
Clear AliveBlock %bb.4

# After SI Optimize VGPR LiveRange
# Machine code for function wobble: IsSSA, TracksLiveness

bb.0:
  successors: %bb.1(0x80000000); %bb.1(100.00%)

  %0:sreg_32 = S_ADD_U32 undef %1.sub0:sgpr_64, 32, implicit-def $scc
  %2:sreg_32 = S_ADDC_U32 undef %1.sub1:sgpr_64, 0, implicit-def dead $scc, implicit killed $scc
  dead %3:sreg_64 = REG_SEQUENCE killed %0:sreg_32, %subreg.sub0, killed %2:sreg_32, %subreg.sub1
  %4:vgpr_32 = V_MOV_B32_e32 0, implicit $exec

bb.1:
; predecessors: %bb.0
  successors: %bb.2(0x40000000), %bb.4(0x40000000); %bb.2(50.00%), %bb.4(50.00%)

  %5:sreg_64 = V_CMP_LT_I32_e64 0, %10:vgpr_32, implicit $exec
  %6:sreg_64 = SI_IF killed %5:sreg_64, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  S_BRANCH %bb.4

bb.2:
; predecessors: %bb.1
  successors: %bb.4(0x40000000), %bb.3(0x40000000); %bb.4(50.00%), %bb.3(50.00%)

  %10:vgpr_32 = PHI %4:vgpr_32, %bb.1
  dead %7:sreg_64 = SI_ELSE killed %6:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  S_BRANCH %bb.3

bb.3:
; predecessors: %bb.2
  successors: %bb.4(0x80000000); %bb.4(100.00%)

  %8:sreg_64 = V_CMP_EQ_U32_e64 0, killed %10:vgpr_32, implicit $exec
  dead %9:sreg_64 = SI_IF killed %8:sreg_64, %bb.4, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
  S_BRANCH %bb.4

bb.4:
; predecessors: %bb.1, %bb.2, %bb.3


# End machine code for function wobble.

*** Bad machine code: Virtual register defs don't dominate all uses. ***
- function:    wobble
- v. register: %10
LLVM ERROR: Found 1 machine code errors.


[opt-vgpr-live-range-verifier-error.zip](https://github.com/llvm/llvm-project/files/8855744/opt-vgpr-live-range-verifier-error.zip)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzFVluTqjgQ_jX4koKCcJF54MELzrFKZ-bojK8Ul6BZI1gJeM6eX78dREF01H3ZtSxSJJ2v--uvOyTKk7-9zw0VqCCiiENBUBpSBq8bgg6E05QSjsK0gOdy-r4v6I7-IavXj8WMHsgizNYE8TITijlQ9LGiXzxHGxJvabZG04nqz5a-6r-NpxMwRQq2o0gz6hHXo3XcNsnLLEE-g1gilsdbcb3DrEcdHbfUgUlfsFDjLMguP8ipAYNYhxLqBFPHx0jIr1etCybYRIOaPjrxRzIB6JyBxnIexhuaERTnCSQy5ygts7igeYZ-5VHEiGQyFcslGI_QJw-BnETJiBBtp5LZOaMIiTKOwSLn7Uwo2NV_u_rxp-AXxRy2lgxd1-S0LVdayEjaSGzByTowIfPmGC2DwXgcfMEbJJ6k0sTQRBlVdus9DxxLxmti-aS7PaMxLdSjpSXiuAWNb0GPbmAbl9j6FXRCwuSE31pDW8oYSTqea2PbPLl3rMr9wn8Nlv7PL_9t5Dc72wmQ2DADEcH7kTTMNKb4jqnRIm6B3UHyqYmvgvn7KhiaOCAwc0FPxk5-k7ijuNH0EEi55yQhV6rr90oCVyVhtUriGHBV0t2lc7XIXXarWC722HeqyO7kehWM5h_B7DOYStIwqddYht7k5vs8VJhOB3M5DaaTlhotn02g12V5qp0K_dnC6kSzDIaLwdvox61DoXL6WC3jnlrXkpwJmd-r1RXlYs89tdoiVKn9-DHt1G0DZnT7qn-tizzQW8o4t5Sx_gtlzI4y5hPK4MfK3DxarUdHq3uzKfyf8gRsmqJJ27O9cRLi5UGDuP-bDN0GsZ5qkMsmviFo82314VKwe_B91S431X80DC-3yghWlBdlyBAkiwr5fQfqAiV5puB-AeOOZmFBUMgYKgURGjrDHdHVs2-JBr_6C18vHrQzcs3XqA_v2Ww1R_5i8b6QC8fLjnHJjHAOedJu5MEe5vtClQWjymuLyuX9Qz1d1NRqo_aH7hV7DKW6KYp9dTXDE_ivabEpIy3Od_DC2OE0qHue_0XiAl5TyoiA0XVtu29B3UyedHdqhV7imcmL-RL2Clow4n13Z6RZwfOkhIpoBPgF8aGI51uSIVbfinolZ96_pkGFKCsetv2CcW_j9WPdjfpp6OAE67Hj9qPIjszI7Tu2hWPX7rEwIkx4kF8F4wjuZSRLwONgPn79-IIpyGePeljHWHf0vuFa2NK1NLVxP4VusRzbCbGuWDrZwe1Zk-FoOV_3uFdFFpVrAYsMeIpmMRSCrjNCaq97wllaSl9VJwCpcEsi2kzwkjK4ztbRhGWxybkXckGyXa9i7FV0_wG9mV6n">