1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s 3 4define arm_aapcs_vfpcc <4 x i32> @vcmp_eq_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) { 5; CHECK-LABEL: vcmp_eq_v4i32: 6; CHECK: @ %bb.0: @ %entry 7; CHECK-NEXT: vcmp.i32 eq, q0, q1 8; CHECK-NEXT: vpsel q0, q2, q3 9; CHECK-NEXT: bx lr 10entry: 11 %c = icmp eq <4 x i32> %src, %srcb 12 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b 13 ret <4 x i32> %s 14} 15 16define arm_aapcs_vfpcc <4 x i32> @vcmp_ne_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) { 17; CHECK-LABEL: vcmp_ne_v4i32: 18; CHECK: @ %bb.0: @ %entry 19; CHECK-NEXT: vcmp.i32 ne, q0, q1 20; CHECK-NEXT: vpsel q0, q2, q3 21; CHECK-NEXT: bx lr 22entry: 23 %c = icmp ne <4 x i32> %src, %srcb 24 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b 25 ret <4 x i32> %s 26} 27 28define arm_aapcs_vfpcc <4 x i32> @vcmp_sgt_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) { 29; CHECK-LABEL: vcmp_sgt_v4i32: 30; CHECK: @ %bb.0: @ %entry 31; CHECK-NEXT: vcmp.s32 gt, q0, q1 32; CHECK-NEXT: vpsel q0, q2, q3 33; CHECK-NEXT: bx lr 34entry: 35 %c = icmp sgt <4 x i32> %src, %srcb 36 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b 37 ret <4 x i32> %s 38} 39 40define arm_aapcs_vfpcc <4 x i32> @vcmp_sge_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) { 41; CHECK-LABEL: vcmp_sge_v4i32: 42; CHECK: @ %bb.0: @ %entry 43; CHECK-NEXT: vcmp.s32 ge, q0, q1 44; CHECK-NEXT: vpsel q0, q2, q3 45; CHECK-NEXT: bx lr 46entry: 47 %c = icmp sge <4 x i32> %src, %srcb 48 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b 49 ret <4 x i32> %s 50} 51 52define arm_aapcs_vfpcc <4 x i32> @vcmp_slt_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) { 53; CHECK-LABEL: vcmp_slt_v4i32: 54; CHECK: @ %bb.0: @ %entry 55; CHECK-NEXT: vcmp.s32 gt, q1, q0 56; CHECK-NEXT: vpsel q0, q2, q3 57; CHECK-NEXT: bx lr 58entry: 59 %c = icmp slt <4 x i32> %src, %srcb 60 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b 61 ret <4 x i32> %s 62} 63 64define arm_aapcs_vfpcc <4 x i32> @vcmp_sle_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) { 65; CHECK-LABEL: vcmp_sle_v4i32: 66; CHECK: @ %bb.0: @ %entry 67; CHECK-NEXT: vcmp.s32 ge, q1, q0 68; CHECK-NEXT: vpsel q0, q2, q3 69; CHECK-NEXT: bx lr 70entry: 71 %c = icmp sle <4 x i32> %src, %srcb 72 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b 73 ret <4 x i32> %s 74} 75 76define arm_aapcs_vfpcc <4 x i32> @vcmp_ugt_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) { 77; CHECK-LABEL: vcmp_ugt_v4i32: 78; CHECK: @ %bb.0: @ %entry 79; CHECK-NEXT: vcmp.u32 hi, q0, q1 80; CHECK-NEXT: vpsel q0, q2, q3 81; CHECK-NEXT: bx lr 82entry: 83 %c = icmp ugt <4 x i32> %src, %srcb 84 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b 85 ret <4 x i32> %s 86} 87 88define arm_aapcs_vfpcc <4 x i32> @vcmp_uge_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) { 89; CHECK-LABEL: vcmp_uge_v4i32: 90; CHECK: @ %bb.0: @ %entry 91; CHECK-NEXT: vcmp.u32 cs, q0, q1 92; CHECK-NEXT: vpsel q0, q2, q3 93; CHECK-NEXT: bx lr 94entry: 95 %c = icmp uge <4 x i32> %src, %srcb 96 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b 97 ret <4 x i32> %s 98} 99 100define arm_aapcs_vfpcc <4 x i32> @vcmp_ult_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) { 101; CHECK-LABEL: vcmp_ult_v4i32: 102; CHECK: @ %bb.0: @ %entry 103; CHECK-NEXT: vcmp.u32 hi, q1, q0 104; CHECK-NEXT: vpsel q0, q2, q3 105; CHECK-NEXT: bx lr 106entry: 107 %c = icmp ult <4 x i32> %src, %srcb 108 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b 109 ret <4 x i32> %s 110} 111 112define arm_aapcs_vfpcc <4 x i32> @vcmp_ule_v4i32(<4 x i32> %src, <4 x i32> %srcb, <4 x i32> %a, <4 x i32> %b) { 113; CHECK-LABEL: vcmp_ule_v4i32: 114; CHECK: @ %bb.0: @ %entry 115; CHECK-NEXT: vcmp.u32 cs, q1, q0 116; CHECK-NEXT: vpsel q0, q2, q3 117; CHECK-NEXT: bx lr 118entry: 119 %c = icmp ule <4 x i32> %src, %srcb 120 %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %b 121 ret <4 x i32> %s 122} 123 124 125define arm_aapcs_vfpcc <8 x i16> @vcmp_eq_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) { 126; CHECK-LABEL: vcmp_eq_v8i16: 127; CHECK: @ %bb.0: @ %entry 128; CHECK-NEXT: vcmp.i16 eq, q0, q1 129; CHECK-NEXT: vpsel q0, q2, q3 130; CHECK-NEXT: bx lr 131entry: 132 %c = icmp eq <8 x i16> %src, %srcb 133 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b 134 ret <8 x i16> %s 135} 136 137define arm_aapcs_vfpcc <8 x i16> @vcmp_ne_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) { 138; CHECK-LABEL: vcmp_ne_v8i16: 139; CHECK: @ %bb.0: @ %entry 140; CHECK-NEXT: vcmp.i16 ne, q0, q1 141; CHECK-NEXT: vpsel q0, q2, q3 142; CHECK-NEXT: bx lr 143entry: 144 %c = icmp ne <8 x i16> %src, %srcb 145 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b 146 ret <8 x i16> %s 147} 148 149define arm_aapcs_vfpcc <8 x i16> @vcmp_sgt_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) { 150; CHECK-LABEL: vcmp_sgt_v8i16: 151; CHECK: @ %bb.0: @ %entry 152; CHECK-NEXT: vcmp.s16 gt, q0, q1 153; CHECK-NEXT: vpsel q0, q2, q3 154; CHECK-NEXT: bx lr 155entry: 156 %c = icmp sgt <8 x i16> %src, %srcb 157 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b 158 ret <8 x i16> %s 159} 160 161define arm_aapcs_vfpcc <8 x i16> @vcmp_sge_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) { 162; CHECK-LABEL: vcmp_sge_v8i16: 163; CHECK: @ %bb.0: @ %entry 164; CHECK-NEXT: vcmp.s16 ge, q0, q1 165; CHECK-NEXT: vpsel q0, q2, q3 166; CHECK-NEXT: bx lr 167entry: 168 %c = icmp sge <8 x i16> %src, %srcb 169 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b 170 ret <8 x i16> %s 171} 172 173define arm_aapcs_vfpcc <8 x i16> @vcmp_slt_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) { 174; CHECK-LABEL: vcmp_slt_v8i16: 175; CHECK: @ %bb.0: @ %entry 176; CHECK-NEXT: vcmp.s16 gt, q1, q0 177; CHECK-NEXT: vpsel q0, q2, q3 178; CHECK-NEXT: bx lr 179entry: 180 %c = icmp slt <8 x i16> %src, %srcb 181 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b 182 ret <8 x i16> %s 183} 184 185define arm_aapcs_vfpcc <8 x i16> @vcmp_sle_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) { 186; CHECK-LABEL: vcmp_sle_v8i16: 187; CHECK: @ %bb.0: @ %entry 188; CHECK-NEXT: vcmp.s16 ge, q1, q0 189; CHECK-NEXT: vpsel q0, q2, q3 190; CHECK-NEXT: bx lr 191entry: 192 %c = icmp sle <8 x i16> %src, %srcb 193 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b 194 ret <8 x i16> %s 195} 196 197define arm_aapcs_vfpcc <8 x i16> @vcmp_ugt_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) { 198; CHECK-LABEL: vcmp_ugt_v8i16: 199; CHECK: @ %bb.0: @ %entry 200; CHECK-NEXT: vcmp.u16 hi, q0, q1 201; CHECK-NEXT: vpsel q0, q2, q3 202; CHECK-NEXT: bx lr 203entry: 204 %c = icmp ugt <8 x i16> %src, %srcb 205 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b 206 ret <8 x i16> %s 207} 208 209define arm_aapcs_vfpcc <8 x i16> @vcmp_uge_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) { 210; CHECK-LABEL: vcmp_uge_v8i16: 211; CHECK: @ %bb.0: @ %entry 212; CHECK-NEXT: vcmp.u16 cs, q0, q1 213; CHECK-NEXT: vpsel q0, q2, q3 214; CHECK-NEXT: bx lr 215entry: 216 %c = icmp uge <8 x i16> %src, %srcb 217 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b 218 ret <8 x i16> %s 219} 220 221define arm_aapcs_vfpcc <8 x i16> @vcmp_ult_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) { 222; CHECK-LABEL: vcmp_ult_v8i16: 223; CHECK: @ %bb.0: @ %entry 224; CHECK-NEXT: vcmp.u16 hi, q1, q0 225; CHECK-NEXT: vpsel q0, q2, q3 226; CHECK-NEXT: bx lr 227entry: 228 %c = icmp ult <8 x i16> %src, %srcb 229 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b 230 ret <8 x i16> %s 231} 232 233define arm_aapcs_vfpcc <8 x i16> @vcmp_ule_v8i16(<8 x i16> %src, <8 x i16> %srcb, <8 x i16> %a, <8 x i16> %b) { 234; CHECK-LABEL: vcmp_ule_v8i16: 235; CHECK: @ %bb.0: @ %entry 236; CHECK-NEXT: vcmp.u16 cs, q1, q0 237; CHECK-NEXT: vpsel q0, q2, q3 238; CHECK-NEXT: bx lr 239entry: 240 %c = icmp ule <8 x i16> %src, %srcb 241 %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b 242 ret <8 x i16> %s 243} 244 245 246define arm_aapcs_vfpcc <16 x i8> @vcmp_eq_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) { 247; CHECK-LABEL: vcmp_eq_v16i8: 248; CHECK: @ %bb.0: @ %entry 249; CHECK-NEXT: vcmp.i8 eq, q0, q1 250; CHECK-NEXT: vpsel q0, q2, q3 251; CHECK-NEXT: bx lr 252entry: 253 %c = icmp eq <16 x i8> %src, %srcb 254 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b 255 ret <16 x i8> %s 256} 257 258define arm_aapcs_vfpcc <16 x i8> @vcmp_ne_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) { 259; CHECK-LABEL: vcmp_ne_v16i8: 260; CHECK: @ %bb.0: @ %entry 261; CHECK-NEXT: vcmp.i8 ne, q0, q1 262; CHECK-NEXT: vpsel q0, q2, q3 263; CHECK-NEXT: bx lr 264entry: 265 %c = icmp ne <16 x i8> %src, %srcb 266 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b 267 ret <16 x i8> %s 268} 269 270define arm_aapcs_vfpcc <16 x i8> @vcmp_sgt_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) { 271; CHECK-LABEL: vcmp_sgt_v16i8: 272; CHECK: @ %bb.0: @ %entry 273; CHECK-NEXT: vcmp.s8 gt, q0, q1 274; CHECK-NEXT: vpsel q0, q2, q3 275; CHECK-NEXT: bx lr 276entry: 277 %c = icmp sgt <16 x i8> %src, %srcb 278 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b 279 ret <16 x i8> %s 280} 281 282define arm_aapcs_vfpcc <16 x i8> @vcmp_sge_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) { 283; CHECK-LABEL: vcmp_sge_v16i8: 284; CHECK: @ %bb.0: @ %entry 285; CHECK-NEXT: vcmp.s8 ge, q0, q1 286; CHECK-NEXT: vpsel q0, q2, q3 287; CHECK-NEXT: bx lr 288entry: 289 %c = icmp sge <16 x i8> %src, %srcb 290 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b 291 ret <16 x i8> %s 292} 293 294define arm_aapcs_vfpcc <16 x i8> @vcmp_slt_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) { 295; CHECK-LABEL: vcmp_slt_v16i8: 296; CHECK: @ %bb.0: @ %entry 297; CHECK-NEXT: vcmp.s8 gt, q1, q0 298; CHECK-NEXT: vpsel q0, q2, q3 299; CHECK-NEXT: bx lr 300entry: 301 %c = icmp slt <16 x i8> %src, %srcb 302 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b 303 ret <16 x i8> %s 304} 305 306define arm_aapcs_vfpcc <16 x i8> @vcmp_sle_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) { 307; CHECK-LABEL: vcmp_sle_v16i8: 308; CHECK: @ %bb.0: @ %entry 309; CHECK-NEXT: vcmp.s8 ge, q1, q0 310; CHECK-NEXT: vpsel q0, q2, q3 311; CHECK-NEXT: bx lr 312entry: 313 %c = icmp sle <16 x i8> %src, %srcb 314 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b 315 ret <16 x i8> %s 316} 317 318define arm_aapcs_vfpcc <16 x i8> @vcmp_ugt_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) { 319; CHECK-LABEL: vcmp_ugt_v16i8: 320; CHECK: @ %bb.0: @ %entry 321; CHECK-NEXT: vcmp.u8 hi, q0, q1 322; CHECK-NEXT: vpsel q0, q2, q3 323; CHECK-NEXT: bx lr 324entry: 325 %c = icmp ugt <16 x i8> %src, %srcb 326 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b 327 ret <16 x i8> %s 328} 329 330define arm_aapcs_vfpcc <16 x i8> @vcmp_uge_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) { 331; CHECK-LABEL: vcmp_uge_v16i8: 332; CHECK: @ %bb.0: @ %entry 333; CHECK-NEXT: vcmp.u8 cs, q0, q1 334; CHECK-NEXT: vpsel q0, q2, q3 335; CHECK-NEXT: bx lr 336entry: 337 %c = icmp uge <16 x i8> %src, %srcb 338 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b 339 ret <16 x i8> %s 340} 341 342define arm_aapcs_vfpcc <16 x i8> @vcmp_ult_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) { 343; CHECK-LABEL: vcmp_ult_v16i8: 344; CHECK: @ %bb.0: @ %entry 345; CHECK-NEXT: vcmp.u8 hi, q1, q0 346; CHECK-NEXT: vpsel q0, q2, q3 347; CHECK-NEXT: bx lr 348entry: 349 %c = icmp ult <16 x i8> %src, %srcb 350 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b 351 ret <16 x i8> %s 352} 353 354define arm_aapcs_vfpcc <16 x i8> @vcmp_ule_v16i8(<16 x i8> %src, <16 x i8> %srcb, <16 x i8> %a, <16 x i8> %b) { 355; CHECK-LABEL: vcmp_ule_v16i8: 356; CHECK: @ %bb.0: @ %entry 357; CHECK-NEXT: vcmp.u8 cs, q1, q0 358; CHECK-NEXT: vpsel q0, q2, q3 359; CHECK-NEXT: bx lr 360entry: 361 %c = icmp ule <16 x i8> %src, %srcb 362 %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %b 363 ret <16 x i8> %s 364} 365 366 367define arm_aapcs_vfpcc <2 x i64> @vcmp_eq_v2i64(<2 x i64> %src, <2 x i64> %srcb, <2 x i64> %a, <2 x i64> %b) { 368; CHECK-LABEL: vcmp_eq_v2i64: 369; CHECK: @ %bb.0: @ %entry 370; CHECK-NEXT: vmov r0, r1, d2 371; CHECK-NEXT: vmov r2, r3, d0 372; CHECK-NEXT: eors r0, r2 373; CHECK-NEXT: eors r1, r3 374; CHECK-NEXT: orrs r0, r1 375; CHECK-NEXT: mov.w r1, #0 376; CHECK-NEXT: csetm r0, eq 377; CHECK-NEXT: vmov r12, r2, d3 378; CHECK-NEXT: bfi r1, r0, #0, #8 379; CHECK-NEXT: vmov r3, r0, d1 380; CHECK-NEXT: eors r0, r2 381; CHECK-NEXT: eor.w r2, r3, r12 382; CHECK-NEXT: orrs r0, r2 383; CHECK-NEXT: csetm r0, eq 384; CHECK-NEXT: bfi r1, r0, #8, #8 385; CHECK-NEXT: vmsr p0, r1 386; CHECK-NEXT: vpsel q0, q2, q3 387; CHECK-NEXT: bx lr 388entry: 389 %c = icmp eq <2 x i64> %src, %srcb 390 %s = select <2 x i1> %c, <2 x i64> %a, <2 x i64> %b 391 ret <2 x i64> %s 392} 393 394define arm_aapcs_vfpcc <2 x i64> @vcmp_slt_v2i64(<2 x i64> %src, <2 x i64> %srcb, <2 x i64> %a, <2 x i64> %b) { 395; CHECK-LABEL: vcmp_slt_v2i64: 396; CHECK: @ %bb.0: @ %entry 397; CHECK-NEXT: vmov r0, r1, d2 398; CHECK-NEXT: vmov r2, r3, d0 399; CHECK-NEXT: subs r0, r2, r0 400; CHECK-NEXT: sbcs.w r0, r3, r1 401; CHECK-NEXT: mov.w r1, #0 402; CHECK-NEXT: csetm r0, lt 403; CHECK-NEXT: vmov r3, r2, d1 404; CHECK-NEXT: bfi r1, r0, #0, #8 405; CHECK-NEXT: vmov r0, r12, d3 406; CHECK-NEXT: subs r0, r3, r0 407; CHECK-NEXT: sbcs.w r0, r2, r12 408; CHECK-NEXT: csetm r0, lt 409; CHECK-NEXT: bfi r1, r0, #8, #8 410; CHECK-NEXT: vmsr p0, r1 411; CHECK-NEXT: vpsel q0, q2, q3 412; CHECK-NEXT: bx lr 413entry: 414 %c = icmp slt <2 x i64> %src, %srcb 415 %s = select <2 x i1> %c, <2 x i64> %a, <2 x i64> %b 416 ret <2 x i64> %s 417} 418 419define arm_aapcs_vfpcc <2 x i32> @vcmp_eq_v2i32(<2 x i64> %src, <2 x i64> %srcb, <2 x i32> %a, <2 x i32> %b) { 420; CHECK-LABEL: vcmp_eq_v2i32: 421; CHECK: @ %bb.0: @ %entry 422; CHECK-NEXT: vmov r0, r1, d2 423; CHECK-NEXT: vmov r2, r3, d0 424; CHECK-NEXT: eors r0, r2 425; CHECK-NEXT: eors r1, r3 426; CHECK-NEXT: orrs r0, r1 427; CHECK-NEXT: mov.w r1, #0 428; CHECK-NEXT: csetm r0, eq 429; CHECK-NEXT: vmov r12, r2, d3 430; CHECK-NEXT: bfi r1, r0, #0, #8 431; CHECK-NEXT: vmov r3, r0, d1 432; CHECK-NEXT: eors r0, r2 433; CHECK-NEXT: eor.w r2, r3, r12 434; CHECK-NEXT: orrs r0, r2 435; CHECK-NEXT: csetm r0, eq 436; CHECK-NEXT: bfi r1, r0, #8, #8 437; CHECK-NEXT: vmsr p0, r1 438; CHECK-NEXT: vpsel q0, q2, q3 439; CHECK-NEXT: bx lr 440entry: 441 %c = icmp eq <2 x i64> %src, %srcb 442 %s = select <2 x i1> %c, <2 x i32> %a, <2 x i32> %b 443 ret <2 x i32> %s 444} 445 446define arm_aapcs_vfpcc <2 x i32> @vcmp_multi_v2i32(<2 x i64> %a, <2 x i32> %b, <2 x i32> %c) { 447; CHECK-LABEL: vcmp_multi_v2i32: 448; CHECK: @ %bb.0: 449; CHECK-NEXT: vmov r0, r1, d0 450; CHECK-NEXT: movs r2, #0 451; CHECK-NEXT: orrs r0, r1 452; CHECK-NEXT: csetm r1, eq 453; CHECK-NEXT: movs r0, #0 454; CHECK-NEXT: bfi r2, r1, #0, #8 455; CHECK-NEXT: vmov r1, r3, d1 456; CHECK-NEXT: vmov.i32 q0, #0x0 457; CHECK-NEXT: orrs r1, r3 458; CHECK-NEXT: csetm r1, eq 459; CHECK-NEXT: bfi r2, r1, #8, #8 460; CHECK-NEXT: vmsr p0, r2 461; CHECK-NEXT: vmov r2, s4 462; CHECK-NEXT: vpsel q0, q0, q2 463; CHECK-NEXT: vmov r1, s0 464; CHECK-NEXT: cmp r2, #0 465; CHECK-NEXT: cset r2, ne 466; CHECK-NEXT: cmp r1, #0 467; CHECK-NEXT: csel r12, zr, r2, eq 468; CHECK-NEXT: vmov r2, s8 469; CHECK-NEXT: asrs r3, r1, #31 470; CHECK-NEXT: subs r1, r1, r2 471; CHECK-NEXT: sbcs.w r1, r3, r2, asr #31 472; CHECK-NEXT: vmov r2, s6 473; CHECK-NEXT: csel r1, zr, r12, ge 474; CHECK-NEXT: rsbs r1, r1, #0 475; CHECK-NEXT: bfi r0, r1, #0, #8 476; CHECK-NEXT: vmov r1, s2 477; CHECK-NEXT: cmp r2, #0 478; CHECK-NEXT: cset r2, ne 479; CHECK-NEXT: cmp r1, #0 480; CHECK-NEXT: csel r12, zr, r2, eq 481; CHECK-NEXT: vmov r2, s10 482; CHECK-NEXT: asrs r3, r1, #31 483; CHECK-NEXT: subs r1, r1, r2 484; CHECK-NEXT: sbcs.w r1, r3, r2, asr #31 485; CHECK-NEXT: csel r1, zr, r12, ge 486; CHECK-NEXT: rsbs r1, r1, #0 487; CHECK-NEXT: bfi r0, r1, #8, #8 488; CHECK-NEXT: vmsr p0, r0 489; CHECK-NEXT: vpsel q0, q2, q0 490; CHECK-NEXT: bx lr 491 %a4 = icmp eq <2 x i64> %a, zeroinitializer 492 %a5 = select <2 x i1> %a4, <2 x i32> zeroinitializer, <2 x i32> %c 493 %a6 = icmp ne <2 x i32> %b, zeroinitializer 494 %a7 = icmp slt <2 x i32> %a5, %c 495 %a8 = icmp ne <2 x i32> %a5, zeroinitializer 496 %a9 = and <2 x i1> %a6, %a8 497 %a10 = and <2 x i1> %a7, %a9 498 %a11 = select <2 x i1> %a10, <2 x i32> %c, <2 x i32> %a5 499 ret <2 x i32> %a11 500} 501