brintos

brintos / llvm-project-archived public Read only

0
0
Text · 96.4 KiB · 9257832 Raw
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