brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 7cbcfb2 Raw
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