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 --check-prefix=CHECK --check-prefix=CHECKLE 3; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKLE 4; RUN: llc -mtriple=thumbebv8.1m.main-none-none-eabi -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKBE 5 6define arm_aapcs_vfpcc <16 x i8> @mov_int8_1() { 7; CHECK-LABEL: mov_int8_1: 8; CHECK: @ %bb.0: @ %entry 9; CHECK-NEXT: vmov.i8 q0, #0x1 10; CHECK-NEXT: bx lr 11entry: 12 ret <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 13} 14 15define arm_aapcs_vfpcc <16 x i8> @xor_int8_1(<16 x i8> %a) { 16; CHECKLE-LABEL: xor_int8_1: 17; CHECKLE: @ %bb.0: @ %entry 18; CHECKLE-NEXT: vmov.i8 q1, #0x1 19; CHECKLE-NEXT: veor q0, q0, q1 20; CHECKLE-NEXT: bx lr 21; 22; CHECKBE-LABEL: xor_int8_1: 23; CHECKBE: @ %bb.0: @ %entry 24; CHECKBE-NEXT: vmov.i8 q1, #0x1 25; CHECKBE-NEXT: vrev64.8 q2, q0 26; CHECKBE-NEXT: veor q1, q2, q1 27; CHECKBE-NEXT: vrev64.8 q0, q1 28; CHECKBE-NEXT: bx lr 29entry: 30 %b = xor <16 x i8> %a, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 31 ret <16 x i8> %b 32} 33 34define arm_aapcs_vfpcc <16 x i8> @mov_int8_m1() { 35; CHECK-LABEL: mov_int8_m1: 36; CHECK: @ %bb.0: @ %entry 37; CHECK-NEXT: vmov.i8 q0, #0xff 38; CHECK-NEXT: bx lr 39entry: 40 ret <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> 41} 42 43define arm_aapcs_vfpcc <16 x i8> @xor_int8_m1(<16 x i8> %a) { 44; CHECKLE-LABEL: xor_int8_m1: 45; CHECKLE: @ %bb.0: @ %entry 46; CHECKLE-NEXT: vmvn q0, q0 47; CHECKLE-NEXT: bx lr 48; 49; CHECKBE-LABEL: xor_int8_m1: 50; CHECKBE: @ %bb.0: @ %entry 51; CHECKBE-NEXT: vrev64.8 q1, q0 52; CHECKBE-NEXT: vmvn q1, q1 53; CHECKBE-NEXT: vrev64.8 q0, q1 54; CHECKBE-NEXT: bx lr 55entry: 56 %b = xor <16 x i8> %a, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> 57 ret <16 x i8> %b 58} 59 60; This has 0x01020304 or 0x04030201 vdup.32'd to q reg depending on endianness. 61; The big endian is different as there is an implicit vrev64.8 out of the 62; function, which gets constant folded away. 63define arm_aapcs_vfpcc <16 x i8> @mov_int8_1234() { 64; CHECKLE-LABEL: mov_int8_1234: 65; CHECKLE: @ %bb.0: @ %entry 66; CHECKLE-NEXT: movw r0, #513 67; CHECKLE-NEXT: movt r0, #1027 68; CHECKLE-NEXT: vdup.32 q0, r0 69; CHECKLE-NEXT: bx lr 70; 71; CHECKBE-LABEL: mov_int8_1234: 72; CHECKBE: @ %bb.0: @ %entry 73; CHECKBE-NEXT: movw r0, #772 74; CHECKBE-NEXT: movt r0, #258 75; CHECKBE-NEXT: vdup.32 q0, r0 76; CHECKBE-NEXT: bx lr 77entry: 78 ret <16 x i8> <i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4> 79} 80 81define arm_aapcs_vfpcc <16 x i8> @xor_int8_1234(<16 x i8> %a) { 82; CHECKLE-LABEL: xor_int8_1234: 83; CHECKLE: @ %bb.0: @ %entry 84; CHECKLE-NEXT: movw r0, #513 85; CHECKLE-NEXT: movt r0, #1027 86; CHECKLE-NEXT: vdup.32 q1, r0 87; CHECKLE-NEXT: veor q0, q0, q1 88; CHECKLE-NEXT: bx lr 89; 90; CHECKBE-LABEL: xor_int8_1234: 91; CHECKBE: @ %bb.0: @ %entry 92; CHECKBE-NEXT: movw r0, #513 93; CHECKBE-NEXT: vrev64.8 q1, q0 94; CHECKBE-NEXT: movt r0, #1027 95; CHECKBE-NEXT: vdup.32 q0, r0 96; CHECKBE-NEXT: veor q1, q1, q0 97; CHECKBE-NEXT: vrev64.8 q0, q1 98; CHECKBE-NEXT: bx lr 99entry: 100 %b = xor <16 x i8> %a, <i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4> 101 ret <16 x i8> %b 102} 103 104define arm_aapcs_vfpcc <16 x i8> @mov_int8_32() { 105; CHECKLE-LABEL: mov_int8_32: 106; CHECKLE: @ %bb.0: @ %entry 107; CHECKLE-NEXT: vmov.i32 q0, #0x1 108; CHECKLE-NEXT: bx lr 109; 110; CHECKBE-LABEL: mov_int8_32: 111; CHECKBE: @ %bb.0: @ %entry 112; CHECKBE-NEXT: vmov.i32 q0, #0x1000000 113; CHECKBE-NEXT: bx lr 114entry: 115 ret <16 x i8> <i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0> 116} 117 118define arm_aapcs_vfpcc <16 x i8> @xor_int8_32(<16 x i8> %a) { 119; CHECKLE-LABEL: xor_int8_32: 120; CHECKLE: @ %bb.0: @ %entry 121; CHECKLE-NEXT: vmov.i32 q1, #0x1 122; CHECKLE-NEXT: veor q0, q0, q1 123; CHECKLE-NEXT: bx lr 124; 125; CHECKBE-LABEL: xor_int8_32: 126; CHECKBE: @ %bb.0: @ %entry 127; CHECKBE-NEXT: vmov.i32 q1, #0x1 128; CHECKBE-NEXT: vrev64.8 q2, q0 129; CHECKBE-NEXT: veor q1, q2, q1 130; CHECKBE-NEXT: vrev64.8 q0, q1 131; CHECKBE-NEXT: bx lr 132entry: 133 %b = xor <16 x i8> %a, <i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0> 134 ret <16 x i8> %b 135} 136 137define arm_aapcs_vfpcc <16 x i8> @mov_int8_64() { 138; CHECKLE-LABEL: mov_int8_64: 139; CHECKLE: @ %bb.0: @ %entry 140; CHECKLE-NEXT: vmov.i64 q0, #0xffff00ffff0000ff 141; CHECKLE-NEXT: bx lr 142; 143; CHECKBE-LABEL: mov_int8_64: 144; CHECKBE: @ %bb.0: @ %entry 145; CHECKBE-NEXT: vmov.i64 q0, #0xff0000ffff00ffff 146; CHECKBE-NEXT: bx lr 147entry: 148 ret <16 x i8> <i8 255, i8 0, i8 0, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 0, i8 255, i8 255, i8 0, i8 255, i8 255> 149} 150 151define arm_aapcs_vfpcc <16 x i8> @xor_int8_64(<16 x i8> %a) { 152; CHECKLE-LABEL: xor_int8_64: 153; CHECKLE: @ %bb.0: @ %entry 154; CHECKLE-NEXT: vmov.i64 q1, #0xffff00ffff0000ff 155; CHECKLE-NEXT: veor q0, q0, q1 156; CHECKLE-NEXT: bx lr 157; 158; CHECKBE-LABEL: xor_int8_64: 159; CHECKBE: @ %bb.0: @ %entry 160; CHECKBE-NEXT: vmov.i64 q1, #0xffff00ffff0000ff 161; CHECKBE-NEXT: vrev64.8 q2, q0 162; CHECKBE-NEXT: veor q1, q2, q1 163; CHECKBE-NEXT: vrev64.8 q0, q1 164; CHECKBE-NEXT: bx lr 165entry: 166 %b = xor <16 x i8> %a, <i8 255, i8 0, i8 0, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 0, i8 255, i8 255, i8 0, i8 255, i8 255> 167 ret <16 x i8> %b 168} 169 170define arm_aapcs_vfpcc <8 x i16> @mov_int16_1() { 171; CHECK-LABEL: mov_int16_1: 172; CHECK: @ %bb.0: @ %entry 173; CHECK-NEXT: vmov.i16 q0, #0x1 174; CHECK-NEXT: bx lr 175entry: 176 ret <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 177} 178 179define arm_aapcs_vfpcc <8 x i16> @xor_int16_1(<8 x i16> %a) { 180; CHECKLE-LABEL: xor_int16_1: 181; CHECKLE: @ %bb.0: @ %entry 182; CHECKLE-NEXT: vmov.i16 q1, #0x1 183; CHECKLE-NEXT: veor q0, q0, q1 184; CHECKLE-NEXT: bx lr 185; 186; CHECKBE-LABEL: xor_int16_1: 187; CHECKBE: @ %bb.0: @ %entry 188; CHECKBE-NEXT: vmov.i16 q1, #0x1 189; CHECKBE-NEXT: vrev64.16 q2, q0 190; CHECKBE-NEXT: veor q1, q2, q1 191; CHECKBE-NEXT: vrev64.16 q0, q1 192; CHECKBE-NEXT: bx lr 193entry: 194 %b = xor <8 x i16> %a, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 195 ret <8 x i16> %b 196} 197 198define arm_aapcs_vfpcc <8 x i16> @mov_int16_m1() { 199; CHECK-LABEL: mov_int16_m1: 200; CHECK: @ %bb.0: @ %entry 201; CHECK-NEXT: vmov.i8 q0, #0xff 202; CHECK-NEXT: bx lr 203entry: 204 ret <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1> 205} 206 207define arm_aapcs_vfpcc <8 x i16> @xor_int16_m1(<8 x i16> %a) { 208; CHECKLE-LABEL: xor_int16_m1: 209; CHECKLE: @ %bb.0: @ %entry 210; CHECKLE-NEXT: vmvn q0, q0 211; CHECKLE-NEXT: bx lr 212; 213; CHECKBE-LABEL: xor_int16_m1: 214; CHECKBE: @ %bb.0: @ %entry 215; CHECKBE-NEXT: vmov.i8 q1, #0xff 216; CHECKBE-NEXT: vrev64.16 q2, q0 217; CHECKBE-NEXT: veor q1, q2, q1 218; CHECKBE-NEXT: vrev64.16 q0, q1 219; CHECKBE-NEXT: bx lr 220entry: 221 %b = xor <8 x i16> %a, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1> 222 ret <8 x i16> %b 223} 224 225define arm_aapcs_vfpcc <8 x i16> @mov_int16_256() { 226; CHECK-LABEL: mov_int16_256: 227; CHECK: @ %bb.0: @ %entry 228; CHECK-NEXT: vmov.i16 q0, #0x100 229; CHECK-NEXT: bx lr 230entry: 231 ret <8 x i16> <i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256> 232} 233 234define arm_aapcs_vfpcc <8 x i16> @xor_int16_256(<8 x i16> %a) { 235; CHECKLE-LABEL: xor_int16_256: 236; CHECKLE: @ %bb.0: @ %entry 237; CHECKLE-NEXT: vmov.i16 q1, #0x100 238; CHECKLE-NEXT: veor q0, q0, q1 239; CHECKLE-NEXT: bx lr 240; 241; CHECKBE-LABEL: xor_int16_256: 242; CHECKBE: @ %bb.0: @ %entry 243; CHECKBE-NEXT: vmov.i16 q1, #0x100 244; CHECKBE-NEXT: vrev64.16 q2, q0 245; CHECKBE-NEXT: veor q1, q2, q1 246; CHECKBE-NEXT: vrev64.16 q0, q1 247; CHECKBE-NEXT: bx lr 248entry: 249 %b = xor <8 x i16> %a, <i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256, i16 256> 250 ret <8 x i16> %b 251} 252 253define arm_aapcs_vfpcc <8 x i16> @mov_int16_257() { 254; CHECK-LABEL: mov_int16_257: 255; CHECK: @ %bb.0: @ %entry 256; CHECK-NEXT: vmov.i8 q0, #0x1 257; CHECK-NEXT: bx lr 258entry: 259 ret <8 x i16> <i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257> 260} 261 262define arm_aapcs_vfpcc <8 x i16> @xor_int16_257(<8 x i16> %a) { 263; CHECKLE-LABEL: xor_int16_257: 264; CHECKLE: @ %bb.0: @ %entry 265; CHECKLE-NEXT: vmov.i8 q1, #0x1 266; CHECKLE-NEXT: veor q0, q0, q1 267; CHECKLE-NEXT: bx lr 268; 269; CHECKBE-LABEL: xor_int16_257: 270; CHECKBE: @ %bb.0: @ %entry 271; CHECKBE-NEXT: vmov.i8 q1, #0x1 272; CHECKBE-NEXT: vrev64.16 q2, q0 273; CHECKBE-NEXT: veor q1, q2, q1 274; CHECKBE-NEXT: vrev64.16 q0, q1 275; CHECKBE-NEXT: bx lr 276entry: 277 %b = xor <8 x i16> %a, <i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257, i16 257> 278 ret <8 x i16> %b 279} 280 281define arm_aapcs_vfpcc <8 x i16> @mov_int16_258() { 282; CHECK-LABEL: mov_int16_258: 283; CHECK: @ %bb.0: @ %entry 284; CHECK-NEXT: mov.w r0, #258 285; CHECK-NEXT: vdup.16 q0, r0 286; CHECK-NEXT: bx lr 287entry: 288 ret <8 x i16> <i16 258, i16 258, i16 258, i16 258, i16 258, i16 258, i16 258, i16 258> 289} 290 291define arm_aapcs_vfpcc <8 x i16> @xor_int16_258(<8 x i16> %a) { 292; CHECKLE-LABEL: xor_int16_258: 293; CHECKLE: @ %bb.0: @ %entry 294; CHECKLE-NEXT: mov.w r0, #258 295; CHECKLE-NEXT: vdup.16 q1, r0 296; CHECKLE-NEXT: veor q0, q0, q1 297; CHECKLE-NEXT: bx lr 298; 299; CHECKBE-LABEL: xor_int16_258: 300; CHECKBE: @ %bb.0: @ %entry 301; CHECKBE-NEXT: mov.w r0, #258 302; CHECKBE-NEXT: vrev64.16 q2, q0 303; CHECKBE-NEXT: vdup.16 q1, r0 304; CHECKBE-NEXT: veor q1, q2, q1 305; CHECKBE-NEXT: vrev64.16 q0, q1 306; CHECKBE-NEXT: bx lr 307entry: 308 %b = xor <8 x i16> %a, <i16 258, i16 258, i16 258, i16 258, i16 258, i16 258, i16 258, i16 258> 309 ret <8 x i16> %b 310} 311 312define arm_aapcs_vfpcc <8 x i16> @mov_int16_32() { 313; CHECKLE-LABEL: mov_int16_32: 314; CHECKLE: @ %bb.0: @ %entry 315; CHECKLE-NEXT: movw r0, #257 316; CHECKLE-NEXT: movt r0, #256 317; CHECKLE-NEXT: vdup.32 q0, r0 318; CHECKLE-NEXT: bx lr 319; 320; CHECKBE-LABEL: mov_int16_32: 321; CHECKBE: @ %bb.0: @ %entry 322; CHECKBE-NEXT: movw r0, #256 323; CHECKBE-NEXT: movt r0, #257 324; CHECKBE-NEXT: vdup.32 q0, r0 325; CHECKBE-NEXT: bx lr 326entry: 327 ret <8 x i16> <i16 257, i16 256, i16 257, i16 256, i16 257, i16 256, i16 257, i16 256> 328} 329 330define arm_aapcs_vfpcc <8 x i16> @xor_int16_32(<8 x i16> %a) { 331; CHECKLE-LABEL: xor_int16_32: 332; CHECKLE: @ %bb.0: @ %entry 333; CHECKLE-NEXT: movw r0, #257 334; CHECKLE-NEXT: movt r0, #256 335; CHECKLE-NEXT: vdup.32 q1, r0 336; CHECKLE-NEXT: veor q0, q0, q1 337; CHECKLE-NEXT: bx lr 338; 339; CHECKBE-LABEL: xor_int16_32: 340; CHECKBE: @ %bb.0: @ %entry 341; CHECKBE-NEXT: movw r0, #257 342; CHECKBE-NEXT: vrev64.16 q1, q0 343; CHECKBE-NEXT: movt r0, #256 344; CHECKBE-NEXT: vdup.32 q0, r0 345; CHECKBE-NEXT: veor q1, q1, q0 346; CHECKBE-NEXT: vrev64.16 q0, q1 347; CHECKBE-NEXT: bx lr 348entry: 349 %b = xor <8 x i16> %a, <i16 257, i16 256, i16 257, i16 256, i16 257, i16 256, i16 257, i16 256> 350 ret <8 x i16> %b 351} 352 353define arm_aapcs_vfpcc <8 x i16> @mov_int16_64() { 354; CHECK-LABEL: mov_int16_64: 355; CHECK: @ %bb.0: @ %entry 356; CHECK-NEXT: vmov.i64 q0, #0xff0000000000ff 357; CHECK-NEXT: bx lr 358entry: 359 ret <8 x i16> <i16 255, i16 0, i16 0, i16 255, i16 255, i16 0, i16 0, i16 255> 360} 361 362define arm_aapcs_vfpcc <8 x i16> @xor_int16_64(<8 x i16> %a) { 363; CHECKLE-LABEL: xor_int16_64: 364; CHECKLE: @ %bb.0: @ %entry 365; CHECKLE-NEXT: vmov.i64 q1, #0xff0000000000ff 366; CHECKLE-NEXT: veor q0, q0, q1 367; CHECKLE-NEXT: bx lr 368; 369; CHECKBE-LABEL: xor_int16_64: 370; CHECKBE: @ %bb.0: @ %entry 371; CHECKBE-NEXT: vmov.i64 q1, #0xff0000000000ff 372; CHECKBE-NEXT: vrev64.16 q2, q0 373; CHECKBE-NEXT: veor q1, q2, q1 374; CHECKBE-NEXT: vrev64.16 q0, q1 375; CHECKBE-NEXT: bx lr 376entry: 377 %b = xor <8 x i16> %a, <i16 255, i16 0, i16 0, i16 255, i16 255, i16 0, i16 0, i16 255> 378 ret <8 x i16> %b 379} 380 381define arm_aapcs_vfpcc <4 x i32> @mov_int32_1() { 382; CHECK-LABEL: mov_int32_1: 383; CHECK: @ %bb.0: @ %entry 384; CHECK-NEXT: vmov.i32 q0, #0x1 385; CHECK-NEXT: bx lr 386entry: 387 ret <4 x i32> <i32 1, i32 1, i32 1, i32 1> 388} 389 390define arm_aapcs_vfpcc <4 x i32> @xor_int32_1(<4 x i32> %a) { 391; CHECKLE-LABEL: xor_int32_1: 392; CHECKLE: @ %bb.0: @ %entry 393; CHECKLE-NEXT: vmov.i32 q1, #0x1 394; CHECKLE-NEXT: veor q0, q0, q1 395; CHECKLE-NEXT: bx lr 396; 397; CHECKBE-LABEL: xor_int32_1: 398; CHECKBE: @ %bb.0: @ %entry 399; CHECKBE-NEXT: vmov.i32 q1, #0x1 400; CHECKBE-NEXT: vrev64.32 q2, q0 401; CHECKBE-NEXT: veor q1, q2, q1 402; CHECKBE-NEXT: vrev64.32 q0, q1 403; CHECKBE-NEXT: bx lr 404entry: 405 %b = xor <4 x i32> %a, <i32 1, i32 1, i32 1, i32 1> 406 ret <4 x i32> %b 407} 408 409define arm_aapcs_vfpcc <4 x i32> @mov_int32_256() { 410; CHECK-LABEL: mov_int32_256: 411; CHECK: @ %bb.0: @ %entry 412; CHECK-NEXT: vmov.i32 q0, #0x100 413; CHECK-NEXT: bx lr 414entry: 415 ret <4 x i32> <i32 256, i32 256, i32 256, i32 256> 416} 417 418define arm_aapcs_vfpcc <4 x i32> @xor_int32_256(<4 x i32> %a) { 419; CHECKLE-LABEL: xor_int32_256: 420; CHECKLE: @ %bb.0: @ %entry 421; CHECKLE-NEXT: vmov.i32 q1, #0x100 422; CHECKLE-NEXT: veor q0, q0, q1 423; CHECKLE-NEXT: bx lr 424; 425; CHECKBE-LABEL: xor_int32_256: 426; CHECKBE: @ %bb.0: @ %entry 427; CHECKBE-NEXT: vmov.i32 q1, #0x100 428; CHECKBE-NEXT: vrev64.32 q2, q0 429; CHECKBE-NEXT: veor q1, q2, q1 430; CHECKBE-NEXT: vrev64.32 q0, q1 431; CHECKBE-NEXT: bx lr 432entry: 433 %b = xor <4 x i32> %a, <i32 256, i32 256, i32 256, i32 256> 434 ret <4 x i32> %b 435} 436 437define arm_aapcs_vfpcc <4 x i32> @mov_int32_65536() { 438; CHECK-LABEL: mov_int32_65536: 439; CHECK: @ %bb.0: @ %entry 440; CHECK-NEXT: vmov.i32 q0, #0x10000 441; CHECK-NEXT: bx lr 442entry: 443 ret <4 x i32> <i32 65536, i32 65536, i32 65536, i32 65536> 444} 445 446define arm_aapcs_vfpcc <4 x i32> @xor_int32_65536(<4 x i32> %a) { 447; CHECKLE-LABEL: xor_int32_65536: 448; CHECKLE: @ %bb.0: @ %entry 449; CHECKLE-NEXT: vmov.i32 q1, #0x10000 450; CHECKLE-NEXT: veor q0, q0, q1 451; CHECKLE-NEXT: bx lr 452; 453; CHECKBE-LABEL: xor_int32_65536: 454; CHECKBE: @ %bb.0: @ %entry 455; CHECKBE-NEXT: vmov.i32 q1, #0x10000 456; CHECKBE-NEXT: vrev64.32 q2, q0 457; CHECKBE-NEXT: veor q1, q2, q1 458; CHECKBE-NEXT: vrev64.32 q0, q1 459; CHECKBE-NEXT: bx lr 460entry: 461 %b = xor <4 x i32> %a, <i32 65536, i32 65536, i32 65536, i32 65536> 462 ret <4 x i32> %b 463} 464 465define arm_aapcs_vfpcc <4 x i32> @mov_int32_16777216() { 466; CHECK-LABEL: mov_int32_16777216: 467; CHECK: @ %bb.0: @ %entry 468; CHECK-NEXT: vmov.i32 q0, #0x1000000 469; CHECK-NEXT: bx lr 470entry: 471 ret <4 x i32> <i32 16777216, i32 16777216, i32 16777216, i32 16777216> 472} 473 474define arm_aapcs_vfpcc <4 x i32> @xor_int32_16777216(<4 x i32> %a) { 475; CHECKLE-LABEL: xor_int32_16777216: 476; CHECKLE: @ %bb.0: @ %entry 477; CHECKLE-NEXT: vmov.i32 q1, #0x1000000 478; CHECKLE-NEXT: veor q0, q0, q1 479; CHECKLE-NEXT: bx lr 480; 481; CHECKBE-LABEL: xor_int32_16777216: 482; CHECKBE: @ %bb.0: @ %entry 483; CHECKBE-NEXT: vmov.i32 q1, #0x1000000 484; CHECKBE-NEXT: vrev64.32 q2, q0 485; CHECKBE-NEXT: veor q1, q2, q1 486; CHECKBE-NEXT: vrev64.32 q0, q1 487; CHECKBE-NEXT: bx lr 488entry: 489 %b = xor <4 x i32> %a, <i32 16777216, i32 16777216, i32 16777216, i32 16777216> 490 ret <4 x i32> %b 491} 492 493define arm_aapcs_vfpcc <4 x i32> @mov_int32_16777217() { 494; CHECK-LABEL: mov_int32_16777217: 495; CHECK: @ %bb.0: @ %entry 496; CHECK-NEXT: movs r0, #1 497; CHECK-NEXT: movt r0, #256 498; CHECK-NEXT: vdup.32 q0, r0 499; CHECK-NEXT: bx lr 500entry: 501 ret <4 x i32> <i32 16777217, i32 16777217, i32 16777217, i32 16777217> 502} 503 504define arm_aapcs_vfpcc <4 x i32> @xor_int32_16777217(<4 x i32> %a) { 505; CHECKLE-LABEL: xor_int32_16777217: 506; CHECKLE: @ %bb.0: @ %entry 507; CHECKLE-NEXT: movs r0, #1 508; CHECKLE-NEXT: movt r0, #256 509; CHECKLE-NEXT: vdup.32 q1, r0 510; CHECKLE-NEXT: veor q0, q0, q1 511; CHECKLE-NEXT: bx lr 512; 513; CHECKBE-LABEL: xor_int32_16777217: 514; CHECKBE: @ %bb.0: @ %entry 515; CHECKBE-NEXT: movs r0, #1 516; CHECKBE-NEXT: vrev64.32 q1, q0 517; CHECKBE-NEXT: movt r0, #256 518; CHECKBE-NEXT: vdup.32 q0, r0 519; CHECKBE-NEXT: veor q1, q1, q0 520; CHECKBE-NEXT: vrev64.32 q0, q1 521; CHECKBE-NEXT: bx lr 522entry: 523 %b = xor <4 x i32> %a, <i32 16777217, i32 16777217, i32 16777217, i32 16777217> 524 ret <4 x i32> %b 525} 526 527define arm_aapcs_vfpcc <4 x i32> @mov_int32_17919() { 528; CHECK-LABEL: mov_int32_17919: 529; CHECK: @ %bb.0: @ %entry 530; CHECK-NEXT: vmov.i32 q0, #0x45ff 531; CHECK-NEXT: bx lr 532entry: 533 ret <4 x i32> <i32 17919, i32 17919, i32 17919, i32 17919> 534} 535 536define arm_aapcs_vfpcc <4 x i32> @xor_int32_17919(<4 x i32> %a) { 537; CHECKLE-LABEL: xor_int32_17919: 538; CHECKLE: @ %bb.0: @ %entry 539; CHECKLE-NEXT: vmov.i32 q1, #0x45ff 540; CHECKLE-NEXT: veor q0, q0, q1 541; CHECKLE-NEXT: bx lr 542; 543; CHECKBE-LABEL: xor_int32_17919: 544; CHECKBE: @ %bb.0: @ %entry 545; CHECKBE-NEXT: vmov.i32 q1, #0x45ff 546; CHECKBE-NEXT: vrev64.32 q2, q0 547; CHECKBE-NEXT: veor q1, q2, q1 548; CHECKBE-NEXT: vrev64.32 q0, q1 549; CHECKBE-NEXT: bx lr 550entry: 551 %b = xor <4 x i32> %a, <i32 17919, i32 17919, i32 17919, i32 17919> 552 ret <4 x i32> %b 553} 554 555define arm_aapcs_vfpcc <4 x i32> @mov_int32_4587519() { 556; CHECK-LABEL: mov_int32_4587519: 557; CHECK: @ %bb.0: @ %entry 558; CHECK-NEXT: vmov.i32 q0, #0x45ffff 559; CHECK-NEXT: bx lr 560entry: 561 ret <4 x i32> <i32 4587519, i32 4587519, i32 4587519, i32 4587519> 562} 563 564define arm_aapcs_vfpcc <4 x i32> @xor_int32_4587519(<4 x i32> %a) { 565; CHECKLE-LABEL: xor_int32_4587519: 566; CHECKLE: @ %bb.0: @ %entry 567; CHECKLE-NEXT: vmov.i32 q1, #0x45ffff 568; CHECKLE-NEXT: veor q0, q0, q1 569; CHECKLE-NEXT: bx lr 570; 571; CHECKBE-LABEL: xor_int32_4587519: 572; CHECKBE: @ %bb.0: @ %entry 573; CHECKBE-NEXT: vmov.i32 q1, #0x45ffff 574; CHECKBE-NEXT: vrev64.32 q2, q0 575; CHECKBE-NEXT: veor q1, q2, q1 576; CHECKBE-NEXT: vrev64.32 q0, q1 577; CHECKBE-NEXT: bx lr 578entry: 579 %b = xor <4 x i32> %a, <i32 4587519, i32 4587519, i32 4587519, i32 4587519> 580 ret <4 x i32> %b 581} 582 583define arm_aapcs_vfpcc <4 x i32> @mov_int32_m1() { 584; CHECK-LABEL: mov_int32_m1: 585; CHECK: @ %bb.0: @ %entry 586; CHECK-NEXT: vmov.i8 q0, #0xff 587; CHECK-NEXT: bx lr 588entry: 589 ret <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1> 590} 591 592define arm_aapcs_vfpcc <4 x i32> @xor_int32_m1(<4 x i32> %a) { 593; CHECKLE-LABEL: xor_int32_m1: 594; CHECKLE: @ %bb.0: @ %entry 595; CHECKLE-NEXT: vmvn q0, q0 596; CHECKLE-NEXT: bx lr 597; 598; CHECKBE-LABEL: xor_int32_m1: 599; CHECKBE: @ %bb.0: @ %entry 600; CHECKBE-NEXT: vmov.i8 q1, #0xff 601; CHECKBE-NEXT: vrev64.32 q2, q0 602; CHECKBE-NEXT: veor q1, q2, q1 603; CHECKBE-NEXT: vrev64.32 q0, q1 604; CHECKBE-NEXT: bx lr 605entry: 606 %b = xor <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1> 607 ret <4 x i32> %b 608} 609 610define arm_aapcs_vfpcc <4 x i32> @mov_int32_4294901760() { 611; CHECK-LABEL: mov_int32_4294901760: 612; CHECK: @ %bb.0: @ %entry 613; CHECK-NEXT: vmvn.i32 q0, #0xffff 614; CHECK-NEXT: bx lr 615entry: 616 ret <4 x i32> <i32 4294901760, i32 4294901760, i32 4294901760, i32 4294901760> 617} 618 619define arm_aapcs_vfpcc <4 x i32> @xor_int32_4294901760(<4 x i32> %a) { 620; CHECKLE-LABEL: xor_int32_4294901760: 621; CHECKLE: @ %bb.0: @ %entry 622; CHECKLE-NEXT: vmvn.i32 q1, #0xffff 623; CHECKLE-NEXT: veor q0, q0, q1 624; CHECKLE-NEXT: bx lr 625; 626; CHECKBE-LABEL: xor_int32_4294901760: 627; CHECKBE: @ %bb.0: @ %entry 628; CHECKBE-NEXT: vmvn.i32 q1, #0xffff 629; CHECKBE-NEXT: vrev64.32 q2, q0 630; CHECKBE-NEXT: veor q1, q2, q1 631; CHECKBE-NEXT: vrev64.32 q0, q1 632; CHECKBE-NEXT: bx lr 633entry: 634 %b = xor <4 x i32> %a, <i32 4294901760, i32 4294901760, i32 4294901760, i32 4294901760> 635 ret <4 x i32> %b 636} 637 638define arm_aapcs_vfpcc <4 x i32> @mov_int32_4278190335() { 639; CHECK-LABEL: mov_int32_4278190335: 640; CHECK: @ %bb.0: @ %entry 641; CHECK-NEXT: movs r0, #255 642; CHECK-NEXT: movt r0, #65280 643; CHECK-NEXT: vdup.32 q0, r0 644; CHECK-NEXT: bx lr 645entry: 646 ret <4 x i32> <i32 4278190335, i32 4278190335, i32 4278190335, i32 4278190335> 647} 648 649define arm_aapcs_vfpcc <4 x i32> @xor_int32_4278190335(<4 x i32> %a) { 650; CHECKLE-LABEL: xor_int32_4278190335: 651; CHECKLE: @ %bb.0: @ %entry 652; CHECKLE-NEXT: movs r0, #255 653; CHECKLE-NEXT: movt r0, #65280 654; CHECKLE-NEXT: vdup.32 q1, r0 655; CHECKLE-NEXT: veor q0, q0, q1 656; CHECKLE-NEXT: bx lr 657; 658; CHECKBE-LABEL: xor_int32_4278190335: 659; CHECKBE: @ %bb.0: @ %entry 660; CHECKBE-NEXT: movs r0, #255 661; CHECKBE-NEXT: vrev64.32 q1, q0 662; CHECKBE-NEXT: movt r0, #65280 663; CHECKBE-NEXT: vdup.32 q0, r0 664; CHECKBE-NEXT: veor q1, q1, q0 665; CHECKBE-NEXT: vrev64.32 q0, q1 666; CHECKBE-NEXT: bx lr 667entry: 668 %b = xor <4 x i32> %a, <i32 4278190335, i32 4278190335, i32 4278190335, i32 4278190335> 669 ret <4 x i32> %b 670} 671 672define arm_aapcs_vfpcc <4 x i32> @mov_int32_4278255615() { 673; CHECK-LABEL: mov_int32_4278255615: 674; CHECK: @ %bb.0: @ %entry 675; CHECK-NEXT: vmvn.i32 q0, #0xff0000 676; CHECK-NEXT: bx lr 677entry: 678 ret <4 x i32> <i32 4278255615, i32 4278255615, i32 4278255615, i32 4278255615> 679} 680 681define arm_aapcs_vfpcc <4 x i32> @xor_int32_4278255615(<4 x i32> %a) { 682; CHECKLE-LABEL: xor_int32_4278255615: 683; CHECKLE: @ %bb.0: @ %entry 684; CHECKLE-NEXT: vmvn.i32 q1, #0xff0000 685; CHECKLE-NEXT: veor q0, q0, q1 686; CHECKLE-NEXT: bx lr 687; 688; CHECKBE-LABEL: xor_int32_4278255615: 689; CHECKBE: @ %bb.0: @ %entry 690; CHECKBE-NEXT: vmvn.i32 q1, #0xff0000 691; CHECKBE-NEXT: vrev64.32 q2, q0 692; CHECKBE-NEXT: veor q1, q2, q1 693; CHECKBE-NEXT: vrev64.32 q0, q1 694; CHECKBE-NEXT: bx lr 695entry: 696 %b = xor <4 x i32> %a, <i32 4278255615, i32 4278255615, i32 4278255615, i32 4278255615> 697 ret <4 x i32> %b 698} 699 700define arm_aapcs_vfpcc <4 x i32> @mov_int32_16908546() { 701; CHECK-LABEL: mov_int32_16908546: 702; CHECK: @ %bb.0: @ %entry 703; CHECK-NEXT: mov.w r0, #258 704; CHECK-NEXT: vdup.16 q0, r0 705; CHECK-NEXT: bx lr 706entry: 707 ret <4 x i32> <i32 16908546, i32 16908546, i32 16908546, i32 16908546> 708} 709 710define arm_aapcs_vfpcc <4 x i32> @xor_int32_16908546(<4 x i32> %a) { 711; CHECKLE-LABEL: xor_int32_16908546: 712; CHECKLE: @ %bb.0: @ %entry 713; CHECKLE-NEXT: mov.w r0, #258 714; CHECKLE-NEXT: vdup.16 q1, r0 715; CHECKLE-NEXT: veor q0, q0, q1 716; CHECKLE-NEXT: bx lr 717; 718; CHECKBE-LABEL: xor_int32_16908546: 719; CHECKBE: @ %bb.0: @ %entry 720; CHECKBE-NEXT: mov.w r0, #258 721; CHECKBE-NEXT: vrev64.32 q2, q0 722; CHECKBE-NEXT: vdup.16 q1, r0 723; CHECKBE-NEXT: veor q1, q2, q1 724; CHECKBE-NEXT: vrev64.32 q0, q1 725; CHECKBE-NEXT: bx lr 726entry: 727 %b = xor <4 x i32> %a, <i32 16908546, i32 16908546, i32 16908546, i32 16908546> 728 ret <4 x i32> %b 729} 730 731define arm_aapcs_vfpcc <4 x i32> @mov_int32_64() { 732; CHECKLE-LABEL: mov_int32_64: 733; CHECKLE: @ %bb.0: @ %entry 734; CHECKLE-NEXT: vmov.i64 q0, #0xff00ffff00ff00 735; CHECKLE-NEXT: bx lr 736; 737; CHECKBE-LABEL: mov_int32_64: 738; CHECKBE: @ %bb.0: @ %entry 739; CHECKBE-NEXT: vmov.i64 q0, #0xff00ff0000ff00ff 740; CHECKBE-NEXT: bx lr 741entry: 742 ret <4 x i32> <i32 u0xff00ff00, i32 u0x00ff00ff, i32 u0xff00ff00, i32 u0x00ff00ff> 743} 744 745define arm_aapcs_vfpcc <4 x i32> @xor_int32_64(<4 x i32> %a) { 746; CHECKLE-LABEL: xor_int32_64: 747; CHECKLE: @ %bb.0: @ %entry 748; CHECKLE-NEXT: vmov.i64 q1, #0xff00ffff00ff00 749; CHECKLE-NEXT: veor q0, q0, q1 750; CHECKLE-NEXT: bx lr 751; 752; CHECKBE-LABEL: xor_int32_64: 753; CHECKBE: @ %bb.0: @ %entry 754; CHECKBE-NEXT: vmov.i64 q1, #0xff00ffff00ff00 755; CHECKBE-NEXT: vrev64.32 q2, q0 756; CHECKBE-NEXT: veor q1, q2, q1 757; CHECKBE-NEXT: vrev64.32 q0, q1 758; CHECKBE-NEXT: bx lr 759entry: 760 %b = xor <4 x i32> %a, <i32 u0xff00ff00, i32 u0x00ff00ff, i32 u0xff00ff00, i32 u0x00ff00ff> 761 ret <4 x i32> %b 762} 763 764define arm_aapcs_vfpcc <2 x i64> @mov_int64_1() { 765; CHECKLE-LABEL: mov_int64_1: 766; CHECKLE: @ %bb.0: @ %entry 767; CHECKLE-NEXT: adr r0, .LCPI50_0 768; CHECKLE-NEXT: vldrw.u32 q0, [r0] 769; CHECKLE-NEXT: bx lr 770; CHECKLE-NEXT: .p2align 4 771; CHECKLE-NEXT: @ %bb.1: 772; CHECKLE-NEXT: .LCPI50_0: 773; CHECKLE-NEXT: .long 1 @ double 4.9406564584124654E-324 774; CHECKLE-NEXT: .long 0 775; CHECKLE-NEXT: .long 1 @ double 4.9406564584124654E-324 776; CHECKLE-NEXT: .long 0 777; 778; CHECKBE-LABEL: mov_int64_1: 779; CHECKBE: @ %bb.0: @ %entry 780; CHECKBE-NEXT: adr r0, .LCPI50_0 781; CHECKBE-NEXT: vldrb.u8 q1, [r0] 782; CHECKBE-NEXT: vrev64.8 q0, q1 783; CHECKBE-NEXT: bx lr 784; CHECKBE-NEXT: .p2align 4 785; CHECKBE-NEXT: @ %bb.1: 786; CHECKBE-NEXT: .LCPI50_0: 787; CHECKBE-NEXT: .long 0 @ double 4.9406564584124654E-324 788; CHECKBE-NEXT: .long 1 789; CHECKBE-NEXT: .long 0 @ double 4.9406564584124654E-324 790; CHECKBE-NEXT: .long 1 791entry: 792 ret <2 x i64> <i64 1, i64 1> 793} 794 795define arm_aapcs_vfpcc <2 x i64> @xor_int64_1(<2 x i64> %a) { 796; CHECKLE-LABEL: xor_int64_1: 797; CHECKLE: @ %bb.0: @ %entry 798; CHECKLE-NEXT: adr r0, .LCPI51_0 799; CHECKLE-NEXT: vldrw.u32 q1, [r0] 800; CHECKLE-NEXT: veor q0, q0, q1 801; CHECKLE-NEXT: bx lr 802; CHECKLE-NEXT: .p2align 4 803; CHECKLE-NEXT: @ %bb.1: 804; CHECKLE-NEXT: .LCPI51_0: 805; CHECKLE-NEXT: .long 1 @ 0x1 806; CHECKLE-NEXT: .long 0 @ 0x0 807; CHECKLE-NEXT: .long 1 @ 0x1 808; CHECKLE-NEXT: .long 0 @ 0x0 809; 810; CHECKBE-LABEL: xor_int64_1: 811; CHECKBE: @ %bb.0: @ %entry 812; CHECKBE-NEXT: adr r0, .LCPI51_0 813; CHECKBE-NEXT: vldrb.u8 q1, [r0] 814; CHECKBE-NEXT: vrev64.8 q2, q1 815; CHECKBE-NEXT: veor q0, q0, q2 816; CHECKBE-NEXT: bx lr 817; CHECKBE-NEXT: .p2align 4 818; CHECKBE-NEXT: @ %bb.1: 819; CHECKBE-NEXT: .LCPI51_0: 820; CHECKBE-NEXT: .long 0 @ 0x0 821; CHECKBE-NEXT: .long 1 @ 0x1 822; CHECKBE-NEXT: .long 0 @ 0x0 823; CHECKBE-NEXT: .long 1 @ 0x1 824entry: 825 %b = xor <2 x i64> %a, <i64 1, i64 1> 826 ret <2 x i64> %b 827} 828 829define arm_aapcs_vfpcc <2 x i64> @mov_int64_ff() { 830; CHECK-LABEL: mov_int64_ff: 831; CHECK: @ %bb.0: @ %entry 832; CHECK-NEXT: vmov.i64 q0, #0xff 833; CHECK-NEXT: bx lr 834entry: 835 ret <2 x i64> <i64 255, i64 255> 836} 837 838define arm_aapcs_vfpcc <2 x i64> @xor_int64_ff(<2 x i64> %a) { 839; CHECKLE-LABEL: xor_int64_ff: 840; CHECKLE: @ %bb.0: @ %entry 841; CHECKLE-NEXT: vmov.i64 q1, #0xff 842; CHECKLE-NEXT: veor q0, q0, q1 843; CHECKLE-NEXT: bx lr 844; 845; CHECKBE-LABEL: xor_int64_ff: 846; CHECKBE: @ %bb.0: @ %entry 847; CHECKBE-NEXT: vmov.i64 q1, #0xff00000000 848; CHECKBE-NEXT: vrev64.32 q2, q1 849; CHECKBE-NEXT: veor q0, q0, q2 850; CHECKBE-NEXT: bx lr 851entry: 852 %b = xor <2 x i64> %a, <i64 255, i64 255> 853 ret <2 x i64> %b 854} 855 856define arm_aapcs_vfpcc <2 x i64> @mov_int64_m1() { 857; CHECK-LABEL: mov_int64_m1: 858; CHECK: @ %bb.0: @ %entry 859; CHECK-NEXT: vmov.i8 q0, #0xff 860; CHECK-NEXT: bx lr 861entry: 862 ret <2 x i64> <i64 -1, i64 -1> 863} 864 865define arm_aapcs_vfpcc <2 x i64> @xor_int64_m1(<2 x i64> %a) { 866; CHECKLE-LABEL: xor_int64_m1: 867; CHECKLE: @ %bb.0: @ %entry 868; CHECKLE-NEXT: vmvn q0, q0 869; CHECKLE-NEXT: bx lr 870; 871; CHECKBE-LABEL: xor_int64_m1: 872; CHECKBE: @ %bb.0: @ %entry 873; CHECKBE-NEXT: vmov.i8 q1, #0xff 874; CHECKBE-NEXT: veor q0, q0, q1 875; CHECKBE-NEXT: bx lr 876entry: 877 %b = xor <2 x i64> %a, <i64 -1, i64 -1> 878 ret <2 x i64> %b 879} 880 881define arm_aapcs_vfpcc <2 x i64> @mov_int64_ff0000ff0000ffff() { 882; CHECK-LABEL: mov_int64_ff0000ff0000ffff: 883; CHECK: @ %bb.0: @ %entry 884; CHECK-NEXT: vmov.i64 q0, #0xff0000ff0000ffff 885; CHECK-NEXT: bx lr 886entry: 887 ret <2 x i64> <i64 18374687574888349695, i64 18374687574888349695> 888} 889 890define arm_aapcs_vfpcc <2 x i64> @xor_int64_ff0000ff0000ffff(<2 x i64> %a) { 891; CHECKLE-LABEL: xor_int64_ff0000ff0000ffff: 892; CHECKLE: @ %bb.0: @ %entry 893; CHECKLE-NEXT: vmov.i64 q1, #0xff0000ff0000ffff 894; CHECKLE-NEXT: veor q0, q0, q1 895; CHECKLE-NEXT: bx lr 896; 897; CHECKBE-LABEL: xor_int64_ff0000ff0000ffff: 898; CHECKBE: @ %bb.0: @ %entry 899; CHECKBE-NEXT: vmov.i64 q1, #0xffffff0000ff 900; CHECKBE-NEXT: vrev64.32 q2, q1 901; CHECKBE-NEXT: veor q0, q0, q2 902; CHECKBE-NEXT: bx lr 903entry: 904 %b = xor <2 x i64> %a, <i64 18374687574888349695, i64 18374687574888349695> 905 ret <2 x i64> %b 906} 907 908define arm_aapcs_vfpcc <2 x i64> @mov_int64_f_0() { 909; CHECKLE-LABEL: mov_int64_f_0: 910; CHECKLE: @ %bb.0: @ %entry 911; CHECKLE-NEXT: adr r0, .LCPI58_0 912; CHECKLE-NEXT: vldrw.u32 q0, [r0] 913; CHECKLE-NEXT: bx lr 914; CHECKLE-NEXT: .p2align 4 915; CHECKLE-NEXT: @ %bb.1: 916; CHECKLE-NEXT: .LCPI58_0: 917; CHECKLE-NEXT: .long 255 @ double 1.2598673968951787E-321 918; CHECKLE-NEXT: .long 0 919; CHECKLE-NEXT: .long 0 @ double 0 920; CHECKLE-NEXT: .long 0 921; 922; CHECKBE-LABEL: mov_int64_f_0: 923; CHECKBE: @ %bb.0: @ %entry 924; CHECKBE-NEXT: adr r0, .LCPI58_0 925; CHECKBE-NEXT: vldrb.u8 q1, [r0] 926; CHECKBE-NEXT: vrev64.8 q0, q1 927; CHECKBE-NEXT: bx lr 928; CHECKBE-NEXT: .p2align 4 929; CHECKBE-NEXT: @ %bb.1: 930; CHECKBE-NEXT: .LCPI58_0: 931; CHECKBE-NEXT: .long 0 @ double 1.2598673968951787E-321 932; CHECKBE-NEXT: .long 255 933; CHECKBE-NEXT: .long 0 @ double 0 934; CHECKBE-NEXT: .long 0 935entry: 936 ret <2 x i64> <i64 255, i64 0> 937} 938 939define arm_aapcs_vfpcc <2 x i64> @xor_int64_f_0(<2 x i64> %a) { 940; CHECKLE-LABEL: xor_int64_f_0: 941; CHECKLE: @ %bb.0: @ %entry 942; CHECKLE-NEXT: adr r0, .LCPI59_0 943; CHECKLE-NEXT: vldrw.u32 q1, [r0] 944; CHECKLE-NEXT: veor q0, q0, q1 945; CHECKLE-NEXT: bx lr 946; CHECKLE-NEXT: .p2align 4 947; CHECKLE-NEXT: @ %bb.1: 948; CHECKLE-NEXT: .LCPI59_0: 949; CHECKLE-NEXT: .long 255 @ 0xff 950; CHECKLE-NEXT: .long 0 @ 0x0 951; CHECKLE-NEXT: .long 0 @ 0x0 952; CHECKLE-NEXT: .long 0 @ 0x0 953; 954; CHECKBE-LABEL: xor_int64_f_0: 955; CHECKBE: @ %bb.0: @ %entry 956; CHECKBE-NEXT: adr r0, .LCPI59_0 957; CHECKBE-NEXT: vldrb.u8 q1, [r0] 958; CHECKBE-NEXT: vrev64.8 q2, q1 959; CHECKBE-NEXT: veor q0, q0, q2 960; CHECKBE-NEXT: bx lr 961; CHECKBE-NEXT: .p2align 4 962; CHECKBE-NEXT: @ %bb.1: 963; CHECKBE-NEXT: .LCPI59_0: 964; CHECKBE-NEXT: .long 0 @ 0x0 965; CHECKBE-NEXT: .long 255 @ 0xff 966; CHECKBE-NEXT: .long 0 @ 0x0 967; CHECKBE-NEXT: .long 0 @ 0x0 968entry: 969 %b = xor <2 x i64> %a, <i64 255, i64 0> 970 ret <2 x i64> %b 971} 972 973define arm_aapcs_vfpcc <16 x i8> @mov_int64_0f000f0f() { 974; CHECKLE-LABEL: mov_int64_0f000f0f: 975; CHECKLE: @ %bb.0: @ %entry 976; CHECKLE-NEXT: vmov.i64 q0, #0xff000000ff00ff 977; CHECKLE-NEXT: bx lr 978; 979; CHECKBE-LABEL: mov_int64_0f000f0f: 980; CHECKBE: @ %bb.0: @ %entry 981; CHECKBE-NEXT: vmov.i64 q0, #0xff00ff000000ff00 982; CHECKBE-NEXT: bx lr 983entry: 984 ret <16 x i8> <i8 -1, i8 0, i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0> 985} 986 987define arm_aapcs_vfpcc <16 x i8> @xor_int64_0f000f0f(<16 x i8> %a) { 988; CHECKLE-LABEL: xor_int64_0f000f0f: 989; CHECKLE: @ %bb.0: @ %entry 990; CHECKLE-NEXT: vmov.i64 q1, #0xff000000ff00ff 991; CHECKLE-NEXT: veor q0, q0, q1 992; CHECKLE-NEXT: bx lr 993; 994; CHECKBE-LABEL: xor_int64_0f000f0f: 995; CHECKBE: @ %bb.0: @ %entry 996; CHECKBE-NEXT: vmov.i64 q1, #0xff000000ff00ff 997; CHECKBE-NEXT: vrev64.8 q2, q0 998; CHECKBE-NEXT: veor q1, q2, q1 999; CHECKBE-NEXT: vrev64.8 q0, q1 1000; CHECKBE-NEXT: bx lr 1001entry: 1002 %b = xor <16 x i8> %a, <i8 -1, i8 0, i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0> 1003 ret <16 x i8> %b 1004} 1005 1006define arm_aapcs_vfpcc <8 x i16> @mov_int64_ff00ffff() { 1007; CHECKLE-LABEL: mov_int64_ff00ffff: 1008; CHECKLE: @ %bb.0: @ %entry 1009; CHECKLE-NEXT: vmov.i64 q0, #0xffffffff0000ffff 1010; CHECKLE-NEXT: bx lr 1011; 1012; CHECKBE-LABEL: mov_int64_ff00ffff: 1013; CHECKBE: @ %bb.0: @ %entry 1014; CHECKBE-NEXT: vmov.i64 q0, #0xffff0000ffffffff 1015; CHECKBE-NEXT: bx lr 1016entry: 1017 ret <8 x i16> <i16 -1, i16 0, i16 -1, i16 -1, i16 -1, i16 0, i16 -1, i16 -1> 1018} 1019 1020define arm_aapcs_vfpcc <8 x i16> @xor_int64_ff00ffff(<8 x i16> %a) { 1021; CHECKLE-LABEL: xor_int64_ff00ffff: 1022; CHECKLE: @ %bb.0: @ %entry 1023; CHECKLE-NEXT: vmov.i64 q1, #0xffffffff0000ffff 1024; CHECKLE-NEXT: veor q0, q0, q1 1025; CHECKLE-NEXT: bx lr 1026; 1027; CHECKBE-LABEL: xor_int64_ff00ffff: 1028; CHECKBE: @ %bb.0: @ %entry 1029; CHECKBE-NEXT: vmov.i64 q1, #0xffffffff0000ffff 1030; CHECKBE-NEXT: vrev64.16 q2, q0 1031; CHECKBE-NEXT: veor q1, q2, q1 1032; CHECKBE-NEXT: vrev64.16 q0, q1 1033; CHECKBE-NEXT: bx lr 1034entry: 1035 %b = xor <8 x i16> %a, <i16 -1, i16 0, i16 -1, i16 -1, i16 -1, i16 0, i16 -1, i16 -1> 1036 ret <8 x i16> %b 1037} 1038 1039define arm_aapcs_vfpcc <16 x i8> @mov_int64_0f0f0f0f0f0f0f0f() { 1040; CHECKLE-LABEL: mov_int64_0f0f0f0f0f0f0f0f: 1041; CHECKLE: @ %bb.0: @ %entry 1042; CHECKLE-NEXT: vmov.i16 q0, #0xff 1043; CHECKLE-NEXT: bx lr 1044; 1045; CHECKBE-LABEL: mov_int64_0f0f0f0f0f0f0f0f: 1046; CHECKBE: @ %bb.0: @ %entry 1047; CHECKBE-NEXT: vmov.i16 q0, #0xff00 1048; CHECKBE-NEXT: bx lr 1049entry: 1050 ret <16 x i8> <i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0> 1051} 1052 1053define arm_aapcs_vfpcc <16 x i8> @xor_int64_0f0f0f0f0f0f0f0f(<16 x i8> %a) { 1054; CHECKLE-LABEL: xor_int64_0f0f0f0f0f0f0f0f: 1055; CHECKLE: @ %bb.0: @ %entry 1056; CHECKLE-NEXT: vmov.i16 q1, #0xff 1057; CHECKLE-NEXT: veor q0, q0, q1 1058; CHECKLE-NEXT: bx lr 1059; 1060; CHECKBE-LABEL: xor_int64_0f0f0f0f0f0f0f0f: 1061; CHECKBE: @ %bb.0: @ %entry 1062; CHECKBE-NEXT: vmov.i16 q1, #0xff 1063; CHECKBE-NEXT: vrev64.8 q2, q0 1064; CHECKBE-NEXT: veor q1, q2, q1 1065; CHECKBE-NEXT: vrev64.8 q0, q1 1066; CHECKBE-NEXT: bx lr 1067entry: 1068 %b = xor <16 x i8> %a, <i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0> 1069 ret <16 x i8> %b 1070} 1071 1072define arm_aapcs_vfpcc <4 x float> @mov_float_1() { 1073; CHECK-LABEL: mov_float_1: 1074; CHECK: @ %bb.0: @ %entry 1075; CHECK-NEXT: mov.w r0, #1065353216 1076; CHECK-NEXT: vdup.32 q0, r0 1077; CHECK-NEXT: bx lr 1078entry: 1079 ret <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00> 1080} 1081 1082define arm_aapcs_vfpcc <4 x float> @fadd_float_1(<4 x float> %a) { 1083; CHECKBE-LABEL: fadd_float_1: 1084; CHECKBE: @ %bb.0: @ %entry 1085; CHECKBE-NEXT: vmov.f32 q1, #1.000000e+00 1086; CHECKBE-NEXT: vrev64.32 q2, q0 1087; CHECKBE-NEXT: vadd.f32 q1, q2, q1 1088; CHECKBE-NEXT: vrev64.32 q0, q1 1089; CHECKBE-NEXT: bx lr 1090entry: 1091 %b = fadd <4 x float> %a, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00> 1092 ret <4 x float> %b 1093} 1094 1095define arm_aapcs_vfpcc <4 x float> @mov_float_m3() { 1096; CHECK-LABEL: mov_float_m3: 1097; CHECK: @ %bb.0: @ %entry 1098; CHECK-NEXT: movs r0, #0 1099; CHECK-NEXT: movt r0, #49216 1100; CHECK-NEXT: vdup.32 q0, r0 1101; CHECK-NEXT: bx lr 1102entry: 1103 ret <4 x float> <float -3.000000e+00, float -3.000000e+00, float -3.000000e+00, float -3.000000e+00> 1104} 1105 1106define arm_aapcs_vfpcc <4 x float> @fadd_float_m3(<4 x float> %a) { 1107; CHECKBE-LABEL: fadd_float_m3: 1108; CHECKBE: @ %bb.0: @ %entry 1109; CHECKBE-NEXT: vmov.f32 q1, #-3.000000e+00 1110; CHECKBE-NEXT: vrev64.32 q2, q0 1111; CHECKBE-NEXT: vadd.f32 q1, q2, q1 1112; CHECKBE-NEXT: vrev64.32 q0, q1 1113; CHECKBE-NEXT: bx lr 1114entry: 1115 %b = fadd <4 x float> %a, <float -3.000000e+00, float -3.000000e+00, float -3.000000e+00, float -3.000000e+00> 1116 ret <4 x float> %b 1117} 1118 1119define arm_aapcs_vfpcc <8 x half> @mov_float16_1() { 1120; CHECK-LABEL: mov_float16_1: 1121; CHECK: @ %bb.0: @ %entry 1122; CHECK-NEXT: vmov.i16 q0, #0x3c00 1123; CHECK-NEXT: bx lr 1124entry: 1125 ret <8 x half> <half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00> 1126} 1127 1128define arm_aapcs_vfpcc <8 x half> @fadd_float16_1(<8 x half> %a) { 1129; CHECKBE-LABEL: fadd_float16_1: 1130; CHECKBE: @ %bb.0: @ %entry 1131; CHECKBE-NEXT: vmov.i16 q1, #0x3c00 1132; CHECKBE-NEXT: vrev64.16 q2, q0 1133; CHECKBE-NEXT: vadd.f16 q1, q2, q1 1134; CHECKBE-NEXT: vrev64.16 q0, q1 1135; CHECKBE-NEXT: bx lr 1136entry: 1137 %b = fadd <8 x half> %a, <half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00, half 1.000000e+00> 1138 ret <8 x half> %b 1139} 1140 1141define arm_aapcs_vfpcc <8 x half> @mov_float16_m3() { 1142; CHECK-LABEL: mov_float16_m3: 1143; CHECK: @ %bb.0: @ %entry 1144; CHECK-NEXT: vmov.i16 q0, #0xc200 1145; CHECK-NEXT: bx lr 1146entry: 1147 ret <8 x half> <half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00> 1148} 1149 1150define arm_aapcs_vfpcc <8 x half> @fadd_float16_m3(<8 x half> %a) { 1151; CHECKBE-LABEL: fadd_float16_m3: 1152; CHECKBE: @ %bb.0: @ %entry 1153; CHECKBE-NEXT: vmov.i16 q1, #0xc200 1154; CHECKBE-NEXT: vrev64.16 q2, q0 1155; CHECKBE-NEXT: vadd.f16 q1, q2, q1 1156; CHECKBE-NEXT: vrev64.16 q0, q1 1157; CHECKBE-NEXT: bx lr 1158entry: 1159 %b = fadd <8 x half> %a, <half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00, half -3.000000e+00> 1160 ret <8 x half> %b 1161} 1162 1163define arm_aapcs_vfpcc <2 x double> @mov_double_1() { 1164; CHECKLE-LABEL: mov_double_1: 1165; CHECKLE: @ %bb.0: @ %entry 1166; CHECKLE-NEXT: adr r0, .LCPI74_0 1167; CHECKLE-NEXT: vldrw.u32 q0, [r0] 1168; CHECKLE-NEXT: bx lr 1169; CHECKLE-NEXT: .p2align 4 1170; CHECKLE-NEXT: @ %bb.1: 1171; CHECKLE-NEXT: .LCPI74_0: 1172; CHECKLE-NEXT: .long 0 @ double 1 1173; CHECKLE-NEXT: .long 1072693248 1174; CHECKLE-NEXT: .long 0 @ double 1 1175; CHECKLE-NEXT: .long 1072693248 1176; 1177; CHECKBE-LABEL: mov_double_1: 1178; CHECKBE: @ %bb.0: @ %entry 1179; CHECKBE-NEXT: adr r0, .LCPI74_0 1180; CHECKBE-NEXT: vldrb.u8 q1, [r0] 1181; CHECKBE-NEXT: vrev64.8 q0, q1 1182; CHECKBE-NEXT: bx lr 1183; CHECKBE-NEXT: .p2align 4 1184; CHECKBE-NEXT: @ %bb.1: 1185; CHECKBE-NEXT: .LCPI74_0: 1186; CHECKBE-NEXT: .long 1072693248 @ double 1 1187; CHECKBE-NEXT: .long 0 1188; CHECKBE-NEXT: .long 1072693248 @ double 1 1189; CHECKBE-NEXT: .long 0 1190entry: 1191 ret <2 x double> <double 1.000000e+00, double 1.000000e+00> 1192} 1193 1194define arm_aapcs_vfpcc <16 x i8> @test(<16 x i8> %i) { 1195; CHECKLE-LABEL: test: 1196; CHECKLE: @ %bb.0: @ %entry 1197; CHECKLE-NEXT: vmov.i64 q1, #0xff000000ff00ff 1198; CHECKLE-NEXT: vorr q0, q0, q1 1199; CHECKLE-NEXT: bx lr 1200; 1201; CHECKBE-LABEL: test: 1202; CHECKBE: @ %bb.0: @ %entry 1203; CHECKBE-NEXT: vmov.i64 q1, #0xff000000ff00ff 1204; CHECKBE-NEXT: vrev64.8 q2, q0 1205; CHECKBE-NEXT: vorr q1, q2, q1 1206; CHECKBE-NEXT: vrev64.8 q0, q1 1207; CHECKBE-NEXT: bx lr 1208entry: 1209 %o = or <16 x i8> %i, <i8 -1, i8 0, i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 0, i8 0, i8 -1, i8 0> 1210 ret <16 x i8> %o 1211} 1212 1213define arm_aapcs_vfpcc <8 x i16> @test2(<8 x i16> %i) { 1214; CHECKLE-LABEL: test2: 1215; CHECKLE: @ %bb.0: @ %entry 1216; CHECKLE-NEXT: vmov.i64 q1, #0xffffffff0000ffff 1217; CHECKLE-NEXT: vorr q0, q0, q1 1218; CHECKLE-NEXT: bx lr 1219; 1220; CHECKBE-LABEL: test2: 1221; CHECKBE: @ %bb.0: @ %entry 1222; CHECKBE-NEXT: vmov.i64 q1, #0xffffffff0000ffff 1223; CHECKBE-NEXT: vrev64.16 q2, q0 1224; CHECKBE-NEXT: vorr q1, q2, q1 1225; CHECKBE-NEXT: vrev64.16 q0, q1 1226; CHECKBE-NEXT: bx lr 1227entry: 1228 %o = or <8 x i16> %i, <i16 -1, i16 0, i16 -1, i16 -1, i16 -1, i16 0, i16 -1, i16 -1> 1229 ret <8 x i16> %o 1230} 1231 1232define arm_aapcs_vfpcc <4 x i32> @i1and_vmov(<4 x i32> %a, <4 x i32> %b, i32 %c) { 1233; CHECKLE-LABEL: i1and_vmov: 1234; CHECKLE: @ %bb.0: @ %entry 1235; CHECKLE-NEXT: cmp r0, #0 1236; CHECKLE-NEXT: mov.w r1, #15 1237; CHECKLE-NEXT: csetm r0, eq 1238; CHECKLE-NEXT: ands r0, r1 1239; CHECKLE-NEXT: vmsr p0, r0 1240; CHECKLE-NEXT: vpsel q0, q0, q1 1241; CHECKLE-NEXT: bx lr 1242; 1243; CHECKBE-LABEL: i1and_vmov: 1244; CHECKBE: @ %bb.0: @ %entry 1245; CHECKBE-NEXT: cmp r0, #0 1246; CHECKBE-NEXT: mov.w r1, #15 1247; CHECKBE-NEXT: csetm r0, eq 1248; CHECKBE-NEXT: vrev64.32 q2, q1 1249; CHECKBE-NEXT: ands r0, r1 1250; CHECKBE-NEXT: vrev64.32 q1, q0 1251; CHECKBE-NEXT: vmsr p0, r0 1252; CHECKBE-NEXT: vpsel q1, q1, q2 1253; CHECKBE-NEXT: vrev64.32 q0, q1 1254; CHECKBE-NEXT: bx lr 1255entry: 1256 %c1 = icmp eq i32 %c, zeroinitializer 1257 %broadcast.splatinsert1967 = insertelement <4 x i1> undef, i1 %c1, i32 0 1258 %broadcast.splat1968 = shufflevector <4 x i1> %broadcast.splatinsert1967, <4 x i1> undef, <4 x i32> zeroinitializer 1259 %l699 = and <4 x i1> %broadcast.splat1968, <i1 true, i1 false, i1 false, i1 false> 1260 %s = select <4 x i1> %l699, <4 x i32> %a, <4 x i32> %b 1261 ret <4 x i32> %s 1262} 1263 1264define arm_aapcs_vfpcc <4 x i32> @i1or_vmov(<4 x i32> %a, <4 x i32> %b, i32 %c) { 1265; CHECKLE-LABEL: i1or_vmov: 1266; CHECKLE: @ %bb.0: @ %entry 1267; CHECKLE-NEXT: cmp r0, #0 1268; CHECKLE-NEXT: mov.w r1, #15 1269; CHECKLE-NEXT: csetm r0, eq 1270; CHECKLE-NEXT: orrs r0, r1 1271; CHECKLE-NEXT: vmsr p0, r0 1272; CHECKLE-NEXT: vpsel q0, q0, q1 1273; CHECKLE-NEXT: bx lr 1274; 1275; CHECKBE-LABEL: i1or_vmov: 1276; CHECKBE: @ %bb.0: @ %entry 1277; CHECKBE-NEXT: cmp r0, #0 1278; CHECKBE-NEXT: mov.w r1, #15 1279; CHECKBE-NEXT: csetm r0, eq 1280; CHECKBE-NEXT: vrev64.32 q2, q1 1281; CHECKBE-NEXT: orrs r0, r1 1282; CHECKBE-NEXT: vrev64.32 q1, q0 1283; CHECKBE-NEXT: vmsr p0, r0 1284; CHECKBE-NEXT: vpsel q1, q1, q2 1285; CHECKBE-NEXT: vrev64.32 q0, q1 1286; CHECKBE-NEXT: bx lr 1287entry: 1288 %c1 = icmp eq i32 %c, zeroinitializer 1289 %broadcast.splatinsert1967 = insertelement <4 x i1> undef, i1 %c1, i32 0 1290 %broadcast.splat1968 = shufflevector <4 x i1> %broadcast.splatinsert1967, <4 x i1> undef, <4 x i32> zeroinitializer 1291 %l699 = or <4 x i1> %broadcast.splat1968, <i1 true, i1 false, i1 false, i1 false> 1292 %s = select <4 x i1> %l699, <4 x i32> %a, <4 x i32> %b 1293 ret <4 x i32> %s 1294} 1295 1296define arm_aapcs_vfpcc <2 x i64> @v2i1and_vmov(<2 x i64> %a, <2 x i64> %b, i32 %c) { 1297; CHECK-LABEL: v2i1and_vmov: 1298; CHECK: @ %bb.0: @ %entry 1299; CHECK-NEXT: cmp r0, #0 1300; CHECK-NEXT: mov.w r1, #0 1301; CHECK-NEXT: csetm r0, eq 1302; CHECK-NEXT: bfi r1, r0, #0, #8 1303; CHECK-NEXT: vmsr p0, r1 1304; CHECK-NEXT: vpsel q0, q0, q1 1305; CHECK-NEXT: bx lr 1306entry: 1307 %c1 = icmp eq i32 %c, zeroinitializer 1308 %broadcast.splatinsert1967 = insertelement <2 x i1> undef, i1 %c1, i32 0 1309 %broadcast.splat1968 = shufflevector <2 x i1> %broadcast.splatinsert1967, <2 x i1> undef, <2 x i32> zeroinitializer 1310 %l699 = and <2 x i1> %broadcast.splat1968, <i1 true, i1 false> 1311 %s = select <2 x i1> %l699, <2 x i64> %a, <2 x i64> %b 1312 ret <2 x i64> %s 1313} 1314 1315define arm_aapcs_vfpcc <2 x i64> @v2i1or_vmov(<2 x i64> %a, <2 x i64> %b, i32 %c) { 1316; CHECK-LABEL: v2i1or_vmov: 1317; CHECK: @ %bb.0: @ %entry 1318; CHECK-NEXT: cmp r0, #0 1319; CHECK-NEXT: mov.w r1, #255 1320; CHECK-NEXT: csetm r0, eq 1321; CHECK-NEXT: bfi r1, r0, #8, #8 1322; CHECK-NEXT: vmsr p0, r1 1323; CHECK-NEXT: vpsel q0, q0, q1 1324; CHECK-NEXT: bx lr 1325entry: 1326 %c1 = icmp eq i32 %c, zeroinitializer 1327 %broadcast.splatinsert1967 = insertelement <2 x i1> undef, i1 %c1, i32 0 1328 %broadcast.splat1968 = shufflevector <2 x i1> %broadcast.splatinsert1967, <2 x i1> undef, <2 x i32> zeroinitializer 1329 %l699 = or <2 x i1> %broadcast.splat1968, <i1 true, i1 false> 1330 %s = select <2 x i1> %l699, <2 x i64> %a, <2 x i64> %b 1331 ret <2 x i64> %s 1332} 1333 1334define arm_aapcs_vfpcc <8 x i16> @and_v8i16_m1(<8 x i16> %a) { 1335; CHECKLE-LABEL: and_v8i16_m1: 1336; CHECKLE: @ %bb.0: 1337; CHECKLE-NEXT: vbic.i32 q0, #0x10000 1338; CHECKLE-NEXT: bx lr 1339; 1340; CHECKBE-LABEL: and_v8i16_m1: 1341; CHECKBE: @ %bb.0: 1342; CHECKBE-NEXT: vrev64.16 q1, q0 1343; CHECKBE-NEXT: vbic.i32 q1, #0x10000 1344; CHECKBE-NEXT: vrev64.16 q0, q1 1345; CHECKBE-NEXT: bx lr 1346 %b = and <8 x i16> %a, <i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534, i16 65535, i16 65534> 1347 ret <8 x i16> %b 1348} 1349 1350define arm_aapcs_vfpcc <8 x i16> @or_v8i16_1(<8 x i16> %a) { 1351; CHECKLE-LABEL: or_v8i16_1: 1352; CHECKLE: @ %bb.0: 1353; CHECKLE-NEXT: vorr.i32 q0, #0x10000 1354; CHECKLE-NEXT: bx lr 1355; 1356; CHECKBE-LABEL: or_v8i16_1: 1357; CHECKBE: @ %bb.0: 1358; CHECKBE-NEXT: vrev64.16 q1, q0 1359; CHECKBE-NEXT: vorr.i32 q1, #0x10000 1360; CHECKBE-NEXT: vrev64.16 q0, q1 1361; CHECKBE-NEXT: bx lr 1362 %b = or <8 x i16> %a, <i16 0, i16 1, i16 0, i16 1, i16 0, i16 1, i16 0, i16 1> 1363 ret <8 x i16> %b 1364} 1365