brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · 49e3144 Raw
201 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-apple-darwin -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s | FileCheck %s3 4define i64 @test_or(i32 %a, i32 %b) {5; CHECK-LABEL: test_or:6; CHECK:       ; %bb.0: ; %bb17; CHECK-NEXT:    cbnz w0, LBB0_28; CHECK-NEXT:  LBB0_1:9; CHECK-NEXT:    mov x0, xzr10; CHECK-NEXT:    ret11; CHECK-NEXT:  LBB0_2: ; %bb1.cond.split12; CHECK-NEXT:    cbz w1, LBB0_113; CHECK-NEXT:  ; %bb.3: ; %bb414; CHECK-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill15; CHECK-NEXT:    .cfi_def_cfa_offset 1616; CHECK-NEXT:    .cfi_offset w30, -817; CHECK-NEXT:    .cfi_offset w29, -1618; CHECK-NEXT:    bl _bar19; CHECK-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload20; CHECK-NEXT:    ret21bb1:22  %0 = icmp eq i32 %a, 023  %1 = icmp eq i32 %b, 024  %or.cond = or i1 %0, %125  br i1 %or.cond, label %bb3, label %bb4, !prof !026 27bb3:28  ret i64 029 30bb4:31  %2 = call i64 @bar()32  ret i64 %233}34 35define i64 @test_or_select(i32 %a, i32 %b) {36; CHECK-LABEL: test_or_select:37; CHECK:       ; %bb.0: ; %bb138; CHECK-NEXT:    cbnz w0, LBB1_239; CHECK-NEXT:  LBB1_1:40; CHECK-NEXT:    mov x0, xzr41; CHECK-NEXT:    ret42; CHECK-NEXT:  LBB1_2: ; %bb1.cond.split43; CHECK-NEXT:    cbz w1, LBB1_144; CHECK-NEXT:  ; %bb.3: ; %bb445; CHECK-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill46; CHECK-NEXT:    .cfi_def_cfa_offset 1647; CHECK-NEXT:    .cfi_offset w30, -848; CHECK-NEXT:    .cfi_offset w29, -1649; CHECK-NEXT:    bl _bar50; CHECK-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload51; CHECK-NEXT:    ret52bb1:53  %0 = icmp eq i32 %a, 054  %1 = icmp eq i32 %b, 055  %or.cond = select i1 %0, i1 true, i1 %156  br i1 %or.cond, label %bb3, label %bb4, !prof !057 58bb3:59  ret i64 060 61bb4:62  %2 = call i64 @bar()63  ret i64 %264}65 66define i64 @test_and(i32 %a, i32 %b) {67; CHECK-LABEL: test_and:68; CHECK:       ; %bb.0: ; %bb169; CHECK-NEXT:    cbnz w0, LBB2_270; CHECK-NEXT:  LBB2_1:71; CHECK-NEXT:    mov x0, xzr72; CHECK-NEXT:    ret73; CHECK-NEXT:  LBB2_2: ; %bb1.cond.split74; CHECK-NEXT:    cbz w1, LBB2_175; CHECK-NEXT:  ; %bb.3: ; %bb476; CHECK-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill77; CHECK-NEXT:    .cfi_def_cfa_offset 1678; CHECK-NEXT:    .cfi_offset w30, -879; CHECK-NEXT:    .cfi_offset w29, -1680; CHECK-NEXT:    bl _bar81; CHECK-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload82; CHECK-NEXT:    ret83bb1:84  %0 = icmp ne i32 %a, 085  %1 = icmp ne i32 %b, 086  %or.cond = and i1 %0, %187  br i1 %or.cond, label %bb4, label %bb3, !prof !188 89bb3:90  ret i64 091 92bb4:93  %2 = call i64 @bar()94  ret i64 %295}96 97define i64 @test_and_select(i32 %a, i32 %b) {98; CHECK-LABEL: test_and_select:99; CHECK:       ; %bb.0: ; %bb1100; CHECK-NEXT:    cbnz w0, LBB3_2101; CHECK-NEXT:  LBB3_1:102; CHECK-NEXT:    mov x0, xzr103; CHECK-NEXT:    ret104; CHECK-NEXT:  LBB3_2: ; %bb1.cond.split105; CHECK-NEXT:    cbz w1, LBB3_1106; CHECK-NEXT:  ; %bb.3: ; %bb4107; CHECK-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill108; CHECK-NEXT:    .cfi_def_cfa_offset 16109; CHECK-NEXT:    .cfi_offset w30, -8110; CHECK-NEXT:    .cfi_offset w29, -16111; CHECK-NEXT:    bl _bar112; CHECK-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload113; CHECK-NEXT:    ret114bb1:115  %0 = icmp ne i32 %a, 0116  %1 = icmp ne i32 %b, 0117  %or.cond = select i1 %0, i1 %1, i1 false118  br i1 %or.cond, label %bb4, label %bb3, !prof !1119 120bb3:121  ret i64 0122 123bb4:124  %2 = call i64 @bar()125  ret i64 %2126}127 128; If the branch is unpredictable, don't add another branch.129 130define i64 @test_or_unpredictable(i32 %a, i32 %b) {131; CHECK-LABEL: test_or_unpredictable:132; CHECK:       ; %bb.0: ; %bb1133; CHECK-NEXT:    cmp w0, #0134; CHECK-NEXT:    mov x0, xzr135; CHECK-NEXT:    cset w8, eq136; CHECK-NEXT:    cmp w1, #0137; CHECK-NEXT:    cset w9, eq138; CHECK-NEXT:    orr w8, w8, w9139; CHECK-NEXT:    tbnz w8, #0, LBB4_2140; CHECK-NEXT:  ; %bb.1: ; %bb4141; CHECK-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill142; CHECK-NEXT:    .cfi_def_cfa_offset 16143; CHECK-NEXT:    .cfi_offset w30, -8144; CHECK-NEXT:    .cfi_offset w29, -16145; CHECK-NEXT:    bl _bar146; CHECK-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload147; CHECK-NEXT:  LBB4_2: ; %common.ret148; CHECK-NEXT:    ret149bb1:150  %0 = icmp eq i32 %a, 0151  %1 = icmp eq i32 %b, 0152  %or.cond = or i1 %0, %1153  br i1 %or.cond, label %bb3, label %bb4, !unpredictable !2154 155bb3:156  ret i64 0157 158bb4:159  %2 = call i64 @bar()160  ret i64 %2161}162 163define i64 @test_and_unpredictable(i32 %a, i32 %b) {164; CHECK-LABEL: test_and_unpredictable:165; CHECK:       ; %bb.0: ; %bb1166; CHECK-NEXT:    cmp w0, #0167; CHECK-NEXT:    mov x0, xzr168; CHECK-NEXT:    cset w8, ne169; CHECK-NEXT:    cmp w1, #0170; CHECK-NEXT:    cset w9, ne171; CHECK-NEXT:    and w8, w8, w9172; CHECK-NEXT:    tbz w8, #0, LBB5_2173; CHECK-NEXT:  ; %bb.1: ; %bb4174; CHECK-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill175; CHECK-NEXT:    .cfi_def_cfa_offset 16176; CHECK-NEXT:    .cfi_offset w30, -8177; CHECK-NEXT:    .cfi_offset w29, -16178; CHECK-NEXT:    bl _bar179; CHECK-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload180; CHECK-NEXT:  LBB5_2: ; %common.ret181; CHECK-NEXT:    ret182bb1:183  %0 = icmp ne i32 %a, 0184  %1 = icmp ne i32 %b, 0185  %or.cond = and i1 %0, %1186  br i1 %or.cond, label %bb4, label %bb3, !unpredictable !2187 188bb3:189  ret i64 0190 191bb4:192  %2 = call i64 @bar()193  ret i64 %2194}195 196declare i64 @bar()197 198!0 = !{!"branch_weights", i32 5128, i32 32}199!1 = !{!"branch_weights", i32 1024, i32 4136}200!2 = !{}201