blob: c377bcd70d4cb975137df953f008c4335969adfd [file] [edit]
; RUN: llc -mtriple=amdgpu10.30-amd-amdhsa -global-isel=0 < %s | FileCheck %s
; RUN: llc -mtriple=amdgpu10.30-amd-amdhsa -global-isel=1 < %s | FileCheck %s
; RUN: llc -mtriple=amdgpu10.30-amd-amdhsa -global-isel=0 -stop-after=finalize-isel < %s | FileCheck --check-prefix=MIR %s
; RUN: llc -mtriple=amdgpu10.30-amd-amdhsa -global-isel=1 -stop-after=finalize-isel < %s | FileCheck --check-prefix=MIR %s
declare void @report() noreturn
declare void @bar()
; CHECK-LABEL: {{^}}noreturn_merge:
; CHECK: s_swappc_b64
; CHECK-NOT: s_swappc_b64
; MIR-LABEL: {{^}}name: noreturn_merge
; MIR-NOT: nomerge
define void @noreturn_merge(i1 inreg %c) {
br i1 %c, label %a, label %b
a:
call void @report()
unreachable
b:
call void @report()
unreachable
}
; CHECK-LABEL: {{^}}noreturn_nomerge:
; CHECK: s_swappc_b64
; CHECK: s_swappc_b64
; CHECK-NOT: s_swappc_b64
; MIR-LABEL: {{^}}name: noreturn_nomerge
; MIR: nomerge {{.*}}SI_CALL
; MIR: nomerge {{.*}}SI_CALL
define void @noreturn_nomerge(i1 inreg %c) {
br i1 %c, label %a, label %b
a:
call void @report() nomerge
unreachable
b:
call void @report() nomerge
unreachable
}
; CHECK-LABEL: {{^}}tail_merge:
; CHECK: s_setpc_b64
; CHECK-NOT: s_setpc_b64
; MIR-LABEL: {{^}}name: tail_merge
; MIR-NOT: nomerge
define void @tail_merge(i1 inreg %c) {
br i1 %c, label %a, label %b
a:
tail call void @bar()
ret void
b:
tail call void @bar()
ret void
}
; CHECK-LABEL: {{^}}tail_nomerge:
; CHECK: s_setpc_b64
; CHECK: s_setpc_b64
; CHECK-NOT: s_setpc_b64
; MIR-LABEL: {{^}}name: tail_nomerge
; MIR: nomerge SI_TCRETURN
; MIR: nomerge SI_TCRETURN
define void @tail_nomerge(i1 inreg %c) {
br i1 %c, label %a, label %b
a:
tail call void @bar() nomerge
ret void
b:
tail call void @bar() nomerge
ret void
}