blob: 2240296c89ffb5b250fcd64d0306664b5d8ae468 [file] [log] [blame]
Mehdi Amini945a6602015-02-27 18:32:11 +00001; RUN: llc -mtriple=aarch64-apple-darwin -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s | FileCheck %s
Juergen Ributzkac1bbcbb2014-12-09 16:36:13 +00002
Sanjay Patel10156612015-08-25 18:12:40 +00003; CHECK-LABEL: test_or
Juergen Ributzkac1bbcbb2014-12-09 16:36:13 +00004; CHECK: cbnz w0, {{LBB[0-9]+_2}}
5; CHECK: cbz w1, {{LBB[0-9]+_1}}
6define i64 @test_or(i32 %a, i32 %b) {
7bb1:
8 %0 = icmp eq i32 %a, 0
9 %1 = icmp eq i32 %b, 0
10 %or.cond = or i1 %0, %1
11 br i1 %or.cond, label %bb3, label %bb4, !prof !0
12
13bb3:
14 ret i64 0
15
16bb4:
17 %2 = call i64 @bar()
18 ret i64 %2
19}
20
Sanjay Patel10156612015-08-25 18:12:40 +000021; CHECK-LABEL: test_and
Dehao Chen769219b2016-06-08 21:30:12 +000022; CHECK: cbnz w0, {{LBB[0-9]+_2}}
23; CHECK: cbz w1, {{LBB[0-9]+_1}}
Juergen Ributzkac1bbcbb2014-12-09 16:36:13 +000024define i64 @test_and(i32 %a, i32 %b) {
25bb1:
26 %0 = icmp ne i32 %a, 0
27 %1 = icmp ne i32 %b, 0
28 %or.cond = and i1 %0, %1
29 br i1 %or.cond, label %bb4, label %bb3, !prof !1
30
31bb3:
32 ret i64 0
33
34bb4:
35 %2 = call i64 @bar()
36 ret i64 %2
37}
38
Sanjay Patel42574202015-09-02 19:23:23 +000039; If the branch is unpredictable, don't add another branch.
40
41; CHECK-LABEL: test_or_unpredictable
42; CHECK: cmp w0, #0
43; CHECK-NEXT: cset w8, eq
44; CHECK-NEXT: cmp w1, #0
45; CHECK-NEXT: cset w9, eq
46; CHECK-NEXT: orr w8, w8, w9
Matthias Braun0d4505c2015-12-03 17:19:58 +000047; CHECK-NEXT: tbnz w8, #0,
Sanjay Patel42574202015-09-02 19:23:23 +000048define i64 @test_or_unpredictable(i32 %a, i32 %b) {
49bb1:
50 %0 = icmp eq i32 %a, 0
51 %1 = icmp eq i32 %b, 0
52 %or.cond = or i1 %0, %1
53 br i1 %or.cond, label %bb3, label %bb4, !unpredictable !2
54
55bb3:
56 ret i64 0
57
58bb4:
59 %2 = call i64 @bar()
60 ret i64 %2
61}
62
63; CHECK-LABEL: test_and_unpredictable
64; CHECK: cmp w0, #0
65; CHECK-NEXT: cset w8, ne
66; CHECK-NEXT: cmp w1, #0
67; CHECK-NEXT: cset w9, ne
68; CHECK-NEXT: and w8, w8, w9
Matthias Braun0d4505c2015-12-03 17:19:58 +000069; CHECK-NEXT: tbz w8, #0,
Sanjay Patel42574202015-09-02 19:23:23 +000070define i64 @test_and_unpredictable(i32 %a, i32 %b) {
71bb1:
72 %0 = icmp ne i32 %a, 0
73 %1 = icmp ne i32 %b, 0
74 %or.cond = and i1 %0, %1
75 br i1 %or.cond, label %bb4, label %bb3, !unpredictable !2
76
77bb3:
78 ret i64 0
79
80bb4:
81 %2 = call i64 @bar()
82 ret i64 %2
83}
84
Juergen Ributzkac1bbcbb2014-12-09 16:36:13 +000085declare i64 @bar()
86
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000087!0 = !{!"branch_weights", i32 5128, i32 32}
88!1 = !{!"branch_weights", i32 1024, i32 4136}
Sanjay Patel42574202015-09-02 19:23:23 +000089!2 = !{}
90