Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/CodeGen/LoongArch/analyze-branch.ll
Show All 13 Lines | |||||
define void @test_bcc_fallthrough_taken(i64 %in) nounwind { | define void @test_bcc_fallthrough_taken(i64 %in) nounwind { | ||||
; CHECK-LABEL: test_bcc_fallthrough_taken: | ; CHECK-LABEL: test_bcc_fallthrough_taken: | ||||
; CHECK: # %bb.0: | ; CHECK: # %bb.0: | ||||
; CHECK-NEXT: addi.d $sp, $sp, -16 | ; CHECK-NEXT: addi.d $sp, $sp, -16 | ||||
; CHECK-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill | ; CHECK-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill | ||||
; CHECK-NEXT: ori $a1, $zero, 42 | ; CHECK-NEXT: ori $a1, $zero, 42 | ||||
; CHECK-NEXT: bne $a0, $a1, .LBB0_3 | ; CHECK-NEXT: bne $a0, $a1, .LBB0_3 | ||||
; CHECK-NEXT: # %bb.1: # %true | ; CHECK-NEXT: # %bb.1: # %true | ||||
; CHECK-NEXT: bl test_true | ; CHECK-NEXT: bl %plt(test_true) | ||||
; CHECK-NEXT: .LBB0_2: # %true | ; CHECK-NEXT: .LBB0_2: # %true | ||||
; CHECK-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload | ; CHECK-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload | ||||
; CHECK-NEXT: addi.d $sp, $sp, 16 | ; CHECK-NEXT: addi.d $sp, $sp, 16 | ||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
; CHECK-NEXT: .LBB0_3: # %false | ; CHECK-NEXT: .LBB0_3: # %false | ||||
; CHECK-NEXT: bl test_false | ; CHECK-NEXT: bl %plt(test_false) | ||||
; CHECK-NEXT: b .LBB0_2 | ; CHECK-NEXT: b .LBB0_2 | ||||
%tst = icmp eq i64 %in, 42 | %tst = icmp eq i64 %in, 42 | ||||
br i1 %tst, label %true, label %false, !prof !0 | br i1 %tst, label %true, label %false, !prof !0 | ||||
;; Expected layout order is: Entry, TrueBlock, FalseBlock | ;; Expected layout order is: Entry, TrueBlock, FalseBlock | ||||
;; Entry->TrueBlock is the common path, which should be taken whenever the | ;; Entry->TrueBlock is the common path, which should be taken whenever the | ||||
;; conditional branch is false. | ;; conditional branch is false. | ||||
Show All 9 Lines | |||||
define void @test_bcc_fallthrough_nottaken(i64 %in) nounwind { | define void @test_bcc_fallthrough_nottaken(i64 %in) nounwind { | ||||
; CHECK-LABEL: test_bcc_fallthrough_nottaken: | ; CHECK-LABEL: test_bcc_fallthrough_nottaken: | ||||
; CHECK: # %bb.0: | ; CHECK: # %bb.0: | ||||
; CHECK-NEXT: addi.d $sp, $sp, -16 | ; CHECK-NEXT: addi.d $sp, $sp, -16 | ||||
; CHECK-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill | ; CHECK-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill | ||||
; CHECK-NEXT: ori $a1, $zero, 42 | ; CHECK-NEXT: ori $a1, $zero, 42 | ||||
; CHECK-NEXT: beq $a0, $a1, .LBB1_1 | ; CHECK-NEXT: beq $a0, $a1, .LBB1_1 | ||||
; CHECK-NEXT: # %bb.3: # %false | ; CHECK-NEXT: # %bb.3: # %false | ||||
; CHECK-NEXT: bl test_false | ; CHECK-NEXT: bl %plt(test_false) | ||||
; CHECK-NEXT: .LBB1_2: # %true | ; CHECK-NEXT: .LBB1_2: # %true | ||||
; CHECK-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload | ; CHECK-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload | ||||
; CHECK-NEXT: addi.d $sp, $sp, 16 | ; CHECK-NEXT: addi.d $sp, $sp, 16 | ||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
; CHECK-NEXT: .LBB1_1: # %true | ; CHECK-NEXT: .LBB1_1: # %true | ||||
; CHECK-NEXT: bl test_true | ; CHECK-NEXT: bl %plt(test_true) | ||||
; CHECK-NEXT: b .LBB1_2 | ; CHECK-NEXT: b .LBB1_2 | ||||
%tst = icmp eq i64 %in, 42 | %tst = icmp eq i64 %in, 42 | ||||
br i1 %tst, label %true, label %false, !prof !1 | br i1 %tst, label %true, label %false, !prof !1 | ||||
;; Expected layout order is: Entry, FalseBlock, TrueBlock | ;; Expected layout order is: Entry, FalseBlock, TrueBlock | ||||
;; Entry->FalseBlock is the common path, which should be taken whenever the | ;; Entry->FalseBlock is the common path, which should be taken whenever the | ||||
;; conditional branch is false. | ;; conditional branch is false. | ||||
true: | true: | ||||
call void @test_true() | call void @test_true() | ||||
ret void | ret void | ||||
false: | false: | ||||
call void @test_false() | call void @test_false() | ||||
ret void | ret void | ||||
} | } |