81 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s3 4;; This test checks that LLVM can do basic stripping and reapplying of branches5;; to basic blocks.6 7declare void @test_true()8declare void @test_false()9 10;; !0 corresponds to a branch being taken, !1 to not being taken.11!0 = !{!"branch_weights", i32 64, i32 4}12!1 = !{!"branch_weights", i32 4, i32 64}13 14define void @test_bcc_fallthrough_taken(i64 %in) nounwind {15; CHECK-LABEL: test_bcc_fallthrough_taken:16; CHECK: # %bb.0:17; CHECK-NEXT: addi.d $sp, $sp, -1618; CHECK-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill19; CHECK-NEXT: ori $a1, $zero, 4220; CHECK-NEXT: bne $a0, $a1, .LBB0_321; CHECK-NEXT: # %bb.1: # %true22; CHECK-NEXT: pcaddu18i $ra, %call36(test_true)23; CHECK-NEXT: jirl $ra, $ra, 024; CHECK-NEXT: .LBB0_2: # %true25; CHECK-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload26; CHECK-NEXT: addi.d $sp, $sp, 1627; CHECK-NEXT: ret28; CHECK-NEXT: .LBB0_3: # %false29; CHECK-NEXT: pcaddu18i $ra, %call36(test_false)30; CHECK-NEXT: jirl $ra, $ra, 031; CHECK-NEXT: b .LBB0_232 %tst = icmp eq i64 %in, 4233 br i1 %tst, label %true, label %false, !prof !034 35;; Expected layout order is: Entry, TrueBlock, FalseBlock36;; Entry->TrueBlock is the common path, which should be taken whenever the37;; conditional branch is false.38 39true:40 call void @test_true()41 ret void42 43false:44 call void @test_false()45 ret void46}47 48define void @test_bcc_fallthrough_nottaken(i64 %in) nounwind {49; CHECK-LABEL: test_bcc_fallthrough_nottaken:50; CHECK: # %bb.0:51; CHECK-NEXT: addi.d $sp, $sp, -1652; CHECK-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill53; CHECK-NEXT: ori $a1, $zero, 4254; CHECK-NEXT: beq $a0, $a1, .LBB1_355; CHECK-NEXT: # %bb.1: # %false56; CHECK-NEXT: pcaddu18i $ra, %call36(test_false)57; CHECK-NEXT: jirl $ra, $ra, 058; CHECK-NEXT: .LBB1_2: # %true59; CHECK-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload60; CHECK-NEXT: addi.d $sp, $sp, 1661; CHECK-NEXT: ret62; CHECK-NEXT: .LBB1_3: # %true63; CHECK-NEXT: pcaddu18i $ra, %call36(test_true)64; CHECK-NEXT: jirl $ra, $ra, 065; CHECK-NEXT: b .LBB1_266 %tst = icmp eq i64 %in, 4267 br i1 %tst, label %true, label %false, !prof !168 69;; Expected layout order is: Entry, FalseBlock, TrueBlock70;; Entry->FalseBlock is the common path, which should be taken whenever the71;; conditional branch is false.72 73true:74 call void @test_true()75 ret void76 77false:78 call void @test_false()79 ret void80}81