brintos

brintos / llvm-project-archived public Read only

0
0
Text · 72.3 KiB · 8e1d61b Raw
1921 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve2 -force-streaming-compatible  < %s | FileCheck %s --check-prefixes=CHECK3; RUN: llc -mattr=+sme -force-streaming  < %s | FileCheck %s --check-prefixes=CHECK4; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE5 6target triple = "aarch64-unknown-linux-gnu"7 8;9; SDIV10;11 12define <4 x i8> @sdiv_v4i8(<4 x i8> %op1, <4 x i8> %op2) {13; CHECK-LABEL: sdiv_v4i8:14; CHECK:       // %bb.0:15; CHECK-NEXT:    ptrue p0.h, vl416; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z117; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z018; CHECK-NEXT:    sxtb z0.h, p0/m, z0.h19; CHECK-NEXT:    sxtb z1.h, p0/m, z1.h20; CHECK-NEXT:    ptrue p0.s, vl421; CHECK-NEXT:    sunpklo z1.s, z1.h22; CHECK-NEXT:    sunpklo z0.s, z0.h23; CHECK-NEXT:    sdiv z0.s, p0/m, z0.s, z1.s24; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h25; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z026; CHECK-NEXT:    ret27;28; NONEON-NOSVE-LABEL: sdiv_v4i8:29; NONEON-NOSVE:       // %bb.0:30; NONEON-NOSVE-NEXT:    sub sp, sp, #3231; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 3232; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]33; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #22]34; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #14]35; NONEON-NOSVE-NEXT:    ldrsb w10, [sp, #12]36; NONEON-NOSVE-NEXT:    ldrsb w11, [sp, #10]37; NONEON-NOSVE-NEXT:    ldrsb w12, [sp, #8]38; NONEON-NOSVE-NEXT:    sdiv w8, w9, w839; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #20]40; NONEON-NOSVE-NEXT:    sdiv w9, w10, w941; NONEON-NOSVE-NEXT:    ldrsb w10, [sp, #18]42; NONEON-NOSVE-NEXT:    strh w8, [sp, #30]43; NONEON-NOSVE-NEXT:    sdiv w10, w11, w1044; NONEON-NOSVE-NEXT:    ldrsb w11, [sp, #16]45; NONEON-NOSVE-NEXT:    strh w9, [sp, #28]46; NONEON-NOSVE-NEXT:    sdiv w11, w12, w1147; NONEON-NOSVE-NEXT:    strh w10, [sp, #26]48; NONEON-NOSVE-NEXT:    strh w11, [sp, #24]49; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]50; NONEON-NOSVE-NEXT:    add sp, sp, #3251; NONEON-NOSVE-NEXT:    ret52  %res = sdiv <4 x i8> %op1, %op253  ret <4 x i8> %res54}55 56define <8 x i8> @sdiv_v8i8(<8 x i8> %op1, <8 x i8> %op2) {57; CHECK-LABEL: sdiv_v8i8:58; CHECK:       // %bb.0:59; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z160; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z061; CHECK-NEXT:    ptrue p0.s, vl462; CHECK-NEXT:    sunpklo z1.h, z1.b63; CHECK-NEXT:    sunpklo z0.h, z0.b64; CHECK-NEXT:    sunpklo z2.s, z1.h65; CHECK-NEXT:    sunpklo z3.s, z0.h66; CHECK-NEXT:    ext z1.b, z1.b, z1.b, #867; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #868; CHECK-NEXT:    sunpklo z1.s, z1.h69; CHECK-NEXT:    sunpklo z0.s, z0.h70; CHECK-NEXT:    sdivr z2.s, p0/m, z2.s, z3.s71; CHECK-NEXT:    sdiv z0.s, p0/m, z0.s, z1.s72; CHECK-NEXT:    ptrue p0.h, vl473; CHECK-NEXT:    uzp1 z1.h, z2.h, z2.h74; CHECK-NEXT:    uzp1 z2.h, z0.h, z0.h75; CHECK-NEXT:    splice z0.h, p0, { z1.h, z2.h }76; CHECK-NEXT:    uzp1 z0.b, z0.b, z0.b77; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z078; CHECK-NEXT:    ret79;80; NONEON-NOSVE-LABEL: sdiv_v8i8:81; NONEON-NOSVE:       // %bb.0:82; NONEON-NOSVE-NEXT:    sub sp, sp, #3283; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 3284; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]85; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #23]86; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #15]87; NONEON-NOSVE-NEXT:    sdiv w8, w9, w888; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #14]89; NONEON-NOSVE-NEXT:    strb w8, [sp, #31]90; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #22]91; NONEON-NOSVE-NEXT:    sdiv w8, w9, w892; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #13]93; NONEON-NOSVE-NEXT:    strb w8, [sp, #30]94; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #21]95; NONEON-NOSVE-NEXT:    sdiv w8, w9, w896; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #12]97; NONEON-NOSVE-NEXT:    strb w8, [sp, #29]98; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #20]99; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8100; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #11]101; NONEON-NOSVE-NEXT:    strb w8, [sp, #28]102; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #19]103; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8104; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #10]105; NONEON-NOSVE-NEXT:    strb w8, [sp, #27]106; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #18]107; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8108; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #9]109; NONEON-NOSVE-NEXT:    strb w8, [sp, #26]110; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #17]111; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8112; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #8]113; NONEON-NOSVE-NEXT:    strb w8, [sp, #25]114; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #16]115; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8116; NONEON-NOSVE-NEXT:    strb w8, [sp, #24]117; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]118; NONEON-NOSVE-NEXT:    add sp, sp, #32119; NONEON-NOSVE-NEXT:    ret120  %res = sdiv <8 x i8> %op1, %op2121  ret <8 x i8> %res122}123 124define <16 x i8> @sdiv_v16i8(<16 x i8> %op1, <16 x i8> %op2) {125; CHECK-LABEL: sdiv_v16i8:126; CHECK:       // %bb.0:127; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1128; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0129; CHECK-NEXT:    sunpklo z2.h, z1.b130; CHECK-NEXT:    sunpklo z3.h, z0.b131; CHECK-NEXT:    ptrue p0.s, vl4132; CHECK-NEXT:    ext z1.b, z1.b, z1.b, #8133; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #8134; CHECK-NEXT:    sunpklo z4.s, z2.h135; CHECK-NEXT:    sunpklo z5.s, z3.h136; CHECK-NEXT:    ext z2.b, z2.b, z2.b, #8137; CHECK-NEXT:    ext z3.b, z3.b, z3.b, #8138; CHECK-NEXT:    sunpklo z1.h, z1.b139; CHECK-NEXT:    sunpklo z0.h, z0.b140; CHECK-NEXT:    sunpklo z2.s, z2.h141; CHECK-NEXT:    sunpklo z3.s, z3.h142; CHECK-NEXT:    sdivr z4.s, p0/m, z4.s, z5.s143; CHECK-NEXT:    sunpklo z5.s, z0.h144; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #8145; CHECK-NEXT:    sunpklo z0.s, z0.h146; CHECK-NEXT:    sdivr z2.s, p0/m, z2.s, z3.s147; CHECK-NEXT:    sunpklo z3.s, z1.h148; CHECK-NEXT:    ext z1.b, z1.b, z1.b, #8149; CHECK-NEXT:    sunpklo z1.s, z1.h150; CHECK-NEXT:    sdivr z3.s, p0/m, z3.s, z5.s151; CHECK-NEXT:    uzp1 z4.h, z4.h, z4.h152; CHECK-NEXT:    uzp1 z5.h, z2.h, z2.h153; CHECK-NEXT:    sdiv z0.s, p0/m, z0.s, z1.s154; CHECK-NEXT:    ptrue p0.h, vl4155; CHECK-NEXT:    uzp1 z1.h, z3.h, z3.h156; CHECK-NEXT:    uzp1 z2.h, z0.h, z0.h157; CHECK-NEXT:    splice z0.h, p0, { z4.h, z5.h }158; CHECK-NEXT:    splice z1.h, p0, { z1.h, z2.h }159; CHECK-NEXT:    ptrue p0.b, vl8160; CHECK-NEXT:    uzp1 z2.b, z0.b, z0.b161; CHECK-NEXT:    uzp1 z3.b, z1.b, z1.b162; CHECK-NEXT:    splice z0.b, p0, { z2.b, z3.b }163; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0164; CHECK-NEXT:    ret165;166; NONEON-NOSVE-LABEL: sdiv_v16i8:167; NONEON-NOSVE:       // %bb.0:168; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!169; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48170; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #31]171; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #15]172; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8173; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #14]174; NONEON-NOSVE-NEXT:    strb w8, [sp, #47]175; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #30]176; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8177; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #13]178; NONEON-NOSVE-NEXT:    strb w8, [sp, #46]179; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #29]180; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8181; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #12]182; NONEON-NOSVE-NEXT:    strb w8, [sp, #45]183; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #28]184; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8185; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #11]186; NONEON-NOSVE-NEXT:    strb w8, [sp, #44]187; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #27]188; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8189; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #10]190; NONEON-NOSVE-NEXT:    strb w8, [sp, #43]191; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #26]192; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8193; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #9]194; NONEON-NOSVE-NEXT:    strb w8, [sp, #42]195; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #25]196; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8197; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #8]198; NONEON-NOSVE-NEXT:    strb w8, [sp, #41]199; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #24]200; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8201; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #7]202; NONEON-NOSVE-NEXT:    strb w8, [sp, #40]203; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #23]204; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8205; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #6]206; NONEON-NOSVE-NEXT:    strb w8, [sp, #39]207; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #22]208; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8209; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #5]210; NONEON-NOSVE-NEXT:    strb w8, [sp, #38]211; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #21]212; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8213; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #4]214; NONEON-NOSVE-NEXT:    strb w8, [sp, #37]215; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #20]216; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8217; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #3]218; NONEON-NOSVE-NEXT:    strb w8, [sp, #36]219; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #19]220; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8221; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #2]222; NONEON-NOSVE-NEXT:    strb w8, [sp, #35]223; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #18]224; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8225; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #1]226; NONEON-NOSVE-NEXT:    strb w8, [sp, #34]227; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #17]228; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8229; NONEON-NOSVE-NEXT:    ldrsb w9, [sp]230; NONEON-NOSVE-NEXT:    strb w8, [sp, #33]231; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #16]232; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8233; NONEON-NOSVE-NEXT:    strb w8, [sp, #32]234; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]235; NONEON-NOSVE-NEXT:    add sp, sp, #48236; NONEON-NOSVE-NEXT:    ret237  %res = sdiv <16 x i8> %op1, %op2238  ret <16 x i8> %res239}240 241define void @sdiv_v32i8(ptr %a, ptr %b) {242; CHECK-LABEL: sdiv_v32i8:243; CHECK:       // %bb.0:244; CHECK-NEXT:    ldp q6, q3, [x1]245; CHECK-NEXT:    ptrue p0.s, vl4246; CHECK-NEXT:    ldr q2, [x0, #16]247; CHECK-NEXT:    sunpklo z1.h, z3.b248; CHECK-NEXT:    sunpklo z4.h, z2.b249; CHECK-NEXT:    ext z3.b, z3.b, z3.b, #8250; CHECK-NEXT:    ext z2.b, z2.b, z2.b, #8251; CHECK-NEXT:    sunpklo z7.h, z6.b252; CHECK-NEXT:    ext z6.b, z6.b, z6.b, #8253; CHECK-NEXT:    sunpklo z3.h, z3.b254; CHECK-NEXT:    sunpklo z0.s, z1.h255; CHECK-NEXT:    sunpklo z5.s, z4.h256; CHECK-NEXT:    ext z1.b, z1.b, z1.b, #8257; CHECK-NEXT:    ext z4.b, z4.b, z4.b, #8258; CHECK-NEXT:    sunpklo z17.s, z7.h259; CHECK-NEXT:    ext z7.b, z7.b, z7.b, #8260; CHECK-NEXT:    sunpklo z6.h, z6.b261; CHECK-NEXT:    sunpklo z1.s, z1.h262; CHECK-NEXT:    sunpklo z4.s, z4.h263; CHECK-NEXT:    sunpklo z7.s, z7.h264; CHECK-NEXT:    sdivr z0.s, p0/m, z0.s, z5.s265; CHECK-NEXT:    sdivr z1.s, p0/m, z1.s, z4.s266; CHECK-NEXT:    sunpklo z4.h, z2.b267; CHECK-NEXT:    sunpklo z2.s, z3.h268; CHECK-NEXT:    ext z3.b, z3.b, z3.b, #8269; CHECK-NEXT:    sunpklo z5.s, z4.h270; CHECK-NEXT:    ext z4.b, z4.b, z4.b, #8271; CHECK-NEXT:    sunpklo z3.s, z3.h272; CHECK-NEXT:    sunpklo z4.s, z4.h273; CHECK-NEXT:    sdivr z2.s, p0/m, z2.s, z5.s274; CHECK-NEXT:    ldr q5, [x0]275; CHECK-NEXT:    sunpklo z16.h, z5.b276; CHECK-NEXT:    ext z5.b, z5.b, z5.b, #8277; CHECK-NEXT:    sunpklo z5.h, z5.b278; CHECK-NEXT:    sunpklo z18.s, z16.h279; CHECK-NEXT:    ext z16.b, z16.b, z16.b, #8280; CHECK-NEXT:    sunpklo z16.s, z16.h281; CHECK-NEXT:    sdivr z17.s, p0/m, z17.s, z18.s282; CHECK-NEXT:    sunpklo z18.s, z5.h283; CHECK-NEXT:    ext z5.b, z5.b, z5.b, #8284; CHECK-NEXT:    sunpklo z5.s, z5.h285; CHECK-NEXT:    sdivr z7.s, p0/m, z7.s, z16.s286; CHECK-NEXT:    sunpklo z16.s, z6.h287; CHECK-NEXT:    ext z6.b, z6.b, z6.b, #8288; CHECK-NEXT:    sunpklo z6.s, z6.h289; CHECK-NEXT:    uzp1 z20.h, z17.h, z17.h290; CHECK-NEXT:    sdivr z16.s, p0/m, z16.s, z18.s291; CHECK-NEXT:    uzp1 z18.h, z0.h, z0.h292; CHECK-NEXT:    uzp1 z19.h, z1.h, z1.h293; CHECK-NEXT:    uzp1 z21.h, z7.h, z7.h294; CHECK-NEXT:    sdiv z5.s, p0/m, z5.s, z6.s295; CHECK-NEXT:    uzp1 z0.h, z16.h, z16.h296; CHECK-NEXT:    sdivr z3.s, p0/m, z3.s, z4.s297; CHECK-NEXT:    ptrue p0.h, vl4298; CHECK-NEXT:    uzp1 z1.h, z5.h, z5.h299; CHECK-NEXT:    uzp1 z4.h, z2.h, z2.h300; CHECK-NEXT:    splice z2.h, p0, { z20.h, z21.h }301; CHECK-NEXT:    splice z0.h, p0, { z0.h, z1.h }302; CHECK-NEXT:    uzp1 z5.h, z3.h, z3.h303; CHECK-NEXT:    splice z3.h, p0, { z18.h, z19.h }304; CHECK-NEXT:    splice z1.h, p0, { z4.h, z5.h }305; CHECK-NEXT:    uzp1 z4.b, z2.b, z2.b306; CHECK-NEXT:    ptrue p0.b, vl8307; CHECK-NEXT:    uzp1 z2.b, z3.b, z3.b308; CHECK-NEXT:    uzp1 z5.b, z0.b, z0.b309; CHECK-NEXT:    uzp1 z3.b, z1.b, z1.b310; CHECK-NEXT:    splice z0.b, p0, { z4.b, z5.b }311; CHECK-NEXT:    splice z1.b, p0, { z2.b, z3.b }312; CHECK-NEXT:    stp q0, q1, [x0]313; CHECK-NEXT:    ret314;315; NONEON-NOSVE-LABEL: sdiv_v32i8:316; NONEON-NOSVE:       // %bb.0:317; NONEON-NOSVE-NEXT:    sub sp, sp, #96318; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96319; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]320; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]321; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]322; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]323; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #63]324; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #47]325; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8326; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #46]327; NONEON-NOSVE-NEXT:    strb w8, [sp, #95]328; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #62]329; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8330; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #45]331; NONEON-NOSVE-NEXT:    strb w8, [sp, #94]332; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #61]333; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8334; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #44]335; NONEON-NOSVE-NEXT:    strb w8, [sp, #93]336; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #60]337; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8338; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #43]339; NONEON-NOSVE-NEXT:    strb w8, [sp, #92]340; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #59]341; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8342; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #42]343; NONEON-NOSVE-NEXT:    strb w8, [sp, #91]344; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #58]345; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8346; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #41]347; NONEON-NOSVE-NEXT:    strb w8, [sp, #90]348; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #57]349; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8350; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #40]351; NONEON-NOSVE-NEXT:    strb w8, [sp, #89]352; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #56]353; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8354; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #39]355; NONEON-NOSVE-NEXT:    strb w8, [sp, #88]356; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #55]357; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8358; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #38]359; NONEON-NOSVE-NEXT:    strb w8, [sp, #87]360; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #54]361; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8362; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #37]363; NONEON-NOSVE-NEXT:    strb w8, [sp, #86]364; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #53]365; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8366; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #36]367; NONEON-NOSVE-NEXT:    strb w8, [sp, #85]368; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #52]369; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8370; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #35]371; NONEON-NOSVE-NEXT:    strb w8, [sp, #84]372; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #51]373; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8374; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #34]375; NONEON-NOSVE-NEXT:    strb w8, [sp, #83]376; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #50]377; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8378; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #33]379; NONEON-NOSVE-NEXT:    strb w8, [sp, #82]380; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #49]381; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8382; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #32]383; NONEON-NOSVE-NEXT:    strb w8, [sp, #81]384; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #48]385; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8386; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #15]387; NONEON-NOSVE-NEXT:    strb w8, [sp, #80]388; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #31]389; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8390; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #14]391; NONEON-NOSVE-NEXT:    strb w8, [sp, #79]392; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #30]393; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8394; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #13]395; NONEON-NOSVE-NEXT:    strb w8, [sp, #78]396; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #29]397; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8398; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #12]399; NONEON-NOSVE-NEXT:    strb w8, [sp, #77]400; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #28]401; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8402; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #11]403; NONEON-NOSVE-NEXT:    strb w8, [sp, #76]404; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #27]405; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8406; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #10]407; NONEON-NOSVE-NEXT:    strb w8, [sp, #75]408; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #26]409; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8410; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #9]411; NONEON-NOSVE-NEXT:    strb w8, [sp, #74]412; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #25]413; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8414; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #8]415; NONEON-NOSVE-NEXT:    strb w8, [sp, #73]416; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #24]417; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8418; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #7]419; NONEON-NOSVE-NEXT:    strb w8, [sp, #72]420; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #23]421; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8422; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #6]423; NONEON-NOSVE-NEXT:    strb w8, [sp, #71]424; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #22]425; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8426; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #5]427; NONEON-NOSVE-NEXT:    strb w8, [sp, #70]428; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #21]429; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8430; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #4]431; NONEON-NOSVE-NEXT:    strb w8, [sp, #69]432; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #20]433; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8434; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #3]435; NONEON-NOSVE-NEXT:    strb w8, [sp, #68]436; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #19]437; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8438; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #2]439; NONEON-NOSVE-NEXT:    strb w8, [sp, #67]440; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #18]441; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8442; NONEON-NOSVE-NEXT:    ldrsb w9, [sp, #1]443; NONEON-NOSVE-NEXT:    strb w8, [sp, #66]444; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #17]445; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8446; NONEON-NOSVE-NEXT:    ldrsb w9, [sp]447; NONEON-NOSVE-NEXT:    strb w8, [sp, #65]448; NONEON-NOSVE-NEXT:    ldrsb w8, [sp, #16]449; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8450; NONEON-NOSVE-NEXT:    strb w8, [sp, #64]451; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]452; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]453; NONEON-NOSVE-NEXT:    add sp, sp, #96454; NONEON-NOSVE-NEXT:    ret455  %op1 = load <32 x i8>, ptr %a456  %op2 = load <32 x i8>, ptr %b457  %res = sdiv <32 x i8> %op1, %op2458  store <32 x i8> %res, ptr %a459  ret void460}461 462define <2 x i16> @sdiv_v2i16(<2 x i16> %op1, <2 x i16> %op2) {463; CHECK-LABEL: sdiv_v2i16:464; CHECK:       // %bb.0:465; CHECK-NEXT:    ptrue p0.s, vl2466; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1467; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0468; CHECK-NEXT:    sxth z1.s, p0/m, z1.s469; CHECK-NEXT:    sxth z0.s, p0/m, z0.s470; CHECK-NEXT:    sdiv z0.s, p0/m, z0.s, z1.s471; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0472; CHECK-NEXT:    ret473;474; NONEON-NOSVE-LABEL: sdiv_v2i16:475; NONEON-NOSVE:       // %bb.0:476; NONEON-NOSVE-NEXT:    sub sp, sp, #32477; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32478; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]479; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #20]480; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #12]481; NONEON-NOSVE-NEXT:    ldrsh w10, [sp, #8]482; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8483; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #16]484; NONEON-NOSVE-NEXT:    sdiv w9, w10, w9485; NONEON-NOSVE-NEXT:    stp w9, w8, [sp, #24]486; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]487; NONEON-NOSVE-NEXT:    add sp, sp, #32488; NONEON-NOSVE-NEXT:    ret489  %res = sdiv <2 x i16> %op1, %op2490  ret <2 x i16> %res491}492 493define <4 x i16> @sdiv_v4i16(<4 x i16> %op1, <4 x i16> %op2) {494; CHECK-LABEL: sdiv_v4i16:495; CHECK:       // %bb.0:496; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1497; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0498; CHECK-NEXT:    ptrue p0.s, vl4499; CHECK-NEXT:    sunpklo z1.s, z1.h500; CHECK-NEXT:    sunpklo z0.s, z0.h501; CHECK-NEXT:    sdiv z0.s, p0/m, z0.s, z1.s502; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h503; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0504; CHECK-NEXT:    ret505;506; NONEON-NOSVE-LABEL: sdiv_v4i16:507; NONEON-NOSVE:       // %bb.0:508; NONEON-NOSVE-NEXT:    sub sp, sp, #32509; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32510; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]511; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #22]512; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #14]513; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8514; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #12]515; NONEON-NOSVE-NEXT:    strh w8, [sp, #30]516; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #20]517; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8518; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #10]519; NONEON-NOSVE-NEXT:    strh w8, [sp, #28]520; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #18]521; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8522; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #8]523; NONEON-NOSVE-NEXT:    strh w8, [sp, #26]524; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #16]525; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8526; NONEON-NOSVE-NEXT:    strh w8, [sp, #24]527; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]528; NONEON-NOSVE-NEXT:    add sp, sp, #32529; NONEON-NOSVE-NEXT:    ret530  %res = sdiv <4 x i16> %op1, %op2531  ret <4 x i16> %res532}533 534define <8 x i16> @sdiv_v8i16(<8 x i16> %op1, <8 x i16> %op2) {535; CHECK-LABEL: sdiv_v8i16:536; CHECK:       // %bb.0:537; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1538; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0539; CHECK-NEXT:    sunpklo z2.s, z1.h540; CHECK-NEXT:    sunpklo z3.s, z0.h541; CHECK-NEXT:    ptrue p0.s, vl4542; CHECK-NEXT:    ext z1.b, z1.b, z1.b, #8543; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #8544; CHECK-NEXT:    sunpklo z1.s, z1.h545; CHECK-NEXT:    sunpklo z0.s, z0.h546; CHECK-NEXT:    sdivr z2.s, p0/m, z2.s, z3.s547; CHECK-NEXT:    sdiv z0.s, p0/m, z0.s, z1.s548; CHECK-NEXT:    ptrue p0.h, vl4549; CHECK-NEXT:    uzp1 z1.h, z2.h, z2.h550; CHECK-NEXT:    uzp1 z2.h, z0.h, z0.h551; CHECK-NEXT:    splice z0.h, p0, { z1.h, z2.h }552; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0553; CHECK-NEXT:    ret554;555; NONEON-NOSVE-LABEL: sdiv_v8i16:556; NONEON-NOSVE:       // %bb.0:557; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!558; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48559; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #30]560; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #14]561; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8562; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #12]563; NONEON-NOSVE-NEXT:    strh w8, [sp, #46]564; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #28]565; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8566; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #10]567; NONEON-NOSVE-NEXT:    strh w8, [sp, #44]568; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #26]569; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8570; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #8]571; NONEON-NOSVE-NEXT:    strh w8, [sp, #42]572; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #24]573; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8574; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #6]575; NONEON-NOSVE-NEXT:    strh w8, [sp, #40]576; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #22]577; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8578; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #4]579; NONEON-NOSVE-NEXT:    strh w8, [sp, #38]580; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #20]581; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8582; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #2]583; NONEON-NOSVE-NEXT:    strh w8, [sp, #36]584; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #18]585; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8586; NONEON-NOSVE-NEXT:    ldrsh w9, [sp]587; NONEON-NOSVE-NEXT:    strh w8, [sp, #34]588; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #16]589; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8590; NONEON-NOSVE-NEXT:    strh w8, [sp, #32]591; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]592; NONEON-NOSVE-NEXT:    add sp, sp, #48593; NONEON-NOSVE-NEXT:    ret594  %res = sdiv <8 x i16> %op1, %op2595  ret <8 x i16> %res596}597 598define void @sdiv_v16i16(ptr %a, ptr %b) {599; CHECK-LABEL: sdiv_v16i16:600; CHECK:       // %bb.0:601; CHECK-NEXT:    ldp q4, q1, [x1]602; CHECK-NEXT:    ptrue p0.s, vl4603; CHECK-NEXT:    ldr q0, [x0, #16]604; CHECK-NEXT:    sunpklo z2.s, z1.h605; CHECK-NEXT:    sunpklo z3.s, z0.h606; CHECK-NEXT:    sunpklo z5.s, z4.h607; CHECK-NEXT:    ext z4.b, z4.b, z4.b, #8608; CHECK-NEXT:    ext z1.b, z1.b, z1.b, #8609; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #8610; CHECK-NEXT:    sdivr z2.s, p0/m, z2.s, z3.s611; CHECK-NEXT:    ldr q3, [x0]612; CHECK-NEXT:    sunpklo z4.s, z4.h613; CHECK-NEXT:    sunpklo z1.s, z1.h614; CHECK-NEXT:    sunpklo z0.s, z0.h615; CHECK-NEXT:    sunpklo z6.s, z3.h616; CHECK-NEXT:    ext z3.b, z3.b, z3.b, #8617; CHECK-NEXT:    sunpklo z3.s, z3.h618; CHECK-NEXT:    sdivr z5.s, p0/m, z5.s, z6.s619; CHECK-NEXT:    sdiv z3.s, p0/m, z3.s, z4.s620; CHECK-NEXT:    uzp1 z4.h, z5.h, z5.h621; CHECK-NEXT:    sdiv z0.s, p0/m, z0.s, z1.s622; CHECK-NEXT:    uzp1 z1.h, z2.h, z2.h623; CHECK-NEXT:    ptrue p0.h, vl4624; CHECK-NEXT:    uzp1 z5.h, z3.h, z3.h625; CHECK-NEXT:    uzp1 z2.h, z0.h, z0.h626; CHECK-NEXT:    splice z0.h, p0, { z4.h, z5.h }627; CHECK-NEXT:    splice z1.h, p0, { z1.h, z2.h }628; CHECK-NEXT:    stp q0, q1, [x0]629; CHECK-NEXT:    ret630;631; NONEON-NOSVE-LABEL: sdiv_v16i16:632; NONEON-NOSVE:       // %bb.0:633; NONEON-NOSVE-NEXT:    sub sp, sp, #96634; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96635; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]636; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]637; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]638; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]639; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #62]640; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #46]641; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8642; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #44]643; NONEON-NOSVE-NEXT:    strh w8, [sp, #94]644; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #60]645; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8646; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #42]647; NONEON-NOSVE-NEXT:    strh w8, [sp, #92]648; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #58]649; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8650; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #40]651; NONEON-NOSVE-NEXT:    strh w8, [sp, #90]652; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #56]653; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8654; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #38]655; NONEON-NOSVE-NEXT:    strh w8, [sp, #88]656; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #54]657; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8658; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #36]659; NONEON-NOSVE-NEXT:    strh w8, [sp, #86]660; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #52]661; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8662; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #34]663; NONEON-NOSVE-NEXT:    strh w8, [sp, #84]664; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #50]665; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8666; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #32]667; NONEON-NOSVE-NEXT:    strh w8, [sp, #82]668; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #48]669; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8670; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #14]671; NONEON-NOSVE-NEXT:    strh w8, [sp, #80]672; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #30]673; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8674; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #12]675; NONEON-NOSVE-NEXT:    strh w8, [sp, #78]676; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #28]677; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8678; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #10]679; NONEON-NOSVE-NEXT:    strh w8, [sp, #76]680; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #26]681; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8682; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #8]683; NONEON-NOSVE-NEXT:    strh w8, [sp, #74]684; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #24]685; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8686; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #6]687; NONEON-NOSVE-NEXT:    strh w8, [sp, #72]688; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #22]689; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8690; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #4]691; NONEON-NOSVE-NEXT:    strh w8, [sp, #70]692; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #20]693; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8694; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #2]695; NONEON-NOSVE-NEXT:    strh w8, [sp, #68]696; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #18]697; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8698; NONEON-NOSVE-NEXT:    ldrsh w9, [sp]699; NONEON-NOSVE-NEXT:    strh w8, [sp, #66]700; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #16]701; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8702; NONEON-NOSVE-NEXT:    strh w8, [sp, #64]703; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]704; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]705; NONEON-NOSVE-NEXT:    add sp, sp, #96706; NONEON-NOSVE-NEXT:    ret707  %op1 = load <16 x i16>, ptr %a708  %op2 = load <16 x i16>, ptr %b709  %res = sdiv <16 x i16> %op1, %op2710  store <16 x i16> %res, ptr %a711  ret void712}713 714define <2 x i32> @sdiv_v2i32(<2 x i32> %op1, <2 x i32> %op2) {715; CHECK-LABEL: sdiv_v2i32:716; CHECK:       // %bb.0:717; CHECK-NEXT:    ptrue p0.s, vl2718; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0719; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1720; CHECK-NEXT:    sdiv z0.s, p0/m, z0.s, z1.s721; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0722; CHECK-NEXT:    ret723;724; NONEON-NOSVE-LABEL: sdiv_v2i32:725; NONEON-NOSVE:       // %bb.0:726; NONEON-NOSVE-NEXT:    sub sp, sp, #32727; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32728; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]729; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]730; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]731; NONEON-NOSVE-NEXT:    sdiv w11, w10, w8732; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]733; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8734; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #24]735; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]736; NONEON-NOSVE-NEXT:    add sp, sp, #32737; NONEON-NOSVE-NEXT:    ret738  %res = sdiv <2 x i32> %op1, %op2739  ret <2 x i32> %res740}741 742define <4 x i32> @sdiv_v4i32(<4 x i32> %op1, <4 x i32> %op2) {743; CHECK-LABEL: sdiv_v4i32:744; CHECK:       // %bb.0:745; CHECK-NEXT:    ptrue p0.s, vl4746; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0747; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1748; CHECK-NEXT:    sdiv z0.s, p0/m, z0.s, z1.s749; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0750; CHECK-NEXT:    ret751;752; NONEON-NOSVE-LABEL: sdiv_v4i32:753; NONEON-NOSVE:       // %bb.0:754; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!755; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48756; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]757; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]758; NONEON-NOSVE-NEXT:    sdiv w11, w10, w8759; NONEON-NOSVE-NEXT:    ldr w8, [sp, #24]760; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8761; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp]762; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #40]763; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]764; NONEON-NOSVE-NEXT:    sdiv w11, w10, w8765; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]766; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8767; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #32]768; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]769; NONEON-NOSVE-NEXT:    add sp, sp, #48770; NONEON-NOSVE-NEXT:    ret771  %res = sdiv <4 x i32> %op1, %op2772  ret <4 x i32> %res773}774 775define void @sdiv_v8i32(ptr %a, ptr %b)  {776; CHECK-LABEL: sdiv_v8i32:777; CHECK:       // %bb.0:778; CHECK-NEXT:    ldp q0, q3, [x1]779; CHECK-NEXT:    ptrue p0.s, vl4780; CHECK-NEXT:    ldp q1, q2, [x0]781; CHECK-NEXT:    sdivr z0.s, p0/m, z0.s, z1.s782; CHECK-NEXT:    sdiv z2.s, p0/m, z2.s, z3.s783; CHECK-NEXT:    stp q0, q2, [x0]784; CHECK-NEXT:    ret785;786; NONEON-NOSVE-LABEL: sdiv_v8i32:787; NONEON-NOSVE:       // %bb.0:788; NONEON-NOSVE-NEXT:    sub sp, sp, #96789; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96790; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]791; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]792; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]793; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]794; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #40]795; NONEON-NOSVE-NEXT:    ldr w8, [sp, #60]796; NONEON-NOSVE-NEXT:    sdiv w11, w10, w8797; NONEON-NOSVE-NEXT:    ldr w8, [sp, #56]798; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8799; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #32]800; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #88]801; NONEON-NOSVE-NEXT:    ldr w8, [sp, #52]802; NONEON-NOSVE-NEXT:    sdiv w11, w10, w8803; NONEON-NOSVE-NEXT:    ldr w8, [sp, #48]804; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8805; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]806; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #80]807; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]808; NONEON-NOSVE-NEXT:    sdiv w11, w10, w8809; NONEON-NOSVE-NEXT:    ldr w8, [sp, #24]810; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8811; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp]812; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #72]813; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]814; NONEON-NOSVE-NEXT:    sdiv w11, w10, w8815; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]816; NONEON-NOSVE-NEXT:    sdiv w8, w9, w8817; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #64]818; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]819; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]820; NONEON-NOSVE-NEXT:    add sp, sp, #96821; NONEON-NOSVE-NEXT:    ret822  %op1 = load <8 x i32>, ptr %a823  %op2 = load <8 x i32>, ptr %b824  %res = sdiv <8 x i32> %op1, %op2825  store <8 x i32> %res, ptr %a826  ret void827}828 829define <1 x i64> @sdiv_v1i64(<1 x i64> %op1, <1 x i64> %op2) {830; CHECK-LABEL: sdiv_v1i64:831; CHECK:       // %bb.0:832; CHECK-NEXT:    ptrue p0.d, vl1833; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0834; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1835; CHECK-NEXT:    sdiv z0.d, p0/m, z0.d, z1.d836; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0837; CHECK-NEXT:    ret838;839; NONEON-NOSVE-LABEL: sdiv_v1i64:840; NONEON-NOSVE:       // %bb.0:841; NONEON-NOSVE-NEXT:    sub sp, sp, #16842; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 16843; NONEON-NOSVE-NEXT:    fmov x8, d1844; NONEON-NOSVE-NEXT:    fmov x9, d0845; NONEON-NOSVE-NEXT:    sdiv x8, x9, x8846; NONEON-NOSVE-NEXT:    str x8, [sp, #8]847; NONEON-NOSVE-NEXT:    ldr d0, [sp, #8]848; NONEON-NOSVE-NEXT:    add sp, sp, #16849; NONEON-NOSVE-NEXT:    ret850  %res = sdiv <1 x i64> %op1, %op2851  ret <1 x i64> %res852}853 854define <2 x i64> @sdiv_v2i64(<2 x i64> %op1, <2 x i64> %op2) {855; CHECK-LABEL: sdiv_v2i64:856; CHECK:       // %bb.0:857; CHECK-NEXT:    ptrue p0.d, vl2858; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0859; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1860; CHECK-NEXT:    sdiv z0.d, p0/m, z0.d, z1.d861; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0862; CHECK-NEXT:    ret863;864; NONEON-NOSVE-LABEL: sdiv_v2i64:865; NONEON-NOSVE:       // %bb.0:866; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!867; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48868; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp]869; NONEON-NOSVE-NEXT:    ldr x8, [sp, #24]870; NONEON-NOSVE-NEXT:    sdiv x11, x10, x8871; NONEON-NOSVE-NEXT:    ldr x8, [sp, #16]872; NONEON-NOSVE-NEXT:    sdiv x8, x9, x8873; NONEON-NOSVE-NEXT:    stp x8, x11, [sp, #32]874; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]875; NONEON-NOSVE-NEXT:    add sp, sp, #48876; NONEON-NOSVE-NEXT:    ret877  %res = sdiv <2 x i64> %op1, %op2878  ret <2 x i64> %res879}880 881define void @sdiv_v4i64(ptr %a, ptr %b)  {882; CHECK-LABEL: sdiv_v4i64:883; CHECK:       // %bb.0:884; CHECK-NEXT:    ldp q0, q3, [x1]885; CHECK-NEXT:    ptrue p0.d, vl2886; CHECK-NEXT:    ldp q1, q2, [x0]887; CHECK-NEXT:    sdivr z0.d, p0/m, z0.d, z1.d888; CHECK-NEXT:    sdiv z2.d, p0/m, z2.d, z3.d889; CHECK-NEXT:    stp q0, q2, [x0]890; CHECK-NEXT:    ret891;892; NONEON-NOSVE-LABEL: sdiv_v4i64:893; NONEON-NOSVE:       // %bb.0:894; NONEON-NOSVE-NEXT:    sub sp, sp, #96895; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96896; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]897; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]898; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]899; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]900; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp, #32]901; NONEON-NOSVE-NEXT:    ldr x8, [sp, #56]902; NONEON-NOSVE-NEXT:    sdiv x11, x10, x8903; NONEON-NOSVE-NEXT:    ldr x8, [sp, #48]904; NONEON-NOSVE-NEXT:    sdiv x8, x9, x8905; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp]906; NONEON-NOSVE-NEXT:    stp x8, x11, [sp, #80]907; NONEON-NOSVE-NEXT:    ldr x8, [sp, #24]908; NONEON-NOSVE-NEXT:    sdiv x11, x10, x8909; NONEON-NOSVE-NEXT:    ldr x8, [sp, #16]910; NONEON-NOSVE-NEXT:    sdiv x8, x9, x8911; NONEON-NOSVE-NEXT:    stp x8, x11, [sp, #64]912; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]913; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]914; NONEON-NOSVE-NEXT:    add sp, sp, #96915; NONEON-NOSVE-NEXT:    ret916  %op1 = load <4 x i64>, ptr %a917  %op2 = load <4 x i64>, ptr %b918  %res = sdiv <4 x i64> %op1, %op2919  store <4 x i64> %res, ptr %a920  ret void921}922 923; UDIV924 925define <4 x i8> @udiv_v4i8(<4 x i8> %op1, <4 x i8> %op2) {926; CHECK-LABEL: udiv_v4i8:927; CHECK:       // %bb.0:928; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1929; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0930; CHECK-NEXT:    ptrue p0.s, vl4931; CHECK-NEXT:    and z0.h, z0.h, #0xff932; CHECK-NEXT:    and z1.h, z1.h, #0xff933; CHECK-NEXT:    uunpklo z1.s, z1.h934; CHECK-NEXT:    uunpklo z0.s, z0.h935; CHECK-NEXT:    udiv z0.s, p0/m, z0.s, z1.s936; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h937; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0938; CHECK-NEXT:    ret939;940; NONEON-NOSVE-LABEL: udiv_v4i8:941; NONEON-NOSVE:       // %bb.0:942; NONEON-NOSVE-NEXT:    sub sp, sp, #32943; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32944; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]945; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]946; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]947; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #12]948; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #10]949; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #8]950; NONEON-NOSVE-NEXT:    udiv w8, w9, w8951; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #20]952; NONEON-NOSVE-NEXT:    udiv w9, w10, w9953; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #18]954; NONEON-NOSVE-NEXT:    strh w8, [sp, #30]955; NONEON-NOSVE-NEXT:    udiv w10, w11, w10956; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #16]957; NONEON-NOSVE-NEXT:    strh w9, [sp, #28]958; NONEON-NOSVE-NEXT:    udiv w11, w12, w11959; NONEON-NOSVE-NEXT:    strh w10, [sp, #26]960; NONEON-NOSVE-NEXT:    strh w11, [sp, #24]961; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]962; NONEON-NOSVE-NEXT:    add sp, sp, #32963; NONEON-NOSVE-NEXT:    ret964  %res = udiv <4 x i8> %op1, %op2965  ret <4 x i8> %res966}967 968define <8 x i8> @udiv_v8i8(<8 x i8> %op1, <8 x i8> %op2) {969; CHECK-LABEL: udiv_v8i8:970; CHECK:       // %bb.0:971; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1972; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0973; CHECK-NEXT:    ptrue p0.s, vl4974; CHECK-NEXT:    uunpklo z1.h, z1.b975; CHECK-NEXT:    uunpklo z0.h, z0.b976; CHECK-NEXT:    uunpklo z2.s, z1.h977; CHECK-NEXT:    uunpklo z3.s, z0.h978; CHECK-NEXT:    ext z1.b, z1.b, z1.b, #8979; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #8980; CHECK-NEXT:    uunpklo z1.s, z1.h981; CHECK-NEXT:    uunpklo z0.s, z0.h982; CHECK-NEXT:    udivr z2.s, p0/m, z2.s, z3.s983; CHECK-NEXT:    udiv z0.s, p0/m, z0.s, z1.s984; CHECK-NEXT:    ptrue p0.h, vl4985; CHECK-NEXT:    uzp1 z1.h, z2.h, z2.h986; CHECK-NEXT:    uzp1 z2.h, z0.h, z0.h987; CHECK-NEXT:    splice z0.h, p0, { z1.h, z2.h }988; CHECK-NEXT:    uzp1 z0.b, z0.b, z0.b989; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0990; CHECK-NEXT:    ret991;992; NONEON-NOSVE-LABEL: udiv_v8i8:993; NONEON-NOSVE:       // %bb.0:994; NONEON-NOSVE-NEXT:    sub sp, sp, #32995; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32996; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]997; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #23]998; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #15]999; NONEON-NOSVE-NEXT:    udiv w8, w9, w81000; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]1001; NONEON-NOSVE-NEXT:    strb w8, [sp, #31]1002; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]1003; NONEON-NOSVE-NEXT:    udiv w8, w9, w81004; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #13]1005; NONEON-NOSVE-NEXT:    strb w8, [sp, #30]1006; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #21]1007; NONEON-NOSVE-NEXT:    udiv w8, w9, w81008; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #12]1009; NONEON-NOSVE-NEXT:    strb w8, [sp, #29]1010; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #20]1011; NONEON-NOSVE-NEXT:    udiv w8, w9, w81012; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #11]1013; NONEON-NOSVE-NEXT:    strb w8, [sp, #28]1014; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #19]1015; NONEON-NOSVE-NEXT:    udiv w8, w9, w81016; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #10]1017; NONEON-NOSVE-NEXT:    strb w8, [sp, #27]1018; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #18]1019; NONEON-NOSVE-NEXT:    udiv w8, w9, w81020; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #9]1021; NONEON-NOSVE-NEXT:    strb w8, [sp, #26]1022; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #17]1023; NONEON-NOSVE-NEXT:    udiv w8, w9, w81024; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]1025; NONEON-NOSVE-NEXT:    strb w8, [sp, #25]1026; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]1027; NONEON-NOSVE-NEXT:    udiv w8, w9, w81028; NONEON-NOSVE-NEXT:    strb w8, [sp, #24]1029; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]1030; NONEON-NOSVE-NEXT:    add sp, sp, #321031; NONEON-NOSVE-NEXT:    ret1032  %res = udiv <8 x i8> %op1, %op21033  ret <8 x i8> %res1034}1035 1036define <16 x i8> @udiv_v16i8(<16 x i8> %op1, <16 x i8> %op2) {1037; CHECK-LABEL: udiv_v16i8:1038; CHECK:       // %bb.0:1039; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z11040; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z01041; CHECK-NEXT:    uunpklo z2.h, z1.b1042; CHECK-NEXT:    uunpklo z3.h, z0.b1043; CHECK-NEXT:    ptrue p0.s, vl41044; CHECK-NEXT:    ext z1.b, z1.b, z1.b, #81045; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #81046; CHECK-NEXT:    uunpklo z4.s, z2.h1047; CHECK-NEXT:    uunpklo z5.s, z3.h1048; CHECK-NEXT:    ext z2.b, z2.b, z2.b, #81049; CHECK-NEXT:    ext z3.b, z3.b, z3.b, #81050; CHECK-NEXT:    uunpklo z1.h, z1.b1051; CHECK-NEXT:    uunpklo z0.h, z0.b1052; CHECK-NEXT:    uunpklo z2.s, z2.h1053; CHECK-NEXT:    uunpklo z3.s, z3.h1054; CHECK-NEXT:    udivr z4.s, p0/m, z4.s, z5.s1055; CHECK-NEXT:    uunpklo z5.s, z0.h1056; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #81057; CHECK-NEXT:    uunpklo z0.s, z0.h1058; CHECK-NEXT:    udivr z2.s, p0/m, z2.s, z3.s1059; CHECK-NEXT:    uunpklo z3.s, z1.h1060; CHECK-NEXT:    ext z1.b, z1.b, z1.b, #81061; CHECK-NEXT:    uunpklo z1.s, z1.h1062; CHECK-NEXT:    udivr z3.s, p0/m, z3.s, z5.s1063; CHECK-NEXT:    uzp1 z4.h, z4.h, z4.h1064; CHECK-NEXT:    uzp1 z5.h, z2.h, z2.h1065; CHECK-NEXT:    udiv z0.s, p0/m, z0.s, z1.s1066; CHECK-NEXT:    ptrue p0.h, vl41067; CHECK-NEXT:    uzp1 z1.h, z3.h, z3.h1068; CHECK-NEXT:    uzp1 z2.h, z0.h, z0.h1069; CHECK-NEXT:    splice z0.h, p0, { z4.h, z5.h }1070; CHECK-NEXT:    splice z1.h, p0, { z1.h, z2.h }1071; CHECK-NEXT:    ptrue p0.b, vl81072; CHECK-NEXT:    uzp1 z2.b, z0.b, z0.b1073; CHECK-NEXT:    uzp1 z3.b, z1.b, z1.b1074; CHECK-NEXT:    splice z0.b, p0, { z2.b, z3.b }1075; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z01076; CHECK-NEXT:    ret1077;1078; NONEON-NOSVE-LABEL: udiv_v16i8:1079; NONEON-NOSVE:       // %bb.0:1080; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!1081; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 481082; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #31]1083; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #15]1084; NONEON-NOSVE-NEXT:    udiv w8, w9, w81085; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]1086; NONEON-NOSVE-NEXT:    strb w8, [sp, #47]1087; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #30]1088; NONEON-NOSVE-NEXT:    udiv w8, w9, w81089; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #13]1090; NONEON-NOSVE-NEXT:    strb w8, [sp, #46]1091; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #29]1092; NONEON-NOSVE-NEXT:    udiv w8, w9, w81093; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #12]1094; NONEON-NOSVE-NEXT:    strb w8, [sp, #45]1095; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #28]1096; NONEON-NOSVE-NEXT:    udiv w8, w9, w81097; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #11]1098; NONEON-NOSVE-NEXT:    strb w8, [sp, #44]1099; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #27]1100; NONEON-NOSVE-NEXT:    udiv w8, w9, w81101; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #10]1102; NONEON-NOSVE-NEXT:    strb w8, [sp, #43]1103; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #26]1104; NONEON-NOSVE-NEXT:    udiv w8, w9, w81105; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #9]1106; NONEON-NOSVE-NEXT:    strb w8, [sp, #42]1107; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #25]1108; NONEON-NOSVE-NEXT:    udiv w8, w9, w81109; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]1110; NONEON-NOSVE-NEXT:    strb w8, [sp, #41]1111; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #24]1112; NONEON-NOSVE-NEXT:    udiv w8, w9, w81113; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #7]1114; NONEON-NOSVE-NEXT:    strb w8, [sp, #40]1115; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #23]1116; NONEON-NOSVE-NEXT:    udiv w8, w9, w81117; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #6]1118; NONEON-NOSVE-NEXT:    strb w8, [sp, #39]1119; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]1120; NONEON-NOSVE-NEXT:    udiv w8, w9, w81121; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #5]1122; NONEON-NOSVE-NEXT:    strb w8, [sp, #38]1123; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #21]1124; NONEON-NOSVE-NEXT:    udiv w8, w9, w81125; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #4]1126; NONEON-NOSVE-NEXT:    strb w8, [sp, #37]1127; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #20]1128; NONEON-NOSVE-NEXT:    udiv w8, w9, w81129; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #3]1130; NONEON-NOSVE-NEXT:    strb w8, [sp, #36]1131; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #19]1132; NONEON-NOSVE-NEXT:    udiv w8, w9, w81133; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #2]1134; NONEON-NOSVE-NEXT:    strb w8, [sp, #35]1135; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #18]1136; NONEON-NOSVE-NEXT:    udiv w8, w9, w81137; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1]1138; NONEON-NOSVE-NEXT:    strb w8, [sp, #34]1139; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #17]1140; NONEON-NOSVE-NEXT:    udiv w8, w9, w81141; NONEON-NOSVE-NEXT:    ldrb w9, [sp]1142; NONEON-NOSVE-NEXT:    strb w8, [sp, #33]1143; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]1144; NONEON-NOSVE-NEXT:    udiv w8, w9, w81145; NONEON-NOSVE-NEXT:    strb w8, [sp, #32]1146; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]1147; NONEON-NOSVE-NEXT:    add sp, sp, #481148; NONEON-NOSVE-NEXT:    ret1149  %res = udiv <16 x i8> %op1, %op21150  ret <16 x i8> %res1151}1152 1153define void @udiv_v32i8(ptr %a, ptr %b) {1154; CHECK-LABEL: udiv_v32i8:1155; CHECK:       // %bb.0:1156; CHECK-NEXT:    ldp q6, q3, [x1]1157; CHECK-NEXT:    ptrue p0.s, vl41158; CHECK-NEXT:    ldr q2, [x0, #16]1159; CHECK-NEXT:    uunpklo z1.h, z3.b1160; CHECK-NEXT:    uunpklo z4.h, z2.b1161; CHECK-NEXT:    ext z3.b, z3.b, z3.b, #81162; CHECK-NEXT:    ext z2.b, z2.b, z2.b, #81163; CHECK-NEXT:    uunpklo z7.h, z6.b1164; CHECK-NEXT:    ext z6.b, z6.b, z6.b, #81165; CHECK-NEXT:    uunpklo z3.h, z3.b1166; CHECK-NEXT:    uunpklo z0.s, z1.h1167; CHECK-NEXT:    uunpklo z5.s, z4.h1168; CHECK-NEXT:    ext z1.b, z1.b, z1.b, #81169; CHECK-NEXT:    ext z4.b, z4.b, z4.b, #81170; CHECK-NEXT:    uunpklo z17.s, z7.h1171; CHECK-NEXT:    ext z7.b, z7.b, z7.b, #81172; CHECK-NEXT:    uunpklo z6.h, z6.b1173; CHECK-NEXT:    uunpklo z1.s, z1.h1174; CHECK-NEXT:    uunpklo z4.s, z4.h1175; CHECK-NEXT:    uunpklo z7.s, z7.h1176; CHECK-NEXT:    udivr z0.s, p0/m, z0.s, z5.s1177; CHECK-NEXT:    udivr z1.s, p0/m, z1.s, z4.s1178; CHECK-NEXT:    uunpklo z4.h, z2.b1179; CHECK-NEXT:    uunpklo z2.s, z3.h1180; CHECK-NEXT:    ext z3.b, z3.b, z3.b, #81181; CHECK-NEXT:    uunpklo z5.s, z4.h1182; CHECK-NEXT:    ext z4.b, z4.b, z4.b, #81183; CHECK-NEXT:    uunpklo z3.s, z3.h1184; CHECK-NEXT:    uunpklo z4.s, z4.h1185; CHECK-NEXT:    udivr z2.s, p0/m, z2.s, z5.s1186; CHECK-NEXT:    ldr q5, [x0]1187; CHECK-NEXT:    uunpklo z16.h, z5.b1188; CHECK-NEXT:    ext z5.b, z5.b, z5.b, #81189; CHECK-NEXT:    uunpklo z5.h, z5.b1190; CHECK-NEXT:    uunpklo z18.s, z16.h1191; CHECK-NEXT:    ext z16.b, z16.b, z16.b, #81192; CHECK-NEXT:    uunpklo z16.s, z16.h1193; CHECK-NEXT:    udivr z17.s, p0/m, z17.s, z18.s1194; CHECK-NEXT:    uunpklo z18.s, z5.h1195; CHECK-NEXT:    ext z5.b, z5.b, z5.b, #81196; CHECK-NEXT:    uunpklo z5.s, z5.h1197; CHECK-NEXT:    udivr z7.s, p0/m, z7.s, z16.s1198; CHECK-NEXT:    uunpklo z16.s, z6.h1199; CHECK-NEXT:    ext z6.b, z6.b, z6.b, #81200; CHECK-NEXT:    uunpklo z6.s, z6.h1201; CHECK-NEXT:    uzp1 z20.h, z17.h, z17.h1202; CHECK-NEXT:    udivr z16.s, p0/m, z16.s, z18.s1203; CHECK-NEXT:    uzp1 z18.h, z0.h, z0.h1204; CHECK-NEXT:    uzp1 z19.h, z1.h, z1.h1205; CHECK-NEXT:    uzp1 z21.h, z7.h, z7.h1206; CHECK-NEXT:    udiv z5.s, p0/m, z5.s, z6.s1207; CHECK-NEXT:    uzp1 z0.h, z16.h, z16.h1208; CHECK-NEXT:    udivr z3.s, p0/m, z3.s, z4.s1209; CHECK-NEXT:    ptrue p0.h, vl41210; CHECK-NEXT:    uzp1 z1.h, z5.h, z5.h1211; CHECK-NEXT:    uzp1 z4.h, z2.h, z2.h1212; CHECK-NEXT:    splice z2.h, p0, { z20.h, z21.h }1213; CHECK-NEXT:    splice z0.h, p0, { z0.h, z1.h }1214; CHECK-NEXT:    uzp1 z5.h, z3.h, z3.h1215; CHECK-NEXT:    splice z3.h, p0, { z18.h, z19.h }1216; CHECK-NEXT:    splice z1.h, p0, { z4.h, z5.h }1217; CHECK-NEXT:    uzp1 z4.b, z2.b, z2.b1218; CHECK-NEXT:    ptrue p0.b, vl81219; CHECK-NEXT:    uzp1 z2.b, z3.b, z3.b1220; CHECK-NEXT:    uzp1 z5.b, z0.b, z0.b1221; CHECK-NEXT:    uzp1 z3.b, z1.b, z1.b1222; CHECK-NEXT:    splice z0.b, p0, { z4.b, z5.b }1223; CHECK-NEXT:    splice z1.b, p0, { z2.b, z3.b }1224; CHECK-NEXT:    stp q0, q1, [x0]1225; CHECK-NEXT:    ret1226;1227; NONEON-NOSVE-LABEL: udiv_v32i8:1228; NONEON-NOSVE:       // %bb.0:1229; NONEON-NOSVE-NEXT:    sub sp, sp, #961230; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 961231; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]1232; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]1233; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]1234; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]1235; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #63]1236; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #47]1237; NONEON-NOSVE-NEXT:    udiv w8, w9, w81238; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #46]1239; NONEON-NOSVE-NEXT:    strb w8, [sp, #95]1240; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #62]1241; NONEON-NOSVE-NEXT:    udiv w8, w9, w81242; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #45]1243; NONEON-NOSVE-NEXT:    strb w8, [sp, #94]1244; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #61]1245; NONEON-NOSVE-NEXT:    udiv w8, w9, w81246; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #44]1247; NONEON-NOSVE-NEXT:    strb w8, [sp, #93]1248; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #60]1249; NONEON-NOSVE-NEXT:    udiv w8, w9, w81250; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #43]1251; NONEON-NOSVE-NEXT:    strb w8, [sp, #92]1252; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #59]1253; NONEON-NOSVE-NEXT:    udiv w8, w9, w81254; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #42]1255; NONEON-NOSVE-NEXT:    strb w8, [sp, #91]1256; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #58]1257; NONEON-NOSVE-NEXT:    udiv w8, w9, w81258; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #41]1259; NONEON-NOSVE-NEXT:    strb w8, [sp, #90]1260; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #57]1261; NONEON-NOSVE-NEXT:    udiv w8, w9, w81262; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #40]1263; NONEON-NOSVE-NEXT:    strb w8, [sp, #89]1264; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #56]1265; NONEON-NOSVE-NEXT:    udiv w8, w9, w81266; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #39]1267; NONEON-NOSVE-NEXT:    strb w8, [sp, #88]1268; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #55]1269; NONEON-NOSVE-NEXT:    udiv w8, w9, w81270; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #38]1271; NONEON-NOSVE-NEXT:    strb w8, [sp, #87]1272; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #54]1273; NONEON-NOSVE-NEXT:    udiv w8, w9, w81274; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #37]1275; NONEON-NOSVE-NEXT:    strb w8, [sp, #86]1276; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #53]1277; NONEON-NOSVE-NEXT:    udiv w8, w9, w81278; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #36]1279; NONEON-NOSVE-NEXT:    strb w8, [sp, #85]1280; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #52]1281; NONEON-NOSVE-NEXT:    udiv w8, w9, w81282; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #35]1283; NONEON-NOSVE-NEXT:    strb w8, [sp, #84]1284; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #51]1285; NONEON-NOSVE-NEXT:    udiv w8, w9, w81286; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #34]1287; NONEON-NOSVE-NEXT:    strb w8, [sp, #83]1288; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #50]1289; NONEON-NOSVE-NEXT:    udiv w8, w9, w81290; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #33]1291; NONEON-NOSVE-NEXT:    strb w8, [sp, #82]1292; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #49]1293; NONEON-NOSVE-NEXT:    udiv w8, w9, w81294; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #32]1295; NONEON-NOSVE-NEXT:    strb w8, [sp, #81]1296; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #48]1297; NONEON-NOSVE-NEXT:    udiv w8, w9, w81298; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #15]1299; NONEON-NOSVE-NEXT:    strb w8, [sp, #80]1300; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #31]1301; NONEON-NOSVE-NEXT:    udiv w8, w9, w81302; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]1303; NONEON-NOSVE-NEXT:    strb w8, [sp, #79]1304; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #30]1305; NONEON-NOSVE-NEXT:    udiv w8, w9, w81306; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #13]1307; NONEON-NOSVE-NEXT:    strb w8, [sp, #78]1308; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #29]1309; NONEON-NOSVE-NEXT:    udiv w8, w9, w81310; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #12]1311; NONEON-NOSVE-NEXT:    strb w8, [sp, #77]1312; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #28]1313; NONEON-NOSVE-NEXT:    udiv w8, w9, w81314; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #11]1315; NONEON-NOSVE-NEXT:    strb w8, [sp, #76]1316; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #27]1317; NONEON-NOSVE-NEXT:    udiv w8, w9, w81318; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #10]1319; NONEON-NOSVE-NEXT:    strb w8, [sp, #75]1320; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #26]1321; NONEON-NOSVE-NEXT:    udiv w8, w9, w81322; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #9]1323; NONEON-NOSVE-NEXT:    strb w8, [sp, #74]1324; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #25]1325; NONEON-NOSVE-NEXT:    udiv w8, w9, w81326; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]1327; NONEON-NOSVE-NEXT:    strb w8, [sp, #73]1328; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #24]1329; NONEON-NOSVE-NEXT:    udiv w8, w9, w81330; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #7]1331; NONEON-NOSVE-NEXT:    strb w8, [sp, #72]1332; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #23]1333; NONEON-NOSVE-NEXT:    udiv w8, w9, w81334; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #6]1335; NONEON-NOSVE-NEXT:    strb w8, [sp, #71]1336; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]1337; NONEON-NOSVE-NEXT:    udiv w8, w9, w81338; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #5]1339; NONEON-NOSVE-NEXT:    strb w8, [sp, #70]1340; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #21]1341; NONEON-NOSVE-NEXT:    udiv w8, w9, w81342; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #4]1343; NONEON-NOSVE-NEXT:    strb w8, [sp, #69]1344; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #20]1345; NONEON-NOSVE-NEXT:    udiv w8, w9, w81346; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #3]1347; NONEON-NOSVE-NEXT:    strb w8, [sp, #68]1348; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #19]1349; NONEON-NOSVE-NEXT:    udiv w8, w9, w81350; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #2]1351; NONEON-NOSVE-NEXT:    strb w8, [sp, #67]1352; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #18]1353; NONEON-NOSVE-NEXT:    udiv w8, w9, w81354; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1]1355; NONEON-NOSVE-NEXT:    strb w8, [sp, #66]1356; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #17]1357; NONEON-NOSVE-NEXT:    udiv w8, w9, w81358; NONEON-NOSVE-NEXT:    ldrb w9, [sp]1359; NONEON-NOSVE-NEXT:    strb w8, [sp, #65]1360; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]1361; NONEON-NOSVE-NEXT:    udiv w8, w9, w81362; NONEON-NOSVE-NEXT:    strb w8, [sp, #64]1363; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]1364; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]1365; NONEON-NOSVE-NEXT:    add sp, sp, #961366; NONEON-NOSVE-NEXT:    ret1367  %op1 = load <32 x i8>, ptr %a1368  %op2 = load <32 x i8>, ptr %b1369  %res = udiv <32 x i8> %op1, %op21370  store <32 x i8> %res, ptr %a1371  ret void1372}1373 1374define <2 x i16> @udiv_v2i16(<2 x i16> %op1, <2 x i16> %op2) {1375; CHECK-LABEL: udiv_v2i16:1376; CHECK:       // %bb.0:1377; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z11378; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z01379; CHECK-NEXT:    ptrue p0.s, vl21380; CHECK-NEXT:    and z1.s, z1.s, #0xffff1381; CHECK-NEXT:    and z0.s, z0.s, #0xffff1382; CHECK-NEXT:    udiv z0.s, p0/m, z0.s, z1.s1383; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z01384; CHECK-NEXT:    ret1385;1386; NONEON-NOSVE-LABEL: udiv_v2i16:1387; NONEON-NOSVE:       // %bb.0:1388; NONEON-NOSVE-NEXT:    sub sp, sp, #321389; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 321390; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]1391; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]1392; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]1393; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #8]1394; NONEON-NOSVE-NEXT:    udiv w8, w9, w81395; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #16]1396; NONEON-NOSVE-NEXT:    udiv w9, w10, w91397; NONEON-NOSVE-NEXT:    stp w9, w8, [sp, #24]1398; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]1399; NONEON-NOSVE-NEXT:    add sp, sp, #321400; NONEON-NOSVE-NEXT:    ret1401  %res = udiv <2 x i16> %op1, %op21402  ret <2 x i16> %res1403}1404 1405define <4 x i16> @udiv_v4i16(<4 x i16> %op1, <4 x i16> %op2) {1406; CHECK-LABEL: udiv_v4i16:1407; CHECK:       // %bb.0:1408; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z11409; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z01410; CHECK-NEXT:    ptrue p0.s, vl41411; CHECK-NEXT:    uunpklo z1.s, z1.h1412; CHECK-NEXT:    uunpklo z0.s, z0.h1413; CHECK-NEXT:    udiv z0.s, p0/m, z0.s, z1.s1414; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h1415; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z01416; CHECK-NEXT:    ret1417;1418; NONEON-NOSVE-LABEL: udiv_v4i16:1419; NONEON-NOSVE:       // %bb.0:1420; NONEON-NOSVE-NEXT:    sub sp, sp, #321421; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 321422; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]1423; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]1424; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]1425; NONEON-NOSVE-NEXT:    udiv w8, w9, w81426; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]1427; NONEON-NOSVE-NEXT:    strh w8, [sp, #30]1428; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]1429; NONEON-NOSVE-NEXT:    udiv w8, w9, w81430; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]1431; NONEON-NOSVE-NEXT:    strh w8, [sp, #28]1432; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]1433; NONEON-NOSVE-NEXT:    udiv w8, w9, w81434; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]1435; NONEON-NOSVE-NEXT:    strh w8, [sp, #26]1436; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]1437; NONEON-NOSVE-NEXT:    udiv w8, w9, w81438; NONEON-NOSVE-NEXT:    strh w8, [sp, #24]1439; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]1440; NONEON-NOSVE-NEXT:    add sp, sp, #321441; NONEON-NOSVE-NEXT:    ret1442  %res = udiv <4 x i16> %op1, %op21443  ret <4 x i16> %res1444}1445 1446define <8 x i16> @udiv_v8i16(<8 x i16> %op1, <8 x i16> %op2) {1447; CHECK-LABEL: udiv_v8i16:1448; CHECK:       // %bb.0:1449; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z11450; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z01451; CHECK-NEXT:    uunpklo z2.s, z1.h1452; CHECK-NEXT:    uunpklo z3.s, z0.h1453; CHECK-NEXT:    ptrue p0.s, vl41454; CHECK-NEXT:    ext z1.b, z1.b, z1.b, #81455; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #81456; CHECK-NEXT:    uunpklo z1.s, z1.h1457; CHECK-NEXT:    uunpklo z0.s, z0.h1458; CHECK-NEXT:    udivr z2.s, p0/m, z2.s, z3.s1459; CHECK-NEXT:    udiv z0.s, p0/m, z0.s, z1.s1460; CHECK-NEXT:    ptrue p0.h, vl41461; CHECK-NEXT:    uzp1 z1.h, z2.h, z2.h1462; CHECK-NEXT:    uzp1 z2.h, z0.h, z0.h1463; CHECK-NEXT:    splice z0.h, p0, { z1.h, z2.h }1464; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z01465; CHECK-NEXT:    ret1466;1467; NONEON-NOSVE-LABEL: udiv_v8i16:1468; NONEON-NOSVE:       // %bb.0:1469; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!1470; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 481471; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #30]1472; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]1473; NONEON-NOSVE-NEXT:    udiv w8, w9, w81474; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]1475; NONEON-NOSVE-NEXT:    strh w8, [sp, #46]1476; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #28]1477; NONEON-NOSVE-NEXT:    udiv w8, w9, w81478; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]1479; NONEON-NOSVE-NEXT:    strh w8, [sp, #44]1480; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #26]1481; NONEON-NOSVE-NEXT:    udiv w8, w9, w81482; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]1483; NONEON-NOSVE-NEXT:    strh w8, [sp, #42]1484; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #24]1485; NONEON-NOSVE-NEXT:    udiv w8, w9, w81486; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #6]1487; NONEON-NOSVE-NEXT:    strh w8, [sp, #40]1488; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]1489; NONEON-NOSVE-NEXT:    udiv w8, w9, w81490; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #4]1491; NONEON-NOSVE-NEXT:    strh w8, [sp, #38]1492; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]1493; NONEON-NOSVE-NEXT:    udiv w8, w9, w81494; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #2]1495; NONEON-NOSVE-NEXT:    strh w8, [sp, #36]1496; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]1497; NONEON-NOSVE-NEXT:    udiv w8, w9, w81498; NONEON-NOSVE-NEXT:    ldrh w9, [sp]1499; NONEON-NOSVE-NEXT:    strh w8, [sp, #34]1500; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]1501; NONEON-NOSVE-NEXT:    udiv w8, w9, w81502; NONEON-NOSVE-NEXT:    strh w8, [sp, #32]1503; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]1504; NONEON-NOSVE-NEXT:    add sp, sp, #481505; NONEON-NOSVE-NEXT:    ret1506  %res = udiv <8 x i16> %op1, %op21507  ret <8 x i16> %res1508}1509 1510define void @udiv_v16i16(ptr %a, ptr %b) {1511; CHECK-LABEL: udiv_v16i16:1512; CHECK:       // %bb.0:1513; CHECK-NEXT:    ldp q4, q1, [x1]1514; CHECK-NEXT:    ptrue p0.s, vl41515; CHECK-NEXT:    ldr q0, [x0, #16]1516; CHECK-NEXT:    uunpklo z2.s, z1.h1517; CHECK-NEXT:    uunpklo z3.s, z0.h1518; CHECK-NEXT:    uunpklo z5.s, z4.h1519; CHECK-NEXT:    ext z4.b, z4.b, z4.b, #81520; CHECK-NEXT:    ext z1.b, z1.b, z1.b, #81521; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #81522; CHECK-NEXT:    udivr z2.s, p0/m, z2.s, z3.s1523; CHECK-NEXT:    ldr q3, [x0]1524; CHECK-NEXT:    uunpklo z4.s, z4.h1525; CHECK-NEXT:    uunpklo z1.s, z1.h1526; CHECK-NEXT:    uunpklo z0.s, z0.h1527; CHECK-NEXT:    uunpklo z6.s, z3.h1528; CHECK-NEXT:    ext z3.b, z3.b, z3.b, #81529; CHECK-NEXT:    uunpklo z3.s, z3.h1530; CHECK-NEXT:    udivr z5.s, p0/m, z5.s, z6.s1531; CHECK-NEXT:    udiv z3.s, p0/m, z3.s, z4.s1532; CHECK-NEXT:    uzp1 z4.h, z5.h, z5.h1533; CHECK-NEXT:    udiv z0.s, p0/m, z0.s, z1.s1534; CHECK-NEXT:    uzp1 z1.h, z2.h, z2.h1535; CHECK-NEXT:    ptrue p0.h, vl41536; CHECK-NEXT:    uzp1 z5.h, z3.h, z3.h1537; CHECK-NEXT:    uzp1 z2.h, z0.h, z0.h1538; CHECK-NEXT:    splice z0.h, p0, { z4.h, z5.h }1539; CHECK-NEXT:    splice z1.h, p0, { z1.h, z2.h }1540; CHECK-NEXT:    stp q0, q1, [x0]1541; CHECK-NEXT:    ret1542;1543; NONEON-NOSVE-LABEL: udiv_v16i16:1544; NONEON-NOSVE:       // %bb.0:1545; NONEON-NOSVE-NEXT:    sub sp, sp, #961546; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 961547; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]1548; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]1549; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]1550; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]1551; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #62]1552; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #46]1553; NONEON-NOSVE-NEXT:    udiv w8, w9, w81554; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #44]1555; NONEON-NOSVE-NEXT:    strh w8, [sp, #94]1556; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #60]1557; NONEON-NOSVE-NEXT:    udiv w8, w9, w81558; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #42]1559; NONEON-NOSVE-NEXT:    strh w8, [sp, #92]1560; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #58]1561; NONEON-NOSVE-NEXT:    udiv w8, w9, w81562; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #40]1563; NONEON-NOSVE-NEXT:    strh w8, [sp, #90]1564; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #56]1565; NONEON-NOSVE-NEXT:    udiv w8, w9, w81566; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #38]1567; NONEON-NOSVE-NEXT:    strh w8, [sp, #88]1568; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #54]1569; NONEON-NOSVE-NEXT:    udiv w8, w9, w81570; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #36]1571; NONEON-NOSVE-NEXT:    strh w8, [sp, #86]1572; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #52]1573; NONEON-NOSVE-NEXT:    udiv w8, w9, w81574; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #34]1575; NONEON-NOSVE-NEXT:    strh w8, [sp, #84]1576; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #50]1577; NONEON-NOSVE-NEXT:    udiv w8, w9, w81578; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #32]1579; NONEON-NOSVE-NEXT:    strh w8, [sp, #82]1580; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #48]1581; NONEON-NOSVE-NEXT:    udiv w8, w9, w81582; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]1583; NONEON-NOSVE-NEXT:    strh w8, [sp, #80]1584; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #30]1585; NONEON-NOSVE-NEXT:    udiv w8, w9, w81586; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]1587; NONEON-NOSVE-NEXT:    strh w8, [sp, #78]1588; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #28]1589; NONEON-NOSVE-NEXT:    udiv w8, w9, w81590; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]1591; NONEON-NOSVE-NEXT:    strh w8, [sp, #76]1592; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #26]1593; NONEON-NOSVE-NEXT:    udiv w8, w9, w81594; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]1595; NONEON-NOSVE-NEXT:    strh w8, [sp, #74]1596; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #24]1597; NONEON-NOSVE-NEXT:    udiv w8, w9, w81598; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #6]1599; NONEON-NOSVE-NEXT:    strh w8, [sp, #72]1600; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]1601; NONEON-NOSVE-NEXT:    udiv w8, w9, w81602; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #4]1603; NONEON-NOSVE-NEXT:    strh w8, [sp, #70]1604; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]1605; NONEON-NOSVE-NEXT:    udiv w8, w9, w81606; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #2]1607; NONEON-NOSVE-NEXT:    strh w8, [sp, #68]1608; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]1609; NONEON-NOSVE-NEXT:    udiv w8, w9, w81610; NONEON-NOSVE-NEXT:    ldrh w9, [sp]1611; NONEON-NOSVE-NEXT:    strh w8, [sp, #66]1612; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]1613; NONEON-NOSVE-NEXT:    udiv w8, w9, w81614; NONEON-NOSVE-NEXT:    strh w8, [sp, #64]1615; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]1616; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]1617; NONEON-NOSVE-NEXT:    add sp, sp, #961618; NONEON-NOSVE-NEXT:    ret1619  %op1 = load <16 x i16>, ptr %a1620  %op2 = load <16 x i16>, ptr %b1621  %res = udiv <16 x i16> %op1, %op21622  store <16 x i16> %res, ptr %a1623  ret void1624}1625 1626define <2 x i32> @udiv_v2i32(<2 x i32> %op1, <2 x i32> %op2) {1627; CHECK-LABEL: udiv_v2i32:1628; CHECK:       // %bb.0:1629; CHECK-NEXT:    ptrue p0.s, vl21630; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z01631; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z11632; CHECK-NEXT:    udiv z0.s, p0/m, z0.s, z1.s1633; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z01634; CHECK-NEXT:    ret1635;1636; NONEON-NOSVE-LABEL: udiv_v2i32:1637; NONEON-NOSVE:       // %bb.0:1638; NONEON-NOSVE-NEXT:    sub sp, sp, #321639; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 321640; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]1641; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]1642; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]1643; NONEON-NOSVE-NEXT:    udiv w11, w10, w81644; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]1645; NONEON-NOSVE-NEXT:    udiv w8, w9, w81646; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #24]1647; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]1648; NONEON-NOSVE-NEXT:    add sp, sp, #321649; NONEON-NOSVE-NEXT:    ret1650  %res = udiv <2 x i32> %op1, %op21651  ret <2 x i32> %res1652}1653 1654define <4 x i32> @udiv_v4i32(<4 x i32> %op1, <4 x i32> %op2) {1655; CHECK-LABEL: udiv_v4i32:1656; CHECK:       // %bb.0:1657; CHECK-NEXT:    ptrue p0.s, vl41658; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z01659; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z11660; CHECK-NEXT:    udiv z0.s, p0/m, z0.s, z1.s1661; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z01662; CHECK-NEXT:    ret1663;1664; NONEON-NOSVE-LABEL: udiv_v4i32:1665; NONEON-NOSVE:       // %bb.0:1666; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!1667; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 481668; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]1669; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]1670; NONEON-NOSVE-NEXT:    udiv w11, w10, w81671; NONEON-NOSVE-NEXT:    ldr w8, [sp, #24]1672; NONEON-NOSVE-NEXT:    udiv w8, w9, w81673; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp]1674; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #40]1675; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]1676; NONEON-NOSVE-NEXT:    udiv w11, w10, w81677; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]1678; NONEON-NOSVE-NEXT:    udiv w8, w9, w81679; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #32]1680; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]1681; NONEON-NOSVE-NEXT:    add sp, sp, #481682; NONEON-NOSVE-NEXT:    ret1683  %res = udiv <4 x i32> %op1, %op21684  ret <4 x i32> %res1685}1686 1687define void @udiv_v8i32(ptr %a, ptr %b)  {1688; CHECK-LABEL: udiv_v8i32:1689; CHECK:       // %bb.0:1690; CHECK-NEXT:    ldp q0, q3, [x1]1691; CHECK-NEXT:    ptrue p0.s, vl41692; CHECK-NEXT:    ldp q1, q2, [x0]1693; CHECK-NEXT:    udivr z0.s, p0/m, z0.s, z1.s1694; CHECK-NEXT:    udiv z2.s, p0/m, z2.s, z3.s1695; CHECK-NEXT:    stp q0, q2, [x0]1696; CHECK-NEXT:    ret1697;1698; NONEON-NOSVE-LABEL: udiv_v8i32:1699; NONEON-NOSVE:       // %bb.0:1700; NONEON-NOSVE-NEXT:    sub sp, sp, #961701; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 961702; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]1703; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]1704; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]1705; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]1706; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #40]1707; NONEON-NOSVE-NEXT:    ldr w8, [sp, #60]1708; NONEON-NOSVE-NEXT:    udiv w11, w10, w81709; NONEON-NOSVE-NEXT:    ldr w8, [sp, #56]1710; NONEON-NOSVE-NEXT:    udiv w8, w9, w81711; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #32]1712; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #88]1713; NONEON-NOSVE-NEXT:    ldr w8, [sp, #52]1714; NONEON-NOSVE-NEXT:    udiv w11, w10, w81715; NONEON-NOSVE-NEXT:    ldr w8, [sp, #48]1716; NONEON-NOSVE-NEXT:    udiv w8, w9, w81717; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]1718; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #80]1719; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]1720; NONEON-NOSVE-NEXT:    udiv w11, w10, w81721; NONEON-NOSVE-NEXT:    ldr w8, [sp, #24]1722; NONEON-NOSVE-NEXT:    udiv w8, w9, w81723; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp]1724; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #72]1725; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]1726; NONEON-NOSVE-NEXT:    udiv w11, w10, w81727; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]1728; NONEON-NOSVE-NEXT:    udiv w8, w9, w81729; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #64]1730; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]1731; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]1732; NONEON-NOSVE-NEXT:    add sp, sp, #961733; NONEON-NOSVE-NEXT:    ret1734  %op1 = load <8 x i32>, ptr %a1735  %op2 = load <8 x i32>, ptr %b1736  %res = udiv <8 x i32> %op1, %op21737  store <8 x i32> %res, ptr %a1738  ret void1739}1740 1741define <1 x i64> @udiv_v1i64(<1 x i64> %op1, <1 x i64> %op2) {1742; CHECK-LABEL: udiv_v1i64:1743; CHECK:       // %bb.0:1744; CHECK-NEXT:    ptrue p0.d, vl11745; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z01746; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z11747; CHECK-NEXT:    udiv z0.d, p0/m, z0.d, z1.d1748; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z01749; CHECK-NEXT:    ret1750;1751; NONEON-NOSVE-LABEL: udiv_v1i64:1752; NONEON-NOSVE:       // %bb.0:1753; NONEON-NOSVE-NEXT:    sub sp, sp, #161754; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 161755; NONEON-NOSVE-NEXT:    fmov x8, d11756; NONEON-NOSVE-NEXT:    fmov x9, d01757; NONEON-NOSVE-NEXT:    udiv x8, x9, x81758; NONEON-NOSVE-NEXT:    str x8, [sp, #8]1759; NONEON-NOSVE-NEXT:    ldr d0, [sp, #8]1760; NONEON-NOSVE-NEXT:    add sp, sp, #161761; NONEON-NOSVE-NEXT:    ret1762  %res = udiv <1 x i64> %op1, %op21763  ret <1 x i64> %res1764}1765 1766define <2 x i64> @udiv_v2i64(<2 x i64> %op1, <2 x i64> %op2) {1767; CHECK-LABEL: udiv_v2i64:1768; CHECK:       // %bb.0:1769; CHECK-NEXT:    ptrue p0.d, vl21770; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z01771; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z11772; CHECK-NEXT:    udiv z0.d, p0/m, z0.d, z1.d1773; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z01774; CHECK-NEXT:    ret1775;1776; NONEON-NOSVE-LABEL: udiv_v2i64:1777; NONEON-NOSVE:       // %bb.0:1778; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!1779; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 481780; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp]1781; NONEON-NOSVE-NEXT:    ldr x8, [sp, #24]1782; NONEON-NOSVE-NEXT:    udiv x11, x10, x81783; NONEON-NOSVE-NEXT:    ldr x8, [sp, #16]1784; NONEON-NOSVE-NEXT:    udiv x8, x9, x81785; NONEON-NOSVE-NEXT:    stp x8, x11, [sp, #32]1786; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]1787; NONEON-NOSVE-NEXT:    add sp, sp, #481788; NONEON-NOSVE-NEXT:    ret1789  %res = udiv <2 x i64> %op1, %op21790  ret <2 x i64> %res1791}1792 1793define void @udiv_v4i64(ptr %a, ptr %b)  {1794; CHECK-LABEL: udiv_v4i64:1795; CHECK:       // %bb.0:1796; CHECK-NEXT:    ldp q0, q3, [x1]1797; CHECK-NEXT:    ptrue p0.d, vl21798; CHECK-NEXT:    ldp q1, q2, [x0]1799; CHECK-NEXT:    udivr z0.d, p0/m, z0.d, z1.d1800; CHECK-NEXT:    udiv z2.d, p0/m, z2.d, z3.d1801; CHECK-NEXT:    stp q0, q2, [x0]1802; CHECK-NEXT:    ret1803;1804; NONEON-NOSVE-LABEL: udiv_v4i64:1805; NONEON-NOSVE:       // %bb.0:1806; NONEON-NOSVE-NEXT:    sub sp, sp, #961807; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 961808; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]1809; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]1810; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]1811; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]1812; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp, #32]1813; NONEON-NOSVE-NEXT:    ldr x8, [sp, #56]1814; NONEON-NOSVE-NEXT:    udiv x11, x10, x81815; NONEON-NOSVE-NEXT:    ldr x8, [sp, #48]1816; NONEON-NOSVE-NEXT:    udiv x8, x9, x81817; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp]1818; NONEON-NOSVE-NEXT:    stp x8, x11, [sp, #80]1819; NONEON-NOSVE-NEXT:    ldr x8, [sp, #24]1820; NONEON-NOSVE-NEXT:    udiv x11, x10, x81821; NONEON-NOSVE-NEXT:    ldr x8, [sp, #16]1822; NONEON-NOSVE-NEXT:    udiv x8, x9, x81823; NONEON-NOSVE-NEXT:    stp x8, x11, [sp, #64]1824; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]1825; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]1826; NONEON-NOSVE-NEXT:    add sp, sp, #961827; NONEON-NOSVE-NEXT:    ret1828  %op1 = load <4 x i64>, ptr %a1829  %op2 = load <4 x i64>, ptr %b1830  %res = udiv <4 x i64> %op1, %op21831  store <4 x i64> %res, ptr %a1832  ret void1833}1834 1835define void @udiv_constantsplat_v8i32(ptr %a)  {1836; CHECK-LABEL: udiv_constantsplat_v8i32:1837; CHECK:       // %bb.0:1838; CHECK-NEXT:    mov w8, #8969 // =0x23091839; CHECK-NEXT:    ldp q1, q2, [x0]1840; CHECK-NEXT:    movk w8, #22765, lsl #161841; CHECK-NEXT:    mov z0.s, w81842; CHECK-NEXT:    umulh z3.s, z1.s, z0.s1843; CHECK-NEXT:    umulh z0.s, z2.s, z0.s1844; CHECK-NEXT:    sub z1.s, z1.s, z3.s1845; CHECK-NEXT:    sub z2.s, z2.s, z0.s1846; CHECK-NEXT:    usra z3.s, z1.s, #11847; CHECK-NEXT:    usra z0.s, z2.s, #11848; CHECK-NEXT:    lsr z1.s, z3.s, #61849; CHECK-NEXT:    lsr z0.s, z0.s, #61850; CHECK-NEXT:    stp q1, q0, [x0]1851; CHECK-NEXT:    ret1852;1853; NONEON-NOSVE-LABEL: udiv_constantsplat_v8i32:1854; NONEON-NOSVE:       // %bb.0:1855; NONEON-NOSVE-NEXT:    ldp q1, q0, [x0]1856; NONEON-NOSVE-NEXT:    mov w8, #8969 // =0x23091857; NONEON-NOSVE-NEXT:    movk w8, #22765, lsl #161858; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #-64]!1859; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 641860; NONEON-NOSVE-NEXT:    ldr w9, [sp, #28]1861; NONEON-NOSVE-NEXT:    umull x10, w9, w81862; NONEON-NOSVE-NEXT:    lsr x10, x10, #321863; NONEON-NOSVE-NEXT:    sub w9, w9, w101864; NONEON-NOSVE-NEXT:    add w9, w10, w9, lsr #11865; NONEON-NOSVE-NEXT:    lsr w11, w9, #61866; NONEON-NOSVE-NEXT:    ldr w9, [sp, #24]1867; NONEON-NOSVE-NEXT:    umull x10, w9, w81868; NONEON-NOSVE-NEXT:    lsr x10, x10, #321869; NONEON-NOSVE-NEXT:    sub w9, w9, w101870; NONEON-NOSVE-NEXT:    add w9, w10, w9, lsr #11871; NONEON-NOSVE-NEXT:    lsr w9, w9, #61872; NONEON-NOSVE-NEXT:    stp w9, w11, [sp, #56]1873; NONEON-NOSVE-NEXT:    ldr w9, [sp, #20]1874; NONEON-NOSVE-NEXT:    umull x10, w9, w81875; NONEON-NOSVE-NEXT:    lsr x10, x10, #321876; NONEON-NOSVE-NEXT:    sub w9, w9, w101877; NONEON-NOSVE-NEXT:    add w9, w10, w9, lsr #11878; NONEON-NOSVE-NEXT:    lsr w11, w9, #61879; NONEON-NOSVE-NEXT:    ldr w9, [sp, #16]1880; NONEON-NOSVE-NEXT:    umull x10, w9, w81881; NONEON-NOSVE-NEXT:    lsr x10, x10, #321882; NONEON-NOSVE-NEXT:    sub w9, w9, w101883; NONEON-NOSVE-NEXT:    add w9, w10, w9, lsr #11884; NONEON-NOSVE-NEXT:    lsr w9, w9, #61885; NONEON-NOSVE-NEXT:    stp w9, w11, [sp, #48]1886; NONEON-NOSVE-NEXT:    ldr w9, [sp, #12]1887; NONEON-NOSVE-NEXT:    umull x10, w9, w81888; NONEON-NOSVE-NEXT:    lsr x10, x10, #321889; NONEON-NOSVE-NEXT:    sub w9, w9, w101890; NONEON-NOSVE-NEXT:    add w9, w10, w9, lsr #11891; NONEON-NOSVE-NEXT:    lsr w11, w9, #61892; NONEON-NOSVE-NEXT:    ldr w9, [sp, #8]1893; NONEON-NOSVE-NEXT:    umull x10, w9, w81894; NONEON-NOSVE-NEXT:    lsr x10, x10, #321895; NONEON-NOSVE-NEXT:    sub w9, w9, w101896; NONEON-NOSVE-NEXT:    add w9, w10, w9, lsr #11897; NONEON-NOSVE-NEXT:    lsr w9, w9, #61898; NONEON-NOSVE-NEXT:    stp w9, w11, [sp, #40]1899; NONEON-NOSVE-NEXT:    ldr w9, [sp, #4]1900; NONEON-NOSVE-NEXT:    umull x10, w9, w81901; NONEON-NOSVE-NEXT:    lsr x10, x10, #321902; NONEON-NOSVE-NEXT:    sub w9, w9, w101903; NONEON-NOSVE-NEXT:    add w9, w10, w9, lsr #11904; NONEON-NOSVE-NEXT:    lsr w11, w9, #61905; NONEON-NOSVE-NEXT:    ldr w9, [sp]1906; NONEON-NOSVE-NEXT:    umull x8, w9, w81907; NONEON-NOSVE-NEXT:    lsr x8, x8, #321908; NONEON-NOSVE-NEXT:    sub w9, w9, w81909; NONEON-NOSVE-NEXT:    add w8, w8, w9, lsr #11910; NONEON-NOSVE-NEXT:    lsr w8, w8, #61911; NONEON-NOSVE-NEXT:    stp w8, w11, [sp, #32]1912; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #32]1913; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]1914; NONEON-NOSVE-NEXT:    add sp, sp, #641915; NONEON-NOSVE-NEXT:    ret1916  %op1 = load <8 x i32>, ptr %a1917  %res = udiv <8 x i32> %op1, <i32 95, i32 95, i32 95, i32 95, i32 95, i32 95, i32 95, i32 95>1918  store <8 x i32> %res, ptr %a1919  ret void1920}1921