Nicolai Haehnle | a253e4c | 2017-07-18 14:54:41 +0000 | [diff] [blame] | 1 | # RUN: llc --mtriple=amdgcn--amdhsa -mcpu=fiji -verify-machineinstrs -run-pass si-fold-operands,si-shrink-instructions %s -o - | FileCheck %s |
| 2 | --- | |
| 3 | define amdgpu_kernel void @test() #0 { |
| 4 | ret void |
| 5 | } |
| 6 | |
| 7 | attributes #0 = { nounwind } |
| 8 | |
| 9 | ... |
| 10 | --- |
| 11 | |
| 12 | # This used to crash / trigger an assertion, because re-scanning the use list |
| 13 | # after constant-folding the definition of %3 lead to the definition of %2 |
| 14 | # being processed twice. |
| 15 | |
| 16 | # CHECK-LABEL: name: test |
Puyan Lotfi | 43e94b1 | 2018-01-31 22:04:26 +0000 | [diff] [blame^] | 17 | # CHECK: %2:vgpr_32 = V_LSHLREV_B32_e32 2, killed %0, implicit $exec |
| 18 | # CHECK: %4:vgpr_32 = V_AND_B32_e32 8, killed %2, implicit $exec |
Nicolai Haehnle | a253e4c | 2017-07-18 14:54:41 +0000 | [diff] [blame] | 19 | |
| 20 | name: test |
| 21 | tracksRegLiveness: true |
| 22 | registers: |
| 23 | - { id: 0, class: vgpr_32 } |
| 24 | - { id: 1, class: sreg_32 } |
| 25 | - { id: 2, class: vgpr_32 } |
| 26 | - { id: 3, class: sreg_32 } |
| 27 | - { id: 4, class: vgpr_32 } |
| 28 | - { id: 5, class: sreg_128 } |
| 29 | body: | |
| 30 | bb.0 (%ir-block.0): |
| 31 | %0 = IMPLICIT_DEF |
| 32 | %1 = S_MOV_B32 2 |
Puyan Lotfi | 43e94b1 | 2018-01-31 22:04:26 +0000 | [diff] [blame^] | 33 | %2 = V_LSHLREV_B32_e64 %1, killed %0, implicit $exec |
| 34 | %3 = S_LSHL_B32 %1, killed %1, implicit-def dead $scc |
| 35 | %4 = V_AND_B32_e64 killed %2, killed %3, implicit $exec |
Nicolai Haehnle | a253e4c | 2017-07-18 14:54:41 +0000 | [diff] [blame] | 36 | %5 = IMPLICIT_DEF |
Puyan Lotfi | 43e94b1 | 2018-01-31 22:04:26 +0000 | [diff] [blame^] | 37 | BUFFER_STORE_DWORD_OFFSET killed %4, killed %5, 0, 0, 0, 0, 0, implicit $exec |
Nicolai Haehnle | a253e4c | 2017-07-18 14:54:41 +0000 | [diff] [blame] | 38 | S_ENDPGM |
| 39 | |
| 40 | ... |