2442 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64-unknown-unknown | FileCheck %s3 4; There are 4 commuted variants (abbc/abcb/bcab/bcba) *5; 4 predicate variants ([*][lg][te]) *6; 4 min/max flavors (smin/smax/umin/umax) *7; 2 notted variants8; = 128 tests9 10define <4 x i32> @smin_ab_bc(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {11; CHECK-LABEL: smin_ab_bc:12; CHECK: // %bb.0:13; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s14; CHECK-NEXT: smin v1.4s, v1.4s, v2.4s15; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s16; CHECK-NEXT: ret17 %cmp_ab = icmp slt <4 x i32> %a, %b18 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b19 %cmp_bc = icmp slt <4 x i32> %b, %c20 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c21 %cmp_ac = icmp slt <4 x i32> %a, %c22 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc23 ret <4 x i32> %r24}25 26define <4 x i32> @smin_ab_cb(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {27; CHECK-LABEL: smin_ab_cb:28; CHECK: // %bb.0:29; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s30; CHECK-NEXT: smin v1.4s, v2.4s, v1.4s31; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s32; CHECK-NEXT: ret33 %cmp_ab = icmp slt <4 x i32> %a, %b34 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b35 %cmp_cb = icmp slt <4 x i32> %c, %b36 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b37 %cmp_ac = icmp slt <4 x i32> %a, %c38 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb39 ret <4 x i32> %r40}41 42define <4 x i32> @smin_bc_ab(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {43; CHECK-LABEL: smin_bc_ab:44; CHECK: // %bb.0:45; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s46; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s47; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s48; CHECK-NEXT: ret49 %cmp_bc = icmp slt <4 x i32> %b, %c50 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c51 %cmp_ab = icmp slt <4 x i32> %a, %b52 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b53 %cmp_ca = icmp slt <4 x i32> %c, %a54 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab55 ret <4 x i32> %r56}57 58define <4 x i32> @smin_bc_ba(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {59; CHECK-LABEL: smin_bc_ba:60; CHECK: // %bb.0:61; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s62; CHECK-NEXT: smin v0.4s, v1.4s, v0.4s63; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s64; CHECK-NEXT: ret65 %cmp_bc = icmp slt <4 x i32> %b, %c66 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c67 %cmp_ba = icmp slt <4 x i32> %b, %a68 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a69 %cmp_ca = icmp slt <4 x i32> %c, %a70 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba71 ret <4 x i32> %r72}73 74define <4 x i32> @smin_ab_bc_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {75; CHECK-LABEL: smin_ab_bc_swap_pred:76; CHECK: // %bb.0:77; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s78; CHECK-NEXT: smin v1.4s, v1.4s, v2.4s79; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s80; CHECK-NEXT: ret81 %cmp_ab = icmp slt <4 x i32> %a, %b82 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b83 %cmp_bc = icmp slt <4 x i32> %b, %c84 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c85 %cmp_ac = icmp sgt <4 x i32> %c, %a86 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc87 ret <4 x i32> %r88}89 90define <4 x i32> @smin_ab_cb_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {91; CHECK-LABEL: smin_ab_cb_swap_pred:92; CHECK: // %bb.0:93; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s94; CHECK-NEXT: smin v1.4s, v2.4s, v1.4s95; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s96; CHECK-NEXT: ret97 %cmp_ab = icmp slt <4 x i32> %a, %b98 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b99 %cmp_cb = icmp slt <4 x i32> %c, %b100 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b101 %cmp_ac = icmp sgt <4 x i32> %c, %a102 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb103 ret <4 x i32> %r104}105 106define <4 x i32> @smin_bc_ab_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {107; CHECK-LABEL: smin_bc_ab_swap_pred:108; CHECK: // %bb.0:109; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s110; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s111; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s112; CHECK-NEXT: ret113 %cmp_bc = icmp slt <4 x i32> %b, %c114 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c115 %cmp_ab = icmp slt <4 x i32> %a, %b116 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b117 %cmp_ca = icmp sgt <4 x i32> %a, %c118 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab119 ret <4 x i32> %r120}121 122define <4 x i32> @smin_bc_ba_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {123; CHECK-LABEL: smin_bc_ba_swap_pred:124; CHECK: // %bb.0:125; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s126; CHECK-NEXT: smin v0.4s, v1.4s, v0.4s127; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s128; CHECK-NEXT: ret129 %cmp_bc = icmp slt <4 x i32> %b, %c130 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c131 %cmp_ba = icmp slt <4 x i32> %b, %a132 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a133 %cmp_ca = icmp sgt <4 x i32> %a, %c134 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba135 ret <4 x i32> %r136}137 138define <4 x i32> @smin_ab_bc_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {139; CHECK-LABEL: smin_ab_bc_eq_pred:140; CHECK: // %bb.0:141; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s142; CHECK-NEXT: smin v1.4s, v1.4s, v2.4s143; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s144; CHECK-NEXT: ret145 %cmp_ab = icmp slt <4 x i32> %a, %b146 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b147 %cmp_bc = icmp slt <4 x i32> %b, %c148 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c149 %cmp_ac = icmp sle <4 x i32> %a, %c150 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc151 ret <4 x i32> %r152}153 154define <4 x i32> @smin_ab_cb_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {155; CHECK-LABEL: smin_ab_cb_eq_pred:156; CHECK: // %bb.0:157; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s158; CHECK-NEXT: smin v1.4s, v2.4s, v1.4s159; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s160; CHECK-NEXT: ret161 %cmp_ab = icmp slt <4 x i32> %a, %b162 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b163 %cmp_cb = icmp slt <4 x i32> %c, %b164 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b165 %cmp_ac = icmp sle <4 x i32> %a, %c166 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb167 ret <4 x i32> %r168}169 170define <4 x i32> @smin_bc_ab_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {171; CHECK-LABEL: smin_bc_ab_eq_pred:172; CHECK: // %bb.0:173; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s174; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s175; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s176; CHECK-NEXT: ret177 %cmp_bc = icmp slt <4 x i32> %b, %c178 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c179 %cmp_ab = icmp slt <4 x i32> %a, %b180 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b181 %cmp_ca = icmp sle <4 x i32> %c, %a182 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab183 ret <4 x i32> %r184}185 186define <4 x i32> @smin_bc_ba_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {187; CHECK-LABEL: smin_bc_ba_eq_pred:188; CHECK: // %bb.0:189; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s190; CHECK-NEXT: smin v0.4s, v1.4s, v0.4s191; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s192; CHECK-NEXT: ret193 %cmp_bc = icmp slt <4 x i32> %b, %c194 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c195 %cmp_ba = icmp slt <4 x i32> %b, %a196 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a197 %cmp_ca = icmp sle <4 x i32> %c, %a198 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba199 ret <4 x i32> %r200}201 202define <4 x i32> @smin_ab_bc_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {203; CHECK-LABEL: smin_ab_bc_eq_swap_pred:204; CHECK: // %bb.0:205; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s206; CHECK-NEXT: smin v1.4s, v1.4s, v2.4s207; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s208; CHECK-NEXT: ret209 %cmp_ab = icmp slt <4 x i32> %a, %b210 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b211 %cmp_bc = icmp slt <4 x i32> %b, %c212 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c213 %cmp_ac = icmp sge <4 x i32> %c, %a214 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc215 ret <4 x i32> %r216}217 218define <4 x i32> @smin_ab_cb_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {219; CHECK-LABEL: smin_ab_cb_eq_swap_pred:220; CHECK: // %bb.0:221; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s222; CHECK-NEXT: smin v1.4s, v2.4s, v1.4s223; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s224; CHECK-NEXT: ret225 %cmp_ab = icmp slt <4 x i32> %a, %b226 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b227 %cmp_cb = icmp slt <4 x i32> %c, %b228 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b229 %cmp_ac = icmp sge <4 x i32> %c, %a230 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb231 ret <4 x i32> %r232}233 234define <4 x i32> @smin_bc_ab_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {235; CHECK-LABEL: smin_bc_ab_eq_swap_pred:236; CHECK: // %bb.0:237; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s238; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s239; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s240; CHECK-NEXT: ret241 %cmp_bc = icmp slt <4 x i32> %b, %c242 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c243 %cmp_ab = icmp slt <4 x i32> %a, %b244 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b245 %cmp_ca = icmp sge <4 x i32> %a, %c246 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab247 ret <4 x i32> %r248}249 250define <4 x i32> @smin_bc_ba_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {251; CHECK-LABEL: smin_bc_ba_eq_swap_pred:252; CHECK: // %bb.0:253; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s254; CHECK-NEXT: smin v0.4s, v1.4s, v0.4s255; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s256; CHECK-NEXT: ret257 %cmp_bc = icmp slt <4 x i32> %b, %c258 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c259 %cmp_ba = icmp slt <4 x i32> %b, %a260 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a261 %cmp_ca = icmp sge <4 x i32> %a, %c262 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba263 ret <4 x i32> %r264}265 266define <4 x i32> @smax_ab_bc(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {267; CHECK-LABEL: smax_ab_bc:268; CHECK: // %bb.0:269; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s270; CHECK-NEXT: smax v1.4s, v1.4s, v2.4s271; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s272; CHECK-NEXT: ret273 %cmp_ab = icmp sgt <4 x i32> %a, %b274 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b275 %cmp_bc = icmp sgt <4 x i32> %b, %c276 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c277 %cmp_ac = icmp sgt <4 x i32> %a, %c278 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc279 ret <4 x i32> %r280}281 282define <4 x i32> @smax_ab_cb(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {283; CHECK-LABEL: smax_ab_cb:284; CHECK: // %bb.0:285; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s286; CHECK-NEXT: smax v1.4s, v2.4s, v1.4s287; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s288; CHECK-NEXT: ret289 %cmp_ab = icmp sgt <4 x i32> %a, %b290 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b291 %cmp_cb = icmp sgt <4 x i32> %c, %b292 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b293 %cmp_ac = icmp sgt <4 x i32> %a, %c294 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb295 ret <4 x i32> %r296}297 298define <4 x i32> @smax_bc_ab(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {299; CHECK-LABEL: smax_bc_ab:300; CHECK: // %bb.0:301; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s302; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s303; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s304; CHECK-NEXT: ret305 %cmp_bc = icmp sgt <4 x i32> %b, %c306 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c307 %cmp_ab = icmp sgt <4 x i32> %a, %b308 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b309 %cmp_ca = icmp sgt <4 x i32> %c, %a310 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab311 ret <4 x i32> %r312}313 314define <4 x i32> @smax_bc_ba(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {315; CHECK-LABEL: smax_bc_ba:316; CHECK: // %bb.0:317; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s318; CHECK-NEXT: smax v0.4s, v1.4s, v0.4s319; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s320; CHECK-NEXT: ret321 %cmp_bc = icmp sgt <4 x i32> %b, %c322 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c323 %cmp_ba = icmp sgt <4 x i32> %b, %a324 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a325 %cmp_ca = icmp sgt <4 x i32> %c, %a326 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba327 ret <4 x i32> %r328}329 330define <4 x i32> @smax_ab_bc_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {331; CHECK-LABEL: smax_ab_bc_swap_pred:332; CHECK: // %bb.0:333; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s334; CHECK-NEXT: smax v1.4s, v1.4s, v2.4s335; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s336; CHECK-NEXT: ret337 %cmp_ab = icmp sgt <4 x i32> %a, %b338 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b339 %cmp_bc = icmp sgt <4 x i32> %b, %c340 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c341 %cmp_ac = icmp slt <4 x i32> %c, %a342 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc343 ret <4 x i32> %r344}345 346define <4 x i32> @smax_ab_cb_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {347; CHECK-LABEL: smax_ab_cb_swap_pred:348; CHECK: // %bb.0:349; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s350; CHECK-NEXT: smax v1.4s, v2.4s, v1.4s351; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s352; CHECK-NEXT: ret353 %cmp_ab = icmp sgt <4 x i32> %a, %b354 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b355 %cmp_cb = icmp sgt <4 x i32> %c, %b356 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b357 %cmp_ac = icmp slt <4 x i32> %c, %a358 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb359 ret <4 x i32> %r360}361 362define <4 x i32> @smax_bc_ab_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {363; CHECK-LABEL: smax_bc_ab_swap_pred:364; CHECK: // %bb.0:365; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s366; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s367; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s368; CHECK-NEXT: ret369 %cmp_bc = icmp sgt <4 x i32> %b, %c370 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c371 %cmp_ab = icmp sgt <4 x i32> %a, %b372 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b373 %cmp_ca = icmp slt <4 x i32> %a, %c374 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab375 ret <4 x i32> %r376}377 378define <4 x i32> @smax_bc_ba_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {379; CHECK-LABEL: smax_bc_ba_swap_pred:380; CHECK: // %bb.0:381; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s382; CHECK-NEXT: smax v0.4s, v1.4s, v0.4s383; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s384; CHECK-NEXT: ret385 %cmp_bc = icmp sgt <4 x i32> %b, %c386 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c387 %cmp_ba = icmp sgt <4 x i32> %b, %a388 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a389 %cmp_ca = icmp slt <4 x i32> %a, %c390 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba391 ret <4 x i32> %r392}393 394define <4 x i32> @smax_ab_bc_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {395; CHECK-LABEL: smax_ab_bc_eq_pred:396; CHECK: // %bb.0:397; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s398; CHECK-NEXT: smax v1.4s, v1.4s, v2.4s399; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s400; CHECK-NEXT: ret401 %cmp_ab = icmp sgt <4 x i32> %a, %b402 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b403 %cmp_bc = icmp sgt <4 x i32> %b, %c404 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c405 %cmp_ac = icmp sge <4 x i32> %a, %c406 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc407 ret <4 x i32> %r408}409 410define <4 x i32> @smax_ab_cb_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {411; CHECK-LABEL: smax_ab_cb_eq_pred:412; CHECK: // %bb.0:413; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s414; CHECK-NEXT: smax v1.4s, v2.4s, v1.4s415; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s416; CHECK-NEXT: ret417 %cmp_ab = icmp sgt <4 x i32> %a, %b418 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b419 %cmp_cb = icmp sgt <4 x i32> %c, %b420 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b421 %cmp_ac = icmp sge <4 x i32> %a, %c422 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb423 ret <4 x i32> %r424}425 426define <4 x i32> @smax_bc_ab_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {427; CHECK-LABEL: smax_bc_ab_eq_pred:428; CHECK: // %bb.0:429; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s430; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s431; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s432; CHECK-NEXT: ret433 %cmp_bc = icmp sgt <4 x i32> %b, %c434 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c435 %cmp_ab = icmp sgt <4 x i32> %a, %b436 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b437 %cmp_ca = icmp sge <4 x i32> %c, %a438 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab439 ret <4 x i32> %r440}441 442define <4 x i32> @smax_bc_ba_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {443; CHECK-LABEL: smax_bc_ba_eq_pred:444; CHECK: // %bb.0:445; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s446; CHECK-NEXT: smax v0.4s, v1.4s, v0.4s447; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s448; CHECK-NEXT: ret449 %cmp_bc = icmp sgt <4 x i32> %b, %c450 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c451 %cmp_ba = icmp sgt <4 x i32> %b, %a452 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a453 %cmp_ca = icmp sge <4 x i32> %c, %a454 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba455 ret <4 x i32> %r456}457 458define <4 x i32> @smax_ab_bc_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {459; CHECK-LABEL: smax_ab_bc_eq_swap_pred:460; CHECK: // %bb.0:461; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s462; CHECK-NEXT: smax v1.4s, v1.4s, v2.4s463; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s464; CHECK-NEXT: ret465 %cmp_ab = icmp sgt <4 x i32> %a, %b466 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b467 %cmp_bc = icmp sgt <4 x i32> %b, %c468 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c469 %cmp_ac = icmp sle <4 x i32> %c, %a470 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc471 ret <4 x i32> %r472}473 474define <4 x i32> @smax_ab_cb_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {475; CHECK-LABEL: smax_ab_cb_eq_swap_pred:476; CHECK: // %bb.0:477; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s478; CHECK-NEXT: smax v1.4s, v2.4s, v1.4s479; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s480; CHECK-NEXT: ret481 %cmp_ab = icmp sgt <4 x i32> %a, %b482 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b483 %cmp_cb = icmp sgt <4 x i32> %c, %b484 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b485 %cmp_ac = icmp sle <4 x i32> %c, %a486 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb487 ret <4 x i32> %r488}489 490define <4 x i32> @smax_bc_ab_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {491; CHECK-LABEL: smax_bc_ab_eq_swap_pred:492; CHECK: // %bb.0:493; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s494; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s495; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s496; CHECK-NEXT: ret497 %cmp_bc = icmp sgt <4 x i32> %b, %c498 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c499 %cmp_ab = icmp sgt <4 x i32> %a, %b500 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b501 %cmp_ca = icmp sle <4 x i32> %a, %c502 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab503 ret <4 x i32> %r504}505 506define <4 x i32> @smax_bc_ba_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {507; CHECK-LABEL: smax_bc_ba_eq_swap_pred:508; CHECK: // %bb.0:509; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s510; CHECK-NEXT: smax v0.4s, v1.4s, v0.4s511; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s512; CHECK-NEXT: ret513 %cmp_bc = icmp sgt <4 x i32> %b, %c514 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c515 %cmp_ba = icmp sgt <4 x i32> %b, %a516 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a517 %cmp_ca = icmp sle <4 x i32> %a, %c518 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba519 ret <4 x i32> %r520}521 522define <4 x i32> @umin_ab_bc(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {523; CHECK-LABEL: umin_ab_bc:524; CHECK: // %bb.0:525; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s526; CHECK-NEXT: umin v1.4s, v1.4s, v2.4s527; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s528; CHECK-NEXT: ret529 %cmp_ab = icmp ult <4 x i32> %a, %b530 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b531 %cmp_bc = icmp ult <4 x i32> %b, %c532 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c533 %cmp_ac = icmp ult <4 x i32> %a, %c534 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc535 ret <4 x i32> %r536}537 538define <4 x i32> @umin_ab_cb(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {539; CHECK-LABEL: umin_ab_cb:540; CHECK: // %bb.0:541; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s542; CHECK-NEXT: umin v1.4s, v2.4s, v1.4s543; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s544; CHECK-NEXT: ret545 %cmp_ab = icmp ult <4 x i32> %a, %b546 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b547 %cmp_cb = icmp ult <4 x i32> %c, %b548 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b549 %cmp_ac = icmp ult <4 x i32> %a, %c550 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb551 ret <4 x i32> %r552}553 554define <4 x i32> @umin_bc_ab(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {555; CHECK-LABEL: umin_bc_ab:556; CHECK: // %bb.0:557; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s558; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s559; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s560; CHECK-NEXT: ret561 %cmp_bc = icmp ult <4 x i32> %b, %c562 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c563 %cmp_ab = icmp ult <4 x i32> %a, %b564 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b565 %cmp_ca = icmp ult <4 x i32> %c, %a566 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab567 ret <4 x i32> %r568}569 570define <4 x i32> @umin_bc_ba(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {571; CHECK-LABEL: umin_bc_ba:572; CHECK: // %bb.0:573; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s574; CHECK-NEXT: umin v0.4s, v1.4s, v0.4s575; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s576; CHECK-NEXT: ret577 %cmp_bc = icmp ult <4 x i32> %b, %c578 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c579 %cmp_ba = icmp ult <4 x i32> %b, %a580 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a581 %cmp_ca = icmp ult <4 x i32> %c, %a582 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba583 ret <4 x i32> %r584}585 586define <4 x i32> @umin_ab_bc_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {587; CHECK-LABEL: umin_ab_bc_swap_pred:588; CHECK: // %bb.0:589; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s590; CHECK-NEXT: umin v1.4s, v1.4s, v2.4s591; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s592; CHECK-NEXT: ret593 %cmp_ab = icmp ult <4 x i32> %a, %b594 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b595 %cmp_bc = icmp ult <4 x i32> %b, %c596 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c597 %cmp_ac = icmp ugt <4 x i32> %c, %a598 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc599 ret <4 x i32> %r600}601 602define <4 x i32> @umin_ab_cb_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {603; CHECK-LABEL: umin_ab_cb_swap_pred:604; CHECK: // %bb.0:605; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s606; CHECK-NEXT: umin v1.4s, v2.4s, v1.4s607; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s608; CHECK-NEXT: ret609 %cmp_ab = icmp ult <4 x i32> %a, %b610 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b611 %cmp_cb = icmp ult <4 x i32> %c, %b612 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b613 %cmp_ac = icmp ugt <4 x i32> %c, %a614 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb615 ret <4 x i32> %r616}617 618define <4 x i32> @umin_bc_ab_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {619; CHECK-LABEL: umin_bc_ab_swap_pred:620; CHECK: // %bb.0:621; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s622; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s623; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s624; CHECK-NEXT: ret625 %cmp_bc = icmp ult <4 x i32> %b, %c626 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c627 %cmp_ab = icmp ult <4 x i32> %a, %b628 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b629 %cmp_ca = icmp ugt <4 x i32> %a, %c630 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab631 ret <4 x i32> %r632}633 634define <4 x i32> @umin_bc_ba_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {635; CHECK-LABEL: umin_bc_ba_swap_pred:636; CHECK: // %bb.0:637; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s638; CHECK-NEXT: umin v0.4s, v1.4s, v0.4s639; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s640; CHECK-NEXT: ret641 %cmp_bc = icmp ult <4 x i32> %b, %c642 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c643 %cmp_ba = icmp ult <4 x i32> %b, %a644 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a645 %cmp_ca = icmp ugt <4 x i32> %a, %c646 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba647 ret <4 x i32> %r648}649 650define <4 x i32> @umin_ab_bc_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {651; CHECK-LABEL: umin_ab_bc_eq_pred:652; CHECK: // %bb.0:653; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s654; CHECK-NEXT: umin v1.4s, v1.4s, v2.4s655; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s656; CHECK-NEXT: ret657 %cmp_ab = icmp ult <4 x i32> %a, %b658 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b659 %cmp_bc = icmp ult <4 x i32> %b, %c660 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c661 %cmp_ac = icmp ule <4 x i32> %a, %c662 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc663 ret <4 x i32> %r664}665 666define <4 x i32> @umin_ab_cb_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {667; CHECK-LABEL: umin_ab_cb_eq_pred:668; CHECK: // %bb.0:669; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s670; CHECK-NEXT: umin v1.4s, v2.4s, v1.4s671; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s672; CHECK-NEXT: ret673 %cmp_ab = icmp ult <4 x i32> %a, %b674 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b675 %cmp_cb = icmp ult <4 x i32> %c, %b676 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b677 %cmp_ac = icmp ule <4 x i32> %a, %c678 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb679 ret <4 x i32> %r680}681 682define <4 x i32> @umin_bc_ab_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {683; CHECK-LABEL: umin_bc_ab_eq_pred:684; CHECK: // %bb.0:685; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s686; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s687; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s688; CHECK-NEXT: ret689 %cmp_bc = icmp ult <4 x i32> %b, %c690 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c691 %cmp_ab = icmp ult <4 x i32> %a, %b692 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b693 %cmp_ca = icmp ule <4 x i32> %c, %a694 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab695 ret <4 x i32> %r696}697 698define <4 x i32> @umin_bc_ba_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {699; CHECK-LABEL: umin_bc_ba_eq_pred:700; CHECK: // %bb.0:701; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s702; CHECK-NEXT: umin v0.4s, v1.4s, v0.4s703; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s704; CHECK-NEXT: ret705 %cmp_bc = icmp ult <4 x i32> %b, %c706 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c707 %cmp_ba = icmp ult <4 x i32> %b, %a708 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a709 %cmp_ca = icmp ule <4 x i32> %c, %a710 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba711 ret <4 x i32> %r712}713 714define <4 x i32> @umin_ab_bc_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {715; CHECK-LABEL: umin_ab_bc_eq_swap_pred:716; CHECK: // %bb.0:717; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s718; CHECK-NEXT: umin v1.4s, v1.4s, v2.4s719; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s720; CHECK-NEXT: ret721 %cmp_ab = icmp ult <4 x i32> %a, %b722 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b723 %cmp_bc = icmp ult <4 x i32> %b, %c724 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c725 %cmp_ac = icmp uge <4 x i32> %c, %a726 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc727 ret <4 x i32> %r728}729 730define <4 x i32> @umin_ab_cb_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {731; CHECK-LABEL: umin_ab_cb_eq_swap_pred:732; CHECK: // %bb.0:733; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s734; CHECK-NEXT: umin v1.4s, v2.4s, v1.4s735; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s736; CHECK-NEXT: ret737 %cmp_ab = icmp ult <4 x i32> %a, %b738 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b739 %cmp_cb = icmp ult <4 x i32> %c, %b740 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b741 %cmp_ac = icmp uge <4 x i32> %c, %a742 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb743 ret <4 x i32> %r744}745 746define <4 x i32> @umin_bc_ab_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {747; CHECK-LABEL: umin_bc_ab_eq_swap_pred:748; CHECK: // %bb.0:749; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s750; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s751; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s752; CHECK-NEXT: ret753 %cmp_bc = icmp ult <4 x i32> %b, %c754 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c755 %cmp_ab = icmp ult <4 x i32> %a, %b756 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b757 %cmp_ca = icmp uge <4 x i32> %a, %c758 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab759 ret <4 x i32> %r760}761 762define <4 x i32> @umin_bc_ba_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {763; CHECK-LABEL: umin_bc_ba_eq_swap_pred:764; CHECK: // %bb.0:765; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s766; CHECK-NEXT: umin v0.4s, v1.4s, v0.4s767; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s768; CHECK-NEXT: ret769 %cmp_bc = icmp ult <4 x i32> %b, %c770 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c771 %cmp_ba = icmp ult <4 x i32> %b, %a772 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a773 %cmp_ca = icmp uge <4 x i32> %a, %c774 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba775 ret <4 x i32> %r776}777 778define <4 x i32> @umax_ab_bc(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {779; CHECK-LABEL: umax_ab_bc:780; CHECK: // %bb.0:781; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s782; CHECK-NEXT: umax v1.4s, v1.4s, v2.4s783; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s784; CHECK-NEXT: ret785 %cmp_ab = icmp ugt <4 x i32> %a, %b786 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b787 %cmp_bc = icmp ugt <4 x i32> %b, %c788 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c789 %cmp_ac = icmp ugt <4 x i32> %a, %c790 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc791 ret <4 x i32> %r792}793 794define <4 x i32> @umax_ab_cb(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {795; CHECK-LABEL: umax_ab_cb:796; CHECK: // %bb.0:797; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s798; CHECK-NEXT: umax v1.4s, v2.4s, v1.4s799; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s800; CHECK-NEXT: ret801 %cmp_ab = icmp ugt <4 x i32> %a, %b802 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b803 %cmp_cb = icmp ugt <4 x i32> %c, %b804 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b805 %cmp_ac = icmp ugt <4 x i32> %a, %c806 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb807 ret <4 x i32> %r808}809 810define <4 x i32> @umax_bc_ab(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {811; CHECK-LABEL: umax_bc_ab:812; CHECK: // %bb.0:813; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s814; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s815; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s816; CHECK-NEXT: ret817 %cmp_bc = icmp ugt <4 x i32> %b, %c818 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c819 %cmp_ab = icmp ugt <4 x i32> %a, %b820 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b821 %cmp_ca = icmp ugt <4 x i32> %c, %a822 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab823 ret <4 x i32> %r824}825 826define <4 x i32> @umax_bc_ba(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {827; CHECK-LABEL: umax_bc_ba:828; CHECK: // %bb.0:829; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s830; CHECK-NEXT: umax v0.4s, v1.4s, v0.4s831; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s832; CHECK-NEXT: ret833 %cmp_bc = icmp ugt <4 x i32> %b, %c834 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c835 %cmp_ba = icmp ugt <4 x i32> %b, %a836 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a837 %cmp_ca = icmp ugt <4 x i32> %c, %a838 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba839 ret <4 x i32> %r840}841 842define <4 x i32> @umax_ab_bc_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {843; CHECK-LABEL: umax_ab_bc_swap_pred:844; CHECK: // %bb.0:845; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s846; CHECK-NEXT: umax v1.4s, v1.4s, v2.4s847; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s848; CHECK-NEXT: ret849 %cmp_ab = icmp ugt <4 x i32> %a, %b850 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b851 %cmp_bc = icmp ugt <4 x i32> %b, %c852 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c853 %cmp_ac = icmp ult <4 x i32> %c, %a854 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc855 ret <4 x i32> %r856}857 858define <4 x i32> @umax_ab_cb_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {859; CHECK-LABEL: umax_ab_cb_swap_pred:860; CHECK: // %bb.0:861; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s862; CHECK-NEXT: umax v1.4s, v2.4s, v1.4s863; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s864; CHECK-NEXT: ret865 %cmp_ab = icmp ugt <4 x i32> %a, %b866 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b867 %cmp_cb = icmp ugt <4 x i32> %c, %b868 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b869 %cmp_ac = icmp ult <4 x i32> %c, %a870 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb871 ret <4 x i32> %r872}873 874define <4 x i32> @umax_bc_ab_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {875; CHECK-LABEL: umax_bc_ab_swap_pred:876; CHECK: // %bb.0:877; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s878; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s879; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s880; CHECK-NEXT: ret881 %cmp_bc = icmp ugt <4 x i32> %b, %c882 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c883 %cmp_ab = icmp ugt <4 x i32> %a, %b884 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b885 %cmp_ca = icmp ult <4 x i32> %a, %c886 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab887 ret <4 x i32> %r888}889 890define <4 x i32> @umax_bc_ba_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {891; CHECK-LABEL: umax_bc_ba_swap_pred:892; CHECK: // %bb.0:893; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s894; CHECK-NEXT: umax v0.4s, v1.4s, v0.4s895; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s896; CHECK-NEXT: ret897 %cmp_bc = icmp ugt <4 x i32> %b, %c898 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c899 %cmp_ba = icmp ugt <4 x i32> %b, %a900 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a901 %cmp_ca = icmp ult <4 x i32> %a, %c902 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba903 ret <4 x i32> %r904}905 906define <4 x i32> @umax_ab_bc_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {907; CHECK-LABEL: umax_ab_bc_eq_pred:908; CHECK: // %bb.0:909; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s910; CHECK-NEXT: umax v1.4s, v1.4s, v2.4s911; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s912; CHECK-NEXT: ret913 %cmp_ab = icmp ugt <4 x i32> %a, %b914 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b915 %cmp_bc = icmp ugt <4 x i32> %b, %c916 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c917 %cmp_ac = icmp uge <4 x i32> %a, %c918 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc919 ret <4 x i32> %r920}921 922define <4 x i32> @umax_ab_cb_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {923; CHECK-LABEL: umax_ab_cb_eq_pred:924; CHECK: // %bb.0:925; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s926; CHECK-NEXT: umax v1.4s, v2.4s, v1.4s927; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s928; CHECK-NEXT: ret929 %cmp_ab = icmp ugt <4 x i32> %a, %b930 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b931 %cmp_cb = icmp ugt <4 x i32> %c, %b932 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b933 %cmp_ac = icmp uge <4 x i32> %a, %c934 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb935 ret <4 x i32> %r936}937 938define <4 x i32> @umax_bc_ab_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {939; CHECK-LABEL: umax_bc_ab_eq_pred:940; CHECK: // %bb.0:941; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s942; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s943; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s944; CHECK-NEXT: ret945 %cmp_bc = icmp ugt <4 x i32> %b, %c946 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c947 %cmp_ab = icmp ugt <4 x i32> %a, %b948 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b949 %cmp_ca = icmp uge <4 x i32> %c, %a950 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab951 ret <4 x i32> %r952}953 954define <4 x i32> @umax_bc_ba_eq_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {955; CHECK-LABEL: umax_bc_ba_eq_pred:956; CHECK: // %bb.0:957; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s958; CHECK-NEXT: umax v0.4s, v1.4s, v0.4s959; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s960; CHECK-NEXT: ret961 %cmp_bc = icmp ugt <4 x i32> %b, %c962 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c963 %cmp_ba = icmp ugt <4 x i32> %b, %a964 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a965 %cmp_ca = icmp uge <4 x i32> %c, %a966 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba967 ret <4 x i32> %r968}969 970define <4 x i32> @umax_ab_bc_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {971; CHECK-LABEL: umax_ab_bc_eq_swap_pred:972; CHECK: // %bb.0:973; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s974; CHECK-NEXT: umax v1.4s, v1.4s, v2.4s975; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s976; CHECK-NEXT: ret977 %cmp_ab = icmp ugt <4 x i32> %a, %b978 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b979 %cmp_bc = icmp ugt <4 x i32> %b, %c980 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c981 %cmp_ac = icmp ule <4 x i32> %c, %a982 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc983 ret <4 x i32> %r984}985 986define <4 x i32> @umax_ab_cb_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {987; CHECK-LABEL: umax_ab_cb_eq_swap_pred:988; CHECK: // %bb.0:989; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s990; CHECK-NEXT: umax v1.4s, v2.4s, v1.4s991; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s992; CHECK-NEXT: ret993 %cmp_ab = icmp ugt <4 x i32> %a, %b994 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b995 %cmp_cb = icmp ugt <4 x i32> %c, %b996 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b997 %cmp_ac = icmp ule <4 x i32> %c, %a998 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb999 ret <4 x i32> %r1000}1001 1002define <4 x i32> @umax_bc_ab_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {1003; CHECK-LABEL: umax_bc_ab_eq_swap_pred:1004; CHECK: // %bb.0:1005; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s1006; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s1007; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s1008; CHECK-NEXT: ret1009 %cmp_bc = icmp ugt <4 x i32> %b, %c1010 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1011 %cmp_ab = icmp ugt <4 x i32> %a, %b1012 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1013 %cmp_ca = icmp ule <4 x i32> %a, %c1014 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab1015 ret <4 x i32> %r1016}1017 1018define <4 x i32> @umax_bc_ba_eq_swap_pred(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {1019; CHECK-LABEL: umax_bc_ba_eq_swap_pred:1020; CHECK: // %bb.0:1021; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s1022; CHECK-NEXT: umax v0.4s, v1.4s, v0.4s1023; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s1024; CHECK-NEXT: ret1025 %cmp_bc = icmp ugt <4 x i32> %b, %c1026 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1027 %cmp_ba = icmp ugt <4 x i32> %b, %a1028 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a1029 %cmp_ca = icmp ule <4 x i32> %a, %c1030 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba1031 ret <4 x i32> %r1032}1033 1034define <4 x i32> @notted_smin_ab_bc(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1035; CHECK-LABEL: notted_smin_ab_bc:1036; CHECK: // %bb.0:1037; CHECK-NEXT: mvn v0.16b, v0.16b1038; CHECK-NEXT: mvn v1.16b, v1.16b1039; CHECK-NEXT: mvn v2.16b, v2.16b1040; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1041; CHECK-NEXT: smin v1.4s, v1.4s, v2.4s1042; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1043; CHECK-NEXT: ret1044 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1045 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1046 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1047 %cmp_ab = icmp slt <4 x i32> %a, %b1048 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1049 %cmp_bc = icmp slt <4 x i32> %b, %c1050 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1051 %cmp_ac = icmp slt <4 x i32> %z, %x1052 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc1053 ret <4 x i32> %r1054}1055 1056define <4 x i32> @notted_smin_ab_cb(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1057; CHECK-LABEL: notted_smin_ab_cb:1058; CHECK: // %bb.0:1059; CHECK-NEXT: mvn v0.16b, v0.16b1060; CHECK-NEXT: mvn v1.16b, v1.16b1061; CHECK-NEXT: mvn v2.16b, v2.16b1062; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1063; CHECK-NEXT: smin v1.4s, v2.4s, v1.4s1064; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1065; CHECK-NEXT: ret1066 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1067 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1068 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1069 %cmp_ab = icmp slt <4 x i32> %a, %b1070 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1071 %cmp_cb = icmp slt <4 x i32> %c, %b1072 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b1073 %cmp_ac = icmp slt <4 x i32> %z, %x1074 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb1075 ret <4 x i32> %r1076}1077 1078define <4 x i32> @notted_smin_bc_ab(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1079; CHECK-LABEL: notted_smin_bc_ab:1080; CHECK: // %bb.0:1081; CHECK-NEXT: mvn v0.16b, v0.16b1082; CHECK-NEXT: mvn v1.16b, v1.16b1083; CHECK-NEXT: mvn v2.16b, v2.16b1084; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s1085; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1086; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s1087; CHECK-NEXT: ret1088 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1089 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1090 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1091 %cmp_bc = icmp slt <4 x i32> %b, %c1092 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1093 %cmp_ab = icmp slt <4 x i32> %a, %b1094 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1095 %cmp_ca = icmp slt <4 x i32> %x, %z1096 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab1097 ret <4 x i32> %r1098}1099 1100define <4 x i32> @notted_smin_bc_ba(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1101; CHECK-LABEL: notted_smin_bc_ba:1102; CHECK: // %bb.0:1103; CHECK-NEXT: mvn v0.16b, v0.16b1104; CHECK-NEXT: mvn v1.16b, v1.16b1105; CHECK-NEXT: mvn v2.16b, v2.16b1106; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s1107; CHECK-NEXT: smin v0.4s, v1.4s, v0.4s1108; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s1109; CHECK-NEXT: ret1110 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1111 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1112 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1113 %cmp_bc = icmp slt <4 x i32> %b, %c1114 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1115 %cmp_ba = icmp slt <4 x i32> %b, %a1116 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a1117 %cmp_ca = icmp slt <4 x i32> %x, %z1118 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba1119 ret <4 x i32> %r1120}1121 1122define <4 x i32> @notted_smin_ab_bc_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1123; CHECK-LABEL: notted_smin_ab_bc_swap_pred:1124; CHECK: // %bb.0:1125; CHECK-NEXT: mvn v0.16b, v0.16b1126; CHECK-NEXT: mvn v1.16b, v1.16b1127; CHECK-NEXT: mvn v2.16b, v2.16b1128; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1129; CHECK-NEXT: smin v1.4s, v1.4s, v2.4s1130; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1131; CHECK-NEXT: ret1132 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1133 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1134 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1135 %cmp_ab = icmp slt <4 x i32> %a, %b1136 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1137 %cmp_bc = icmp slt <4 x i32> %b, %c1138 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1139 %cmp_ac = icmp sgt <4 x i32> %x, %z1140 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc1141 ret <4 x i32> %r1142}1143 1144define <4 x i32> @notted_smin_ab_cb_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1145; CHECK-LABEL: notted_smin_ab_cb_swap_pred:1146; CHECK: // %bb.0:1147; CHECK-NEXT: mvn v0.16b, v0.16b1148; CHECK-NEXT: mvn v1.16b, v1.16b1149; CHECK-NEXT: mvn v2.16b, v2.16b1150; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1151; CHECK-NEXT: smin v1.4s, v2.4s, v1.4s1152; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1153; CHECK-NEXT: ret1154 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1155 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1156 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1157 %cmp_ab = icmp slt <4 x i32> %a, %b1158 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1159 %cmp_cb = icmp slt <4 x i32> %c, %b1160 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b1161 %cmp_ac = icmp sgt <4 x i32> %x, %z1162 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb1163 ret <4 x i32> %r1164}1165 1166define <4 x i32> @notted_smin_bc_ab_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1167; CHECK-LABEL: notted_smin_bc_ab_swap_pred:1168; CHECK: // %bb.0:1169; CHECK-NEXT: mvn v0.16b, v0.16b1170; CHECK-NEXT: mvn v1.16b, v1.16b1171; CHECK-NEXT: mvn v2.16b, v2.16b1172; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s1173; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1174; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s1175; CHECK-NEXT: ret1176 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1177 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1178 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1179 %cmp_bc = icmp slt <4 x i32> %b, %c1180 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1181 %cmp_ab = icmp slt <4 x i32> %a, %b1182 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1183 %cmp_ca = icmp sgt <4 x i32> %z, %x1184 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab1185 ret <4 x i32> %r1186}1187 1188define <4 x i32> @notted_smin_bc_ba_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1189; CHECK-LABEL: notted_smin_bc_ba_swap_pred:1190; CHECK: // %bb.0:1191; CHECK-NEXT: mvn v0.16b, v0.16b1192; CHECK-NEXT: mvn v1.16b, v1.16b1193; CHECK-NEXT: mvn v2.16b, v2.16b1194; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s1195; CHECK-NEXT: smin v0.4s, v1.4s, v0.4s1196; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s1197; CHECK-NEXT: ret1198 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1199 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1200 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1201 %cmp_bc = icmp slt <4 x i32> %b, %c1202 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1203 %cmp_ba = icmp slt <4 x i32> %b, %a1204 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a1205 %cmp_ca = icmp sgt <4 x i32> %z, %x1206 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba1207 ret <4 x i32> %r1208}1209 1210define <4 x i32> @notted_smin_ab_bc_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1211; CHECK-LABEL: notted_smin_ab_bc_eq_pred:1212; CHECK: // %bb.0:1213; CHECK-NEXT: mvn v0.16b, v0.16b1214; CHECK-NEXT: mvn v1.16b, v1.16b1215; CHECK-NEXT: mvn v2.16b, v2.16b1216; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1217; CHECK-NEXT: smin v1.4s, v1.4s, v2.4s1218; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1219; CHECK-NEXT: ret1220 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1221 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1222 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1223 %cmp_ab = icmp slt <4 x i32> %a, %b1224 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1225 %cmp_bc = icmp slt <4 x i32> %b, %c1226 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1227 %cmp_ac = icmp sle <4 x i32> %z, %x1228 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc1229 ret <4 x i32> %r1230}1231 1232define <4 x i32> @notted_smin_ab_cb_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1233; CHECK-LABEL: notted_smin_ab_cb_eq_pred:1234; CHECK: // %bb.0:1235; CHECK-NEXT: mvn v0.16b, v0.16b1236; CHECK-NEXT: mvn v1.16b, v1.16b1237; CHECK-NEXT: mvn v2.16b, v2.16b1238; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1239; CHECK-NEXT: smin v1.4s, v2.4s, v1.4s1240; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1241; CHECK-NEXT: ret1242 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1243 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1244 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1245 %cmp_ab = icmp slt <4 x i32> %a, %b1246 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1247 %cmp_cb = icmp slt <4 x i32> %c, %b1248 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b1249 %cmp_ac = icmp sle <4 x i32> %z, %x1250 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb1251 ret <4 x i32> %r1252}1253 1254define <4 x i32> @notted_smin_bc_ab_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1255; CHECK-LABEL: notted_smin_bc_ab_eq_pred:1256; CHECK: // %bb.0:1257; CHECK-NEXT: mvn v0.16b, v0.16b1258; CHECK-NEXT: mvn v1.16b, v1.16b1259; CHECK-NEXT: mvn v2.16b, v2.16b1260; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s1261; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1262; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s1263; CHECK-NEXT: ret1264 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1265 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1266 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1267 %cmp_bc = icmp slt <4 x i32> %b, %c1268 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1269 %cmp_ab = icmp slt <4 x i32> %a, %b1270 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1271 %cmp_ca = icmp sle <4 x i32> %x, %z1272 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab1273 ret <4 x i32> %r1274}1275 1276define <4 x i32> @notted_smin_bc_ba_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1277; CHECK-LABEL: notted_smin_bc_ba_eq_pred:1278; CHECK: // %bb.0:1279; CHECK-NEXT: mvn v0.16b, v0.16b1280; CHECK-NEXT: mvn v1.16b, v1.16b1281; CHECK-NEXT: mvn v2.16b, v2.16b1282; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s1283; CHECK-NEXT: smin v0.4s, v1.4s, v0.4s1284; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s1285; CHECK-NEXT: ret1286 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1287 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1288 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1289 %cmp_bc = icmp slt <4 x i32> %b, %c1290 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1291 %cmp_ba = icmp slt <4 x i32> %b, %a1292 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a1293 %cmp_ca = icmp sle <4 x i32> %x, %z1294 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba1295 ret <4 x i32> %r1296}1297 1298define <4 x i32> @notted_smin_ab_bc_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1299; CHECK-LABEL: notted_smin_ab_bc_eq_swap_pred:1300; CHECK: // %bb.0:1301; CHECK-NEXT: mvn v0.16b, v0.16b1302; CHECK-NEXT: mvn v1.16b, v1.16b1303; CHECK-NEXT: mvn v2.16b, v2.16b1304; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1305; CHECK-NEXT: smin v1.4s, v1.4s, v2.4s1306; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1307; CHECK-NEXT: ret1308 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1309 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1310 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1311 %cmp_ab = icmp slt <4 x i32> %a, %b1312 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1313 %cmp_bc = icmp slt <4 x i32> %b, %c1314 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1315 %cmp_ac = icmp sge <4 x i32> %x, %z1316 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc1317 ret <4 x i32> %r1318}1319 1320define <4 x i32> @notted_smin_ab_cb_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1321; CHECK-LABEL: notted_smin_ab_cb_eq_swap_pred:1322; CHECK: // %bb.0:1323; CHECK-NEXT: mvn v0.16b, v0.16b1324; CHECK-NEXT: mvn v1.16b, v1.16b1325; CHECK-NEXT: mvn v2.16b, v2.16b1326; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1327; CHECK-NEXT: smin v1.4s, v2.4s, v1.4s1328; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1329; CHECK-NEXT: ret1330 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1331 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1332 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1333 %cmp_ab = icmp slt <4 x i32> %a, %b1334 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1335 %cmp_cb = icmp slt <4 x i32> %c, %b1336 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b1337 %cmp_ac = icmp sge <4 x i32> %x, %z1338 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb1339 ret <4 x i32> %r1340}1341 1342define <4 x i32> @notted_smin_bc_ab_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1343; CHECK-LABEL: notted_smin_bc_ab_eq_swap_pred:1344; CHECK: // %bb.0:1345; CHECK-NEXT: mvn v0.16b, v0.16b1346; CHECK-NEXT: mvn v1.16b, v1.16b1347; CHECK-NEXT: mvn v2.16b, v2.16b1348; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s1349; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s1350; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s1351; CHECK-NEXT: ret1352 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1353 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1354 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1355 %cmp_bc = icmp slt <4 x i32> %b, %c1356 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1357 %cmp_ab = icmp slt <4 x i32> %a, %b1358 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1359 %cmp_ca = icmp sge <4 x i32> %z, %x1360 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab1361 ret <4 x i32> %r1362}1363 1364define <4 x i32> @notted_smin_bc_ba_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1365; CHECK-LABEL: notted_smin_bc_ba_eq_swap_pred:1366; CHECK: // %bb.0:1367; CHECK-NEXT: mvn v0.16b, v0.16b1368; CHECK-NEXT: mvn v1.16b, v1.16b1369; CHECK-NEXT: mvn v2.16b, v2.16b1370; CHECK-NEXT: smin v2.4s, v1.4s, v2.4s1371; CHECK-NEXT: smin v0.4s, v1.4s, v0.4s1372; CHECK-NEXT: smin v0.4s, v2.4s, v0.4s1373; CHECK-NEXT: ret1374 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1375 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1376 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1377 %cmp_bc = icmp slt <4 x i32> %b, %c1378 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1379 %cmp_ba = icmp slt <4 x i32> %b, %a1380 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a1381 %cmp_ca = icmp sge <4 x i32> %z, %x1382 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba1383 ret <4 x i32> %r1384}1385 1386define <4 x i32> @notted_smax_ab_bc(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1387; CHECK-LABEL: notted_smax_ab_bc:1388; CHECK: // %bb.0:1389; CHECK-NEXT: mvn v0.16b, v0.16b1390; CHECK-NEXT: mvn v1.16b, v1.16b1391; CHECK-NEXT: mvn v2.16b, v2.16b1392; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1393; CHECK-NEXT: smax v1.4s, v1.4s, v2.4s1394; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1395; CHECK-NEXT: ret1396 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1397 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1398 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1399 %cmp_ab = icmp sgt <4 x i32> %a, %b1400 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1401 %cmp_bc = icmp sgt <4 x i32> %b, %c1402 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1403 %cmp_ac = icmp sgt <4 x i32> %z, %x1404 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc1405 ret <4 x i32> %r1406}1407 1408define <4 x i32> @notted_smax_ab_cb(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1409; CHECK-LABEL: notted_smax_ab_cb:1410; CHECK: // %bb.0:1411; CHECK-NEXT: mvn v0.16b, v0.16b1412; CHECK-NEXT: mvn v1.16b, v1.16b1413; CHECK-NEXT: mvn v2.16b, v2.16b1414; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1415; CHECK-NEXT: smax v1.4s, v2.4s, v1.4s1416; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1417; CHECK-NEXT: ret1418 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1419 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1420 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1421 %cmp_ab = icmp sgt <4 x i32> %a, %b1422 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1423 %cmp_cb = icmp sgt <4 x i32> %c, %b1424 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b1425 %cmp_ac = icmp sgt <4 x i32> %z, %x1426 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb1427 ret <4 x i32> %r1428}1429 1430define <4 x i32> @notted_smax_bc_ab(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1431; CHECK-LABEL: notted_smax_bc_ab:1432; CHECK: // %bb.0:1433; CHECK-NEXT: mvn v0.16b, v0.16b1434; CHECK-NEXT: mvn v1.16b, v1.16b1435; CHECK-NEXT: mvn v2.16b, v2.16b1436; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s1437; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1438; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s1439; CHECK-NEXT: ret1440 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1441 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1442 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1443 %cmp_bc = icmp sgt <4 x i32> %b, %c1444 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1445 %cmp_ab = icmp sgt <4 x i32> %a, %b1446 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1447 %cmp_ca = icmp sgt <4 x i32> %x, %z1448 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab1449 ret <4 x i32> %r1450}1451 1452define <4 x i32> @notted_smax_bc_ba(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1453; CHECK-LABEL: notted_smax_bc_ba:1454; CHECK: // %bb.0:1455; CHECK-NEXT: mvn v0.16b, v0.16b1456; CHECK-NEXT: mvn v1.16b, v1.16b1457; CHECK-NEXT: mvn v2.16b, v2.16b1458; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s1459; CHECK-NEXT: smax v0.4s, v1.4s, v0.4s1460; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s1461; CHECK-NEXT: ret1462 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1463 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1464 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1465 %cmp_bc = icmp sgt <4 x i32> %b, %c1466 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1467 %cmp_ba = icmp sgt <4 x i32> %b, %a1468 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a1469 %cmp_ca = icmp sgt <4 x i32> %x, %z1470 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba1471 ret <4 x i32> %r1472}1473 1474define <4 x i32> @notted_smax_ab_bc_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1475; CHECK-LABEL: notted_smax_ab_bc_swap_pred:1476; CHECK: // %bb.0:1477; CHECK-NEXT: mvn v0.16b, v0.16b1478; CHECK-NEXT: mvn v1.16b, v1.16b1479; CHECK-NEXT: mvn v2.16b, v2.16b1480; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1481; CHECK-NEXT: smax v1.4s, v1.4s, v2.4s1482; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1483; CHECK-NEXT: ret1484 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1485 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1486 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1487 %cmp_ab = icmp sgt <4 x i32> %a, %b1488 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1489 %cmp_bc = icmp sgt <4 x i32> %b, %c1490 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1491 %cmp_ac = icmp slt <4 x i32> %x, %z1492 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc1493 ret <4 x i32> %r1494}1495 1496define <4 x i32> @notted_smax_ab_cb_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1497; CHECK-LABEL: notted_smax_ab_cb_swap_pred:1498; CHECK: // %bb.0:1499; CHECK-NEXT: mvn v0.16b, v0.16b1500; CHECK-NEXT: mvn v1.16b, v1.16b1501; CHECK-NEXT: mvn v2.16b, v2.16b1502; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1503; CHECK-NEXT: smax v1.4s, v2.4s, v1.4s1504; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1505; CHECK-NEXT: ret1506 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1507 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1508 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1509 %cmp_ab = icmp sgt <4 x i32> %a, %b1510 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1511 %cmp_cb = icmp sgt <4 x i32> %c, %b1512 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b1513 %cmp_ac = icmp slt <4 x i32> %x, %z1514 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb1515 ret <4 x i32> %r1516}1517 1518define <4 x i32> @notted_smax_bc_ab_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1519; CHECK-LABEL: notted_smax_bc_ab_swap_pred:1520; CHECK: // %bb.0:1521; CHECK-NEXT: mvn v0.16b, v0.16b1522; CHECK-NEXT: mvn v1.16b, v1.16b1523; CHECK-NEXT: mvn v2.16b, v2.16b1524; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s1525; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1526; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s1527; CHECK-NEXT: ret1528 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1529 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1530 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1531 %cmp_bc = icmp sgt <4 x i32> %b, %c1532 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1533 %cmp_ab = icmp sgt <4 x i32> %a, %b1534 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1535 %cmp_ca = icmp slt <4 x i32> %z, %x1536 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab1537 ret <4 x i32> %r1538}1539 1540define <4 x i32> @notted_smax_bc_ba_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1541; CHECK-LABEL: notted_smax_bc_ba_swap_pred:1542; CHECK: // %bb.0:1543; CHECK-NEXT: mvn v0.16b, v0.16b1544; CHECK-NEXT: mvn v1.16b, v1.16b1545; CHECK-NEXT: mvn v2.16b, v2.16b1546; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s1547; CHECK-NEXT: smax v0.4s, v1.4s, v0.4s1548; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s1549; CHECK-NEXT: ret1550 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1551 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1552 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1553 %cmp_bc = icmp sgt <4 x i32> %b, %c1554 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1555 %cmp_ba = icmp sgt <4 x i32> %b, %a1556 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a1557 %cmp_ca = icmp slt <4 x i32> %z, %x1558 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba1559 ret <4 x i32> %r1560}1561 1562define <4 x i32> @notted_smax_ab_bc_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1563; CHECK-LABEL: notted_smax_ab_bc_eq_pred:1564; CHECK: // %bb.0:1565; CHECK-NEXT: mvn v0.16b, v0.16b1566; CHECK-NEXT: mvn v1.16b, v1.16b1567; CHECK-NEXT: mvn v2.16b, v2.16b1568; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1569; CHECK-NEXT: smax v1.4s, v1.4s, v2.4s1570; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1571; CHECK-NEXT: ret1572 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1573 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1574 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1575 %cmp_ab = icmp sgt <4 x i32> %a, %b1576 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1577 %cmp_bc = icmp sgt <4 x i32> %b, %c1578 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1579 %cmp_ac = icmp sge <4 x i32> %z, %x1580 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc1581 ret <4 x i32> %r1582}1583 1584define <4 x i32> @notted_smax_ab_cb_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1585; CHECK-LABEL: notted_smax_ab_cb_eq_pred:1586; CHECK: // %bb.0:1587; CHECK-NEXT: mvn v0.16b, v0.16b1588; CHECK-NEXT: mvn v1.16b, v1.16b1589; CHECK-NEXT: mvn v2.16b, v2.16b1590; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1591; CHECK-NEXT: smax v1.4s, v2.4s, v1.4s1592; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1593; CHECK-NEXT: ret1594 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1595 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1596 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1597 %cmp_ab = icmp sgt <4 x i32> %a, %b1598 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1599 %cmp_cb = icmp sgt <4 x i32> %c, %b1600 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b1601 %cmp_ac = icmp sge <4 x i32> %z, %x1602 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb1603 ret <4 x i32> %r1604}1605 1606define <4 x i32> @notted_smax_bc_ab_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1607; CHECK-LABEL: notted_smax_bc_ab_eq_pred:1608; CHECK: // %bb.0:1609; CHECK-NEXT: mvn v0.16b, v0.16b1610; CHECK-NEXT: mvn v1.16b, v1.16b1611; CHECK-NEXT: mvn v2.16b, v2.16b1612; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s1613; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1614; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s1615; CHECK-NEXT: ret1616 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1617 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1618 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1619 %cmp_bc = icmp sgt <4 x i32> %b, %c1620 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1621 %cmp_ab = icmp sgt <4 x i32> %a, %b1622 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1623 %cmp_ca = icmp sge <4 x i32> %x, %z1624 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab1625 ret <4 x i32> %r1626}1627 1628define <4 x i32> @notted_smax_bc_ba_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1629; CHECK-LABEL: notted_smax_bc_ba_eq_pred:1630; CHECK: // %bb.0:1631; CHECK-NEXT: mvn v0.16b, v0.16b1632; CHECK-NEXT: mvn v1.16b, v1.16b1633; CHECK-NEXT: mvn v2.16b, v2.16b1634; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s1635; CHECK-NEXT: smax v0.4s, v1.4s, v0.4s1636; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s1637; CHECK-NEXT: ret1638 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1639 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1640 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1641 %cmp_bc = icmp sgt <4 x i32> %b, %c1642 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1643 %cmp_ba = icmp sgt <4 x i32> %b, %a1644 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a1645 %cmp_ca = icmp sge <4 x i32> %x, %z1646 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba1647 ret <4 x i32> %r1648}1649 1650define <4 x i32> @notted_smax_ab_bc_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1651; CHECK-LABEL: notted_smax_ab_bc_eq_swap_pred:1652; CHECK: // %bb.0:1653; CHECK-NEXT: mvn v0.16b, v0.16b1654; CHECK-NEXT: mvn v1.16b, v1.16b1655; CHECK-NEXT: mvn v2.16b, v2.16b1656; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1657; CHECK-NEXT: smax v1.4s, v1.4s, v2.4s1658; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1659; CHECK-NEXT: ret1660 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1661 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1662 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1663 %cmp_ab = icmp sgt <4 x i32> %a, %b1664 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1665 %cmp_bc = icmp sgt <4 x i32> %b, %c1666 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1667 %cmp_ac = icmp sle <4 x i32> %x, %z1668 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc1669 ret <4 x i32> %r1670}1671 1672define <4 x i32> @notted_smax_ab_cb_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1673; CHECK-LABEL: notted_smax_ab_cb_eq_swap_pred:1674; CHECK: // %bb.0:1675; CHECK-NEXT: mvn v0.16b, v0.16b1676; CHECK-NEXT: mvn v1.16b, v1.16b1677; CHECK-NEXT: mvn v2.16b, v2.16b1678; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1679; CHECK-NEXT: smax v1.4s, v2.4s, v1.4s1680; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1681; CHECK-NEXT: ret1682 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1683 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1684 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1685 %cmp_ab = icmp sgt <4 x i32> %a, %b1686 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1687 %cmp_cb = icmp sgt <4 x i32> %c, %b1688 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b1689 %cmp_ac = icmp sle <4 x i32> %x, %z1690 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb1691 ret <4 x i32> %r1692}1693 1694define <4 x i32> @notted_smax_bc_ab_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1695; CHECK-LABEL: notted_smax_bc_ab_eq_swap_pred:1696; CHECK: // %bb.0:1697; CHECK-NEXT: mvn v0.16b, v0.16b1698; CHECK-NEXT: mvn v1.16b, v1.16b1699; CHECK-NEXT: mvn v2.16b, v2.16b1700; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s1701; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s1702; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s1703; CHECK-NEXT: ret1704 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1705 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1706 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1707 %cmp_bc = icmp sgt <4 x i32> %b, %c1708 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1709 %cmp_ab = icmp sgt <4 x i32> %a, %b1710 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1711 %cmp_ca = icmp sle <4 x i32> %z, %x1712 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab1713 ret <4 x i32> %r1714}1715 1716define <4 x i32> @notted_smax_bc_ba_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1717; CHECK-LABEL: notted_smax_bc_ba_eq_swap_pred:1718; CHECK: // %bb.0:1719; CHECK-NEXT: mvn v0.16b, v0.16b1720; CHECK-NEXT: mvn v1.16b, v1.16b1721; CHECK-NEXT: mvn v2.16b, v2.16b1722; CHECK-NEXT: smax v2.4s, v1.4s, v2.4s1723; CHECK-NEXT: smax v0.4s, v1.4s, v0.4s1724; CHECK-NEXT: smax v0.4s, v2.4s, v0.4s1725; CHECK-NEXT: ret1726 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1727 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1728 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1729 %cmp_bc = icmp sgt <4 x i32> %b, %c1730 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1731 %cmp_ba = icmp sgt <4 x i32> %b, %a1732 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a1733 %cmp_ca = icmp sle <4 x i32> %z, %x1734 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba1735 ret <4 x i32> %r1736}1737 1738define <4 x i32> @notted_umin_ab_bc(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1739; CHECK-LABEL: notted_umin_ab_bc:1740; CHECK: // %bb.0:1741; CHECK-NEXT: mvn v0.16b, v0.16b1742; CHECK-NEXT: mvn v1.16b, v1.16b1743; CHECK-NEXT: mvn v2.16b, v2.16b1744; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1745; CHECK-NEXT: umin v1.4s, v1.4s, v2.4s1746; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1747; CHECK-NEXT: ret1748 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1749 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1750 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1751 %cmp_ab = icmp ult <4 x i32> %a, %b1752 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1753 %cmp_bc = icmp ult <4 x i32> %b, %c1754 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1755 %cmp_ac = icmp ult <4 x i32> %z, %x1756 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc1757 ret <4 x i32> %r1758}1759 1760define <4 x i32> @notted_umin_ab_cb(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1761; CHECK-LABEL: notted_umin_ab_cb:1762; CHECK: // %bb.0:1763; CHECK-NEXT: mvn v0.16b, v0.16b1764; CHECK-NEXT: mvn v1.16b, v1.16b1765; CHECK-NEXT: mvn v2.16b, v2.16b1766; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1767; CHECK-NEXT: umin v1.4s, v2.4s, v1.4s1768; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1769; CHECK-NEXT: ret1770 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1771 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1772 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1773 %cmp_ab = icmp ult <4 x i32> %a, %b1774 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1775 %cmp_cb = icmp ult <4 x i32> %c, %b1776 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b1777 %cmp_ac = icmp ult <4 x i32> %z, %x1778 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb1779 ret <4 x i32> %r1780}1781 1782define <4 x i32> @notted_umin_bc_ab(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1783; CHECK-LABEL: notted_umin_bc_ab:1784; CHECK: // %bb.0:1785; CHECK-NEXT: mvn v0.16b, v0.16b1786; CHECK-NEXT: mvn v1.16b, v1.16b1787; CHECK-NEXT: mvn v2.16b, v2.16b1788; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s1789; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1790; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s1791; CHECK-NEXT: ret1792 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1793 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1794 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1795 %cmp_bc = icmp ult <4 x i32> %b, %c1796 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1797 %cmp_ab = icmp ult <4 x i32> %a, %b1798 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1799 %cmp_ca = icmp ult <4 x i32> %x, %z1800 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab1801 ret <4 x i32> %r1802}1803 1804define <4 x i32> @notted_umin_bc_ba(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1805; CHECK-LABEL: notted_umin_bc_ba:1806; CHECK: // %bb.0:1807; CHECK-NEXT: mvn v0.16b, v0.16b1808; CHECK-NEXT: mvn v1.16b, v1.16b1809; CHECK-NEXT: mvn v2.16b, v2.16b1810; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s1811; CHECK-NEXT: umin v0.4s, v1.4s, v0.4s1812; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s1813; CHECK-NEXT: ret1814 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1815 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1816 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1817 %cmp_bc = icmp ult <4 x i32> %b, %c1818 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1819 %cmp_ba = icmp ult <4 x i32> %b, %a1820 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a1821 %cmp_ca = icmp ult <4 x i32> %x, %z1822 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba1823 ret <4 x i32> %r1824}1825 1826define <4 x i32> @notted_umin_ab_bc_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1827; CHECK-LABEL: notted_umin_ab_bc_swap_pred:1828; CHECK: // %bb.0:1829; CHECK-NEXT: mvn v0.16b, v0.16b1830; CHECK-NEXT: mvn v1.16b, v1.16b1831; CHECK-NEXT: mvn v2.16b, v2.16b1832; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1833; CHECK-NEXT: umin v1.4s, v1.4s, v2.4s1834; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1835; CHECK-NEXT: ret1836 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1837 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1838 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1839 %cmp_ab = icmp ult <4 x i32> %a, %b1840 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1841 %cmp_bc = icmp ult <4 x i32> %b, %c1842 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1843 %cmp_ac = icmp ugt <4 x i32> %x, %z1844 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc1845 ret <4 x i32> %r1846}1847 1848define <4 x i32> @notted_umin_ab_cb_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1849; CHECK-LABEL: notted_umin_ab_cb_swap_pred:1850; CHECK: // %bb.0:1851; CHECK-NEXT: mvn v0.16b, v0.16b1852; CHECK-NEXT: mvn v1.16b, v1.16b1853; CHECK-NEXT: mvn v2.16b, v2.16b1854; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1855; CHECK-NEXT: umin v1.4s, v2.4s, v1.4s1856; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1857; CHECK-NEXT: ret1858 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1859 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1860 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1861 %cmp_ab = icmp ult <4 x i32> %a, %b1862 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1863 %cmp_cb = icmp ult <4 x i32> %c, %b1864 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b1865 %cmp_ac = icmp ugt <4 x i32> %x, %z1866 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb1867 ret <4 x i32> %r1868}1869 1870define <4 x i32> @notted_umin_bc_ab_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1871; CHECK-LABEL: notted_umin_bc_ab_swap_pred:1872; CHECK: // %bb.0:1873; CHECK-NEXT: mvn v0.16b, v0.16b1874; CHECK-NEXT: mvn v1.16b, v1.16b1875; CHECK-NEXT: mvn v2.16b, v2.16b1876; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s1877; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1878; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s1879; CHECK-NEXT: ret1880 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1881 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1882 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1883 %cmp_bc = icmp ult <4 x i32> %b, %c1884 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1885 %cmp_ab = icmp ult <4 x i32> %a, %b1886 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1887 %cmp_ca = icmp ugt <4 x i32> %z, %x1888 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab1889 ret <4 x i32> %r1890}1891 1892define <4 x i32> @notted_umin_bc_ba_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1893; CHECK-LABEL: notted_umin_bc_ba_swap_pred:1894; CHECK: // %bb.0:1895; CHECK-NEXT: mvn v0.16b, v0.16b1896; CHECK-NEXT: mvn v1.16b, v1.16b1897; CHECK-NEXT: mvn v2.16b, v2.16b1898; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s1899; CHECK-NEXT: umin v0.4s, v1.4s, v0.4s1900; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s1901; CHECK-NEXT: ret1902 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1903 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1904 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1905 %cmp_bc = icmp ult <4 x i32> %b, %c1906 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1907 %cmp_ba = icmp ult <4 x i32> %b, %a1908 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a1909 %cmp_ca = icmp ugt <4 x i32> %z, %x1910 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba1911 ret <4 x i32> %r1912}1913 1914define <4 x i32> @notted_umin_ab_bc_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1915; CHECK-LABEL: notted_umin_ab_bc_eq_pred:1916; CHECK: // %bb.0:1917; CHECK-NEXT: mvn v0.16b, v0.16b1918; CHECK-NEXT: mvn v1.16b, v1.16b1919; CHECK-NEXT: mvn v2.16b, v2.16b1920; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1921; CHECK-NEXT: umin v1.4s, v1.4s, v2.4s1922; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1923; CHECK-NEXT: ret1924 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1925 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1926 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1927 %cmp_ab = icmp ult <4 x i32> %a, %b1928 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1929 %cmp_bc = icmp ult <4 x i32> %b, %c1930 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1931 %cmp_ac = icmp ule <4 x i32> %z, %x1932 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc1933 ret <4 x i32> %r1934}1935 1936define <4 x i32> @notted_umin_ab_cb_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1937; CHECK-LABEL: notted_umin_ab_cb_eq_pred:1938; CHECK: // %bb.0:1939; CHECK-NEXT: mvn v0.16b, v0.16b1940; CHECK-NEXT: mvn v1.16b, v1.16b1941; CHECK-NEXT: mvn v2.16b, v2.16b1942; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1943; CHECK-NEXT: umin v1.4s, v2.4s, v1.4s1944; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1945; CHECK-NEXT: ret1946 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1947 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1948 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1949 %cmp_ab = icmp ult <4 x i32> %a, %b1950 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1951 %cmp_cb = icmp ult <4 x i32> %c, %b1952 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b1953 %cmp_ac = icmp ule <4 x i32> %z, %x1954 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb1955 ret <4 x i32> %r1956}1957 1958define <4 x i32> @notted_umin_bc_ab_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1959; CHECK-LABEL: notted_umin_bc_ab_eq_pred:1960; CHECK: // %bb.0:1961; CHECK-NEXT: mvn v0.16b, v0.16b1962; CHECK-NEXT: mvn v1.16b, v1.16b1963; CHECK-NEXT: mvn v2.16b, v2.16b1964; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s1965; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s1966; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s1967; CHECK-NEXT: ret1968 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1969 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1970 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1971 %cmp_bc = icmp ult <4 x i32> %b, %c1972 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1973 %cmp_ab = icmp ult <4 x i32> %a, %b1974 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b1975 %cmp_ca = icmp ule <4 x i32> %x, %z1976 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab1977 ret <4 x i32> %r1978}1979 1980define <4 x i32> @notted_umin_bc_ba_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {1981; CHECK-LABEL: notted_umin_bc_ba_eq_pred:1982; CHECK: // %bb.0:1983; CHECK-NEXT: mvn v0.16b, v0.16b1984; CHECK-NEXT: mvn v1.16b, v1.16b1985; CHECK-NEXT: mvn v2.16b, v2.16b1986; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s1987; CHECK-NEXT: umin v0.4s, v1.4s, v0.4s1988; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s1989; CHECK-NEXT: ret1990 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>1991 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>1992 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>1993 %cmp_bc = icmp ult <4 x i32> %b, %c1994 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c1995 %cmp_ba = icmp ult <4 x i32> %b, %a1996 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a1997 %cmp_ca = icmp ule <4 x i32> %x, %z1998 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba1999 ret <4 x i32> %r2000}2001 2002define <4 x i32> @notted_umin_ab_bc_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2003; CHECK-LABEL: notted_umin_ab_bc_eq_swap_pred:2004; CHECK: // %bb.0:2005; CHECK-NEXT: mvn v0.16b, v0.16b2006; CHECK-NEXT: mvn v1.16b, v1.16b2007; CHECK-NEXT: mvn v2.16b, v2.16b2008; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s2009; CHECK-NEXT: umin v1.4s, v1.4s, v2.4s2010; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s2011; CHECK-NEXT: ret2012 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2013 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2014 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2015 %cmp_ab = icmp ult <4 x i32> %a, %b2016 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2017 %cmp_bc = icmp ult <4 x i32> %b, %c2018 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2019 %cmp_ac = icmp uge <4 x i32> %x, %z2020 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc2021 ret <4 x i32> %r2022}2023 2024define <4 x i32> @notted_umin_ab_cb_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2025; CHECK-LABEL: notted_umin_ab_cb_eq_swap_pred:2026; CHECK: // %bb.0:2027; CHECK-NEXT: mvn v0.16b, v0.16b2028; CHECK-NEXT: mvn v1.16b, v1.16b2029; CHECK-NEXT: mvn v2.16b, v2.16b2030; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s2031; CHECK-NEXT: umin v1.4s, v2.4s, v1.4s2032; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s2033; CHECK-NEXT: ret2034 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2035 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2036 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2037 %cmp_ab = icmp ult <4 x i32> %a, %b2038 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2039 %cmp_cb = icmp ult <4 x i32> %c, %b2040 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b2041 %cmp_ac = icmp uge <4 x i32> %x, %z2042 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb2043 ret <4 x i32> %r2044}2045 2046define <4 x i32> @notted_umin_bc_ab_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2047; CHECK-LABEL: notted_umin_bc_ab_eq_swap_pred:2048; CHECK: // %bb.0:2049; CHECK-NEXT: mvn v0.16b, v0.16b2050; CHECK-NEXT: mvn v1.16b, v1.16b2051; CHECK-NEXT: mvn v2.16b, v2.16b2052; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s2053; CHECK-NEXT: umin v0.4s, v0.4s, v1.4s2054; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s2055; CHECK-NEXT: ret2056 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2057 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2058 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2059 %cmp_bc = icmp ult <4 x i32> %b, %c2060 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2061 %cmp_ab = icmp ult <4 x i32> %a, %b2062 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2063 %cmp_ca = icmp uge <4 x i32> %z, %x2064 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab2065 ret <4 x i32> %r2066}2067 2068define <4 x i32> @notted_umin_bc_ba_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2069; CHECK-LABEL: notted_umin_bc_ba_eq_swap_pred:2070; CHECK: // %bb.0:2071; CHECK-NEXT: mvn v0.16b, v0.16b2072; CHECK-NEXT: mvn v1.16b, v1.16b2073; CHECK-NEXT: mvn v2.16b, v2.16b2074; CHECK-NEXT: umin v2.4s, v1.4s, v2.4s2075; CHECK-NEXT: umin v0.4s, v1.4s, v0.4s2076; CHECK-NEXT: umin v0.4s, v2.4s, v0.4s2077; CHECK-NEXT: ret2078 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2079 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2080 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2081 %cmp_bc = icmp ult <4 x i32> %b, %c2082 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2083 %cmp_ba = icmp ult <4 x i32> %b, %a2084 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a2085 %cmp_ca = icmp uge <4 x i32> %z, %x2086 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba2087 ret <4 x i32> %r2088}2089 2090define <4 x i32> @notted_umax_ab_bc(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2091; CHECK-LABEL: notted_umax_ab_bc:2092; CHECK: // %bb.0:2093; CHECK-NEXT: mvn v0.16b, v0.16b2094; CHECK-NEXT: mvn v1.16b, v1.16b2095; CHECK-NEXT: mvn v2.16b, v2.16b2096; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2097; CHECK-NEXT: umax v1.4s, v1.4s, v2.4s2098; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2099; CHECK-NEXT: ret2100 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2101 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2102 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2103 %cmp_ab = icmp ugt <4 x i32> %a, %b2104 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2105 %cmp_bc = icmp ugt <4 x i32> %b, %c2106 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2107 %cmp_ac = icmp ugt <4 x i32> %z, %x2108 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc2109 ret <4 x i32> %r2110}2111 2112define <4 x i32> @notted_umax_ab_cb(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2113; CHECK-LABEL: notted_umax_ab_cb:2114; CHECK: // %bb.0:2115; CHECK-NEXT: mvn v0.16b, v0.16b2116; CHECK-NEXT: mvn v1.16b, v1.16b2117; CHECK-NEXT: mvn v2.16b, v2.16b2118; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2119; CHECK-NEXT: umax v1.4s, v2.4s, v1.4s2120; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2121; CHECK-NEXT: ret2122 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2123 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2124 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2125 %cmp_ab = icmp ugt <4 x i32> %a, %b2126 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2127 %cmp_cb = icmp ugt <4 x i32> %c, %b2128 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b2129 %cmp_ac = icmp ugt <4 x i32> %z, %x2130 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb2131 ret <4 x i32> %r2132}2133 2134define <4 x i32> @notted_umax_bc_ab(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2135; CHECK-LABEL: notted_umax_bc_ab:2136; CHECK: // %bb.0:2137; CHECK-NEXT: mvn v0.16b, v0.16b2138; CHECK-NEXT: mvn v1.16b, v1.16b2139; CHECK-NEXT: mvn v2.16b, v2.16b2140; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s2141; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2142; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s2143; CHECK-NEXT: ret2144 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2145 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2146 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2147 %cmp_bc = icmp ugt <4 x i32> %b, %c2148 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2149 %cmp_ab = icmp ugt <4 x i32> %a, %b2150 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2151 %cmp_ca = icmp ugt <4 x i32> %x, %z2152 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab2153 ret <4 x i32> %r2154}2155 2156define <4 x i32> @notted_umax_bc_ba(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2157; CHECK-LABEL: notted_umax_bc_ba:2158; CHECK: // %bb.0:2159; CHECK-NEXT: mvn v0.16b, v0.16b2160; CHECK-NEXT: mvn v1.16b, v1.16b2161; CHECK-NEXT: mvn v2.16b, v2.16b2162; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s2163; CHECK-NEXT: umax v0.4s, v1.4s, v0.4s2164; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s2165; CHECK-NEXT: ret2166 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2167 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2168 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2169 %cmp_bc = icmp ugt <4 x i32> %b, %c2170 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2171 %cmp_ba = icmp ugt <4 x i32> %b, %a2172 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a2173 %cmp_ca = icmp ugt <4 x i32> %x, %z2174 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba2175 ret <4 x i32> %r2176}2177 2178define <4 x i32> @notted_umax_ab_bc_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2179; CHECK-LABEL: notted_umax_ab_bc_swap_pred:2180; CHECK: // %bb.0:2181; CHECK-NEXT: mvn v0.16b, v0.16b2182; CHECK-NEXT: mvn v1.16b, v1.16b2183; CHECK-NEXT: mvn v2.16b, v2.16b2184; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2185; CHECK-NEXT: umax v1.4s, v1.4s, v2.4s2186; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2187; CHECK-NEXT: ret2188 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2189 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2190 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2191 %cmp_ab = icmp ugt <4 x i32> %a, %b2192 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2193 %cmp_bc = icmp ugt <4 x i32> %b, %c2194 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2195 %cmp_ac = icmp ult <4 x i32> %x, %z2196 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc2197 ret <4 x i32> %r2198}2199 2200define <4 x i32> @notted_umax_ab_cb_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2201; CHECK-LABEL: notted_umax_ab_cb_swap_pred:2202; CHECK: // %bb.0:2203; CHECK-NEXT: mvn v0.16b, v0.16b2204; CHECK-NEXT: mvn v1.16b, v1.16b2205; CHECK-NEXT: mvn v2.16b, v2.16b2206; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2207; CHECK-NEXT: umax v1.4s, v2.4s, v1.4s2208; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2209; CHECK-NEXT: ret2210 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2211 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2212 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2213 %cmp_ab = icmp ugt <4 x i32> %a, %b2214 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2215 %cmp_cb = icmp ugt <4 x i32> %c, %b2216 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b2217 %cmp_ac = icmp ult <4 x i32> %x, %z2218 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb2219 ret <4 x i32> %r2220}2221 2222define <4 x i32> @notted_umax_bc_ab_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2223; CHECK-LABEL: notted_umax_bc_ab_swap_pred:2224; CHECK: // %bb.0:2225; CHECK-NEXT: mvn v0.16b, v0.16b2226; CHECK-NEXT: mvn v1.16b, v1.16b2227; CHECK-NEXT: mvn v2.16b, v2.16b2228; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s2229; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2230; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s2231; CHECK-NEXT: ret2232 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2233 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2234 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2235 %cmp_bc = icmp ugt <4 x i32> %b, %c2236 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2237 %cmp_ab = icmp ugt <4 x i32> %a, %b2238 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2239 %cmp_ca = icmp ult <4 x i32> %z, %x2240 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab2241 ret <4 x i32> %r2242}2243 2244define <4 x i32> @notted_umax_bc_ba_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2245; CHECK-LABEL: notted_umax_bc_ba_swap_pred:2246; CHECK: // %bb.0:2247; CHECK-NEXT: mvn v0.16b, v0.16b2248; CHECK-NEXT: mvn v1.16b, v1.16b2249; CHECK-NEXT: mvn v2.16b, v2.16b2250; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s2251; CHECK-NEXT: umax v0.4s, v1.4s, v0.4s2252; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s2253; CHECK-NEXT: ret2254 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2255 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2256 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2257 %cmp_bc = icmp ugt <4 x i32> %b, %c2258 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2259 %cmp_ba = icmp ugt <4 x i32> %b, %a2260 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a2261 %cmp_ca = icmp ult <4 x i32> %z, %x2262 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba2263 ret <4 x i32> %r2264}2265 2266define <4 x i32> @notted_umax_ab_bc_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2267; CHECK-LABEL: notted_umax_ab_bc_eq_pred:2268; CHECK: // %bb.0:2269; CHECK-NEXT: mvn v0.16b, v0.16b2270; CHECK-NEXT: mvn v1.16b, v1.16b2271; CHECK-NEXT: mvn v2.16b, v2.16b2272; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2273; CHECK-NEXT: umax v1.4s, v1.4s, v2.4s2274; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2275; CHECK-NEXT: ret2276 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2277 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2278 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2279 %cmp_ab = icmp ugt <4 x i32> %a, %b2280 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2281 %cmp_bc = icmp ugt <4 x i32> %b, %c2282 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2283 %cmp_ac = icmp uge <4 x i32> %z, %x2284 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc2285 ret <4 x i32> %r2286}2287 2288define <4 x i32> @notted_umax_ab_cb_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2289; CHECK-LABEL: notted_umax_ab_cb_eq_pred:2290; CHECK: // %bb.0:2291; CHECK-NEXT: mvn v0.16b, v0.16b2292; CHECK-NEXT: mvn v1.16b, v1.16b2293; CHECK-NEXT: mvn v2.16b, v2.16b2294; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2295; CHECK-NEXT: umax v1.4s, v2.4s, v1.4s2296; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2297; CHECK-NEXT: ret2298 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2299 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2300 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2301 %cmp_ab = icmp ugt <4 x i32> %a, %b2302 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2303 %cmp_cb = icmp ugt <4 x i32> %c, %b2304 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b2305 %cmp_ac = icmp uge <4 x i32> %z, %x2306 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb2307 ret <4 x i32> %r2308}2309 2310define <4 x i32> @notted_umax_bc_ab_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2311; CHECK-LABEL: notted_umax_bc_ab_eq_pred:2312; CHECK: // %bb.0:2313; CHECK-NEXT: mvn v0.16b, v0.16b2314; CHECK-NEXT: mvn v1.16b, v1.16b2315; CHECK-NEXT: mvn v2.16b, v2.16b2316; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s2317; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2318; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s2319; CHECK-NEXT: ret2320 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2321 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2322 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2323 %cmp_bc = icmp ugt <4 x i32> %b, %c2324 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2325 %cmp_ab = icmp ugt <4 x i32> %a, %b2326 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2327 %cmp_ca = icmp uge <4 x i32> %x, %z2328 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab2329 ret <4 x i32> %r2330}2331 2332define <4 x i32> @notted_umax_bc_ba_eq_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2333; CHECK-LABEL: notted_umax_bc_ba_eq_pred:2334; CHECK: // %bb.0:2335; CHECK-NEXT: mvn v0.16b, v0.16b2336; CHECK-NEXT: mvn v1.16b, v1.16b2337; CHECK-NEXT: mvn v2.16b, v2.16b2338; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s2339; CHECK-NEXT: umax v0.4s, v1.4s, v0.4s2340; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s2341; CHECK-NEXT: ret2342 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2343 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2344 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2345 %cmp_bc = icmp ugt <4 x i32> %b, %c2346 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2347 %cmp_ba = icmp ugt <4 x i32> %b, %a2348 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a2349 %cmp_ca = icmp uge <4 x i32> %x, %z2350 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba2351 ret <4 x i32> %r2352}2353 2354define <4 x i32> @notted_umax_ab_bc_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2355; CHECK-LABEL: notted_umax_ab_bc_eq_swap_pred:2356; CHECK: // %bb.0:2357; CHECK-NEXT: mvn v0.16b, v0.16b2358; CHECK-NEXT: mvn v1.16b, v1.16b2359; CHECK-NEXT: mvn v2.16b, v2.16b2360; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2361; CHECK-NEXT: umax v1.4s, v1.4s, v2.4s2362; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2363; CHECK-NEXT: ret2364 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2365 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2366 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2367 %cmp_ab = icmp ugt <4 x i32> %a, %b2368 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2369 %cmp_bc = icmp ugt <4 x i32> %b, %c2370 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2371 %cmp_ac = icmp ule <4 x i32> %x, %z2372 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_bc2373 ret <4 x i32> %r2374}2375 2376define <4 x i32> @notted_umax_ab_cb_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2377; CHECK-LABEL: notted_umax_ab_cb_eq_swap_pred:2378; CHECK: // %bb.0:2379; CHECK-NEXT: mvn v0.16b, v0.16b2380; CHECK-NEXT: mvn v1.16b, v1.16b2381; CHECK-NEXT: mvn v2.16b, v2.16b2382; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2383; CHECK-NEXT: umax v1.4s, v2.4s, v1.4s2384; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2385; CHECK-NEXT: ret2386 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2387 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2388 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2389 %cmp_ab = icmp ugt <4 x i32> %a, %b2390 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2391 %cmp_cb = icmp ugt <4 x i32> %c, %b2392 %min_cb = select <4 x i1> %cmp_cb, <4 x i32> %c, <4 x i32> %b2393 %cmp_ac = icmp ule <4 x i32> %x, %z2394 %r = select <4 x i1> %cmp_ac, <4 x i32> %min_ab, <4 x i32> %min_cb2395 ret <4 x i32> %r2396}2397 2398define <4 x i32> @notted_umax_bc_ab_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2399; CHECK-LABEL: notted_umax_bc_ab_eq_swap_pred:2400; CHECK: // %bb.0:2401; CHECK-NEXT: mvn v0.16b, v0.16b2402; CHECK-NEXT: mvn v1.16b, v1.16b2403; CHECK-NEXT: mvn v2.16b, v2.16b2404; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s2405; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s2406; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s2407; CHECK-NEXT: ret2408 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2409 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2410 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2411 %cmp_bc = icmp ugt <4 x i32> %b, %c2412 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2413 %cmp_ab = icmp ugt <4 x i32> %a, %b2414 %min_ab = select <4 x i1> %cmp_ab, <4 x i32> %a, <4 x i32> %b2415 %cmp_ca = icmp ule <4 x i32> %z, %x2416 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ab2417 ret <4 x i32> %r2418}2419 2420define <4 x i32> @notted_umax_bc_ba_eq_swap_pred(<4 x i32> %x, <4 x i32> %y, <4 x i32> %z) {2421; CHECK-LABEL: notted_umax_bc_ba_eq_swap_pred:2422; CHECK: // %bb.0:2423; CHECK-NEXT: mvn v0.16b, v0.16b2424; CHECK-NEXT: mvn v1.16b, v1.16b2425; CHECK-NEXT: mvn v2.16b, v2.16b2426; CHECK-NEXT: umax v2.4s, v1.4s, v2.4s2427; CHECK-NEXT: umax v0.4s, v1.4s, v0.4s2428; CHECK-NEXT: umax v0.4s, v2.4s, v0.4s2429; CHECK-NEXT: ret2430 %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>2431 %b = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>2432 %c = xor <4 x i32> %z, <i32 -1, i32 -1, i32 -1, i32 -1>2433 %cmp_bc = icmp ugt <4 x i32> %b, %c2434 %min_bc = select <4 x i1> %cmp_bc, <4 x i32> %b, <4 x i32> %c2435 %cmp_ba = icmp ugt <4 x i32> %b, %a2436 %min_ba = select <4 x i1> %cmp_ba, <4 x i32> %b, <4 x i32> %a2437 %cmp_ca = icmp ule <4 x i32> %z, %x2438 %r = select <4 x i1> %cmp_ca, <4 x i32> %min_bc, <4 x i32> %min_ba2439 ret <4 x i32> %r2440}2441 2442