blob: 5248b9253e7aa7fa87d8c971d25edf7e0a43d703 [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
Juergen Ributzkac1bbcbb2014-12-09 16:36:13 +000022; CHECK: cbz w0, {{LBB[0-9]+_2}}
23; CHECK: cbnz w1, {{LBB[0-9]+_3}}
24define 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
47; CHECK-NEXT: and w8, w8, #0x1
48; CHECK-NEXT: cmp w8, #0
49; CHECK-NEXT: b.ne
50define i64 @test_or_unpredictable(i32 %a, i32 %b) {
51bb1:
52 %0 = icmp eq i32 %a, 0
53 %1 = icmp eq i32 %b, 0
54 %or.cond = or i1 %0, %1
55 br i1 %or.cond, label %bb3, label %bb4, !unpredictable !2
56
57bb3:
58 ret i64 0
59
60bb4:
61 %2 = call i64 @bar()
62 ret i64 %2
63}
64
65; CHECK-LABEL: test_and_unpredictable
66; CHECK: cmp w0, #0
67; CHECK-NEXT: cset w8, ne
68; CHECK-NEXT: cmp w1, #0
69; CHECK-NEXT: cset w9, ne
70; CHECK-NEXT: and w8, w8, w9
71; CHECK-NEXT: and w8, w8, #0x1
72; CHECK-NEXT: cmp w8, #0
73; CHECK-NEXT: b.eq
74define i64 @test_and_unpredictable(i32 %a, i32 %b) {
75bb1:
76 %0 = icmp ne i32 %a, 0
77 %1 = icmp ne i32 %b, 0
78 %or.cond = and i1 %0, %1
79 br i1 %or.cond, label %bb4, label %bb3, !unpredictable !2
80
81bb3:
82 ret i64 0
83
84bb4:
85 %2 = call i64 @bar()
86 ret i64 %2
87}
88
Juergen Ributzkac1bbcbb2014-12-09 16:36:13 +000089declare i64 @bar()
90
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +000091!0 = !{!"branch_weights", i32 5128, i32 32}
92!1 = !{!"branch_weights", i32 1024, i32 4136}
Sanjay Patel42574202015-09-02 19:23:23 +000093!2 = !{}
94