blob: fbea4a6e5838ac0c3d576787798d9bef7cf5f0bb [file] [log] [blame]
Tim Northoverb4ddc082014-05-30 10:09:59 +00001; RUN: llc -verify-machineinstrs -o - %s -mtriple=arm64-apple-ios7.0 -aarch64-atomic-cfg-tidy=0 | FileCheck %s --check-prefix=CHECK
2; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -mattr=-fp-armv8 -aarch64-atomic-cfg-tidy=0 | FileCheck --check-prefix=CHECK-NOFP %s
Tim Northovere0e3aef2013-01-31 12:12:40 +00003
4define i32 @test_select_i32(i1 %bit, i32 %a, i32 %b) {
Stephen Linf799e3f2013-07-13 20:38:47 +00005; CHECK-LABEL: test_select_i32:
Tim Northovere0e3aef2013-01-31 12:12:40 +00006 %val = select i1 %bit, i32 %a, i32 %b
Tim Northover3b0846e2014-05-24 12:50:23 +00007; CHECK: tst w0, #0x1
Tim Northovere0e3aef2013-01-31 12:12:40 +00008; CHECK-NEXT: csel w0, w1, w2, ne
9
10 ret i32 %val
11}
12
13define i64 @test_select_i64(i1 %bit, i64 %a, i64 %b) {
Stephen Linf799e3f2013-07-13 20:38:47 +000014; CHECK-LABEL: test_select_i64:
Tim Northovere0e3aef2013-01-31 12:12:40 +000015 %val = select i1 %bit, i64 %a, i64 %b
Tim Northover3b0846e2014-05-24 12:50:23 +000016; CHECK: tst w0, #0x1
Tim Northovere0e3aef2013-01-31 12:12:40 +000017; CHECK-NEXT: csel x0, x1, x2, ne
18
19 ret i64 %val
20}
21
22define float @test_select_float(i1 %bit, float %a, float %b) {
Stephen Linf799e3f2013-07-13 20:38:47 +000023; CHECK-LABEL: test_select_float:
Tim Northovere0e3aef2013-01-31 12:12:40 +000024 %val = select i1 %bit, float %a, float %b
Tim Northover3b0846e2014-05-24 12:50:23 +000025; CHECK: tst w0, #0x1
Tim Northovere0e3aef2013-01-31 12:12:40 +000026; CHECK-NEXT: fcsel s0, s0, s1, ne
Amara Emersonf80f95f2013-10-31 09:32:11 +000027; CHECK-NOFP-NOT: fcsel
Tim Northovere0e3aef2013-01-31 12:12:40 +000028 ret float %val
29}
30
31define double @test_select_double(i1 %bit, double %a, double %b) {
Stephen Linf799e3f2013-07-13 20:38:47 +000032; CHECK-LABEL: test_select_double:
Tim Northovere0e3aef2013-01-31 12:12:40 +000033 %val = select i1 %bit, double %a, double %b
Tim Northover3b0846e2014-05-24 12:50:23 +000034; CHECK: tst w0, #0x1
Tim Northovere0e3aef2013-01-31 12:12:40 +000035; CHECK-NEXT: fcsel d0, d0, d1, ne
Amara Emersonf80f95f2013-10-31 09:32:11 +000036; CHECK-NOFP-NOT: fcsel
Tim Northovere0e3aef2013-01-31 12:12:40 +000037
38 ret double %val
39}
40
41define i32 @test_brcond(i1 %bit) {
Stephen Linf799e3f2013-07-13 20:38:47 +000042; CHECK-LABEL: test_brcond:
Tim Northovere0e3aef2013-01-31 12:12:40 +000043 br i1 %bit, label %true, label %false
Tim Northoverdb2860f42014-04-14 13:18:48 +000044; CHECK: tbz {{w[0-9]+}}, #0, {{.?LBB}}
Tim Northovere0e3aef2013-01-31 12:12:40 +000045
46true:
47 ret i32 0
48false:
49 ret i32 42
50}
51
52define i1 @test_setcc_float(float %lhs, float %rhs) {
53; CHECK: test_setcc_float
54 %val = fcmp oeq float %lhs, %rhs
55; CHECK: fcmp s0, s1
Tim Northoveree20caa2014-05-12 18:04:06 +000056; CHECK: cset w0, eq
Amara Emersonf80f95f2013-10-31 09:32:11 +000057; CHECK-NOFP-NOT: fcmp
Tim Northovere0e3aef2013-01-31 12:12:40 +000058 ret i1 %val
59}
60
61define i1 @test_setcc_double(double %lhs, double %rhs) {
62; CHECK: test_setcc_double
63 %val = fcmp oeq double %lhs, %rhs
64; CHECK: fcmp d0, d1
Tim Northoveree20caa2014-05-12 18:04:06 +000065; CHECK: cset w0, eq
Amara Emersonf80f95f2013-10-31 09:32:11 +000066; CHECK-NOFP-NOT: fcmp
Tim Northovere0e3aef2013-01-31 12:12:40 +000067 ret i1 %val
68}
69
70define i1 @test_setcc_i32(i32 %lhs, i32 %rhs) {
71; CHECK: test_setcc_i32
72 %val = icmp ugt i32 %lhs, %rhs
73; CHECK: cmp w0, w1
Tim Northoveree20caa2014-05-12 18:04:06 +000074; CHECK: cset w0, hi
Tim Northovere0e3aef2013-01-31 12:12:40 +000075 ret i1 %val
76}
77
78define i1 @test_setcc_i64(i64 %lhs, i64 %rhs) {
79; CHECK: test_setcc_i64
80 %val = icmp ne i64 %lhs, %rhs
81; CHECK: cmp x0, x1
Tim Northoveree20caa2014-05-12 18:04:06 +000082; CHECK: cset w0, ne
Tim Northovere0e3aef2013-01-31 12:12:40 +000083 ret i1 %val
84}