4267 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s3; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s4; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE5 6target triple = "aarch64-unknown-linux-gnu"7 8; Although SVE immediate packing should be fully tested using scalable vectors,9; these tests protects against the possibility that scalable nodes, resulting10; from lowering fixed length vector operations, trigger different isel patterns.11 12; FIXME: These instructions should have the immediate form13 14;15; ADD16;17 18define void @add_v32i8(ptr %a) {19; CHECK-LABEL: add_v32i8:20; CHECK: // %bb.0:21; CHECK-NEXT: ldp q0, q1, [x0]22; CHECK-NEXT: add z0.b, z0.b, #7 // =0x723; CHECK-NEXT: add z1.b, z1.b, #7 // =0x724; CHECK-NEXT: stp q0, q1, [x0]25; CHECK-NEXT: ret26;27; NONEON-NOSVE-LABEL: add_v32i8:28; NONEON-NOSVE: // %bb.0:29; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]30; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!31; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 6432; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]33; NONEON-NOSVE-NEXT: add w8, w8, #734; NONEON-NOSVE-NEXT: strb w8, [sp, #63]35; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]36; NONEON-NOSVE-NEXT: add w8, w8, #737; NONEON-NOSVE-NEXT: strb w8, [sp, #62]38; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]39; NONEON-NOSVE-NEXT: add w8, w8, #740; NONEON-NOSVE-NEXT: strb w8, [sp, #61]41; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]42; NONEON-NOSVE-NEXT: add w8, w8, #743; NONEON-NOSVE-NEXT: strb w8, [sp, #60]44; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]45; NONEON-NOSVE-NEXT: add w8, w8, #746; NONEON-NOSVE-NEXT: strb w8, [sp, #59]47; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]48; NONEON-NOSVE-NEXT: add w8, w8, #749; NONEON-NOSVE-NEXT: strb w8, [sp, #58]50; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]51; NONEON-NOSVE-NEXT: add w8, w8, #752; NONEON-NOSVE-NEXT: strb w8, [sp, #57]53; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]54; NONEON-NOSVE-NEXT: add w8, w8, #755; NONEON-NOSVE-NEXT: strb w8, [sp, #56]56; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]57; NONEON-NOSVE-NEXT: add w8, w8, #758; NONEON-NOSVE-NEXT: strb w8, [sp, #55]59; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]60; NONEON-NOSVE-NEXT: add w8, w8, #761; NONEON-NOSVE-NEXT: strb w8, [sp, #54]62; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]63; NONEON-NOSVE-NEXT: add w8, w8, #764; NONEON-NOSVE-NEXT: strb w8, [sp, #53]65; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]66; NONEON-NOSVE-NEXT: add w8, w8, #767; NONEON-NOSVE-NEXT: strb w8, [sp, #52]68; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]69; NONEON-NOSVE-NEXT: add w8, w8, #770; NONEON-NOSVE-NEXT: strb w8, [sp, #51]71; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]72; NONEON-NOSVE-NEXT: add w8, w8, #773; NONEON-NOSVE-NEXT: strb w8, [sp, #50]74; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]75; NONEON-NOSVE-NEXT: add w8, w8, #776; NONEON-NOSVE-NEXT: strb w8, [sp, #49]77; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]78; NONEON-NOSVE-NEXT: add w8, w8, #779; NONEON-NOSVE-NEXT: strb w8, [sp, #48]80; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]81; NONEON-NOSVE-NEXT: add w8, w8, #782; NONEON-NOSVE-NEXT: strb w8, [sp, #47]83; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]84; NONEON-NOSVE-NEXT: add w8, w8, #785; NONEON-NOSVE-NEXT: strb w8, [sp, #46]86; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]87; NONEON-NOSVE-NEXT: add w8, w8, #788; NONEON-NOSVE-NEXT: strb w8, [sp, #45]89; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]90; NONEON-NOSVE-NEXT: add w8, w8, #791; NONEON-NOSVE-NEXT: strb w8, [sp, #44]92; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]93; NONEON-NOSVE-NEXT: add w8, w8, #794; NONEON-NOSVE-NEXT: strb w8, [sp, #43]95; NONEON-NOSVE-NEXT: ldrb w8, [sp, #10]96; NONEON-NOSVE-NEXT: add w8, w8, #797; NONEON-NOSVE-NEXT: strb w8, [sp, #42]98; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]99; NONEON-NOSVE-NEXT: add w8, w8, #7100; NONEON-NOSVE-NEXT: strb w8, [sp, #41]101; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]102; NONEON-NOSVE-NEXT: add w8, w8, #7103; NONEON-NOSVE-NEXT: strb w8, [sp, #40]104; NONEON-NOSVE-NEXT: ldrb w8, [sp, #7]105; NONEON-NOSVE-NEXT: add w8, w8, #7106; NONEON-NOSVE-NEXT: strb w8, [sp, #39]107; NONEON-NOSVE-NEXT: ldrb w8, [sp, #6]108; NONEON-NOSVE-NEXT: add w8, w8, #7109; NONEON-NOSVE-NEXT: strb w8, [sp, #38]110; NONEON-NOSVE-NEXT: ldrb w8, [sp, #5]111; NONEON-NOSVE-NEXT: add w8, w8, #7112; NONEON-NOSVE-NEXT: strb w8, [sp, #37]113; NONEON-NOSVE-NEXT: ldrb w8, [sp, #4]114; NONEON-NOSVE-NEXT: add w8, w8, #7115; NONEON-NOSVE-NEXT: strb w8, [sp, #36]116; NONEON-NOSVE-NEXT: ldrb w8, [sp, #3]117; NONEON-NOSVE-NEXT: add w8, w8, #7118; NONEON-NOSVE-NEXT: strb w8, [sp, #35]119; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]120; NONEON-NOSVE-NEXT: add w8, w8, #7121; NONEON-NOSVE-NEXT: strb w8, [sp, #34]122; NONEON-NOSVE-NEXT: ldrb w8, [sp, #1]123; NONEON-NOSVE-NEXT: add w8, w8, #7124; NONEON-NOSVE-NEXT: strb w8, [sp, #33]125; NONEON-NOSVE-NEXT: ldrb w8, [sp]126; NONEON-NOSVE-NEXT: add w8, w8, #7127; NONEON-NOSVE-NEXT: strb w8, [sp, #32]128; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]129; NONEON-NOSVE-NEXT: stp q0, q1, [x0]130; NONEON-NOSVE-NEXT: add sp, sp, #64131; NONEON-NOSVE-NEXT: ret132 %op1 = load <32 x i8>, ptr %a133 %res = add <32 x i8> %op1, splat(i8 7)134 store <32 x i8> %res, ptr %a135 ret void136}137 138define void @add_v16i16(ptr %a) {139; CHECK-LABEL: add_v16i16:140; CHECK: // %bb.0:141; CHECK-NEXT: ldp q0, q1, [x0]142; CHECK-NEXT: add z0.h, z0.h, #15 // =0xf143; CHECK-NEXT: add z1.h, z1.h, #15 // =0xf144; CHECK-NEXT: stp q0, q1, [x0]145; CHECK-NEXT: ret146;147; NONEON-NOSVE-LABEL: add_v16i16:148; NONEON-NOSVE: // %bb.0:149; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]150; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!151; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64152; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]153; NONEON-NOSVE-NEXT: add w8, w8, #15154; NONEON-NOSVE-NEXT: strh w8, [sp, #62]155; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]156; NONEON-NOSVE-NEXT: add w8, w8, #15157; NONEON-NOSVE-NEXT: strh w8, [sp, #60]158; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]159; NONEON-NOSVE-NEXT: add w8, w8, #15160; NONEON-NOSVE-NEXT: strh w8, [sp, #58]161; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]162; NONEON-NOSVE-NEXT: add w8, w8, #15163; NONEON-NOSVE-NEXT: strh w8, [sp, #56]164; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]165; NONEON-NOSVE-NEXT: add w8, w8, #15166; NONEON-NOSVE-NEXT: strh w8, [sp, #54]167; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]168; NONEON-NOSVE-NEXT: add w8, w8, #15169; NONEON-NOSVE-NEXT: strh w8, [sp, #52]170; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]171; NONEON-NOSVE-NEXT: add w8, w8, #15172; NONEON-NOSVE-NEXT: strh w8, [sp, #50]173; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]174; NONEON-NOSVE-NEXT: add w8, w8, #15175; NONEON-NOSVE-NEXT: strh w8, [sp, #48]176; NONEON-NOSVE-NEXT: ldrh w8, [sp, #14]177; NONEON-NOSVE-NEXT: add w8, w8, #15178; NONEON-NOSVE-NEXT: strh w8, [sp, #46]179; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]180; NONEON-NOSVE-NEXT: add w8, w8, #15181; NONEON-NOSVE-NEXT: strh w8, [sp, #44]182; NONEON-NOSVE-NEXT: ldrh w8, [sp, #10]183; NONEON-NOSVE-NEXT: add w8, w8, #15184; NONEON-NOSVE-NEXT: strh w8, [sp, #42]185; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8]186; NONEON-NOSVE-NEXT: add w8, w8, #15187; NONEON-NOSVE-NEXT: strh w8, [sp, #40]188; NONEON-NOSVE-NEXT: ldrh w8, [sp, #6]189; NONEON-NOSVE-NEXT: add w8, w8, #15190; NONEON-NOSVE-NEXT: strh w8, [sp, #38]191; NONEON-NOSVE-NEXT: ldrh w8, [sp, #4]192; NONEON-NOSVE-NEXT: add w8, w8, #15193; NONEON-NOSVE-NEXT: strh w8, [sp, #36]194; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]195; NONEON-NOSVE-NEXT: add w8, w8, #15196; NONEON-NOSVE-NEXT: strh w8, [sp, #34]197; NONEON-NOSVE-NEXT: ldrh w8, [sp]198; NONEON-NOSVE-NEXT: add w8, w8, #15199; NONEON-NOSVE-NEXT: strh w8, [sp, #32]200; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]201; NONEON-NOSVE-NEXT: stp q0, q1, [x0]202; NONEON-NOSVE-NEXT: add sp, sp, #64203; NONEON-NOSVE-NEXT: ret204 %op1 = load <16 x i16>, ptr %a205 %res = add <16 x i16> %op1, splat(i16 15)206 store <16 x i16> %res, ptr %a207 ret void208}209 210define void @add_v8i32(ptr %a) {211; CHECK-LABEL: add_v8i32:212; CHECK: // %bb.0:213; CHECK-NEXT: ldp q0, q1, [x0]214; CHECK-NEXT: add z0.s, z0.s, #31 // =0x1f215; CHECK-NEXT: add z1.s, z1.s, #31 // =0x1f216; CHECK-NEXT: stp q0, q1, [x0]217; CHECK-NEXT: ret218;219; NONEON-NOSVE-LABEL: add_v8i32:220; NONEON-NOSVE: // %bb.0:221; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]222; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!223; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64224; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]225; NONEON-NOSVE-NEXT: add w9, w8, #31226; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]227; NONEON-NOSVE-NEXT: add w8, w8, #31228; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]229; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]230; NONEON-NOSVE-NEXT: add w9, w8, #31231; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]232; NONEON-NOSVE-NEXT: add w8, w8, #31233; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]234; NONEON-NOSVE-NEXT: ldr w8, [sp, #12]235; NONEON-NOSVE-NEXT: add w9, w8, #31236; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]237; NONEON-NOSVE-NEXT: add w8, w8, #31238; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]239; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]240; NONEON-NOSVE-NEXT: add w9, w8, #31241; NONEON-NOSVE-NEXT: ldr w8, [sp]242; NONEON-NOSVE-NEXT: add w8, w8, #31243; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]244; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]245; NONEON-NOSVE-NEXT: stp q0, q1, [x0]246; NONEON-NOSVE-NEXT: add sp, sp, #64247; NONEON-NOSVE-NEXT: ret248 %op1 = load <8 x i32>, ptr %a249 %res = add <8 x i32> %op1, splat(i32 31)250 store <8 x i32> %res, ptr %a251 ret void252}253 254define void @add_v4i64(ptr %a) {255; CHECK-LABEL: add_v4i64:256; CHECK: // %bb.0:257; CHECK-NEXT: ldp q0, q1, [x0]258; CHECK-NEXT: add z0.d, z0.d, #63 // =0x3f259; CHECK-NEXT: add z1.d, z1.d, #63 // =0x3f260; CHECK-NEXT: stp q0, q1, [x0]261; CHECK-NEXT: ret262;263; NONEON-NOSVE-LABEL: add_v4i64:264; NONEON-NOSVE: // %bb.0:265; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]266; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!267; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64268; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]269; NONEON-NOSVE-NEXT: add x9, x8, #63270; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]271; NONEON-NOSVE-NEXT: add x8, x8, #63272; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #48]273; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]274; NONEON-NOSVE-NEXT: add x9, x8, #63275; NONEON-NOSVE-NEXT: ldr x8, [sp]276; NONEON-NOSVE-NEXT: add x8, x8, #63277; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #32]278; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]279; NONEON-NOSVE-NEXT: stp q0, q1, [x0]280; NONEON-NOSVE-NEXT: add sp, sp, #64281; NONEON-NOSVE-NEXT: ret282 %op1 = load <4 x i64>, ptr %a283 %res = add <4 x i64> %op1, splat(i64 63)284 store <4 x i64> %res, ptr %a285 ret void286}287 288;289; AND290;291 292define void @and_v32i8(ptr %a) {293; CHECK-LABEL: and_v32i8:294; CHECK: // %bb.0:295; CHECK-NEXT: ldp q0, q1, [x0]296; CHECK-NEXT: and z0.b, z0.b, #0x7297; CHECK-NEXT: and z1.b, z1.b, #0x7298; CHECK-NEXT: stp q0, q1, [x0]299; CHECK-NEXT: ret300;301; NONEON-NOSVE-LABEL: and_v32i8:302; NONEON-NOSVE: // %bb.0:303; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]304; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!305; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64306; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]307; NONEON-NOSVE-NEXT: and w8, w8, #0x7308; NONEON-NOSVE-NEXT: strb w8, [sp, #63]309; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]310; NONEON-NOSVE-NEXT: and w8, w8, #0x7311; NONEON-NOSVE-NEXT: strb w8, [sp, #62]312; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]313; NONEON-NOSVE-NEXT: and w8, w8, #0x7314; NONEON-NOSVE-NEXT: strb w8, [sp, #61]315; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]316; NONEON-NOSVE-NEXT: and w8, w8, #0x7317; NONEON-NOSVE-NEXT: strb w8, [sp, #60]318; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]319; NONEON-NOSVE-NEXT: and w8, w8, #0x7320; NONEON-NOSVE-NEXT: strb w8, [sp, #59]321; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]322; NONEON-NOSVE-NEXT: and w8, w8, #0x7323; NONEON-NOSVE-NEXT: strb w8, [sp, #58]324; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]325; NONEON-NOSVE-NEXT: and w8, w8, #0x7326; NONEON-NOSVE-NEXT: strb w8, [sp, #57]327; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]328; NONEON-NOSVE-NEXT: and w8, w8, #0x7329; NONEON-NOSVE-NEXT: strb w8, [sp, #56]330; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]331; NONEON-NOSVE-NEXT: and w8, w8, #0x7332; NONEON-NOSVE-NEXT: strb w8, [sp, #55]333; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]334; NONEON-NOSVE-NEXT: and w8, w8, #0x7335; NONEON-NOSVE-NEXT: strb w8, [sp, #54]336; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]337; NONEON-NOSVE-NEXT: and w8, w8, #0x7338; NONEON-NOSVE-NEXT: strb w8, [sp, #53]339; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]340; NONEON-NOSVE-NEXT: and w8, w8, #0x7341; NONEON-NOSVE-NEXT: strb w8, [sp, #52]342; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]343; NONEON-NOSVE-NEXT: and w8, w8, #0x7344; NONEON-NOSVE-NEXT: strb w8, [sp, #51]345; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]346; NONEON-NOSVE-NEXT: and w8, w8, #0x7347; NONEON-NOSVE-NEXT: strb w8, [sp, #50]348; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]349; NONEON-NOSVE-NEXT: and w8, w8, #0x7350; NONEON-NOSVE-NEXT: strb w8, [sp, #49]351; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]352; NONEON-NOSVE-NEXT: and w8, w8, #0x7353; NONEON-NOSVE-NEXT: strb w8, [sp, #48]354; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]355; NONEON-NOSVE-NEXT: and w8, w8, #0x7356; NONEON-NOSVE-NEXT: strb w8, [sp, #47]357; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]358; NONEON-NOSVE-NEXT: and w8, w8, #0x7359; NONEON-NOSVE-NEXT: strb w8, [sp, #46]360; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]361; NONEON-NOSVE-NEXT: and w8, w8, #0x7362; NONEON-NOSVE-NEXT: strb w8, [sp, #45]363; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]364; NONEON-NOSVE-NEXT: and w8, w8, #0x7365; NONEON-NOSVE-NEXT: strb w8, [sp, #44]366; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]367; NONEON-NOSVE-NEXT: and w8, w8, #0x7368; NONEON-NOSVE-NEXT: strb w8, [sp, #43]369; NONEON-NOSVE-NEXT: ldrb w8, [sp, #10]370; NONEON-NOSVE-NEXT: and w8, w8, #0x7371; NONEON-NOSVE-NEXT: strb w8, [sp, #42]372; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]373; NONEON-NOSVE-NEXT: and w8, w8, #0x7374; NONEON-NOSVE-NEXT: strb w8, [sp, #41]375; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]376; NONEON-NOSVE-NEXT: and w8, w8, #0x7377; NONEON-NOSVE-NEXT: strb w8, [sp, #40]378; NONEON-NOSVE-NEXT: ldrb w8, [sp, #7]379; NONEON-NOSVE-NEXT: and w8, w8, #0x7380; NONEON-NOSVE-NEXT: strb w8, [sp, #39]381; NONEON-NOSVE-NEXT: ldrb w8, [sp, #6]382; NONEON-NOSVE-NEXT: and w8, w8, #0x7383; NONEON-NOSVE-NEXT: strb w8, [sp, #38]384; NONEON-NOSVE-NEXT: ldrb w8, [sp, #5]385; NONEON-NOSVE-NEXT: and w8, w8, #0x7386; NONEON-NOSVE-NEXT: strb w8, [sp, #37]387; NONEON-NOSVE-NEXT: ldrb w8, [sp, #4]388; NONEON-NOSVE-NEXT: and w8, w8, #0x7389; NONEON-NOSVE-NEXT: strb w8, [sp, #36]390; NONEON-NOSVE-NEXT: ldrb w8, [sp, #3]391; NONEON-NOSVE-NEXT: and w8, w8, #0x7392; NONEON-NOSVE-NEXT: strb w8, [sp, #35]393; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]394; NONEON-NOSVE-NEXT: and w8, w8, #0x7395; NONEON-NOSVE-NEXT: strb w8, [sp, #34]396; NONEON-NOSVE-NEXT: ldrb w8, [sp, #1]397; NONEON-NOSVE-NEXT: and w8, w8, #0x7398; NONEON-NOSVE-NEXT: strb w8, [sp, #33]399; NONEON-NOSVE-NEXT: ldrb w8, [sp]400; NONEON-NOSVE-NEXT: and w8, w8, #0x7401; NONEON-NOSVE-NEXT: strb w8, [sp, #32]402; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]403; NONEON-NOSVE-NEXT: stp q0, q1, [x0]404; NONEON-NOSVE-NEXT: add sp, sp, #64405; NONEON-NOSVE-NEXT: ret406 %op1 = load <32 x i8>, ptr %a407 %res = and <32 x i8> %op1, splat(i8 7)408 store <32 x i8> %res, ptr %a409 ret void410}411 412define void @and_v16i16(ptr %a) {413; CHECK-LABEL: and_v16i16:414; CHECK: // %bb.0:415; CHECK-NEXT: ldp q0, q1, [x0]416; CHECK-NEXT: and z0.h, z0.h, #0xf417; CHECK-NEXT: and z1.h, z1.h, #0xf418; CHECK-NEXT: stp q0, q1, [x0]419; CHECK-NEXT: ret420;421; NONEON-NOSVE-LABEL: and_v16i16:422; NONEON-NOSVE: // %bb.0:423; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]424; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!425; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64426; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]427; NONEON-NOSVE-NEXT: and w8, w8, #0xf428; NONEON-NOSVE-NEXT: strh w8, [sp, #62]429; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]430; NONEON-NOSVE-NEXT: and w8, w8, #0xf431; NONEON-NOSVE-NEXT: strh w8, [sp, #60]432; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]433; NONEON-NOSVE-NEXT: and w8, w8, #0xf434; NONEON-NOSVE-NEXT: strh w8, [sp, #58]435; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]436; NONEON-NOSVE-NEXT: and w8, w8, #0xf437; NONEON-NOSVE-NEXT: strh w8, [sp, #56]438; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]439; NONEON-NOSVE-NEXT: and w8, w8, #0xf440; NONEON-NOSVE-NEXT: strh w8, [sp, #54]441; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]442; NONEON-NOSVE-NEXT: and w8, w8, #0xf443; NONEON-NOSVE-NEXT: strh w8, [sp, #52]444; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]445; NONEON-NOSVE-NEXT: and w8, w8, #0xf446; NONEON-NOSVE-NEXT: strh w8, [sp, #50]447; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]448; NONEON-NOSVE-NEXT: and w8, w8, #0xf449; NONEON-NOSVE-NEXT: strh w8, [sp, #48]450; NONEON-NOSVE-NEXT: ldrh w8, [sp, #14]451; NONEON-NOSVE-NEXT: and w8, w8, #0xf452; NONEON-NOSVE-NEXT: strh w8, [sp, #46]453; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]454; NONEON-NOSVE-NEXT: and w8, w8, #0xf455; NONEON-NOSVE-NEXT: strh w8, [sp, #44]456; NONEON-NOSVE-NEXT: ldrh w8, [sp, #10]457; NONEON-NOSVE-NEXT: and w8, w8, #0xf458; NONEON-NOSVE-NEXT: strh w8, [sp, #42]459; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8]460; NONEON-NOSVE-NEXT: and w8, w8, #0xf461; NONEON-NOSVE-NEXT: strh w8, [sp, #40]462; NONEON-NOSVE-NEXT: ldrh w8, [sp, #6]463; NONEON-NOSVE-NEXT: and w8, w8, #0xf464; NONEON-NOSVE-NEXT: strh w8, [sp, #38]465; NONEON-NOSVE-NEXT: ldrh w8, [sp, #4]466; NONEON-NOSVE-NEXT: and w8, w8, #0xf467; NONEON-NOSVE-NEXT: strh w8, [sp, #36]468; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]469; NONEON-NOSVE-NEXT: and w8, w8, #0xf470; NONEON-NOSVE-NEXT: strh w8, [sp, #34]471; NONEON-NOSVE-NEXT: ldrh w8, [sp]472; NONEON-NOSVE-NEXT: and w8, w8, #0xf473; NONEON-NOSVE-NEXT: strh w8, [sp, #32]474; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]475; NONEON-NOSVE-NEXT: stp q0, q1, [x0]476; NONEON-NOSVE-NEXT: add sp, sp, #64477; NONEON-NOSVE-NEXT: ret478 %op1 = load <16 x i16>, ptr %a479 %res = and <16 x i16> %op1, splat(i16 15)480 store <16 x i16> %res, ptr %a481 ret void482}483 484define void @and_v8i32(ptr %a) {485; CHECK-LABEL: and_v8i32:486; CHECK: // %bb.0:487; CHECK-NEXT: ldp q0, q1, [x0]488; CHECK-NEXT: and z0.s, z0.s, #0x1f489; CHECK-NEXT: and z1.s, z1.s, #0x1f490; CHECK-NEXT: stp q0, q1, [x0]491; CHECK-NEXT: ret492;493; NONEON-NOSVE-LABEL: and_v8i32:494; NONEON-NOSVE: // %bb.0:495; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]496; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!497; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64498; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]499; NONEON-NOSVE-NEXT: and w9, w8, #0x1f500; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]501; NONEON-NOSVE-NEXT: and w8, w8, #0x1f502; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]503; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]504; NONEON-NOSVE-NEXT: and w9, w8, #0x1f505; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]506; NONEON-NOSVE-NEXT: and w8, w8, #0x1f507; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]508; NONEON-NOSVE-NEXT: ldr w8, [sp, #12]509; NONEON-NOSVE-NEXT: and w9, w8, #0x1f510; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]511; NONEON-NOSVE-NEXT: and w8, w8, #0x1f512; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]513; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]514; NONEON-NOSVE-NEXT: and w9, w8, #0x1f515; NONEON-NOSVE-NEXT: ldr w8, [sp]516; NONEON-NOSVE-NEXT: and w8, w8, #0x1f517; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]518; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]519; NONEON-NOSVE-NEXT: stp q0, q1, [x0]520; NONEON-NOSVE-NEXT: add sp, sp, #64521; NONEON-NOSVE-NEXT: ret522 %op1 = load <8 x i32>, ptr %a523 %res = and <8 x i32> %op1, splat(i32 31)524 store <8 x i32> %res, ptr %a525 ret void526}527 528define void @and_v4i64(ptr %a) {529; CHECK-LABEL: and_v4i64:530; CHECK: // %bb.0:531; CHECK-NEXT: ldp q0, q1, [x0]532; CHECK-NEXT: and z0.d, z0.d, #0x3f533; CHECK-NEXT: and z1.d, z1.d, #0x3f534; CHECK-NEXT: stp q0, q1, [x0]535; CHECK-NEXT: ret536;537; NONEON-NOSVE-LABEL: and_v4i64:538; NONEON-NOSVE: // %bb.0:539; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]540; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!541; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64542; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]543; NONEON-NOSVE-NEXT: and x9, x8, #0x3f544; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]545; NONEON-NOSVE-NEXT: and x8, x8, #0x3f546; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #48]547; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]548; NONEON-NOSVE-NEXT: and x9, x8, #0x3f549; NONEON-NOSVE-NEXT: ldr x8, [sp]550; NONEON-NOSVE-NEXT: and x8, x8, #0x3f551; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #32]552; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]553; NONEON-NOSVE-NEXT: stp q0, q1, [x0]554; NONEON-NOSVE-NEXT: add sp, sp, #64555; NONEON-NOSVE-NEXT: ret556 %op1 = load <4 x i64>, ptr %a557 %res = and <4 x i64> %op1, splat(i64 63)558 store <4 x i64> %res, ptr %a559 ret void560}561 562;563; ASHR564;565 566define void @ashr_v32i8(ptr %a) {567; CHECK-LABEL: ashr_v32i8:568; CHECK: // %bb.0:569; CHECK-NEXT: ldp q0, q1, [x0]570; CHECK-NEXT: asr z0.b, z0.b, #7571; CHECK-NEXT: asr z1.b, z1.b, #7572; CHECK-NEXT: stp q0, q1, [x0]573; CHECK-NEXT: ret574;575; NONEON-NOSVE-LABEL: ashr_v32i8:576; NONEON-NOSVE: // %bb.0:577; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]578; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!579; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64580; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #31]581; NONEON-NOSVE-NEXT: lsr w8, w8, #7582; NONEON-NOSVE-NEXT: strb w8, [sp, #63]583; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #30]584; NONEON-NOSVE-NEXT: lsr w8, w8, #7585; NONEON-NOSVE-NEXT: strb w8, [sp, #62]586; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #29]587; NONEON-NOSVE-NEXT: lsr w8, w8, #7588; NONEON-NOSVE-NEXT: strb w8, [sp, #61]589; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #28]590; NONEON-NOSVE-NEXT: lsr w8, w8, #7591; NONEON-NOSVE-NEXT: strb w8, [sp, #60]592; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #27]593; NONEON-NOSVE-NEXT: lsr w8, w8, #7594; NONEON-NOSVE-NEXT: strb w8, [sp, #59]595; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #26]596; NONEON-NOSVE-NEXT: lsr w8, w8, #7597; NONEON-NOSVE-NEXT: strb w8, [sp, #58]598; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #25]599; NONEON-NOSVE-NEXT: lsr w8, w8, #7600; NONEON-NOSVE-NEXT: strb w8, [sp, #57]601; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #24]602; NONEON-NOSVE-NEXT: lsr w8, w8, #7603; NONEON-NOSVE-NEXT: strb w8, [sp, #56]604; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #23]605; NONEON-NOSVE-NEXT: lsr w8, w8, #7606; NONEON-NOSVE-NEXT: strb w8, [sp, #55]607; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #22]608; NONEON-NOSVE-NEXT: lsr w8, w8, #7609; NONEON-NOSVE-NEXT: strb w8, [sp, #54]610; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #21]611; NONEON-NOSVE-NEXT: lsr w8, w8, #7612; NONEON-NOSVE-NEXT: strb w8, [sp, #53]613; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #20]614; NONEON-NOSVE-NEXT: lsr w8, w8, #7615; NONEON-NOSVE-NEXT: strb w8, [sp, #52]616; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #19]617; NONEON-NOSVE-NEXT: lsr w8, w8, #7618; NONEON-NOSVE-NEXT: strb w8, [sp, #51]619; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #18]620; NONEON-NOSVE-NEXT: lsr w8, w8, #7621; NONEON-NOSVE-NEXT: strb w8, [sp, #50]622; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #17]623; NONEON-NOSVE-NEXT: lsr w8, w8, #7624; NONEON-NOSVE-NEXT: strb w8, [sp, #49]625; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #16]626; NONEON-NOSVE-NEXT: lsr w8, w8, #7627; NONEON-NOSVE-NEXT: strb w8, [sp, #48]628; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #15]629; NONEON-NOSVE-NEXT: lsr w8, w8, #7630; NONEON-NOSVE-NEXT: strb w8, [sp, #47]631; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #14]632; NONEON-NOSVE-NEXT: lsr w8, w8, #7633; NONEON-NOSVE-NEXT: strb w8, [sp, #46]634; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #13]635; NONEON-NOSVE-NEXT: lsr w8, w8, #7636; NONEON-NOSVE-NEXT: strb w8, [sp, #45]637; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #12]638; NONEON-NOSVE-NEXT: lsr w8, w8, #7639; NONEON-NOSVE-NEXT: strb w8, [sp, #44]640; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #11]641; NONEON-NOSVE-NEXT: lsr w8, w8, #7642; NONEON-NOSVE-NEXT: strb w8, [sp, #43]643; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #10]644; NONEON-NOSVE-NEXT: lsr w8, w8, #7645; NONEON-NOSVE-NEXT: strb w8, [sp, #42]646; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #9]647; NONEON-NOSVE-NEXT: lsr w8, w8, #7648; NONEON-NOSVE-NEXT: strb w8, [sp, #41]649; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #8]650; NONEON-NOSVE-NEXT: lsr w8, w8, #7651; NONEON-NOSVE-NEXT: strb w8, [sp, #40]652; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #7]653; NONEON-NOSVE-NEXT: lsr w8, w8, #7654; NONEON-NOSVE-NEXT: strb w8, [sp, #39]655; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #6]656; NONEON-NOSVE-NEXT: lsr w8, w8, #7657; NONEON-NOSVE-NEXT: strb w8, [sp, #38]658; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #5]659; NONEON-NOSVE-NEXT: lsr w8, w8, #7660; NONEON-NOSVE-NEXT: strb w8, [sp, #37]661; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #4]662; NONEON-NOSVE-NEXT: lsr w8, w8, #7663; NONEON-NOSVE-NEXT: strb w8, [sp, #36]664; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #3]665; NONEON-NOSVE-NEXT: lsr w8, w8, #7666; NONEON-NOSVE-NEXT: strb w8, [sp, #35]667; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #2]668; NONEON-NOSVE-NEXT: lsr w8, w8, #7669; NONEON-NOSVE-NEXT: strb w8, [sp, #34]670; NONEON-NOSVE-NEXT: ldrsb w8, [sp, #1]671; NONEON-NOSVE-NEXT: lsr w8, w8, #7672; NONEON-NOSVE-NEXT: strb w8, [sp, #33]673; NONEON-NOSVE-NEXT: ldrsb w8, [sp]674; NONEON-NOSVE-NEXT: lsr w8, w8, #7675; NONEON-NOSVE-NEXT: strb w8, [sp, #32]676; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]677; NONEON-NOSVE-NEXT: stp q0, q1, [x0]678; NONEON-NOSVE-NEXT: add sp, sp, #64679; NONEON-NOSVE-NEXT: ret680 %op1 = load <32 x i8>, ptr %a681 %res = ashr <32 x i8> %op1, splat(i8 7)682 store <32 x i8> %res, ptr %a683 ret void684}685 686define void @ashr_v16i16(ptr %a) {687; CHECK-LABEL: ashr_v16i16:688; CHECK: // %bb.0:689; CHECK-NEXT: ldp q0, q1, [x0]690; CHECK-NEXT: asr z0.h, z0.h, #15691; CHECK-NEXT: asr z1.h, z1.h, #15692; CHECK-NEXT: stp q0, q1, [x0]693; CHECK-NEXT: ret694;695; NONEON-NOSVE-LABEL: ashr_v16i16:696; NONEON-NOSVE: // %bb.0:697; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]698; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!699; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64700; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #30]701; NONEON-NOSVE-NEXT: lsr w8, w8, #15702; NONEON-NOSVE-NEXT: strh w8, [sp, #62]703; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #28]704; NONEON-NOSVE-NEXT: lsr w8, w8, #15705; NONEON-NOSVE-NEXT: strh w8, [sp, #60]706; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #26]707; NONEON-NOSVE-NEXT: lsr w8, w8, #15708; NONEON-NOSVE-NEXT: strh w8, [sp, #58]709; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #24]710; NONEON-NOSVE-NEXT: lsr w8, w8, #15711; NONEON-NOSVE-NEXT: strh w8, [sp, #56]712; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #22]713; NONEON-NOSVE-NEXT: lsr w8, w8, #15714; NONEON-NOSVE-NEXT: strh w8, [sp, #54]715; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #20]716; NONEON-NOSVE-NEXT: lsr w8, w8, #15717; NONEON-NOSVE-NEXT: strh w8, [sp, #52]718; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #18]719; NONEON-NOSVE-NEXT: lsr w8, w8, #15720; NONEON-NOSVE-NEXT: strh w8, [sp, #50]721; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #16]722; NONEON-NOSVE-NEXT: lsr w8, w8, #15723; NONEON-NOSVE-NEXT: strh w8, [sp, #48]724; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #14]725; NONEON-NOSVE-NEXT: lsr w8, w8, #15726; NONEON-NOSVE-NEXT: strh w8, [sp, #46]727; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #12]728; NONEON-NOSVE-NEXT: lsr w8, w8, #15729; NONEON-NOSVE-NEXT: strh w8, [sp, #44]730; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #10]731; NONEON-NOSVE-NEXT: lsr w8, w8, #15732; NONEON-NOSVE-NEXT: strh w8, [sp, #42]733; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #8]734; NONEON-NOSVE-NEXT: lsr w8, w8, #15735; NONEON-NOSVE-NEXT: strh w8, [sp, #40]736; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #6]737; NONEON-NOSVE-NEXT: lsr w8, w8, #15738; NONEON-NOSVE-NEXT: strh w8, [sp, #38]739; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #4]740; NONEON-NOSVE-NEXT: lsr w8, w8, #15741; NONEON-NOSVE-NEXT: strh w8, [sp, #36]742; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #2]743; NONEON-NOSVE-NEXT: lsr w8, w8, #15744; NONEON-NOSVE-NEXT: strh w8, [sp, #34]745; NONEON-NOSVE-NEXT: ldrsh w8, [sp]746; NONEON-NOSVE-NEXT: lsr w8, w8, #15747; NONEON-NOSVE-NEXT: strh w8, [sp, #32]748; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]749; NONEON-NOSVE-NEXT: stp q0, q1, [x0]750; NONEON-NOSVE-NEXT: add sp, sp, #64751; NONEON-NOSVE-NEXT: ret752 %op1 = load <16 x i16>, ptr %a753 %res = ashr <16 x i16> %op1, splat(i16 15)754 store <16 x i16> %res, ptr %a755 ret void756}757 758define void @ashr_v8i32(ptr %a) {759; CHECK-LABEL: ashr_v8i32:760; CHECK: // %bb.0:761; CHECK-NEXT: ldp q0, q1, [x0]762; CHECK-NEXT: asr z0.s, z0.s, #31763; CHECK-NEXT: asr z1.s, z1.s, #31764; CHECK-NEXT: stp q0, q1, [x0]765; CHECK-NEXT: ret766;767; NONEON-NOSVE-LABEL: ashr_v8i32:768; NONEON-NOSVE: // %bb.0:769; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]770; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!771; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64772; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]773; NONEON-NOSVE-NEXT: asr w9, w8, #31774; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]775; NONEON-NOSVE-NEXT: asr w8, w8, #31776; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]777; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]778; NONEON-NOSVE-NEXT: asr w9, w8, #31779; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]780; NONEON-NOSVE-NEXT: asr w8, w8, #31781; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]782; NONEON-NOSVE-NEXT: ldr w8, [sp, #12]783; NONEON-NOSVE-NEXT: asr w9, w8, #31784; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]785; NONEON-NOSVE-NEXT: asr w8, w8, #31786; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]787; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]788; NONEON-NOSVE-NEXT: asr w9, w8, #31789; NONEON-NOSVE-NEXT: ldr w8, [sp]790; NONEON-NOSVE-NEXT: asr w8, w8, #31791; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]792; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]793; NONEON-NOSVE-NEXT: stp q0, q1, [x0]794; NONEON-NOSVE-NEXT: add sp, sp, #64795; NONEON-NOSVE-NEXT: ret796 %op1 = load <8 x i32>, ptr %a797 %res = ashr <8 x i32> %op1, splat(i32 31)798 store <8 x i32> %res, ptr %a799 ret void800}801 802define void @ashr_v4i64(ptr %a) {803; CHECK-LABEL: ashr_v4i64:804; CHECK: // %bb.0:805; CHECK-NEXT: ldp q0, q1, [x0]806; CHECK-NEXT: asr z0.d, z0.d, #63807; CHECK-NEXT: asr z1.d, z1.d, #63808; CHECK-NEXT: stp q0, q1, [x0]809; CHECK-NEXT: ret810;811; NONEON-NOSVE-LABEL: ashr_v4i64:812; NONEON-NOSVE: // %bb.0:813; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]814; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!815; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64816; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]817; NONEON-NOSVE-NEXT: asr x9, x8, #63818; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]819; NONEON-NOSVE-NEXT: asr x8, x8, #63820; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #48]821; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]822; NONEON-NOSVE-NEXT: asr x9, x8, #63823; NONEON-NOSVE-NEXT: ldr x8, [sp]824; NONEON-NOSVE-NEXT: asr x8, x8, #63825; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #32]826; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]827; NONEON-NOSVE-NEXT: stp q0, q1, [x0]828; NONEON-NOSVE-NEXT: add sp, sp, #64829; NONEON-NOSVE-NEXT: ret830 %op1 = load <4 x i64>, ptr %a831 %res = ashr <4 x i64> %op1, splat(i64 63)832 store <4 x i64> %res, ptr %a833 ret void834}835 836;837; ICMP838;839 840define void @icmp_eq_v32i8(ptr %a) {841; CHECK-LABEL: icmp_eq_v32i8:842; CHECK: // %bb.0:843; CHECK-NEXT: ldp q0, q1, [x0]844; CHECK-NEXT: ptrue p0.b, vl16845; CHECK-NEXT: cmpeq p1.b, p0/z, z0.b, #7846; CHECK-NEXT: cmpeq p0.b, p0/z, z1.b, #7847; CHECK-NEXT: mov z0.b, p1/z, #-1 // =0xffffffffffffffff848; CHECK-NEXT: mov z1.b, p0/z, #-1 // =0xffffffffffffffff849; CHECK-NEXT: stp q0, q1, [x0]850; CHECK-NEXT: ret851;852; NONEON-NOSVE-LABEL: icmp_eq_v32i8:853; NONEON-NOSVE: // %bb.0:854; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]855; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!856; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64857; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]858; NONEON-NOSVE-NEXT: cmp w8, #7859; NONEON-NOSVE-NEXT: csetm w8, eq860; NONEON-NOSVE-NEXT: strb w8, [sp, #63]861; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]862; NONEON-NOSVE-NEXT: cmp w8, #7863; NONEON-NOSVE-NEXT: csetm w8, eq864; NONEON-NOSVE-NEXT: strb w8, [sp, #62]865; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]866; NONEON-NOSVE-NEXT: cmp w8, #7867; NONEON-NOSVE-NEXT: csetm w8, eq868; NONEON-NOSVE-NEXT: strb w8, [sp, #61]869; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]870; NONEON-NOSVE-NEXT: cmp w8, #7871; NONEON-NOSVE-NEXT: csetm w8, eq872; NONEON-NOSVE-NEXT: strb w8, [sp, #60]873; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]874; NONEON-NOSVE-NEXT: cmp w8, #7875; NONEON-NOSVE-NEXT: csetm w8, eq876; NONEON-NOSVE-NEXT: strb w8, [sp, #59]877; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]878; NONEON-NOSVE-NEXT: cmp w8, #7879; NONEON-NOSVE-NEXT: csetm w8, eq880; NONEON-NOSVE-NEXT: strb w8, [sp, #58]881; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]882; NONEON-NOSVE-NEXT: cmp w8, #7883; NONEON-NOSVE-NEXT: csetm w8, eq884; NONEON-NOSVE-NEXT: strb w8, [sp, #57]885; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]886; NONEON-NOSVE-NEXT: cmp w8, #7887; NONEON-NOSVE-NEXT: csetm w8, eq888; NONEON-NOSVE-NEXT: strb w8, [sp, #56]889; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]890; NONEON-NOSVE-NEXT: cmp w8, #7891; NONEON-NOSVE-NEXT: csetm w8, eq892; NONEON-NOSVE-NEXT: strb w8, [sp, #55]893; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]894; NONEON-NOSVE-NEXT: cmp w8, #7895; NONEON-NOSVE-NEXT: csetm w8, eq896; NONEON-NOSVE-NEXT: strb w8, [sp, #54]897; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]898; NONEON-NOSVE-NEXT: cmp w8, #7899; NONEON-NOSVE-NEXT: csetm w8, eq900; NONEON-NOSVE-NEXT: strb w8, [sp, #53]901; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]902; NONEON-NOSVE-NEXT: cmp w8, #7903; NONEON-NOSVE-NEXT: csetm w8, eq904; NONEON-NOSVE-NEXT: strb w8, [sp, #52]905; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]906; NONEON-NOSVE-NEXT: cmp w8, #7907; NONEON-NOSVE-NEXT: csetm w8, eq908; NONEON-NOSVE-NEXT: strb w8, [sp, #51]909; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]910; NONEON-NOSVE-NEXT: cmp w8, #7911; NONEON-NOSVE-NEXT: csetm w8, eq912; NONEON-NOSVE-NEXT: strb w8, [sp, #50]913; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]914; NONEON-NOSVE-NEXT: cmp w8, #7915; NONEON-NOSVE-NEXT: csetm w8, eq916; NONEON-NOSVE-NEXT: strb w8, [sp, #49]917; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]918; NONEON-NOSVE-NEXT: cmp w8, #7919; NONEON-NOSVE-NEXT: csetm w8, eq920; NONEON-NOSVE-NEXT: strb w8, [sp, #48]921; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]922; NONEON-NOSVE-NEXT: cmp w8, #7923; NONEON-NOSVE-NEXT: csetm w8, eq924; NONEON-NOSVE-NEXT: strb w8, [sp, #47]925; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]926; NONEON-NOSVE-NEXT: cmp w8, #7927; NONEON-NOSVE-NEXT: csetm w8, eq928; NONEON-NOSVE-NEXT: strb w8, [sp, #46]929; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]930; NONEON-NOSVE-NEXT: cmp w8, #7931; NONEON-NOSVE-NEXT: csetm w8, eq932; NONEON-NOSVE-NEXT: strb w8, [sp, #45]933; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]934; NONEON-NOSVE-NEXT: cmp w8, #7935; NONEON-NOSVE-NEXT: csetm w8, eq936; NONEON-NOSVE-NEXT: strb w8, [sp, #44]937; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]938; NONEON-NOSVE-NEXT: cmp w8, #7939; NONEON-NOSVE-NEXT: csetm w8, eq940; NONEON-NOSVE-NEXT: strb w8, [sp, #43]941; NONEON-NOSVE-NEXT: ldrb w8, [sp, #10]942; NONEON-NOSVE-NEXT: cmp w8, #7943; NONEON-NOSVE-NEXT: csetm w8, eq944; NONEON-NOSVE-NEXT: strb w8, [sp, #42]945; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]946; NONEON-NOSVE-NEXT: cmp w8, #7947; NONEON-NOSVE-NEXT: csetm w8, eq948; NONEON-NOSVE-NEXT: strb w8, [sp, #41]949; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]950; NONEON-NOSVE-NEXT: cmp w8, #7951; NONEON-NOSVE-NEXT: csetm w8, eq952; NONEON-NOSVE-NEXT: strb w8, [sp, #40]953; NONEON-NOSVE-NEXT: ldrb w8, [sp, #7]954; NONEON-NOSVE-NEXT: cmp w8, #7955; NONEON-NOSVE-NEXT: csetm w8, eq956; NONEON-NOSVE-NEXT: strb w8, [sp, #39]957; NONEON-NOSVE-NEXT: ldrb w8, [sp, #6]958; NONEON-NOSVE-NEXT: cmp w8, #7959; NONEON-NOSVE-NEXT: csetm w8, eq960; NONEON-NOSVE-NEXT: strb w8, [sp, #38]961; NONEON-NOSVE-NEXT: ldrb w8, [sp, #5]962; NONEON-NOSVE-NEXT: cmp w8, #7963; NONEON-NOSVE-NEXT: csetm w8, eq964; NONEON-NOSVE-NEXT: strb w8, [sp, #37]965; NONEON-NOSVE-NEXT: ldrb w8, [sp, #4]966; NONEON-NOSVE-NEXT: cmp w8, #7967; NONEON-NOSVE-NEXT: csetm w8, eq968; NONEON-NOSVE-NEXT: strb w8, [sp, #36]969; NONEON-NOSVE-NEXT: ldrb w8, [sp, #3]970; NONEON-NOSVE-NEXT: cmp w8, #7971; NONEON-NOSVE-NEXT: csetm w8, eq972; NONEON-NOSVE-NEXT: strb w8, [sp, #35]973; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]974; NONEON-NOSVE-NEXT: cmp w8, #7975; NONEON-NOSVE-NEXT: csetm w8, eq976; NONEON-NOSVE-NEXT: strb w8, [sp, #34]977; NONEON-NOSVE-NEXT: ldrb w8, [sp, #1]978; NONEON-NOSVE-NEXT: cmp w8, #7979; NONEON-NOSVE-NEXT: csetm w8, eq980; NONEON-NOSVE-NEXT: strb w8, [sp, #33]981; NONEON-NOSVE-NEXT: ldrb w8, [sp]982; NONEON-NOSVE-NEXT: cmp w8, #7983; NONEON-NOSVE-NEXT: csetm w8, eq984; NONEON-NOSVE-NEXT: strb w8, [sp, #32]985; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]986; NONEON-NOSVE-NEXT: stp q0, q1, [x0]987; NONEON-NOSVE-NEXT: add sp, sp, #64988; NONEON-NOSVE-NEXT: ret989 %op1 = load <32 x i8>, ptr %a990 %cmp = icmp eq <32 x i8> %op1, splat(i8 7)991 %res = sext <32 x i1> %cmp to <32 x i8>992 store <32 x i8> %res, ptr %a993 ret void994}995 996define void @icmp_sge_v16i16(ptr %a) {997; CHECK-LABEL: icmp_sge_v16i16:998; CHECK: // %bb.0:999; CHECK-NEXT: ldp q0, q1, [x0]1000; CHECK-NEXT: ptrue p0.h, vl81001; CHECK-NEXT: cmpge p1.h, p0/z, z0.h, #151002; CHECK-NEXT: cmpge p0.h, p0/z, z1.h, #151003; CHECK-NEXT: mov z0.h, p1/z, #-1 // =0xffffffffffffffff1004; CHECK-NEXT: mov z1.h, p0/z, #-1 // =0xffffffffffffffff1005; CHECK-NEXT: stp q0, q1, [x0]1006; CHECK-NEXT: ret1007;1008; NONEON-NOSVE-LABEL: icmp_sge_v16i16:1009; NONEON-NOSVE: // %bb.0:1010; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1011; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1012; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641013; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #30]1014; NONEON-NOSVE-NEXT: cmp w8, #141015; NONEON-NOSVE-NEXT: csetm w8, gt1016; NONEON-NOSVE-NEXT: strh w8, [sp, #62]1017; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #28]1018; NONEON-NOSVE-NEXT: cmp w8, #141019; NONEON-NOSVE-NEXT: csetm w8, gt1020; NONEON-NOSVE-NEXT: strh w8, [sp, #60]1021; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #26]1022; NONEON-NOSVE-NEXT: cmp w8, #141023; NONEON-NOSVE-NEXT: csetm w8, gt1024; NONEON-NOSVE-NEXT: strh w8, [sp, #58]1025; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #24]1026; NONEON-NOSVE-NEXT: cmp w8, #141027; NONEON-NOSVE-NEXT: csetm w8, gt1028; NONEON-NOSVE-NEXT: strh w8, [sp, #56]1029; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #22]1030; NONEON-NOSVE-NEXT: cmp w8, #141031; NONEON-NOSVE-NEXT: csetm w8, gt1032; NONEON-NOSVE-NEXT: strh w8, [sp, #54]1033; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #20]1034; NONEON-NOSVE-NEXT: cmp w8, #141035; NONEON-NOSVE-NEXT: csetm w8, gt1036; NONEON-NOSVE-NEXT: strh w8, [sp, #52]1037; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #18]1038; NONEON-NOSVE-NEXT: cmp w8, #141039; NONEON-NOSVE-NEXT: csetm w8, gt1040; NONEON-NOSVE-NEXT: strh w8, [sp, #50]1041; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #16]1042; NONEON-NOSVE-NEXT: cmp w8, #141043; NONEON-NOSVE-NEXT: csetm w8, gt1044; NONEON-NOSVE-NEXT: strh w8, [sp, #48]1045; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #14]1046; NONEON-NOSVE-NEXT: cmp w8, #141047; NONEON-NOSVE-NEXT: csetm w8, gt1048; NONEON-NOSVE-NEXT: strh w8, [sp, #46]1049; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #12]1050; NONEON-NOSVE-NEXT: cmp w8, #141051; NONEON-NOSVE-NEXT: csetm w8, gt1052; NONEON-NOSVE-NEXT: strh w8, [sp, #44]1053; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #10]1054; NONEON-NOSVE-NEXT: cmp w8, #141055; NONEON-NOSVE-NEXT: csetm w8, gt1056; NONEON-NOSVE-NEXT: strh w8, [sp, #42]1057; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #8]1058; NONEON-NOSVE-NEXT: cmp w8, #141059; NONEON-NOSVE-NEXT: csetm w8, gt1060; NONEON-NOSVE-NEXT: strh w8, [sp, #40]1061; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #6]1062; NONEON-NOSVE-NEXT: cmp w8, #141063; NONEON-NOSVE-NEXT: csetm w8, gt1064; NONEON-NOSVE-NEXT: strh w8, [sp, #38]1065; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #4]1066; NONEON-NOSVE-NEXT: cmp w8, #141067; NONEON-NOSVE-NEXT: csetm w8, gt1068; NONEON-NOSVE-NEXT: strh w8, [sp, #36]1069; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #2]1070; NONEON-NOSVE-NEXT: cmp w8, #141071; NONEON-NOSVE-NEXT: csetm w8, gt1072; NONEON-NOSVE-NEXT: strh w8, [sp, #34]1073; NONEON-NOSVE-NEXT: ldrsh w8, [sp]1074; NONEON-NOSVE-NEXT: cmp w8, #141075; NONEON-NOSVE-NEXT: csetm w8, gt1076; NONEON-NOSVE-NEXT: strh w8, [sp, #32]1077; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1078; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1079; NONEON-NOSVE-NEXT: add sp, sp, #641080; NONEON-NOSVE-NEXT: ret1081 %op1 = load <16 x i16>, ptr %a1082 %cmp = icmp sge <16 x i16> %op1, splat(i16 15)1083 %res = sext <16 x i1> %cmp to <16 x i16>1084 store <16 x i16> %res, ptr %a1085 ret void1086}1087 1088define void @icmp_sgt_v8i32(ptr %a) {1089; CHECK-LABEL: icmp_sgt_v8i32:1090; CHECK: // %bb.0:1091; CHECK-NEXT: ldp q0, q1, [x0]1092; CHECK-NEXT: ptrue p0.s, vl41093; CHECK-NEXT: cmpgt p1.s, p0/z, z0.s, #-81094; CHECK-NEXT: cmpgt p0.s, p0/z, z1.s, #-81095; CHECK-NEXT: mov z0.s, p1/z, #-1 // =0xffffffffffffffff1096; CHECK-NEXT: mov z1.s, p0/z, #-1 // =0xffffffffffffffff1097; CHECK-NEXT: stp q0, q1, [x0]1098; CHECK-NEXT: ret1099;1100; NONEON-NOSVE-LABEL: icmp_sgt_v8i32:1101; NONEON-NOSVE: // %bb.0:1102; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1103; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1104; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641105; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]1106; NONEON-NOSVE-NEXT: cmn w8, #81107; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]1108; NONEON-NOSVE-NEXT: csetm w9, gt1109; NONEON-NOSVE-NEXT: cmn w8, #81110; NONEON-NOSVE-NEXT: csetm w8, gt1111; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]1112; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]1113; NONEON-NOSVE-NEXT: cmn w8, #81114; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]1115; NONEON-NOSVE-NEXT: csetm w9, gt1116; NONEON-NOSVE-NEXT: cmn w8, #81117; NONEON-NOSVE-NEXT: csetm w8, gt1118; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]1119; NONEON-NOSVE-NEXT: ldr w8, [sp, #12]1120; NONEON-NOSVE-NEXT: cmn w8, #81121; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]1122; NONEON-NOSVE-NEXT: csetm w9, gt1123; NONEON-NOSVE-NEXT: cmn w8, #81124; NONEON-NOSVE-NEXT: csetm w8, gt1125; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]1126; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]1127; NONEON-NOSVE-NEXT: cmn w8, #81128; NONEON-NOSVE-NEXT: ldr w8, [sp]1129; NONEON-NOSVE-NEXT: csetm w9, gt1130; NONEON-NOSVE-NEXT: cmn w8, #81131; NONEON-NOSVE-NEXT: csetm w8, gt1132; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]1133; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1134; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1135; NONEON-NOSVE-NEXT: add sp, sp, #641136; NONEON-NOSVE-NEXT: ret1137 %op1 = load <8 x i32>, ptr %a1138 %cmp = icmp sgt <8 x i32> %op1, splat(i32 -8)1139 %res = sext <8 x i1> %cmp to <8 x i32>1140 store <8 x i32> %res, ptr %a1141 ret void1142}1143 1144define void @icmp_ult_v4i64(ptr %a) {1145; CHECK-LABEL: icmp_ult_v4i64:1146; CHECK: // %bb.0:1147; CHECK-NEXT: ldp q0, q1, [x0]1148; CHECK-NEXT: ptrue p0.d, vl21149; CHECK-NEXT: cmplo p1.d, p0/z, z0.d, #631150; CHECK-NEXT: cmplo p0.d, p0/z, z1.d, #631151; CHECK-NEXT: mov z0.d, p1/z, #-1 // =0xffffffffffffffff1152; CHECK-NEXT: mov z1.d, p0/z, #-1 // =0xffffffffffffffff1153; CHECK-NEXT: stp q0, q1, [x0]1154; CHECK-NEXT: ret1155;1156; NONEON-NOSVE-LABEL: icmp_ult_v4i64:1157; NONEON-NOSVE: // %bb.0:1158; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1159; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1160; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641161; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]1162; NONEON-NOSVE-NEXT: cmp x8, #631163; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]1164; NONEON-NOSVE-NEXT: csetm x9, lo1165; NONEON-NOSVE-NEXT: cmp x8, #631166; NONEON-NOSVE-NEXT: csetm x8, lo1167; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #48]1168; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]1169; NONEON-NOSVE-NEXT: cmp x8, #631170; NONEON-NOSVE-NEXT: ldr x8, [sp]1171; NONEON-NOSVE-NEXT: csetm x9, lo1172; NONEON-NOSVE-NEXT: cmp x8, #631173; NONEON-NOSVE-NEXT: csetm x8, lo1174; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #32]1175; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1176; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1177; NONEON-NOSVE-NEXT: add sp, sp, #641178; NONEON-NOSVE-NEXT: ret1179 %op1 = load <4 x i64>, ptr %a1180 %cmp = icmp ult <4 x i64> %op1, splat(i64 63)1181 %res = sext <4 x i1> %cmp to <4 x i64>1182 store <4 x i64> %res, ptr %a1183 ret void1184}1185 1186;1187; LSHR1188;1189 1190define void @lshr_v32i8(ptr %a) {1191; CHECK-LABEL: lshr_v32i8:1192; CHECK: // %bb.0:1193; CHECK-NEXT: ldp q0, q1, [x0]1194; CHECK-NEXT: lsr z0.b, z0.b, #71195; CHECK-NEXT: lsr z1.b, z1.b, #71196; CHECK-NEXT: stp q0, q1, [x0]1197; CHECK-NEXT: ret1198;1199; NONEON-NOSVE-LABEL: lshr_v32i8:1200; NONEON-NOSVE: // %bb.0:1201; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1202; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1203; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641204; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]1205; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11206; NONEON-NOSVE-NEXT: strb w8, [sp, #63]1207; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]1208; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11209; NONEON-NOSVE-NEXT: strb w8, [sp, #62]1210; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]1211; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11212; NONEON-NOSVE-NEXT: strb w8, [sp, #61]1213; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]1214; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11215; NONEON-NOSVE-NEXT: strb w8, [sp, #60]1216; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]1217; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11218; NONEON-NOSVE-NEXT: strb w8, [sp, #59]1219; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]1220; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11221; NONEON-NOSVE-NEXT: strb w8, [sp, #58]1222; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]1223; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11224; NONEON-NOSVE-NEXT: strb w8, [sp, #57]1225; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]1226; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11227; NONEON-NOSVE-NEXT: strb w8, [sp, #56]1228; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]1229; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11230; NONEON-NOSVE-NEXT: strb w8, [sp, #55]1231; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]1232; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11233; NONEON-NOSVE-NEXT: strb w8, [sp, #54]1234; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]1235; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11236; NONEON-NOSVE-NEXT: strb w8, [sp, #53]1237; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]1238; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11239; NONEON-NOSVE-NEXT: strb w8, [sp, #52]1240; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]1241; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11242; NONEON-NOSVE-NEXT: strb w8, [sp, #51]1243; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]1244; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11245; NONEON-NOSVE-NEXT: strb w8, [sp, #50]1246; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]1247; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11248; NONEON-NOSVE-NEXT: strb w8, [sp, #49]1249; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]1250; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11251; NONEON-NOSVE-NEXT: strb w8, [sp, #48]1252; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]1253; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11254; NONEON-NOSVE-NEXT: strb w8, [sp, #47]1255; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]1256; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11257; NONEON-NOSVE-NEXT: strb w8, [sp, #46]1258; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]1259; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11260; NONEON-NOSVE-NEXT: strb w8, [sp, #45]1261; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]1262; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11263; NONEON-NOSVE-NEXT: strb w8, [sp, #44]1264; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]1265; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11266; NONEON-NOSVE-NEXT: strb w8, [sp, #43]1267; NONEON-NOSVE-NEXT: ldrb w8, [sp, #10]1268; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11269; NONEON-NOSVE-NEXT: strb w8, [sp, #42]1270; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]1271; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11272; NONEON-NOSVE-NEXT: strb w8, [sp, #41]1273; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]1274; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11275; NONEON-NOSVE-NEXT: strb w8, [sp, #40]1276; NONEON-NOSVE-NEXT: ldrb w8, [sp, #7]1277; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11278; NONEON-NOSVE-NEXT: strb w8, [sp, #39]1279; NONEON-NOSVE-NEXT: ldrb w8, [sp, #6]1280; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11281; NONEON-NOSVE-NEXT: strb w8, [sp, #38]1282; NONEON-NOSVE-NEXT: ldrb w8, [sp, #5]1283; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11284; NONEON-NOSVE-NEXT: strb w8, [sp, #37]1285; NONEON-NOSVE-NEXT: ldrb w8, [sp, #4]1286; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11287; NONEON-NOSVE-NEXT: strb w8, [sp, #36]1288; NONEON-NOSVE-NEXT: ldrb w8, [sp, #3]1289; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11290; NONEON-NOSVE-NEXT: strb w8, [sp, #35]1291; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]1292; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11293; NONEON-NOSVE-NEXT: strb w8, [sp, #34]1294; NONEON-NOSVE-NEXT: ldrb w8, [sp, #1]1295; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11296; NONEON-NOSVE-NEXT: strb w8, [sp, #33]1297; NONEON-NOSVE-NEXT: ldrb w8, [sp]1298; NONEON-NOSVE-NEXT: ubfx w8, w8, #7, #11299; NONEON-NOSVE-NEXT: strb w8, [sp, #32]1300; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1301; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1302; NONEON-NOSVE-NEXT: add sp, sp, #641303; NONEON-NOSVE-NEXT: ret1304 %op1 = load <32 x i8>, ptr %a1305 %res = lshr <32 x i8> %op1, splat(i8 7)1306 store <32 x i8> %res, ptr %a1307 ret void1308}1309 1310define void @lshr_v16i16(ptr %a) {1311; CHECK-LABEL: lshr_v16i16:1312; CHECK: // %bb.0:1313; CHECK-NEXT: ldp q0, q1, [x0]1314; CHECK-NEXT: lsr z0.h, z0.h, #151315; CHECK-NEXT: lsr z1.h, z1.h, #151316; CHECK-NEXT: stp q0, q1, [x0]1317; CHECK-NEXT: ret1318;1319; NONEON-NOSVE-LABEL: lshr_v16i16:1320; NONEON-NOSVE: // %bb.0:1321; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1322; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1323; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641324; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]1325; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11326; NONEON-NOSVE-NEXT: strh w8, [sp, #62]1327; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]1328; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11329; NONEON-NOSVE-NEXT: strh w8, [sp, #60]1330; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]1331; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11332; NONEON-NOSVE-NEXT: strh w8, [sp, #58]1333; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]1334; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11335; NONEON-NOSVE-NEXT: strh w8, [sp, #56]1336; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]1337; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11338; NONEON-NOSVE-NEXT: strh w8, [sp, #54]1339; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]1340; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11341; NONEON-NOSVE-NEXT: strh w8, [sp, #52]1342; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]1343; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11344; NONEON-NOSVE-NEXT: strh w8, [sp, #50]1345; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]1346; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11347; NONEON-NOSVE-NEXT: strh w8, [sp, #48]1348; NONEON-NOSVE-NEXT: ldrh w8, [sp, #14]1349; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11350; NONEON-NOSVE-NEXT: strh w8, [sp, #46]1351; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]1352; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11353; NONEON-NOSVE-NEXT: strh w8, [sp, #44]1354; NONEON-NOSVE-NEXT: ldrh w8, [sp, #10]1355; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11356; NONEON-NOSVE-NEXT: strh w8, [sp, #42]1357; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8]1358; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11359; NONEON-NOSVE-NEXT: strh w8, [sp, #40]1360; NONEON-NOSVE-NEXT: ldrh w8, [sp, #6]1361; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11362; NONEON-NOSVE-NEXT: strh w8, [sp, #38]1363; NONEON-NOSVE-NEXT: ldrh w8, [sp, #4]1364; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11365; NONEON-NOSVE-NEXT: strh w8, [sp, #36]1366; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]1367; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11368; NONEON-NOSVE-NEXT: strh w8, [sp, #34]1369; NONEON-NOSVE-NEXT: ldrh w8, [sp]1370; NONEON-NOSVE-NEXT: ubfx w8, w8, #15, #11371; NONEON-NOSVE-NEXT: strh w8, [sp, #32]1372; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1373; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1374; NONEON-NOSVE-NEXT: add sp, sp, #641375; NONEON-NOSVE-NEXT: ret1376 %op1 = load <16 x i16>, ptr %a1377 %res = lshr <16 x i16> %op1, splat(i16 15)1378 store <16 x i16> %res, ptr %a1379 ret void1380}1381 1382define void @lshr_v8i32(ptr %a) {1383; CHECK-LABEL: lshr_v8i32:1384; CHECK: // %bb.0:1385; CHECK-NEXT: ldp q0, q1, [x0]1386; CHECK-NEXT: lsr z0.s, z0.s, #311387; CHECK-NEXT: lsr z1.s, z1.s, #311388; CHECK-NEXT: stp q0, q1, [x0]1389; CHECK-NEXT: ret1390;1391; NONEON-NOSVE-LABEL: lshr_v8i32:1392; NONEON-NOSVE: // %bb.0:1393; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1394; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1395; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641396; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]1397; NONEON-NOSVE-NEXT: lsr w9, w8, #311398; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]1399; NONEON-NOSVE-NEXT: lsr w8, w8, #311400; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]1401; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]1402; NONEON-NOSVE-NEXT: lsr w9, w8, #311403; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]1404; NONEON-NOSVE-NEXT: lsr w8, w8, #311405; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]1406; NONEON-NOSVE-NEXT: ldr w8, [sp, #12]1407; NONEON-NOSVE-NEXT: lsr w9, w8, #311408; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]1409; NONEON-NOSVE-NEXT: lsr w8, w8, #311410; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]1411; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]1412; NONEON-NOSVE-NEXT: lsr w9, w8, #311413; NONEON-NOSVE-NEXT: ldr w8, [sp]1414; NONEON-NOSVE-NEXT: lsr w8, w8, #311415; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]1416; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1417; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1418; NONEON-NOSVE-NEXT: add sp, sp, #641419; NONEON-NOSVE-NEXT: ret1420 %op1 = load <8 x i32>, ptr %a1421 %res = lshr <8 x i32> %op1, splat(i32 31)1422 store <8 x i32> %res, ptr %a1423 ret void1424}1425 1426define void @lshr_v4i64(ptr %a) {1427; CHECK-LABEL: lshr_v4i64:1428; CHECK: // %bb.0:1429; CHECK-NEXT: ldp q0, q1, [x0]1430; CHECK-NEXT: lsr z0.d, z0.d, #631431; CHECK-NEXT: lsr z1.d, z1.d, #631432; CHECK-NEXT: stp q0, q1, [x0]1433; CHECK-NEXT: ret1434;1435; NONEON-NOSVE-LABEL: lshr_v4i64:1436; NONEON-NOSVE: // %bb.0:1437; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1438; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1439; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641440; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]1441; NONEON-NOSVE-NEXT: lsr x9, x8, #631442; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]1443; NONEON-NOSVE-NEXT: lsr x8, x8, #631444; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #48]1445; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]1446; NONEON-NOSVE-NEXT: lsr x9, x8, #631447; NONEON-NOSVE-NEXT: ldr x8, [sp]1448; NONEON-NOSVE-NEXT: lsr x8, x8, #631449; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #32]1450; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1451; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1452; NONEON-NOSVE-NEXT: add sp, sp, #641453; NONEON-NOSVE-NEXT: ret1454 %op1 = load <4 x i64>, ptr %a1455 %res = lshr <4 x i64> %op1, splat(i64 63)1456 store <4 x i64> %res, ptr %a1457 ret void1458}1459 1460;1461; MUL1462;1463 1464define void @mul_v32i8(ptr %a) {1465; CHECK-LABEL: mul_v32i8:1466; CHECK: // %bb.0:1467; CHECK-NEXT: ldp q0, q1, [x0]1468; CHECK-NEXT: mul z0.b, z0.b, #71469; CHECK-NEXT: mul z1.b, z1.b, #71470; CHECK-NEXT: stp q0, q1, [x0]1471; CHECK-NEXT: ret1472;1473; NONEON-NOSVE-LABEL: mul_v32i8:1474; NONEON-NOSVE: // %bb.0:1475; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1476; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1477; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641478; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]1479; NONEON-NOSVE-NEXT: lsl w9, w8, #31480; NONEON-NOSVE-NEXT: sub w8, w9, w81481; NONEON-NOSVE-NEXT: strb w8, [sp, #63]1482; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]1483; NONEON-NOSVE-NEXT: lsl w9, w8, #31484; NONEON-NOSVE-NEXT: sub w8, w9, w81485; NONEON-NOSVE-NEXT: strb w8, [sp, #62]1486; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]1487; NONEON-NOSVE-NEXT: lsl w9, w8, #31488; NONEON-NOSVE-NEXT: sub w8, w9, w81489; NONEON-NOSVE-NEXT: strb w8, [sp, #61]1490; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]1491; NONEON-NOSVE-NEXT: lsl w9, w8, #31492; NONEON-NOSVE-NEXT: sub w8, w9, w81493; NONEON-NOSVE-NEXT: strb w8, [sp, #60]1494; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]1495; NONEON-NOSVE-NEXT: lsl w9, w8, #31496; NONEON-NOSVE-NEXT: sub w8, w9, w81497; NONEON-NOSVE-NEXT: strb w8, [sp, #59]1498; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]1499; NONEON-NOSVE-NEXT: lsl w9, w8, #31500; NONEON-NOSVE-NEXT: sub w8, w9, w81501; NONEON-NOSVE-NEXT: strb w8, [sp, #58]1502; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]1503; NONEON-NOSVE-NEXT: lsl w9, w8, #31504; NONEON-NOSVE-NEXT: sub w8, w9, w81505; NONEON-NOSVE-NEXT: strb w8, [sp, #57]1506; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]1507; NONEON-NOSVE-NEXT: lsl w9, w8, #31508; NONEON-NOSVE-NEXT: sub w8, w9, w81509; NONEON-NOSVE-NEXT: strb w8, [sp, #56]1510; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]1511; NONEON-NOSVE-NEXT: lsl w9, w8, #31512; NONEON-NOSVE-NEXT: sub w8, w9, w81513; NONEON-NOSVE-NEXT: strb w8, [sp, #55]1514; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]1515; NONEON-NOSVE-NEXT: lsl w9, w8, #31516; NONEON-NOSVE-NEXT: sub w8, w9, w81517; NONEON-NOSVE-NEXT: strb w8, [sp, #54]1518; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]1519; NONEON-NOSVE-NEXT: lsl w9, w8, #31520; NONEON-NOSVE-NEXT: sub w8, w9, w81521; NONEON-NOSVE-NEXT: strb w8, [sp, #53]1522; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]1523; NONEON-NOSVE-NEXT: lsl w9, w8, #31524; NONEON-NOSVE-NEXT: sub w8, w9, w81525; NONEON-NOSVE-NEXT: strb w8, [sp, #52]1526; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]1527; NONEON-NOSVE-NEXT: lsl w9, w8, #31528; NONEON-NOSVE-NEXT: sub w8, w9, w81529; NONEON-NOSVE-NEXT: strb w8, [sp, #51]1530; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]1531; NONEON-NOSVE-NEXT: lsl w9, w8, #31532; NONEON-NOSVE-NEXT: sub w8, w9, w81533; NONEON-NOSVE-NEXT: strb w8, [sp, #50]1534; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]1535; NONEON-NOSVE-NEXT: lsl w9, w8, #31536; NONEON-NOSVE-NEXT: sub w8, w9, w81537; NONEON-NOSVE-NEXT: strb w8, [sp, #49]1538; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]1539; NONEON-NOSVE-NEXT: lsl w9, w8, #31540; NONEON-NOSVE-NEXT: sub w8, w9, w81541; NONEON-NOSVE-NEXT: strb w8, [sp, #48]1542; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]1543; NONEON-NOSVE-NEXT: lsl w9, w8, #31544; NONEON-NOSVE-NEXT: sub w8, w9, w81545; NONEON-NOSVE-NEXT: strb w8, [sp, #47]1546; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]1547; NONEON-NOSVE-NEXT: lsl w9, w8, #31548; NONEON-NOSVE-NEXT: sub w8, w9, w81549; NONEON-NOSVE-NEXT: strb w8, [sp, #46]1550; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]1551; NONEON-NOSVE-NEXT: lsl w9, w8, #31552; NONEON-NOSVE-NEXT: sub w8, w9, w81553; NONEON-NOSVE-NEXT: strb w8, [sp, #45]1554; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]1555; NONEON-NOSVE-NEXT: lsl w9, w8, #31556; NONEON-NOSVE-NEXT: sub w8, w9, w81557; NONEON-NOSVE-NEXT: strb w8, [sp, #44]1558; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]1559; NONEON-NOSVE-NEXT: lsl w9, w8, #31560; NONEON-NOSVE-NEXT: sub w8, w9, w81561; NONEON-NOSVE-NEXT: strb w8, [sp, #43]1562; NONEON-NOSVE-NEXT: ldrb w8, [sp, #10]1563; NONEON-NOSVE-NEXT: lsl w9, w8, #31564; NONEON-NOSVE-NEXT: sub w8, w9, w81565; NONEON-NOSVE-NEXT: strb w8, [sp, #42]1566; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]1567; NONEON-NOSVE-NEXT: lsl w9, w8, #31568; NONEON-NOSVE-NEXT: sub w8, w9, w81569; NONEON-NOSVE-NEXT: strb w8, [sp, #41]1570; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]1571; NONEON-NOSVE-NEXT: lsl w9, w8, #31572; NONEON-NOSVE-NEXT: sub w8, w9, w81573; NONEON-NOSVE-NEXT: strb w8, [sp, #40]1574; NONEON-NOSVE-NEXT: ldrb w8, [sp, #7]1575; NONEON-NOSVE-NEXT: lsl w9, w8, #31576; NONEON-NOSVE-NEXT: sub w8, w9, w81577; NONEON-NOSVE-NEXT: strb w8, [sp, #39]1578; NONEON-NOSVE-NEXT: ldrb w8, [sp, #6]1579; NONEON-NOSVE-NEXT: lsl w9, w8, #31580; NONEON-NOSVE-NEXT: sub w8, w9, w81581; NONEON-NOSVE-NEXT: strb w8, [sp, #38]1582; NONEON-NOSVE-NEXT: ldrb w8, [sp, #5]1583; NONEON-NOSVE-NEXT: lsl w9, w8, #31584; NONEON-NOSVE-NEXT: sub w8, w9, w81585; NONEON-NOSVE-NEXT: strb w8, [sp, #37]1586; NONEON-NOSVE-NEXT: ldrb w8, [sp, #4]1587; NONEON-NOSVE-NEXT: lsl w9, w8, #31588; NONEON-NOSVE-NEXT: sub w8, w9, w81589; NONEON-NOSVE-NEXT: strb w8, [sp, #36]1590; NONEON-NOSVE-NEXT: ldrb w8, [sp, #3]1591; NONEON-NOSVE-NEXT: lsl w9, w8, #31592; NONEON-NOSVE-NEXT: sub w8, w9, w81593; NONEON-NOSVE-NEXT: strb w8, [sp, #35]1594; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]1595; NONEON-NOSVE-NEXT: lsl w9, w8, #31596; NONEON-NOSVE-NEXT: sub w8, w9, w81597; NONEON-NOSVE-NEXT: strb w8, [sp, #34]1598; NONEON-NOSVE-NEXT: ldrb w8, [sp, #1]1599; NONEON-NOSVE-NEXT: lsl w9, w8, #31600; NONEON-NOSVE-NEXT: sub w8, w9, w81601; NONEON-NOSVE-NEXT: strb w8, [sp, #33]1602; NONEON-NOSVE-NEXT: ldrb w8, [sp]1603; NONEON-NOSVE-NEXT: lsl w9, w8, #31604; NONEON-NOSVE-NEXT: sub w8, w9, w81605; NONEON-NOSVE-NEXT: strb w8, [sp, #32]1606; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1607; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1608; NONEON-NOSVE-NEXT: add sp, sp, #641609; NONEON-NOSVE-NEXT: ret1610 %op1 = load <32 x i8>, ptr %a1611 %res = mul <32 x i8> %op1, splat(i8 7)1612 store <32 x i8> %res, ptr %a1613 ret void1614}1615 1616define void @mul_v16i16(ptr %a) {1617; CHECK-LABEL: mul_v16i16:1618; CHECK: // %bb.0:1619; CHECK-NEXT: ldp q0, q1, [x0]1620; CHECK-NEXT: mul z0.h, z0.h, #151621; CHECK-NEXT: mul z1.h, z1.h, #151622; CHECK-NEXT: stp q0, q1, [x0]1623; CHECK-NEXT: ret1624;1625; NONEON-NOSVE-LABEL: mul_v16i16:1626; NONEON-NOSVE: // %bb.0:1627; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1628; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1629; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641630; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]1631; NONEON-NOSVE-NEXT: lsl w9, w8, #41632; NONEON-NOSVE-NEXT: sub w8, w9, w81633; NONEON-NOSVE-NEXT: strh w8, [sp, #62]1634; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]1635; NONEON-NOSVE-NEXT: lsl w9, w8, #41636; NONEON-NOSVE-NEXT: sub w8, w9, w81637; NONEON-NOSVE-NEXT: strh w8, [sp, #60]1638; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]1639; NONEON-NOSVE-NEXT: lsl w9, w8, #41640; NONEON-NOSVE-NEXT: sub w8, w9, w81641; NONEON-NOSVE-NEXT: strh w8, [sp, #58]1642; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]1643; NONEON-NOSVE-NEXT: lsl w9, w8, #41644; NONEON-NOSVE-NEXT: sub w8, w9, w81645; NONEON-NOSVE-NEXT: strh w8, [sp, #56]1646; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]1647; NONEON-NOSVE-NEXT: lsl w9, w8, #41648; NONEON-NOSVE-NEXT: sub w8, w9, w81649; NONEON-NOSVE-NEXT: strh w8, [sp, #54]1650; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]1651; NONEON-NOSVE-NEXT: lsl w9, w8, #41652; NONEON-NOSVE-NEXT: sub w8, w9, w81653; NONEON-NOSVE-NEXT: strh w8, [sp, #52]1654; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]1655; NONEON-NOSVE-NEXT: lsl w9, w8, #41656; NONEON-NOSVE-NEXT: sub w8, w9, w81657; NONEON-NOSVE-NEXT: strh w8, [sp, #50]1658; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]1659; NONEON-NOSVE-NEXT: lsl w9, w8, #41660; NONEON-NOSVE-NEXT: sub w8, w9, w81661; NONEON-NOSVE-NEXT: strh w8, [sp, #48]1662; NONEON-NOSVE-NEXT: ldrh w8, [sp, #14]1663; NONEON-NOSVE-NEXT: lsl w9, w8, #41664; NONEON-NOSVE-NEXT: sub w8, w9, w81665; NONEON-NOSVE-NEXT: strh w8, [sp, #46]1666; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]1667; NONEON-NOSVE-NEXT: lsl w9, w8, #41668; NONEON-NOSVE-NEXT: sub w8, w9, w81669; NONEON-NOSVE-NEXT: strh w8, [sp, #44]1670; NONEON-NOSVE-NEXT: ldrh w8, [sp, #10]1671; NONEON-NOSVE-NEXT: lsl w9, w8, #41672; NONEON-NOSVE-NEXT: sub w8, w9, w81673; NONEON-NOSVE-NEXT: strh w8, [sp, #42]1674; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8]1675; NONEON-NOSVE-NEXT: lsl w9, w8, #41676; NONEON-NOSVE-NEXT: sub w8, w9, w81677; NONEON-NOSVE-NEXT: strh w8, [sp, #40]1678; NONEON-NOSVE-NEXT: ldrh w8, [sp, #6]1679; NONEON-NOSVE-NEXT: lsl w9, w8, #41680; NONEON-NOSVE-NEXT: sub w8, w9, w81681; NONEON-NOSVE-NEXT: strh w8, [sp, #38]1682; NONEON-NOSVE-NEXT: ldrh w8, [sp, #4]1683; NONEON-NOSVE-NEXT: lsl w9, w8, #41684; NONEON-NOSVE-NEXT: sub w8, w9, w81685; NONEON-NOSVE-NEXT: strh w8, [sp, #36]1686; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]1687; NONEON-NOSVE-NEXT: lsl w9, w8, #41688; NONEON-NOSVE-NEXT: sub w8, w9, w81689; NONEON-NOSVE-NEXT: strh w8, [sp, #34]1690; NONEON-NOSVE-NEXT: ldrh w8, [sp]1691; NONEON-NOSVE-NEXT: lsl w9, w8, #41692; NONEON-NOSVE-NEXT: sub w8, w9, w81693; NONEON-NOSVE-NEXT: strh w8, [sp, #32]1694; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1695; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1696; NONEON-NOSVE-NEXT: add sp, sp, #641697; NONEON-NOSVE-NEXT: ret1698 %op1 = load <16 x i16>, ptr %a1699 %res = mul <16 x i16> %op1, splat(i16 15)1700 store <16 x i16> %res, ptr %a1701 ret void1702}1703 1704define void @mul_v8i32(ptr %a) {1705; CHECK-LABEL: mul_v8i32:1706; CHECK: // %bb.0:1707; CHECK-NEXT: ldp q0, q1, [x0]1708; CHECK-NEXT: mul z0.s, z0.s, #311709; CHECK-NEXT: mul z1.s, z1.s, #311710; CHECK-NEXT: stp q0, q1, [x0]1711; CHECK-NEXT: ret1712;1713; NONEON-NOSVE-LABEL: mul_v8i32:1714; NONEON-NOSVE: // %bb.0:1715; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1716; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1717; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641718; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]1719; NONEON-NOSVE-NEXT: lsl w9, w8, #51720; NONEON-NOSVE-NEXT: sub w8, w9, w81721; NONEON-NOSVE-NEXT: str w8, [sp, #60]1722; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]1723; NONEON-NOSVE-NEXT: lsl w9, w8, #51724; NONEON-NOSVE-NEXT: sub w8, w9, w81725; NONEON-NOSVE-NEXT: str w8, [sp, #56]1726; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]1727; NONEON-NOSVE-NEXT: lsl w9, w8, #51728; NONEON-NOSVE-NEXT: sub w8, w9, w81729; NONEON-NOSVE-NEXT: str w8, [sp, #52]1730; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]1731; NONEON-NOSVE-NEXT: lsl w9, w8, #51732; NONEON-NOSVE-NEXT: sub w8, w9, w81733; NONEON-NOSVE-NEXT: str w8, [sp, #48]1734; NONEON-NOSVE-NEXT: ldr w8, [sp, #12]1735; NONEON-NOSVE-NEXT: lsl w9, w8, #51736; NONEON-NOSVE-NEXT: sub w8, w9, w81737; NONEON-NOSVE-NEXT: str w8, [sp, #44]1738; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]1739; NONEON-NOSVE-NEXT: lsl w9, w8, #51740; NONEON-NOSVE-NEXT: sub w8, w9, w81741; NONEON-NOSVE-NEXT: str w8, [sp, #40]1742; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]1743; NONEON-NOSVE-NEXT: lsl w9, w8, #51744; NONEON-NOSVE-NEXT: sub w8, w9, w81745; NONEON-NOSVE-NEXT: str w8, [sp, #36]1746; NONEON-NOSVE-NEXT: ldr w8, [sp]1747; NONEON-NOSVE-NEXT: lsl w9, w8, #51748; NONEON-NOSVE-NEXT: sub w8, w9, w81749; NONEON-NOSVE-NEXT: str w8, [sp, #32]1750; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1751; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1752; NONEON-NOSVE-NEXT: add sp, sp, #641753; NONEON-NOSVE-NEXT: ret1754 %op1 = load <8 x i32>, ptr %a1755 %res = mul <8 x i32> %op1, splat(i32 31)1756 store <8 x i32> %res, ptr %a1757 ret void1758}1759 1760define void @mul_v4i64(ptr %a) {1761; CHECK-LABEL: mul_v4i64:1762; CHECK: // %bb.0:1763; CHECK-NEXT: ldp q0, q1, [x0]1764; CHECK-NEXT: mul z0.d, z0.d, #631765; CHECK-NEXT: mul z1.d, z1.d, #631766; CHECK-NEXT: stp q0, q1, [x0]1767; CHECK-NEXT: ret1768;1769; NONEON-NOSVE-LABEL: mul_v4i64:1770; NONEON-NOSVE: // %bb.0:1771; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1772; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1773; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641774; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]1775; NONEON-NOSVE-NEXT: lsl x9, x8, #61776; NONEON-NOSVE-NEXT: sub x8, x9, x81777; NONEON-NOSVE-NEXT: str x8, [sp, #56]1778; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]1779; NONEON-NOSVE-NEXT: lsl x9, x8, #61780; NONEON-NOSVE-NEXT: sub x8, x9, x81781; NONEON-NOSVE-NEXT: str x8, [sp, #48]1782; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]1783; NONEON-NOSVE-NEXT: lsl x9, x8, #61784; NONEON-NOSVE-NEXT: sub x8, x9, x81785; NONEON-NOSVE-NEXT: str x8, [sp, #40]1786; NONEON-NOSVE-NEXT: ldr x8, [sp]1787; NONEON-NOSVE-NEXT: lsl x9, x8, #61788; NONEON-NOSVE-NEXT: sub x8, x9, x81789; NONEON-NOSVE-NEXT: str x8, [sp, #32]1790; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1791; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1792; NONEON-NOSVE-NEXT: add sp, sp, #641793; NONEON-NOSVE-NEXT: ret1794 %op1 = load <4 x i64>, ptr %a1795 %res = mul <4 x i64> %op1, splat(i64 63)1796 store <4 x i64> %res, ptr %a1797 ret void1798}1799 1800;1801; OR1802;1803 1804define void @or_v32i8(ptr %a) {1805; CHECK-LABEL: or_v32i8:1806; CHECK: // %bb.0:1807; CHECK-NEXT: ldp q0, q1, [x0]1808; CHECK-NEXT: orr z0.b, z0.b, #0x71809; CHECK-NEXT: orr z1.b, z1.b, #0x71810; CHECK-NEXT: stp q0, q1, [x0]1811; CHECK-NEXT: ret1812;1813; NONEON-NOSVE-LABEL: or_v32i8:1814; NONEON-NOSVE: // %bb.0:1815; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1816; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1817; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641818; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]1819; NONEON-NOSVE-NEXT: orr w8, w8, #0x71820; NONEON-NOSVE-NEXT: strb w8, [sp, #63]1821; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]1822; NONEON-NOSVE-NEXT: orr w8, w8, #0x71823; NONEON-NOSVE-NEXT: strb w8, [sp, #62]1824; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]1825; NONEON-NOSVE-NEXT: orr w8, w8, #0x71826; NONEON-NOSVE-NEXT: strb w8, [sp, #61]1827; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]1828; NONEON-NOSVE-NEXT: orr w8, w8, #0x71829; NONEON-NOSVE-NEXT: strb w8, [sp, #60]1830; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]1831; NONEON-NOSVE-NEXT: orr w8, w8, #0x71832; NONEON-NOSVE-NEXT: strb w8, [sp, #59]1833; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]1834; NONEON-NOSVE-NEXT: orr w8, w8, #0x71835; NONEON-NOSVE-NEXT: strb w8, [sp, #58]1836; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]1837; NONEON-NOSVE-NEXT: orr w8, w8, #0x71838; NONEON-NOSVE-NEXT: strb w8, [sp, #57]1839; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]1840; NONEON-NOSVE-NEXT: orr w8, w8, #0x71841; NONEON-NOSVE-NEXT: strb w8, [sp, #56]1842; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]1843; NONEON-NOSVE-NEXT: orr w8, w8, #0x71844; NONEON-NOSVE-NEXT: strb w8, [sp, #55]1845; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]1846; NONEON-NOSVE-NEXT: orr w8, w8, #0x71847; NONEON-NOSVE-NEXT: strb w8, [sp, #54]1848; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]1849; NONEON-NOSVE-NEXT: orr w8, w8, #0x71850; NONEON-NOSVE-NEXT: strb w8, [sp, #53]1851; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]1852; NONEON-NOSVE-NEXT: orr w8, w8, #0x71853; NONEON-NOSVE-NEXT: strb w8, [sp, #52]1854; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]1855; NONEON-NOSVE-NEXT: orr w8, w8, #0x71856; NONEON-NOSVE-NEXT: strb w8, [sp, #51]1857; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]1858; NONEON-NOSVE-NEXT: orr w8, w8, #0x71859; NONEON-NOSVE-NEXT: strb w8, [sp, #50]1860; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]1861; NONEON-NOSVE-NEXT: orr w8, w8, #0x71862; NONEON-NOSVE-NEXT: strb w8, [sp, #49]1863; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]1864; NONEON-NOSVE-NEXT: orr w8, w8, #0x71865; NONEON-NOSVE-NEXT: strb w8, [sp, #48]1866; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]1867; NONEON-NOSVE-NEXT: orr w8, w8, #0x71868; NONEON-NOSVE-NEXT: strb w8, [sp, #47]1869; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]1870; NONEON-NOSVE-NEXT: orr w8, w8, #0x71871; NONEON-NOSVE-NEXT: strb w8, [sp, #46]1872; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]1873; NONEON-NOSVE-NEXT: orr w8, w8, #0x71874; NONEON-NOSVE-NEXT: strb w8, [sp, #45]1875; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]1876; NONEON-NOSVE-NEXT: orr w8, w8, #0x71877; NONEON-NOSVE-NEXT: strb w8, [sp, #44]1878; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]1879; NONEON-NOSVE-NEXT: orr w8, w8, #0x71880; NONEON-NOSVE-NEXT: strb w8, [sp, #43]1881; NONEON-NOSVE-NEXT: ldrb w8, [sp, #10]1882; NONEON-NOSVE-NEXT: orr w8, w8, #0x71883; NONEON-NOSVE-NEXT: strb w8, [sp, #42]1884; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]1885; NONEON-NOSVE-NEXT: orr w8, w8, #0x71886; NONEON-NOSVE-NEXT: strb w8, [sp, #41]1887; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]1888; NONEON-NOSVE-NEXT: orr w8, w8, #0x71889; NONEON-NOSVE-NEXT: strb w8, [sp, #40]1890; NONEON-NOSVE-NEXT: ldrb w8, [sp, #7]1891; NONEON-NOSVE-NEXT: orr w8, w8, #0x71892; NONEON-NOSVE-NEXT: strb w8, [sp, #39]1893; NONEON-NOSVE-NEXT: ldrb w8, [sp, #6]1894; NONEON-NOSVE-NEXT: orr w8, w8, #0x71895; NONEON-NOSVE-NEXT: strb w8, [sp, #38]1896; NONEON-NOSVE-NEXT: ldrb w8, [sp, #5]1897; NONEON-NOSVE-NEXT: orr w8, w8, #0x71898; NONEON-NOSVE-NEXT: strb w8, [sp, #37]1899; NONEON-NOSVE-NEXT: ldrb w8, [sp, #4]1900; NONEON-NOSVE-NEXT: orr w8, w8, #0x71901; NONEON-NOSVE-NEXT: strb w8, [sp, #36]1902; NONEON-NOSVE-NEXT: ldrb w8, [sp, #3]1903; NONEON-NOSVE-NEXT: orr w8, w8, #0x71904; NONEON-NOSVE-NEXT: strb w8, [sp, #35]1905; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]1906; NONEON-NOSVE-NEXT: orr w8, w8, #0x71907; NONEON-NOSVE-NEXT: strb w8, [sp, #34]1908; NONEON-NOSVE-NEXT: ldrb w8, [sp, #1]1909; NONEON-NOSVE-NEXT: orr w8, w8, #0x71910; NONEON-NOSVE-NEXT: strb w8, [sp, #33]1911; NONEON-NOSVE-NEXT: ldrb w8, [sp]1912; NONEON-NOSVE-NEXT: orr w8, w8, #0x71913; NONEON-NOSVE-NEXT: strb w8, [sp, #32]1914; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1915; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1916; NONEON-NOSVE-NEXT: add sp, sp, #641917; NONEON-NOSVE-NEXT: ret1918 %op1 = load <32 x i8>, ptr %a1919 %res = or <32 x i8> %op1, splat(i8 7)1920 store <32 x i8> %res, ptr %a1921 ret void1922}1923 1924define void @or_v16i16(ptr %a) {1925; CHECK-LABEL: or_v16i16:1926; CHECK: // %bb.0:1927; CHECK-NEXT: ldp q0, q1, [x0]1928; CHECK-NEXT: orr z0.h, z0.h, #0xf1929; CHECK-NEXT: orr z1.h, z1.h, #0xf1930; CHECK-NEXT: stp q0, q1, [x0]1931; CHECK-NEXT: ret1932;1933; NONEON-NOSVE-LABEL: or_v16i16:1934; NONEON-NOSVE: // %bb.0:1935; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]1936; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!1937; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 641938; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]1939; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1940; NONEON-NOSVE-NEXT: strh w8, [sp, #62]1941; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]1942; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1943; NONEON-NOSVE-NEXT: strh w8, [sp, #60]1944; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]1945; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1946; NONEON-NOSVE-NEXT: strh w8, [sp, #58]1947; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]1948; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1949; NONEON-NOSVE-NEXT: strh w8, [sp, #56]1950; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]1951; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1952; NONEON-NOSVE-NEXT: strh w8, [sp, #54]1953; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]1954; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1955; NONEON-NOSVE-NEXT: strh w8, [sp, #52]1956; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]1957; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1958; NONEON-NOSVE-NEXT: strh w8, [sp, #50]1959; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]1960; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1961; NONEON-NOSVE-NEXT: strh w8, [sp, #48]1962; NONEON-NOSVE-NEXT: ldrh w8, [sp, #14]1963; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1964; NONEON-NOSVE-NEXT: strh w8, [sp, #46]1965; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]1966; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1967; NONEON-NOSVE-NEXT: strh w8, [sp, #44]1968; NONEON-NOSVE-NEXT: ldrh w8, [sp, #10]1969; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1970; NONEON-NOSVE-NEXT: strh w8, [sp, #42]1971; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8]1972; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1973; NONEON-NOSVE-NEXT: strh w8, [sp, #40]1974; NONEON-NOSVE-NEXT: ldrh w8, [sp, #6]1975; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1976; NONEON-NOSVE-NEXT: strh w8, [sp, #38]1977; NONEON-NOSVE-NEXT: ldrh w8, [sp, #4]1978; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1979; NONEON-NOSVE-NEXT: strh w8, [sp, #36]1980; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]1981; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1982; NONEON-NOSVE-NEXT: strh w8, [sp, #34]1983; NONEON-NOSVE-NEXT: ldrh w8, [sp]1984; NONEON-NOSVE-NEXT: orr w8, w8, #0xf1985; NONEON-NOSVE-NEXT: strh w8, [sp, #32]1986; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]1987; NONEON-NOSVE-NEXT: stp q0, q1, [x0]1988; NONEON-NOSVE-NEXT: add sp, sp, #641989; NONEON-NOSVE-NEXT: ret1990 %op1 = load <16 x i16>, ptr %a1991 %res = or <16 x i16> %op1, splat(i16 15)1992 store <16 x i16> %res, ptr %a1993 ret void1994}1995 1996define void @or_v8i32(ptr %a) {1997; CHECK-LABEL: or_v8i32:1998; CHECK: // %bb.0:1999; CHECK-NEXT: ldp q0, q1, [x0]2000; CHECK-NEXT: orr z0.s, z0.s, #0x1f2001; CHECK-NEXT: orr z1.s, z1.s, #0x1f2002; CHECK-NEXT: stp q0, q1, [x0]2003; CHECK-NEXT: ret2004;2005; NONEON-NOSVE-LABEL: or_v8i32:2006; NONEON-NOSVE: // %bb.0:2007; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2008; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2009; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642010; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]2011; NONEON-NOSVE-NEXT: orr w9, w8, #0x1f2012; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]2013; NONEON-NOSVE-NEXT: orr w8, w8, #0x1f2014; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]2015; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]2016; NONEON-NOSVE-NEXT: orr w9, w8, #0x1f2017; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]2018; NONEON-NOSVE-NEXT: orr w8, w8, #0x1f2019; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]2020; NONEON-NOSVE-NEXT: ldr w8, [sp, #12]2021; NONEON-NOSVE-NEXT: orr w9, w8, #0x1f2022; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]2023; NONEON-NOSVE-NEXT: orr w8, w8, #0x1f2024; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]2025; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]2026; NONEON-NOSVE-NEXT: orr w9, w8, #0x1f2027; NONEON-NOSVE-NEXT: ldr w8, [sp]2028; NONEON-NOSVE-NEXT: orr w8, w8, #0x1f2029; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]2030; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2031; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2032; NONEON-NOSVE-NEXT: add sp, sp, #642033; NONEON-NOSVE-NEXT: ret2034 %op1 = load <8 x i32>, ptr %a2035 %res = or <8 x i32> %op1, splat(i32 31)2036 store <8 x i32> %res, ptr %a2037 ret void2038}2039 2040define void @or_v4i64(ptr %a) {2041; CHECK-LABEL: or_v4i64:2042; CHECK: // %bb.0:2043; CHECK-NEXT: ldp q0, q1, [x0]2044; CHECK-NEXT: orr z0.d, z0.d, #0x3f2045; CHECK-NEXT: orr z1.d, z1.d, #0x3f2046; CHECK-NEXT: stp q0, q1, [x0]2047; CHECK-NEXT: ret2048;2049; NONEON-NOSVE-LABEL: or_v4i64:2050; NONEON-NOSVE: // %bb.0:2051; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2052; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2053; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642054; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]2055; NONEON-NOSVE-NEXT: orr x9, x8, #0x3f2056; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]2057; NONEON-NOSVE-NEXT: orr x8, x8, #0x3f2058; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #48]2059; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]2060; NONEON-NOSVE-NEXT: orr x9, x8, #0x3f2061; NONEON-NOSVE-NEXT: ldr x8, [sp]2062; NONEON-NOSVE-NEXT: orr x8, x8, #0x3f2063; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #32]2064; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2065; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2066; NONEON-NOSVE-NEXT: add sp, sp, #642067; NONEON-NOSVE-NEXT: ret2068 %op1 = load <4 x i64>, ptr %a2069 %res = or <4 x i64> %op1, splat(i64 63)2070 store <4 x i64> %res, ptr %a2071 ret void2072}2073 2074;2075; SHL2076;2077 2078define void @shl_v32i8(ptr %a) {2079; CHECK-LABEL: shl_v32i8:2080; CHECK: // %bb.0:2081; CHECK-NEXT: ldp q0, q1, [x0]2082; CHECK-NEXT: lsl z0.b, z0.b, #72083; CHECK-NEXT: lsl z1.b, z1.b, #72084; CHECK-NEXT: stp q0, q1, [x0]2085; CHECK-NEXT: ret2086;2087; NONEON-NOSVE-LABEL: shl_v32i8:2088; NONEON-NOSVE: // %bb.0:2089; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2090; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2091; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642092; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]2093; NONEON-NOSVE-NEXT: lsl w8, w8, #72094; NONEON-NOSVE-NEXT: strb w8, [sp, #63]2095; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]2096; NONEON-NOSVE-NEXT: lsl w8, w8, #72097; NONEON-NOSVE-NEXT: strb w8, [sp, #62]2098; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]2099; NONEON-NOSVE-NEXT: lsl w8, w8, #72100; NONEON-NOSVE-NEXT: strb w8, [sp, #61]2101; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]2102; NONEON-NOSVE-NEXT: lsl w8, w8, #72103; NONEON-NOSVE-NEXT: strb w8, [sp, #60]2104; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]2105; NONEON-NOSVE-NEXT: lsl w8, w8, #72106; NONEON-NOSVE-NEXT: strb w8, [sp, #59]2107; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]2108; NONEON-NOSVE-NEXT: lsl w8, w8, #72109; NONEON-NOSVE-NEXT: strb w8, [sp, #58]2110; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]2111; NONEON-NOSVE-NEXT: lsl w8, w8, #72112; NONEON-NOSVE-NEXT: strb w8, [sp, #57]2113; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]2114; NONEON-NOSVE-NEXT: lsl w8, w8, #72115; NONEON-NOSVE-NEXT: strb w8, [sp, #56]2116; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]2117; NONEON-NOSVE-NEXT: lsl w8, w8, #72118; NONEON-NOSVE-NEXT: strb w8, [sp, #55]2119; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]2120; NONEON-NOSVE-NEXT: lsl w8, w8, #72121; NONEON-NOSVE-NEXT: strb w8, [sp, #54]2122; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]2123; NONEON-NOSVE-NEXT: lsl w8, w8, #72124; NONEON-NOSVE-NEXT: strb w8, [sp, #53]2125; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]2126; NONEON-NOSVE-NEXT: lsl w8, w8, #72127; NONEON-NOSVE-NEXT: strb w8, [sp, #52]2128; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]2129; NONEON-NOSVE-NEXT: lsl w8, w8, #72130; NONEON-NOSVE-NEXT: strb w8, [sp, #51]2131; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]2132; NONEON-NOSVE-NEXT: lsl w8, w8, #72133; NONEON-NOSVE-NEXT: strb w8, [sp, #50]2134; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]2135; NONEON-NOSVE-NEXT: lsl w8, w8, #72136; NONEON-NOSVE-NEXT: strb w8, [sp, #49]2137; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]2138; NONEON-NOSVE-NEXT: lsl w8, w8, #72139; NONEON-NOSVE-NEXT: strb w8, [sp, #48]2140; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]2141; NONEON-NOSVE-NEXT: lsl w8, w8, #72142; NONEON-NOSVE-NEXT: strb w8, [sp, #47]2143; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]2144; NONEON-NOSVE-NEXT: lsl w8, w8, #72145; NONEON-NOSVE-NEXT: strb w8, [sp, #46]2146; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]2147; NONEON-NOSVE-NEXT: lsl w8, w8, #72148; NONEON-NOSVE-NEXT: strb w8, [sp, #45]2149; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]2150; NONEON-NOSVE-NEXT: lsl w8, w8, #72151; NONEON-NOSVE-NEXT: strb w8, [sp, #44]2152; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]2153; NONEON-NOSVE-NEXT: lsl w8, w8, #72154; NONEON-NOSVE-NEXT: strb w8, [sp, #43]2155; NONEON-NOSVE-NEXT: ldrb w8, [sp, #10]2156; NONEON-NOSVE-NEXT: lsl w8, w8, #72157; NONEON-NOSVE-NEXT: strb w8, [sp, #42]2158; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]2159; NONEON-NOSVE-NEXT: lsl w8, w8, #72160; NONEON-NOSVE-NEXT: strb w8, [sp, #41]2161; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]2162; NONEON-NOSVE-NEXT: lsl w8, w8, #72163; NONEON-NOSVE-NEXT: strb w8, [sp, #40]2164; NONEON-NOSVE-NEXT: ldrb w8, [sp, #7]2165; NONEON-NOSVE-NEXT: lsl w8, w8, #72166; NONEON-NOSVE-NEXT: strb w8, [sp, #39]2167; NONEON-NOSVE-NEXT: ldrb w8, [sp, #6]2168; NONEON-NOSVE-NEXT: lsl w8, w8, #72169; NONEON-NOSVE-NEXT: strb w8, [sp, #38]2170; NONEON-NOSVE-NEXT: ldrb w8, [sp, #5]2171; NONEON-NOSVE-NEXT: lsl w8, w8, #72172; NONEON-NOSVE-NEXT: strb w8, [sp, #37]2173; NONEON-NOSVE-NEXT: ldrb w8, [sp, #4]2174; NONEON-NOSVE-NEXT: lsl w8, w8, #72175; NONEON-NOSVE-NEXT: strb w8, [sp, #36]2176; NONEON-NOSVE-NEXT: ldrb w8, [sp, #3]2177; NONEON-NOSVE-NEXT: lsl w8, w8, #72178; NONEON-NOSVE-NEXT: strb w8, [sp, #35]2179; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]2180; NONEON-NOSVE-NEXT: lsl w8, w8, #72181; NONEON-NOSVE-NEXT: strb w8, [sp, #34]2182; NONEON-NOSVE-NEXT: ldrb w8, [sp, #1]2183; NONEON-NOSVE-NEXT: lsl w8, w8, #72184; NONEON-NOSVE-NEXT: strb w8, [sp, #33]2185; NONEON-NOSVE-NEXT: ldrb w8, [sp]2186; NONEON-NOSVE-NEXT: lsl w8, w8, #72187; NONEON-NOSVE-NEXT: strb w8, [sp, #32]2188; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2189; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2190; NONEON-NOSVE-NEXT: add sp, sp, #642191; NONEON-NOSVE-NEXT: ret2192 %op1 = load <32 x i8>, ptr %a2193 %res = shl <32 x i8> %op1, splat(i8 7)2194 store <32 x i8> %res, ptr %a2195 ret void2196}2197 2198define void @shl_v16i16(ptr %a) {2199; CHECK-LABEL: shl_v16i16:2200; CHECK: // %bb.0:2201; CHECK-NEXT: ldp q0, q1, [x0]2202; CHECK-NEXT: lsl z0.h, z0.h, #152203; CHECK-NEXT: lsl z1.h, z1.h, #152204; CHECK-NEXT: stp q0, q1, [x0]2205; CHECK-NEXT: ret2206;2207; NONEON-NOSVE-LABEL: shl_v16i16:2208; NONEON-NOSVE: // %bb.0:2209; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2210; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2211; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642212; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]2213; NONEON-NOSVE-NEXT: lsl w8, w8, #152214; NONEON-NOSVE-NEXT: strh w8, [sp, #62]2215; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]2216; NONEON-NOSVE-NEXT: lsl w8, w8, #152217; NONEON-NOSVE-NEXT: strh w8, [sp, #60]2218; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]2219; NONEON-NOSVE-NEXT: lsl w8, w8, #152220; NONEON-NOSVE-NEXT: strh w8, [sp, #58]2221; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]2222; NONEON-NOSVE-NEXT: lsl w8, w8, #152223; NONEON-NOSVE-NEXT: strh w8, [sp, #56]2224; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]2225; NONEON-NOSVE-NEXT: lsl w8, w8, #152226; NONEON-NOSVE-NEXT: strh w8, [sp, #54]2227; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]2228; NONEON-NOSVE-NEXT: lsl w8, w8, #152229; NONEON-NOSVE-NEXT: strh w8, [sp, #52]2230; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]2231; NONEON-NOSVE-NEXT: lsl w8, w8, #152232; NONEON-NOSVE-NEXT: strh w8, [sp, #50]2233; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]2234; NONEON-NOSVE-NEXT: lsl w8, w8, #152235; NONEON-NOSVE-NEXT: strh w8, [sp, #48]2236; NONEON-NOSVE-NEXT: ldrh w8, [sp, #14]2237; NONEON-NOSVE-NEXT: lsl w8, w8, #152238; NONEON-NOSVE-NEXT: strh w8, [sp, #46]2239; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]2240; NONEON-NOSVE-NEXT: lsl w8, w8, #152241; NONEON-NOSVE-NEXT: strh w8, [sp, #44]2242; NONEON-NOSVE-NEXT: ldrh w8, [sp, #10]2243; NONEON-NOSVE-NEXT: lsl w8, w8, #152244; NONEON-NOSVE-NEXT: strh w8, [sp, #42]2245; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8]2246; NONEON-NOSVE-NEXT: lsl w8, w8, #152247; NONEON-NOSVE-NEXT: strh w8, [sp, #40]2248; NONEON-NOSVE-NEXT: ldrh w8, [sp, #6]2249; NONEON-NOSVE-NEXT: lsl w8, w8, #152250; NONEON-NOSVE-NEXT: strh w8, [sp, #38]2251; NONEON-NOSVE-NEXT: ldrh w8, [sp, #4]2252; NONEON-NOSVE-NEXT: lsl w8, w8, #152253; NONEON-NOSVE-NEXT: strh w8, [sp, #36]2254; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]2255; NONEON-NOSVE-NEXT: lsl w8, w8, #152256; NONEON-NOSVE-NEXT: strh w8, [sp, #34]2257; NONEON-NOSVE-NEXT: ldrh w8, [sp]2258; NONEON-NOSVE-NEXT: lsl w8, w8, #152259; NONEON-NOSVE-NEXT: strh w8, [sp, #32]2260; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2261; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2262; NONEON-NOSVE-NEXT: add sp, sp, #642263; NONEON-NOSVE-NEXT: ret2264 %op1 = load <16 x i16>, ptr %a2265 %res = shl <16 x i16> %op1, splat(i16 15)2266 store <16 x i16> %res, ptr %a2267 ret void2268}2269 2270define void @shl_v8i32(ptr %a) {2271; CHECK-LABEL: shl_v8i32:2272; CHECK: // %bb.0:2273; CHECK-NEXT: ldp q0, q1, [x0]2274; CHECK-NEXT: lsl z0.s, z0.s, #312275; CHECK-NEXT: lsl z1.s, z1.s, #312276; CHECK-NEXT: stp q0, q1, [x0]2277; CHECK-NEXT: ret2278;2279; NONEON-NOSVE-LABEL: shl_v8i32:2280; NONEON-NOSVE: // %bb.0:2281; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2282; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2283; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642284; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]2285; NONEON-NOSVE-NEXT: lsl w9, w8, #312286; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]2287; NONEON-NOSVE-NEXT: lsl w8, w8, #312288; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]2289; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]2290; NONEON-NOSVE-NEXT: lsl w9, w8, #312291; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]2292; NONEON-NOSVE-NEXT: lsl w8, w8, #312293; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]2294; NONEON-NOSVE-NEXT: ldr w8, [sp, #12]2295; NONEON-NOSVE-NEXT: lsl w9, w8, #312296; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]2297; NONEON-NOSVE-NEXT: lsl w8, w8, #312298; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]2299; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]2300; NONEON-NOSVE-NEXT: lsl w9, w8, #312301; NONEON-NOSVE-NEXT: ldr w8, [sp]2302; NONEON-NOSVE-NEXT: lsl w8, w8, #312303; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]2304; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2305; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2306; NONEON-NOSVE-NEXT: add sp, sp, #642307; NONEON-NOSVE-NEXT: ret2308 %op1 = load <8 x i32>, ptr %a2309 %res = shl <8 x i32> %op1, splat(i32 31)2310 store <8 x i32> %res, ptr %a2311 ret void2312}2313 2314define void @shl_v4i64(ptr %a) {2315; CHECK-LABEL: shl_v4i64:2316; CHECK: // %bb.0:2317; CHECK-NEXT: ldp q0, q1, [x0]2318; CHECK-NEXT: lsl z0.d, z0.d, #632319; CHECK-NEXT: lsl z1.d, z1.d, #632320; CHECK-NEXT: stp q0, q1, [x0]2321; CHECK-NEXT: ret2322;2323; NONEON-NOSVE-LABEL: shl_v4i64:2324; NONEON-NOSVE: // %bb.0:2325; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2326; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2327; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642328; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]2329; NONEON-NOSVE-NEXT: lsl x9, x8, #632330; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]2331; NONEON-NOSVE-NEXT: lsl x8, x8, #632332; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #48]2333; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]2334; NONEON-NOSVE-NEXT: lsl x9, x8, #632335; NONEON-NOSVE-NEXT: ldr x8, [sp]2336; NONEON-NOSVE-NEXT: lsl x8, x8, #632337; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #32]2338; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2339; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2340; NONEON-NOSVE-NEXT: add sp, sp, #642341; NONEON-NOSVE-NEXT: ret2342 %op1 = load <4 x i64>, ptr %a2343 %res = shl <4 x i64> %op1, splat(i64 63)2344 store <4 x i64> %res, ptr %a2345 ret void2346}2347 2348;2349; SMAX2350;2351 2352define void @smax_v32i8(ptr %a) {2353; CHECK-LABEL: smax_v32i8:2354; CHECK: // %bb.0:2355; CHECK-NEXT: ldp q0, q1, [x0]2356; CHECK-NEXT: smax z0.b, z0.b, #72357; CHECK-NEXT: smax z1.b, z1.b, #72358; CHECK-NEXT: stp q0, q1, [x0]2359; CHECK-NEXT: ret2360;2361; NONEON-NOSVE-LABEL: smax_v32i8:2362; NONEON-NOSVE: // %bb.0:2363; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2364; NONEON-NOSVE-NEXT: mov w8, #7 // =0x72365; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2366; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642367; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #31]2368; NONEON-NOSVE-NEXT: cmp w9, #72369; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2370; NONEON-NOSVE-NEXT: strb w9, [sp, #63]2371; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #30]2372; NONEON-NOSVE-NEXT: cmp w9, #72373; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2374; NONEON-NOSVE-NEXT: strb w9, [sp, #62]2375; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #29]2376; NONEON-NOSVE-NEXT: cmp w9, #72377; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2378; NONEON-NOSVE-NEXT: strb w9, [sp, #61]2379; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #28]2380; NONEON-NOSVE-NEXT: cmp w9, #72381; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2382; NONEON-NOSVE-NEXT: strb w9, [sp, #60]2383; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #27]2384; NONEON-NOSVE-NEXT: cmp w9, #72385; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2386; NONEON-NOSVE-NEXT: strb w9, [sp, #59]2387; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #26]2388; NONEON-NOSVE-NEXT: cmp w9, #72389; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2390; NONEON-NOSVE-NEXT: strb w9, [sp, #58]2391; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #25]2392; NONEON-NOSVE-NEXT: cmp w9, #72393; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2394; NONEON-NOSVE-NEXT: strb w9, [sp, #57]2395; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #24]2396; NONEON-NOSVE-NEXT: cmp w9, #72397; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2398; NONEON-NOSVE-NEXT: strb w9, [sp, #56]2399; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #23]2400; NONEON-NOSVE-NEXT: cmp w9, #72401; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2402; NONEON-NOSVE-NEXT: strb w9, [sp, #55]2403; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #22]2404; NONEON-NOSVE-NEXT: cmp w9, #72405; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2406; NONEON-NOSVE-NEXT: strb w9, [sp, #54]2407; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #21]2408; NONEON-NOSVE-NEXT: cmp w9, #72409; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2410; NONEON-NOSVE-NEXT: strb w9, [sp, #53]2411; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #20]2412; NONEON-NOSVE-NEXT: cmp w9, #72413; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2414; NONEON-NOSVE-NEXT: strb w9, [sp, #52]2415; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #19]2416; NONEON-NOSVE-NEXT: cmp w9, #72417; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2418; NONEON-NOSVE-NEXT: strb w9, [sp, #51]2419; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #18]2420; NONEON-NOSVE-NEXT: cmp w9, #72421; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2422; NONEON-NOSVE-NEXT: strb w9, [sp, #50]2423; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #17]2424; NONEON-NOSVE-NEXT: cmp w9, #72425; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2426; NONEON-NOSVE-NEXT: strb w9, [sp, #49]2427; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #16]2428; NONEON-NOSVE-NEXT: cmp w9, #72429; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2430; NONEON-NOSVE-NEXT: strb w9, [sp, #48]2431; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #15]2432; NONEON-NOSVE-NEXT: cmp w9, #72433; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2434; NONEON-NOSVE-NEXT: strb w9, [sp, #47]2435; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #14]2436; NONEON-NOSVE-NEXT: cmp w9, #72437; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2438; NONEON-NOSVE-NEXT: strb w9, [sp, #46]2439; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #13]2440; NONEON-NOSVE-NEXT: cmp w9, #72441; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2442; NONEON-NOSVE-NEXT: strb w9, [sp, #45]2443; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #12]2444; NONEON-NOSVE-NEXT: cmp w9, #72445; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2446; NONEON-NOSVE-NEXT: strb w9, [sp, #44]2447; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #11]2448; NONEON-NOSVE-NEXT: cmp w9, #72449; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2450; NONEON-NOSVE-NEXT: strb w9, [sp, #43]2451; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #10]2452; NONEON-NOSVE-NEXT: cmp w9, #72453; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2454; NONEON-NOSVE-NEXT: strb w9, [sp, #42]2455; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #9]2456; NONEON-NOSVE-NEXT: cmp w9, #72457; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2458; NONEON-NOSVE-NEXT: strb w9, [sp, #41]2459; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #8]2460; NONEON-NOSVE-NEXT: cmp w9, #72461; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2462; NONEON-NOSVE-NEXT: strb w9, [sp, #40]2463; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #7]2464; NONEON-NOSVE-NEXT: cmp w9, #72465; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2466; NONEON-NOSVE-NEXT: strb w9, [sp, #39]2467; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #6]2468; NONEON-NOSVE-NEXT: cmp w9, #72469; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2470; NONEON-NOSVE-NEXT: strb w9, [sp, #38]2471; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #5]2472; NONEON-NOSVE-NEXT: cmp w9, #72473; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2474; NONEON-NOSVE-NEXT: strb w9, [sp, #37]2475; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #4]2476; NONEON-NOSVE-NEXT: cmp w9, #72477; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2478; NONEON-NOSVE-NEXT: strb w9, [sp, #36]2479; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #3]2480; NONEON-NOSVE-NEXT: cmp w9, #72481; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2482; NONEON-NOSVE-NEXT: strb w9, [sp, #35]2483; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #2]2484; NONEON-NOSVE-NEXT: cmp w9, #72485; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2486; NONEON-NOSVE-NEXT: strb w9, [sp, #34]2487; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #1]2488; NONEON-NOSVE-NEXT: cmp w9, #72489; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2490; NONEON-NOSVE-NEXT: strb w9, [sp, #33]2491; NONEON-NOSVE-NEXT: ldrsb w9, [sp]2492; NONEON-NOSVE-NEXT: cmp w9, #72493; NONEON-NOSVE-NEXT: csel w8, w9, w8, gt2494; NONEON-NOSVE-NEXT: strb w8, [sp, #32]2495; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2496; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2497; NONEON-NOSVE-NEXT: add sp, sp, #642498; NONEON-NOSVE-NEXT: ret2499 %op1 = load <32 x i8>, ptr %a2500 %res = call <32 x i8> @llvm.smax.v32i8(<32 x i8> %op1, <32 x i8> splat(i8 7))2501 store <32 x i8> %res, ptr %a2502 ret void2503}2504 2505define void @smax_v16i16(ptr %a) {2506; CHECK-LABEL: smax_v16i16:2507; CHECK: // %bb.0:2508; CHECK-NEXT: ldp q0, q1, [x0]2509; CHECK-NEXT: smax z0.h, z0.h, #152510; CHECK-NEXT: smax z1.h, z1.h, #152511; CHECK-NEXT: stp q0, q1, [x0]2512; CHECK-NEXT: ret2513;2514; NONEON-NOSVE-LABEL: smax_v16i16:2515; NONEON-NOSVE: // %bb.0:2516; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2517; NONEON-NOSVE-NEXT: mov w8, #15 // =0xf2518; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2519; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642520; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #30]2521; NONEON-NOSVE-NEXT: cmp w9, #152522; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2523; NONEON-NOSVE-NEXT: strh w9, [sp, #62]2524; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #28]2525; NONEON-NOSVE-NEXT: cmp w9, #152526; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2527; NONEON-NOSVE-NEXT: strh w9, [sp, #60]2528; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #26]2529; NONEON-NOSVE-NEXT: cmp w9, #152530; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2531; NONEON-NOSVE-NEXT: strh w9, [sp, #58]2532; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #24]2533; NONEON-NOSVE-NEXT: cmp w9, #152534; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2535; NONEON-NOSVE-NEXT: strh w9, [sp, #56]2536; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #22]2537; NONEON-NOSVE-NEXT: cmp w9, #152538; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2539; NONEON-NOSVE-NEXT: strh w9, [sp, #54]2540; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #20]2541; NONEON-NOSVE-NEXT: cmp w9, #152542; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2543; NONEON-NOSVE-NEXT: strh w9, [sp, #52]2544; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #18]2545; NONEON-NOSVE-NEXT: cmp w9, #152546; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2547; NONEON-NOSVE-NEXT: strh w9, [sp, #50]2548; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #16]2549; NONEON-NOSVE-NEXT: cmp w9, #152550; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2551; NONEON-NOSVE-NEXT: strh w9, [sp, #48]2552; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #14]2553; NONEON-NOSVE-NEXT: cmp w9, #152554; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2555; NONEON-NOSVE-NEXT: strh w9, [sp, #46]2556; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #12]2557; NONEON-NOSVE-NEXT: cmp w9, #152558; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2559; NONEON-NOSVE-NEXT: strh w9, [sp, #44]2560; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #10]2561; NONEON-NOSVE-NEXT: cmp w9, #152562; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2563; NONEON-NOSVE-NEXT: strh w9, [sp, #42]2564; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #8]2565; NONEON-NOSVE-NEXT: cmp w9, #152566; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2567; NONEON-NOSVE-NEXT: strh w9, [sp, #40]2568; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #6]2569; NONEON-NOSVE-NEXT: cmp w9, #152570; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2571; NONEON-NOSVE-NEXT: strh w9, [sp, #38]2572; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #4]2573; NONEON-NOSVE-NEXT: cmp w9, #152574; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2575; NONEON-NOSVE-NEXT: strh w9, [sp, #36]2576; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #2]2577; NONEON-NOSVE-NEXT: cmp w9, #152578; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2579; NONEON-NOSVE-NEXT: strh w9, [sp, #34]2580; NONEON-NOSVE-NEXT: ldrsh w9, [sp]2581; NONEON-NOSVE-NEXT: cmp w9, #152582; NONEON-NOSVE-NEXT: csel w8, w9, w8, gt2583; NONEON-NOSVE-NEXT: strh w8, [sp, #32]2584; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2585; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2586; NONEON-NOSVE-NEXT: add sp, sp, #642587; NONEON-NOSVE-NEXT: ret2588 %op1 = load <16 x i16>, ptr %a2589 %res = call <16 x i16> @llvm.smax.v16i16(<16 x i16> %op1, <16 x i16> splat(i16 15))2590 store <16 x i16> %res, ptr %a2591 ret void2592}2593 2594define void @smax_v8i32(ptr %a) {2595; CHECK-LABEL: smax_v8i32:2596; CHECK: // %bb.0:2597; CHECK-NEXT: ldp q0, q1, [x0]2598; CHECK-NEXT: smax z0.s, z0.s, #312599; CHECK-NEXT: smax z1.s, z1.s, #312600; CHECK-NEXT: stp q0, q1, [x0]2601; CHECK-NEXT: ret2602;2603; NONEON-NOSVE-LABEL: smax_v8i32:2604; NONEON-NOSVE: // %bb.0:2605; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2606; NONEON-NOSVE-NEXT: mov w8, #31 // =0x1f2607; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2608; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642609; NONEON-NOSVE-NEXT: ldr w9, [sp, #28]2610; NONEON-NOSVE-NEXT: cmp w9, #312611; NONEON-NOSVE-NEXT: csel w10, w9, w8, gt2612; NONEON-NOSVE-NEXT: ldr w9, [sp, #24]2613; NONEON-NOSVE-NEXT: cmp w9, #312614; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2615; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #56]2616; NONEON-NOSVE-NEXT: ldr w9, [sp, #20]2617; NONEON-NOSVE-NEXT: cmp w9, #312618; NONEON-NOSVE-NEXT: csel w10, w9, w8, gt2619; NONEON-NOSVE-NEXT: ldr w9, [sp, #16]2620; NONEON-NOSVE-NEXT: cmp w9, #312621; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2622; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #48]2623; NONEON-NOSVE-NEXT: ldr w9, [sp, #12]2624; NONEON-NOSVE-NEXT: cmp w9, #312625; NONEON-NOSVE-NEXT: csel w10, w9, w8, gt2626; NONEON-NOSVE-NEXT: ldr w9, [sp, #8]2627; NONEON-NOSVE-NEXT: cmp w9, #312628; NONEON-NOSVE-NEXT: csel w9, w9, w8, gt2629; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #40]2630; NONEON-NOSVE-NEXT: ldr w9, [sp, #4]2631; NONEON-NOSVE-NEXT: cmp w9, #312632; NONEON-NOSVE-NEXT: csel w10, w9, w8, gt2633; NONEON-NOSVE-NEXT: ldr w9, [sp]2634; NONEON-NOSVE-NEXT: cmp w9, #312635; NONEON-NOSVE-NEXT: csel w8, w9, w8, gt2636; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #32]2637; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2638; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2639; NONEON-NOSVE-NEXT: add sp, sp, #642640; NONEON-NOSVE-NEXT: ret2641 %op1 = load <8 x i32>, ptr %a2642 %res = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %op1, <8 x i32> splat(i32 31))2643 store <8 x i32> %res, ptr %a2644 ret void2645}2646 2647define void @smax_v4i64(ptr %a) {2648; CHECK-LABEL: smax_v4i64:2649; CHECK: // %bb.0:2650; CHECK-NEXT: ldp q0, q1, [x0]2651; CHECK-NEXT: smax z0.d, z0.d, #632652; CHECK-NEXT: smax z1.d, z1.d, #632653; CHECK-NEXT: stp q0, q1, [x0]2654; CHECK-NEXT: ret2655;2656; NONEON-NOSVE-LABEL: smax_v4i64:2657; NONEON-NOSVE: // %bb.0:2658; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2659; NONEON-NOSVE-NEXT: mov w8, #63 // =0x3f2660; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2661; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642662; NONEON-NOSVE-NEXT: ldr x9, [sp, #24]2663; NONEON-NOSVE-NEXT: cmp x9, #632664; NONEON-NOSVE-NEXT: csel x10, x9, x8, gt2665; NONEON-NOSVE-NEXT: ldr x9, [sp, #16]2666; NONEON-NOSVE-NEXT: cmp x9, #632667; NONEON-NOSVE-NEXT: csel x9, x9, x8, gt2668; NONEON-NOSVE-NEXT: stp x9, x10, [sp, #48]2669; NONEON-NOSVE-NEXT: ldr x9, [sp, #8]2670; NONEON-NOSVE-NEXT: cmp x9, #632671; NONEON-NOSVE-NEXT: csel x10, x9, x8, gt2672; NONEON-NOSVE-NEXT: ldr x9, [sp]2673; NONEON-NOSVE-NEXT: cmp x9, #632674; NONEON-NOSVE-NEXT: csel x8, x9, x8, gt2675; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #32]2676; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2677; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2678; NONEON-NOSVE-NEXT: add sp, sp, #642679; NONEON-NOSVE-NEXT: ret2680 %op1 = load <4 x i64>, ptr %a2681 %res = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %op1, <4 x i64> splat(i64 63))2682 store <4 x i64> %res, ptr %a2683 ret void2684}2685 2686;2687; SMIN2688;2689 2690define void @smin_v32i8(ptr %a) {2691; CHECK-LABEL: smin_v32i8:2692; CHECK: // %bb.0:2693; CHECK-NEXT: ldp q0, q1, [x0]2694; CHECK-NEXT: smin z0.b, z0.b, #72695; CHECK-NEXT: smin z1.b, z1.b, #72696; CHECK-NEXT: stp q0, q1, [x0]2697; CHECK-NEXT: ret2698;2699; NONEON-NOSVE-LABEL: smin_v32i8:2700; NONEON-NOSVE: // %bb.0:2701; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2702; NONEON-NOSVE-NEXT: mov w8, #7 // =0x72703; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2704; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642705; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #31]2706; NONEON-NOSVE-NEXT: cmp w9, #72707; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2708; NONEON-NOSVE-NEXT: strb w9, [sp, #63]2709; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #30]2710; NONEON-NOSVE-NEXT: cmp w9, #72711; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2712; NONEON-NOSVE-NEXT: strb w9, [sp, #62]2713; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #29]2714; NONEON-NOSVE-NEXT: cmp w9, #72715; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2716; NONEON-NOSVE-NEXT: strb w9, [sp, #61]2717; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #28]2718; NONEON-NOSVE-NEXT: cmp w9, #72719; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2720; NONEON-NOSVE-NEXT: strb w9, [sp, #60]2721; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #27]2722; NONEON-NOSVE-NEXT: cmp w9, #72723; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2724; NONEON-NOSVE-NEXT: strb w9, [sp, #59]2725; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #26]2726; NONEON-NOSVE-NEXT: cmp w9, #72727; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2728; NONEON-NOSVE-NEXT: strb w9, [sp, #58]2729; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #25]2730; NONEON-NOSVE-NEXT: cmp w9, #72731; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2732; NONEON-NOSVE-NEXT: strb w9, [sp, #57]2733; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #24]2734; NONEON-NOSVE-NEXT: cmp w9, #72735; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2736; NONEON-NOSVE-NEXT: strb w9, [sp, #56]2737; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #23]2738; NONEON-NOSVE-NEXT: cmp w9, #72739; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2740; NONEON-NOSVE-NEXT: strb w9, [sp, #55]2741; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #22]2742; NONEON-NOSVE-NEXT: cmp w9, #72743; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2744; NONEON-NOSVE-NEXT: strb w9, [sp, #54]2745; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #21]2746; NONEON-NOSVE-NEXT: cmp w9, #72747; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2748; NONEON-NOSVE-NEXT: strb w9, [sp, #53]2749; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #20]2750; NONEON-NOSVE-NEXT: cmp w9, #72751; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2752; NONEON-NOSVE-NEXT: strb w9, [sp, #52]2753; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #19]2754; NONEON-NOSVE-NEXT: cmp w9, #72755; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2756; NONEON-NOSVE-NEXT: strb w9, [sp, #51]2757; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #18]2758; NONEON-NOSVE-NEXT: cmp w9, #72759; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2760; NONEON-NOSVE-NEXT: strb w9, [sp, #50]2761; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #17]2762; NONEON-NOSVE-NEXT: cmp w9, #72763; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2764; NONEON-NOSVE-NEXT: strb w9, [sp, #49]2765; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #16]2766; NONEON-NOSVE-NEXT: cmp w9, #72767; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2768; NONEON-NOSVE-NEXT: strb w9, [sp, #48]2769; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #15]2770; NONEON-NOSVE-NEXT: cmp w9, #72771; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2772; NONEON-NOSVE-NEXT: strb w9, [sp, #47]2773; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #14]2774; NONEON-NOSVE-NEXT: cmp w9, #72775; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2776; NONEON-NOSVE-NEXT: strb w9, [sp, #46]2777; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #13]2778; NONEON-NOSVE-NEXT: cmp w9, #72779; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2780; NONEON-NOSVE-NEXT: strb w9, [sp, #45]2781; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #12]2782; NONEON-NOSVE-NEXT: cmp w9, #72783; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2784; NONEON-NOSVE-NEXT: strb w9, [sp, #44]2785; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #11]2786; NONEON-NOSVE-NEXT: cmp w9, #72787; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2788; NONEON-NOSVE-NEXT: strb w9, [sp, #43]2789; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #10]2790; NONEON-NOSVE-NEXT: cmp w9, #72791; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2792; NONEON-NOSVE-NEXT: strb w9, [sp, #42]2793; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #9]2794; NONEON-NOSVE-NEXT: cmp w9, #72795; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2796; NONEON-NOSVE-NEXT: strb w9, [sp, #41]2797; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #8]2798; NONEON-NOSVE-NEXT: cmp w9, #72799; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2800; NONEON-NOSVE-NEXT: strb w9, [sp, #40]2801; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #7]2802; NONEON-NOSVE-NEXT: cmp w9, #72803; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2804; NONEON-NOSVE-NEXT: strb w9, [sp, #39]2805; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #6]2806; NONEON-NOSVE-NEXT: cmp w9, #72807; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2808; NONEON-NOSVE-NEXT: strb w9, [sp, #38]2809; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #5]2810; NONEON-NOSVE-NEXT: cmp w9, #72811; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2812; NONEON-NOSVE-NEXT: strb w9, [sp, #37]2813; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #4]2814; NONEON-NOSVE-NEXT: cmp w9, #72815; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2816; NONEON-NOSVE-NEXT: strb w9, [sp, #36]2817; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #3]2818; NONEON-NOSVE-NEXT: cmp w9, #72819; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2820; NONEON-NOSVE-NEXT: strb w9, [sp, #35]2821; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #2]2822; NONEON-NOSVE-NEXT: cmp w9, #72823; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2824; NONEON-NOSVE-NEXT: strb w9, [sp, #34]2825; NONEON-NOSVE-NEXT: ldrsb w9, [sp, #1]2826; NONEON-NOSVE-NEXT: cmp w9, #72827; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2828; NONEON-NOSVE-NEXT: strb w9, [sp, #33]2829; NONEON-NOSVE-NEXT: ldrsb w9, [sp]2830; NONEON-NOSVE-NEXT: cmp w9, #72831; NONEON-NOSVE-NEXT: csel w8, w9, w8, lt2832; NONEON-NOSVE-NEXT: strb w8, [sp, #32]2833; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2834; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2835; NONEON-NOSVE-NEXT: add sp, sp, #642836; NONEON-NOSVE-NEXT: ret2837 %op1 = load <32 x i8>, ptr %a2838 %res = call <32 x i8> @llvm.smin.v32i8(<32 x i8> %op1, <32 x i8> splat(i8 7))2839 store <32 x i8> %res, ptr %a2840 ret void2841}2842 2843define void @smin_v16i16(ptr %a) {2844; CHECK-LABEL: smin_v16i16:2845; CHECK: // %bb.0:2846; CHECK-NEXT: ldp q0, q1, [x0]2847; CHECK-NEXT: smin z0.h, z0.h, #152848; CHECK-NEXT: smin z1.h, z1.h, #152849; CHECK-NEXT: stp q0, q1, [x0]2850; CHECK-NEXT: ret2851;2852; NONEON-NOSVE-LABEL: smin_v16i16:2853; NONEON-NOSVE: // %bb.0:2854; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2855; NONEON-NOSVE-NEXT: mov w8, #15 // =0xf2856; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2857; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642858; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #30]2859; NONEON-NOSVE-NEXT: cmp w9, #152860; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2861; NONEON-NOSVE-NEXT: strh w9, [sp, #62]2862; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #28]2863; NONEON-NOSVE-NEXT: cmp w9, #152864; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2865; NONEON-NOSVE-NEXT: strh w9, [sp, #60]2866; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #26]2867; NONEON-NOSVE-NEXT: cmp w9, #152868; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2869; NONEON-NOSVE-NEXT: strh w9, [sp, #58]2870; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #24]2871; NONEON-NOSVE-NEXT: cmp w9, #152872; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2873; NONEON-NOSVE-NEXT: strh w9, [sp, #56]2874; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #22]2875; NONEON-NOSVE-NEXT: cmp w9, #152876; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2877; NONEON-NOSVE-NEXT: strh w9, [sp, #54]2878; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #20]2879; NONEON-NOSVE-NEXT: cmp w9, #152880; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2881; NONEON-NOSVE-NEXT: strh w9, [sp, #52]2882; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #18]2883; NONEON-NOSVE-NEXT: cmp w9, #152884; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2885; NONEON-NOSVE-NEXT: strh w9, [sp, #50]2886; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #16]2887; NONEON-NOSVE-NEXT: cmp w9, #152888; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2889; NONEON-NOSVE-NEXT: strh w9, [sp, #48]2890; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #14]2891; NONEON-NOSVE-NEXT: cmp w9, #152892; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2893; NONEON-NOSVE-NEXT: strh w9, [sp, #46]2894; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #12]2895; NONEON-NOSVE-NEXT: cmp w9, #152896; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2897; NONEON-NOSVE-NEXT: strh w9, [sp, #44]2898; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #10]2899; NONEON-NOSVE-NEXT: cmp w9, #152900; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2901; NONEON-NOSVE-NEXT: strh w9, [sp, #42]2902; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #8]2903; NONEON-NOSVE-NEXT: cmp w9, #152904; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2905; NONEON-NOSVE-NEXT: strh w9, [sp, #40]2906; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #6]2907; NONEON-NOSVE-NEXT: cmp w9, #152908; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2909; NONEON-NOSVE-NEXT: strh w9, [sp, #38]2910; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #4]2911; NONEON-NOSVE-NEXT: cmp w9, #152912; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2913; NONEON-NOSVE-NEXT: strh w9, [sp, #36]2914; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #2]2915; NONEON-NOSVE-NEXT: cmp w9, #152916; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2917; NONEON-NOSVE-NEXT: strh w9, [sp, #34]2918; NONEON-NOSVE-NEXT: ldrsh w9, [sp]2919; NONEON-NOSVE-NEXT: cmp w9, #152920; NONEON-NOSVE-NEXT: csel w8, w9, w8, lt2921; NONEON-NOSVE-NEXT: strh w8, [sp, #32]2922; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2923; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2924; NONEON-NOSVE-NEXT: add sp, sp, #642925; NONEON-NOSVE-NEXT: ret2926 %op1 = load <16 x i16>, ptr %a2927 %res = call <16 x i16> @llvm.smin.v16i16(<16 x i16> %op1, <16 x i16> splat(i16 15))2928 store <16 x i16> %res, ptr %a2929 ret void2930}2931 2932define void @smin_v8i32(ptr %a) {2933; CHECK-LABEL: smin_v8i32:2934; CHECK: // %bb.0:2935; CHECK-NEXT: ldp q0, q1, [x0]2936; CHECK-NEXT: smin z0.s, z0.s, #312937; CHECK-NEXT: smin z1.s, z1.s, #312938; CHECK-NEXT: stp q0, q1, [x0]2939; CHECK-NEXT: ret2940;2941; NONEON-NOSVE-LABEL: smin_v8i32:2942; NONEON-NOSVE: // %bb.0:2943; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2944; NONEON-NOSVE-NEXT: mov w8, #31 // =0x1f2945; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2946; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 642947; NONEON-NOSVE-NEXT: ldr w9, [sp, #28]2948; NONEON-NOSVE-NEXT: cmp w9, #312949; NONEON-NOSVE-NEXT: csel w10, w9, w8, lt2950; NONEON-NOSVE-NEXT: ldr w9, [sp, #24]2951; NONEON-NOSVE-NEXT: cmp w9, #312952; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2953; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #56]2954; NONEON-NOSVE-NEXT: ldr w9, [sp, #20]2955; NONEON-NOSVE-NEXT: cmp w9, #312956; NONEON-NOSVE-NEXT: csel w10, w9, w8, lt2957; NONEON-NOSVE-NEXT: ldr w9, [sp, #16]2958; NONEON-NOSVE-NEXT: cmp w9, #312959; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2960; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #48]2961; NONEON-NOSVE-NEXT: ldr w9, [sp, #12]2962; NONEON-NOSVE-NEXT: cmp w9, #312963; NONEON-NOSVE-NEXT: csel w10, w9, w8, lt2964; NONEON-NOSVE-NEXT: ldr w9, [sp, #8]2965; NONEON-NOSVE-NEXT: cmp w9, #312966; NONEON-NOSVE-NEXT: csel w9, w9, w8, lt2967; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #40]2968; NONEON-NOSVE-NEXT: ldr w9, [sp, #4]2969; NONEON-NOSVE-NEXT: cmp w9, #312970; NONEON-NOSVE-NEXT: csel w10, w9, w8, lt2971; NONEON-NOSVE-NEXT: ldr w9, [sp]2972; NONEON-NOSVE-NEXT: cmp w9, #312973; NONEON-NOSVE-NEXT: csel w8, w9, w8, lt2974; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #32]2975; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]2976; NONEON-NOSVE-NEXT: stp q0, q1, [x0]2977; NONEON-NOSVE-NEXT: add sp, sp, #642978; NONEON-NOSVE-NEXT: ret2979 %op1 = load <8 x i32>, ptr %a2980 %res = call <8 x i32> @llvm.smin.v8i32(<8 x i32> %op1, <8 x i32> splat(i32 31))2981 store <8 x i32> %res, ptr %a2982 ret void2983}2984 2985define void @smin_v4i64(ptr %a) {2986; CHECK-LABEL: smin_v4i64:2987; CHECK: // %bb.0:2988; CHECK-NEXT: ldp q0, q1, [x0]2989; CHECK-NEXT: smin z0.d, z0.d, #632990; CHECK-NEXT: smin z1.d, z1.d, #632991; CHECK-NEXT: stp q0, q1, [x0]2992; CHECK-NEXT: ret2993;2994; NONEON-NOSVE-LABEL: smin_v4i64:2995; NONEON-NOSVE: // %bb.0:2996; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]2997; NONEON-NOSVE-NEXT: mov w8, #63 // =0x3f2998; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!2999; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643000; NONEON-NOSVE-NEXT: ldr x9, [sp, #24]3001; NONEON-NOSVE-NEXT: cmp x9, #633002; NONEON-NOSVE-NEXT: csel x10, x9, x8, lt3003; NONEON-NOSVE-NEXT: ldr x9, [sp, #16]3004; NONEON-NOSVE-NEXT: cmp x9, #633005; NONEON-NOSVE-NEXT: csel x9, x9, x8, lt3006; NONEON-NOSVE-NEXT: stp x9, x10, [sp, #48]3007; NONEON-NOSVE-NEXT: ldr x9, [sp, #8]3008; NONEON-NOSVE-NEXT: cmp x9, #633009; NONEON-NOSVE-NEXT: csel x10, x9, x8, lt3010; NONEON-NOSVE-NEXT: ldr x9, [sp]3011; NONEON-NOSVE-NEXT: cmp x9, #633012; NONEON-NOSVE-NEXT: csel x8, x9, x8, lt3013; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #32]3014; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3015; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3016; NONEON-NOSVE-NEXT: add sp, sp, #643017; NONEON-NOSVE-NEXT: ret3018 %op1 = load <4 x i64>, ptr %a3019 %res = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %op1, <4 x i64> splat(i64 63))3020 store <4 x i64> %res, ptr %a3021 ret void3022}3023 3024;3025; SUB3026;3027 3028define void @sub_v32i8(ptr %a) {3029; CHECK-LABEL: sub_v32i8:3030; CHECK: // %bb.0:3031; CHECK-NEXT: ldp q0, q1, [x0]3032; CHECK-NEXT: sub z0.b, z0.b, #7 // =0x73033; CHECK-NEXT: sub z1.b, z1.b, #7 // =0x73034; CHECK-NEXT: stp q0, q1, [x0]3035; CHECK-NEXT: ret3036;3037; NONEON-NOSVE-LABEL: sub_v32i8:3038; NONEON-NOSVE: // %bb.0:3039; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3040; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3041; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643042; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]3043; NONEON-NOSVE-NEXT: sub w8, w8, #73044; NONEON-NOSVE-NEXT: strb w8, [sp, #63]3045; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]3046; NONEON-NOSVE-NEXT: sub w8, w8, #73047; NONEON-NOSVE-NEXT: strb w8, [sp, #62]3048; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]3049; NONEON-NOSVE-NEXT: sub w8, w8, #73050; NONEON-NOSVE-NEXT: strb w8, [sp, #61]3051; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]3052; NONEON-NOSVE-NEXT: sub w8, w8, #73053; NONEON-NOSVE-NEXT: strb w8, [sp, #60]3054; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]3055; NONEON-NOSVE-NEXT: sub w8, w8, #73056; NONEON-NOSVE-NEXT: strb w8, [sp, #59]3057; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]3058; NONEON-NOSVE-NEXT: sub w8, w8, #73059; NONEON-NOSVE-NEXT: strb w8, [sp, #58]3060; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]3061; NONEON-NOSVE-NEXT: sub w8, w8, #73062; NONEON-NOSVE-NEXT: strb w8, [sp, #57]3063; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]3064; NONEON-NOSVE-NEXT: sub w8, w8, #73065; NONEON-NOSVE-NEXT: strb w8, [sp, #56]3066; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]3067; NONEON-NOSVE-NEXT: sub w8, w8, #73068; NONEON-NOSVE-NEXT: strb w8, [sp, #55]3069; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]3070; NONEON-NOSVE-NEXT: sub w8, w8, #73071; NONEON-NOSVE-NEXT: strb w8, [sp, #54]3072; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]3073; NONEON-NOSVE-NEXT: sub w8, w8, #73074; NONEON-NOSVE-NEXT: strb w8, [sp, #53]3075; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]3076; NONEON-NOSVE-NEXT: sub w8, w8, #73077; NONEON-NOSVE-NEXT: strb w8, [sp, #52]3078; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]3079; NONEON-NOSVE-NEXT: sub w8, w8, #73080; NONEON-NOSVE-NEXT: strb w8, [sp, #51]3081; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]3082; NONEON-NOSVE-NEXT: sub w8, w8, #73083; NONEON-NOSVE-NEXT: strb w8, [sp, #50]3084; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]3085; NONEON-NOSVE-NEXT: sub w8, w8, #73086; NONEON-NOSVE-NEXT: strb w8, [sp, #49]3087; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]3088; NONEON-NOSVE-NEXT: sub w8, w8, #73089; NONEON-NOSVE-NEXT: strb w8, [sp, #48]3090; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]3091; NONEON-NOSVE-NEXT: sub w8, w8, #73092; NONEON-NOSVE-NEXT: strb w8, [sp, #47]3093; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]3094; NONEON-NOSVE-NEXT: sub w8, w8, #73095; NONEON-NOSVE-NEXT: strb w8, [sp, #46]3096; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]3097; NONEON-NOSVE-NEXT: sub w8, w8, #73098; NONEON-NOSVE-NEXT: strb w8, [sp, #45]3099; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]3100; NONEON-NOSVE-NEXT: sub w8, w8, #73101; NONEON-NOSVE-NEXT: strb w8, [sp, #44]3102; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]3103; NONEON-NOSVE-NEXT: sub w8, w8, #73104; NONEON-NOSVE-NEXT: strb w8, [sp, #43]3105; NONEON-NOSVE-NEXT: ldrb w8, [sp, #10]3106; NONEON-NOSVE-NEXT: sub w8, w8, #73107; NONEON-NOSVE-NEXT: strb w8, [sp, #42]3108; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]3109; NONEON-NOSVE-NEXT: sub w8, w8, #73110; NONEON-NOSVE-NEXT: strb w8, [sp, #41]3111; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]3112; NONEON-NOSVE-NEXT: sub w8, w8, #73113; NONEON-NOSVE-NEXT: strb w8, [sp, #40]3114; NONEON-NOSVE-NEXT: ldrb w8, [sp, #7]3115; NONEON-NOSVE-NEXT: sub w8, w8, #73116; NONEON-NOSVE-NEXT: strb w8, [sp, #39]3117; NONEON-NOSVE-NEXT: ldrb w8, [sp, #6]3118; NONEON-NOSVE-NEXT: sub w8, w8, #73119; NONEON-NOSVE-NEXT: strb w8, [sp, #38]3120; NONEON-NOSVE-NEXT: ldrb w8, [sp, #5]3121; NONEON-NOSVE-NEXT: sub w8, w8, #73122; NONEON-NOSVE-NEXT: strb w8, [sp, #37]3123; NONEON-NOSVE-NEXT: ldrb w8, [sp, #4]3124; NONEON-NOSVE-NEXT: sub w8, w8, #73125; NONEON-NOSVE-NEXT: strb w8, [sp, #36]3126; NONEON-NOSVE-NEXT: ldrb w8, [sp, #3]3127; NONEON-NOSVE-NEXT: sub w8, w8, #73128; NONEON-NOSVE-NEXT: strb w8, [sp, #35]3129; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]3130; NONEON-NOSVE-NEXT: sub w8, w8, #73131; NONEON-NOSVE-NEXT: strb w8, [sp, #34]3132; NONEON-NOSVE-NEXT: ldrb w8, [sp, #1]3133; NONEON-NOSVE-NEXT: sub w8, w8, #73134; NONEON-NOSVE-NEXT: strb w8, [sp, #33]3135; NONEON-NOSVE-NEXT: ldrb w8, [sp]3136; NONEON-NOSVE-NEXT: sub w8, w8, #73137; NONEON-NOSVE-NEXT: strb w8, [sp, #32]3138; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3139; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3140; NONEON-NOSVE-NEXT: add sp, sp, #643141; NONEON-NOSVE-NEXT: ret3142 %op1 = load <32 x i8>, ptr %a3143 %res = sub <32 x i8> %op1, splat(i8 7)3144 store <32 x i8> %res, ptr %a3145 ret void3146}3147 3148define void @sub_v16i16(ptr %a) {3149; CHECK-LABEL: sub_v16i16:3150; CHECK: // %bb.0:3151; CHECK-NEXT: ldp q0, q1, [x0]3152; CHECK-NEXT: sub z0.h, z0.h, #15 // =0xf3153; CHECK-NEXT: sub z1.h, z1.h, #15 // =0xf3154; CHECK-NEXT: stp q0, q1, [x0]3155; CHECK-NEXT: ret3156;3157; NONEON-NOSVE-LABEL: sub_v16i16:3158; NONEON-NOSVE: // %bb.0:3159; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3160; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3161; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643162; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]3163; NONEON-NOSVE-NEXT: sub w8, w8, #153164; NONEON-NOSVE-NEXT: strh w8, [sp, #62]3165; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]3166; NONEON-NOSVE-NEXT: sub w8, w8, #153167; NONEON-NOSVE-NEXT: strh w8, [sp, #60]3168; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]3169; NONEON-NOSVE-NEXT: sub w8, w8, #153170; NONEON-NOSVE-NEXT: strh w8, [sp, #58]3171; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]3172; NONEON-NOSVE-NEXT: sub w8, w8, #153173; NONEON-NOSVE-NEXT: strh w8, [sp, #56]3174; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]3175; NONEON-NOSVE-NEXT: sub w8, w8, #153176; NONEON-NOSVE-NEXT: strh w8, [sp, #54]3177; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]3178; NONEON-NOSVE-NEXT: sub w8, w8, #153179; NONEON-NOSVE-NEXT: strh w8, [sp, #52]3180; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]3181; NONEON-NOSVE-NEXT: sub w8, w8, #153182; NONEON-NOSVE-NEXT: strh w8, [sp, #50]3183; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]3184; NONEON-NOSVE-NEXT: sub w8, w8, #153185; NONEON-NOSVE-NEXT: strh w8, [sp, #48]3186; NONEON-NOSVE-NEXT: ldrh w8, [sp, #14]3187; NONEON-NOSVE-NEXT: sub w8, w8, #153188; NONEON-NOSVE-NEXT: strh w8, [sp, #46]3189; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]3190; NONEON-NOSVE-NEXT: sub w8, w8, #153191; NONEON-NOSVE-NEXT: strh w8, [sp, #44]3192; NONEON-NOSVE-NEXT: ldrh w8, [sp, #10]3193; NONEON-NOSVE-NEXT: sub w8, w8, #153194; NONEON-NOSVE-NEXT: strh w8, [sp, #42]3195; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8]3196; NONEON-NOSVE-NEXT: sub w8, w8, #153197; NONEON-NOSVE-NEXT: strh w8, [sp, #40]3198; NONEON-NOSVE-NEXT: ldrh w8, [sp, #6]3199; NONEON-NOSVE-NEXT: sub w8, w8, #153200; NONEON-NOSVE-NEXT: strh w8, [sp, #38]3201; NONEON-NOSVE-NEXT: ldrh w8, [sp, #4]3202; NONEON-NOSVE-NEXT: sub w8, w8, #153203; NONEON-NOSVE-NEXT: strh w8, [sp, #36]3204; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]3205; NONEON-NOSVE-NEXT: sub w8, w8, #153206; NONEON-NOSVE-NEXT: strh w8, [sp, #34]3207; NONEON-NOSVE-NEXT: ldrh w8, [sp]3208; NONEON-NOSVE-NEXT: sub w8, w8, #153209; NONEON-NOSVE-NEXT: strh w8, [sp, #32]3210; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3211; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3212; NONEON-NOSVE-NEXT: add sp, sp, #643213; NONEON-NOSVE-NEXT: ret3214 %op1 = load <16 x i16>, ptr %a3215 %res = sub <16 x i16> %op1, splat(i16 15)3216 store <16 x i16> %res, ptr %a3217 ret void3218}3219 3220define void @sub_v8i32(ptr %a) {3221; CHECK-LABEL: sub_v8i32:3222; CHECK: // %bb.0:3223; CHECK-NEXT: ldp q0, q1, [x0]3224; CHECK-NEXT: sub z0.s, z0.s, #31 // =0x1f3225; CHECK-NEXT: sub z1.s, z1.s, #31 // =0x1f3226; CHECK-NEXT: stp q0, q1, [x0]3227; CHECK-NEXT: ret3228;3229; NONEON-NOSVE-LABEL: sub_v8i32:3230; NONEON-NOSVE: // %bb.0:3231; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3232; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3233; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643234; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]3235; NONEON-NOSVE-NEXT: sub w9, w8, #313236; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]3237; NONEON-NOSVE-NEXT: sub w8, w8, #313238; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]3239; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]3240; NONEON-NOSVE-NEXT: sub w9, w8, #313241; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]3242; NONEON-NOSVE-NEXT: sub w8, w8, #313243; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]3244; NONEON-NOSVE-NEXT: ldr w8, [sp, #12]3245; NONEON-NOSVE-NEXT: sub w9, w8, #313246; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]3247; NONEON-NOSVE-NEXT: sub w8, w8, #313248; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]3249; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]3250; NONEON-NOSVE-NEXT: sub w9, w8, #313251; NONEON-NOSVE-NEXT: ldr w8, [sp]3252; NONEON-NOSVE-NEXT: sub w8, w8, #313253; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]3254; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3255; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3256; NONEON-NOSVE-NEXT: add sp, sp, #643257; NONEON-NOSVE-NEXT: ret3258 %op1 = load <8 x i32>, ptr %a3259 %res = sub <8 x i32> %op1, splat(i32 31)3260 store <8 x i32> %res, ptr %a3261 ret void3262}3263 3264define void @sub_v4i64(ptr %a) {3265; CHECK-LABEL: sub_v4i64:3266; CHECK: // %bb.0:3267; CHECK-NEXT: ldp q0, q1, [x0]3268; CHECK-NEXT: sub z0.d, z0.d, #63 // =0x3f3269; CHECK-NEXT: sub z1.d, z1.d, #63 // =0x3f3270; CHECK-NEXT: stp q0, q1, [x0]3271; CHECK-NEXT: ret3272;3273; NONEON-NOSVE-LABEL: sub_v4i64:3274; NONEON-NOSVE: // %bb.0:3275; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3276; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3277; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643278; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]3279; NONEON-NOSVE-NEXT: sub x9, x8, #633280; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]3281; NONEON-NOSVE-NEXT: sub x8, x8, #633282; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #48]3283; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]3284; NONEON-NOSVE-NEXT: sub x9, x8, #633285; NONEON-NOSVE-NEXT: ldr x8, [sp]3286; NONEON-NOSVE-NEXT: sub x8, x8, #633287; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #32]3288; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3289; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3290; NONEON-NOSVE-NEXT: add sp, sp, #643291; NONEON-NOSVE-NEXT: ret3292 %op1 = load <4 x i64>, ptr %a3293 %res = sub <4 x i64> %op1, splat(i64 63)3294 store <4 x i64> %res, ptr %a3295 ret void3296}3297 3298;3299; UMAX3300;3301 3302define void @umax_v32i8(ptr %a) {3303; CHECK-LABEL: umax_v32i8:3304; CHECK: // %bb.0:3305; CHECK-NEXT: ldp q0, q1, [x0]3306; CHECK-NEXT: umax z0.b, z0.b, #73307; CHECK-NEXT: umax z1.b, z1.b, #73308; CHECK-NEXT: stp q0, q1, [x0]3309; CHECK-NEXT: ret3310;3311; NONEON-NOSVE-LABEL: umax_v32i8:3312; NONEON-NOSVE: // %bb.0:3313; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3314; NONEON-NOSVE-NEXT: mov w8, #7 // =0x73315; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3316; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643317; NONEON-NOSVE-NEXT: ldrb w9, [sp, #31]3318; NONEON-NOSVE-NEXT: tst w9, #0xf83319; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3320; NONEON-NOSVE-NEXT: strb w9, [sp, #63]3321; NONEON-NOSVE-NEXT: ldrb w9, [sp, #30]3322; NONEON-NOSVE-NEXT: tst w9, #0xf83323; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3324; NONEON-NOSVE-NEXT: strb w9, [sp, #62]3325; NONEON-NOSVE-NEXT: ldrb w9, [sp, #29]3326; NONEON-NOSVE-NEXT: tst w9, #0xf83327; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3328; NONEON-NOSVE-NEXT: strb w9, [sp, #61]3329; NONEON-NOSVE-NEXT: ldrb w9, [sp, #28]3330; NONEON-NOSVE-NEXT: tst w9, #0xf83331; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3332; NONEON-NOSVE-NEXT: strb w9, [sp, #60]3333; NONEON-NOSVE-NEXT: ldrb w9, [sp, #27]3334; NONEON-NOSVE-NEXT: tst w9, #0xf83335; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3336; NONEON-NOSVE-NEXT: strb w9, [sp, #59]3337; NONEON-NOSVE-NEXT: ldrb w9, [sp, #26]3338; NONEON-NOSVE-NEXT: tst w9, #0xf83339; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3340; NONEON-NOSVE-NEXT: strb w9, [sp, #58]3341; NONEON-NOSVE-NEXT: ldrb w9, [sp, #25]3342; NONEON-NOSVE-NEXT: tst w9, #0xf83343; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3344; NONEON-NOSVE-NEXT: strb w9, [sp, #57]3345; NONEON-NOSVE-NEXT: ldrb w9, [sp, #24]3346; NONEON-NOSVE-NEXT: tst w9, #0xf83347; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3348; NONEON-NOSVE-NEXT: strb w9, [sp, #56]3349; NONEON-NOSVE-NEXT: ldrb w9, [sp, #23]3350; NONEON-NOSVE-NEXT: tst w9, #0xf83351; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3352; NONEON-NOSVE-NEXT: strb w9, [sp, #55]3353; NONEON-NOSVE-NEXT: ldrb w9, [sp, #22]3354; NONEON-NOSVE-NEXT: tst w9, #0xf83355; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3356; NONEON-NOSVE-NEXT: strb w9, [sp, #54]3357; NONEON-NOSVE-NEXT: ldrb w9, [sp, #21]3358; NONEON-NOSVE-NEXT: tst w9, #0xf83359; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3360; NONEON-NOSVE-NEXT: strb w9, [sp, #53]3361; NONEON-NOSVE-NEXT: ldrb w9, [sp, #20]3362; NONEON-NOSVE-NEXT: tst w9, #0xf83363; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3364; NONEON-NOSVE-NEXT: strb w9, [sp, #52]3365; NONEON-NOSVE-NEXT: ldrb w9, [sp, #19]3366; NONEON-NOSVE-NEXT: tst w9, #0xf83367; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3368; NONEON-NOSVE-NEXT: strb w9, [sp, #51]3369; NONEON-NOSVE-NEXT: ldrb w9, [sp, #18]3370; NONEON-NOSVE-NEXT: tst w9, #0xf83371; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3372; NONEON-NOSVE-NEXT: strb w9, [sp, #50]3373; NONEON-NOSVE-NEXT: ldrb w9, [sp, #17]3374; NONEON-NOSVE-NEXT: tst w9, #0xf83375; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3376; NONEON-NOSVE-NEXT: strb w9, [sp, #49]3377; NONEON-NOSVE-NEXT: ldrb w9, [sp, #16]3378; NONEON-NOSVE-NEXT: tst w9, #0xf83379; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3380; NONEON-NOSVE-NEXT: strb w9, [sp, #48]3381; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]3382; NONEON-NOSVE-NEXT: tst w9, #0xf83383; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3384; NONEON-NOSVE-NEXT: strb w9, [sp, #47]3385; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]3386; NONEON-NOSVE-NEXT: tst w9, #0xf83387; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3388; NONEON-NOSVE-NEXT: strb w9, [sp, #46]3389; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]3390; NONEON-NOSVE-NEXT: tst w9, #0xf83391; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3392; NONEON-NOSVE-NEXT: strb w9, [sp, #45]3393; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]3394; NONEON-NOSVE-NEXT: tst w9, #0xf83395; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3396; NONEON-NOSVE-NEXT: strb w9, [sp, #44]3397; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]3398; NONEON-NOSVE-NEXT: tst w9, #0xf83399; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3400; NONEON-NOSVE-NEXT: strb w9, [sp, #43]3401; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]3402; NONEON-NOSVE-NEXT: tst w9, #0xf83403; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3404; NONEON-NOSVE-NEXT: strb w9, [sp, #42]3405; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]3406; NONEON-NOSVE-NEXT: tst w9, #0xf83407; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3408; NONEON-NOSVE-NEXT: strb w9, [sp, #41]3409; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]3410; NONEON-NOSVE-NEXT: tst w9, #0xf83411; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3412; NONEON-NOSVE-NEXT: strb w9, [sp, #40]3413; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]3414; NONEON-NOSVE-NEXT: tst w9, #0xf83415; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3416; NONEON-NOSVE-NEXT: strb w9, [sp, #39]3417; NONEON-NOSVE-NEXT: ldrb w9, [sp, #6]3418; NONEON-NOSVE-NEXT: tst w9, #0xf83419; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3420; NONEON-NOSVE-NEXT: strb w9, [sp, #38]3421; NONEON-NOSVE-NEXT: ldrb w9, [sp, #5]3422; NONEON-NOSVE-NEXT: tst w9, #0xf83423; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3424; NONEON-NOSVE-NEXT: strb w9, [sp, #37]3425; NONEON-NOSVE-NEXT: ldrb w9, [sp, #4]3426; NONEON-NOSVE-NEXT: tst w9, #0xf83427; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3428; NONEON-NOSVE-NEXT: strb w9, [sp, #36]3429; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]3430; NONEON-NOSVE-NEXT: tst w9, #0xf83431; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3432; NONEON-NOSVE-NEXT: strb w9, [sp, #35]3433; NONEON-NOSVE-NEXT: ldrb w9, [sp, #2]3434; NONEON-NOSVE-NEXT: tst w9, #0xf83435; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3436; NONEON-NOSVE-NEXT: strb w9, [sp, #34]3437; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1]3438; NONEON-NOSVE-NEXT: tst w9, #0xf83439; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3440; NONEON-NOSVE-NEXT: strb w9, [sp, #33]3441; NONEON-NOSVE-NEXT: ldrb w9, [sp]3442; NONEON-NOSVE-NEXT: tst w9, #0xf83443; NONEON-NOSVE-NEXT: csel w8, w9, w8, ne3444; NONEON-NOSVE-NEXT: strb w8, [sp, #32]3445; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3446; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3447; NONEON-NOSVE-NEXT: add sp, sp, #643448; NONEON-NOSVE-NEXT: ret3449 %op1 = load <32 x i8>, ptr %a3450 %res = call <32 x i8> @llvm.umax.v32i8(<32 x i8> %op1, <32 x i8> splat(i8 7))3451 store <32 x i8> %res, ptr %a3452 ret void3453}3454 3455define void @umax_v16i16(ptr %a) {3456; CHECK-LABEL: umax_v16i16:3457; CHECK: // %bb.0:3458; CHECK-NEXT: ldp q0, q1, [x0]3459; CHECK-NEXT: umax z0.h, z0.h, #153460; CHECK-NEXT: umax z1.h, z1.h, #153461; CHECK-NEXT: stp q0, q1, [x0]3462; CHECK-NEXT: ret3463;3464; NONEON-NOSVE-LABEL: umax_v16i16:3465; NONEON-NOSVE: // %bb.0:3466; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3467; NONEON-NOSVE-NEXT: mov w8, #15 // =0xf3468; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3469; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643470; NONEON-NOSVE-NEXT: ldrh w9, [sp, #30]3471; NONEON-NOSVE-NEXT: tst w9, #0xfff03472; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3473; NONEON-NOSVE-NEXT: strh w9, [sp, #62]3474; NONEON-NOSVE-NEXT: ldrh w9, [sp, #28]3475; NONEON-NOSVE-NEXT: tst w9, #0xfff03476; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3477; NONEON-NOSVE-NEXT: strh w9, [sp, #60]3478; NONEON-NOSVE-NEXT: ldrh w9, [sp, #26]3479; NONEON-NOSVE-NEXT: tst w9, #0xfff03480; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3481; NONEON-NOSVE-NEXT: strh w9, [sp, #58]3482; NONEON-NOSVE-NEXT: ldrh w9, [sp, #24]3483; NONEON-NOSVE-NEXT: tst w9, #0xfff03484; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3485; NONEON-NOSVE-NEXT: strh w9, [sp, #56]3486; NONEON-NOSVE-NEXT: ldrh w9, [sp, #22]3487; NONEON-NOSVE-NEXT: tst w9, #0xfff03488; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3489; NONEON-NOSVE-NEXT: strh w9, [sp, #54]3490; NONEON-NOSVE-NEXT: ldrh w9, [sp, #20]3491; NONEON-NOSVE-NEXT: tst w9, #0xfff03492; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3493; NONEON-NOSVE-NEXT: strh w9, [sp, #52]3494; NONEON-NOSVE-NEXT: ldrh w9, [sp, #18]3495; NONEON-NOSVE-NEXT: tst w9, #0xfff03496; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3497; NONEON-NOSVE-NEXT: strh w9, [sp, #50]3498; NONEON-NOSVE-NEXT: ldrh w9, [sp, #16]3499; NONEON-NOSVE-NEXT: tst w9, #0xfff03500; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3501; NONEON-NOSVE-NEXT: strh w9, [sp, #48]3502; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]3503; NONEON-NOSVE-NEXT: tst w9, #0xfff03504; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3505; NONEON-NOSVE-NEXT: strh w9, [sp, #46]3506; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]3507; NONEON-NOSVE-NEXT: tst w9, #0xfff03508; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3509; NONEON-NOSVE-NEXT: strh w9, [sp, #44]3510; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]3511; NONEON-NOSVE-NEXT: tst w9, #0xfff03512; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3513; NONEON-NOSVE-NEXT: strh w9, [sp, #42]3514; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]3515; NONEON-NOSVE-NEXT: tst w9, #0xfff03516; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3517; NONEON-NOSVE-NEXT: strh w9, [sp, #40]3518; NONEON-NOSVE-NEXT: ldrh w9, [sp, #6]3519; NONEON-NOSVE-NEXT: tst w9, #0xfff03520; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3521; NONEON-NOSVE-NEXT: strh w9, [sp, #38]3522; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]3523; NONEON-NOSVE-NEXT: tst w9, #0xfff03524; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3525; NONEON-NOSVE-NEXT: strh w9, [sp, #36]3526; NONEON-NOSVE-NEXT: ldrh w9, [sp, #2]3527; NONEON-NOSVE-NEXT: tst w9, #0xfff03528; NONEON-NOSVE-NEXT: csel w9, w9, w8, ne3529; NONEON-NOSVE-NEXT: strh w9, [sp, #34]3530; NONEON-NOSVE-NEXT: ldrh w9, [sp]3531; NONEON-NOSVE-NEXT: tst w9, #0xfff03532; NONEON-NOSVE-NEXT: csel w8, w9, w8, ne3533; NONEON-NOSVE-NEXT: strh w8, [sp, #32]3534; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3535; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3536; NONEON-NOSVE-NEXT: add sp, sp, #643537; NONEON-NOSVE-NEXT: ret3538 %op1 = load <16 x i16>, ptr %a3539 %res = call <16 x i16> @llvm.umax.v16i16(<16 x i16> %op1, <16 x i16> splat(i16 15))3540 store <16 x i16> %res, ptr %a3541 ret void3542}3543 3544define void @umax_v8i32(ptr %a) {3545; CHECK-LABEL: umax_v8i32:3546; CHECK: // %bb.0:3547; CHECK-NEXT: ldp q0, q1, [x0]3548; CHECK-NEXT: umax z0.s, z0.s, #313549; CHECK-NEXT: umax z1.s, z1.s, #313550; CHECK-NEXT: stp q0, q1, [x0]3551; CHECK-NEXT: ret3552;3553; NONEON-NOSVE-LABEL: umax_v8i32:3554; NONEON-NOSVE: // %bb.0:3555; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3556; NONEON-NOSVE-NEXT: mov w8, #31 // =0x1f3557; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3558; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643559; NONEON-NOSVE-NEXT: ldr w9, [sp, #28]3560; NONEON-NOSVE-NEXT: cmp w9, #313561; NONEON-NOSVE-NEXT: csel w10, w9, w8, hi3562; NONEON-NOSVE-NEXT: ldr w9, [sp, #24]3563; NONEON-NOSVE-NEXT: cmp w9, #313564; NONEON-NOSVE-NEXT: csel w9, w9, w8, hi3565; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #56]3566; NONEON-NOSVE-NEXT: ldr w9, [sp, #20]3567; NONEON-NOSVE-NEXT: cmp w9, #313568; NONEON-NOSVE-NEXT: csel w10, w9, w8, hi3569; NONEON-NOSVE-NEXT: ldr w9, [sp, #16]3570; NONEON-NOSVE-NEXT: cmp w9, #313571; NONEON-NOSVE-NEXT: csel w9, w9, w8, hi3572; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #48]3573; NONEON-NOSVE-NEXT: ldr w9, [sp, #12]3574; NONEON-NOSVE-NEXT: cmp w9, #313575; NONEON-NOSVE-NEXT: csel w10, w9, w8, hi3576; NONEON-NOSVE-NEXT: ldr w9, [sp, #8]3577; NONEON-NOSVE-NEXT: cmp w9, #313578; NONEON-NOSVE-NEXT: csel w9, w9, w8, hi3579; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #40]3580; NONEON-NOSVE-NEXT: ldr w9, [sp, #4]3581; NONEON-NOSVE-NEXT: cmp w9, #313582; NONEON-NOSVE-NEXT: csel w10, w9, w8, hi3583; NONEON-NOSVE-NEXT: ldr w9, [sp]3584; NONEON-NOSVE-NEXT: cmp w9, #313585; NONEON-NOSVE-NEXT: csel w8, w9, w8, hi3586; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #32]3587; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3588; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3589; NONEON-NOSVE-NEXT: add sp, sp, #643590; NONEON-NOSVE-NEXT: ret3591 %op1 = load <8 x i32>, ptr %a3592 %res = call <8 x i32> @llvm.umax.v8i32(<8 x i32> %op1, <8 x i32> splat(i32 31))3593 store <8 x i32> %res, ptr %a3594 ret void3595}3596 3597define void @umax_v4i64(ptr %a) {3598; CHECK-LABEL: umax_v4i64:3599; CHECK: // %bb.0:3600; CHECK-NEXT: ldp q0, q1, [x0]3601; CHECK-NEXT: umax z0.d, z0.d, #633602; CHECK-NEXT: umax z1.d, z1.d, #633603; CHECK-NEXT: stp q0, q1, [x0]3604; CHECK-NEXT: ret3605;3606; NONEON-NOSVE-LABEL: umax_v4i64:3607; NONEON-NOSVE: // %bb.0:3608; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3609; NONEON-NOSVE-NEXT: mov w8, #63 // =0x3f3610; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3611; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643612; NONEON-NOSVE-NEXT: ldr x9, [sp, #24]3613; NONEON-NOSVE-NEXT: cmp x9, #633614; NONEON-NOSVE-NEXT: csel x10, x9, x8, hi3615; NONEON-NOSVE-NEXT: ldr x9, [sp, #16]3616; NONEON-NOSVE-NEXT: cmp x9, #633617; NONEON-NOSVE-NEXT: csel x9, x9, x8, hi3618; NONEON-NOSVE-NEXT: stp x9, x10, [sp, #48]3619; NONEON-NOSVE-NEXT: ldr x9, [sp, #8]3620; NONEON-NOSVE-NEXT: cmp x9, #633621; NONEON-NOSVE-NEXT: csel x10, x9, x8, hi3622; NONEON-NOSVE-NEXT: ldr x9, [sp]3623; NONEON-NOSVE-NEXT: cmp x9, #633624; NONEON-NOSVE-NEXT: csel x8, x9, x8, hi3625; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #32]3626; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3627; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3628; NONEON-NOSVE-NEXT: add sp, sp, #643629; NONEON-NOSVE-NEXT: ret3630 %op1 = load <4 x i64>, ptr %a3631 %res = call <4 x i64> @llvm.umax.v4i64(<4 x i64> %op1, <4 x i64> splat(i64 63))3632 store <4 x i64> %res, ptr %a3633 ret void3634}3635 3636;3637; UMIN3638;3639 3640define void @umin_v32i8(ptr %a) {3641; CHECK-LABEL: umin_v32i8:3642; CHECK: // %bb.0:3643; CHECK-NEXT: ldp q0, q1, [x0]3644; CHECK-NEXT: umin z0.b, z0.b, #73645; CHECK-NEXT: umin z1.b, z1.b, #73646; CHECK-NEXT: stp q0, q1, [x0]3647; CHECK-NEXT: ret3648;3649; NONEON-NOSVE-LABEL: umin_v32i8:3650; NONEON-NOSVE: // %bb.0:3651; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3652; NONEON-NOSVE-NEXT: mov w8, #7 // =0x73653; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3654; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643655; NONEON-NOSVE-NEXT: ldrb w9, [sp, #31]3656; NONEON-NOSVE-NEXT: cmp w9, #73657; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3658; NONEON-NOSVE-NEXT: strb w9, [sp, #63]3659; NONEON-NOSVE-NEXT: ldrb w9, [sp, #30]3660; NONEON-NOSVE-NEXT: cmp w9, #73661; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3662; NONEON-NOSVE-NEXT: strb w9, [sp, #62]3663; NONEON-NOSVE-NEXT: ldrb w9, [sp, #29]3664; NONEON-NOSVE-NEXT: cmp w9, #73665; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3666; NONEON-NOSVE-NEXT: strb w9, [sp, #61]3667; NONEON-NOSVE-NEXT: ldrb w9, [sp, #28]3668; NONEON-NOSVE-NEXT: cmp w9, #73669; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3670; NONEON-NOSVE-NEXT: strb w9, [sp, #60]3671; NONEON-NOSVE-NEXT: ldrb w9, [sp, #27]3672; NONEON-NOSVE-NEXT: cmp w9, #73673; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3674; NONEON-NOSVE-NEXT: strb w9, [sp, #59]3675; NONEON-NOSVE-NEXT: ldrb w9, [sp, #26]3676; NONEON-NOSVE-NEXT: cmp w9, #73677; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3678; NONEON-NOSVE-NEXT: strb w9, [sp, #58]3679; NONEON-NOSVE-NEXT: ldrb w9, [sp, #25]3680; NONEON-NOSVE-NEXT: cmp w9, #73681; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3682; NONEON-NOSVE-NEXT: strb w9, [sp, #57]3683; NONEON-NOSVE-NEXT: ldrb w9, [sp, #24]3684; NONEON-NOSVE-NEXT: cmp w9, #73685; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3686; NONEON-NOSVE-NEXT: strb w9, [sp, #56]3687; NONEON-NOSVE-NEXT: ldrb w9, [sp, #23]3688; NONEON-NOSVE-NEXT: cmp w9, #73689; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3690; NONEON-NOSVE-NEXT: strb w9, [sp, #55]3691; NONEON-NOSVE-NEXT: ldrb w9, [sp, #22]3692; NONEON-NOSVE-NEXT: cmp w9, #73693; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3694; NONEON-NOSVE-NEXT: strb w9, [sp, #54]3695; NONEON-NOSVE-NEXT: ldrb w9, [sp, #21]3696; NONEON-NOSVE-NEXT: cmp w9, #73697; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3698; NONEON-NOSVE-NEXT: strb w9, [sp, #53]3699; NONEON-NOSVE-NEXT: ldrb w9, [sp, #20]3700; NONEON-NOSVE-NEXT: cmp w9, #73701; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3702; NONEON-NOSVE-NEXT: strb w9, [sp, #52]3703; NONEON-NOSVE-NEXT: ldrb w9, [sp, #19]3704; NONEON-NOSVE-NEXT: cmp w9, #73705; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3706; NONEON-NOSVE-NEXT: strb w9, [sp, #51]3707; NONEON-NOSVE-NEXT: ldrb w9, [sp, #18]3708; NONEON-NOSVE-NEXT: cmp w9, #73709; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3710; NONEON-NOSVE-NEXT: strb w9, [sp, #50]3711; NONEON-NOSVE-NEXT: ldrb w9, [sp, #17]3712; NONEON-NOSVE-NEXT: cmp w9, #73713; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3714; NONEON-NOSVE-NEXT: strb w9, [sp, #49]3715; NONEON-NOSVE-NEXT: ldrb w9, [sp, #16]3716; NONEON-NOSVE-NEXT: cmp w9, #73717; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3718; NONEON-NOSVE-NEXT: strb w9, [sp, #48]3719; NONEON-NOSVE-NEXT: ldrb w9, [sp, #15]3720; NONEON-NOSVE-NEXT: cmp w9, #73721; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3722; NONEON-NOSVE-NEXT: strb w9, [sp, #47]3723; NONEON-NOSVE-NEXT: ldrb w9, [sp, #14]3724; NONEON-NOSVE-NEXT: cmp w9, #73725; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3726; NONEON-NOSVE-NEXT: strb w9, [sp, #46]3727; NONEON-NOSVE-NEXT: ldrb w9, [sp, #13]3728; NONEON-NOSVE-NEXT: cmp w9, #73729; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3730; NONEON-NOSVE-NEXT: strb w9, [sp, #45]3731; NONEON-NOSVE-NEXT: ldrb w9, [sp, #12]3732; NONEON-NOSVE-NEXT: cmp w9, #73733; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3734; NONEON-NOSVE-NEXT: strb w9, [sp, #44]3735; NONEON-NOSVE-NEXT: ldrb w9, [sp, #11]3736; NONEON-NOSVE-NEXT: cmp w9, #73737; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3738; NONEON-NOSVE-NEXT: strb w9, [sp, #43]3739; NONEON-NOSVE-NEXT: ldrb w9, [sp, #10]3740; NONEON-NOSVE-NEXT: cmp w9, #73741; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3742; NONEON-NOSVE-NEXT: strb w9, [sp, #42]3743; NONEON-NOSVE-NEXT: ldrb w9, [sp, #9]3744; NONEON-NOSVE-NEXT: cmp w9, #73745; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3746; NONEON-NOSVE-NEXT: strb w9, [sp, #41]3747; NONEON-NOSVE-NEXT: ldrb w9, [sp, #8]3748; NONEON-NOSVE-NEXT: cmp w9, #73749; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3750; NONEON-NOSVE-NEXT: strb w9, [sp, #40]3751; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]3752; NONEON-NOSVE-NEXT: cmp w9, #73753; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3754; NONEON-NOSVE-NEXT: strb w9, [sp, #39]3755; NONEON-NOSVE-NEXT: ldrb w9, [sp, #6]3756; NONEON-NOSVE-NEXT: cmp w9, #73757; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3758; NONEON-NOSVE-NEXT: strb w9, [sp, #38]3759; NONEON-NOSVE-NEXT: ldrb w9, [sp, #5]3760; NONEON-NOSVE-NEXT: cmp w9, #73761; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3762; NONEON-NOSVE-NEXT: strb w9, [sp, #37]3763; NONEON-NOSVE-NEXT: ldrb w9, [sp, #4]3764; NONEON-NOSVE-NEXT: cmp w9, #73765; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3766; NONEON-NOSVE-NEXT: strb w9, [sp, #36]3767; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]3768; NONEON-NOSVE-NEXT: cmp w9, #73769; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3770; NONEON-NOSVE-NEXT: strb w9, [sp, #35]3771; NONEON-NOSVE-NEXT: ldrb w9, [sp, #2]3772; NONEON-NOSVE-NEXT: cmp w9, #73773; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3774; NONEON-NOSVE-NEXT: strb w9, [sp, #34]3775; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1]3776; NONEON-NOSVE-NEXT: cmp w9, #73777; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3778; NONEON-NOSVE-NEXT: strb w9, [sp, #33]3779; NONEON-NOSVE-NEXT: ldrb w9, [sp]3780; NONEON-NOSVE-NEXT: cmp w9, #73781; NONEON-NOSVE-NEXT: csel w8, w9, w8, lo3782; NONEON-NOSVE-NEXT: strb w8, [sp, #32]3783; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3784; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3785; NONEON-NOSVE-NEXT: add sp, sp, #643786; NONEON-NOSVE-NEXT: ret3787 %op1 = load <32 x i8>, ptr %a3788 %res = call <32 x i8> @llvm.umin.v32i8(<32 x i8> %op1, <32 x i8> splat(i8 7))3789 store <32 x i8> %res, ptr %a3790 ret void3791}3792 3793define void @umin_v16i16(ptr %a) {3794; CHECK-LABEL: umin_v16i16:3795; CHECK: // %bb.0:3796; CHECK-NEXT: ldp q0, q1, [x0]3797; CHECK-NEXT: umin z0.h, z0.h, #153798; CHECK-NEXT: umin z1.h, z1.h, #153799; CHECK-NEXT: stp q0, q1, [x0]3800; CHECK-NEXT: ret3801;3802; NONEON-NOSVE-LABEL: umin_v16i16:3803; NONEON-NOSVE: // %bb.0:3804; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3805; NONEON-NOSVE-NEXT: mov w8, #15 // =0xf3806; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3807; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643808; NONEON-NOSVE-NEXT: ldrh w9, [sp, #30]3809; NONEON-NOSVE-NEXT: cmp w9, #153810; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3811; NONEON-NOSVE-NEXT: strh w9, [sp, #62]3812; NONEON-NOSVE-NEXT: ldrh w9, [sp, #28]3813; NONEON-NOSVE-NEXT: cmp w9, #153814; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3815; NONEON-NOSVE-NEXT: strh w9, [sp, #60]3816; NONEON-NOSVE-NEXT: ldrh w9, [sp, #26]3817; NONEON-NOSVE-NEXT: cmp w9, #153818; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3819; NONEON-NOSVE-NEXT: strh w9, [sp, #58]3820; NONEON-NOSVE-NEXT: ldrh w9, [sp, #24]3821; NONEON-NOSVE-NEXT: cmp w9, #153822; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3823; NONEON-NOSVE-NEXT: strh w9, [sp, #56]3824; NONEON-NOSVE-NEXT: ldrh w9, [sp, #22]3825; NONEON-NOSVE-NEXT: cmp w9, #153826; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3827; NONEON-NOSVE-NEXT: strh w9, [sp, #54]3828; NONEON-NOSVE-NEXT: ldrh w9, [sp, #20]3829; NONEON-NOSVE-NEXT: cmp w9, #153830; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3831; NONEON-NOSVE-NEXT: strh w9, [sp, #52]3832; NONEON-NOSVE-NEXT: ldrh w9, [sp, #18]3833; NONEON-NOSVE-NEXT: cmp w9, #153834; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3835; NONEON-NOSVE-NEXT: strh w9, [sp, #50]3836; NONEON-NOSVE-NEXT: ldrh w9, [sp, #16]3837; NONEON-NOSVE-NEXT: cmp w9, #153838; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3839; NONEON-NOSVE-NEXT: strh w9, [sp, #48]3840; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]3841; NONEON-NOSVE-NEXT: cmp w9, #153842; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3843; NONEON-NOSVE-NEXT: strh w9, [sp, #46]3844; NONEON-NOSVE-NEXT: ldrh w9, [sp, #12]3845; NONEON-NOSVE-NEXT: cmp w9, #153846; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3847; NONEON-NOSVE-NEXT: strh w9, [sp, #44]3848; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]3849; NONEON-NOSVE-NEXT: cmp w9, #153850; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3851; NONEON-NOSVE-NEXT: strh w9, [sp, #42]3852; NONEON-NOSVE-NEXT: ldrh w9, [sp, #8]3853; NONEON-NOSVE-NEXT: cmp w9, #153854; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3855; NONEON-NOSVE-NEXT: strh w9, [sp, #40]3856; NONEON-NOSVE-NEXT: ldrh w9, [sp, #6]3857; NONEON-NOSVE-NEXT: cmp w9, #153858; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3859; NONEON-NOSVE-NEXT: strh w9, [sp, #38]3860; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]3861; NONEON-NOSVE-NEXT: cmp w9, #153862; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3863; NONEON-NOSVE-NEXT: strh w9, [sp, #36]3864; NONEON-NOSVE-NEXT: ldrh w9, [sp, #2]3865; NONEON-NOSVE-NEXT: cmp w9, #153866; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3867; NONEON-NOSVE-NEXT: strh w9, [sp, #34]3868; NONEON-NOSVE-NEXT: ldrh w9, [sp]3869; NONEON-NOSVE-NEXT: cmp w9, #153870; NONEON-NOSVE-NEXT: csel w8, w9, w8, lo3871; NONEON-NOSVE-NEXT: strh w8, [sp, #32]3872; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3873; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3874; NONEON-NOSVE-NEXT: add sp, sp, #643875; NONEON-NOSVE-NEXT: ret3876 %op1 = load <16 x i16>, ptr %a3877 %res = call <16 x i16> @llvm.umin.v16i16(<16 x i16> %op1, <16 x i16> splat(i16 15))3878 store <16 x i16> %res, ptr %a3879 ret void3880}3881 3882define void @umin_v8i32(ptr %a) {3883; CHECK-LABEL: umin_v8i32:3884; CHECK: // %bb.0:3885; CHECK-NEXT: ldp q0, q1, [x0]3886; CHECK-NEXT: umin z0.s, z0.s, #313887; CHECK-NEXT: umin z1.s, z1.s, #313888; CHECK-NEXT: stp q0, q1, [x0]3889; CHECK-NEXT: ret3890;3891; NONEON-NOSVE-LABEL: umin_v8i32:3892; NONEON-NOSVE: // %bb.0:3893; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3894; NONEON-NOSVE-NEXT: mov w8, #31 // =0x1f3895; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3896; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643897; NONEON-NOSVE-NEXT: ldr w9, [sp, #28]3898; NONEON-NOSVE-NEXT: cmp w9, #313899; NONEON-NOSVE-NEXT: csel w10, w9, w8, lo3900; NONEON-NOSVE-NEXT: ldr w9, [sp, #24]3901; NONEON-NOSVE-NEXT: cmp w9, #313902; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3903; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #56]3904; NONEON-NOSVE-NEXT: ldr w9, [sp, #20]3905; NONEON-NOSVE-NEXT: cmp w9, #313906; NONEON-NOSVE-NEXT: csel w10, w9, w8, lo3907; NONEON-NOSVE-NEXT: ldr w9, [sp, #16]3908; NONEON-NOSVE-NEXT: cmp w9, #313909; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3910; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #48]3911; NONEON-NOSVE-NEXT: ldr w9, [sp, #12]3912; NONEON-NOSVE-NEXT: cmp w9, #313913; NONEON-NOSVE-NEXT: csel w10, w9, w8, lo3914; NONEON-NOSVE-NEXT: ldr w9, [sp, #8]3915; NONEON-NOSVE-NEXT: cmp w9, #313916; NONEON-NOSVE-NEXT: csel w9, w9, w8, lo3917; NONEON-NOSVE-NEXT: stp w9, w10, [sp, #40]3918; NONEON-NOSVE-NEXT: ldr w9, [sp, #4]3919; NONEON-NOSVE-NEXT: cmp w9, #313920; NONEON-NOSVE-NEXT: csel w10, w9, w8, lo3921; NONEON-NOSVE-NEXT: ldr w9, [sp]3922; NONEON-NOSVE-NEXT: cmp w9, #313923; NONEON-NOSVE-NEXT: csel w8, w9, w8, lo3924; NONEON-NOSVE-NEXT: stp w8, w10, [sp, #32]3925; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3926; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3927; NONEON-NOSVE-NEXT: add sp, sp, #643928; NONEON-NOSVE-NEXT: ret3929 %op1 = load <8 x i32>, ptr %a3930 %res = call <8 x i32> @llvm.umin.v8i32(<8 x i32> %op1, <8 x i32> splat(i32 31))3931 store <8 x i32> %res, ptr %a3932 ret void3933}3934 3935define void @umin_v4i64(ptr %a) {3936; CHECK-LABEL: umin_v4i64:3937; CHECK: // %bb.0:3938; CHECK-NEXT: ldp q0, q1, [x0]3939; CHECK-NEXT: umin z0.d, z0.d, #633940; CHECK-NEXT: umin z1.d, z1.d, #633941; CHECK-NEXT: stp q0, q1, [x0]3942; CHECK-NEXT: ret3943;3944; NONEON-NOSVE-LABEL: umin_v4i64:3945; NONEON-NOSVE: // %bb.0:3946; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3947; NONEON-NOSVE-NEXT: mov w8, #63 // =0x3f3948; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3949; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643950; NONEON-NOSVE-NEXT: ldr x9, [sp, #24]3951; NONEON-NOSVE-NEXT: cmp x9, #633952; NONEON-NOSVE-NEXT: csel x10, x9, x8, lo3953; NONEON-NOSVE-NEXT: ldr x9, [sp, #16]3954; NONEON-NOSVE-NEXT: cmp x9, #633955; NONEON-NOSVE-NEXT: csel x9, x9, x8, lo3956; NONEON-NOSVE-NEXT: stp x9, x10, [sp, #48]3957; NONEON-NOSVE-NEXT: ldr x9, [sp, #8]3958; NONEON-NOSVE-NEXT: cmp x9, #633959; NONEON-NOSVE-NEXT: csel x10, x9, x8, lo3960; NONEON-NOSVE-NEXT: ldr x9, [sp]3961; NONEON-NOSVE-NEXT: cmp x9, #633962; NONEON-NOSVE-NEXT: csel x8, x9, x8, lo3963; NONEON-NOSVE-NEXT: stp x8, x10, [sp, #32]3964; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]3965; NONEON-NOSVE-NEXT: stp q0, q1, [x0]3966; NONEON-NOSVE-NEXT: add sp, sp, #643967; NONEON-NOSVE-NEXT: ret3968 %op1 = load <4 x i64>, ptr %a3969 %res = call <4 x i64> @llvm.umin.v4i64(<4 x i64> %op1, <4 x i64> splat(i64 63))3970 store <4 x i64> %res, ptr %a3971 ret void3972}3973 3974;3975; XOR3976;3977 3978define void @xor_v32i8(ptr %a) {3979; CHECK-LABEL: xor_v32i8:3980; CHECK: // %bb.0:3981; CHECK-NEXT: ldp q0, q1, [x0]3982; CHECK-NEXT: eor z0.b, z0.b, #0x73983; CHECK-NEXT: eor z1.b, z1.b, #0x73984; CHECK-NEXT: stp q0, q1, [x0]3985; CHECK-NEXT: ret3986;3987; NONEON-NOSVE-LABEL: xor_v32i8:3988; NONEON-NOSVE: // %bb.0:3989; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]3990; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!3991; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 643992; NONEON-NOSVE-NEXT: ldrb w8, [sp, #31]3993; NONEON-NOSVE-NEXT: eor w8, w8, #0x73994; NONEON-NOSVE-NEXT: strb w8, [sp, #63]3995; NONEON-NOSVE-NEXT: ldrb w8, [sp, #30]3996; NONEON-NOSVE-NEXT: eor w8, w8, #0x73997; NONEON-NOSVE-NEXT: strb w8, [sp, #62]3998; NONEON-NOSVE-NEXT: ldrb w8, [sp, #29]3999; NONEON-NOSVE-NEXT: eor w8, w8, #0x74000; NONEON-NOSVE-NEXT: strb w8, [sp, #61]4001; NONEON-NOSVE-NEXT: ldrb w8, [sp, #28]4002; NONEON-NOSVE-NEXT: eor w8, w8, #0x74003; NONEON-NOSVE-NEXT: strb w8, [sp, #60]4004; NONEON-NOSVE-NEXT: ldrb w8, [sp, #27]4005; NONEON-NOSVE-NEXT: eor w8, w8, #0x74006; NONEON-NOSVE-NEXT: strb w8, [sp, #59]4007; NONEON-NOSVE-NEXT: ldrb w8, [sp, #26]4008; NONEON-NOSVE-NEXT: eor w8, w8, #0x74009; NONEON-NOSVE-NEXT: strb w8, [sp, #58]4010; NONEON-NOSVE-NEXT: ldrb w8, [sp, #25]4011; NONEON-NOSVE-NEXT: eor w8, w8, #0x74012; NONEON-NOSVE-NEXT: strb w8, [sp, #57]4013; NONEON-NOSVE-NEXT: ldrb w8, [sp, #24]4014; NONEON-NOSVE-NEXT: eor w8, w8, #0x74015; NONEON-NOSVE-NEXT: strb w8, [sp, #56]4016; NONEON-NOSVE-NEXT: ldrb w8, [sp, #23]4017; NONEON-NOSVE-NEXT: eor w8, w8, #0x74018; NONEON-NOSVE-NEXT: strb w8, [sp, #55]4019; NONEON-NOSVE-NEXT: ldrb w8, [sp, #22]4020; NONEON-NOSVE-NEXT: eor w8, w8, #0x74021; NONEON-NOSVE-NEXT: strb w8, [sp, #54]4022; NONEON-NOSVE-NEXT: ldrb w8, [sp, #21]4023; NONEON-NOSVE-NEXT: eor w8, w8, #0x74024; NONEON-NOSVE-NEXT: strb w8, [sp, #53]4025; NONEON-NOSVE-NEXT: ldrb w8, [sp, #20]4026; NONEON-NOSVE-NEXT: eor w8, w8, #0x74027; NONEON-NOSVE-NEXT: strb w8, [sp, #52]4028; NONEON-NOSVE-NEXT: ldrb w8, [sp, #19]4029; NONEON-NOSVE-NEXT: eor w8, w8, #0x74030; NONEON-NOSVE-NEXT: strb w8, [sp, #51]4031; NONEON-NOSVE-NEXT: ldrb w8, [sp, #18]4032; NONEON-NOSVE-NEXT: eor w8, w8, #0x74033; NONEON-NOSVE-NEXT: strb w8, [sp, #50]4034; NONEON-NOSVE-NEXT: ldrb w8, [sp, #17]4035; NONEON-NOSVE-NEXT: eor w8, w8, #0x74036; NONEON-NOSVE-NEXT: strb w8, [sp, #49]4037; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]4038; NONEON-NOSVE-NEXT: eor w8, w8, #0x74039; NONEON-NOSVE-NEXT: strb w8, [sp, #48]4040; NONEON-NOSVE-NEXT: ldrb w8, [sp, #15]4041; NONEON-NOSVE-NEXT: eor w8, w8, #0x74042; NONEON-NOSVE-NEXT: strb w8, [sp, #47]4043; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]4044; NONEON-NOSVE-NEXT: eor w8, w8, #0x74045; NONEON-NOSVE-NEXT: strb w8, [sp, #46]4046; NONEON-NOSVE-NEXT: ldrb w8, [sp, #13]4047; NONEON-NOSVE-NEXT: eor w8, w8, #0x74048; NONEON-NOSVE-NEXT: strb w8, [sp, #45]4049; NONEON-NOSVE-NEXT: ldrb w8, [sp, #12]4050; NONEON-NOSVE-NEXT: eor w8, w8, #0x74051; NONEON-NOSVE-NEXT: strb w8, [sp, #44]4052; NONEON-NOSVE-NEXT: ldrb w8, [sp, #11]4053; NONEON-NOSVE-NEXT: eor w8, w8, #0x74054; NONEON-NOSVE-NEXT: strb w8, [sp, #43]4055; NONEON-NOSVE-NEXT: ldrb w8, [sp, #10]4056; NONEON-NOSVE-NEXT: eor w8, w8, #0x74057; NONEON-NOSVE-NEXT: strb w8, [sp, #42]4058; NONEON-NOSVE-NEXT: ldrb w8, [sp, #9]4059; NONEON-NOSVE-NEXT: eor w8, w8, #0x74060; NONEON-NOSVE-NEXT: strb w8, [sp, #41]4061; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8]4062; NONEON-NOSVE-NEXT: eor w8, w8, #0x74063; NONEON-NOSVE-NEXT: strb w8, [sp, #40]4064; NONEON-NOSVE-NEXT: ldrb w8, [sp, #7]4065; NONEON-NOSVE-NEXT: eor w8, w8, #0x74066; NONEON-NOSVE-NEXT: strb w8, [sp, #39]4067; NONEON-NOSVE-NEXT: ldrb w8, [sp, #6]4068; NONEON-NOSVE-NEXT: eor w8, w8, #0x74069; NONEON-NOSVE-NEXT: strb w8, [sp, #38]4070; NONEON-NOSVE-NEXT: ldrb w8, [sp, #5]4071; NONEON-NOSVE-NEXT: eor w8, w8, #0x74072; NONEON-NOSVE-NEXT: strb w8, [sp, #37]4073; NONEON-NOSVE-NEXT: ldrb w8, [sp, #4]4074; NONEON-NOSVE-NEXT: eor w8, w8, #0x74075; NONEON-NOSVE-NEXT: strb w8, [sp, #36]4076; NONEON-NOSVE-NEXT: ldrb w8, [sp, #3]4077; NONEON-NOSVE-NEXT: eor w8, w8, #0x74078; NONEON-NOSVE-NEXT: strb w8, [sp, #35]4079; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]4080; NONEON-NOSVE-NEXT: eor w8, w8, #0x74081; NONEON-NOSVE-NEXT: strb w8, [sp, #34]4082; NONEON-NOSVE-NEXT: ldrb w8, [sp, #1]4083; NONEON-NOSVE-NEXT: eor w8, w8, #0x74084; NONEON-NOSVE-NEXT: strb w8, [sp, #33]4085; NONEON-NOSVE-NEXT: ldrb w8, [sp]4086; NONEON-NOSVE-NEXT: eor w8, w8, #0x74087; NONEON-NOSVE-NEXT: strb w8, [sp, #32]4088; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]4089; NONEON-NOSVE-NEXT: stp q0, q1, [x0]4090; NONEON-NOSVE-NEXT: add sp, sp, #644091; NONEON-NOSVE-NEXT: ret4092 %op1 = load <32 x i8>, ptr %a4093 %res = xor <32 x i8> %op1, splat(i8 7)4094 store <32 x i8> %res, ptr %a4095 ret void4096}4097 4098define void @xor_v16i16(ptr %a) {4099; CHECK-LABEL: xor_v16i16:4100; CHECK: // %bb.0:4101; CHECK-NEXT: ldp q0, q1, [x0]4102; CHECK-NEXT: eor z0.h, z0.h, #0xf4103; CHECK-NEXT: eor z1.h, z1.h, #0xf4104; CHECK-NEXT: stp q0, q1, [x0]4105; CHECK-NEXT: ret4106;4107; NONEON-NOSVE-LABEL: xor_v16i16:4108; NONEON-NOSVE: // %bb.0:4109; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]4110; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!4111; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 644112; NONEON-NOSVE-NEXT: ldrh w8, [sp, #30]4113; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4114; NONEON-NOSVE-NEXT: strh w8, [sp, #62]4115; NONEON-NOSVE-NEXT: ldrh w8, [sp, #28]4116; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4117; NONEON-NOSVE-NEXT: strh w8, [sp, #60]4118; NONEON-NOSVE-NEXT: ldrh w8, [sp, #26]4119; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4120; NONEON-NOSVE-NEXT: strh w8, [sp, #58]4121; NONEON-NOSVE-NEXT: ldrh w8, [sp, #24]4122; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4123; NONEON-NOSVE-NEXT: strh w8, [sp, #56]4124; NONEON-NOSVE-NEXT: ldrh w8, [sp, #22]4125; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4126; NONEON-NOSVE-NEXT: strh w8, [sp, #54]4127; NONEON-NOSVE-NEXT: ldrh w8, [sp, #20]4128; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4129; NONEON-NOSVE-NEXT: strh w8, [sp, #52]4130; NONEON-NOSVE-NEXT: ldrh w8, [sp, #18]4131; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4132; NONEON-NOSVE-NEXT: strh w8, [sp, #50]4133; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]4134; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4135; NONEON-NOSVE-NEXT: strh w8, [sp, #48]4136; NONEON-NOSVE-NEXT: ldrh w8, [sp, #14]4137; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4138; NONEON-NOSVE-NEXT: strh w8, [sp, #46]4139; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]4140; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4141; NONEON-NOSVE-NEXT: strh w8, [sp, #44]4142; NONEON-NOSVE-NEXT: ldrh w8, [sp, #10]4143; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4144; NONEON-NOSVE-NEXT: strh w8, [sp, #42]4145; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8]4146; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4147; NONEON-NOSVE-NEXT: strh w8, [sp, #40]4148; NONEON-NOSVE-NEXT: ldrh w8, [sp, #6]4149; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4150; NONEON-NOSVE-NEXT: strh w8, [sp, #38]4151; NONEON-NOSVE-NEXT: ldrh w8, [sp, #4]4152; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4153; NONEON-NOSVE-NEXT: strh w8, [sp, #36]4154; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]4155; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4156; NONEON-NOSVE-NEXT: strh w8, [sp, #34]4157; NONEON-NOSVE-NEXT: ldrh w8, [sp]4158; NONEON-NOSVE-NEXT: eor w8, w8, #0xf4159; NONEON-NOSVE-NEXT: strh w8, [sp, #32]4160; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]4161; NONEON-NOSVE-NEXT: stp q0, q1, [x0]4162; NONEON-NOSVE-NEXT: add sp, sp, #644163; NONEON-NOSVE-NEXT: ret4164 %op1 = load <16 x i16>, ptr %a4165 %res = xor <16 x i16> %op1, splat(i16 15)4166 store <16 x i16> %res, ptr %a4167 ret void4168}4169 4170define void @xor_v8i32(ptr %a) {4171; CHECK-LABEL: xor_v8i32:4172; CHECK: // %bb.0:4173; CHECK-NEXT: ldp q0, q1, [x0]4174; CHECK-NEXT: eor z0.s, z0.s, #0x1f4175; CHECK-NEXT: eor z1.s, z1.s, #0x1f4176; CHECK-NEXT: stp q0, q1, [x0]4177; CHECK-NEXT: ret4178;4179; NONEON-NOSVE-LABEL: xor_v8i32:4180; NONEON-NOSVE: // %bb.0:4181; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]4182; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!4183; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 644184; NONEON-NOSVE-NEXT: ldr w8, [sp, #28]4185; NONEON-NOSVE-NEXT: eor w9, w8, #0x1f4186; NONEON-NOSVE-NEXT: ldr w8, [sp, #24]4187; NONEON-NOSVE-NEXT: eor w8, w8, #0x1f4188; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #56]4189; NONEON-NOSVE-NEXT: ldr w8, [sp, #20]4190; NONEON-NOSVE-NEXT: eor w9, w8, #0x1f4191; NONEON-NOSVE-NEXT: ldr w8, [sp, #16]4192; NONEON-NOSVE-NEXT: eor w8, w8, #0x1f4193; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #48]4194; NONEON-NOSVE-NEXT: ldr w8, [sp, #12]4195; NONEON-NOSVE-NEXT: eor w9, w8, #0x1f4196; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]4197; NONEON-NOSVE-NEXT: eor w8, w8, #0x1f4198; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #40]4199; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]4200; NONEON-NOSVE-NEXT: eor w9, w8, #0x1f4201; NONEON-NOSVE-NEXT: ldr w8, [sp]4202; NONEON-NOSVE-NEXT: eor w8, w8, #0x1f4203; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #32]4204; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]4205; NONEON-NOSVE-NEXT: stp q0, q1, [x0]4206; NONEON-NOSVE-NEXT: add sp, sp, #644207; NONEON-NOSVE-NEXT: ret4208 %op1 = load <8 x i32>, ptr %a4209 %res = xor <8 x i32> %op1, splat(i32 31)4210 store <8 x i32> %res, ptr %a4211 ret void4212}4213 4214define void @xor_v4i64(ptr %a) {4215; CHECK-LABEL: xor_v4i64:4216; CHECK: // %bb.0:4217; CHECK-NEXT: ldp q0, q1, [x0]4218; CHECK-NEXT: eor z0.d, z0.d, #0x3f4219; CHECK-NEXT: eor z1.d, z1.d, #0x3f4220; CHECK-NEXT: stp q0, q1, [x0]4221; CHECK-NEXT: ret4222;4223; NONEON-NOSVE-LABEL: xor_v4i64:4224; NONEON-NOSVE: // %bb.0:4225; NONEON-NOSVE-NEXT: ldp q1, q0, [x0]4226; NONEON-NOSVE-NEXT: stp q1, q0, [sp, #-64]!4227; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 644228; NONEON-NOSVE-NEXT: ldr x8, [sp, #24]4229; NONEON-NOSVE-NEXT: eor x9, x8, #0x3f4230; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]4231; NONEON-NOSVE-NEXT: eor x8, x8, #0x3f4232; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #48]4233; NONEON-NOSVE-NEXT: ldr x8, [sp, #8]4234; NONEON-NOSVE-NEXT: eor x9, x8, #0x3f4235; NONEON-NOSVE-NEXT: ldr x8, [sp]4236; NONEON-NOSVE-NEXT: eor x8, x8, #0x3f4237; NONEON-NOSVE-NEXT: stp x8, x9, [sp, #32]4238; NONEON-NOSVE-NEXT: ldp q0, q1, [sp, #32]4239; NONEON-NOSVE-NEXT: stp q0, q1, [x0]4240; NONEON-NOSVE-NEXT: add sp, sp, #644241; NONEON-NOSVE-NEXT: ret4242 %op1 = load <4 x i64>, ptr %a4243 %res = xor <4 x i64> %op1, splat(i64 63)4244 store <4 x i64> %res, ptr %a4245 ret void4246}4247 4248declare <32 x i8> @llvm.smax.v32i8(<32 x i8>, <32 x i8>)4249declare <16 x i16> @llvm.smax.v16i16(<16 x i16>, <16 x i16>)4250declare <8 x i32> @llvm.smax.v8i32(<8 x i32>, <8 x i32>)4251declare <4 x i64> @llvm.smax.v4i64(<4 x i64>, <4 x i64>)4252 4253declare <32 x i8> @llvm.smin.v32i8(<32 x i8>, <32 x i8>)4254declare <16 x i16> @llvm.smin.v16i16(<16 x i16>, <16 x i16>)4255declare <8 x i32> @llvm.smin.v8i32(<8 x i32>, <8 x i32>)4256declare <4 x i64> @llvm.smin.v4i64(<4 x i64>, <4 x i64>)4257 4258declare <32 x i8> @llvm.umax.v32i8(<32 x i8>, <32 x i8>)4259declare <16 x i16> @llvm.umax.v16i16(<16 x i16>, <16 x i16>)4260declare <8 x i32> @llvm.umax.v8i32(<8 x i32>, <8 x i32>)4261declare <4 x i64> @llvm.umax.v4i64(<4 x i64>, <4 x i64>)4262 4263declare <32 x i8> @llvm.umin.v32i8(<32 x i8>, <32 x i8>)4264declare <16 x i16> @llvm.umin.v16i16(<16 x i16>, <16 x i16>)4265declare <8 x i32> @llvm.umin.v8i32(<8 x i32>, <8 x i32>)4266declare <4 x i64> @llvm.umin.v4i64(<4 x i64>, <4 x i64>)4267