1 ; RUN: llc < %s -mtriple=armv8-linux-gnu -mattr=+neon | FileCheck %s
4 ; CHECK: vmax.s32 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
5 define <4 x i32> @t1(<4 x i32> %a, <4 x i32> %b) {
6 %t1 = icmp sgt <4 x i32> %a, %b
7 %t2 = select <4 x i1> %t1, <4 x i32> %a, <4 x i32> %b
12 ; CHECK: vmin.s32 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
13 define <4 x i32> @t2(<4 x i32> %a, <4 x i32> %b) {
14 %t1 = icmp slt <4 x i32> %a, %b
15 %t2 = select <4 x i1> %t1, <4 x i32> %a, <4 x i32> %b
20 ; CHECK: vmax.u32 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
21 define <4 x i32> @t3(<4 x i32> %a, <4 x i32> %b) {
22 %t1 = icmp ugt <4 x i32> %a, %b
23 %t2 = select <4 x i1> %t1, <4 x i32> %a, <4 x i32> %b
28 ; CHECK: vmin.u32 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
29 define <4 x i32> @t4(<4 x i32> %a, <4 x i32> %b) {
30 %t1 = icmp ult <4 x i32> %a, %b
31 %t2 = select <4 x i1> %t1, <4 x i32> %a, <4 x i32> %b
36 ; CHECK: vmax.s32 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
37 define <2 x i32> @t5(<2 x i32> %a, <2 x i32> %b) {
38 %t1 = icmp sgt <2 x i32> %a, %b
39 %t2 = select <2 x i1> %t1, <2 x i32> %a, <2 x i32> %b
44 ; CHECK: vmin.s32 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
45 define <2 x i32> @t6(<2 x i32> %a, <2 x i32> %b) {
46 %t1 = icmp slt <2 x i32> %a, %b
47 %t2 = select <2 x i1> %t1, <2 x i32> %a, <2 x i32> %b
52 ; CHECK: vmax.u32 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
53 define <2 x i32> @t7(<2 x i32> %a, <2 x i32> %b) {
54 %t1 = icmp ugt <2 x i32> %a, %b
55 %t2 = select <2 x i1> %t1, <2 x i32> %a, <2 x i32> %b
60 ; CHECK: vmin.u32 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
61 define <2 x i32> @t8(<2 x i32> %a, <2 x i32> %b) {
62 %t1 = icmp ult <2 x i32> %a, %b
63 %t2 = select <2 x i1> %t1, <2 x i32> %a, <2 x i32> %b
68 ; CHECK: vmax.s16 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
69 define <8 x i16> @t9(<8 x i16> %a, <8 x i16> %b) {
70 %t1 = icmp sgt <8 x i16> %a, %b
71 %t2 = select <8 x i1> %t1, <8 x i16> %a, <8 x i16> %b
76 ; CHECK: vmin.s16 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
77 define <8 x i16> @t10(<8 x i16> %a, <8 x i16> %b) {
78 %t1 = icmp slt <8 x i16> %a, %b
79 %t2 = select <8 x i1> %t1, <8 x i16> %a, <8 x i16> %b
84 ; CHECK: vmax.u16 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
85 define <8 x i16> @t11(<8 x i16> %a, <8 x i16> %b) {
86 %t1 = icmp ugt <8 x i16> %a, %b
87 %t2 = select <8 x i1> %t1, <8 x i16> %a, <8 x i16> %b
92 ; CHECK: vmin.u16 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
93 define <8 x i16> @t12(<8 x i16> %a, <8 x i16> %b) {
94 %t1 = icmp ult <8 x i16> %a, %b
95 %t2 = select <8 x i1> %t1, <8 x i16> %a, <8 x i16> %b
101 define <4 x i16> @t13(<4 x i16> %a, <4 x i16> %b) {
102 %t1 = icmp sgt <4 x i16> %a, %b
103 %t2 = select <4 x i1> %t1, <4 x i16> %a, <4 x i16> %b
108 ; CHECK: vmin.s16 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
109 define <4 x i16> @t14(<4 x i16> %a, <4 x i16> %b) {
110 %t1 = icmp slt <4 x i16> %a, %b
111 %t2 = select <4 x i1> %t1, <4 x i16> %a, <4 x i16> %b
116 ; CHECK: vmax.u16 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
117 define <4 x i16> @t15(<4 x i16> %a, <4 x i16> %b) {
118 %t1 = icmp ugt <4 x i16> %a, %b
119 %t2 = select <4 x i1> %t1, <4 x i16> %a, <4 x i16> %b
124 ; CHECK: vmin.u16 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
125 define <4 x i16> @t16(<4 x i16> %a, <4 x i16> %b) {
126 %t1 = icmp ult <4 x i16> %a, %b
127 %t2 = select <4 x i1> %t1, <4 x i16> %a, <4 x i16> %b
132 ; CHECK: vmax.s8 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
133 define <16 x i8> @t17(<16 x i8> %a, <16 x i8> %b) {
134 %t1 = icmp sgt <16 x i8> %a, %b
135 %t2 = select <16 x i1> %t1, <16 x i8> %a, <16 x i8> %b
140 ; CHECK: vmin.s8 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
141 define <16 x i8> @t18(<16 x i8> %a, <16 x i8> %b) {
142 %t1 = icmp slt <16 x i8> %a, %b
143 %t2 = select <16 x i1> %t1, <16 x i8> %a, <16 x i8> %b
148 ; CHECK: vmax.u8 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
149 define <16 x i8> @t19(<16 x i8> %a, <16 x i8> %b) {
150 %t1 = icmp ugt <16 x i8> %a, %b
151 %t2 = select <16 x i1> %t1, <16 x i8> %a, <16 x i8> %b
156 ; CHECK: vmin.u8 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
157 define <16 x i8> @t20(<16 x i8> %a, <16 x i8> %b) {
158 %t1 = icmp ult <16 x i8> %a, %b
159 %t2 = select <16 x i1> %t1, <16 x i8> %a, <16 x i8> %b
164 ; CHECK: vmax.s8 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
165 define <8 x i8> @t21(<8 x i8> %a, <8 x i8> %b) {
166 %t1 = icmp sgt <8 x i8> %a, %b
167 %t2 = select <8 x i1> %t1, <8 x i8> %a, <8 x i8> %b
172 ; CHECK: vmin.s8 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
173 define <8 x i8> @t22(<8 x i8> %a, <8 x i8> %b) {
174 %t1 = icmp slt <8 x i8> %a, %b
175 %t2 = select <8 x i1> %t1, <8 x i8> %a, <8 x i8> %b
180 ; CHECK: vmax.u8 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
181 define <8 x i8> @t23(<8 x i8> %a, <8 x i8> %b) {
182 %t1 = icmp ugt <8 x i8> %a, %b
183 %t2 = select <8 x i1> %t1, <8 x i8> %a, <8 x i8> %b
188 ; CHECK: vmin.u8 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
189 define <8 x i8> @t24(<8 x i8> %a, <8 x i8> %b) {
190 %t1 = icmp ult <8 x i8> %a, %b
191 %t2 = select <8 x i1> %t1, <8 x i8> %a, <8 x i8> %b