AArch64/ARM64: port more AArch64 tests to ARM64.
[oota-llvm.git] / test / CodeGen / AArch64 / neon-facge-facgt.ll
1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s
2 ; arm64 has duplicates for this functionality in vcmp.ll.
3
4 declare <2 x i32> @llvm.arm.neon.vacge.v2i32.v2f32(<2 x float>, <2 x float>)
5 declare <4 x i32> @llvm.arm.neon.vacge.v4i32.v4f32(<4 x float>, <4 x float>)
6 declare <2 x i64> @llvm.arm.neon.vacge.v2i64.v2f64(<2 x double>, <2 x double>)
7
8 define <2 x i32> @facge_from_intr_v2i32(<2 x float> %A, <2 x float> %B, <2 x float> %C) {
9 ; Using registers other than v0, v1 and v2 are possible, but would be odd.
10 ; CHECK: facge_from_intr_v2i32:
11   %val = call <2 x i32> @llvm.arm.neon.vacge.v2i32.v2f32(<2 x float> %A, <2 x float> %B)
12 ; CHECK: facge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
13   ret <2 x i32> %val
14 }
15 define <4 x i32> @facge_from_intr_v4i32( <4 x float> %A, <4 x float> %B) {
16 ; Using registers other than v0, v1 and v2 are possible, but would be odd.
17 ; CHECK: facge_from_intr_v4i32:
18   %val = call <4 x i32> @llvm.arm.neon.vacge.v4i32.v4f32(<4 x float> %A, <4 x float> %B)
19 ; CHECK: facge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
20   ret <4 x i32> %val
21 }
22
23 define <2 x i64> @facge_from_intr_v2i64(<2 x double> %A, <2 x double> %B) {
24 ; Using registers other than v0, v1 and v2 are possible, but would be odd.
25 ; CHECK: facge_from_intr_v2i64:
26   %val = call <2 x i64> @llvm.arm.neon.vacge.v2i64.v2f64(<2 x double> %A, <2 x double> %B)
27 ; CHECK: facge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
28   ret <2 x i64> %val
29 }
30
31 declare <2 x i32> @llvm.arm.neon.vacgt.v2i32.v2f32(<2 x float>, <2 x float>)
32 declare <4 x i32> @llvm.arm.neon.vacgt.v4i32.v4f32(<4 x float>, <4 x float>)
33 declare <2 x i64> @llvm.arm.neon.vacgt.v2i64.v2f64(<2 x double>, <2 x double>)
34
35 define <2 x i32> @facgt_from_intr_v2i32(<2 x float> %A, <2 x float> %B, <2 x float> %C) {
36 ; Using registers other than v0, v1 and v2 are possible, but would be odd.
37 ; CHECK: facgt_from_intr_v2i32:
38   %val = call <2 x i32> @llvm.arm.neon.vacgt.v2i32.v2f32(<2 x float> %A, <2 x float> %B)
39 ; CHECK: facgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
40   ret <2 x i32> %val
41 }
42 define <4 x i32> @facgt_from_intr_v4i32( <4 x float> %A, <4 x float> %B) {
43 ; Using registers other than v0, v1 and v2 are possible, but would be odd.
44 ; CHECK: facgt_from_intr_v4i32:
45   %val = call <4 x i32> @llvm.arm.neon.vacgt.v4i32.v4f32(<4 x float> %A, <4 x float> %B)
46 ; CHECK: facgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
47   ret <4 x i32> %val
48 }
49
50 define <2 x i64> @facgt_from_intr_v2i64(<2 x double> %A, <2 x double> %B) {
51 ; Using registers other than v0, v1 and v2 are possible, but would be odd.
52 ; CHECK: facgt_from_intr_v2i64:
53   %val = call <2 x i64> @llvm.arm.neon.vacgt.v2i64.v2f64(<2 x double> %A, <2 x double> %B)
54 ; CHECK: facgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
55   ret <2 x i64> %val
56 }
57