# 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
...