| # RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass machine-sink -o - %s | FileCheck %s |
| --- | |
| define i8 @g() { |
| else.7: |
| br i1 undef, label %then.8, label %else.8, !make.implicit !0 |
| |
| then.8: ; preds = %else.8, %else.7 |
| %merge = phi i8 [ 1, %else.7 ], [ 0, %else.8 ] |
| ret i8 %merge ;1 ;%merge |
| |
| else.8: ; preds = %else.7 |
| %icmp.8 = icmp eq i64 undef, undef |
| ; ret i8 0 ; added |
| br i1 %icmp.8, label %else.11, label %then.8 |
| |
| else.11: ; preds = %else.8 |
| ret i8 undef |
| } |
| |
| !0 = !{} |
| ... |
| --- |
| name: g |
| tracksRegLiveness: true |
| registers: |
| - { id: 0, class: gpr32all } |
| - { id: 1, class: gpr32all } |
| - { id: 2, class: gpr32 } |
| - { id: 3, class: gpr32 } |
| - { id: 4, class: gpr32all } |
| - { id: 5, class: gpr32 } |
| - { id: 6, class: gpr32all } |
| body: | |
| ; Just check that the pass didn't crash/assert. |
| ; CHECK-LABEL: name: g |
| bb.0.else.7: |
| successors: %bb.1, %bb.2 |
| |
| %2:gpr32 = MOVi32imm 1 |
| ; Sinking the below COPY instruction caused an assert to trigger before |
| ; requiring getMemOperandWithOffset to return false rather than assert |
| ; when handling non-memory operations. |
| %1:gpr32all = COPY %2 |
| %3:gpr32 = COPY $wzr |
| CBNZW %3, %bb.2 |
| B %bb.1 |
| |
| bb.1.then.8: |
| %0:gpr32all = PHI %1, %bb.0, %4, %bb.2 |
| $w0 = COPY %0 |
| RET_ReallyLR implicit $w0 |
| |
| bb.2.else.8: |
| successors: %bb.3, %bb.1 |
| |
| %5:gpr32 = COPY $wzr |
| %4:gpr32all = COPY %5 |
| CBNZW %5, %bb.1 |
| B %bb.3 |
| |
| bb.3.else.11: |
| %6:gpr32all = IMPLICIT_DEF |
| $w0 = COPY %6 |
| RET_ReallyLR implicit $w0 |
| ... |