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

    <tr>
        <th>Summary</th>
        <td>
            AMDGPU/TeraScale: `Node emitted out of order - late` assertion with `clpeak`
        </td>
    </tr>

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

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

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

<pre>
    I'm currently running LLVM from commit 69f7f15683c451378dbe9029a0bd2dbd029bcf3a (very recent but old enough to avoid opaque pointer mismatch with mesa and other stuff) and Mesa from commit `b2b810ebff657b3d24d93a1fdbd6adc79bc38153`.

When running the `clpeak` OpenCL benchmark on R600/TeraScale devices, I get this assertion: ```llvm-project/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp:285: llvm::Register llvm::InstrEmitter::getVR(llvm::SDValue, lvm::DenseMap<llvm::SDValue, llvm::Register>&): Assertion `I != VRBaseMap.end() && "Node emitted out of order - late"' failed.```

The source code of the OpenCL benchmark:

- https://github.com/krrishnarraj/clpeak

I reproduced it on:

- AMD Radeon HD 6970 RV970 Cayman XT (TeraScale 3)
- AMD Radeon HD 5870 RV870 Cypress XT (TeraScale 2)

This is the errors I get:

```
$ clpeak -d 0
Platform: Clover
  Device: AMD CAYMAN (DRM 2.50.0 / 5.13.0-44-generic, LLVM 15.0.0)
    Driver version  : 22.2.0-devel (Linux x64)
    Compute units   : 12
    Clock frequency : 880 MHz
clpeak: llvm-project/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp:285: llvm::Register llvm::InstrEmitter::getVR(llvm::SDValue, llvm::DenseMap<llvm::SDValue, llvm::Register>&): Assertion `I != VRBaseMap.end() && "Node emitted out of order - late"' failed.
Aborted

$ clpeak -d 1
Platform: Clover
  Device: AMD CYPRESS (DRM 2.50.0 / 5.13.0-44-generic, LLVM 15.0.0)
    Driver version  : 22.2.0-devel (Linux x64)
    Compute units   : 10
    Clock frequency : 850 MHz
clpeak: llvm-project/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp:285: llvm::Register llvm::InstrEmitter::getVR(llvm::SDValue, llvm::DenseMap<llvm::SDValue, llvm::Register>&): Assertion `I != VRBaseMap.end() && "Node emitted out of order - late"' failed.
Aborted
```

For reference, this is what I get on GCN2 (assuming it works):

