; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=sparc64 -sparc-bpcc-offset-bits=4 -sparc-bpr-offset-bits=4 | FileCheck --check-prefix=SPARC64 %s
define i32 @branch_relax_int(i32 %in) {
; SPARC64-LABEL: branch_relax_int:
; SPARC64: .cfi_startproc
; SPARC64-NEXT: ! %bb.0:
; SPARC64-NEXT: save %sp, -128, %sp
; SPARC64-NEXT: .cfi_def_cfa_register %fp
; SPARC64-NEXT: .cfi_window_save
; SPARC64-NEXT: .cfi_register %o7, %i7
; SPARC64-NEXT: cmp %i0, 0
; SPARC64-NEXT: bne %icc, .LBB0_1
; SPARC64-NEXT: nop
; SPARC64-NEXT: ba .LBB0_2
; SPARC64-NEXT: nop
; SPARC64-NEXT: .LBB0_1: ! %false
; SPARC64-NEXT: !APP
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: !NO_APP
; SPARC64-NEXT: ret
; SPARC64-NEXT: restore %g0, %g0, %o0
; SPARC64-NEXT: .LBB0_2: ! %true
; SPARC64-NEXT: mov 4, %i0
; SPARC64-NEXT: !APP
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: !NO_APP
; SPARC64-NEXT: ret
; SPARC64-NEXT: restore
%tst = icmp eq i32 %in, 0
br i1 %tst, label %true, label %false
true:
call void asm sideeffect "nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop", ""()
ret i32 4
false:
call void asm sideeffect "nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop", ""()
ret i32 0
}
define i64 @branch_relax_reg(i64 %in) {
; SPARC64-LABEL: branch_relax_reg:
; SPARC64: .cfi_startproc
; SPARC64-NEXT: ! %bb.0:
; SPARC64-NEXT: save %sp, -128, %sp
; SPARC64-NEXT: .cfi_def_cfa_register %fp
; SPARC64-NEXT: .cfi_window_save
; SPARC64-NEXT: .cfi_register %o7, %i7
; SPARC64-NEXT: brnz %i0, .LBB1_1
; SPARC64-NEXT: nop
; SPARC64-NEXT: ba .LBB1_2
; SPARC64-NEXT: nop
; SPARC64-NEXT: .LBB1_1: ! %false
; SPARC64-NEXT: !APP
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: !NO_APP
; SPARC64-NEXT: ret
; SPARC64-NEXT: restore %g0, %g0, %o0
; SPARC64-NEXT: .LBB1_2: ! %true
; SPARC64-NEXT: mov 4, %i0
; SPARC64-NEXT: !APP
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: !NO_APP
; SPARC64-NEXT: ret
; SPARC64-NEXT: restore
%tst = icmp eq i64 %in, 0
br i1 %tst, label %true, label %false
true:
call void asm sideeffect "nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop", ""()
ret i64 4
false:
call void asm sideeffect "nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop", ""()
ret i64 0
}
define float @branch_relax_float(float %in) {
; SPARC64-LABEL: branch_relax_float:
; SPARC64: .cfi_startproc
; SPARC64-NEXT: ! %bb.0:
; SPARC64-NEXT: save %sp, -128, %sp
; SPARC64-NEXT: .cfi_def_cfa_register %fp
; SPARC64-NEXT: .cfi_window_save
; SPARC64-NEXT: .cfi_register %o7, %i7
; SPARC64-NEXT: sethi %h44(.LCPI2_0), %i0
; SPARC64-NEXT: add %i0, %m44(.LCPI2_0), %i0
; SPARC64-NEXT: sllx %i0, 12, %i0
; SPARC64-NEXT: ld [%i0+%l44(.LCPI2_0)], %f0
; SPARC64-NEXT: fcmps %fcc0, %f1, %f0
; SPARC64-NEXT: fbe %fcc0, .LBB2_1
; SPARC64-NEXT: nop
; SPARC64-NEXT: ba .LBB2_2
; SPARC64-NEXT: nop
; SPARC64-NEXT: .LBB2_1: ! %true
; SPARC64-NEXT: sethi %h44(.LCPI2_1), %i0
; SPARC64-NEXT: add %i0, %m44(.LCPI2_1), %i0
; SPARC64-NEXT: sllx %i0, 12, %i0
; SPARC64-NEXT: ld [%i0+%l44(.LCPI2_1)], %f0
; SPARC64-NEXT: !APP
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: !NO_APP
; SPARC64-NEXT: ret
; SPARC64-NEXT: restore
; SPARC64-NEXT: .LBB2_2: ! %false
; SPARC64-NEXT: !APP
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: nop
; SPARC64-NEXT: !NO_APP
; SPARC64-NEXT: ret
; SPARC64-NEXT: restore
%tst = fcmp oeq float %in, 0.0
br i1 %tst, label %true, label %false
true:
call void asm sideeffect "nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop", ""()
ret float 4.0
false:
call void asm sideeffect "nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop\0A\09nop", ""()
ret float 0.0
}