```
clpeak -d 0

Platform: Clover
  Device: AMD Radeon R9 390 Series (hawaii, LLVM 15.0.0, DRM 3.41, 5.13.0-45-generic)
    Driver version  : 22.2.0-devel (Linux x64)
    Compute units   : 44
    Clock frequency : 1080 MHz

    Global memory bandwidth (GBPS)
      float   : 11.29
      float2  : 11.28
      float4  : 11.27
      float8  : 10.57
      float16 : 4.77

    Single-precision compute (GFLOPS)
      float   : 5881.14
      float2  : 5895.50
      float4  : 5880.94
      float8  : 5824.35
      float16 : 5799.34

    No half precision support! Skipped

    Double-precision compute (GFLOPS)
      double   : 747.48
      double2  : 749.21
      double4  : 744.47
      double8  : 742.23
      double16 : 738.79

    Integer compute (GIOPS)
      int   : 1946.12
      int2  : 1960.41
      int4  : 1975.52
      int8  : 1945.99
      int16 : 1977.48

    Integer compute Fast 24bit (GIOPS)
      int   : 5566.71
      int2  : 5400.64
      int4  : 5528.86
      int8  : 5435.56
      int16 : 5298.62

    Transfer bandwidth (GBPS)
      enqueueWriteBuffer              : 18.55
      enqueueReadBuffer               : 19.62
      enqueueWriteBuffer non-blocking : 18.71
      enqueueReadBuffer non-blocking  : 19.38
      enqueueMapBuffer(for read)      : 32317.29
        memcpy from mapped ptr        : 19.53
      enqueueUnmap(after write)       : 32987.46
        memcpy to mapped ptr          : 18.72

    Kernel launch latency : 67.25 us
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWN1zmzgQ_2vsl51oQCA-Hvzg2E2auSTt2Gl6fRQgbBoscQLipn_9rTD4A5xk-nA3vZnzEGxY7fdPq91EKnmZ3Iyov4G41lrIKn8BXUuZyRXc3j7eQaoV0tRmk1Xghamf2swLnNhltuMHSSRCi4bcihKaRAn-jOLU4TCiwbPQKEnEKBKiugKVJyCkqldrqBTwZ5UloAr-Vy2gUJmshIZNVm54Fa9hm1Vr2IiSA5e4qlojsazqNB3RsHl1Z2jHlo08K6JRYFsiSlOP-ZGTUDcJHW6naJfHk9hH05zAZg4uJSNrPrKmu_vXtZB7l1GVkRXnheBP-AM-FULObiESMl5vuH4CJWHhWdaIXj0IzZcxzwUk4jmLRTmiM7iBlahQTFYCL0uhq0zJkTM1QndXnj9vLgqtvou4QiHm0XxlEd5nKhHXQuKvpciRjrzz6TU-3siy0h_QUQwTiYsCJdKAGbkNvzPFayFWWWnCeHh1zLZ7g8Y9LjA7hzXL-SPPa2Fs37-bC1mKO45qZucXDpSOnA8j6mF6jE3TznHj9Q2CwR45c3hcXPJGKhEyQRNMLhseD7_oPboOojEVM27wkoLSCbpzATmvUC1FlELKs1wkZB_N40Q-YO5KVetYICpQGkow6exn0Bh-xHUB66oqSvOWXuG1QuzVEUFc4cOT1lm5llxr_h0fW1gccd8gxDGZSR2j2YjDJtmn4qd3c1jwRGA4Ps5xC_kWLB7NfcZfNlzCnw9muxzA5JgonuVlQcNr7rOXQouyHDDTPXMXEwQiXiYQQmulyx1Ce1b240ld2PkKFwm0Lz9jGlKlTeJhlivc37v3APMG_k3m0d7Z9Nvd9N6YNV_cASXMIhY-XQEjtkOsC9e9WAkpdBYbKDU1xmYEF-1NB_zMdYYaAP9KAyQw0iklFAXgbhO5kX-byfoH_PDcE86Z2hR1JaCWWVXCjtOmR_RcxU9YPASWHhm_NPQgsODu48_dojbL7eb6Xffqf2izNlGdRkrj8hPUncDM_kWYffu8-LBc_mY4s97BGfsfZ_8qzs6dE1dKY9VOBXY7cWN51RbJ7ZpX7QGOZl7P7qnJPh7j9cb0Bljet0o_lTuH3iifg9L5a8huC_4iBCe0YIkIFqUxZM23PMsGYJ6Bwb9DXNv87sDPDuD_x9Duum-j3baOy-ph7XWuIp5jg7dR2CNG2NBtswQ7PlR-ffl5eaIXIM0VpqXdXzY5Q6QHYjAgugeiPyAG3bYlbEi0vZ2XxPf7HiwRD7nALSvirIlk3IbHuHB1--lNJ1gQ2MR2X3ODBSHDYvaaI8htkXDIHXRk6hKHveYM88OQOG7fn3sFa56ncHCorIsCNxJuU1g-ZUVxWrkbLKk6-qUYJA1DGwTf9YkbDMm0I4eE2kOy25Fd4vpDctCREdPOkNwGwXcC4od9f25wBlnh5jh242boBY4qHRhD1yPHnUVD7MAY4pjh2j1iB8bQxxT3OYO9WEbCvs7WdOQ8xO112694WQF1IzMZvecGY55H_L6lHRhdyyKee94NxmhAAu-8G8x10Mc-sYMhDQPi0b4bD5rLEgvzuzVBSCwztfiqs0pc4lyILCefJlQBYewM00Lw5BxPG9-9Wa9qkkpeRKbcmUOh1XQav6GmE55OkxOcYcKzcMeDnqfNScUTcyruTXSoY_u9MgimmMbFy24m3nCzX6GodM815pxR-EXienPOpaZR2BpH9_pahWGAoPPOKsRZfqhunwB_kOI_hJZ4zuS8xnGsOcS708JDpxjUZe9IHScTBwf5kI-rrMrFBE_I689fjsfvdrx-t1nAaX4_ku_-xXA86Y9rnU_eGAW7puy0VcuwOTCD_xXuojAYryeMJ2lELc888pDbzBfCoy5lqWNZLIrHOY9EXk5G7BK7Fym20IgwnQybj7MJtSi1GGW249jUI1EYJzQQbsCC2E_jYORaYoPtDjF2EKVXYz1pTIrqVYnEHBuv8kBEf7OVFKJRh_J5Xa2VnmR5vs1E_PRz3CifNMb_DdXGGSo">