4424 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64-none-eabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc -mtriple=aarch64-none-eabi -global-isel -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5define i8 @si8(i8 %a, i8 %b) {6; CHECK-SD-LABEL: si8:7; CHECK-SD: // %bb.0: // %entry8; CHECK-SD-NEXT: sxtb w8, w19; CHECK-SD-NEXT: sxtb w9, w010; CHECK-SD-NEXT: sdiv w10, w9, w811; CHECK-SD-NEXT: msub w0, w10, w8, w912; CHECK-SD-NEXT: ret13;14; CHECK-GI-LABEL: si8:15; CHECK-GI: // %bb.0: // %entry16; CHECK-GI-NEXT: sxtb w8, w017; CHECK-GI-NEXT: sxtb w9, w118; CHECK-GI-NEXT: sdiv w8, w8, w919; CHECK-GI-NEXT: msub w0, w8, w1, w020; CHECK-GI-NEXT: ret21entry:22 %s = srem i8 %a, %b23 ret i8 %s24}25 26define i8 @ui8(i8 %a, i8 %b) {27; CHECK-SD-LABEL: ui8:28; CHECK-SD: // %bb.0: // %entry29; CHECK-SD-NEXT: and w8, w1, #0xff30; CHECK-SD-NEXT: and w9, w0, #0xff31; CHECK-SD-NEXT: udiv w10, w9, w832; CHECK-SD-NEXT: msub w0, w10, w8, w933; CHECK-SD-NEXT: ret34;35; CHECK-GI-LABEL: ui8:36; CHECK-GI: // %bb.0: // %entry37; CHECK-GI-NEXT: and w8, w0, #0xff38; CHECK-GI-NEXT: and w9, w1, #0xff39; CHECK-GI-NEXT: udiv w8, w8, w940; CHECK-GI-NEXT: msub w0, w8, w1, w041; CHECK-GI-NEXT: ret42entry:43 %s = urem i8 %a, %b44 ret i8 %s45}46 47define i16 @si16(i16 %a, i16 %b) {48; CHECK-SD-LABEL: si16:49; CHECK-SD: // %bb.0: // %entry50; CHECK-SD-NEXT: sxth w8, w151; CHECK-SD-NEXT: sxth w9, w052; CHECK-SD-NEXT: sdiv w10, w9, w853; CHECK-SD-NEXT: msub w0, w10, w8, w954; CHECK-SD-NEXT: ret55;56; CHECK-GI-LABEL: si16:57; CHECK-GI: // %bb.0: // %entry58; CHECK-GI-NEXT: sxth w8, w059; CHECK-GI-NEXT: sxth w9, w160; CHECK-GI-NEXT: sdiv w8, w8, w961; CHECK-GI-NEXT: msub w0, w8, w1, w062; CHECK-GI-NEXT: ret63entry:64 %s = srem i16 %a, %b65 ret i16 %s66}67 68define i16 @ui16(i16 %a, i16 %b) {69; CHECK-SD-LABEL: ui16:70; CHECK-SD: // %bb.0: // %entry71; CHECK-SD-NEXT: and w8, w1, #0xffff72; CHECK-SD-NEXT: and w9, w0, #0xffff73; CHECK-SD-NEXT: udiv w10, w9, w874; CHECK-SD-NEXT: msub w0, w10, w8, w975; CHECK-SD-NEXT: ret76;77; CHECK-GI-LABEL: ui16:78; CHECK-GI: // %bb.0: // %entry79; CHECK-GI-NEXT: and w8, w0, #0xffff80; CHECK-GI-NEXT: and w9, w1, #0xffff81; CHECK-GI-NEXT: udiv w8, w8, w982; CHECK-GI-NEXT: msub w0, w8, w1, w083; CHECK-GI-NEXT: ret84entry:85 %s = urem i16 %a, %b86 ret i16 %s87}88 89define i32 @si32(i32 %a, i32 %b) {90; CHECK-LABEL: si32:91; CHECK: // %bb.0: // %entry92; CHECK-NEXT: sdiv w8, w0, w193; CHECK-NEXT: msub w0, w8, w1, w094; CHECK-NEXT: ret95entry:96 %s = srem i32 %a, %b97 ret i32 %s98}99 100define i32 @ui32(i32 %a, i32 %b) {101; CHECK-LABEL: ui32:102; CHECK: // %bb.0: // %entry103; CHECK-NEXT: udiv w8, w0, w1104; CHECK-NEXT: msub w0, w8, w1, w0105; CHECK-NEXT: ret106entry:107 %s = urem i32 %a, %b108 ret i32 %s109}110 111define i64 @si64(i64 %a, i64 %b) {112; CHECK-LABEL: si64:113; CHECK: // %bb.0: // %entry114; CHECK-NEXT: sdiv x8, x0, x1115; CHECK-NEXT: msub x0, x8, x1, x0116; CHECK-NEXT: ret117entry:118 %s = srem i64 %a, %b119 ret i64 %s120}121 122define i64 @ui64(i64 %a, i64 %b) {123; CHECK-LABEL: ui64:124; CHECK: // %bb.0: // %entry125; CHECK-NEXT: udiv x8, x0, x1126; CHECK-NEXT: msub x0, x8, x1, x0127; CHECK-NEXT: ret128entry:129 %s = urem i64 %a, %b130 ret i64 %s131}132 133define i128 @si128(i128 %a, i128 %b) {134; CHECK-LABEL: si128:135; CHECK: // %bb.0: // %entry136; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill137; CHECK-NEXT: .cfi_def_cfa_offset 16138; CHECK-NEXT: .cfi_offset w30, -16139; CHECK-NEXT: bl __modti3140; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload141; CHECK-NEXT: ret142entry:143 %s = srem i128 %a, %b144 ret i128 %s145}146 147define i128 @ui128(i128 %a, i128 %b) {148; CHECK-LABEL: ui128:149; CHECK: // %bb.0: // %entry150; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill151; CHECK-NEXT: .cfi_def_cfa_offset 16152; CHECK-NEXT: .cfi_offset w30, -16153; CHECK-NEXT: bl __umodti3154; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload155; CHECK-NEXT: ret156entry:157 %s = urem i128 %a, %b158 ret i128 %s159}160 161define <2 x i8> @sv2i8(<2 x i8> %d, <2 x i8> %e) {162; CHECK-SD-LABEL: sv2i8:163; CHECK-SD: // %bb.0: // %entry164; CHECK-SD-NEXT: shl v0.2s, v0.2s, #24165; CHECK-SD-NEXT: shl v1.2s, v1.2s, #24166; CHECK-SD-NEXT: sshr v0.2s, v0.2s, #24167; CHECK-SD-NEXT: sshr v1.2s, v1.2s, #24168; CHECK-SD-NEXT: fmov w8, s1169; CHECK-SD-NEXT: fmov w9, s0170; CHECK-SD-NEXT: mov w11, v1.s[1]171; CHECK-SD-NEXT: mov w12, v0.s[1]172; CHECK-SD-NEXT: sdiv w10, w9, w8173; CHECK-SD-NEXT: sdiv w13, w12, w11174; CHECK-SD-NEXT: msub w8, w10, w8, w9175; CHECK-SD-NEXT: fmov s0, w8176; CHECK-SD-NEXT: msub w9, w13, w11, w12177; CHECK-SD-NEXT: mov v0.s[1], w9178; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0179; CHECK-SD-NEXT: ret180;181; CHECK-GI-LABEL: sv2i8:182; CHECK-GI: // %bb.0: // %entry183; CHECK-GI-NEXT: shl v0.2s, v0.2s, #24184; CHECK-GI-NEXT: shl v1.2s, v1.2s, #24185; CHECK-GI-NEXT: sshr v0.2s, v0.2s, #24186; CHECK-GI-NEXT: sshr v1.2s, v1.2s, #24187; CHECK-GI-NEXT: fmov w8, s0188; CHECK-GI-NEXT: fmov w9, s1189; CHECK-GI-NEXT: mov w10, v1.s[1]190; CHECK-GI-NEXT: sdiv w8, w8, w9191; CHECK-GI-NEXT: mov w9, v0.s[1]192; CHECK-GI-NEXT: sdiv w9, w9, w10193; CHECK-GI-NEXT: fmov s2, w8194; CHECK-GI-NEXT: mov v2.s[1], w9195; CHECK-GI-NEXT: mls v0.2s, v2.2s, v1.2s196; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0197; CHECK-GI-NEXT: ret198entry:199 %s = srem <2 x i8> %d, %e200 ret <2 x i8> %s201}202 203define <3 x i8> @sv3i8(<3 x i8> %d, <3 x i8> %e) {204; CHECK-SD-LABEL: sv3i8:205; CHECK-SD: // %bb.0: // %entry206; CHECK-SD-NEXT: sxtb w8, w3207; CHECK-SD-NEXT: sxtb w9, w0208; CHECK-SD-NEXT: sxtb w11, w4209; CHECK-SD-NEXT: sxtb w12, w1210; CHECK-SD-NEXT: sxtb w14, w5211; CHECK-SD-NEXT: sxtb w15, w2212; CHECK-SD-NEXT: sdiv w10, w9, w8213; CHECK-SD-NEXT: sdiv w13, w12, w11214; CHECK-SD-NEXT: msub w0, w10, w8, w9215; CHECK-SD-NEXT: sdiv w16, w15, w14216; CHECK-SD-NEXT: msub w1, w13, w11, w12217; CHECK-SD-NEXT: msub w2, w16, w14, w15218; CHECK-SD-NEXT: ret219;220; CHECK-GI-LABEL: sv3i8:221; CHECK-GI: // %bb.0: // %entry222; CHECK-GI-NEXT: sxtb w8, w0223; CHECK-GI-NEXT: sxtb w9, w3224; CHECK-GI-NEXT: sxtb w11, w1225; CHECK-GI-NEXT: sxtb w12, w4226; CHECK-GI-NEXT: sxtb w14, w2227; CHECK-GI-NEXT: sxtb w15, w5228; CHECK-GI-NEXT: sdiv w10, w8, w9229; CHECK-GI-NEXT: sdiv w13, w11, w12230; CHECK-GI-NEXT: msub w0, w10, w9, w8231; CHECK-GI-NEXT: sdiv w16, w14, w15232; CHECK-GI-NEXT: msub w1, w13, w12, w11233; CHECK-GI-NEXT: msub w2, w16, w15, w14234; CHECK-GI-NEXT: ret235entry:236 %s = srem <3 x i8> %d, %e237 ret <3 x i8> %s238}239 240define <4 x i8> @sv4i8(<4 x i8> %d, <4 x i8> %e) {241; CHECK-SD-LABEL: sv4i8:242; CHECK-SD: // %bb.0: // %entry243; CHECK-SD-NEXT: shl v0.4h, v0.4h, #8244; CHECK-SD-NEXT: shl v1.4h, v1.4h, #8245; CHECK-SD-NEXT: sshr v0.4h, v0.4h, #8246; CHECK-SD-NEXT: sshr v1.4h, v1.4h, #8247; CHECK-SD-NEXT: smov w11, v1.h[0]248; CHECK-SD-NEXT: smov w12, v0.h[0]249; CHECK-SD-NEXT: smov w8, v1.h[1]250; CHECK-SD-NEXT: smov w9, v0.h[1]251; CHECK-SD-NEXT: smov w14, v1.h[2]252; CHECK-SD-NEXT: smov w15, v0.h[2]253; CHECK-SD-NEXT: smov w17, v1.h[3]254; CHECK-SD-NEXT: smov w18, v0.h[3]255; CHECK-SD-NEXT: sdiv w13, w12, w11256; CHECK-SD-NEXT: sdiv w10, w9, w8257; CHECK-SD-NEXT: msub w11, w13, w11, w12258; CHECK-SD-NEXT: fmov s0, w11259; CHECK-SD-NEXT: sdiv w16, w15, w14260; CHECK-SD-NEXT: msub w8, w10, w8, w9261; CHECK-SD-NEXT: mov v0.h[1], w8262; CHECK-SD-NEXT: sdiv w9, w18, w17263; CHECK-SD-NEXT: msub w8, w16, w14, w15264; CHECK-SD-NEXT: mov v0.h[2], w8265; CHECK-SD-NEXT: msub w8, w9, w17, w18266; CHECK-SD-NEXT: mov v0.h[3], w8267; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0268; CHECK-SD-NEXT: ret269;270; CHECK-GI-LABEL: sv4i8:271; CHECK-GI: // %bb.0: // %entry272; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #0273; CHECK-GI-NEXT: ushll v1.4s, v1.4h, #0274; CHECK-GI-NEXT: shl v0.4s, v0.4s, #24275; CHECK-GI-NEXT: shl v1.4s, v1.4s, #24276; CHECK-GI-NEXT: sshr v0.4s, v0.4s, #24277; CHECK-GI-NEXT: sshr v1.4s, v1.4s, #24278; CHECK-GI-NEXT: fmov w8, s0279; CHECK-GI-NEXT: fmov w9, s1280; CHECK-GI-NEXT: mov w10, v1.s[1]281; CHECK-GI-NEXT: mov w11, v1.s[2]282; CHECK-GI-NEXT: mov w12, v1.s[3]283; CHECK-GI-NEXT: sdiv w8, w8, w9284; CHECK-GI-NEXT: mov w9, v0.s[1]285; CHECK-GI-NEXT: sdiv w9, w9, w10286; CHECK-GI-NEXT: mov w10, v0.s[2]287; CHECK-GI-NEXT: fmov s2, w8288; CHECK-GI-NEXT: sdiv w10, w10, w11289; CHECK-GI-NEXT: mov w11, v0.s[3]290; CHECK-GI-NEXT: mov v2.s[1], w9291; CHECK-GI-NEXT: sdiv w8, w11, w12292; CHECK-GI-NEXT: mov v2.s[2], w10293; CHECK-GI-NEXT: mov v2.s[3], w8294; CHECK-GI-NEXT: mls v0.4s, v2.4s, v1.4s295; CHECK-GI-NEXT: xtn v0.4h, v0.4s296; CHECK-GI-NEXT: ret297entry:298 %s = srem <4 x i8> %d, %e299 ret <4 x i8> %s300}301 302define <8 x i8> @sv8i8(<8 x i8> %d, <8 x i8> %e) {303; CHECK-SD-LABEL: sv8i8:304; CHECK-SD: // %bb.0: // %entry305; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q1306; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0307; CHECK-SD-NEXT: smov w11, v1.b[0]308; CHECK-SD-NEXT: smov w12, v0.b[0]309; CHECK-SD-NEXT: smov w8, v1.b[1]310; CHECK-SD-NEXT: smov w9, v0.b[1]311; CHECK-SD-NEXT: smov w14, v1.b[2]312; CHECK-SD-NEXT: smov w15, v0.b[2]313; CHECK-SD-NEXT: smov w17, v1.b[3]314; CHECK-SD-NEXT: smov w18, v0.b[3]315; CHECK-SD-NEXT: smov w1, v1.b[4]316; CHECK-SD-NEXT: smov w2, v0.b[4]317; CHECK-SD-NEXT: smov w4, v1.b[5]318; CHECK-SD-NEXT: smov w5, v0.b[5]319; CHECK-SD-NEXT: sdiv w13, w12, w11320; CHECK-SD-NEXT: sdiv w10, w9, w8321; CHECK-SD-NEXT: msub w11, w13, w11, w12322; CHECK-SD-NEXT: smov w13, v1.b[7]323; CHECK-SD-NEXT: fmov s2, w11324; CHECK-SD-NEXT: smov w11, v0.b[6]325; CHECK-SD-NEXT: sdiv w16, w15, w14326; CHECK-SD-NEXT: msub w8, w10, w8, w9327; CHECK-SD-NEXT: smov w10, v1.b[6]328; CHECK-SD-NEXT: mov v2.b[1], w8329; CHECK-SD-NEXT: sdiv w0, w18, w17330; CHECK-SD-NEXT: msub w8, w16, w14, w15331; CHECK-SD-NEXT: smov w14, v0.b[7]332; CHECK-SD-NEXT: mov v2.b[2], w8333; CHECK-SD-NEXT: sdiv w3, w2, w1334; CHECK-SD-NEXT: msub w8, w0, w17, w18335; CHECK-SD-NEXT: mov v2.b[3], w8336; CHECK-SD-NEXT: sdiv w9, w5, w4337; CHECK-SD-NEXT: msub w8, w3, w1, w2338; CHECK-SD-NEXT: mov v2.b[4], w8339; CHECK-SD-NEXT: sdiv w12, w11, w10340; CHECK-SD-NEXT: msub w8, w9, w4, w5341; CHECK-SD-NEXT: mov v2.b[5], w8342; CHECK-SD-NEXT: sdiv w9, w14, w13343; CHECK-SD-NEXT: msub w8, w12, w10, w11344; CHECK-SD-NEXT: mov v2.b[6], w8345; CHECK-SD-NEXT: msub w8, w9, w13, w14346; CHECK-SD-NEXT: mov v2.b[7], w8347; CHECK-SD-NEXT: fmov d0, d2348; CHECK-SD-NEXT: ret349;350; CHECK-GI-LABEL: sv8i8:351; CHECK-GI: // %bb.0: // %entry352; CHECK-GI-NEXT: sshll v0.8h, v0.8b, #0353; CHECK-GI-NEXT: sshll v1.8h, v1.8b, #0354; CHECK-GI-NEXT: sshll v2.4s, v0.4h, #0355; CHECK-GI-NEXT: sshll v3.4s, v1.4h, #0356; CHECK-GI-NEXT: sshll2 v0.4s, v0.8h, #0357; CHECK-GI-NEXT: sshll2 v1.4s, v1.8h, #0358; CHECK-GI-NEXT: fmov w8, s2359; CHECK-GI-NEXT: fmov w9, s3360; CHECK-GI-NEXT: mov w10, v3.s[1]361; CHECK-GI-NEXT: mov w11, v3.s[2]362; CHECK-GI-NEXT: mov w12, v3.s[3]363; CHECK-GI-NEXT: fmov w13, s1364; CHECK-GI-NEXT: mov w14, v1.s[1]365; CHECK-GI-NEXT: mov w15, v1.s[2]366; CHECK-GI-NEXT: mov w16, v1.s[3]367; CHECK-GI-NEXT: sdiv w8, w8, w9368; CHECK-GI-NEXT: mov w9, v2.s[1]369; CHECK-GI-NEXT: sdiv w9, w9, w10370; CHECK-GI-NEXT: mov w10, v2.s[2]371; CHECK-GI-NEXT: fmov s4, w8372; CHECK-GI-NEXT: sdiv w10, w10, w11373; CHECK-GI-NEXT: mov w11, v2.s[3]374; CHECK-GI-NEXT: mov v4.s[1], w9375; CHECK-GI-NEXT: sdiv w11, w11, w12376; CHECK-GI-NEXT: fmov w12, s0377; CHECK-GI-NEXT: mov v4.s[2], w10378; CHECK-GI-NEXT: sdiv w12, w12, w13379; CHECK-GI-NEXT: mov w13, v0.s[1]380; CHECK-GI-NEXT: mov v4.s[3], w11381; CHECK-GI-NEXT: mls v2.4s, v4.4s, v3.4s382; CHECK-GI-NEXT: sdiv w13, w13, w14383; CHECK-GI-NEXT: mov w14, v0.s[2]384; CHECK-GI-NEXT: fmov s5, w12385; CHECK-GI-NEXT: sdiv w14, w14, w15386; CHECK-GI-NEXT: mov w15, v0.s[3]387; CHECK-GI-NEXT: mov v5.s[1], w13388; CHECK-GI-NEXT: sdiv w8, w15, w16389; CHECK-GI-NEXT: mov v5.s[2], w14390; CHECK-GI-NEXT: mov v5.s[3], w8391; CHECK-GI-NEXT: mls v0.4s, v5.4s, v1.4s392; CHECK-GI-NEXT: uzp1 v0.8h, v2.8h, v0.8h393; CHECK-GI-NEXT: xtn v0.8b, v0.8h394; CHECK-GI-NEXT: ret395entry:396 %s = srem <8 x i8> %d, %e397 ret <8 x i8> %s398}399 400define <16 x i8> @sv16i8(<16 x i8> %d, <16 x i8> %e) {401; CHECK-SD-LABEL: sv16i8:402; CHECK-SD: // %bb.0: // %entry403; CHECK-SD-NEXT: stp x28, x27, [sp, #-80]! // 16-byte Folded Spill404; CHECK-SD-NEXT: stp x26, x25, [sp, #16] // 16-byte Folded Spill405; CHECK-SD-NEXT: stp x24, x23, [sp, #32] // 16-byte Folded Spill406; CHECK-SD-NEXT: stp x22, x21, [sp, #48] // 16-byte Folded Spill407; CHECK-SD-NEXT: stp x20, x19, [sp, #64] // 16-byte Folded Spill408; CHECK-SD-NEXT: .cfi_def_cfa_offset 80409; CHECK-SD-NEXT: .cfi_offset w19, -8410; CHECK-SD-NEXT: .cfi_offset w20, -16411; CHECK-SD-NEXT: .cfi_offset w21, -24412; CHECK-SD-NEXT: .cfi_offset w22, -32413; CHECK-SD-NEXT: .cfi_offset w23, -40414; CHECK-SD-NEXT: .cfi_offset w24, -48415; CHECK-SD-NEXT: .cfi_offset w25, -56416; CHECK-SD-NEXT: .cfi_offset w26, -64417; CHECK-SD-NEXT: .cfi_offset w27, -72418; CHECK-SD-NEXT: .cfi_offset w28, -80419; CHECK-SD-NEXT: smov w11, v1.b[0]420; CHECK-SD-NEXT: smov w12, v0.b[0]421; CHECK-SD-NEXT: smov w8, v1.b[1]422; CHECK-SD-NEXT: smov w9, v0.b[1]423; CHECK-SD-NEXT: smov w14, v1.b[2]424; CHECK-SD-NEXT: smov w15, v0.b[2]425; CHECK-SD-NEXT: smov w17, v1.b[3]426; CHECK-SD-NEXT: smov w18, v0.b[3]427; CHECK-SD-NEXT: smov w1, v1.b[4]428; CHECK-SD-NEXT: smov w2, v0.b[4]429; CHECK-SD-NEXT: smov w4, v1.b[5]430; CHECK-SD-NEXT: smov w5, v0.b[5]431; CHECK-SD-NEXT: sdiv w13, w12, w11432; CHECK-SD-NEXT: smov w7, v1.b[6]433; CHECK-SD-NEXT: smov w19, v0.b[6]434; CHECK-SD-NEXT: smov w21, v1.b[7]435; CHECK-SD-NEXT: smov w22, v0.b[7]436; CHECK-SD-NEXT: smov w24, v1.b[8]437; CHECK-SD-NEXT: smov w25, v0.b[8]438; CHECK-SD-NEXT: smov w27, v1.b[9]439; CHECK-SD-NEXT: smov w28, v0.b[9]440; CHECK-SD-NEXT: sdiv w10, w9, w8441; CHECK-SD-NEXT: msub w11, w13, w11, w12442; CHECK-SD-NEXT: smov w13, v1.b[11]443; CHECK-SD-NEXT: fmov s2, w11444; CHECK-SD-NEXT: smov w11, v0.b[10]445; CHECK-SD-NEXT: sdiv w16, w15, w14446; CHECK-SD-NEXT: msub w8, w10, w8, w9447; CHECK-SD-NEXT: smov w10, v1.b[10]448; CHECK-SD-NEXT: mov v2.b[1], w8449; CHECK-SD-NEXT: sdiv w0, w18, w17450; CHECK-SD-NEXT: msub w8, w16, w14, w15451; CHECK-SD-NEXT: smov w14, v0.b[11]452; CHECK-SD-NEXT: smov w16, v1.b[12]453; CHECK-SD-NEXT: mov v2.b[2], w8454; CHECK-SD-NEXT: sdiv w3, w2, w1455; CHECK-SD-NEXT: msub w8, w0, w17, w18456; CHECK-SD-NEXT: smov w17, v0.b[12]457; CHECK-SD-NEXT: smov w0, v1.b[13]458; CHECK-SD-NEXT: mov v2.b[3], w8459; CHECK-SD-NEXT: sdiv w6, w5, w4460; CHECK-SD-NEXT: msub w8, w3, w1, w2461; CHECK-SD-NEXT: smov w1, v0.b[13]462; CHECK-SD-NEXT: mov v2.b[4], w8463; CHECK-SD-NEXT: sdiv w20, w19, w7464; CHECK-SD-NEXT: msub w8, w6, w4, w5465; CHECK-SD-NEXT: mov v2.b[5], w8466; CHECK-SD-NEXT: sdiv w23, w22, w21467; CHECK-SD-NEXT: msub w8, w20, w7, w19468; CHECK-SD-NEXT: ldp x20, x19, [sp, #64] // 16-byte Folded Reload469; CHECK-SD-NEXT: mov v2.b[6], w8470; CHECK-SD-NEXT: sdiv w26, w25, w24471; CHECK-SD-NEXT: msub w8, w23, w21, w22472; CHECK-SD-NEXT: ldp x22, x21, [sp, #48] // 16-byte Folded Reload473; CHECK-SD-NEXT: mov v2.b[7], w8474; CHECK-SD-NEXT: sdiv w9, w28, w27475; CHECK-SD-NEXT: msub w8, w26, w24, w25476; CHECK-SD-NEXT: ldp x24, x23, [sp, #32] // 16-byte Folded Reload477; CHECK-SD-NEXT: ldp x26, x25, [sp, #16] // 16-byte Folded Reload478; CHECK-SD-NEXT: mov v2.b[8], w8479; CHECK-SD-NEXT: sdiv w12, w11, w10480; CHECK-SD-NEXT: msub w8, w9, w27, w28481; CHECK-SD-NEXT: mov v2.b[9], w8482; CHECK-SD-NEXT: sdiv w15, w14, w13483; CHECK-SD-NEXT: msub w8, w12, w10, w11484; CHECK-SD-NEXT: smov w10, v1.b[14]485; CHECK-SD-NEXT: smov w11, v0.b[14]486; CHECK-SD-NEXT: mov v2.b[10], w8487; CHECK-SD-NEXT: sdiv w18, w17, w16488; CHECK-SD-NEXT: msub w8, w15, w13, w14489; CHECK-SD-NEXT: smov w13, v1.b[15]490; CHECK-SD-NEXT: smov w14, v0.b[15]491; CHECK-SD-NEXT: mov v2.b[11], w8492; CHECK-SD-NEXT: sdiv w9, w1, w0493; CHECK-SD-NEXT: msub w8, w18, w16, w17494; CHECK-SD-NEXT: mov v2.b[12], w8495; CHECK-SD-NEXT: sdiv w12, w11, w10496; CHECK-SD-NEXT: msub w8, w9, w0, w1497; CHECK-SD-NEXT: mov v2.b[13], w8498; CHECK-SD-NEXT: sdiv w9, w14, w13499; CHECK-SD-NEXT: msub w8, w12, w10, w11500; CHECK-SD-NEXT: mov v2.b[14], w8501; CHECK-SD-NEXT: msub w8, w9, w13, w14502; CHECK-SD-NEXT: mov v2.b[15], w8503; CHECK-SD-NEXT: mov v0.16b, v2.16b504; CHECK-SD-NEXT: ldp x28, x27, [sp], #80 // 16-byte Folded Reload505; CHECK-SD-NEXT: ret506;507; CHECK-GI-LABEL: sv16i8:508; CHECK-GI: // %bb.0: // %entry509; CHECK-GI-NEXT: sshll v4.8h, v0.8b, #0510; CHECK-GI-NEXT: sshll v5.8h, v1.8b, #0511; CHECK-GI-NEXT: sshll2 v6.8h, v0.16b, #0512; CHECK-GI-NEXT: sshll2 v7.8h, v1.16b, #0513; CHECK-GI-NEXT: sshll v2.4s, v4.4h, #0514; CHECK-GI-NEXT: sshll v3.4s, v5.4h, #0515; CHECK-GI-NEXT: sshll2 v4.4s, v4.8h, #0516; CHECK-GI-NEXT: sshll2 v5.4s, v5.8h, #0517; CHECK-GI-NEXT: sshll v0.4s, v6.4h, #0518; CHECK-GI-NEXT: sshll v1.4s, v7.4h, #0519; CHECK-GI-NEXT: sshll2 v6.4s, v6.8h, #0520; CHECK-GI-NEXT: sshll2 v7.4s, v7.8h, #0521; CHECK-GI-NEXT: fmov w8, s2522; CHECK-GI-NEXT: fmov w9, s3523; CHECK-GI-NEXT: mov w12, v3.s[3]524; CHECK-GI-NEXT: fmov w13, s5525; CHECK-GI-NEXT: mov w16, v5.s[3]526; CHECK-GI-NEXT: fmov w17, s1527; CHECK-GI-NEXT: mov w18, v1.s[1]528; CHECK-GI-NEXT: mov w0, v1.s[2]529; CHECK-GI-NEXT: mov w1, v1.s[3]530; CHECK-GI-NEXT: sdiv w10, w8, w9531; CHECK-GI-NEXT: mov w8, v2.s[1]532; CHECK-GI-NEXT: mov w9, v3.s[1]533; CHECK-GI-NEXT: fmov w2, s7534; CHECK-GI-NEXT: mov w3, v7.s[1]535; CHECK-GI-NEXT: mov w4, v7.s[2]536; CHECK-GI-NEXT: mov w5, v7.s[3]537; CHECK-GI-NEXT: sdiv w11, w8, w9538; CHECK-GI-NEXT: mov w8, v2.s[2]539; CHECK-GI-NEXT: mov w9, v3.s[2]540; CHECK-GI-NEXT: fmov s16, w10541; CHECK-GI-NEXT: sdiv w9, w8, w9542; CHECK-GI-NEXT: mov w8, v2.s[3]543; CHECK-GI-NEXT: mov v16.s[1], w11544; CHECK-GI-NEXT: sdiv w8, w8, w12545; CHECK-GI-NEXT: fmov w12, s4546; CHECK-GI-NEXT: mov v16.s[2], w9547; CHECK-GI-NEXT: sdiv w14, w12, w13548; CHECK-GI-NEXT: mov w12, v4.s[1]549; CHECK-GI-NEXT: mov w13, v5.s[1]550; CHECK-GI-NEXT: mov v16.s[3], w8551; CHECK-GI-NEXT: mls v2.4s, v16.4s, v3.4s552; CHECK-GI-NEXT: sdiv w15, w12, w13553; CHECK-GI-NEXT: mov w12, v4.s[2]554; CHECK-GI-NEXT: mov w13, v5.s[2]555; CHECK-GI-NEXT: fmov s17, w14556; CHECK-GI-NEXT: sdiv w13, w12, w13557; CHECK-GI-NEXT: mov w12, v4.s[3]558; CHECK-GI-NEXT: mov v17.s[1], w15559; CHECK-GI-NEXT: sdiv w12, w12, w16560; CHECK-GI-NEXT: fmov w16, s0561; CHECK-GI-NEXT: mov v17.s[2], w13562; CHECK-GI-NEXT: sdiv w16, w16, w17563; CHECK-GI-NEXT: mov w17, v0.s[1]564; CHECK-GI-NEXT: mov v17.s[3], w12565; CHECK-GI-NEXT: mls v4.4s, v17.4s, v5.4s566; CHECK-GI-NEXT: sdiv w17, w17, w18567; CHECK-GI-NEXT: mov w18, v0.s[2]568; CHECK-GI-NEXT: fmov s18, w16569; CHECK-GI-NEXT: sdiv w18, w18, w0570; CHECK-GI-NEXT: mov w0, v0.s[3]571; CHECK-GI-NEXT: mov v18.s[1], w17572; CHECK-GI-NEXT: sdiv w0, w0, w1573; CHECK-GI-NEXT: fmov w1, s6574; CHECK-GI-NEXT: mov v18.s[2], w18575; CHECK-GI-NEXT: sdiv w1, w1, w2576; CHECK-GI-NEXT: mov w2, v6.s[1]577; CHECK-GI-NEXT: mov v18.s[3], w0578; CHECK-GI-NEXT: mls v0.4s, v18.4s, v1.4s579; CHECK-GI-NEXT: uzp1 v1.8h, v2.8h, v4.8h580; CHECK-GI-NEXT: sdiv w2, w2, w3581; CHECK-GI-NEXT: mov w3, v6.s[2]582; CHECK-GI-NEXT: fmov s19, w1583; CHECK-GI-NEXT: sdiv w3, w3, w4584; CHECK-GI-NEXT: mov w4, v6.s[3]585; CHECK-GI-NEXT: mov v19.s[1], w2586; CHECK-GI-NEXT: sdiv w10, w4, w5587; CHECK-GI-NEXT: mov v19.s[2], w3588; CHECK-GI-NEXT: mov v19.s[3], w10589; CHECK-GI-NEXT: mls v6.4s, v19.4s, v7.4s590; CHECK-GI-NEXT: uzp1 v0.8h, v0.8h, v6.8h591; CHECK-GI-NEXT: uzp1 v0.16b, v1.16b, v0.16b592; CHECK-GI-NEXT: ret593entry:594 %s = srem <16 x i8> %d, %e595 ret <16 x i8> %s596}597 598define <32 x i8> @sv32i8(<32 x i8> %d, <32 x i8> %e) {599; CHECK-SD-LABEL: sv32i8:600; CHECK-SD: // %bb.0: // %entry601; CHECK-SD-NEXT: sub sp, sp, #304602; CHECK-SD-NEXT: stp x29, x30, [sp, #208] // 16-byte Folded Spill603; CHECK-SD-NEXT: stp x28, x27, [sp, #224] // 16-byte Folded Spill604; CHECK-SD-NEXT: stp x26, x25, [sp, #240] // 16-byte Folded Spill605; CHECK-SD-NEXT: stp x24, x23, [sp, #256] // 16-byte Folded Spill606; CHECK-SD-NEXT: stp x22, x21, [sp, #272] // 16-byte Folded Spill607; CHECK-SD-NEXT: stp x20, x19, [sp, #288] // 16-byte Folded Spill608; CHECK-SD-NEXT: .cfi_def_cfa_offset 304609; CHECK-SD-NEXT: .cfi_offset w19, -8610; CHECK-SD-NEXT: .cfi_offset w20, -16611; CHECK-SD-NEXT: .cfi_offset w21, -24612; CHECK-SD-NEXT: .cfi_offset w22, -32613; CHECK-SD-NEXT: .cfi_offset w23, -40614; CHECK-SD-NEXT: .cfi_offset w24, -48615; CHECK-SD-NEXT: .cfi_offset w25, -56616; CHECK-SD-NEXT: .cfi_offset w26, -64617; CHECK-SD-NEXT: .cfi_offset w27, -72618; CHECK-SD-NEXT: .cfi_offset w28, -80619; CHECK-SD-NEXT: .cfi_offset w30, -88620; CHECK-SD-NEXT: .cfi_offset w29, -96621; CHECK-SD-NEXT: smov w8, v2.b[1]622; CHECK-SD-NEXT: smov w9, v0.b[1]623; CHECK-SD-NEXT: smov w19, v3.b[7]624; CHECK-SD-NEXT: smov w7, v1.b[7]625; CHECK-SD-NEXT: smov w6, v3.b[8]626; CHECK-SD-NEXT: smov w3, v1.b[8]627; CHECK-SD-NEXT: smov w13, v3.b[0]628; CHECK-SD-NEXT: smov w5, v3.b[1]629; CHECK-SD-NEXT: smov w0, v1.b[1]630; CHECK-SD-NEXT: smov w12, v3.b[2]631; CHECK-SD-NEXT: smov w17, v3.b[3]632; CHECK-SD-NEXT: smov w16, v1.b[3]633; CHECK-SD-NEXT: str w8, [sp, #80] // 4-byte Spill634; CHECK-SD-NEXT: sdiv w10, w9, w8635; CHECK-SD-NEXT: smov w8, v2.b[0]636; CHECK-SD-NEXT: str w9, [sp, #88] // 4-byte Spill637; CHECK-SD-NEXT: smov w9, v0.b[0]638; CHECK-SD-NEXT: ldr w30, [sp, #80] // 4-byte Reload639; CHECK-SD-NEXT: smov w15, v3.b[4]640; CHECK-SD-NEXT: smov w14, v1.b[4]641; CHECK-SD-NEXT: smov w4, v3.b[5]642; CHECK-SD-NEXT: smov w1, v1.b[5]643; CHECK-SD-NEXT: smov w2, v3.b[6]644; CHECK-SD-NEXT: smov w18, v1.b[6]645; CHECK-SD-NEXT: str w8, [sp, #32] // 4-byte Spill646; CHECK-SD-NEXT: smov w21, v3.b[9]647; CHECK-SD-NEXT: smov w20, v1.b[9]648; CHECK-SD-NEXT: str w9, [sp, #40] // 4-byte Spill649; CHECK-SD-NEXT: ldr w29, [sp, #32] // 4-byte Reload650; CHECK-SD-NEXT: sdiv w11, w9, w8651; CHECK-SD-NEXT: smov w8, v2.b[2]652; CHECK-SD-NEXT: smov w9, v0.b[2]653; CHECK-SD-NEXT: str w10, [sp, #96] // 4-byte Spill654; CHECK-SD-NEXT: stp w8, w9, [sp, #16] // 8-byte Folded Spill655; CHECK-SD-NEXT: sdiv w10, w9, w8656; CHECK-SD-NEXT: smov w8, v2.b[3]657; CHECK-SD-NEXT: smov w9, v0.b[3]658; CHECK-SD-NEXT: stp w11, w8, [sp, #48] // 8-byte Folded Spill659; CHECK-SD-NEXT: str w10, [sp, #24] // 4-byte Spill660; CHECK-SD-NEXT: sdiv w10, w9, w8661; CHECK-SD-NEXT: smov w8, v2.b[4]662; CHECK-SD-NEXT: str w8, [sp, #28] // 4-byte Spill663; CHECK-SD-NEXT: stp w9, w10, [sp, #56] // 8-byte Folded Spill664; CHECK-SD-NEXT: smov w9, v0.b[4]665; CHECK-SD-NEXT: sdiv w27, w0, w5666; CHECK-SD-NEXT: str w9, [sp, #36] // 4-byte Spill667; CHECK-SD-NEXT: sdiv w10, w9, w8668; CHECK-SD-NEXT: smov w8, v2.b[5]669; CHECK-SD-NEXT: smov w9, v0.b[5]670; CHECK-SD-NEXT: str w8, [sp, #76] // 4-byte Spill671; CHECK-SD-NEXT: str w9, [sp, #84] // 4-byte Spill672; CHECK-SD-NEXT: str w10, [sp, #44] // 4-byte Spill673; CHECK-SD-NEXT: sdiv w10, w9, w8674; CHECK-SD-NEXT: smov w8, v2.b[6]675; CHECK-SD-NEXT: smov w9, v0.b[6]676; CHECK-SD-NEXT: stp w8, w9, [sp, #64] // 8-byte Folded Spill677; CHECK-SD-NEXT: str w10, [sp, #92] // 4-byte Spill678; CHECK-SD-NEXT: sdiv w10, w9, w8679; CHECK-SD-NEXT: smov w8, v2.b[7]680; CHECK-SD-NEXT: smov w9, v0.b[7]681; CHECK-SD-NEXT: stp w8, w9, [sp, #112] // 8-byte Folded Spill682; CHECK-SD-NEXT: sdiv w11, w9, w8683; CHECK-SD-NEXT: smov w8, v2.b[8]684; CHECK-SD-NEXT: smov w9, v0.b[8]685; CHECK-SD-NEXT: str w10, [sp, #72] // 4-byte Spill686; CHECK-SD-NEXT: stp w8, w9, [sp, #100] // 8-byte Folded Spill687; CHECK-SD-NEXT: sdiv w10, w9, w8688; CHECK-SD-NEXT: smov w8, v2.b[9]689; CHECK-SD-NEXT: smov w9, v0.b[9]690; CHECK-SD-NEXT: stp w8, w9, [sp, #136] // 8-byte Folded Spill691; CHECK-SD-NEXT: str w10, [sp, #108] // 4-byte Spill692; CHECK-SD-NEXT: sdiv w10, w9, w8693; CHECK-SD-NEXT: smov w8, v2.b[10]694; CHECK-SD-NEXT: smov w9, v0.b[10]695; CHECK-SD-NEXT: stp w11, w8, [sp, #120] // 8-byte Folded Spill696; CHECK-SD-NEXT: str w10, [sp, #144] // 4-byte Spill697; CHECK-SD-NEXT: sdiv w10, w9, w8698; CHECK-SD-NEXT: smov w8, v2.b[11]699; CHECK-SD-NEXT: stp w9, w10, [sp, #128] // 8-byte Folded Spill700; CHECK-SD-NEXT: smov w9, v0.b[11]701; CHECK-SD-NEXT: sdiv w25, w16, w17702; CHECK-SD-NEXT: stp w8, w9, [sp, #172] // 8-byte Folded Spill703; CHECK-SD-NEXT: sdiv w11, w9, w8704; CHECK-SD-NEXT: smov w8, v2.b[12]705; CHECK-SD-NEXT: smov w9, v0.b[12]706; CHECK-SD-NEXT: str w8, [sp, #152] // 4-byte Spill707; CHECK-SD-NEXT: str w9, [sp, #160] // 4-byte Spill708; CHECK-SD-NEXT: sdiv w10, w9, w8709; CHECK-SD-NEXT: smov w8, v2.b[13]710; CHECK-SD-NEXT: smov w9, v0.b[13]711; CHECK-SD-NEXT: stp w8, w9, [sp, #196] // 8-byte Folded Spill712; CHECK-SD-NEXT: str w10, [sp, #168] // 4-byte Spill713; CHECK-SD-NEXT: sdiv w10, w9, w8714; CHECK-SD-NEXT: smov w8, v2.b[14]715; CHECK-SD-NEXT: smov w9, v0.b[14]716; CHECK-SD-NEXT: stp w11, w8, [sp, #180] // 8-byte Folded Spill717; CHECK-SD-NEXT: smov w11, v1.b[2]718; CHECK-SD-NEXT: str w10, [sp, #204] // 4-byte Spill719; CHECK-SD-NEXT: sdiv w10, w9, w8720; CHECK-SD-NEXT: smov w8, v2.b[15]721; CHECK-SD-NEXT: str w8, [sp, #148] // 4-byte Spill722; CHECK-SD-NEXT: stp w9, w10, [sp, #188] // 8-byte Folded Spill723; CHECK-SD-NEXT: smov w9, v0.b[15]724; CHECK-SD-NEXT: sdiv w22, w11, w12725; CHECK-SD-NEXT: str w9, [sp, #156] // 4-byte Spill726; CHECK-SD-NEXT: sdiv w10, w9, w8727; CHECK-SD-NEXT: str w10, [sp, #164] // 4-byte Spill728; CHECK-SD-NEXT: smov w10, v1.b[0]729; CHECK-SD-NEXT: sdiv w9, w7, w19730; CHECK-SD-NEXT: sdiv w8, w3, w6731; CHECK-SD-NEXT: sdiv w23, w10, w13732; CHECK-SD-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill733; CHECK-SD-NEXT: ldr w8, [sp, #96] // 4-byte Reload734; CHECK-SD-NEXT: ldr w9, [sp, #88] // 4-byte Reload735; CHECK-SD-NEXT: msub w9, w8, w30, w9736; CHECK-SD-NEXT: ldr w8, [sp, #48] // 4-byte Reload737; CHECK-SD-NEXT: ldr w30, [sp, #40] // 4-byte Reload738; CHECK-SD-NEXT: msub w8, w8, w29, w30739; CHECK-SD-NEXT: ldp x29, x30, [sp, #208] // 16-byte Folded Reload740; CHECK-SD-NEXT: fmov s0, w8741; CHECK-SD-NEXT: msub w10, w23, w13, w10742; CHECK-SD-NEXT: sdiv w24, w14, w15743; CHECK-SD-NEXT: msub w13, w27, w5, w0744; CHECK-SD-NEXT: ldr w5, [sp, #16] // 4-byte Reload745; CHECK-SD-NEXT: mov v0.b[1], w9746; CHECK-SD-NEXT: msub w9, w22, w12, w11747; CHECK-SD-NEXT: smov w11, v1.b[10]748; CHECK-SD-NEXT: fmov s2, w10749; CHECK-SD-NEXT: ldp w10, w8, [sp, #20] // 8-byte Folded Reload750; CHECK-SD-NEXT: mov v2.b[1], w13751; CHECK-SD-NEXT: msub w8, w8, w5, w10752; CHECK-SD-NEXT: ldr w5, [sp, #52] // 4-byte Reload753; CHECK-SD-NEXT: smov w10, v3.b[10]754; CHECK-SD-NEXT: sdiv w28, w1, w4755; CHECK-SD-NEXT: ldp w13, w12, [sp, #56] // 8-byte Folded Reload756; CHECK-SD-NEXT: mov v2.b[2], w9757; CHECK-SD-NEXT: mov v0.b[2], w8758; CHECK-SD-NEXT: msub w8, w25, w17, w16759; CHECK-SD-NEXT: ldr w17, [sp, #28] // 4-byte Reload760; CHECK-SD-NEXT: ldr w16, [sp, #36] // 4-byte Reload761; CHECK-SD-NEXT: msub w12, w12, w5, w13762; CHECK-SD-NEXT: ldr w13, [sp, #44] // 4-byte Reload763; CHECK-SD-NEXT: ldr w5, [sp, #136] // 4-byte Reload764; CHECK-SD-NEXT: mov v2.b[3], w8765; CHECK-SD-NEXT: msub w8, w24, w15, w14766; CHECK-SD-NEXT: ldr w15, [sp, #92] // 4-byte Reload767; CHECK-SD-NEXT: mov v0.b[3], w12768; CHECK-SD-NEXT: msub w13, w13, w17, w16769; CHECK-SD-NEXT: ldr w17, [sp, #76] // 4-byte Reload770; CHECK-SD-NEXT: sdiv w26, w18, w2771; CHECK-SD-NEXT: ldr w16, [sp, #84] // 4-byte Reload772; CHECK-SD-NEXT: smov w12, v3.b[11]773; CHECK-SD-NEXT: msub w15, w15, w17, w16774; CHECK-SD-NEXT: smov w14, v1.b[11]775; CHECK-SD-NEXT: mov v2.b[4], w8776; CHECK-SD-NEXT: msub w8, w28, w4, w1777; CHECK-SD-NEXT: ldr w1, [sp, #64] // 4-byte Reload778; CHECK-SD-NEXT: mov v0.b[4], w13779; CHECK-SD-NEXT: ldr w4, [sp, #100] // 4-byte Reload780; CHECK-SD-NEXT: ldp w17, w16, [sp, #68] // 8-byte Folded Reload781; CHECK-SD-NEXT: ldp x24, x23, [sp, #256] // 16-byte Folded Reload782; CHECK-SD-NEXT: mov v2.b[5], w8783; CHECK-SD-NEXT: ldp x28, x27, [sp, #224] // 16-byte Folded Reload784; CHECK-SD-NEXT: mov v0.b[5], w15785; CHECK-SD-NEXT: msub w16, w16, w1, w17786; CHECK-SD-NEXT: smov w15, v3.b[12]787; CHECK-SD-NEXT: msub w8, w26, w2, w18788; CHECK-SD-NEXT: ldr w2, [sp, #112] // 4-byte Reload789; CHECK-SD-NEXT: sdiv w0, w20, w21790; CHECK-SD-NEXT: ldp w1, w18, [sp, #116] // 8-byte Folded Reload791; CHECK-SD-NEXT: smov w17, v1.b[12]792; CHECK-SD-NEXT: ldp x26, x25, [sp, #240] // 16-byte Folded Reload793; CHECK-SD-NEXT: mov v2.b[6], w8794; CHECK-SD-NEXT: ldr w8, [sp, #12] // 4-byte Reload795; CHECK-SD-NEXT: mov v0.b[6], w16796; CHECK-SD-NEXT: msub w18, w18, w2, w1797; CHECK-SD-NEXT: msub w8, w8, w19, w7798; CHECK-SD-NEXT: ldp w2, w1, [sp, #104] // 8-byte Folded Reload799; CHECK-SD-NEXT: mov v0.b[7], w18800; CHECK-SD-NEXT: smov w18, v3.b[13]801; CHECK-SD-NEXT: mov v2.b[7], w8802; CHECK-SD-NEXT: ldr w8, [sp, #8] // 4-byte Reload803; CHECK-SD-NEXT: sdiv w9, w11, w10804; CHECK-SD-NEXT: msub w1, w1, w4, w2805; CHECK-SD-NEXT: smov w2, v1.b[13]806; CHECK-SD-NEXT: msub w8, w8, w6, w3807; CHECK-SD-NEXT: ldp w4, w3, [sp, #140] // 8-byte Folded Reload808; CHECK-SD-NEXT: mov v0.b[8], w1809; CHECK-SD-NEXT: mov v2.b[8], w8810; CHECK-SD-NEXT: msub w8, w0, w21, w20811; CHECK-SD-NEXT: msub w3, w3, w5, w4812; CHECK-SD-NEXT: ldr w5, [sp, #124] // 4-byte Reload813; CHECK-SD-NEXT: ldp w4, w1, [sp, #128] // 8-byte Folded Reload814; CHECK-SD-NEXT: sdiv w13, w14, w12815; CHECK-SD-NEXT: ldp x20, x19, [sp, #288] // 16-byte Folded Reload816; CHECK-SD-NEXT: mov v2.b[9], w8817; CHECK-SD-NEXT: mov v0.b[9], w3818; CHECK-SD-NEXT: msub w8, w9, w10, w11819; CHECK-SD-NEXT: msub w1, w1, w5, w4820; CHECK-SD-NEXT: ldr w4, [sp, #172] // 4-byte Reload821; CHECK-SD-NEXT: smov w9, v3.b[14]822; CHECK-SD-NEXT: ldp w3, w11, [sp, #176] // 8-byte Folded Reload823; CHECK-SD-NEXT: smov w10, v1.b[14]824; CHECK-SD-NEXT: ldp x22, x21, [sp, #272] // 16-byte Folded Reload825; CHECK-SD-NEXT: mov v2.b[10], w8826; CHECK-SD-NEXT: mov v0.b[10], w1827; CHECK-SD-NEXT: ldr w1, [sp, #152] // 4-byte Reload828; CHECK-SD-NEXT: msub w11, w11, w4, w3829; CHECK-SD-NEXT: sdiv w16, w17, w15830; CHECK-SD-NEXT: msub w8, w13, w12, w14831; CHECK-SD-NEXT: ldr w13, [sp, #168] // 4-byte Reload832; CHECK-SD-NEXT: ldr w14, [sp, #160] // 4-byte Reload833; CHECK-SD-NEXT: mov v0.b[11], w11834; CHECK-SD-NEXT: smov w11, v3.b[15]835; CHECK-SD-NEXT: msub w13, w13, w1, w14836; CHECK-SD-NEXT: smov w14, v1.b[15]837; CHECK-SD-NEXT: mov v2.b[11], w8838; CHECK-SD-NEXT: mov v0.b[12], w13839; CHECK-SD-NEXT: sdiv w0, w2, w18840; CHECK-SD-NEXT: msub w8, w16, w15, w17841; CHECK-SD-NEXT: ldr w17, [sp, #196] // 4-byte Reload842; CHECK-SD-NEXT: ldp w16, w15, [sp, #200] // 8-byte Folded Reload843; CHECK-SD-NEXT: mov v2.b[12], w8844; CHECK-SD-NEXT: msub w15, w15, w17, w16845; CHECK-SD-NEXT: ldp w17, w16, [sp, #188] // 8-byte Folded Reload846; CHECK-SD-NEXT: mov v0.b[13], w15847; CHECK-SD-NEXT: sdiv w12, w10, w9848; CHECK-SD-NEXT: msub w8, w0, w18, w2849; CHECK-SD-NEXT: ldr w18, [sp, #184] // 4-byte Reload850; CHECK-SD-NEXT: msub w16, w16, w18, w17851; CHECK-SD-NEXT: mov v2.b[13], w8852; CHECK-SD-NEXT: mov v0.b[14], w16853; CHECK-SD-NEXT: sdiv w13, w14, w11854; CHECK-SD-NEXT: msub w8, w12, w9, w10855; CHECK-SD-NEXT: ldr w9, [sp, #164] // 4-byte Reload856; CHECK-SD-NEXT: ldr w12, [sp, #148] // 4-byte Reload857; CHECK-SD-NEXT: ldr w10, [sp, #156] // 4-byte Reload858; CHECK-SD-NEXT: mov v2.b[14], w8859; CHECK-SD-NEXT: msub w9, w9, w12, w10860; CHECK-SD-NEXT: mov v0.b[15], w9861; CHECK-SD-NEXT: msub w8, w13, w11, w14862; CHECK-SD-NEXT: mov v2.b[15], w8863; CHECK-SD-NEXT: mov v1.16b, v2.16b864; CHECK-SD-NEXT: add sp, sp, #304865; CHECK-SD-NEXT: ret866;867; CHECK-GI-LABEL: sv32i8:868; CHECK-GI: // %bb.0: // %entry869; CHECK-GI-NEXT: sub sp, sp, #112870; CHECK-GI-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill871; CHECK-GI-NEXT: stp x28, x27, [sp, #32] // 16-byte Folded Spill872; CHECK-GI-NEXT: stp x26, x25, [sp, #48] // 16-byte Folded Spill873; CHECK-GI-NEXT: stp x24, x23, [sp, #64] // 16-byte Folded Spill874; CHECK-GI-NEXT: stp x22, x21, [sp, #80] // 16-byte Folded Spill875; CHECK-GI-NEXT: stp x20, x19, [sp, #96] // 16-byte Folded Spill876; CHECK-GI-NEXT: .cfi_def_cfa_offset 112877; CHECK-GI-NEXT: .cfi_offset w19, -8878; CHECK-GI-NEXT: .cfi_offset w20, -16879; CHECK-GI-NEXT: .cfi_offset w21, -24880; CHECK-GI-NEXT: .cfi_offset w22, -32881; CHECK-GI-NEXT: .cfi_offset w23, -40882; CHECK-GI-NEXT: .cfi_offset w24, -48883; CHECK-GI-NEXT: .cfi_offset w25, -56884; CHECK-GI-NEXT: .cfi_offset w26, -64885; CHECK-GI-NEXT: .cfi_offset w27, -72886; CHECK-GI-NEXT: .cfi_offset w28, -80887; CHECK-GI-NEXT: .cfi_offset w30, -88888; CHECK-GI-NEXT: .cfi_offset w29, -96889; CHECK-GI-NEXT: sshll v4.8h, v0.8b, #0890; CHECK-GI-NEXT: sshll v5.8h, v2.8b, #0891; CHECK-GI-NEXT: sshll v16.8h, v1.8b, #0892; CHECK-GI-NEXT: sshll v17.8h, v3.8b, #0893; CHECK-GI-NEXT: sshll v6.4s, v4.4h, #0894; CHECK-GI-NEXT: sshll v7.4s, v5.4h, #0895; CHECK-GI-NEXT: sshll2 v4.4s, v4.8h, #0896; CHECK-GI-NEXT: sshll2 v5.4s, v5.8h, #0897; CHECK-GI-NEXT: sshll v18.4s, v16.4h, #0898; CHECK-GI-NEXT: sshll v19.4s, v17.4h, #0899; CHECK-GI-NEXT: sshll2 v16.4s, v16.8h, #0900; CHECK-GI-NEXT: sshll2 v17.4s, v17.8h, #0901; CHECK-GI-NEXT: fmov w8, s6902; CHECK-GI-NEXT: fmov w9, s7903; CHECK-GI-NEXT: mov w12, v7.s[3]904; CHECK-GI-NEXT: fmov w13, s5905; CHECK-GI-NEXT: mov w14, v5.s[1]906; CHECK-GI-NEXT: mov w16, v5.s[3]907; CHECK-GI-NEXT: fmov w6, s19908; CHECK-GI-NEXT: mov w7, v19.s[3]909; CHECK-GI-NEXT: fmov w21, s17910; CHECK-GI-NEXT: sdiv w10, w8, w9911; CHECK-GI-NEXT: mov w8, v6.s[1]912; CHECK-GI-NEXT: mov w9, v7.s[1]913; CHECK-GI-NEXT: mov w22, v17.s[3]914; CHECK-GI-NEXT: sdiv w11, w8, w9915; CHECK-GI-NEXT: mov w8, v6.s[2]916; CHECK-GI-NEXT: mov w9, v7.s[2]917; CHECK-GI-NEXT: fmov s20, w10918; CHECK-GI-NEXT: sdiv w9, w8, w9919; CHECK-GI-NEXT: mov w8, v6.s[3]920; CHECK-GI-NEXT: sshll2 v6.8h, v0.16b, #0921; CHECK-GI-NEXT: mov v20.s[1], w11922; CHECK-GI-NEXT: sshll v0.8h, v0.8b, #0923; CHECK-GI-NEXT: sshll v28.4s, v0.4h, #0924; CHECK-GI-NEXT: sshll2 v0.4s, v0.8h, #0925; CHECK-GI-NEXT: sdiv w8, w8, w12926; CHECK-GI-NEXT: fmov w12, s4927; CHECK-GI-NEXT: mov v20.s[2], w9928; CHECK-GI-NEXT: sdiv w13, w12, w13929; CHECK-GI-NEXT: mov w12, v4.s[1]930; CHECK-GI-NEXT: str w8, [sp, #12] // 4-byte Spill931; CHECK-GI-NEXT: ldr w11, [sp, #12] // 4-byte Reload932; CHECK-GI-NEXT: mov v20.s[3], w11933; CHECK-GI-NEXT: sdiv w15, w12, w14934; CHECK-GI-NEXT: mov w12, v4.s[2]935; CHECK-GI-NEXT: mov w14, v5.s[2]936; CHECK-GI-NEXT: sshll v5.4s, v6.4h, #0937; CHECK-GI-NEXT: fmov s21, w13938; CHECK-GI-NEXT: sdiv w14, w12, w14939; CHECK-GI-NEXT: mov w12, v4.s[3]940; CHECK-GI-NEXT: sshll2 v4.8h, v2.16b, #0941; CHECK-GI-NEXT: mov v21.s[1], w15942; CHECK-GI-NEXT: sshll v2.8h, v2.8b, #0943; CHECK-GI-NEXT: sshll v7.4s, v4.4h, #0944; CHECK-GI-NEXT: sshll v30.4s, v2.4h, #0945; CHECK-GI-NEXT: sshll2 v2.4s, v2.8h, #0946; CHECK-GI-NEXT: fmov w17, s7947; CHECK-GI-NEXT: mls v28.4s, v20.4s, v30.4s948; CHECK-GI-NEXT: sdiv w12, w12, w16949; CHECK-GI-NEXT: fmov w16, s5950; CHECK-GI-NEXT: mov v21.s[2], w14951; CHECK-GI-NEXT: sdiv w18, w16, w17952; CHECK-GI-NEXT: mov w16, v5.s[1]953; CHECK-GI-NEXT: mov w17, v7.s[1]954; CHECK-GI-NEXT: mov v21.s[3], w12955; CHECK-GI-NEXT: mls v0.4s, v21.4s, v2.4s956; CHECK-GI-NEXT: sdiv w1, w16, w17957; CHECK-GI-NEXT: mov w16, v5.s[2]958; CHECK-GI-NEXT: mov w17, v7.s[2]959; CHECK-GI-NEXT: fmov s22, w18960; CHECK-GI-NEXT: uzp1 v0.8h, v28.8h, v0.8h961; CHECK-GI-NEXT: sdiv w0, w16, w17962; CHECK-GI-NEXT: mov w16, v5.s[3]963; CHECK-GI-NEXT: mov w17, v7.s[3]964; CHECK-GI-NEXT: sshll2 v5.4s, v6.8h, #0965; CHECK-GI-NEXT: sshll2 v7.4s, v4.8h, #0966; CHECK-GI-NEXT: mov v22.s[1], w1967; CHECK-GI-NEXT: sshll v6.4s, v6.4h, #0968; CHECK-GI-NEXT: sshll v4.4s, v4.4h, #0969; CHECK-GI-NEXT: fmov w2, s7970; CHECK-GI-NEXT: mov w3, v7.s[3]971; CHECK-GI-NEXT: sdiv w16, w16, w17972; CHECK-GI-NEXT: fmov w17, s5973; CHECK-GI-NEXT: mov v22.s[2], w0974; CHECK-GI-NEXT: sdiv w5, w17, w2975; CHECK-GI-NEXT: mov w17, v5.s[1]976; CHECK-GI-NEXT: mov w2, v7.s[1]977; CHECK-GI-NEXT: mov v22.s[3], w16978; CHECK-GI-NEXT: mls v6.4s, v22.4s, v4.4s979; CHECK-GI-NEXT: sdiv w4, w17, w2980; CHECK-GI-NEXT: mov w17, v5.s[2]981; CHECK-GI-NEXT: mov w2, v7.s[2]982; CHECK-GI-NEXT: fmov s23, w5983; CHECK-GI-NEXT: sdiv w2, w17, w2984; CHECK-GI-NEXT: mov w17, v5.s[3]985; CHECK-GI-NEXT: mov v23.s[1], w4986; CHECK-GI-NEXT: sdiv w17, w17, w3987; CHECK-GI-NEXT: fmov w3, s18988; CHECK-GI-NEXT: mov v23.s[2], w2989; CHECK-GI-NEXT: sdiv w20, w3, w6990; CHECK-GI-NEXT: mov w3, v18.s[1]991; CHECK-GI-NEXT: mov w6, v19.s[1]992; CHECK-GI-NEXT: mov v23.s[3], w17993; CHECK-GI-NEXT: mls v5.4s, v23.4s, v7.4s994; CHECK-GI-NEXT: sdiv w19, w3, w6995; CHECK-GI-NEXT: mov w3, v18.s[2]996; CHECK-GI-NEXT: mov w6, v19.s[2]997; CHECK-GI-NEXT: fmov s24, w20998; CHECK-GI-NEXT: uzp1 v2.8h, v6.8h, v5.8h999; CHECK-GI-NEXT: uzp1 v0.16b, v0.16b, v2.16b1000; CHECK-GI-NEXT: sdiv w6, w3, w61001; CHECK-GI-NEXT: mov w3, v18.s[3]1002; CHECK-GI-NEXT: mov v24.s[1], w191003; CHECK-GI-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload1004; CHECK-GI-NEXT: sdiv w3, w3, w71005; CHECK-GI-NEXT: fmov w7, s161006; CHECK-GI-NEXT: mov v24.s[2], w61007; CHECK-GI-NEXT: sdiv w23, w7, w211008; CHECK-GI-NEXT: mov w7, v16.s[1]1009; CHECK-GI-NEXT: mov w21, v17.s[1]1010; CHECK-GI-NEXT: mov v24.s[3], w31011; CHECK-GI-NEXT: sdiv w24, w7, w211012; CHECK-GI-NEXT: mov w7, v16.s[2]1013; CHECK-GI-NEXT: mov w21, v17.s[2]1014; CHECK-GI-NEXT: sshll2 v17.8h, v1.16b, #01015; CHECK-GI-NEXT: fmov s25, w231016; CHECK-GI-NEXT: sshll v1.8h, v1.8b, #01017; CHECK-GI-NEXT: sshll v18.4s, v17.4h, #01018; CHECK-GI-NEXT: sshll v29.4s, v1.4h, #01019; CHECK-GI-NEXT: sshll2 v1.4s, v1.8h, #01020; CHECK-GI-NEXT: sdiv w21, w7, w211021; CHECK-GI-NEXT: mov w7, v16.s[3]1022; CHECK-GI-NEXT: sshll2 v16.8h, v3.16b, #01023; CHECK-GI-NEXT: mov v25.s[1], w241024; CHECK-GI-NEXT: sshll v3.8h, v3.8b, #01025; CHECK-GI-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload1026; CHECK-GI-NEXT: sshll v19.4s, v16.4h, #01027; CHECK-GI-NEXT: sshll v31.4s, v3.4h, #01028; CHECK-GI-NEXT: sshll2 v3.4s, v3.8h, #01029; CHECK-GI-NEXT: fmov w25, s191030; CHECK-GI-NEXT: mov w26, v19.s[1]1031; CHECK-GI-NEXT: mov w27, v19.s[2]1032; CHECK-GI-NEXT: mov w28, v19.s[3]1033; CHECK-GI-NEXT: sshll2 v19.4s, v16.8h, #01034; CHECK-GI-NEXT: sshll v16.4s, v16.4h, #01035; CHECK-GI-NEXT: sdiv w7, w7, w221036; CHECK-GI-NEXT: fmov w22, s181037; CHECK-GI-NEXT: mov v25.s[2], w211038; CHECK-GI-NEXT: mls v29.4s, v24.4s, v31.4s1039; CHECK-GI-NEXT: fmov w29, s191040; CHECK-GI-NEXT: mov w30, v19.s[1]1041; CHECK-GI-NEXT: mov w8, v19.s[2]1042; CHECK-GI-NEXT: mov w10, v19.s[3]1043; CHECK-GI-NEXT: sdiv w25, w22, w251044; CHECK-GI-NEXT: mov w22, v18.s[1]1045; CHECK-GI-NEXT: mov v25.s[3], w71046; CHECK-GI-NEXT: mls v1.4s, v25.4s, v3.4s1047; CHECK-GI-NEXT: sdiv w26, w22, w261048; CHECK-GI-NEXT: mov w22, v18.s[2]1049; CHECK-GI-NEXT: fmov s26, w251050; CHECK-GI-NEXT: uzp1 v1.8h, v29.8h, v1.8h1051; CHECK-GI-NEXT: sdiv w27, w22, w271052; CHECK-GI-NEXT: mov w22, v18.s[3]1053; CHECK-GI-NEXT: sshll2 v18.4s, v17.8h, #01054; CHECK-GI-NEXT: mov v26.s[1], w261055; CHECK-GI-NEXT: sshll v17.4s, v17.4h, #01056; CHECK-GI-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload1057; CHECK-GI-NEXT: mov w9, v18.s[3]1058; CHECK-GI-NEXT: sdiv w22, w22, w281059; CHECK-GI-NEXT: fmov w28, s181060; CHECK-GI-NEXT: mov v26.s[2], w271061; CHECK-GI-NEXT: sdiv w28, w28, w291062; CHECK-GI-NEXT: mov w29, v18.s[1]1063; CHECK-GI-NEXT: mov v26.s[3], w221064; CHECK-GI-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload1065; CHECK-GI-NEXT: mls v17.4s, v26.4s, v16.4s1066; CHECK-GI-NEXT: sdiv w29, w29, w301067; CHECK-GI-NEXT: mov w30, v18.s[2]1068; CHECK-GI-NEXT: fmov s27, w281069; CHECK-GI-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload1070; CHECK-GI-NEXT: sdiv w8, w30, w81071; CHECK-GI-NEXT: mov v27.s[1], w291072; CHECK-GI-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload1073; CHECK-GI-NEXT: sdiv w9, w9, w101074; CHECK-GI-NEXT: mov v27.s[2], w81075; CHECK-GI-NEXT: mov v27.s[3], w91076; CHECK-GI-NEXT: mls v18.4s, v27.4s, v19.4s1077; CHECK-GI-NEXT: uzp1 v3.8h, v17.8h, v18.8h1078; CHECK-GI-NEXT: uzp1 v1.16b, v1.16b, v3.16b1079; CHECK-GI-NEXT: add sp, sp, #1121080; CHECK-GI-NEXT: ret1081entry:1082 %s = srem <32 x i8> %d, %e1083 ret <32 x i8> %s1084}1085 1086define <2 x i8> @uv2i8(<2 x i8> %d, <2 x i8> %e) {1087; CHECK-SD-LABEL: uv2i8:1088; CHECK-SD: // %bb.0: // %entry1089; CHECK-SD-NEXT: movi d2, #0x0000ff000000ff1090; CHECK-SD-NEXT: and v0.8b, v0.8b, v2.8b1091; CHECK-SD-NEXT: and v1.8b, v1.8b, v2.8b1092; CHECK-SD-NEXT: fmov w8, s11093; CHECK-SD-NEXT: fmov w9, s01094; CHECK-SD-NEXT: mov w11, v1.s[1]1095; CHECK-SD-NEXT: mov w12, v0.s[1]1096; CHECK-SD-NEXT: udiv w10, w9, w81097; CHECK-SD-NEXT: udiv w13, w12, w111098; CHECK-SD-NEXT: msub w8, w10, w8, w91099; CHECK-SD-NEXT: fmov s0, w81100; CHECK-SD-NEXT: msub w9, w13, w11, w121101; CHECK-SD-NEXT: mov v0.s[1], w91102; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q01103; CHECK-SD-NEXT: ret1104;1105; CHECK-GI-LABEL: uv2i8:1106; CHECK-GI: // %bb.0: // %entry1107; CHECK-GI-NEXT: movi d2, #0x0000ff000000ff1108; CHECK-GI-NEXT: and v0.8b, v0.8b, v2.8b1109; CHECK-GI-NEXT: and v1.8b, v1.8b, v2.8b1110; CHECK-GI-NEXT: fmov w8, s01111; CHECK-GI-NEXT: fmov w9, s11112; CHECK-GI-NEXT: mov w10, v1.s[1]1113; CHECK-GI-NEXT: udiv w8, w8, w91114; CHECK-GI-NEXT: mov w9, v0.s[1]1115; CHECK-GI-NEXT: udiv w9, w9, w101116; CHECK-GI-NEXT: fmov s2, w81117; CHECK-GI-NEXT: mov v2.s[1], w91118; CHECK-GI-NEXT: mls v0.2s, v2.2s, v1.2s1119; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q01120; CHECK-GI-NEXT: ret1121entry:1122 %s = urem <2 x i8> %d, %e1123 ret <2 x i8> %s1124}1125 1126define <3 x i8> @uv3i8(<3 x i8> %d, <3 x i8> %e) {1127; CHECK-SD-LABEL: uv3i8:1128; CHECK-SD: // %bb.0: // %entry1129; CHECK-SD-NEXT: and w8, w3, #0xff1130; CHECK-SD-NEXT: and w9, w0, #0xff1131; CHECK-SD-NEXT: and w11, w4, #0xff1132; CHECK-SD-NEXT: and w12, w1, #0xff1133; CHECK-SD-NEXT: and w14, w5, #0xff1134; CHECK-SD-NEXT: and w15, w2, #0xff1135; CHECK-SD-NEXT: udiv w10, w9, w81136; CHECK-SD-NEXT: udiv w13, w12, w111137; CHECK-SD-NEXT: msub w0, w10, w8, w91138; CHECK-SD-NEXT: udiv w16, w15, w141139; CHECK-SD-NEXT: msub w1, w13, w11, w121140; CHECK-SD-NEXT: msub w2, w16, w14, w151141; CHECK-SD-NEXT: ret1142;1143; CHECK-GI-LABEL: uv3i8:1144; CHECK-GI: // %bb.0: // %entry1145; CHECK-GI-NEXT: and w8, w0, #0xff1146; CHECK-GI-NEXT: and w9, w3, #0xff1147; CHECK-GI-NEXT: and w11, w1, #0xff1148; CHECK-GI-NEXT: and w12, w4, #0xff1149; CHECK-GI-NEXT: and w14, w2, #0xff1150; CHECK-GI-NEXT: and w15, w5, #0xff1151; CHECK-GI-NEXT: udiv w10, w8, w91152; CHECK-GI-NEXT: udiv w13, w11, w121153; CHECK-GI-NEXT: msub w0, w10, w9, w81154; CHECK-GI-NEXT: udiv w16, w14, w151155; CHECK-GI-NEXT: msub w1, w13, w12, w111156; CHECK-GI-NEXT: msub w2, w16, w15, w141157; CHECK-GI-NEXT: ret1158entry:1159 %s = urem <3 x i8> %d, %e1160 ret <3 x i8> %s1161}1162 1163define <4 x i8> @uv4i8(<4 x i8> %d, <4 x i8> %e) {1164; CHECK-SD-LABEL: uv4i8:1165; CHECK-SD: // %bb.0: // %entry1166; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q11167; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q01168; CHECK-SD-NEXT: bic v0.4h, #255, lsl #81169; CHECK-SD-NEXT: bic v1.4h, #255, lsl #81170; CHECK-SD-NEXT: umov w11, v1.h[0]1171; CHECK-SD-NEXT: umov w12, v0.h[0]1172; CHECK-SD-NEXT: umov w8, v1.h[1]1173; CHECK-SD-NEXT: umov w9, v0.h[1]1174; CHECK-SD-NEXT: umov w14, v1.h[2]1175; CHECK-SD-NEXT: umov w15, v0.h[2]1176; CHECK-SD-NEXT: umov w17, v1.h[3]1177; CHECK-SD-NEXT: umov w18, v0.h[3]1178; CHECK-SD-NEXT: udiv w13, w12, w111179; CHECK-SD-NEXT: udiv w10, w9, w81180; CHECK-SD-NEXT: msub w11, w13, w11, w121181; CHECK-SD-NEXT: fmov s0, w111182; CHECK-SD-NEXT: udiv w16, w15, w141183; CHECK-SD-NEXT: msub w8, w10, w8, w91184; CHECK-SD-NEXT: mov v0.h[1], w81185; CHECK-SD-NEXT: udiv w9, w18, w171186; CHECK-SD-NEXT: msub w8, w16, w14, w151187; CHECK-SD-NEXT: mov v0.h[2], w81188; CHECK-SD-NEXT: msub w8, w9, w17, w181189; CHECK-SD-NEXT: mov v0.h[3], w81190; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q01191; CHECK-SD-NEXT: ret1192;1193; CHECK-GI-LABEL: uv4i8:1194; CHECK-GI: // %bb.0: // %entry1195; CHECK-GI-NEXT: movi v2.2d, #0x0000ff000000ff1196; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #01197; CHECK-GI-NEXT: ushll v1.4s, v1.4h, #01198; CHECK-GI-NEXT: and v0.16b, v0.16b, v2.16b1199; CHECK-GI-NEXT: and v1.16b, v1.16b, v2.16b1200; CHECK-GI-NEXT: fmov w8, s01201; CHECK-GI-NEXT: fmov w9, s11202; CHECK-GI-NEXT: mov w10, v1.s[1]1203; CHECK-GI-NEXT: mov w11, v1.s[2]1204; CHECK-GI-NEXT: mov w12, v1.s[3]1205; CHECK-GI-NEXT: udiv w8, w8, w91206; CHECK-GI-NEXT: mov w9, v0.s[1]1207; CHECK-GI-NEXT: udiv w9, w9, w101208; CHECK-GI-NEXT: mov w10, v0.s[2]1209; CHECK-GI-NEXT: fmov s2, w81210; CHECK-GI-NEXT: udiv w10, w10, w111211; CHECK-GI-NEXT: mov w11, v0.s[3]1212; CHECK-GI-NEXT: mov v2.s[1], w91213; CHECK-GI-NEXT: udiv w8, w11, w121214; CHECK-GI-NEXT: mov v2.s[2], w101215; CHECK-GI-NEXT: mov v2.s[3], w81216; CHECK-GI-NEXT: mls v0.4s, v2.4s, v1.4s1217; CHECK-GI-NEXT: xtn v0.4h, v0.4s1218; CHECK-GI-NEXT: ret1219entry:1220 %s = urem <4 x i8> %d, %e1221 ret <4 x i8> %s1222}1223 1224define <8 x i8> @uv8i8(<8 x i8> %d, <8 x i8> %e) {1225; CHECK-SD-LABEL: uv8i8:1226; CHECK-SD: // %bb.0: // %entry1227; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q11228; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q01229; CHECK-SD-NEXT: umov w11, v1.b[0]1230; CHECK-SD-NEXT: umov w12, v0.b[0]1231; CHECK-SD-NEXT: umov w8, v1.b[1]1232; CHECK-SD-NEXT: umov w9, v0.b[1]1233; CHECK-SD-NEXT: umov w14, v1.b[2]1234; CHECK-SD-NEXT: umov w15, v0.b[2]1235; CHECK-SD-NEXT: umov w17, v1.b[3]1236; CHECK-SD-NEXT: umov w18, v0.b[3]1237; CHECK-SD-NEXT: umov w1, v1.b[4]1238; CHECK-SD-NEXT: umov w2, v0.b[4]1239; CHECK-SD-NEXT: umov w4, v1.b[5]1240; CHECK-SD-NEXT: umov w5, v0.b[5]1241; CHECK-SD-NEXT: udiv w13, w12, w111242; CHECK-SD-NEXT: udiv w10, w9, w81243; CHECK-SD-NEXT: msub w11, w13, w11, w121244; CHECK-SD-NEXT: umov w13, v1.b[7]1245; CHECK-SD-NEXT: fmov s2, w111246; CHECK-SD-NEXT: umov w11, v0.b[6]1247; CHECK-SD-NEXT: udiv w16, w15, w141248; CHECK-SD-NEXT: msub w8, w10, w8, w91249; CHECK-SD-NEXT: umov w10, v1.b[6]1250; CHECK-SD-NEXT: mov v2.b[1], w81251; CHECK-SD-NEXT: udiv w0, w18, w171252; CHECK-SD-NEXT: msub w8, w16, w14, w151253; CHECK-SD-NEXT: umov w14, v0.b[7]1254; CHECK-SD-NEXT: mov v2.b[2], w81255; CHECK-SD-NEXT: udiv w3, w2, w11256; CHECK-SD-NEXT: msub w8, w0, w17, w181257; CHECK-SD-NEXT: mov v2.b[3], w81258; CHECK-SD-NEXT: udiv w9, w5, w41259; CHECK-SD-NEXT: msub w8, w3, w1, w21260; CHECK-SD-NEXT: mov v2.b[4], w81261; CHECK-SD-NEXT: udiv w12, w11, w101262; CHECK-SD-NEXT: msub w8, w9, w4, w51263; CHECK-SD-NEXT: mov v2.b[5], w81264; CHECK-SD-NEXT: udiv w9, w14, w131265; CHECK-SD-NEXT: msub w8, w12, w10, w111266; CHECK-SD-NEXT: mov v2.b[6], w81267; CHECK-SD-NEXT: msub w8, w9, w13, w141268; CHECK-SD-NEXT: mov v2.b[7], w81269; CHECK-SD-NEXT: fmov d0, d21270; CHECK-SD-NEXT: ret1271;1272; CHECK-GI-LABEL: uv8i8:1273; CHECK-GI: // %bb.0: // %entry1274; CHECK-GI-NEXT: ushll v0.8h, v0.8b, #01275; CHECK-GI-NEXT: ushll v1.8h, v1.8b, #01276; CHECK-GI-NEXT: ushll v2.4s, v0.4h, #01277; CHECK-GI-NEXT: ushll v3.4s, v1.4h, #01278; CHECK-GI-NEXT: ushll2 v0.4s, v0.8h, #01279; CHECK-GI-NEXT: ushll2 v1.4s, v1.8h, #01280; CHECK-GI-NEXT: fmov w8, s21281; CHECK-GI-NEXT: fmov w9, s31282; CHECK-GI-NEXT: mov w10, v3.s[1]1283; CHECK-GI-NEXT: mov w11, v3.s[2]1284; CHECK-GI-NEXT: mov w12, v3.s[3]1285; CHECK-GI-NEXT: fmov w13, s11286; CHECK-GI-NEXT: mov w14, v1.s[1]1287; CHECK-GI-NEXT: mov w15, v1.s[2]1288; CHECK-GI-NEXT: mov w16, v1.s[3]1289; CHECK-GI-NEXT: udiv w8, w8, w91290; CHECK-GI-NEXT: mov w9, v2.s[1]1291; CHECK-GI-NEXT: udiv w9, w9, w101292; CHECK-GI-NEXT: mov w10, v2.s[2]1293; CHECK-GI-NEXT: fmov s4, w81294; CHECK-GI-NEXT: udiv w10, w10, w111295; CHECK-GI-NEXT: mov w11, v2.s[3]1296; CHECK-GI-NEXT: mov v4.s[1], w91297; CHECK-GI-NEXT: udiv w11, w11, w121298; CHECK-GI-NEXT: fmov w12, s01299; CHECK-GI-NEXT: mov v4.s[2], w101300; CHECK-GI-NEXT: udiv w12, w12, w131301; CHECK-GI-NEXT: mov w13, v0.s[1]1302; CHECK-GI-NEXT: mov v4.s[3], w111303; CHECK-GI-NEXT: mls v2.4s, v4.4s, v3.4s1304; CHECK-GI-NEXT: udiv w13, w13, w141305; CHECK-GI-NEXT: mov w14, v0.s[2]1306; CHECK-GI-NEXT: fmov s5, w121307; CHECK-GI-NEXT: udiv w14, w14, w151308; CHECK-GI-NEXT: mov w15, v0.s[3]1309; CHECK-GI-NEXT: mov v5.s[1], w131310; CHECK-GI-NEXT: udiv w8, w15, w161311; CHECK-GI-NEXT: mov v5.s[2], w141312; CHECK-GI-NEXT: mov v5.s[3], w81313; CHECK-GI-NEXT: mls v0.4s, v5.4s, v1.4s1314; CHECK-GI-NEXT: uzp1 v0.8h, v2.8h, v0.8h1315; CHECK-GI-NEXT: xtn v0.8b, v0.8h1316; CHECK-GI-NEXT: ret1317entry:1318 %s = urem <8 x i8> %d, %e1319 ret <8 x i8> %s1320}1321 1322define <16 x i8> @uv16i8(<16 x i8> %d, <16 x i8> %e) {1323; CHECK-SD-LABEL: uv16i8:1324; CHECK-SD: // %bb.0: // %entry1325; CHECK-SD-NEXT: stp x28, x27, [sp, #-80]! // 16-byte Folded Spill1326; CHECK-SD-NEXT: stp x26, x25, [sp, #16] // 16-byte Folded Spill1327; CHECK-SD-NEXT: stp x24, x23, [sp, #32] // 16-byte Folded Spill1328; CHECK-SD-NEXT: stp x22, x21, [sp, #48] // 16-byte Folded Spill1329; CHECK-SD-NEXT: stp x20, x19, [sp, #64] // 16-byte Folded Spill1330; CHECK-SD-NEXT: .cfi_def_cfa_offset 801331; CHECK-SD-NEXT: .cfi_offset w19, -81332; CHECK-SD-NEXT: .cfi_offset w20, -161333; CHECK-SD-NEXT: .cfi_offset w21, -241334; CHECK-SD-NEXT: .cfi_offset w22, -321335; CHECK-SD-NEXT: .cfi_offset w23, -401336; CHECK-SD-NEXT: .cfi_offset w24, -481337; CHECK-SD-NEXT: .cfi_offset w25, -561338; CHECK-SD-NEXT: .cfi_offset w26, -641339; CHECK-SD-NEXT: .cfi_offset w27, -721340; CHECK-SD-NEXT: .cfi_offset w28, -801341; CHECK-SD-NEXT: umov w11, v1.b[0]1342; CHECK-SD-NEXT: umov w12, v0.b[0]1343; CHECK-SD-NEXT: umov w8, v1.b[1]1344; CHECK-SD-NEXT: umov w9, v0.b[1]1345; CHECK-SD-NEXT: umov w14, v1.b[2]1346; CHECK-SD-NEXT: umov w15, v0.b[2]1347; CHECK-SD-NEXT: umov w17, v1.b[3]1348; CHECK-SD-NEXT: umov w18, v0.b[3]1349; CHECK-SD-NEXT: umov w1, v1.b[4]1350; CHECK-SD-NEXT: umov w2, v0.b[4]1351; CHECK-SD-NEXT: umov w4, v1.b[5]1352; CHECK-SD-NEXT: umov w5, v0.b[5]1353; CHECK-SD-NEXT: udiv w13, w12, w111354; CHECK-SD-NEXT: umov w7, v1.b[6]1355; CHECK-SD-NEXT: umov w19, v0.b[6]1356; CHECK-SD-NEXT: umov w21, v1.b[7]1357; CHECK-SD-NEXT: umov w22, v0.b[7]1358; CHECK-SD-NEXT: umov w24, v1.b[8]1359; CHECK-SD-NEXT: umov w25, v0.b[8]1360; CHECK-SD-NEXT: umov w27, v1.b[9]1361; CHECK-SD-NEXT: umov w28, v0.b[9]1362; CHECK-SD-NEXT: udiv w10, w9, w81363; CHECK-SD-NEXT: msub w11, w13, w11, w121364; CHECK-SD-NEXT: umov w13, v1.b[11]1365; CHECK-SD-NEXT: fmov s2, w111366; CHECK-SD-NEXT: umov w11, v0.b[10]1367; CHECK-SD-NEXT: udiv w16, w15, w141368; CHECK-SD-NEXT: msub w8, w10, w8, w91369; CHECK-SD-NEXT: umov w10, v1.b[10]1370; CHECK-SD-NEXT: mov v2.b[1], w81371; CHECK-SD-NEXT: udiv w0, w18, w171372; CHECK-SD-NEXT: msub w8, w16, w14, w151373; CHECK-SD-NEXT: umov w14, v0.b[11]1374; CHECK-SD-NEXT: umov w16, v1.b[12]1375; CHECK-SD-NEXT: mov v2.b[2], w81376; CHECK-SD-NEXT: udiv w3, w2, w11377; CHECK-SD-NEXT: msub w8, w0, w17, w181378; CHECK-SD-NEXT: umov w17, v0.b[12]1379; CHECK-SD-NEXT: umov w0, v1.b[13]1380; CHECK-SD-NEXT: mov v2.b[3], w81381; CHECK-SD-NEXT: udiv w6, w5, w41382; CHECK-SD-NEXT: msub w8, w3, w1, w21383; CHECK-SD-NEXT: umov w1, v0.b[13]1384; CHECK-SD-NEXT: mov v2.b[4], w81385; CHECK-SD-NEXT: udiv w20, w19, w71386; CHECK-SD-NEXT: msub w8, w6, w4, w51387; CHECK-SD-NEXT: mov v2.b[5], w81388; CHECK-SD-NEXT: udiv w23, w22, w211389; CHECK-SD-NEXT: msub w8, w20, w7, w191390; CHECK-SD-NEXT: ldp x20, x19, [sp, #64] // 16-byte Folded Reload1391; CHECK-SD-NEXT: mov v2.b[6], w81392; CHECK-SD-NEXT: udiv w26, w25, w241393; CHECK-SD-NEXT: msub w8, w23, w21, w221394; CHECK-SD-NEXT: ldp x22, x21, [sp, #48] // 16-byte Folded Reload1395; CHECK-SD-NEXT: mov v2.b[7], w81396; CHECK-SD-NEXT: udiv w9, w28, w271397; CHECK-SD-NEXT: msub w8, w26, w24, w251398; CHECK-SD-NEXT: ldp x24, x23, [sp, #32] // 16-byte Folded Reload1399; CHECK-SD-NEXT: ldp x26, x25, [sp, #16] // 16-byte Folded Reload1400; CHECK-SD-NEXT: mov v2.b[8], w81401; CHECK-SD-NEXT: udiv w12, w11, w101402; CHECK-SD-NEXT: msub w8, w9, w27, w281403; CHECK-SD-NEXT: mov v2.b[9], w81404; CHECK-SD-NEXT: udiv w15, w14, w131405; CHECK-SD-NEXT: msub w8, w12, w10, w111406; CHECK-SD-NEXT: umov w10, v1.b[14]1407; CHECK-SD-NEXT: umov w11, v0.b[14]1408; CHECK-SD-NEXT: mov v2.b[10], w81409; CHECK-SD-NEXT: udiv w18, w17, w161410; CHECK-SD-NEXT: msub w8, w15, w13, w141411; CHECK-SD-NEXT: umov w13, v1.b[15]1412; CHECK-SD-NEXT: umov w14, v0.b[15]1413; CHECK-SD-NEXT: mov v2.b[11], w81414; CHECK-SD-NEXT: udiv w9, w1, w01415; CHECK-SD-NEXT: msub w8, w18, w16, w171416; CHECK-SD-NEXT: mov v2.b[12], w81417; CHECK-SD-NEXT: udiv w12, w11, w101418; CHECK-SD-NEXT: msub w8, w9, w0, w11419; CHECK-SD-NEXT: mov v2.b[13], w81420; CHECK-SD-NEXT: udiv w9, w14, w131421; CHECK-SD-NEXT: msub w8, w12, w10, w111422; CHECK-SD-NEXT: mov v2.b[14], w81423; CHECK-SD-NEXT: msub w8, w9, w13, w141424; CHECK-SD-NEXT: mov v2.b[15], w81425; CHECK-SD-NEXT: mov v0.16b, v2.16b1426; CHECK-SD-NEXT: ldp x28, x27, [sp], #80 // 16-byte Folded Reload1427; CHECK-SD-NEXT: ret1428;1429; CHECK-GI-LABEL: uv16i8:1430; CHECK-GI: // %bb.0: // %entry1431; CHECK-GI-NEXT: ushll v4.8h, v0.8b, #01432; CHECK-GI-NEXT: ushll v5.8h, v1.8b, #01433; CHECK-GI-NEXT: ushll2 v6.8h, v0.16b, #01434; CHECK-GI-NEXT: ushll2 v7.8h, v1.16b, #01435; CHECK-GI-NEXT: ushll v2.4s, v4.4h, #01436; CHECK-GI-NEXT: ushll v3.4s, v5.4h, #01437; CHECK-GI-NEXT: ushll2 v4.4s, v4.8h, #01438; CHECK-GI-NEXT: ushll2 v5.4s, v5.8h, #01439; CHECK-GI-NEXT: ushll v0.4s, v6.4h, #01440; CHECK-GI-NEXT: ushll v1.4s, v7.4h, #01441; CHECK-GI-NEXT: ushll2 v6.4s, v6.8h, #01442; CHECK-GI-NEXT: ushll2 v7.4s, v7.8h, #01443; CHECK-GI-NEXT: fmov w8, s21444; CHECK-GI-NEXT: fmov w9, s31445; CHECK-GI-NEXT: mov w12, v3.s[3]1446; CHECK-GI-NEXT: fmov w13, s51447; CHECK-GI-NEXT: mov w16, v5.s[3]1448; CHECK-GI-NEXT: fmov w17, s11449; CHECK-GI-NEXT: mov w18, v1.s[1]1450; CHECK-GI-NEXT: mov w0, v1.s[2]1451; CHECK-GI-NEXT: mov w1, v1.s[3]1452; CHECK-GI-NEXT: udiv w10, w8, w91453; CHECK-GI-NEXT: mov w8, v2.s[1]1454; CHECK-GI-NEXT: mov w9, v3.s[1]1455; CHECK-GI-NEXT: fmov w2, s71456; CHECK-GI-NEXT: mov w3, v7.s[1]1457; CHECK-GI-NEXT: mov w4, v7.s[2]1458; CHECK-GI-NEXT: mov w5, v7.s[3]1459; CHECK-GI-NEXT: udiv w11, w8, w91460; CHECK-GI-NEXT: mov w8, v2.s[2]1461; CHECK-GI-NEXT: mov w9, v3.s[2]1462; CHECK-GI-NEXT: fmov s16, w101463; CHECK-GI-NEXT: udiv w9, w8, w91464; CHECK-GI-NEXT: mov w8, v2.s[3]1465; CHECK-GI-NEXT: mov v16.s[1], w111466; CHECK-GI-NEXT: udiv w8, w8, w121467; CHECK-GI-NEXT: fmov w12, s41468; CHECK-GI-NEXT: mov v16.s[2], w91469; CHECK-GI-NEXT: udiv w14, w12, w131470; CHECK-GI-NEXT: mov w12, v4.s[1]1471; CHECK-GI-NEXT: mov w13, v5.s[1]1472; CHECK-GI-NEXT: mov v16.s[3], w81473; CHECK-GI-NEXT: mls v2.4s, v16.4s, v3.4s1474; CHECK-GI-NEXT: udiv w15, w12, w131475; CHECK-GI-NEXT: mov w12, v4.s[2]1476; CHECK-GI-NEXT: mov w13, v5.s[2]1477; CHECK-GI-NEXT: fmov s17, w141478; CHECK-GI-NEXT: udiv w13, w12, w131479; CHECK-GI-NEXT: mov w12, v4.s[3]1480; CHECK-GI-NEXT: mov v17.s[1], w151481; CHECK-GI-NEXT: udiv w12, w12, w161482; CHECK-GI-NEXT: fmov w16, s01483; CHECK-GI-NEXT: mov v17.s[2], w131484; CHECK-GI-NEXT: udiv w16, w16, w171485; CHECK-GI-NEXT: mov w17, v0.s[1]1486; CHECK-GI-NEXT: mov v17.s[3], w121487; CHECK-GI-NEXT: mls v4.4s, v17.4s, v5.4s1488; CHECK-GI-NEXT: udiv w17, w17, w181489; CHECK-GI-NEXT: mov w18, v0.s[2]1490; CHECK-GI-NEXT: fmov s18, w161491; CHECK-GI-NEXT: udiv w18, w18, w01492; CHECK-GI-NEXT: mov w0, v0.s[3]1493; CHECK-GI-NEXT: mov v18.s[1], w171494; CHECK-GI-NEXT: udiv w0, w0, w11495; CHECK-GI-NEXT: fmov w1, s61496; CHECK-GI-NEXT: mov v18.s[2], w181497; CHECK-GI-NEXT: udiv w1, w1, w21498; CHECK-GI-NEXT: mov w2, v6.s[1]1499; CHECK-GI-NEXT: mov v18.s[3], w01500; CHECK-GI-NEXT: mls v0.4s, v18.4s, v1.4s1501; CHECK-GI-NEXT: uzp1 v1.8h, v2.8h, v4.8h1502; CHECK-GI-NEXT: udiv w2, w2, w31503; CHECK-GI-NEXT: mov w3, v6.s[2]1504; CHECK-GI-NEXT: fmov s19, w11505; CHECK-GI-NEXT: udiv w3, w3, w41506; CHECK-GI-NEXT: mov w4, v6.s[3]1507; CHECK-GI-NEXT: mov v19.s[1], w21508; CHECK-GI-NEXT: udiv w10, w4, w51509; CHECK-GI-NEXT: mov v19.s[2], w31510; CHECK-GI-NEXT: mov v19.s[3], w101511; CHECK-GI-NEXT: mls v6.4s, v19.4s, v7.4s1512; CHECK-GI-NEXT: uzp1 v0.8h, v0.8h, v6.8h1513; CHECK-GI-NEXT: uzp1 v0.16b, v1.16b, v0.16b1514; CHECK-GI-NEXT: ret1515entry:1516 %s = urem <16 x i8> %d, %e1517 ret <16 x i8> %s1518}1519 1520define <32 x i8> @uv32i8(<32 x i8> %d, <32 x i8> %e) {1521; CHECK-SD-LABEL: uv32i8:1522; CHECK-SD: // %bb.0: // %entry1523; CHECK-SD-NEXT: sub sp, sp, #3041524; CHECK-SD-NEXT: stp x29, x30, [sp, #208] // 16-byte Folded Spill1525; CHECK-SD-NEXT: stp x28, x27, [sp, #224] // 16-byte Folded Spill1526; CHECK-SD-NEXT: stp x26, x25, [sp, #240] // 16-byte Folded Spill1527; CHECK-SD-NEXT: stp x24, x23, [sp, #256] // 16-byte Folded Spill1528; CHECK-SD-NEXT: stp x22, x21, [sp, #272] // 16-byte Folded Spill1529; CHECK-SD-NEXT: stp x20, x19, [sp, #288] // 16-byte Folded Spill1530; CHECK-SD-NEXT: .cfi_def_cfa_offset 3041531; CHECK-SD-NEXT: .cfi_offset w19, -81532; CHECK-SD-NEXT: .cfi_offset w20, -161533; CHECK-SD-NEXT: .cfi_offset w21, -241534; CHECK-SD-NEXT: .cfi_offset w22, -321535; CHECK-SD-NEXT: .cfi_offset w23, -401536; CHECK-SD-NEXT: .cfi_offset w24, -481537; CHECK-SD-NEXT: .cfi_offset w25, -561538; CHECK-SD-NEXT: .cfi_offset w26, -641539; CHECK-SD-NEXT: .cfi_offset w27, -721540; CHECK-SD-NEXT: .cfi_offset w28, -801541; CHECK-SD-NEXT: .cfi_offset w30, -881542; CHECK-SD-NEXT: .cfi_offset w29, -961543; CHECK-SD-NEXT: umov w8, v2.b[1]1544; CHECK-SD-NEXT: umov w9, v0.b[1]1545; CHECK-SD-NEXT: umov w19, v3.b[7]1546; CHECK-SD-NEXT: umov w7, v1.b[7]1547; CHECK-SD-NEXT: umov w6, v3.b[8]1548; CHECK-SD-NEXT: umov w3, v1.b[8]1549; CHECK-SD-NEXT: umov w13, v3.b[0]1550; CHECK-SD-NEXT: umov w5, v3.b[1]1551; CHECK-SD-NEXT: umov w0, v1.b[1]1552; CHECK-SD-NEXT: umov w12, v3.b[2]1553; CHECK-SD-NEXT: umov w17, v3.b[3]1554; CHECK-SD-NEXT: umov w16, v1.b[3]1555; CHECK-SD-NEXT: str w8, [sp, #80] // 4-byte Spill1556; CHECK-SD-NEXT: udiv w10, w9, w81557; CHECK-SD-NEXT: umov w8, v2.b[0]1558; CHECK-SD-NEXT: str w9, [sp, #88] // 4-byte Spill1559; CHECK-SD-NEXT: umov w9, v0.b[0]1560; CHECK-SD-NEXT: ldr w30, [sp, #80] // 4-byte Reload1561; CHECK-SD-NEXT: umov w15, v3.b[4]1562; CHECK-SD-NEXT: umov w14, v1.b[4]1563; CHECK-SD-NEXT: umov w4, v3.b[5]1564; CHECK-SD-NEXT: umov w1, v1.b[5]1565; CHECK-SD-NEXT: umov w2, v3.b[6]1566; CHECK-SD-NEXT: umov w18, v1.b[6]1567; CHECK-SD-NEXT: str w8, [sp, #32] // 4-byte Spill1568; CHECK-SD-NEXT: umov w21, v3.b[9]1569; CHECK-SD-NEXT: umov w20, v1.b[9]1570; CHECK-SD-NEXT: str w9, [sp, #40] // 4-byte Spill1571; CHECK-SD-NEXT: ldr w29, [sp, #32] // 4-byte Reload1572; CHECK-SD-NEXT: udiv w11, w9, w81573; CHECK-SD-NEXT: umov w8, v2.b[2]1574; CHECK-SD-NEXT: umov w9, v0.b[2]1575; CHECK-SD-NEXT: str w10, [sp, #96] // 4-byte Spill1576; CHECK-SD-NEXT: stp w8, w9, [sp, #16] // 8-byte Folded Spill1577; CHECK-SD-NEXT: udiv w10, w9, w81578; CHECK-SD-NEXT: umov w8, v2.b[3]1579; CHECK-SD-NEXT: umov w9, v0.b[3]1580; CHECK-SD-NEXT: stp w11, w8, [sp, #48] // 8-byte Folded Spill1581; CHECK-SD-NEXT: str w10, [sp, #24] // 4-byte Spill1582; CHECK-SD-NEXT: udiv w10, w9, w81583; CHECK-SD-NEXT: umov w8, v2.b[4]1584; CHECK-SD-NEXT: str w8, [sp, #28] // 4-byte Spill1585; CHECK-SD-NEXT: stp w9, w10, [sp, #56] // 8-byte Folded Spill1586; CHECK-SD-NEXT: umov w9, v0.b[4]1587; CHECK-SD-NEXT: udiv w27, w0, w51588; CHECK-SD-NEXT: str w9, [sp, #36] // 4-byte Spill1589; CHECK-SD-NEXT: udiv w10, w9, w81590; CHECK-SD-NEXT: umov w8, v2.b[5]1591; CHECK-SD-NEXT: umov w9, v0.b[5]1592; CHECK-SD-NEXT: str w8, [sp, #76] // 4-byte Spill1593; CHECK-SD-NEXT: str w9, [sp, #84] // 4-byte Spill1594; CHECK-SD-NEXT: str w10, [sp, #44] // 4-byte Spill1595; CHECK-SD-NEXT: udiv w10, w9, w81596; CHECK-SD-NEXT: umov w8, v2.b[6]1597; CHECK-SD-NEXT: umov w9, v0.b[6]1598; CHECK-SD-NEXT: stp w8, w9, [sp, #64] // 8-byte Folded Spill1599; CHECK-SD-NEXT: str w10, [sp, #92] // 4-byte Spill1600; CHECK-SD-NEXT: udiv w10, w9, w81601; CHECK-SD-NEXT: umov w8, v2.b[7]1602; CHECK-SD-NEXT: umov w9, v0.b[7]1603; CHECK-SD-NEXT: stp w8, w9, [sp, #112] // 8-byte Folded Spill1604; CHECK-SD-NEXT: udiv w11, w9, w81605; CHECK-SD-NEXT: umov w8, v2.b[8]1606; CHECK-SD-NEXT: umov w9, v0.b[8]1607; CHECK-SD-NEXT: str w10, [sp, #72] // 4-byte Spill1608; CHECK-SD-NEXT: stp w8, w9, [sp, #100] // 8-byte Folded Spill1609; CHECK-SD-NEXT: udiv w10, w9, w81610; CHECK-SD-NEXT: umov w8, v2.b[9]1611; CHECK-SD-NEXT: umov w9, v0.b[9]1612; CHECK-SD-NEXT: stp w8, w9, [sp, #136] // 8-byte Folded Spill1613; CHECK-SD-NEXT: str w10, [sp, #108] // 4-byte Spill1614; CHECK-SD-NEXT: udiv w10, w9, w81615; CHECK-SD-NEXT: umov w8, v2.b[10]1616; CHECK-SD-NEXT: umov w9, v0.b[10]1617; CHECK-SD-NEXT: stp w11, w8, [sp, #120] // 8-byte Folded Spill1618; CHECK-SD-NEXT: str w10, [sp, #144] // 4-byte Spill1619; CHECK-SD-NEXT: udiv w10, w9, w81620; CHECK-SD-NEXT: umov w8, v2.b[11]1621; CHECK-SD-NEXT: stp w9, w10, [sp, #128] // 8-byte Folded Spill1622; CHECK-SD-NEXT: umov w9, v0.b[11]1623; CHECK-SD-NEXT: udiv w25, w16, w171624; CHECK-SD-NEXT: stp w8, w9, [sp, #172] // 8-byte Folded Spill1625; CHECK-SD-NEXT: udiv w11, w9, w81626; CHECK-SD-NEXT: umov w8, v2.b[12]1627; CHECK-SD-NEXT: umov w9, v0.b[12]1628; CHECK-SD-NEXT: str w8, [sp, #152] // 4-byte Spill1629; CHECK-SD-NEXT: str w9, [sp, #160] // 4-byte Spill1630; CHECK-SD-NEXT: udiv w10, w9, w81631; CHECK-SD-NEXT: umov w8, v2.b[13]1632; CHECK-SD-NEXT: umov w9, v0.b[13]1633; CHECK-SD-NEXT: stp w8, w9, [sp, #196] // 8-byte Folded Spill1634; CHECK-SD-NEXT: str w10, [sp, #168] // 4-byte Spill1635; CHECK-SD-NEXT: udiv w10, w9, w81636; CHECK-SD-NEXT: umov w8, v2.b[14]1637; CHECK-SD-NEXT: umov w9, v0.b[14]1638; CHECK-SD-NEXT: stp w11, w8, [sp, #180] // 8-byte Folded Spill1639; CHECK-SD-NEXT: umov w11, v1.b[2]1640; CHECK-SD-NEXT: str w10, [sp, #204] // 4-byte Spill1641; CHECK-SD-NEXT: udiv w10, w9, w81642; CHECK-SD-NEXT: umov w8, v2.b[15]1643; CHECK-SD-NEXT: str w8, [sp, #148] // 4-byte Spill1644; CHECK-SD-NEXT: stp w9, w10, [sp, #188] // 8-byte Folded Spill1645; CHECK-SD-NEXT: umov w9, v0.b[15]1646; CHECK-SD-NEXT: udiv w22, w11, w121647; CHECK-SD-NEXT: str w9, [sp, #156] // 4-byte Spill1648; CHECK-SD-NEXT: udiv w10, w9, w81649; CHECK-SD-NEXT: str w10, [sp, #164] // 4-byte Spill1650; CHECK-SD-NEXT: umov w10, v1.b[0]1651; CHECK-SD-NEXT: udiv w9, w7, w191652; CHECK-SD-NEXT: udiv w8, w3, w61653; CHECK-SD-NEXT: udiv w23, w10, w131654; CHECK-SD-NEXT: stp w8, w9, [sp, #8] // 8-byte Folded Spill1655; CHECK-SD-NEXT: ldr w8, [sp, #96] // 4-byte Reload1656; CHECK-SD-NEXT: ldr w9, [sp, #88] // 4-byte Reload1657; CHECK-SD-NEXT: msub w9, w8, w30, w91658; CHECK-SD-NEXT: ldr w8, [sp, #48] // 4-byte Reload1659; CHECK-SD-NEXT: ldr w30, [sp, #40] // 4-byte Reload1660; CHECK-SD-NEXT: msub w8, w8, w29, w301661; CHECK-SD-NEXT: ldp x29, x30, [sp, #208] // 16-byte Folded Reload1662; CHECK-SD-NEXT: fmov s0, w81663; CHECK-SD-NEXT: msub w10, w23, w13, w101664; CHECK-SD-NEXT: udiv w24, w14, w151665; CHECK-SD-NEXT: msub w13, w27, w5, w01666; CHECK-SD-NEXT: ldr w5, [sp, #16] // 4-byte Reload1667; CHECK-SD-NEXT: mov v0.b[1], w91668; CHECK-SD-NEXT: msub w9, w22, w12, w111669; CHECK-SD-NEXT: umov w11, v1.b[10]1670; CHECK-SD-NEXT: fmov s2, w101671; CHECK-SD-NEXT: ldp w10, w8, [sp, #20] // 8-byte Folded Reload1672; CHECK-SD-NEXT: mov v2.b[1], w131673; CHECK-SD-NEXT: msub w8, w8, w5, w101674; CHECK-SD-NEXT: ldr w5, [sp, #52] // 4-byte Reload1675; CHECK-SD-NEXT: umov w10, v3.b[10]1676; CHECK-SD-NEXT: udiv w28, w1, w41677; CHECK-SD-NEXT: ldp w13, w12, [sp, #56] // 8-byte Folded Reload1678; CHECK-SD-NEXT: mov v2.b[2], w91679; CHECK-SD-NEXT: mov v0.b[2], w81680; CHECK-SD-NEXT: msub w8, w25, w17, w161681; CHECK-SD-NEXT: ldr w17, [sp, #28] // 4-byte Reload1682; CHECK-SD-NEXT: ldr w16, [sp, #36] // 4-byte Reload1683; CHECK-SD-NEXT: msub w12, w12, w5, w131684; CHECK-SD-NEXT: ldr w13, [sp, #44] // 4-byte Reload1685; CHECK-SD-NEXT: ldr w5, [sp, #136] // 4-byte Reload1686; CHECK-SD-NEXT: mov v2.b[3], w81687; CHECK-SD-NEXT: msub w8, w24, w15, w141688; CHECK-SD-NEXT: ldr w15, [sp, #92] // 4-byte Reload1689; CHECK-SD-NEXT: mov v0.b[3], w121690; CHECK-SD-NEXT: msub w13, w13, w17, w161691; CHECK-SD-NEXT: ldr w17, [sp, #76] // 4-byte Reload1692; CHECK-SD-NEXT: udiv w26, w18, w21693; CHECK-SD-NEXT: ldr w16, [sp, #84] // 4-byte Reload1694; CHECK-SD-NEXT: umov w12, v3.b[11]1695; CHECK-SD-NEXT: msub w15, w15, w17, w161696; CHECK-SD-NEXT: umov w14, v1.b[11]1697; CHECK-SD-NEXT: mov v2.b[4], w81698; CHECK-SD-NEXT: msub w8, w28, w4, w11699; CHECK-SD-NEXT: ldr w1, [sp, #64] // 4-byte Reload1700; CHECK-SD-NEXT: mov v0.b[4], w131701; CHECK-SD-NEXT: ldr w4, [sp, #100] // 4-byte Reload1702; CHECK-SD-NEXT: ldp w17, w16, [sp, #68] // 8-byte Folded Reload1703; CHECK-SD-NEXT: ldp x24, x23, [sp, #256] // 16-byte Folded Reload1704; CHECK-SD-NEXT: mov v2.b[5], w81705; CHECK-SD-NEXT: ldp x28, x27, [sp, #224] // 16-byte Folded Reload1706; CHECK-SD-NEXT: mov v0.b[5], w151707; CHECK-SD-NEXT: msub w16, w16, w1, w171708; CHECK-SD-NEXT: umov w15, v3.b[12]1709; CHECK-SD-NEXT: msub w8, w26, w2, w181710; CHECK-SD-NEXT: ldr w2, [sp, #112] // 4-byte Reload1711; CHECK-SD-NEXT: udiv w0, w20, w211712; CHECK-SD-NEXT: ldp w1, w18, [sp, #116] // 8-byte Folded Reload1713; CHECK-SD-NEXT: umov w17, v1.b[12]1714; CHECK-SD-NEXT: ldp x26, x25, [sp, #240] // 16-byte Folded Reload1715; CHECK-SD-NEXT: mov v2.b[6], w81716; CHECK-SD-NEXT: ldr w8, [sp, #12] // 4-byte Reload1717; CHECK-SD-NEXT: mov v0.b[6], w161718; CHECK-SD-NEXT: msub w18, w18, w2, w11719; CHECK-SD-NEXT: msub w8, w8, w19, w71720; CHECK-SD-NEXT: ldp w2, w1, [sp, #104] // 8-byte Folded Reload1721; CHECK-SD-NEXT: mov v0.b[7], w181722; CHECK-SD-NEXT: umov w18, v3.b[13]1723; CHECK-SD-NEXT: mov v2.b[7], w81724; CHECK-SD-NEXT: ldr w8, [sp, #8] // 4-byte Reload1725; CHECK-SD-NEXT: udiv w9, w11, w101726; CHECK-SD-NEXT: msub w1, w1, w4, w21727; CHECK-SD-NEXT: umov w2, v1.b[13]1728; CHECK-SD-NEXT: msub w8, w8, w6, w31729; CHECK-SD-NEXT: ldp w4, w3, [sp, #140] // 8-byte Folded Reload1730; CHECK-SD-NEXT: mov v0.b[8], w11731; CHECK-SD-NEXT: mov v2.b[8], w81732; CHECK-SD-NEXT: msub w8, w0, w21, w201733; CHECK-SD-NEXT: msub w3, w3, w5, w41734; CHECK-SD-NEXT: ldr w5, [sp, #124] // 4-byte Reload1735; CHECK-SD-NEXT: ldp w4, w1, [sp, #128] // 8-byte Folded Reload1736; CHECK-SD-NEXT: udiv w13, w14, w121737; CHECK-SD-NEXT: ldp x20, x19, [sp, #288] // 16-byte Folded Reload1738; CHECK-SD-NEXT: mov v2.b[9], w81739; CHECK-SD-NEXT: mov v0.b[9], w31740; CHECK-SD-NEXT: msub w8, w9, w10, w111741; CHECK-SD-NEXT: msub w1, w1, w5, w41742; CHECK-SD-NEXT: ldr w4, [sp, #172] // 4-byte Reload1743; CHECK-SD-NEXT: umov w9, v3.b[14]1744; CHECK-SD-NEXT: ldp w3, w11, [sp, #176] // 8-byte Folded Reload1745; CHECK-SD-NEXT: umov w10, v1.b[14]1746; CHECK-SD-NEXT: ldp x22, x21, [sp, #272] // 16-byte Folded Reload1747; CHECK-SD-NEXT: mov v2.b[10], w81748; CHECK-SD-NEXT: mov v0.b[10], w11749; CHECK-SD-NEXT: ldr w1, [sp, #152] // 4-byte Reload1750; CHECK-SD-NEXT: msub w11, w11, w4, w31751; CHECK-SD-NEXT: udiv w16, w17, w151752; CHECK-SD-NEXT: msub w8, w13, w12, w141753; CHECK-SD-NEXT: ldr w13, [sp, #168] // 4-byte Reload1754; CHECK-SD-NEXT: ldr w14, [sp, #160] // 4-byte Reload1755; CHECK-SD-NEXT: mov v0.b[11], w111756; CHECK-SD-NEXT: umov w11, v3.b[15]1757; CHECK-SD-NEXT: msub w13, w13, w1, w141758; CHECK-SD-NEXT: umov w14, v1.b[15]1759; CHECK-SD-NEXT: mov v2.b[11], w81760; CHECK-SD-NEXT: mov v0.b[12], w131761; CHECK-SD-NEXT: udiv w0, w2, w181762; CHECK-SD-NEXT: msub w8, w16, w15, w171763; CHECK-SD-NEXT: ldr w17, [sp, #196] // 4-byte Reload1764; CHECK-SD-NEXT: ldp w16, w15, [sp, #200] // 8-byte Folded Reload1765; CHECK-SD-NEXT: mov v2.b[12], w81766; CHECK-SD-NEXT: msub w15, w15, w17, w161767; CHECK-SD-NEXT: ldp w17, w16, [sp, #188] // 8-byte Folded Reload1768; CHECK-SD-NEXT: mov v0.b[13], w151769; CHECK-SD-NEXT: udiv w12, w10, w91770; CHECK-SD-NEXT: msub w8, w0, w18, w21771; CHECK-SD-NEXT: ldr w18, [sp, #184] // 4-byte Reload1772; CHECK-SD-NEXT: msub w16, w16, w18, w171773; CHECK-SD-NEXT: mov v2.b[13], w81774; CHECK-SD-NEXT: mov v0.b[14], w161775; CHECK-SD-NEXT: udiv w13, w14, w111776; CHECK-SD-NEXT: msub w8, w12, w9, w101777; CHECK-SD-NEXT: ldr w9, [sp, #164] // 4-byte Reload1778; CHECK-SD-NEXT: ldr w12, [sp, #148] // 4-byte Reload1779; CHECK-SD-NEXT: ldr w10, [sp, #156] // 4-byte Reload1780; CHECK-SD-NEXT: mov v2.b[14], w81781; CHECK-SD-NEXT: msub w9, w9, w12, w101782; CHECK-SD-NEXT: mov v0.b[15], w91783; CHECK-SD-NEXT: msub w8, w13, w11, w141784; CHECK-SD-NEXT: mov v2.b[15], w81785; CHECK-SD-NEXT: mov v1.16b, v2.16b1786; CHECK-SD-NEXT: add sp, sp, #3041787; CHECK-SD-NEXT: ret1788;1789; CHECK-GI-LABEL: uv32i8:1790; CHECK-GI: // %bb.0: // %entry1791; CHECK-GI-NEXT: sub sp, sp, #1121792; CHECK-GI-NEXT: stp x29, x30, [sp, #16] // 16-byte Folded Spill1793; CHECK-GI-NEXT: stp x28, x27, [sp, #32] // 16-byte Folded Spill1794; CHECK-GI-NEXT: stp x26, x25, [sp, #48] // 16-byte Folded Spill1795; CHECK-GI-NEXT: stp x24, x23, [sp, #64] // 16-byte Folded Spill1796; CHECK-GI-NEXT: stp x22, x21, [sp, #80] // 16-byte Folded Spill1797; CHECK-GI-NEXT: stp x20, x19, [sp, #96] // 16-byte Folded Spill1798; CHECK-GI-NEXT: .cfi_def_cfa_offset 1121799; CHECK-GI-NEXT: .cfi_offset w19, -81800; CHECK-GI-NEXT: .cfi_offset w20, -161801; CHECK-GI-NEXT: .cfi_offset w21, -241802; CHECK-GI-NEXT: .cfi_offset w22, -321803; CHECK-GI-NEXT: .cfi_offset w23, -401804; CHECK-GI-NEXT: .cfi_offset w24, -481805; CHECK-GI-NEXT: .cfi_offset w25, -561806; CHECK-GI-NEXT: .cfi_offset w26, -641807; CHECK-GI-NEXT: .cfi_offset w27, -721808; CHECK-GI-NEXT: .cfi_offset w28, -801809; CHECK-GI-NEXT: .cfi_offset w30, -881810; CHECK-GI-NEXT: .cfi_offset w29, -961811; CHECK-GI-NEXT: ushll v4.8h, v0.8b, #01812; CHECK-GI-NEXT: ushll v5.8h, v2.8b, #01813; CHECK-GI-NEXT: ushll v16.8h, v1.8b, #01814; CHECK-GI-NEXT: ushll v17.8h, v3.8b, #01815; CHECK-GI-NEXT: ushll v6.4s, v4.4h, #01816; CHECK-GI-NEXT: ushll v7.4s, v5.4h, #01817; CHECK-GI-NEXT: ushll2 v4.4s, v4.8h, #01818; CHECK-GI-NEXT: ushll2 v5.4s, v5.8h, #01819; CHECK-GI-NEXT: ushll v18.4s, v16.4h, #01820; CHECK-GI-NEXT: ushll v19.4s, v17.4h, #01821; CHECK-GI-NEXT: ushll2 v16.4s, v16.8h, #01822; CHECK-GI-NEXT: ushll2 v17.4s, v17.8h, #01823; CHECK-GI-NEXT: fmov w8, s61824; CHECK-GI-NEXT: fmov w9, s71825; CHECK-GI-NEXT: mov w12, v7.s[3]1826; CHECK-GI-NEXT: fmov w13, s51827; CHECK-GI-NEXT: mov w14, v5.s[1]1828; CHECK-GI-NEXT: mov w16, v5.s[3]1829; CHECK-GI-NEXT: fmov w6, s191830; CHECK-GI-NEXT: mov w7, v19.s[3]1831; CHECK-GI-NEXT: fmov w21, s171832; CHECK-GI-NEXT: udiv w10, w8, w91833; CHECK-GI-NEXT: mov w8, v6.s[1]1834; CHECK-GI-NEXT: mov w9, v7.s[1]1835; CHECK-GI-NEXT: mov w22, v17.s[3]1836; CHECK-GI-NEXT: udiv w11, w8, w91837; CHECK-GI-NEXT: mov w8, v6.s[2]1838; CHECK-GI-NEXT: mov w9, v7.s[2]1839; CHECK-GI-NEXT: fmov s20, w101840; CHECK-GI-NEXT: udiv w9, w8, w91841; CHECK-GI-NEXT: mov w8, v6.s[3]1842; CHECK-GI-NEXT: ushll2 v6.8h, v0.16b, #01843; CHECK-GI-NEXT: mov v20.s[1], w111844; CHECK-GI-NEXT: ushll v0.8h, v0.8b, #01845; CHECK-GI-NEXT: ushll v28.4s, v0.4h, #01846; CHECK-GI-NEXT: ushll2 v0.4s, v0.8h, #01847; CHECK-GI-NEXT: udiv w8, w8, w121848; CHECK-GI-NEXT: fmov w12, s41849; CHECK-GI-NEXT: mov v20.s[2], w91850; CHECK-GI-NEXT: udiv w13, w12, w131851; CHECK-GI-NEXT: mov w12, v4.s[1]1852; CHECK-GI-NEXT: str w8, [sp, #12] // 4-byte Spill1853; CHECK-GI-NEXT: ldr w11, [sp, #12] // 4-byte Reload1854; CHECK-GI-NEXT: mov v20.s[3], w111855; CHECK-GI-NEXT: udiv w15, w12, w141856; CHECK-GI-NEXT: mov w12, v4.s[2]1857; CHECK-GI-NEXT: mov w14, v5.s[2]1858; CHECK-GI-NEXT: ushll v5.4s, v6.4h, #01859; CHECK-GI-NEXT: fmov s21, w131860; CHECK-GI-NEXT: udiv w14, w12, w141861; CHECK-GI-NEXT: mov w12, v4.s[3]1862; CHECK-GI-NEXT: ushll2 v4.8h, v2.16b, #01863; CHECK-GI-NEXT: mov v21.s[1], w151864; CHECK-GI-NEXT: ushll v2.8h, v2.8b, #01865; CHECK-GI-NEXT: ushll v7.4s, v4.4h, #01866; CHECK-GI-NEXT: ushll v30.4s, v2.4h, #01867; CHECK-GI-NEXT: ushll2 v2.4s, v2.8h, #01868; CHECK-GI-NEXT: fmov w17, s71869; CHECK-GI-NEXT: mls v28.4s, v20.4s, v30.4s1870; CHECK-GI-NEXT: udiv w12, w12, w161871; CHECK-GI-NEXT: fmov w16, s51872; CHECK-GI-NEXT: mov v21.s[2], w141873; CHECK-GI-NEXT: udiv w18, w16, w171874; CHECK-GI-NEXT: mov w16, v5.s[1]1875; CHECK-GI-NEXT: mov w17, v7.s[1]1876; CHECK-GI-NEXT: mov v21.s[3], w121877; CHECK-GI-NEXT: mls v0.4s, v21.4s, v2.4s1878; CHECK-GI-NEXT: udiv w1, w16, w171879; CHECK-GI-NEXT: mov w16, v5.s[2]1880; CHECK-GI-NEXT: mov w17, v7.s[2]1881; CHECK-GI-NEXT: fmov s22, w181882; CHECK-GI-NEXT: uzp1 v0.8h, v28.8h, v0.8h1883; CHECK-GI-NEXT: udiv w0, w16, w171884; CHECK-GI-NEXT: mov w16, v5.s[3]1885; CHECK-GI-NEXT: mov w17, v7.s[3]1886; CHECK-GI-NEXT: ushll2 v5.4s, v6.8h, #01887; CHECK-GI-NEXT: ushll2 v7.4s, v4.8h, #01888; CHECK-GI-NEXT: mov v22.s[1], w11889; CHECK-GI-NEXT: ushll v6.4s, v6.4h, #01890; CHECK-GI-NEXT: ushll v4.4s, v4.4h, #01891; CHECK-GI-NEXT: fmov w2, s71892; CHECK-GI-NEXT: mov w3, v7.s[3]1893; CHECK-GI-NEXT: udiv w16, w16, w171894; CHECK-GI-NEXT: fmov w17, s51895; CHECK-GI-NEXT: mov v22.s[2], w01896; CHECK-GI-NEXT: udiv w5, w17, w21897; CHECK-GI-NEXT: mov w17, v5.s[1]1898; CHECK-GI-NEXT: mov w2, v7.s[1]1899; CHECK-GI-NEXT: mov v22.s[3], w161900; CHECK-GI-NEXT: mls v6.4s, v22.4s, v4.4s1901; CHECK-GI-NEXT: udiv w4, w17, w21902; CHECK-GI-NEXT: mov w17, v5.s[2]1903; CHECK-GI-NEXT: mov w2, v7.s[2]1904; CHECK-GI-NEXT: fmov s23, w51905; CHECK-GI-NEXT: udiv w2, w17, w21906; CHECK-GI-NEXT: mov w17, v5.s[3]1907; CHECK-GI-NEXT: mov v23.s[1], w41908; CHECK-GI-NEXT: udiv w17, w17, w31909; CHECK-GI-NEXT: fmov w3, s181910; CHECK-GI-NEXT: mov v23.s[2], w21911; CHECK-GI-NEXT: udiv w20, w3, w61912; CHECK-GI-NEXT: mov w3, v18.s[1]1913; CHECK-GI-NEXT: mov w6, v19.s[1]1914; CHECK-GI-NEXT: mov v23.s[3], w171915; CHECK-GI-NEXT: mls v5.4s, v23.4s, v7.4s1916; CHECK-GI-NEXT: udiv w19, w3, w61917; CHECK-GI-NEXT: mov w3, v18.s[2]1918; CHECK-GI-NEXT: mov w6, v19.s[2]1919; CHECK-GI-NEXT: fmov s24, w201920; CHECK-GI-NEXT: uzp1 v2.8h, v6.8h, v5.8h1921; CHECK-GI-NEXT: uzp1 v0.16b, v0.16b, v2.16b1922; CHECK-GI-NEXT: udiv w6, w3, w61923; CHECK-GI-NEXT: mov w3, v18.s[3]1924; CHECK-GI-NEXT: mov v24.s[1], w191925; CHECK-GI-NEXT: ldp x20, x19, [sp, #96] // 16-byte Folded Reload1926; CHECK-GI-NEXT: udiv w3, w3, w71927; CHECK-GI-NEXT: fmov w7, s161928; CHECK-GI-NEXT: mov v24.s[2], w61929; CHECK-GI-NEXT: udiv w23, w7, w211930; CHECK-GI-NEXT: mov w7, v16.s[1]1931; CHECK-GI-NEXT: mov w21, v17.s[1]1932; CHECK-GI-NEXT: mov v24.s[3], w31933; CHECK-GI-NEXT: udiv w24, w7, w211934; CHECK-GI-NEXT: mov w7, v16.s[2]1935; CHECK-GI-NEXT: mov w21, v17.s[2]1936; CHECK-GI-NEXT: ushll2 v17.8h, v1.16b, #01937; CHECK-GI-NEXT: fmov s25, w231938; CHECK-GI-NEXT: ushll v1.8h, v1.8b, #01939; CHECK-GI-NEXT: ushll v18.4s, v17.4h, #01940; CHECK-GI-NEXT: ushll v29.4s, v1.4h, #01941; CHECK-GI-NEXT: ushll2 v1.4s, v1.8h, #01942; CHECK-GI-NEXT: udiv w21, w7, w211943; CHECK-GI-NEXT: mov w7, v16.s[3]1944; CHECK-GI-NEXT: ushll2 v16.8h, v3.16b, #01945; CHECK-GI-NEXT: mov v25.s[1], w241946; CHECK-GI-NEXT: ushll v3.8h, v3.8b, #01947; CHECK-GI-NEXT: ldp x24, x23, [sp, #64] // 16-byte Folded Reload1948; CHECK-GI-NEXT: ushll v19.4s, v16.4h, #01949; CHECK-GI-NEXT: ushll v31.4s, v3.4h, #01950; CHECK-GI-NEXT: ushll2 v3.4s, v3.8h, #01951; CHECK-GI-NEXT: fmov w25, s191952; CHECK-GI-NEXT: mov w26, v19.s[1]1953; CHECK-GI-NEXT: mov w27, v19.s[2]1954; CHECK-GI-NEXT: mov w28, v19.s[3]1955; CHECK-GI-NEXT: ushll2 v19.4s, v16.8h, #01956; CHECK-GI-NEXT: ushll v16.4s, v16.4h, #01957; CHECK-GI-NEXT: udiv w7, w7, w221958; CHECK-GI-NEXT: fmov w22, s181959; CHECK-GI-NEXT: mov v25.s[2], w211960; CHECK-GI-NEXT: mls v29.4s, v24.4s, v31.4s1961; CHECK-GI-NEXT: fmov w29, s191962; CHECK-GI-NEXT: mov w30, v19.s[1]1963; CHECK-GI-NEXT: mov w8, v19.s[2]1964; CHECK-GI-NEXT: mov w10, v19.s[3]1965; CHECK-GI-NEXT: udiv w25, w22, w251966; CHECK-GI-NEXT: mov w22, v18.s[1]1967; CHECK-GI-NEXT: mov v25.s[3], w71968; CHECK-GI-NEXT: mls v1.4s, v25.4s, v3.4s1969; CHECK-GI-NEXT: udiv w26, w22, w261970; CHECK-GI-NEXT: mov w22, v18.s[2]1971; CHECK-GI-NEXT: fmov s26, w251972; CHECK-GI-NEXT: uzp1 v1.8h, v29.8h, v1.8h1973; CHECK-GI-NEXT: udiv w27, w22, w271974; CHECK-GI-NEXT: mov w22, v18.s[3]1975; CHECK-GI-NEXT: ushll2 v18.4s, v17.8h, #01976; CHECK-GI-NEXT: mov v26.s[1], w261977; CHECK-GI-NEXT: ushll v17.4s, v17.4h, #01978; CHECK-GI-NEXT: ldp x26, x25, [sp, #48] // 16-byte Folded Reload1979; CHECK-GI-NEXT: mov w9, v18.s[3]1980; CHECK-GI-NEXT: udiv w22, w22, w281981; CHECK-GI-NEXT: fmov w28, s181982; CHECK-GI-NEXT: mov v26.s[2], w271983; CHECK-GI-NEXT: udiv w28, w28, w291984; CHECK-GI-NEXT: mov w29, v18.s[1]1985; CHECK-GI-NEXT: mov v26.s[3], w221986; CHECK-GI-NEXT: ldp x22, x21, [sp, #80] // 16-byte Folded Reload1987; CHECK-GI-NEXT: mls v17.4s, v26.4s, v16.4s1988; CHECK-GI-NEXT: udiv w29, w29, w301989; CHECK-GI-NEXT: mov w30, v18.s[2]1990; CHECK-GI-NEXT: fmov s27, w281991; CHECK-GI-NEXT: ldp x28, x27, [sp, #32] // 16-byte Folded Reload1992; CHECK-GI-NEXT: udiv w8, w30, w81993; CHECK-GI-NEXT: mov v27.s[1], w291994; CHECK-GI-NEXT: ldp x29, x30, [sp, #16] // 16-byte Folded Reload1995; CHECK-GI-NEXT: udiv w9, w9, w101996; CHECK-GI-NEXT: mov v27.s[2], w81997; CHECK-GI-NEXT: mov v27.s[3], w91998; CHECK-GI-NEXT: mls v18.4s, v27.4s, v19.4s1999; CHECK-GI-NEXT: uzp1 v3.8h, v17.8h, v18.8h2000; CHECK-GI-NEXT: uzp1 v1.16b, v1.16b, v3.16b2001; CHECK-GI-NEXT: add sp, sp, #1122002; CHECK-GI-NEXT: ret2003entry:2004 %s = urem <32 x i8> %d, %e2005 ret <32 x i8> %s2006}2007 2008define <2 x i16> @sv2i16(<2 x i16> %d, <2 x i16> %e) {2009; CHECK-SD-LABEL: sv2i16:2010; CHECK-SD: // %bb.0: // %entry2011; CHECK-SD-NEXT: shl v0.2s, v0.2s, #162012; CHECK-SD-NEXT: shl v1.2s, v1.2s, #162013; CHECK-SD-NEXT: sshr v0.2s, v0.2s, #162014; CHECK-SD-NEXT: sshr v1.2s, v1.2s, #162015; CHECK-SD-NEXT: fmov w8, s12016; CHECK-SD-NEXT: fmov w9, s02017; CHECK-SD-NEXT: mov w11, v1.s[1]2018; CHECK-SD-NEXT: mov w12, v0.s[1]2019; CHECK-SD-NEXT: sdiv w10, w9, w82020; CHECK-SD-NEXT: sdiv w13, w12, w112021; CHECK-SD-NEXT: msub w8, w10, w8, w92022; CHECK-SD-NEXT: fmov s0, w82023; CHECK-SD-NEXT: msub w9, w13, w11, w122024; CHECK-SD-NEXT: mov v0.s[1], w92025; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q02026; CHECK-SD-NEXT: ret2027;2028; CHECK-GI-LABEL: sv2i16:2029; CHECK-GI: // %bb.0: // %entry2030; CHECK-GI-NEXT: shl v0.2s, v0.2s, #162031; CHECK-GI-NEXT: shl v1.2s, v1.2s, #162032; CHECK-GI-NEXT: sshr v0.2s, v0.2s, #162033; CHECK-GI-NEXT: sshr v1.2s, v1.2s, #162034; CHECK-GI-NEXT: fmov w8, s02035; CHECK-GI-NEXT: fmov w9, s12036; CHECK-GI-NEXT: mov w10, v1.s[1]2037; CHECK-GI-NEXT: sdiv w8, w8, w92038; CHECK-GI-NEXT: mov w9, v0.s[1]2039; CHECK-GI-NEXT: sdiv w9, w9, w102040; CHECK-GI-NEXT: fmov s2, w82041; CHECK-GI-NEXT: mov v2.s[1], w92042; CHECK-GI-NEXT: mls v0.2s, v2.2s, v1.2s2043; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q02044; CHECK-GI-NEXT: ret2045entry:2046 %s = srem <2 x i16> %d, %e2047 ret <2 x i16> %s2048}2049 2050define <3 x i16> @sv3i16(<3 x i16> %d, <3 x i16> %e) {2051; CHECK-SD-LABEL: sv3i16:2052; CHECK-SD: // %bb.0: // %entry2053; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q12054; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q02055; CHECK-SD-NEXT: smov w11, v1.h[0]2056; CHECK-SD-NEXT: smov w12, v0.h[0]2057; CHECK-SD-NEXT: smov w8, v1.h[1]2058; CHECK-SD-NEXT: smov w9, v0.h[1]2059; CHECK-SD-NEXT: smov w14, v1.h[2]2060; CHECK-SD-NEXT: smov w15, v0.h[2]2061; CHECK-SD-NEXT: sdiv w13, w12, w112062; CHECK-SD-NEXT: sdiv w10, w9, w82063; CHECK-SD-NEXT: msub w11, w13, w11, w122064; CHECK-SD-NEXT: fmov s0, w112065; CHECK-SD-NEXT: sdiv w16, w15, w142066; CHECK-SD-NEXT: msub w8, w10, w8, w92067; CHECK-SD-NEXT: mov v0.h[1], w82068; CHECK-SD-NEXT: msub w8, w16, w14, w152069; CHECK-SD-NEXT: mov v0.h[2], w82070; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q02071; CHECK-SD-NEXT: ret2072;2073; CHECK-GI-LABEL: sv3i16:2074; CHECK-GI: // %bb.0: // %entry2075; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q02076; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q12077; CHECK-GI-NEXT: smov w8, v0.h[0]2078; CHECK-GI-NEXT: smov w9, v1.h[0]2079; CHECK-GI-NEXT: smov w11, v0.h[1]2080; CHECK-GI-NEXT: smov w12, v1.h[1]2081; CHECK-GI-NEXT: smov w14, v0.h[2]2082; CHECK-GI-NEXT: smov w15, v1.h[2]2083; CHECK-GI-NEXT: sdiv w10, w8, w92084; CHECK-GI-NEXT: sdiv w13, w11, w122085; CHECK-GI-NEXT: msub w8, w10, w9, w82086; CHECK-GI-NEXT: fmov s0, w82087; CHECK-GI-NEXT: sdiv w16, w14, w152088; CHECK-GI-NEXT: msub w9, w13, w12, w112089; CHECK-GI-NEXT: mov v0.h[1], w92090; CHECK-GI-NEXT: msub w8, w16, w15, w142091; CHECK-GI-NEXT: mov v0.h[2], w82092; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q02093; CHECK-GI-NEXT: ret2094entry:2095 %s = srem <3 x i16> %d, %e2096 ret <3 x i16> %s2097}2098 2099define <4 x i16> @sv4i16(<4 x i16> %d, <4 x i16> %e) {2100; CHECK-SD-LABEL: sv4i16:2101; CHECK-SD: // %bb.0: // %entry2102; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q12103; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q02104; CHECK-SD-NEXT: smov w11, v1.h[0]2105; CHECK-SD-NEXT: smov w12, v0.h[0]2106; CHECK-SD-NEXT: smov w8, v1.h[1]2107; CHECK-SD-NEXT: smov w9, v0.h[1]2108; CHECK-SD-NEXT: smov w14, v1.h[2]2109; CHECK-SD-NEXT: smov w15, v0.h[2]2110; CHECK-SD-NEXT: smov w17, v1.h[3]2111; CHECK-SD-NEXT: smov w18, v0.h[3]2112; CHECK-SD-NEXT: sdiv w13, w12, w112113; CHECK-SD-NEXT: sdiv w10, w9, w82114; CHECK-SD-NEXT: msub w11, w13, w11, w122115; CHECK-SD-NEXT: fmov s0, w112116; CHECK-SD-NEXT: sdiv w16, w15, w142117; CHECK-SD-NEXT: msub w8, w10, w8, w92118; CHECK-SD-NEXT: mov v0.h[1], w82119; CHECK-SD-NEXT: sdiv w9, w18, w172120; CHECK-SD-NEXT: msub w8, w16, w14, w152121; CHECK-SD-NEXT: mov v0.h[2], w82122; CHECK-SD-NEXT: msub w8, w9, w17, w182123; CHECK-SD-NEXT: mov v0.h[3], w82124; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q02125; CHECK-SD-NEXT: ret2126;2127; CHECK-GI-LABEL: sv4i16:2128; CHECK-GI: // %bb.0: // %entry2129; CHECK-GI-NEXT: sshll v0.4s, v0.4h, #02130; CHECK-GI-NEXT: sshll v1.4s, v1.4h, #02131; CHECK-GI-NEXT: fmov w8, s02132; CHECK-GI-NEXT: fmov w9, s12133; CHECK-GI-NEXT: mov w10, v1.s[1]2134; CHECK-GI-NEXT: mov w11, v1.s[2]2135; CHECK-GI-NEXT: mov w12, v1.s[3]2136; CHECK-GI-NEXT: sdiv w8, w8, w92137; CHECK-GI-NEXT: mov w9, v0.s[1]2138; CHECK-GI-NEXT: sdiv w9, w9, w102139; CHECK-GI-NEXT: mov w10, v0.s[2]2140; CHECK-GI-NEXT: fmov s2, w82141; CHECK-GI-NEXT: sdiv w10, w10, w112142; CHECK-GI-NEXT: mov w11, v0.s[3]2143; CHECK-GI-NEXT: mov v2.s[1], w92144; CHECK-GI-NEXT: sdiv w8, w11, w122145; CHECK-GI-NEXT: mov v2.s[2], w102146; CHECK-GI-NEXT: mov v2.s[3], w82147; CHECK-GI-NEXT: mls v0.4s, v2.4s, v1.4s2148; CHECK-GI-NEXT: xtn v0.4h, v0.4s2149; CHECK-GI-NEXT: ret2150entry:2151 %s = srem <4 x i16> %d, %e2152 ret <4 x i16> %s2153}2154 2155define <8 x i16> @sv8i16(<8 x i16> %d, <8 x i16> %e) {2156; CHECK-SD-LABEL: sv8i16:2157; CHECK-SD: // %bb.0: // %entry2158; CHECK-SD-NEXT: smov w11, v1.h[0]2159; CHECK-SD-NEXT: smov w12, v0.h[0]2160; CHECK-SD-NEXT: smov w8, v1.h[1]2161; CHECK-SD-NEXT: smov w9, v0.h[1]2162; CHECK-SD-NEXT: smov w14, v1.h[2]2163; CHECK-SD-NEXT: smov w15, v0.h[2]2164; CHECK-SD-NEXT: smov w17, v1.h[3]2165; CHECK-SD-NEXT: smov w18, v0.h[3]2166; CHECK-SD-NEXT: smov w1, v1.h[4]2167; CHECK-SD-NEXT: smov w2, v0.h[4]2168; CHECK-SD-NEXT: smov w4, v1.h[5]2169; CHECK-SD-NEXT: smov w5, v0.h[5]2170; CHECK-SD-NEXT: sdiv w13, w12, w112171; CHECK-SD-NEXT: sdiv w10, w9, w82172; CHECK-SD-NEXT: msub w11, w13, w11, w122173; CHECK-SD-NEXT: smov w13, v1.h[7]2174; CHECK-SD-NEXT: fmov s2, w112175; CHECK-SD-NEXT: smov w11, v0.h[6]2176; CHECK-SD-NEXT: sdiv w16, w15, w142177; CHECK-SD-NEXT: msub w8, w10, w8, w92178; CHECK-SD-NEXT: smov w10, v1.h[6]2179; CHECK-SD-NEXT: mov v2.h[1], w82180; CHECK-SD-NEXT: sdiv w0, w18, w172181; CHECK-SD-NEXT: msub w8, w16, w14, w152182; CHECK-SD-NEXT: smov w14, v0.h[7]2183; CHECK-SD-NEXT: mov v2.h[2], w82184; CHECK-SD-NEXT: sdiv w3, w2, w12185; CHECK-SD-NEXT: msub w8, w0, w17, w182186; CHECK-SD-NEXT: mov v2.h[3], w82187; CHECK-SD-NEXT: sdiv w9, w5, w42188; CHECK-SD-NEXT: msub w8, w3, w1, w22189; CHECK-SD-NEXT: mov v2.h[4], w82190; CHECK-SD-NEXT: sdiv w12, w11, w102191; CHECK-SD-NEXT: msub w8, w9, w4, w52192; CHECK-SD-NEXT: mov v2.h[5], w82193; CHECK-SD-NEXT: sdiv w9, w14, w132194; CHECK-SD-NEXT: msub w8, w12, w10, w112195; CHECK-SD-NEXT: mov v2.h[6], w82196; CHECK-SD-NEXT: msub w8, w9, w13, w142197; CHECK-SD-NEXT: mov v2.h[7], w82198; CHECK-SD-NEXT: mov v0.16b, v2.16b2199; CHECK-SD-NEXT: ret2200;2201; CHECK-GI-LABEL: sv8i16:2202; CHECK-GI: // %bb.0: // %entry2203; CHECK-GI-NEXT: sshll v2.4s, v0.4h, #02204; CHECK-GI-NEXT: sshll v3.4s, v1.4h, #02205; CHECK-GI-NEXT: sshll2 v0.4s, v0.8h, #02206; CHECK-GI-NEXT: sshll2 v1.4s, v1.8h, #02207; CHECK-GI-NEXT: fmov w8, s22208; CHECK-GI-NEXT: fmov w9, s32209; CHECK-GI-NEXT: mov w10, v3.s[1]2210; CHECK-GI-NEXT: mov w11, v3.s[2]2211; CHECK-GI-NEXT: mov w12, v3.s[3]2212; CHECK-GI-NEXT: fmov w13, s12213; CHECK-GI-NEXT: mov w14, v1.s[1]2214; CHECK-GI-NEXT: mov w15, v1.s[2]2215; CHECK-GI-NEXT: mov w16, v1.s[3]2216; CHECK-GI-NEXT: sdiv w8, w8, w92217; CHECK-GI-NEXT: mov w9, v2.s[1]2218; CHECK-GI-NEXT: sdiv w9, w9, w102219; CHECK-GI-NEXT: mov w10, v2.s[2]2220; CHECK-GI-NEXT: fmov s4, w82221; CHECK-GI-NEXT: sdiv w10, w10, w112222; CHECK-GI-NEXT: mov w11, v2.s[3]2223; CHECK-GI-NEXT: mov v4.s[1], w92224; CHECK-GI-NEXT: sdiv w11, w11, w122225; CHECK-GI-NEXT: fmov w12, s02226; CHECK-GI-NEXT: mov v4.s[2], w102227; CHECK-GI-NEXT: sdiv w12, w12, w132228; CHECK-GI-NEXT: mov w13, v0.s[1]2229; CHECK-GI-NEXT: mov v4.s[3], w112230; CHECK-GI-NEXT: mls v2.4s, v4.4s, v3.4s2231; CHECK-GI-NEXT: sdiv w13, w13, w142232; CHECK-GI-NEXT: mov w14, v0.s[2]2233; CHECK-GI-NEXT: fmov s5, w122234; CHECK-GI-NEXT: sdiv w14, w14, w152235; CHECK-GI-NEXT: mov w15, v0.s[3]2236; CHECK-GI-NEXT: mov v5.s[1], w132237; CHECK-GI-NEXT: sdiv w8, w15, w162238; CHECK-GI-NEXT: mov v5.s[2], w142239; CHECK-GI-NEXT: mov v5.s[3], w82240; CHECK-GI-NEXT: mls v0.4s, v5.4s, v1.4s2241; CHECK-GI-NEXT: uzp1 v0.8h, v2.8h, v0.8h2242; CHECK-GI-NEXT: ret2243entry:2244 %s = srem <8 x i16> %d, %e2245 ret <8 x i16> %s2246}2247 2248define <16 x i16> @sv16i16(<16 x i16> %d, <16 x i16> %e) {2249; CHECK-SD-LABEL: sv16i16:2250; CHECK-SD: // %bb.0: // %entry2251; CHECK-SD-NEXT: sub sp, sp, #1602252; CHECK-SD-NEXT: stp x29, x30, [sp, #64] // 16-byte Folded Spill2253; CHECK-SD-NEXT: stp x28, x27, [sp, #80] // 16-byte Folded Spill2254; CHECK-SD-NEXT: stp x26, x25, [sp, #96] // 16-byte Folded Spill2255; CHECK-SD-NEXT: stp x24, x23, [sp, #112] // 16-byte Folded Spill2256; CHECK-SD-NEXT: stp x22, x21, [sp, #128] // 16-byte Folded Spill2257; CHECK-SD-NEXT: stp x20, x19, [sp, #144] // 16-byte Folded Spill2258; CHECK-SD-NEXT: .cfi_def_cfa_offset 1602259; CHECK-SD-NEXT: .cfi_offset w19, -82260; CHECK-SD-NEXT: .cfi_offset w20, -162261; CHECK-SD-NEXT: .cfi_offset w21, -242262; CHECK-SD-NEXT: .cfi_offset w22, -322263; CHECK-SD-NEXT: .cfi_offset w23, -402264; CHECK-SD-NEXT: .cfi_offset w24, -482265; CHECK-SD-NEXT: .cfi_offset w25, -562266; CHECK-SD-NEXT: .cfi_offset w26, -642267; CHECK-SD-NEXT: .cfi_offset w27, -722268; CHECK-SD-NEXT: .cfi_offset w28, -802269; CHECK-SD-NEXT: .cfi_offset w30, -882270; CHECK-SD-NEXT: .cfi_offset w29, -962271; CHECK-SD-NEXT: smov w8, v2.h[1]2272; CHECK-SD-NEXT: smov w9, v0.h[1]2273; CHECK-SD-NEXT: smov w19, v2.h[2]2274; CHECK-SD-NEXT: smov w22, v0.h[2]2275; CHECK-SD-NEXT: smov w1, v2.h[0]2276; CHECK-SD-NEXT: smov w3, v0.h[0]2277; CHECK-SD-NEXT: smov w7, v2.h[3]2278; CHECK-SD-NEXT: smov w18, v0.h[3]2279; CHECK-SD-NEXT: smov w4, v0.h[6]2280; CHECK-SD-NEXT: smov w0, v2.h[4]2281; CHECK-SD-NEXT: smov w5, v0.h[4]2282; CHECK-SD-NEXT: smov w2, v2.h[7]2283; CHECK-SD-NEXT: str w8, [sp, #52] // 4-byte Spill2284; CHECK-SD-NEXT: smov w6, v0.h[7]2285; CHECK-SD-NEXT: smov w27, v3.h[0]2286; CHECK-SD-NEXT: str w9, [sp, #44] // 4-byte Spill2287; CHECK-SD-NEXT: sdiv w9, w9, w82288; CHECK-SD-NEXT: smov w28, v1.h[0]2289; CHECK-SD-NEXT: smov w24, v3.h[1]2290; CHECK-SD-NEXT: smov w25, v1.h[1]2291; CHECK-SD-NEXT: ldr w21, [sp, #52] // 4-byte Reload2292; CHECK-SD-NEXT: ldr w23, [sp, #44] // 4-byte Reload2293; CHECK-SD-NEXT: smov w30, v3.h[2]2294; CHECK-SD-NEXT: smov w12, v3.h[3]2295; CHECK-SD-NEXT: smov w11, v1.h[3]2296; CHECK-SD-NEXT: smov w14, v3.h[5]2297; CHECK-SD-NEXT: smov w13, v1.h[5]2298; CHECK-SD-NEXT: sdiv w8, w22, w192299; CHECK-SD-NEXT: str w9, [sp, #60] // 4-byte Spill2300; CHECK-SD-NEXT: ldr w20, [sp, #60] // 4-byte Reload2301; CHECK-SD-NEXT: msub w21, w20, w21, w232302; CHECK-SD-NEXT: sdiv w9, w3, w12303; CHECK-SD-NEXT: str w8, [sp, #12] // 4-byte Spill2304; CHECK-SD-NEXT: sdiv w8, w18, w72305; CHECK-SD-NEXT: stp w9, w8, [sp, #24] // 8-byte Folded Spill2306; CHECK-SD-NEXT: smov w8, v2.h[5]2307; CHECK-SD-NEXT: smov w9, v0.h[5]2308; CHECK-SD-NEXT: sdiv w10, w5, w02309; CHECK-SD-NEXT: ldr w20, [sp, #24] // 4-byte Reload2310; CHECK-SD-NEXT: msub w1, w20, w1, w32311; CHECK-SD-NEXT: str w9, [sp, #40] // 4-byte Spill2312; CHECK-SD-NEXT: str w8, [sp, #48] // 4-byte Spill2313; CHECK-SD-NEXT: fmov s0, w12314; CHECK-SD-NEXT: ldr w1, [sp, #12] // 4-byte Reload2315; CHECK-SD-NEXT: msub w1, w1, w19, w222316; CHECK-SD-NEXT: ldr w19, [sp, #28] // 4-byte Reload2317; CHECK-SD-NEXT: sdiv w9, w9, w82318; CHECK-SD-NEXT: smov w8, v2.h[6]2319; CHECK-SD-NEXT: mov v0.h[1], w212320; CHECK-SD-NEXT: msub w18, w19, w7, w182321; CHECK-SD-NEXT: ldp x20, x19, [sp, #144] // 16-byte Folded Reload2322; CHECK-SD-NEXT: ldp x22, x21, [sp, #128] // 16-byte Folded Reload2323; CHECK-SD-NEXT: mov v0.h[2], w12324; CHECK-SD-NEXT: str w9, [sp, #56] // 4-byte Spill2325; CHECK-SD-NEXT: sdiv w9, w4, w82326; CHECK-SD-NEXT: mov v0.h[3], w182327; CHECK-SD-NEXT: ldr w18, [sp, #40] // 4-byte Reload2328; CHECK-SD-NEXT: stp w8, w9, [sp, #32] // 8-byte Folded Spill2329; CHECK-SD-NEXT: sdiv w8, w6, w22330; CHECK-SD-NEXT: smov w9, v1.h[4]2331; CHECK-SD-NEXT: sdiv w29, w28, w272332; CHECK-SD-NEXT: stp w8, w10, [sp, #16] // 8-byte Folded Spill2333; CHECK-SD-NEXT: smov w8, v1.h[2]2334; CHECK-SD-NEXT: smov w10, v3.h[4]2335; CHECK-SD-NEXT: sdiv w26, w25, w242336; CHECK-SD-NEXT: msub w3, w29, w27, w282337; CHECK-SD-NEXT: ldp x28, x27, [sp, #80] // 16-byte Folded Reload2338; CHECK-SD-NEXT: fmov s2, w32339; CHECK-SD-NEXT: smov w3, v1.h[6]2340; CHECK-SD-NEXT: sdiv w15, w8, w302341; CHECK-SD-NEXT: msub w24, w26, w24, w252342; CHECK-SD-NEXT: mov v2.h[1], w242343; CHECK-SD-NEXT: ldp x24, x23, [sp, #112] // 16-byte Folded Reload2344; CHECK-SD-NEXT: sdiv w17, w11, w122345; CHECK-SD-NEXT: msub w8, w15, w30, w82346; CHECK-SD-NEXT: smov w15, v3.h[6]2347; CHECK-SD-NEXT: ldp x29, x30, [sp, #64] // 16-byte Folded Reload2348; CHECK-SD-NEXT: mov v2.h[2], w82349; CHECK-SD-NEXT: sdiv w16, w9, w102350; CHECK-SD-NEXT: msub w8, w17, w12, w112351; CHECK-SD-NEXT: ldr w12, [sp, #20] // 4-byte Reload2352; CHECK-SD-NEXT: ldr w17, [sp, #48] // 4-byte Reload2353; CHECK-SD-NEXT: msub w12, w12, w0, w52354; CHECK-SD-NEXT: mov v2.h[3], w82355; CHECK-SD-NEXT: mov v0.h[4], w122356; CHECK-SD-NEXT: sdiv w25, w13, w142357; CHECK-SD-NEXT: msub w8, w16, w10, w92358; CHECK-SD-NEXT: smov w9, v3.h[7]2359; CHECK-SD-NEXT: smov w10, v1.h[7]2360; CHECK-SD-NEXT: ldr w16, [sp, #56] // 4-byte Reload2361; CHECK-SD-NEXT: mov v2.h[4], w82362; CHECK-SD-NEXT: msub w16, w16, w17, w182363; CHECK-SD-NEXT: mov v0.h[5], w162364; CHECK-SD-NEXT: sdiv w11, w3, w152365; CHECK-SD-NEXT: msub w8, w25, w14, w132366; CHECK-SD-NEXT: ldp w14, w13, [sp, #32] // 8-byte Folded Reload2367; CHECK-SD-NEXT: ldp x26, x25, [sp, #96] // 16-byte Folded Reload2368; CHECK-SD-NEXT: mov v2.h[5], w82369; CHECK-SD-NEXT: msub w13, w13, w14, w42370; CHECK-SD-NEXT: mov v0.h[6], w132371; CHECK-SD-NEXT: sdiv w12, w10, w92372; CHECK-SD-NEXT: msub w8, w11, w15, w32373; CHECK-SD-NEXT: ldr w11, [sp, #16] // 4-byte Reload2374; CHECK-SD-NEXT: msub w11, w11, w2, w62375; CHECK-SD-NEXT: mov v2.h[6], w82376; CHECK-SD-NEXT: mov v0.h[7], w112377; CHECK-SD-NEXT: msub w8, w12, w9, w102378; CHECK-SD-NEXT: mov v2.h[7], w82379; CHECK-SD-NEXT: mov v1.16b, v2.16b2380; CHECK-SD-NEXT: add sp, sp, #1602381; CHECK-SD-NEXT: ret2382;2383; CHECK-GI-LABEL: sv16i16:2384; CHECK-GI: // %bb.0: // %entry2385; CHECK-GI-NEXT: sshll v4.4s, v0.4h, #02386; CHECK-GI-NEXT: sshll v5.4s, v2.4h, #02387; CHECK-GI-NEXT: sshll v6.4s, v1.4h, #02388; CHECK-GI-NEXT: sshll v7.4s, v3.4h, #02389; CHECK-GI-NEXT: fmov w8, s42390; CHECK-GI-NEXT: fmov w9, s52391; CHECK-GI-NEXT: mov w12, v5.s[3]2392; CHECK-GI-NEXT: fmov w17, s72393; CHECK-GI-NEXT: mov w18, v7.s[1]2394; CHECK-GI-NEXT: mov w0, v7.s[2]2395; CHECK-GI-NEXT: mov w1, v7.s[3]2396; CHECK-GI-NEXT: sshll2 v7.4s, v3.8h, #02397; CHECK-GI-NEXT: sshll v3.4s, v3.4h, #02398; CHECK-GI-NEXT: sdiv w10, w8, w92399; CHECK-GI-NEXT: mov w8, v4.s[1]2400; CHECK-GI-NEXT: mov w9, v5.s[1]2401; CHECK-GI-NEXT: fmov w2, s72402; CHECK-GI-NEXT: mov w3, v7.s[1]2403; CHECK-GI-NEXT: mov w4, v7.s[2]2404; CHECK-GI-NEXT: mov w5, v7.s[3]2405; CHECK-GI-NEXT: sdiv w11, w8, w92406; CHECK-GI-NEXT: mov w8, v4.s[2]2407; CHECK-GI-NEXT: mov w9, v5.s[2]2408; CHECK-GI-NEXT: sshll2 v5.4s, v2.8h, #02409; CHECK-GI-NEXT: fmov s16, w102410; CHECK-GI-NEXT: sshll v2.4s, v2.4h, #02411; CHECK-GI-NEXT: fmov w13, s52412; CHECK-GI-NEXT: mov w14, v5.s[1]2413; CHECK-GI-NEXT: mov w15, v5.s[2]2414; CHECK-GI-NEXT: mov w16, v5.s[3]2415; CHECK-GI-NEXT: sdiv w9, w8, w92416; CHECK-GI-NEXT: mov w8, v4.s[3]2417; CHECK-GI-NEXT: sshll2 v4.4s, v0.8h, #02418; CHECK-GI-NEXT: mov v16.s[1], w112419; CHECK-GI-NEXT: sshll v0.4s, v0.4h, #02420; CHECK-GI-NEXT: sdiv w8, w8, w122421; CHECK-GI-NEXT: fmov w12, s42422; CHECK-GI-NEXT: mov v16.s[2], w92423; CHECK-GI-NEXT: sdiv w13, w12, w132424; CHECK-GI-NEXT: mov w12, v4.s[1]2425; CHECK-GI-NEXT: mov v16.s[3], w82426; CHECK-GI-NEXT: mls v0.4s, v16.4s, v2.4s2427; CHECK-GI-NEXT: sdiv w14, w12, w142428; CHECK-GI-NEXT: mov w12, v4.s[2]2429; CHECK-GI-NEXT: fmov s17, w132430; CHECK-GI-NEXT: sdiv w15, w12, w152431; CHECK-GI-NEXT: mov w12, v4.s[3]2432; CHECK-GI-NEXT: mov v17.s[1], w142433; CHECK-GI-NEXT: sdiv w12, w12, w162434; CHECK-GI-NEXT: fmov w16, s62435; CHECK-GI-NEXT: mov v17.s[2], w152436; CHECK-GI-NEXT: sdiv w16, w16, w172437; CHECK-GI-NEXT: mov w17, v6.s[1]2438; CHECK-GI-NEXT: mov v17.s[3], w122439; CHECK-GI-NEXT: mls v4.4s, v17.4s, v5.4s2440; CHECK-GI-NEXT: sdiv w17, w17, w182441; CHECK-GI-NEXT: mov w18, v6.s[2]2442; CHECK-GI-NEXT: fmov s18, w162443; CHECK-GI-NEXT: uzp1 v0.8h, v0.8h, v4.8h2444; CHECK-GI-NEXT: sdiv w18, w18, w02445; CHECK-GI-NEXT: mov w0, v6.s[3]2446; CHECK-GI-NEXT: sshll2 v6.4s, v1.8h, #02447; CHECK-GI-NEXT: mov v18.s[1], w172448; CHECK-GI-NEXT: sshll v1.4s, v1.4h, #02449; CHECK-GI-NEXT: sdiv w0, w0, w12450; CHECK-GI-NEXT: fmov w1, s62451; CHECK-GI-NEXT: mov v18.s[2], w182452; CHECK-GI-NEXT: sdiv w1, w1, w22453; CHECK-GI-NEXT: mov w2, v6.s[1]2454; CHECK-GI-NEXT: mov v18.s[3], w02455; CHECK-GI-NEXT: mls v1.4s, v18.4s, v3.4s2456; CHECK-GI-NEXT: sdiv w2, w2, w32457; CHECK-GI-NEXT: mov w3, v6.s[2]2458; CHECK-GI-NEXT: fmov s19, w12459; CHECK-GI-NEXT: sdiv w3, w3, w42460; CHECK-GI-NEXT: mov w4, v6.s[3]2461; CHECK-GI-NEXT: mov v19.s[1], w22462; CHECK-GI-NEXT: sdiv w10, w4, w52463; CHECK-GI-NEXT: mov v19.s[2], w32464; CHECK-GI-NEXT: mov v19.s[3], w102465; CHECK-GI-NEXT: mls v6.4s, v19.4s, v7.4s2466; CHECK-GI-NEXT: uzp1 v1.8h, v1.8h, v6.8h2467; CHECK-GI-NEXT: ret2468entry:2469 %s = srem <16 x i16> %d, %e2470 ret <16 x i16> %s2471}2472 2473define <2 x i16> @uv2i16(<2 x i16> %d, <2 x i16> %e) {2474; CHECK-SD-LABEL: uv2i16:2475; CHECK-SD: // %bb.0: // %entry2476; CHECK-SD-NEXT: movi d2, #0x00ffff0000ffff2477; CHECK-SD-NEXT: and v0.8b, v0.8b, v2.8b2478; CHECK-SD-NEXT: and v1.8b, v1.8b, v2.8b2479; CHECK-SD-NEXT: fmov w8, s12480; CHECK-SD-NEXT: fmov w9, s02481; CHECK-SD-NEXT: mov w11, v1.s[1]2482; CHECK-SD-NEXT: mov w12, v0.s[1]2483; CHECK-SD-NEXT: udiv w10, w9, w82484; CHECK-SD-NEXT: udiv w13, w12, w112485; CHECK-SD-NEXT: msub w8, w10, w8, w92486; CHECK-SD-NEXT: fmov s0, w82487; CHECK-SD-NEXT: msub w9, w13, w11, w122488; CHECK-SD-NEXT: mov v0.s[1], w92489; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q02490; CHECK-SD-NEXT: ret2491;2492; CHECK-GI-LABEL: uv2i16:2493; CHECK-GI: // %bb.0: // %entry2494; CHECK-GI-NEXT: movi d2, #0x00ffff0000ffff2495; CHECK-GI-NEXT: and v0.8b, v0.8b, v2.8b2496; CHECK-GI-NEXT: and v1.8b, v1.8b, v2.8b2497; CHECK-GI-NEXT: fmov w8, s02498; CHECK-GI-NEXT: fmov w9, s12499; CHECK-GI-NEXT: mov w10, v1.s[1]2500; CHECK-GI-NEXT: udiv w8, w8, w92501; CHECK-GI-NEXT: mov w9, v0.s[1]2502; CHECK-GI-NEXT: udiv w9, w9, w102503; CHECK-GI-NEXT: fmov s2, w82504; CHECK-GI-NEXT: mov v2.s[1], w92505; CHECK-GI-NEXT: mls v0.2s, v2.2s, v1.2s2506; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q02507; CHECK-GI-NEXT: ret2508entry:2509 %s = urem <2 x i16> %d, %e2510 ret <2 x i16> %s2511}2512 2513define <3 x i16> @uv3i16(<3 x i16> %d, <3 x i16> %e) {2514; CHECK-SD-LABEL: uv3i16:2515; CHECK-SD: // %bb.0: // %entry2516; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q12517; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q02518; CHECK-SD-NEXT: umov w11, v1.h[0]2519; CHECK-SD-NEXT: umov w12, v0.h[0]2520; CHECK-SD-NEXT: umov w8, v1.h[1]2521; CHECK-SD-NEXT: umov w9, v0.h[1]2522; CHECK-SD-NEXT: umov w13, v0.h[2]2523; CHECK-SD-NEXT: umov w14, v1.h[0]2524; CHECK-SD-NEXT: umov w16, v0.h[0]2525; CHECK-SD-NEXT: udiv w11, w12, w112526; CHECK-SD-NEXT: umov w12, v1.h[2]2527; CHECK-SD-NEXT: udiv w10, w9, w82528; CHECK-SD-NEXT: msub w11, w11, w14, w162529; CHECK-SD-NEXT: udiv w15, w13, w122530; CHECK-SD-NEXT: msub w8, w10, w8, w92531; CHECK-SD-NEXT: sxth w9, w112532; CHECK-SD-NEXT: fmov s0, w92533; CHECK-SD-NEXT: sxth w8, w82534; CHECK-SD-NEXT: mov v0.h[1], w82535; CHECK-SD-NEXT: msub w10, w15, w12, w132536; CHECK-SD-NEXT: sxth w8, w102537; CHECK-SD-NEXT: mov v0.h[2], w82538; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q02539; CHECK-SD-NEXT: ret2540;2541; CHECK-GI-LABEL: uv3i16:2542; CHECK-GI: // %bb.0: // %entry2543; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q02544; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q12545; CHECK-GI-NEXT: umov w8, v0.h[0]2546; CHECK-GI-NEXT: umov w9, v1.h[0]2547; CHECK-GI-NEXT: umov w11, v0.h[1]2548; CHECK-GI-NEXT: umov w12, v1.h[1]2549; CHECK-GI-NEXT: umov w14, v0.h[2]2550; CHECK-GI-NEXT: umov w15, v1.h[2]2551; CHECK-GI-NEXT: udiv w10, w8, w92552; CHECK-GI-NEXT: udiv w13, w11, w122553; CHECK-GI-NEXT: msub w8, w10, w9, w82554; CHECK-GI-NEXT: fmov s0, w82555; CHECK-GI-NEXT: udiv w16, w14, w152556; CHECK-GI-NEXT: msub w9, w13, w12, w112557; CHECK-GI-NEXT: mov v0.h[1], w92558; CHECK-GI-NEXT: msub w8, w16, w15, w142559; CHECK-GI-NEXT: mov v0.h[2], w82560; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q02561; CHECK-GI-NEXT: ret2562entry:2563 %s = urem <3 x i16> %d, %e2564 ret <3 x i16> %s2565}2566 2567define <4 x i16> @uv4i16(<4 x i16> %d, <4 x i16> %e) {2568; CHECK-SD-LABEL: uv4i16:2569; CHECK-SD: // %bb.0: // %entry2570; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q12571; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q02572; CHECK-SD-NEXT: umov w11, v1.h[0]2573; CHECK-SD-NEXT: umov w12, v0.h[0]2574; CHECK-SD-NEXT: umov w8, v1.h[1]2575; CHECK-SD-NEXT: umov w9, v0.h[1]2576; CHECK-SD-NEXT: umov w14, v1.h[2]2577; CHECK-SD-NEXT: umov w15, v0.h[2]2578; CHECK-SD-NEXT: umov w17, v1.h[3]2579; CHECK-SD-NEXT: umov w18, v0.h[3]2580; CHECK-SD-NEXT: udiv w13, w12, w112581; CHECK-SD-NEXT: udiv w10, w9, w82582; CHECK-SD-NEXT: msub w11, w13, w11, w122583; CHECK-SD-NEXT: fmov s0, w112584; CHECK-SD-NEXT: udiv w16, w15, w142585; CHECK-SD-NEXT: msub w8, w10, w8, w92586; CHECK-SD-NEXT: mov v0.h[1], w82587; CHECK-SD-NEXT: udiv w9, w18, w172588; CHECK-SD-NEXT: msub w8, w16, w14, w152589; CHECK-SD-NEXT: mov v0.h[2], w82590; CHECK-SD-NEXT: msub w8, w9, w17, w182591; CHECK-SD-NEXT: mov v0.h[3], w82592; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q02593; CHECK-SD-NEXT: ret2594;2595; CHECK-GI-LABEL: uv4i16:2596; CHECK-GI: // %bb.0: // %entry2597; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #02598; CHECK-GI-NEXT: ushll v1.4s, v1.4h, #02599; CHECK-GI-NEXT: fmov w8, s02600; CHECK-GI-NEXT: fmov w9, s12601; CHECK-GI-NEXT: mov w10, v1.s[1]2602; CHECK-GI-NEXT: mov w11, v1.s[2]2603; CHECK-GI-NEXT: mov w12, v1.s[3]2604; CHECK-GI-NEXT: udiv w8, w8, w92605; CHECK-GI-NEXT: mov w9, v0.s[1]2606; CHECK-GI-NEXT: udiv w9, w9, w102607; CHECK-GI-NEXT: mov w10, v0.s[2]2608; CHECK-GI-NEXT: fmov s2, w82609; CHECK-GI-NEXT: udiv w10, w10, w112610; CHECK-GI-NEXT: mov w11, v0.s[3]2611; CHECK-GI-NEXT: mov v2.s[1], w92612; CHECK-GI-NEXT: udiv w8, w11, w122613; CHECK-GI-NEXT: mov v2.s[2], w102614; CHECK-GI-NEXT: mov v2.s[3], w82615; CHECK-GI-NEXT: mls v0.4s, v2.4s, v1.4s2616; CHECK-GI-NEXT: xtn v0.4h, v0.4s2617; CHECK-GI-NEXT: ret2618entry:2619 %s = urem <4 x i16> %d, %e2620 ret <4 x i16> %s2621}2622 2623define <8 x i16> @uv8i16(<8 x i16> %d, <8 x i16> %e) {2624; CHECK-SD-LABEL: uv8i16:2625; CHECK-SD: // %bb.0: // %entry2626; CHECK-SD-NEXT: umov w11, v1.h[0]2627; CHECK-SD-NEXT: umov w12, v0.h[0]2628; CHECK-SD-NEXT: umov w8, v1.h[1]2629; CHECK-SD-NEXT: umov w9, v0.h[1]2630; CHECK-SD-NEXT: umov w14, v1.h[2]2631; CHECK-SD-NEXT: umov w15, v0.h[2]2632; CHECK-SD-NEXT: umov w17, v1.h[3]2633; CHECK-SD-NEXT: umov w18, v0.h[3]2634; CHECK-SD-NEXT: umov w1, v1.h[4]2635; CHECK-SD-NEXT: umov w2, v0.h[4]2636; CHECK-SD-NEXT: umov w4, v1.h[5]2637; CHECK-SD-NEXT: umov w5, v0.h[5]2638; CHECK-SD-NEXT: udiv w13, w12, w112639; CHECK-SD-NEXT: udiv w10, w9, w82640; CHECK-SD-NEXT: msub w11, w13, w11, w122641; CHECK-SD-NEXT: umov w13, v1.h[7]2642; CHECK-SD-NEXT: fmov s2, w112643; CHECK-SD-NEXT: umov w11, v0.h[6]2644; CHECK-SD-NEXT: udiv w16, w15, w142645; CHECK-SD-NEXT: msub w8, w10, w8, w92646; CHECK-SD-NEXT: umov w10, v1.h[6]2647; CHECK-SD-NEXT: mov v2.h[1], w82648; CHECK-SD-NEXT: udiv w0, w18, w172649; CHECK-SD-NEXT: msub w8, w16, w14, w152650; CHECK-SD-NEXT: umov w14, v0.h[7]2651; CHECK-SD-NEXT: mov v2.h[2], w82652; CHECK-SD-NEXT: udiv w3, w2, w12653; CHECK-SD-NEXT: msub w8, w0, w17, w182654; CHECK-SD-NEXT: mov v2.h[3], w82655; CHECK-SD-NEXT: udiv w9, w5, w42656; CHECK-SD-NEXT: msub w8, w3, w1, w22657; CHECK-SD-NEXT: mov v2.h[4], w82658; CHECK-SD-NEXT: udiv w12, w11, w102659; CHECK-SD-NEXT: msub w8, w9, w4, w52660; CHECK-SD-NEXT: mov v2.h[5], w82661; CHECK-SD-NEXT: udiv w9, w14, w132662; CHECK-SD-NEXT: msub w8, w12, w10, w112663; CHECK-SD-NEXT: mov v2.h[6], w82664; CHECK-SD-NEXT: msub w8, w9, w13, w142665; CHECK-SD-NEXT: mov v2.h[7], w82666; CHECK-SD-NEXT: mov v0.16b, v2.16b2667; CHECK-SD-NEXT: ret2668;2669; CHECK-GI-LABEL: uv8i16:2670; CHECK-GI: // %bb.0: // %entry2671; CHECK-GI-NEXT: ushll v2.4s, v0.4h, #02672; CHECK-GI-NEXT: ushll v3.4s, v1.4h, #02673; CHECK-GI-NEXT: ushll2 v0.4s, v0.8h, #02674; CHECK-GI-NEXT: ushll2 v1.4s, v1.8h, #02675; CHECK-GI-NEXT: fmov w8, s22676; CHECK-GI-NEXT: fmov w9, s32677; CHECK-GI-NEXT: mov w10, v3.s[1]2678; CHECK-GI-NEXT: mov w11, v3.s[2]2679; CHECK-GI-NEXT: mov w12, v3.s[3]2680; CHECK-GI-NEXT: fmov w13, s12681; CHECK-GI-NEXT: mov w14, v1.s[1]2682; CHECK-GI-NEXT: mov w15, v1.s[2]2683; CHECK-GI-NEXT: mov w16, v1.s[3]2684; CHECK-GI-NEXT: udiv w8, w8, w92685; CHECK-GI-NEXT: mov w9, v2.s[1]2686; CHECK-GI-NEXT: udiv w9, w9, w102687; CHECK-GI-NEXT: mov w10, v2.s[2]2688; CHECK-GI-NEXT: fmov s4, w82689; CHECK-GI-NEXT: udiv w10, w10, w112690; CHECK-GI-NEXT: mov w11, v2.s[3]2691; CHECK-GI-NEXT: mov v4.s[1], w92692; CHECK-GI-NEXT: udiv w11, w11, w122693; CHECK-GI-NEXT: fmov w12, s02694; CHECK-GI-NEXT: mov v4.s[2], w102695; CHECK-GI-NEXT: udiv w12, w12, w132696; CHECK-GI-NEXT: mov w13, v0.s[1]2697; CHECK-GI-NEXT: mov v4.s[3], w112698; CHECK-GI-NEXT: mls v2.4s, v4.4s, v3.4s2699; CHECK-GI-NEXT: udiv w13, w13, w142700; CHECK-GI-NEXT: mov w14, v0.s[2]2701; CHECK-GI-NEXT: fmov s5, w122702; CHECK-GI-NEXT: udiv w14, w14, w152703; CHECK-GI-NEXT: mov w15, v0.s[3]2704; CHECK-GI-NEXT: mov v5.s[1], w132705; CHECK-GI-NEXT: udiv w8, w15, w162706; CHECK-GI-NEXT: mov v5.s[2], w142707; CHECK-GI-NEXT: mov v5.s[3], w82708; CHECK-GI-NEXT: mls v0.4s, v5.4s, v1.4s2709; CHECK-GI-NEXT: uzp1 v0.8h, v2.8h, v0.8h2710; CHECK-GI-NEXT: ret2711entry:2712 %s = urem <8 x i16> %d, %e2713 ret <8 x i16> %s2714}2715 2716define <16 x i16> @uv16i16(<16 x i16> %d, <16 x i16> %e) {2717; CHECK-SD-LABEL: uv16i16:2718; CHECK-SD: // %bb.0: // %entry2719; CHECK-SD-NEXT: sub sp, sp, #1602720; CHECK-SD-NEXT: stp x29, x30, [sp, #64] // 16-byte Folded Spill2721; CHECK-SD-NEXT: stp x28, x27, [sp, #80] // 16-byte Folded Spill2722; CHECK-SD-NEXT: stp x26, x25, [sp, #96] // 16-byte Folded Spill2723; CHECK-SD-NEXT: stp x24, x23, [sp, #112] // 16-byte Folded Spill2724; CHECK-SD-NEXT: stp x22, x21, [sp, #128] // 16-byte Folded Spill2725; CHECK-SD-NEXT: stp x20, x19, [sp, #144] // 16-byte Folded Spill2726; CHECK-SD-NEXT: .cfi_def_cfa_offset 1602727; CHECK-SD-NEXT: .cfi_offset w19, -82728; CHECK-SD-NEXT: .cfi_offset w20, -162729; CHECK-SD-NEXT: .cfi_offset w21, -242730; CHECK-SD-NEXT: .cfi_offset w22, -322731; CHECK-SD-NEXT: .cfi_offset w23, -402732; CHECK-SD-NEXT: .cfi_offset w24, -482733; CHECK-SD-NEXT: .cfi_offset w25, -562734; CHECK-SD-NEXT: .cfi_offset w26, -642735; CHECK-SD-NEXT: .cfi_offset w27, -722736; CHECK-SD-NEXT: .cfi_offset w28, -802737; CHECK-SD-NEXT: .cfi_offset w30, -882738; CHECK-SD-NEXT: .cfi_offset w29, -962739; CHECK-SD-NEXT: umov w8, v2.h[1]2740; CHECK-SD-NEXT: umov w9, v0.h[1]2741; CHECK-SD-NEXT: umov w19, v2.h[2]2742; CHECK-SD-NEXT: umov w22, v0.h[2]2743; CHECK-SD-NEXT: umov w1, v2.h[0]2744; CHECK-SD-NEXT: umov w3, v0.h[0]2745; CHECK-SD-NEXT: umov w7, v2.h[3]2746; CHECK-SD-NEXT: umov w18, v0.h[3]2747; CHECK-SD-NEXT: umov w4, v0.h[6]2748; CHECK-SD-NEXT: umov w0, v2.h[4]2749; CHECK-SD-NEXT: umov w5, v0.h[4]2750; CHECK-SD-NEXT: umov w2, v2.h[7]2751; CHECK-SD-NEXT: str w8, [sp, #52] // 4-byte Spill2752; CHECK-SD-NEXT: umov w6, v0.h[7]2753; CHECK-SD-NEXT: umov w27, v3.h[0]2754; CHECK-SD-NEXT: str w9, [sp, #44] // 4-byte Spill2755; CHECK-SD-NEXT: udiv w9, w9, w82756; CHECK-SD-NEXT: umov w28, v1.h[0]2757; CHECK-SD-NEXT: umov w24, v3.h[1]2758; CHECK-SD-NEXT: umov w25, v1.h[1]2759; CHECK-SD-NEXT: ldr w21, [sp, #52] // 4-byte Reload2760; CHECK-SD-NEXT: ldr w23, [sp, #44] // 4-byte Reload2761; CHECK-SD-NEXT: umov w30, v3.h[2]2762; CHECK-SD-NEXT: umov w12, v3.h[3]2763; CHECK-SD-NEXT: umov w11, v1.h[3]2764; CHECK-SD-NEXT: umov w14, v3.h[5]2765; CHECK-SD-NEXT: umov w13, v1.h[5]2766; CHECK-SD-NEXT: udiv w8, w22, w192767; CHECK-SD-NEXT: str w9, [sp, #60] // 4-byte Spill2768; CHECK-SD-NEXT: ldr w20, [sp, #60] // 4-byte Reload2769; CHECK-SD-NEXT: msub w21, w20, w21, w232770; CHECK-SD-NEXT: udiv w9, w3, w12771; CHECK-SD-NEXT: str w8, [sp, #12] // 4-byte Spill2772; CHECK-SD-NEXT: udiv w8, w18, w72773; CHECK-SD-NEXT: stp w9, w8, [sp, #24] // 8-byte Folded Spill2774; CHECK-SD-NEXT: umov w8, v2.h[5]2775; CHECK-SD-NEXT: umov w9, v0.h[5]2776; CHECK-SD-NEXT: udiv w10, w5, w02777; CHECK-SD-NEXT: ldr w20, [sp, #24] // 4-byte Reload2778; CHECK-SD-NEXT: msub w1, w20, w1, w32779; CHECK-SD-NEXT: str w9, [sp, #40] // 4-byte Spill2780; CHECK-SD-NEXT: str w8, [sp, #48] // 4-byte Spill2781; CHECK-SD-NEXT: fmov s0, w12782; CHECK-SD-NEXT: ldr w1, [sp, #12] // 4-byte Reload2783; CHECK-SD-NEXT: msub w1, w1, w19, w222784; CHECK-SD-NEXT: ldr w19, [sp, #28] // 4-byte Reload2785; CHECK-SD-NEXT: udiv w9, w9, w82786; CHECK-SD-NEXT: umov w8, v2.h[6]2787; CHECK-SD-NEXT: mov v0.h[1], w212788; CHECK-SD-NEXT: msub w18, w19, w7, w182789; CHECK-SD-NEXT: ldp x20, x19, [sp, #144] // 16-byte Folded Reload2790; CHECK-SD-NEXT: ldp x22, x21, [sp, #128] // 16-byte Folded Reload2791; CHECK-SD-NEXT: mov v0.h[2], w12792; CHECK-SD-NEXT: str w9, [sp, #56] // 4-byte Spill2793; CHECK-SD-NEXT: udiv w9, w4, w82794; CHECK-SD-NEXT: mov v0.h[3], w182795; CHECK-SD-NEXT: ldr w18, [sp, #40] // 4-byte Reload2796; CHECK-SD-NEXT: stp w8, w9, [sp, #32] // 8-byte Folded Spill2797; CHECK-SD-NEXT: udiv w8, w6, w22798; CHECK-SD-NEXT: umov w9, v1.h[4]2799; CHECK-SD-NEXT: udiv w29, w28, w272800; CHECK-SD-NEXT: stp w8, w10, [sp, #16] // 8-byte Folded Spill2801; CHECK-SD-NEXT: umov w8, v1.h[2]2802; CHECK-SD-NEXT: umov w10, v3.h[4]2803; CHECK-SD-NEXT: udiv w26, w25, w242804; CHECK-SD-NEXT: msub w3, w29, w27, w282805; CHECK-SD-NEXT: ldp x28, x27, [sp, #80] // 16-byte Folded Reload2806; CHECK-SD-NEXT: fmov s2, w32807; CHECK-SD-NEXT: umov w3, v1.h[6]2808; CHECK-SD-NEXT: udiv w15, w8, w302809; CHECK-SD-NEXT: msub w24, w26, w24, w252810; CHECK-SD-NEXT: mov v2.h[1], w242811; CHECK-SD-NEXT: ldp x24, x23, [sp, #112] // 16-byte Folded Reload2812; CHECK-SD-NEXT: udiv w17, w11, w122813; CHECK-SD-NEXT: msub w8, w15, w30, w82814; CHECK-SD-NEXT: umov w15, v3.h[6]2815; CHECK-SD-NEXT: ldp x29, x30, [sp, #64] // 16-byte Folded Reload2816; CHECK-SD-NEXT: mov v2.h[2], w82817; CHECK-SD-NEXT: udiv w16, w9, w102818; CHECK-SD-NEXT: msub w8, w17, w12, w112819; CHECK-SD-NEXT: ldr w12, [sp, #20] // 4-byte Reload2820; CHECK-SD-NEXT: ldr w17, [sp, #48] // 4-byte Reload2821; CHECK-SD-NEXT: msub w12, w12, w0, w52822; CHECK-SD-NEXT: mov v2.h[3], w82823; CHECK-SD-NEXT: mov v0.h[4], w122824; CHECK-SD-NEXT: udiv w25, w13, w142825; CHECK-SD-NEXT: msub w8, w16, w10, w92826; CHECK-SD-NEXT: umov w9, v3.h[7]2827; CHECK-SD-NEXT: umov w10, v1.h[7]2828; CHECK-SD-NEXT: ldr w16, [sp, #56] // 4-byte Reload2829; CHECK-SD-NEXT: mov v2.h[4], w82830; CHECK-SD-NEXT: msub w16, w16, w17, w182831; CHECK-SD-NEXT: mov v0.h[5], w162832; CHECK-SD-NEXT: udiv w11, w3, w152833; CHECK-SD-NEXT: msub w8, w25, w14, w132834; CHECK-SD-NEXT: ldp w14, w13, [sp, #32] // 8-byte Folded Reload2835; CHECK-SD-NEXT: ldp x26, x25, [sp, #96] // 16-byte Folded Reload2836; CHECK-SD-NEXT: mov v2.h[5], w82837; CHECK-SD-NEXT: msub w13, w13, w14, w42838; CHECK-SD-NEXT: mov v0.h[6], w132839; CHECK-SD-NEXT: udiv w12, w10, w92840; CHECK-SD-NEXT: msub w8, w11, w15, w32841; CHECK-SD-NEXT: ldr w11, [sp, #16] // 4-byte Reload2842; CHECK-SD-NEXT: msub w11, w11, w2, w62843; CHECK-SD-NEXT: mov v2.h[6], w82844; CHECK-SD-NEXT: mov v0.h[7], w112845; CHECK-SD-NEXT: msub w8, w12, w9, w102846; CHECK-SD-NEXT: mov v2.h[7], w82847; CHECK-SD-NEXT: mov v1.16b, v2.16b2848; CHECK-SD-NEXT: add sp, sp, #1602849; CHECK-SD-NEXT: ret2850;2851; CHECK-GI-LABEL: uv16i16:2852; CHECK-GI: // %bb.0: // %entry2853; CHECK-GI-NEXT: ushll v4.4s, v0.4h, #02854; CHECK-GI-NEXT: ushll v5.4s, v2.4h, #02855; CHECK-GI-NEXT: ushll v6.4s, v1.4h, #02856; CHECK-GI-NEXT: ushll v7.4s, v3.4h, #02857; CHECK-GI-NEXT: fmov w8, s42858; CHECK-GI-NEXT: fmov w9, s52859; CHECK-GI-NEXT: mov w12, v5.s[3]2860; CHECK-GI-NEXT: fmov w17, s72861; CHECK-GI-NEXT: mov w18, v7.s[1]2862; CHECK-GI-NEXT: mov w0, v7.s[2]2863; CHECK-GI-NEXT: mov w1, v7.s[3]2864; CHECK-GI-NEXT: ushll2 v7.4s, v3.8h, #02865; CHECK-GI-NEXT: ushll v3.4s, v3.4h, #02866; CHECK-GI-NEXT: udiv w10, w8, w92867; CHECK-GI-NEXT: mov w8, v4.s[1]2868; CHECK-GI-NEXT: mov w9, v5.s[1]2869; CHECK-GI-NEXT: fmov w2, s72870; CHECK-GI-NEXT: mov w3, v7.s[1]2871; CHECK-GI-NEXT: mov w4, v7.s[2]2872; CHECK-GI-NEXT: mov w5, v7.s[3]2873; CHECK-GI-NEXT: udiv w11, w8, w92874; CHECK-GI-NEXT: mov w8, v4.s[2]2875; CHECK-GI-NEXT: mov w9, v5.s[2]2876; CHECK-GI-NEXT: ushll2 v5.4s, v2.8h, #02877; CHECK-GI-NEXT: fmov s16, w102878; CHECK-GI-NEXT: ushll v2.4s, v2.4h, #02879; CHECK-GI-NEXT: fmov w13, s52880; CHECK-GI-NEXT: mov w14, v5.s[1]2881; CHECK-GI-NEXT: mov w15, v5.s[2]2882; CHECK-GI-NEXT: mov w16, v5.s[3]2883; CHECK-GI-NEXT: udiv w9, w8, w92884; CHECK-GI-NEXT: mov w8, v4.s[3]2885; CHECK-GI-NEXT: ushll2 v4.4s, v0.8h, #02886; CHECK-GI-NEXT: mov v16.s[1], w112887; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #02888; CHECK-GI-NEXT: udiv w8, w8, w122889; CHECK-GI-NEXT: fmov w12, s42890; CHECK-GI-NEXT: mov v16.s[2], w92891; CHECK-GI-NEXT: udiv w13, w12, w132892; CHECK-GI-NEXT: mov w12, v4.s[1]2893; CHECK-GI-NEXT: mov v16.s[3], w82894; CHECK-GI-NEXT: mls v0.4s, v16.4s, v2.4s2895; CHECK-GI-NEXT: udiv w14, w12, w142896; CHECK-GI-NEXT: mov w12, v4.s[2]2897; CHECK-GI-NEXT: fmov s17, w132898; CHECK-GI-NEXT: udiv w15, w12, w152899; CHECK-GI-NEXT: mov w12, v4.s[3]2900; CHECK-GI-NEXT: mov v17.s[1], w142901; CHECK-GI-NEXT: udiv w12, w12, w162902; CHECK-GI-NEXT: fmov w16, s62903; CHECK-GI-NEXT: mov v17.s[2], w152904; CHECK-GI-NEXT: udiv w16, w16, w172905; CHECK-GI-NEXT: mov w17, v6.s[1]2906; CHECK-GI-NEXT: mov v17.s[3], w122907; CHECK-GI-NEXT: mls v4.4s, v17.4s, v5.4s2908; CHECK-GI-NEXT: udiv w17, w17, w182909; CHECK-GI-NEXT: mov w18, v6.s[2]2910; CHECK-GI-NEXT: fmov s18, w162911; CHECK-GI-NEXT: uzp1 v0.8h, v0.8h, v4.8h2912; CHECK-GI-NEXT: udiv w18, w18, w02913; CHECK-GI-NEXT: mov w0, v6.s[3]2914; CHECK-GI-NEXT: ushll2 v6.4s, v1.8h, #02915; CHECK-GI-NEXT: mov v18.s[1], w172916; CHECK-GI-NEXT: ushll v1.4s, v1.4h, #02917; CHECK-GI-NEXT: udiv w0, w0, w12918; CHECK-GI-NEXT: fmov w1, s62919; CHECK-GI-NEXT: mov v18.s[2], w182920; CHECK-GI-NEXT: udiv w1, w1, w22921; CHECK-GI-NEXT: mov w2, v6.s[1]2922; CHECK-GI-NEXT: mov v18.s[3], w02923; CHECK-GI-NEXT: mls v1.4s, v18.4s, v3.4s2924; CHECK-GI-NEXT: udiv w2, w2, w32925; CHECK-GI-NEXT: mov w3, v6.s[2]2926; CHECK-GI-NEXT: fmov s19, w12927; CHECK-GI-NEXT: udiv w3, w3, w42928; CHECK-GI-NEXT: mov w4, v6.s[3]2929; CHECK-GI-NEXT: mov v19.s[1], w22930; CHECK-GI-NEXT: udiv w10, w4, w52931; CHECK-GI-NEXT: mov v19.s[2], w32932; CHECK-GI-NEXT: mov v19.s[3], w102933; CHECK-GI-NEXT: mls v6.4s, v19.4s, v7.4s2934; CHECK-GI-NEXT: uzp1 v1.8h, v1.8h, v6.8h2935; CHECK-GI-NEXT: ret2936entry:2937 %s = urem <16 x i16> %d, %e2938 ret <16 x i16> %s2939}2940 2941define <2 x i32> @sv2i32(<2 x i32> %d, <2 x i32> %e) {2942; CHECK-SD-LABEL: sv2i32:2943; CHECK-SD: // %bb.0: // %entry2944; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q12945; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q02946; CHECK-SD-NEXT: fmov w8, s12947; CHECK-SD-NEXT: fmov w9, s02948; CHECK-SD-NEXT: mov w11, v1.s[1]2949; CHECK-SD-NEXT: mov w12, v0.s[1]2950; CHECK-SD-NEXT: sdiv w10, w9, w82951; CHECK-SD-NEXT: sdiv w13, w12, w112952; CHECK-SD-NEXT: msub w8, w10, w8, w92953; CHECK-SD-NEXT: fmov s0, w82954; CHECK-SD-NEXT: msub w9, w13, w11, w122955; CHECK-SD-NEXT: mov v0.s[1], w92956; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q02957; CHECK-SD-NEXT: ret2958;2959; CHECK-GI-LABEL: sv2i32:2960; CHECK-GI: // %bb.0: // %entry2961; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q02962; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q12963; CHECK-GI-NEXT: fmov w8, s02964; CHECK-GI-NEXT: fmov w9, s12965; CHECK-GI-NEXT: mov w10, v1.s[1]2966; CHECK-GI-NEXT: sdiv w8, w8, w92967; CHECK-GI-NEXT: mov w9, v0.s[1]2968; CHECK-GI-NEXT: sdiv w9, w9, w102969; CHECK-GI-NEXT: fmov s2, w82970; CHECK-GI-NEXT: mov v2.s[1], w92971; CHECK-GI-NEXT: mls v0.2s, v2.2s, v1.2s2972; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q02973; CHECK-GI-NEXT: ret2974entry:2975 %s = srem <2 x i32> %d, %e2976 ret <2 x i32> %s2977}2978 2979define <3 x i32> @sv3i32(<3 x i32> %d, <3 x i32> %e) {2980; CHECK-SD-LABEL: sv3i32:2981; CHECK-SD: // %bb.0: // %entry2982; CHECK-SD-NEXT: fmov w11, s12983; CHECK-SD-NEXT: fmov w12, s02984; CHECK-SD-NEXT: mov w8, v1.s[1]2985; CHECK-SD-NEXT: mov w9, v0.s[1]2986; CHECK-SD-NEXT: mov w14, v1.s[2]2987; CHECK-SD-NEXT: mov w15, v0.s[2]2988; CHECK-SD-NEXT: sdiv w13, w12, w112989; CHECK-SD-NEXT: sdiv w10, w9, w82990; CHECK-SD-NEXT: msub w11, w13, w11, w122991; CHECK-SD-NEXT: fmov s0, w112992; CHECK-SD-NEXT: sdiv w16, w15, w142993; CHECK-SD-NEXT: msub w8, w10, w8, w92994; CHECK-SD-NEXT: mov v0.s[1], w82995; CHECK-SD-NEXT: msub w8, w16, w14, w152996; CHECK-SD-NEXT: mov v0.s[2], w82997; CHECK-SD-NEXT: ret2998;2999; CHECK-GI-LABEL: sv3i32:3000; CHECK-GI: // %bb.0: // %entry3001; CHECK-GI-NEXT: mov s2, v0.s[1]3002; CHECK-GI-NEXT: mov s3, v1.s[1]3003; CHECK-GI-NEXT: fmov w8, s03004; CHECK-GI-NEXT: fmov w9, s13005; CHECK-GI-NEXT: mov s0, v0.s[2]3006; CHECK-GI-NEXT: mov s1, v1.s[2]3007; CHECK-GI-NEXT: sdiv w10, w8, w93008; CHECK-GI-NEXT: fmov w11, s23009; CHECK-GI-NEXT: fmov w12, s33010; CHECK-GI-NEXT: fmov w14, s03011; CHECK-GI-NEXT: fmov w15, s13012; CHECK-GI-NEXT: sdiv w13, w11, w123013; CHECK-GI-NEXT: msub w8, w10, w9, w83014; CHECK-GI-NEXT: fmov s0, w83015; CHECK-GI-NEXT: sdiv w16, w14, w153016; CHECK-GI-NEXT: msub w9, w13, w12, w113017; CHECK-GI-NEXT: mov v0.s[1], w93018; CHECK-GI-NEXT: msub w8, w16, w15, w143019; CHECK-GI-NEXT: mov v0.s[2], w83020; CHECK-GI-NEXT: ret3021entry:3022 %s = srem <3 x i32> %d, %e3023 ret <3 x i32> %s3024}3025 3026define <4 x i32> @sv4i32(<4 x i32> %d, <4 x i32> %e) {3027; CHECK-SD-LABEL: sv4i32:3028; CHECK-SD: // %bb.0: // %entry3029; CHECK-SD-NEXT: fmov w11, s13030; CHECK-SD-NEXT: fmov w12, s03031; CHECK-SD-NEXT: mov w8, v1.s[1]3032; CHECK-SD-NEXT: mov w9, v0.s[1]3033; CHECK-SD-NEXT: mov w14, v1.s[2]3034; CHECK-SD-NEXT: mov w15, v0.s[2]3035; CHECK-SD-NEXT: mov w17, v1.s[3]3036; CHECK-SD-NEXT: mov w18, v0.s[3]3037; CHECK-SD-NEXT: sdiv w13, w12, w113038; CHECK-SD-NEXT: sdiv w10, w9, w83039; CHECK-SD-NEXT: msub w11, w13, w11, w123040; CHECK-SD-NEXT: fmov s0, w113041; CHECK-SD-NEXT: sdiv w16, w15, w143042; CHECK-SD-NEXT: msub w8, w10, w8, w93043; CHECK-SD-NEXT: mov v0.s[1], w83044; CHECK-SD-NEXT: sdiv w9, w18, w173045; CHECK-SD-NEXT: msub w8, w16, w14, w153046; CHECK-SD-NEXT: mov v0.s[2], w83047; CHECK-SD-NEXT: msub w8, w9, w17, w183048; CHECK-SD-NEXT: mov v0.s[3], w83049; CHECK-SD-NEXT: ret3050;3051; CHECK-GI-LABEL: sv4i32:3052; CHECK-GI: // %bb.0: // %entry3053; CHECK-GI-NEXT: fmov w8, s03054; CHECK-GI-NEXT: fmov w9, s13055; CHECK-GI-NEXT: mov w10, v1.s[1]3056; CHECK-GI-NEXT: mov w11, v1.s[2]3057; CHECK-GI-NEXT: mov w12, v1.s[3]3058; CHECK-GI-NEXT: sdiv w8, w8, w93059; CHECK-GI-NEXT: mov w9, v0.s[1]3060; CHECK-GI-NEXT: sdiv w9, w9, w103061; CHECK-GI-NEXT: mov w10, v0.s[2]3062; CHECK-GI-NEXT: fmov s2, w83063; CHECK-GI-NEXT: sdiv w10, w10, w113064; CHECK-GI-NEXT: mov w11, v0.s[3]3065; CHECK-GI-NEXT: mov v2.s[1], w93066; CHECK-GI-NEXT: sdiv w8, w11, w123067; CHECK-GI-NEXT: mov v2.s[2], w103068; CHECK-GI-NEXT: mov v2.s[3], w83069; CHECK-GI-NEXT: mls v0.4s, v2.4s, v1.4s3070; CHECK-GI-NEXT: ret3071entry:3072 %s = srem <4 x i32> %d, %e3073 ret <4 x i32> %s3074}3075 3076define <8 x i32> @sv8i32(<8 x i32> %d, <8 x i32> %e) {3077; CHECK-SD-LABEL: sv8i32:3078; CHECK-SD: // %bb.0: // %entry3079; CHECK-SD-NEXT: stp x22, x21, [sp, #-32]! // 16-byte Folded Spill3080; CHECK-SD-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill3081; CHECK-SD-NEXT: .cfi_def_cfa_offset 323082; CHECK-SD-NEXT: .cfi_offset w19, -83083; CHECK-SD-NEXT: .cfi_offset w20, -163084; CHECK-SD-NEXT: .cfi_offset w21, -243085; CHECK-SD-NEXT: .cfi_offset w22, -323086; CHECK-SD-NEXT: mov w8, v2.s[1]3087; CHECK-SD-NEXT: mov w9, v0.s[1]3088; CHECK-SD-NEXT: fmov w11, s23089; CHECK-SD-NEXT: fmov w12, s03090; CHECK-SD-NEXT: fmov w4, s33091; CHECK-SD-NEXT: fmov w5, s13092; CHECK-SD-NEXT: mov w1, v3.s[1]3093; CHECK-SD-NEXT: mov w2, v1.s[1]3094; CHECK-SD-NEXT: mov w14, v2.s[2]3095; CHECK-SD-NEXT: mov w15, v0.s[2]3096; CHECK-SD-NEXT: mov w7, v3.s[2]3097; CHECK-SD-NEXT: mov w19, v1.s[2]3098; CHECK-SD-NEXT: sdiv w10, w9, w83099; CHECK-SD-NEXT: mov w17, v2.s[3]3100; CHECK-SD-NEXT: mov w18, v0.s[3]3101; CHECK-SD-NEXT: mov w21, v3.s[3]3102; CHECK-SD-NEXT: mov w22, v1.s[3]3103; CHECK-SD-NEXT: sdiv w13, w12, w113104; CHECK-SD-NEXT: msub w8, w10, w8, w93105; CHECK-SD-NEXT: sdiv w6, w5, w43106; CHECK-SD-NEXT: msub w9, w13, w11, w123107; CHECK-SD-NEXT: fmov s0, w93108; CHECK-SD-NEXT: mov v0.s[1], w83109; CHECK-SD-NEXT: sdiv w3, w2, w13110; CHECK-SD-NEXT: msub w10, w6, w4, w53111; CHECK-SD-NEXT: fmov s1, w103112; CHECK-SD-NEXT: sdiv w16, w15, w143113; CHECK-SD-NEXT: msub w11, w3, w1, w23114; CHECK-SD-NEXT: mov v1.s[1], w113115; CHECK-SD-NEXT: sdiv w20, w19, w73116; CHECK-SD-NEXT: msub w9, w16, w14, w153117; CHECK-SD-NEXT: mov v0.s[2], w93118; CHECK-SD-NEXT: sdiv w0, w18, w173119; CHECK-SD-NEXT: msub w8, w20, w7, w193120; CHECK-SD-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload3121; CHECK-SD-NEXT: mov v1.s[2], w83122; CHECK-SD-NEXT: sdiv w12, w22, w213123; CHECK-SD-NEXT: msub w10, w0, w17, w183124; CHECK-SD-NEXT: mov v0.s[3], w103125; CHECK-SD-NEXT: msub w8, w12, w21, w223126; CHECK-SD-NEXT: mov v1.s[3], w83127; CHECK-SD-NEXT: ldp x22, x21, [sp], #32 // 16-byte Folded Reload3128; CHECK-SD-NEXT: ret3129;3130; CHECK-GI-LABEL: sv8i32:3131; CHECK-GI: // %bb.0: // %entry3132; CHECK-GI-NEXT: fmov w8, s03133; CHECK-GI-NEXT: fmov w9, s23134; CHECK-GI-NEXT: mov w10, v2.s[1]3135; CHECK-GI-NEXT: mov w11, v2.s[2]3136; CHECK-GI-NEXT: mov w12, v2.s[3]3137; CHECK-GI-NEXT: fmov w13, s33138; CHECK-GI-NEXT: mov w14, v3.s[1]3139; CHECK-GI-NEXT: mov w15, v3.s[2]3140; CHECK-GI-NEXT: mov w16, v3.s[3]3141; CHECK-GI-NEXT: sdiv w8, w8, w93142; CHECK-GI-NEXT: mov w9, v0.s[1]3143; CHECK-GI-NEXT: sdiv w9, w9, w103144; CHECK-GI-NEXT: mov w10, v0.s[2]3145; CHECK-GI-NEXT: fmov s4, w83146; CHECK-GI-NEXT: sdiv w10, w10, w113147; CHECK-GI-NEXT: mov w11, v0.s[3]3148; CHECK-GI-NEXT: mov v4.s[1], w93149; CHECK-GI-NEXT: sdiv w11, w11, w123150; CHECK-GI-NEXT: fmov w12, s13151; CHECK-GI-NEXT: mov v4.s[2], w103152; CHECK-GI-NEXT: sdiv w12, w12, w133153; CHECK-GI-NEXT: mov w13, v1.s[1]3154; CHECK-GI-NEXT: mov v4.s[3], w113155; CHECK-GI-NEXT: mls v0.4s, v4.4s, v2.4s3156; CHECK-GI-NEXT: sdiv w13, w13, w143157; CHECK-GI-NEXT: mov w14, v1.s[2]3158; CHECK-GI-NEXT: fmov s5, w123159; CHECK-GI-NEXT: sdiv w14, w14, w153160; CHECK-GI-NEXT: mov w15, v1.s[3]3161; CHECK-GI-NEXT: mov v5.s[1], w133162; CHECK-GI-NEXT: sdiv w8, w15, w163163; CHECK-GI-NEXT: mov v5.s[2], w143164; CHECK-GI-NEXT: mov v5.s[3], w83165; CHECK-GI-NEXT: mls v1.4s, v5.4s, v3.4s3166; CHECK-GI-NEXT: ret3167entry:3168 %s = srem <8 x i32> %d, %e3169 ret <8 x i32> %s3170}3171 3172define <2 x i32> @uv2i32(<2 x i32> %d, <2 x i32> %e) {3173; CHECK-SD-LABEL: uv2i32:3174; CHECK-SD: // %bb.0: // %entry3175; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q13176; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q03177; CHECK-SD-NEXT: fmov w8, s13178; CHECK-SD-NEXT: fmov w9, s03179; CHECK-SD-NEXT: mov w11, v1.s[1]3180; CHECK-SD-NEXT: mov w12, v0.s[1]3181; CHECK-SD-NEXT: udiv w10, w9, w83182; CHECK-SD-NEXT: udiv w13, w12, w113183; CHECK-SD-NEXT: msub w8, w10, w8, w93184; CHECK-SD-NEXT: fmov s0, w83185; CHECK-SD-NEXT: msub w9, w13, w11, w123186; CHECK-SD-NEXT: mov v0.s[1], w93187; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q03188; CHECK-SD-NEXT: ret3189;3190; CHECK-GI-LABEL: uv2i32:3191; CHECK-GI: // %bb.0: // %entry3192; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q03193; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q13194; CHECK-GI-NEXT: fmov w8, s03195; CHECK-GI-NEXT: fmov w9, s13196; CHECK-GI-NEXT: mov w10, v1.s[1]3197; CHECK-GI-NEXT: udiv w8, w8, w93198; CHECK-GI-NEXT: mov w9, v0.s[1]3199; CHECK-GI-NEXT: udiv w9, w9, w103200; CHECK-GI-NEXT: fmov s2, w83201; CHECK-GI-NEXT: mov v2.s[1], w93202; CHECK-GI-NEXT: mls v0.2s, v2.2s, v1.2s3203; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q03204; CHECK-GI-NEXT: ret3205entry:3206 %s = urem <2 x i32> %d, %e3207 ret <2 x i32> %s3208}3209 3210define <3 x i32> @uv3i32(<3 x i32> %d, <3 x i32> %e) {3211; CHECK-SD-LABEL: uv3i32:3212; CHECK-SD: // %bb.0: // %entry3213; CHECK-SD-NEXT: fmov w11, s13214; CHECK-SD-NEXT: fmov w12, s03215; CHECK-SD-NEXT: mov w8, v1.s[1]3216; CHECK-SD-NEXT: mov w9, v0.s[1]3217; CHECK-SD-NEXT: mov w14, v1.s[2]3218; CHECK-SD-NEXT: mov w15, v0.s[2]3219; CHECK-SD-NEXT: udiv w13, w12, w113220; CHECK-SD-NEXT: udiv w10, w9, w83221; CHECK-SD-NEXT: msub w11, w13, w11, w123222; CHECK-SD-NEXT: fmov s0, w113223; CHECK-SD-NEXT: udiv w16, w15, w143224; CHECK-SD-NEXT: msub w8, w10, w8, w93225; CHECK-SD-NEXT: mov v0.s[1], w83226; CHECK-SD-NEXT: msub w8, w16, w14, w153227; CHECK-SD-NEXT: mov v0.s[2], w83228; CHECK-SD-NEXT: ret3229;3230; CHECK-GI-LABEL: uv3i32:3231; CHECK-GI: // %bb.0: // %entry3232; CHECK-GI-NEXT: mov s2, v0.s[1]3233; CHECK-GI-NEXT: mov s3, v1.s[1]3234; CHECK-GI-NEXT: fmov w8, s03235; CHECK-GI-NEXT: fmov w9, s13236; CHECK-GI-NEXT: mov s0, v0.s[2]3237; CHECK-GI-NEXT: mov s1, v1.s[2]3238; CHECK-GI-NEXT: udiv w10, w8, w93239; CHECK-GI-NEXT: fmov w11, s23240; CHECK-GI-NEXT: fmov w12, s33241; CHECK-GI-NEXT: fmov w14, s03242; CHECK-GI-NEXT: fmov w15, s13243; CHECK-GI-NEXT: udiv w13, w11, w123244; CHECK-GI-NEXT: msub w8, w10, w9, w83245; CHECK-GI-NEXT: fmov s0, w83246; CHECK-GI-NEXT: udiv w16, w14, w153247; CHECK-GI-NEXT: msub w9, w13, w12, w113248; CHECK-GI-NEXT: mov v0.s[1], w93249; CHECK-GI-NEXT: msub w8, w16, w15, w143250; CHECK-GI-NEXT: mov v0.s[2], w83251; CHECK-GI-NEXT: ret3252entry:3253 %s = urem <3 x i32> %d, %e3254 ret <3 x i32> %s3255}3256 3257define <4 x i32> @uv4i32(<4 x i32> %d, <4 x i32> %e) {3258; CHECK-SD-LABEL: uv4i32:3259; CHECK-SD: // %bb.0: // %entry3260; CHECK-SD-NEXT: fmov w11, s13261; CHECK-SD-NEXT: fmov w12, s03262; CHECK-SD-NEXT: mov w8, v1.s[1]3263; CHECK-SD-NEXT: mov w9, v0.s[1]3264; CHECK-SD-NEXT: mov w14, v1.s[2]3265; CHECK-SD-NEXT: mov w15, v0.s[2]3266; CHECK-SD-NEXT: mov w17, v1.s[3]3267; CHECK-SD-NEXT: mov w18, v0.s[3]3268; CHECK-SD-NEXT: udiv w13, w12, w113269; CHECK-SD-NEXT: udiv w10, w9, w83270; CHECK-SD-NEXT: msub w11, w13, w11, w123271; CHECK-SD-NEXT: fmov s0, w113272; CHECK-SD-NEXT: udiv w16, w15, w143273; CHECK-SD-NEXT: msub w8, w10, w8, w93274; CHECK-SD-NEXT: mov v0.s[1], w83275; CHECK-SD-NEXT: udiv w9, w18, w173276; CHECK-SD-NEXT: msub w8, w16, w14, w153277; CHECK-SD-NEXT: mov v0.s[2], w83278; CHECK-SD-NEXT: msub w8, w9, w17, w183279; CHECK-SD-NEXT: mov v0.s[3], w83280; CHECK-SD-NEXT: ret3281;3282; CHECK-GI-LABEL: uv4i32:3283; CHECK-GI: // %bb.0: // %entry3284; CHECK-GI-NEXT: fmov w8, s03285; CHECK-GI-NEXT: fmov w9, s13286; CHECK-GI-NEXT: mov w10, v1.s[1]3287; CHECK-GI-NEXT: mov w11, v1.s[2]3288; CHECK-GI-NEXT: mov w12, v1.s[3]3289; CHECK-GI-NEXT: udiv w8, w8, w93290; CHECK-GI-NEXT: mov w9, v0.s[1]3291; CHECK-GI-NEXT: udiv w9, w9, w103292; CHECK-GI-NEXT: mov w10, v0.s[2]3293; CHECK-GI-NEXT: fmov s2, w83294; CHECK-GI-NEXT: udiv w10, w10, w113295; CHECK-GI-NEXT: mov w11, v0.s[3]3296; CHECK-GI-NEXT: mov v2.s[1], w93297; CHECK-GI-NEXT: udiv w8, w11, w123298; CHECK-GI-NEXT: mov v2.s[2], w103299; CHECK-GI-NEXT: mov v2.s[3], w83300; CHECK-GI-NEXT: mls v0.4s, v2.4s, v1.4s3301; CHECK-GI-NEXT: ret3302entry:3303 %s = urem <4 x i32> %d, %e3304 ret <4 x i32> %s3305}3306 3307define <8 x i32> @uv8i32(<8 x i32> %d, <8 x i32> %e) {3308; CHECK-SD-LABEL: uv8i32:3309; CHECK-SD: // %bb.0: // %entry3310; CHECK-SD-NEXT: stp x22, x21, [sp, #-32]! // 16-byte Folded Spill3311; CHECK-SD-NEXT: stp x20, x19, [sp, #16] // 16-byte Folded Spill3312; CHECK-SD-NEXT: .cfi_def_cfa_offset 323313; CHECK-SD-NEXT: .cfi_offset w19, -83314; CHECK-SD-NEXT: .cfi_offset w20, -163315; CHECK-SD-NEXT: .cfi_offset w21, -243316; CHECK-SD-NEXT: .cfi_offset w22, -323317; CHECK-SD-NEXT: mov w8, v2.s[1]3318; CHECK-SD-NEXT: mov w9, v0.s[1]3319; CHECK-SD-NEXT: fmov w11, s23320; CHECK-SD-NEXT: fmov w12, s03321; CHECK-SD-NEXT: fmov w4, s33322; CHECK-SD-NEXT: fmov w5, s13323; CHECK-SD-NEXT: mov w1, v3.s[1]3324; CHECK-SD-NEXT: mov w2, v1.s[1]3325; CHECK-SD-NEXT: mov w14, v2.s[2]3326; CHECK-SD-NEXT: mov w15, v0.s[2]3327; CHECK-SD-NEXT: mov w7, v3.s[2]3328; CHECK-SD-NEXT: mov w19, v1.s[2]3329; CHECK-SD-NEXT: udiv w10, w9, w83330; CHECK-SD-NEXT: mov w17, v2.s[3]3331; CHECK-SD-NEXT: mov w18, v0.s[3]3332; CHECK-SD-NEXT: mov w21, v3.s[3]3333; CHECK-SD-NEXT: mov w22, v1.s[3]3334; CHECK-SD-NEXT: udiv w13, w12, w113335; CHECK-SD-NEXT: msub w8, w10, w8, w93336; CHECK-SD-NEXT: udiv w6, w5, w43337; CHECK-SD-NEXT: msub w9, w13, w11, w123338; CHECK-SD-NEXT: fmov s0, w93339; CHECK-SD-NEXT: mov v0.s[1], w83340; CHECK-SD-NEXT: udiv w3, w2, w13341; CHECK-SD-NEXT: msub w10, w6, w4, w53342; CHECK-SD-NEXT: fmov s1, w103343; CHECK-SD-NEXT: udiv w16, w15, w143344; CHECK-SD-NEXT: msub w11, w3, w1, w23345; CHECK-SD-NEXT: mov v1.s[1], w113346; CHECK-SD-NEXT: udiv w20, w19, w73347; CHECK-SD-NEXT: msub w9, w16, w14, w153348; CHECK-SD-NEXT: mov v0.s[2], w93349; CHECK-SD-NEXT: udiv w0, w18, w173350; CHECK-SD-NEXT: msub w8, w20, w7, w193351; CHECK-SD-NEXT: ldp x20, x19, [sp, #16] // 16-byte Folded Reload3352; CHECK-SD-NEXT: mov v1.s[2], w83353; CHECK-SD-NEXT: udiv w12, w22, w213354; CHECK-SD-NEXT: msub w10, w0, w17, w183355; CHECK-SD-NEXT: mov v0.s[3], w103356; CHECK-SD-NEXT: msub w8, w12, w21, w223357; CHECK-SD-NEXT: mov v1.s[3], w83358; CHECK-SD-NEXT: ldp x22, x21, [sp], #32 // 16-byte Folded Reload3359; CHECK-SD-NEXT: ret3360;3361; CHECK-GI-LABEL: uv8i32:3362; CHECK-GI: // %bb.0: // %entry3363; CHECK-GI-NEXT: fmov w8, s03364; CHECK-GI-NEXT: fmov w9, s23365; CHECK-GI-NEXT: mov w10, v2.s[1]3366; CHECK-GI-NEXT: mov w11, v2.s[2]3367; CHECK-GI-NEXT: mov w12, v2.s[3]3368; CHECK-GI-NEXT: fmov w13, s33369; CHECK-GI-NEXT: mov w14, v3.s[1]3370; CHECK-GI-NEXT: mov w15, v3.s[2]3371; CHECK-GI-NEXT: mov w16, v3.s[3]3372; CHECK-GI-NEXT: udiv w8, w8, w93373; CHECK-GI-NEXT: mov w9, v0.s[1]3374; CHECK-GI-NEXT: udiv w9, w9, w103375; CHECK-GI-NEXT: mov w10, v0.s[2]3376; CHECK-GI-NEXT: fmov s4, w83377; CHECK-GI-NEXT: udiv w10, w10, w113378; CHECK-GI-NEXT: mov w11, v0.s[3]3379; CHECK-GI-NEXT: mov v4.s[1], w93380; CHECK-GI-NEXT: udiv w11, w11, w123381; CHECK-GI-NEXT: fmov w12, s13382; CHECK-GI-NEXT: mov v4.s[2], w103383; CHECK-GI-NEXT: udiv w12, w12, w133384; CHECK-GI-NEXT: mov w13, v1.s[1]3385; CHECK-GI-NEXT: mov v4.s[3], w113386; CHECK-GI-NEXT: mls v0.4s, v4.4s, v2.4s3387; CHECK-GI-NEXT: udiv w13, w13, w143388; CHECK-GI-NEXT: mov w14, v1.s[2]3389; CHECK-GI-NEXT: fmov s5, w123390; CHECK-GI-NEXT: udiv w14, w14, w153391; CHECK-GI-NEXT: mov w15, v1.s[3]3392; CHECK-GI-NEXT: mov v5.s[1], w133393; CHECK-GI-NEXT: udiv w8, w15, w163394; CHECK-GI-NEXT: mov v5.s[2], w143395; CHECK-GI-NEXT: mov v5.s[3], w83396; CHECK-GI-NEXT: mls v1.4s, v5.4s, v3.4s3397; CHECK-GI-NEXT: ret3398entry:3399 %s = urem <8 x i32> %d, %e3400 ret <8 x i32> %s3401}3402 3403define <2 x i64> @sv2i64(<2 x i64> %d, <2 x i64> %e) {3404; CHECK-SD-LABEL: sv2i64:3405; CHECK-SD: // %bb.0: // %entry3406; CHECK-SD-NEXT: fmov x8, d13407; CHECK-SD-NEXT: fmov x9, d03408; CHECK-SD-NEXT: mov x11, v1.d[1]3409; CHECK-SD-NEXT: mov x12, v0.d[1]3410; CHECK-SD-NEXT: sdiv x10, x9, x83411; CHECK-SD-NEXT: sdiv x13, x12, x113412; CHECK-SD-NEXT: msub x8, x10, x8, x93413; CHECK-SD-NEXT: fmov d0, x83414; CHECK-SD-NEXT: msub x9, x13, x11, x123415; CHECK-SD-NEXT: mov v0.d[1], x93416; CHECK-SD-NEXT: ret3417;3418; CHECK-GI-LABEL: sv2i64:3419; CHECK-GI: // %bb.0: // %entry3420; CHECK-GI-NEXT: fmov x8, d03421; CHECK-GI-NEXT: fmov x9, d13422; CHECK-GI-NEXT: mov x10, v1.d[1]3423; CHECK-GI-NEXT: mov x11, v0.d[1]3424; CHECK-GI-NEXT: sdiv x8, x8, x93425; CHECK-GI-NEXT: sdiv x11, x11, x103426; CHECK-GI-NEXT: fmov d1, x83427; CHECK-GI-NEXT: mov v1.d[1], x113428; CHECK-GI-NEXT: fmov x11, d13429; CHECK-GI-NEXT: mov x8, v1.d[1]3430; CHECK-GI-NEXT: mul x9, x11, x93431; CHECK-GI-NEXT: mul x8, x8, x103432; CHECK-GI-NEXT: fmov d1, x93433; CHECK-GI-NEXT: mov v1.d[1], x83434; CHECK-GI-NEXT: sub v0.2d, v0.2d, v1.2d3435; CHECK-GI-NEXT: ret3436entry:3437 %s = srem <2 x i64> %d, %e3438 ret <2 x i64> %s3439}3440 3441define <3 x i64> @sv3i64(<3 x i64> %d, <3 x i64> %e) {3442; CHECK-SD-LABEL: sv3i64:3443; CHECK-SD: // %bb.0: // %entry3444; CHECK-SD-NEXT: // kill: def $d5 killed $d5 def $q53445; CHECK-SD-NEXT: // kill: def $d4 killed $d4 def $q43446; CHECK-SD-NEXT: // kill: def $d3 killed $d3 def $q33447; CHECK-SD-NEXT: // kill: def $d2 killed $d2 def $q23448; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q13449; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q03450; CHECK-SD-NEXT: fmov x8, d33451; CHECK-SD-NEXT: fmov x9, d03452; CHECK-SD-NEXT: fmov x11, d43453; CHECK-SD-NEXT: fmov x12, d13454; CHECK-SD-NEXT: fmov x14, d53455; CHECK-SD-NEXT: fmov x15, d23456; CHECK-SD-NEXT: sdiv x10, x9, x83457; CHECK-SD-NEXT: sdiv x13, x12, x113458; CHECK-SD-NEXT: msub x8, x10, x8, x93459; CHECK-SD-NEXT: fmov d0, x83460; CHECK-SD-NEXT: sdiv x16, x15, x143461; CHECK-SD-NEXT: msub x9, x13, x11, x123462; CHECK-SD-NEXT: fmov d1, x93463; CHECK-SD-NEXT: msub x10, x16, x14, x153464; CHECK-SD-NEXT: fmov d2, x103465; CHECK-SD-NEXT: ret3466;3467; CHECK-GI-LABEL: sv3i64:3468; CHECK-GI: // %bb.0: // %entry3469; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q03470; CHECK-GI-NEXT: // kill: def $d3 killed $d3 def $q33471; CHECK-GI-NEXT: fmov x8, d03472; CHECK-GI-NEXT: fmov x9, d33473; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q13474; CHECK-GI-NEXT: // kill: def $d4 killed $d4 def $q43475; CHECK-GI-NEXT: fmov x10, d43476; CHECK-GI-NEXT: mov v3.d[1], v4.d[0]3477; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]3478; CHECK-GI-NEXT: sdiv x8, x8, x93479; CHECK-GI-NEXT: fmov x9, d13480; CHECK-GI-NEXT: fmov x14, d33481; CHECK-GI-NEXT: mov x12, v3.d[1]3482; CHECK-GI-NEXT: sdiv x9, x9, x103483; CHECK-GI-NEXT: fmov d6, x83484; CHECK-GI-NEXT: fmov x8, d23485; CHECK-GI-NEXT: mov v6.d[1], x93486; CHECK-GI-NEXT: fmov x9, d53487; CHECK-GI-NEXT: sdiv x10, x8, x93488; CHECK-GI-NEXT: fmov x13, d63489; CHECK-GI-NEXT: mov x11, v6.d[1]3490; CHECK-GI-NEXT: mul x13, x13, x143491; CHECK-GI-NEXT: mul x11, x11, x123492; CHECK-GI-NEXT: fmov d2, x133493; CHECK-GI-NEXT: mov v2.d[1], x113494; CHECK-GI-NEXT: msub x8, x10, x9, x83495; CHECK-GI-NEXT: sub v0.2d, v0.2d, v2.2d3496; CHECK-GI-NEXT: mov d1, v0.d[1]3497; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q03498; CHECK-GI-NEXT: fmov d2, x83499; CHECK-GI-NEXT: ret3500entry:3501 %s = srem <3 x i64> %d, %e3502 ret <3 x i64> %s3503}3504 3505define <4 x i64> @sv4i64(<4 x i64> %d, <4 x i64> %e) {3506; CHECK-SD-LABEL: sv4i64:3507; CHECK-SD: // %bb.0: // %entry3508; CHECK-SD-NEXT: mov x8, v2.d[1]3509; CHECK-SD-NEXT: mov x9, v0.d[1]3510; CHECK-SD-NEXT: fmov x11, d23511; CHECK-SD-NEXT: fmov x12, d03512; CHECK-SD-NEXT: fmov x14, d33513; CHECK-SD-NEXT: fmov x15, d13514; CHECK-SD-NEXT: mov x17, v3.d[1]3515; CHECK-SD-NEXT: mov x18, v1.d[1]3516; CHECK-SD-NEXT: sdiv x10, x9, x83517; CHECK-SD-NEXT: sdiv x13, x12, x113518; CHECK-SD-NEXT: msub x8, x10, x8, x93519; CHECK-SD-NEXT: sdiv x16, x15, x143520; CHECK-SD-NEXT: msub x9, x13, x11, x123521; CHECK-SD-NEXT: fmov d0, x93522; CHECK-SD-NEXT: mov v0.d[1], x83523; CHECK-SD-NEXT: sdiv x0, x18, x173524; CHECK-SD-NEXT: msub x10, x16, x14, x153525; CHECK-SD-NEXT: fmov d1, x103526; CHECK-SD-NEXT: msub x11, x0, x17, x183527; CHECK-SD-NEXT: mov v1.d[1], x113528; CHECK-SD-NEXT: ret3529;3530; CHECK-GI-LABEL: sv4i64:3531; CHECK-GI: // %bb.0: // %entry3532; CHECK-GI-NEXT: fmov x8, d03533; CHECK-GI-NEXT: fmov x9, d23534; CHECK-GI-NEXT: mov x10, v2.d[1]3535; CHECK-GI-NEXT: mov x11, v0.d[1]3536; CHECK-GI-NEXT: fmov x12, d13537; CHECK-GI-NEXT: fmov x13, d33538; CHECK-GI-NEXT: mov x14, v3.d[1]3539; CHECK-GI-NEXT: mov x15, v1.d[1]3540; CHECK-GI-NEXT: sdiv x8, x8, x93541; CHECK-GI-NEXT: sdiv x11, x11, x103542; CHECK-GI-NEXT: fmov d2, x83543; CHECK-GI-NEXT: sdiv x12, x12, x133544; CHECK-GI-NEXT: mov v2.d[1], x113545; CHECK-GI-NEXT: fmov x11, d23546; CHECK-GI-NEXT: mov x8, v2.d[1]3547; CHECK-GI-NEXT: mul x9, x11, x93548; CHECK-GI-NEXT: mul x8, x8, x103549; CHECK-GI-NEXT: fmov d2, x93550; CHECK-GI-NEXT: mov v2.d[1], x83551; CHECK-GI-NEXT: sdiv x15, x15, x143552; CHECK-GI-NEXT: fmov d3, x123553; CHECK-GI-NEXT: sub v0.2d, v0.2d, v2.2d3554; CHECK-GI-NEXT: mov v3.d[1], x153555; CHECK-GI-NEXT: fmov x11, d33556; CHECK-GI-NEXT: mov x10, v3.d[1]3557; CHECK-GI-NEXT: mul x11, x11, x133558; CHECK-GI-NEXT: mul x10, x10, x143559; CHECK-GI-NEXT: fmov d3, x113560; CHECK-GI-NEXT: mov v3.d[1], x103561; CHECK-GI-NEXT: sub v1.2d, v1.2d, v3.2d3562; CHECK-GI-NEXT: ret3563entry:3564 %s = srem <4 x i64> %d, %e3565 ret <4 x i64> %s3566}3567 3568define <2 x i64> @uv2i64(<2 x i64> %d, <2 x i64> %e) {3569; CHECK-SD-LABEL: uv2i64:3570; CHECK-SD: // %bb.0: // %entry3571; CHECK-SD-NEXT: fmov x8, d13572; CHECK-SD-NEXT: fmov x9, d03573; CHECK-SD-NEXT: mov x11, v1.d[1]3574; CHECK-SD-NEXT: mov x12, v0.d[1]3575; CHECK-SD-NEXT: udiv x10, x9, x83576; CHECK-SD-NEXT: udiv x13, x12, x113577; CHECK-SD-NEXT: msub x8, x10, x8, x93578; CHECK-SD-NEXT: fmov d0, x83579; CHECK-SD-NEXT: msub x9, x13, x11, x123580; CHECK-SD-NEXT: mov v0.d[1], x93581; CHECK-SD-NEXT: ret3582;3583; CHECK-GI-LABEL: uv2i64:3584; CHECK-GI: // %bb.0: // %entry3585; CHECK-GI-NEXT: fmov x8, d03586; CHECK-GI-NEXT: fmov x9, d13587; CHECK-GI-NEXT: mov x10, v1.d[1]3588; CHECK-GI-NEXT: mov x11, v0.d[1]3589; CHECK-GI-NEXT: udiv x8, x8, x93590; CHECK-GI-NEXT: udiv x11, x11, x103591; CHECK-GI-NEXT: fmov d1, x83592; CHECK-GI-NEXT: mov v1.d[1], x113593; CHECK-GI-NEXT: fmov x11, d13594; CHECK-GI-NEXT: mov x8, v1.d[1]3595; CHECK-GI-NEXT: mul x9, x11, x93596; CHECK-GI-NEXT: mul x8, x8, x103597; CHECK-GI-NEXT: fmov d1, x93598; CHECK-GI-NEXT: mov v1.d[1], x83599; CHECK-GI-NEXT: sub v0.2d, v0.2d, v1.2d3600; CHECK-GI-NEXT: ret3601entry:3602 %s = urem <2 x i64> %d, %e3603 ret <2 x i64> %s3604}3605 3606define <3 x i64> @uv3i64(<3 x i64> %d, <3 x i64> %e) {3607; CHECK-SD-LABEL: uv3i64:3608; CHECK-SD: // %bb.0: // %entry3609; CHECK-SD-NEXT: // kill: def $d5 killed $d5 def $q53610; CHECK-SD-NEXT: // kill: def $d4 killed $d4 def $q43611; CHECK-SD-NEXT: // kill: def $d3 killed $d3 def $q33612; CHECK-SD-NEXT: // kill: def $d2 killed $d2 def $q23613; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q13614; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q03615; CHECK-SD-NEXT: fmov x8, d33616; CHECK-SD-NEXT: fmov x9, d03617; CHECK-SD-NEXT: fmov x11, d43618; CHECK-SD-NEXT: fmov x12, d13619; CHECK-SD-NEXT: fmov x14, d53620; CHECK-SD-NEXT: fmov x15, d23621; CHECK-SD-NEXT: udiv x10, x9, x83622; CHECK-SD-NEXT: udiv x13, x12, x113623; CHECK-SD-NEXT: msub x8, x10, x8, x93624; CHECK-SD-NEXT: fmov d0, x83625; CHECK-SD-NEXT: udiv x16, x15, x143626; CHECK-SD-NEXT: msub x9, x13, x11, x123627; CHECK-SD-NEXT: fmov d1, x93628; CHECK-SD-NEXT: msub x10, x16, x14, x153629; CHECK-SD-NEXT: fmov d2, x103630; CHECK-SD-NEXT: ret3631;3632; CHECK-GI-LABEL: uv3i64:3633; CHECK-GI: // %bb.0: // %entry3634; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q03635; CHECK-GI-NEXT: // kill: def $d3 killed $d3 def $q33636; CHECK-GI-NEXT: fmov x8, d03637; CHECK-GI-NEXT: fmov x9, d33638; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q13639; CHECK-GI-NEXT: // kill: def $d4 killed $d4 def $q43640; CHECK-GI-NEXT: fmov x10, d43641; CHECK-GI-NEXT: mov v3.d[1], v4.d[0]3642; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]3643; CHECK-GI-NEXT: udiv x8, x8, x93644; CHECK-GI-NEXT: fmov x9, d13645; CHECK-GI-NEXT: fmov x14, d33646; CHECK-GI-NEXT: mov x12, v3.d[1]3647; CHECK-GI-NEXT: udiv x9, x9, x103648; CHECK-GI-NEXT: fmov d6, x83649; CHECK-GI-NEXT: fmov x8, d23650; CHECK-GI-NEXT: mov v6.d[1], x93651; CHECK-GI-NEXT: fmov x9, d53652; CHECK-GI-NEXT: udiv x10, x8, x93653; CHECK-GI-NEXT: fmov x13, d63654; CHECK-GI-NEXT: mov x11, v6.d[1]3655; CHECK-GI-NEXT: mul x13, x13, x143656; CHECK-GI-NEXT: mul x11, x11, x123657; CHECK-GI-NEXT: fmov d2, x133658; CHECK-GI-NEXT: mov v2.d[1], x113659; CHECK-GI-NEXT: msub x8, x10, x9, x83660; CHECK-GI-NEXT: sub v0.2d, v0.2d, v2.2d3661; CHECK-GI-NEXT: mov d1, v0.d[1]3662; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q03663; CHECK-GI-NEXT: fmov d2, x83664; CHECK-GI-NEXT: ret3665entry:3666 %s = urem <3 x i64> %d, %e3667 ret <3 x i64> %s3668}3669 3670define <4 x i64> @uv4i64(<4 x i64> %d, <4 x i64> %e) {3671; CHECK-SD-LABEL: uv4i64:3672; CHECK-SD: // %bb.0: // %entry3673; CHECK-SD-NEXT: mov x8, v2.d[1]3674; CHECK-SD-NEXT: mov x9, v0.d[1]3675; CHECK-SD-NEXT: fmov x11, d23676; CHECK-SD-NEXT: fmov x12, d03677; CHECK-SD-NEXT: fmov x14, d33678; CHECK-SD-NEXT: fmov x15, d13679; CHECK-SD-NEXT: mov x17, v3.d[1]3680; CHECK-SD-NEXT: mov x18, v1.d[1]3681; CHECK-SD-NEXT: udiv x10, x9, x83682; CHECK-SD-NEXT: udiv x13, x12, x113683; CHECK-SD-NEXT: msub x8, x10, x8, x93684; CHECK-SD-NEXT: udiv x16, x15, x143685; CHECK-SD-NEXT: msub x9, x13, x11, x123686; CHECK-SD-NEXT: fmov d0, x93687; CHECK-SD-NEXT: mov v0.d[1], x83688; CHECK-SD-NEXT: udiv x0, x18, x173689; CHECK-SD-NEXT: msub x10, x16, x14, x153690; CHECK-SD-NEXT: fmov d1, x103691; CHECK-SD-NEXT: msub x11, x0, x17, x183692; CHECK-SD-NEXT: mov v1.d[1], x113693; CHECK-SD-NEXT: ret3694;3695; CHECK-GI-LABEL: uv4i64:3696; CHECK-GI: // %bb.0: // %entry3697; CHECK-GI-NEXT: fmov x8, d03698; CHECK-GI-NEXT: fmov x9, d23699; CHECK-GI-NEXT: mov x10, v2.d[1]3700; CHECK-GI-NEXT: mov x11, v0.d[1]3701; CHECK-GI-NEXT: fmov x12, d13702; CHECK-GI-NEXT: fmov x13, d33703; CHECK-GI-NEXT: mov x14, v3.d[1]3704; CHECK-GI-NEXT: mov x15, v1.d[1]3705; CHECK-GI-NEXT: udiv x8, x8, x93706; CHECK-GI-NEXT: udiv x11, x11, x103707; CHECK-GI-NEXT: fmov d2, x83708; CHECK-GI-NEXT: udiv x12, x12, x133709; CHECK-GI-NEXT: mov v2.d[1], x113710; CHECK-GI-NEXT: fmov x11, d23711; CHECK-GI-NEXT: mov x8, v2.d[1]3712; CHECK-GI-NEXT: mul x9, x11, x93713; CHECK-GI-NEXT: mul x8, x8, x103714; CHECK-GI-NEXT: fmov d2, x93715; CHECK-GI-NEXT: mov v2.d[1], x83716; CHECK-GI-NEXT: udiv x15, x15, x143717; CHECK-GI-NEXT: fmov d3, x123718; CHECK-GI-NEXT: sub v0.2d, v0.2d, v2.2d3719; CHECK-GI-NEXT: mov v3.d[1], x153720; CHECK-GI-NEXT: fmov x11, d33721; CHECK-GI-NEXT: mov x10, v3.d[1]3722; CHECK-GI-NEXT: mul x11, x11, x133723; CHECK-GI-NEXT: mul x10, x10, x143724; CHECK-GI-NEXT: fmov d3, x113725; CHECK-GI-NEXT: mov v3.d[1], x103726; CHECK-GI-NEXT: sub v1.2d, v1.2d, v3.2d3727; CHECK-GI-NEXT: ret3728entry:3729 %s = urem <4 x i64> %d, %e3730 ret <4 x i64> %s3731}3732 3733define <2 x i128> @sv2i128(<2 x i128> %d, <2 x i128> %e) {3734; CHECK-SD-LABEL: sv2i128:3735; CHECK-SD: // %bb.0: // %entry3736; CHECK-SD-NEXT: str x30, [sp, #-64]! // 8-byte Folded Spill3737; CHECK-SD-NEXT: stp x24, x23, [sp, #16] // 16-byte Folded Spill3738; CHECK-SD-NEXT: stp x22, x21, [sp, #32] // 16-byte Folded Spill3739; CHECK-SD-NEXT: stp x20, x19, [sp, #48] // 16-byte Folded Spill3740; CHECK-SD-NEXT: .cfi_def_cfa_offset 643741; CHECK-SD-NEXT: .cfi_offset w19, -83742; CHECK-SD-NEXT: .cfi_offset w20, -163743; CHECK-SD-NEXT: .cfi_offset w21, -243744; CHECK-SD-NEXT: .cfi_offset w22, -323745; CHECK-SD-NEXT: .cfi_offset w23, -403746; CHECK-SD-NEXT: .cfi_offset w24, -483747; CHECK-SD-NEXT: .cfi_offset w30, -643748; CHECK-SD-NEXT: mov x21, x33749; CHECK-SD-NEXT: mov x22, x23750; CHECK-SD-NEXT: mov x2, x43751; CHECK-SD-NEXT: mov x3, x53752; CHECK-SD-NEXT: mov x19, x73753; CHECK-SD-NEXT: mov x20, x63754; CHECK-SD-NEXT: bl __modti33755; CHECK-SD-NEXT: mov x23, x03756; CHECK-SD-NEXT: mov x24, x13757; CHECK-SD-NEXT: mov x0, x223758; CHECK-SD-NEXT: mov x1, x213759; CHECK-SD-NEXT: mov x2, x203760; CHECK-SD-NEXT: mov x3, x193761; CHECK-SD-NEXT: bl __modti33762; CHECK-SD-NEXT: mov x2, x03763; CHECK-SD-NEXT: mov x3, x13764; CHECK-SD-NEXT: mov x0, x233765; CHECK-SD-NEXT: mov x1, x243766; CHECK-SD-NEXT: ldp x20, x19, [sp, #48] // 16-byte Folded Reload3767; CHECK-SD-NEXT: ldp x22, x21, [sp, #32] // 16-byte Folded Reload3768; CHECK-SD-NEXT: ldp x24, x23, [sp, #16] // 16-byte Folded Reload3769; CHECK-SD-NEXT: ldr x30, [sp], #64 // 8-byte Folded Reload3770; CHECK-SD-NEXT: ret3771;3772; CHECK-GI-LABEL: sv2i128:3773; CHECK-GI: // %bb.0: // %entry3774; CHECK-GI-NEXT: str x30, [sp, #-64]! // 8-byte Folded Spill3775; CHECK-GI-NEXT: stp x24, x23, [sp, #16] // 16-byte Folded Spill3776; CHECK-GI-NEXT: stp x22, x21, [sp, #32] // 16-byte Folded Spill3777; CHECK-GI-NEXT: stp x20, x19, [sp, #48] // 16-byte Folded Spill3778; CHECK-GI-NEXT: .cfi_def_cfa_offset 643779; CHECK-GI-NEXT: .cfi_offset w19, -83780; CHECK-GI-NEXT: .cfi_offset w20, -163781; CHECK-GI-NEXT: .cfi_offset w21, -243782; CHECK-GI-NEXT: .cfi_offset w22, -323783; CHECK-GI-NEXT: .cfi_offset w23, -403784; CHECK-GI-NEXT: .cfi_offset w24, -483785; CHECK-GI-NEXT: .cfi_offset w30, -643786; CHECK-GI-NEXT: mov x19, x23787; CHECK-GI-NEXT: mov x20, x33788; CHECK-GI-NEXT: mov x2, x43789; CHECK-GI-NEXT: mov x3, x53790; CHECK-GI-NEXT: mov x21, x63791; CHECK-GI-NEXT: mov x22, x73792; CHECK-GI-NEXT: bl __modti33793; CHECK-GI-NEXT: mov x23, x03794; CHECK-GI-NEXT: mov x24, x13795; CHECK-GI-NEXT: mov x0, x193796; CHECK-GI-NEXT: mov x1, x203797; CHECK-GI-NEXT: mov x2, x213798; CHECK-GI-NEXT: mov x3, x223799; CHECK-GI-NEXT: bl __modti33800; CHECK-GI-NEXT: mov x2, x03801; CHECK-GI-NEXT: mov x3, x13802; CHECK-GI-NEXT: mov x0, x233803; CHECK-GI-NEXT: mov x1, x243804; CHECK-GI-NEXT: ldp x20, x19, [sp, #48] // 16-byte Folded Reload3805; CHECK-GI-NEXT: ldp x22, x21, [sp, #32] // 16-byte Folded Reload3806; CHECK-GI-NEXT: ldp x24, x23, [sp, #16] // 16-byte Folded Reload3807; CHECK-GI-NEXT: ldr x30, [sp], #64 // 8-byte Folded Reload3808; CHECK-GI-NEXT: ret3809entry:3810 %s = srem <2 x i128> %d, %e3811 ret <2 x i128> %s3812}3813 3814define <3 x i128> @sv3i128(<3 x i128> %d, <3 x i128> %e) {3815; CHECK-SD-LABEL: sv3i128:3816; CHECK-SD: // %bb.0: // %entry3817; CHECK-SD-NEXT: str x30, [sp, #-96]! // 8-byte Folded Spill3818; CHECK-SD-NEXT: stp x28, x27, [sp, #16] // 16-byte Folded Spill3819; CHECK-SD-NEXT: stp x26, x25, [sp, #32] // 16-byte Folded Spill3820; CHECK-SD-NEXT: stp x24, x23, [sp, #48] // 16-byte Folded Spill3821; CHECK-SD-NEXT: stp x22, x21, [sp, #64] // 16-byte Folded Spill3822; CHECK-SD-NEXT: stp x20, x19, [sp, #80] // 16-byte Folded Spill3823; CHECK-SD-NEXT: .cfi_def_cfa_offset 963824; CHECK-SD-NEXT: .cfi_offset w19, -83825; CHECK-SD-NEXT: .cfi_offset w20, -163826; CHECK-SD-NEXT: .cfi_offset w21, -243827; CHECK-SD-NEXT: .cfi_offset w22, -323828; CHECK-SD-NEXT: .cfi_offset w23, -403829; CHECK-SD-NEXT: .cfi_offset w24, -483830; CHECK-SD-NEXT: .cfi_offset w25, -563831; CHECK-SD-NEXT: .cfi_offset w26, -643832; CHECK-SD-NEXT: .cfi_offset w27, -723833; CHECK-SD-NEXT: .cfi_offset w28, -803834; CHECK-SD-NEXT: .cfi_offset w30, -963835; CHECK-SD-NEXT: ldp x23, x24, [sp, #112]3836; CHECK-SD-NEXT: mov x21, x33837; CHECK-SD-NEXT: ldp x25, x26, [sp, #96]3838; CHECK-SD-NEXT: mov x22, x23839; CHECK-SD-NEXT: mov x2, x63840; CHECK-SD-NEXT: mov x3, x73841; CHECK-SD-NEXT: mov x19, x53842; CHECK-SD-NEXT: mov x20, x43843; CHECK-SD-NEXT: bl __modti33844; CHECK-SD-NEXT: mov x27, x03845; CHECK-SD-NEXT: mov x28, x13846; CHECK-SD-NEXT: mov x0, x223847; CHECK-SD-NEXT: mov x1, x213848; CHECK-SD-NEXT: mov x2, x253849; CHECK-SD-NEXT: mov x3, x263850; CHECK-SD-NEXT: bl __modti33851; CHECK-SD-NEXT: mov x21, x03852; CHECK-SD-NEXT: mov x22, x13853; CHECK-SD-NEXT: mov x0, x203854; CHECK-SD-NEXT: mov x1, x193855; CHECK-SD-NEXT: mov x2, x233856; CHECK-SD-NEXT: mov x3, x243857; CHECK-SD-NEXT: bl __modti33858; CHECK-SD-NEXT: mov x4, x03859; CHECK-SD-NEXT: mov x5, x13860; CHECK-SD-NEXT: mov x0, x273861; CHECK-SD-NEXT: mov x1, x283862; CHECK-SD-NEXT: mov x2, x213863; CHECK-SD-NEXT: mov x3, x223864; CHECK-SD-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload3865; CHECK-SD-NEXT: ldp x22, x21, [sp, #64] // 16-byte Folded Reload3866; CHECK-SD-NEXT: ldp x24, x23, [sp, #48] // 16-byte Folded Reload3867; CHECK-SD-NEXT: ldp x26, x25, [sp, #32] // 16-byte Folded Reload3868; CHECK-SD-NEXT: ldp x28, x27, [sp, #16] // 16-byte Folded Reload3869; CHECK-SD-NEXT: ldr x30, [sp], #96 // 8-byte Folded Reload3870; CHECK-SD-NEXT: ret3871;3872; CHECK-GI-LABEL: sv3i128:3873; CHECK-GI: // %bb.0: // %entry3874; CHECK-GI-NEXT: str x30, [sp, #-96]! // 8-byte Folded Spill3875; CHECK-GI-NEXT: stp x28, x27, [sp, #16] // 16-byte Folded Spill3876; CHECK-GI-NEXT: stp x26, x25, [sp, #32] // 16-byte Folded Spill3877; CHECK-GI-NEXT: stp x24, x23, [sp, #48] // 16-byte Folded Spill3878; CHECK-GI-NEXT: stp x22, x21, [sp, #64] // 16-byte Folded Spill3879; CHECK-GI-NEXT: stp x20, x19, [sp, #80] // 16-byte Folded Spill3880; CHECK-GI-NEXT: .cfi_def_cfa_offset 963881; CHECK-GI-NEXT: .cfi_offset w19, -83882; CHECK-GI-NEXT: .cfi_offset w20, -163883; CHECK-GI-NEXT: .cfi_offset w21, -243884; CHECK-GI-NEXT: .cfi_offset w22, -323885; CHECK-GI-NEXT: .cfi_offset w23, -403886; CHECK-GI-NEXT: .cfi_offset w24, -483887; CHECK-GI-NEXT: .cfi_offset w25, -563888; CHECK-GI-NEXT: .cfi_offset w26, -643889; CHECK-GI-NEXT: .cfi_offset w27, -723890; CHECK-GI-NEXT: .cfi_offset w28, -803891; CHECK-GI-NEXT: .cfi_offset w30, -963892; CHECK-GI-NEXT: ldp x23, x24, [sp, #96]3893; CHECK-GI-NEXT: mov x19, x23894; CHECK-GI-NEXT: ldp x25, x26, [sp, #112]3895; CHECK-GI-NEXT: mov x20, x33896; CHECK-GI-NEXT: mov x2, x63897; CHECK-GI-NEXT: mov x3, x73898; CHECK-GI-NEXT: mov x21, x43899; CHECK-GI-NEXT: mov x22, x53900; CHECK-GI-NEXT: bl __modti33901; CHECK-GI-NEXT: mov x27, x03902; CHECK-GI-NEXT: mov x28, x13903; CHECK-GI-NEXT: mov x0, x193904; CHECK-GI-NEXT: mov x1, x203905; CHECK-GI-NEXT: mov x2, x233906; CHECK-GI-NEXT: mov x3, x243907; CHECK-GI-NEXT: bl __modti33908; CHECK-GI-NEXT: mov x19, x03909; CHECK-GI-NEXT: mov x20, x13910; CHECK-GI-NEXT: mov x0, x213911; CHECK-GI-NEXT: mov x1, x223912; CHECK-GI-NEXT: mov x2, x253913; CHECK-GI-NEXT: mov x3, x263914; CHECK-GI-NEXT: bl __modti33915; CHECK-GI-NEXT: mov x4, x03916; CHECK-GI-NEXT: mov x5, x13917; CHECK-GI-NEXT: mov x0, x273918; CHECK-GI-NEXT: mov x1, x283919; CHECK-GI-NEXT: mov x2, x193920; CHECK-GI-NEXT: mov x3, x203921; CHECK-GI-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload3922; CHECK-GI-NEXT: ldp x22, x21, [sp, #64] // 16-byte Folded Reload3923; CHECK-GI-NEXT: ldp x24, x23, [sp, #48] // 16-byte Folded Reload3924; CHECK-GI-NEXT: ldp x26, x25, [sp, #32] // 16-byte Folded Reload3925; CHECK-GI-NEXT: ldp x28, x27, [sp, #16] // 16-byte Folded Reload3926; CHECK-GI-NEXT: ldr x30, [sp], #96 // 8-byte Folded Reload3927; CHECK-GI-NEXT: ret3928entry:3929 %s = srem <3 x i128> %d, %e3930 ret <3 x i128> %s3931}3932 3933define <4 x i128> @sv4i128(<4 x i128> %d, <4 x i128> %e) {3934; CHECK-SD-LABEL: sv4i128:3935; CHECK-SD: // %bb.0: // %entry3936; CHECK-SD-NEXT: sub sp, sp, #1283937; CHECK-SD-NEXT: stp x29, x30, [sp, #32] // 16-byte Folded Spill3938; CHECK-SD-NEXT: stp x28, x27, [sp, #48] // 16-byte Folded Spill3939; CHECK-SD-NEXT: stp x26, x25, [sp, #64] // 16-byte Folded Spill3940; CHECK-SD-NEXT: stp x24, x23, [sp, #80] // 16-byte Folded Spill3941; CHECK-SD-NEXT: stp x22, x21, [sp, #96] // 16-byte Folded Spill3942; CHECK-SD-NEXT: stp x20, x19, [sp, #112] // 16-byte Folded Spill3943; CHECK-SD-NEXT: .cfi_def_cfa_offset 1283944; CHECK-SD-NEXT: .cfi_offset w19, -83945; CHECK-SD-NEXT: .cfi_offset w20, -163946; CHECK-SD-NEXT: .cfi_offset w21, -243947; CHECK-SD-NEXT: .cfi_offset w22, -323948; CHECK-SD-NEXT: .cfi_offset w23, -403949; CHECK-SD-NEXT: .cfi_offset w24, -483950; CHECK-SD-NEXT: .cfi_offset w25, -563951; CHECK-SD-NEXT: .cfi_offset w26, -643952; CHECK-SD-NEXT: .cfi_offset w27, -723953; CHECK-SD-NEXT: .cfi_offset w28, -803954; CHECK-SD-NEXT: .cfi_offset w30, -883955; CHECK-SD-NEXT: .cfi_offset w29, -963956; CHECK-SD-NEXT: mov x23, x33957; CHECK-SD-NEXT: mov x24, x23958; CHECK-SD-NEXT: stp x6, x7, [sp, #16] // 16-byte Folded Spill3959; CHECK-SD-NEXT: ldp x8, x26, [sp, #176]3960; CHECK-SD-NEXT: mov x21, x53961; CHECK-SD-NEXT: ldp x2, x3, [sp, #128]3962; CHECK-SD-NEXT: mov x22, x43963; CHECK-SD-NEXT: ldp x27, x28, [sp, #160]3964; CHECK-SD-NEXT: ldp x29, x19, [sp, #144]3965; CHECK-SD-NEXT: str x8, [sp, #8] // 8-byte Spill3966; CHECK-SD-NEXT: bl __modti33967; CHECK-SD-NEXT: mov x20, x03968; CHECK-SD-NEXT: mov x25, x13969; CHECK-SD-NEXT: mov x0, x243970; CHECK-SD-NEXT: mov x1, x233971; CHECK-SD-NEXT: mov x2, x293972; CHECK-SD-NEXT: mov x3, x193973; CHECK-SD-NEXT: bl __modti33974; CHECK-SD-NEXT: mov x19, x03975; CHECK-SD-NEXT: mov x23, x13976; CHECK-SD-NEXT: mov x0, x223977; CHECK-SD-NEXT: mov x1, x213978; CHECK-SD-NEXT: mov x2, x273979; CHECK-SD-NEXT: mov x3, x283980; CHECK-SD-NEXT: bl __modti33981; CHECK-SD-NEXT: mov x21, x03982; CHECK-SD-NEXT: mov x22, x13983; CHECK-SD-NEXT: ldr x2, [sp, #8] // 8-byte Reload3984; CHECK-SD-NEXT: ldp x0, x1, [sp, #16] // 16-byte Folded Reload3985; CHECK-SD-NEXT: mov x3, x263986; CHECK-SD-NEXT: bl __modti33987; CHECK-SD-NEXT: mov x6, x03988; CHECK-SD-NEXT: mov x7, x13989; CHECK-SD-NEXT: mov x0, x203990; CHECK-SD-NEXT: mov x1, x253991; CHECK-SD-NEXT: mov x2, x193992; CHECK-SD-NEXT: mov x3, x233993; CHECK-SD-NEXT: mov x4, x213994; CHECK-SD-NEXT: mov x5, x223995; CHECK-SD-NEXT: ldp x20, x19, [sp, #112] // 16-byte Folded Reload3996; CHECK-SD-NEXT: ldp x22, x21, [sp, #96] // 16-byte Folded Reload3997; CHECK-SD-NEXT: ldp x24, x23, [sp, #80] // 16-byte Folded Reload3998; CHECK-SD-NEXT: ldp x26, x25, [sp, #64] // 16-byte Folded Reload3999; CHECK-SD-NEXT: ldp x28, x27, [sp, #48] // 16-byte Folded Reload4000; CHECK-SD-NEXT: ldp x29, x30, [sp, #32] // 16-byte Folded Reload4001; CHECK-SD-NEXT: add sp, sp, #1284002; CHECK-SD-NEXT: ret4003;4004; CHECK-GI-LABEL: sv4i128:4005; CHECK-GI: // %bb.0: // %entry4006; CHECK-GI-NEXT: sub sp, sp, #1284007; CHECK-GI-NEXT: stp x29, x30, [sp, #32] // 16-byte Folded Spill4008; CHECK-GI-NEXT: stp x28, x27, [sp, #48] // 16-byte Folded Spill4009; CHECK-GI-NEXT: stp x26, x25, [sp, #64] // 16-byte Folded Spill4010; CHECK-GI-NEXT: stp x24, x23, [sp, #80] // 16-byte Folded Spill4011; CHECK-GI-NEXT: stp x22, x21, [sp, #96] // 16-byte Folded Spill4012; CHECK-GI-NEXT: stp x20, x19, [sp, #112] // 16-byte Folded Spill4013; CHECK-GI-NEXT: .cfi_def_cfa_offset 1284014; CHECK-GI-NEXT: .cfi_offset w19, -84015; CHECK-GI-NEXT: .cfi_offset w20, -164016; CHECK-GI-NEXT: .cfi_offset w21, -244017; CHECK-GI-NEXT: .cfi_offset w22, -324018; CHECK-GI-NEXT: .cfi_offset w23, -404019; CHECK-GI-NEXT: .cfi_offset w24, -484020; CHECK-GI-NEXT: .cfi_offset w25, -564021; CHECK-GI-NEXT: .cfi_offset w26, -644022; CHECK-GI-NEXT: .cfi_offset w27, -724023; CHECK-GI-NEXT: .cfi_offset w28, -804024; CHECK-GI-NEXT: .cfi_offset w30, -884025; CHECK-GI-NEXT: .cfi_offset w29, -964026; CHECK-GI-NEXT: mov x19, x24027; CHECK-GI-NEXT: mov x20, x34028; CHECK-GI-NEXT: mov x21, x44029; CHECK-GI-NEXT: ldp x2, x3, [sp, #128]4030; CHECK-GI-NEXT: mov x22, x54031; CHECK-GI-NEXT: ldp x9, x8, [sp, #176]4032; CHECK-GI-NEXT: mov x23, x74033; CHECK-GI-NEXT: ldp x24, x25, [sp, #144]4034; CHECK-GI-NEXT: ldp x26, x27, [sp, #160]4035; CHECK-GI-NEXT: stp x9, x6, [sp, #16] // 16-byte Folded Spill4036; CHECK-GI-NEXT: str x8, [sp, #8] // 8-byte Spill4037; CHECK-GI-NEXT: bl __modti34038; CHECK-GI-NEXT: mov x28, x04039; CHECK-GI-NEXT: mov x29, x14040; CHECK-GI-NEXT: mov x0, x194041; CHECK-GI-NEXT: mov x1, x204042; CHECK-GI-NEXT: mov x2, x244043; CHECK-GI-NEXT: mov x3, x254044; CHECK-GI-NEXT: bl __modti34045; CHECK-GI-NEXT: mov x19, x04046; CHECK-GI-NEXT: mov x20, x14047; CHECK-GI-NEXT: mov x0, x214048; CHECK-GI-NEXT: mov x1, x224049; CHECK-GI-NEXT: mov x2, x264050; CHECK-GI-NEXT: mov x3, x274051; CHECK-GI-NEXT: bl __modti34052; CHECK-GI-NEXT: mov x21, x04053; CHECK-GI-NEXT: ldp x2, x0, [sp, #16] // 16-byte Folded Reload4054; CHECK-GI-NEXT: ldr x3, [sp, #8] // 8-byte Reload4055; CHECK-GI-NEXT: mov x22, x14056; CHECK-GI-NEXT: mov x1, x234057; CHECK-GI-NEXT: bl __modti34058; CHECK-GI-NEXT: mov x6, x04059; CHECK-GI-NEXT: mov x7, x14060; CHECK-GI-NEXT: mov x0, x284061; CHECK-GI-NEXT: mov x1, x294062; CHECK-GI-NEXT: mov x2, x194063; CHECK-GI-NEXT: mov x3, x204064; CHECK-GI-NEXT: mov x4, x214065; CHECK-GI-NEXT: mov x5, x224066; CHECK-GI-NEXT: ldp x20, x19, [sp, #112] // 16-byte Folded Reload4067; CHECK-GI-NEXT: ldp x22, x21, [sp, #96] // 16-byte Folded Reload4068; CHECK-GI-NEXT: ldp x24, x23, [sp, #80] // 16-byte Folded Reload4069; CHECK-GI-NEXT: ldp x26, x25, [sp, #64] // 16-byte Folded Reload4070; CHECK-GI-NEXT: ldp x28, x27, [sp, #48] // 16-byte Folded Reload4071; CHECK-GI-NEXT: ldp x29, x30, [sp, #32] // 16-byte Folded Reload4072; CHECK-GI-NEXT: add sp, sp, #1284073; CHECK-GI-NEXT: ret4074entry:4075 %s = srem <4 x i128> %d, %e4076 ret <4 x i128> %s4077}4078 4079define <2 x i128> @uv2i128(<2 x i128> %d, <2 x i128> %e) {4080; CHECK-SD-LABEL: uv2i128:4081; CHECK-SD: // %bb.0: // %entry4082; CHECK-SD-NEXT: str x30, [sp, #-64]! // 8-byte Folded Spill4083; CHECK-SD-NEXT: stp x24, x23, [sp, #16] // 16-byte Folded Spill4084; CHECK-SD-NEXT: stp x22, x21, [sp, #32] // 16-byte Folded Spill4085; CHECK-SD-NEXT: stp x20, x19, [sp, #48] // 16-byte Folded Spill4086; CHECK-SD-NEXT: .cfi_def_cfa_offset 644087; CHECK-SD-NEXT: .cfi_offset w19, -84088; CHECK-SD-NEXT: .cfi_offset w20, -164089; CHECK-SD-NEXT: .cfi_offset w21, -244090; CHECK-SD-NEXT: .cfi_offset w22, -324091; CHECK-SD-NEXT: .cfi_offset w23, -404092; CHECK-SD-NEXT: .cfi_offset w24, -484093; CHECK-SD-NEXT: .cfi_offset w30, -644094; CHECK-SD-NEXT: mov x21, x34095; CHECK-SD-NEXT: mov x22, x24096; CHECK-SD-NEXT: mov x2, x44097; CHECK-SD-NEXT: mov x3, x54098; CHECK-SD-NEXT: mov x19, x74099; CHECK-SD-NEXT: mov x20, x64100; CHECK-SD-NEXT: bl __umodti34101; CHECK-SD-NEXT: mov x23, x04102; CHECK-SD-NEXT: mov x24, x14103; CHECK-SD-NEXT: mov x0, x224104; CHECK-SD-NEXT: mov x1, x214105; CHECK-SD-NEXT: mov x2, x204106; CHECK-SD-NEXT: mov x3, x194107; CHECK-SD-NEXT: bl __umodti34108; CHECK-SD-NEXT: mov x2, x04109; CHECK-SD-NEXT: mov x3, x14110; CHECK-SD-NEXT: mov x0, x234111; CHECK-SD-NEXT: mov x1, x244112; CHECK-SD-NEXT: ldp x20, x19, [sp, #48] // 16-byte Folded Reload4113; CHECK-SD-NEXT: ldp x22, x21, [sp, #32] // 16-byte Folded Reload4114; CHECK-SD-NEXT: ldp x24, x23, [sp, #16] // 16-byte Folded Reload4115; CHECK-SD-NEXT: ldr x30, [sp], #64 // 8-byte Folded Reload4116; CHECK-SD-NEXT: ret4117;4118; CHECK-GI-LABEL: uv2i128:4119; CHECK-GI: // %bb.0: // %entry4120; CHECK-GI-NEXT: str x30, [sp, #-64]! // 8-byte Folded Spill4121; CHECK-GI-NEXT: stp x24, x23, [sp, #16] // 16-byte Folded Spill4122; CHECK-GI-NEXT: stp x22, x21, [sp, #32] // 16-byte Folded Spill4123; CHECK-GI-NEXT: stp x20, x19, [sp, #48] // 16-byte Folded Spill4124; CHECK-GI-NEXT: .cfi_def_cfa_offset 644125; CHECK-GI-NEXT: .cfi_offset w19, -84126; CHECK-GI-NEXT: .cfi_offset w20, -164127; CHECK-GI-NEXT: .cfi_offset w21, -244128; CHECK-GI-NEXT: .cfi_offset w22, -324129; CHECK-GI-NEXT: .cfi_offset w23, -404130; CHECK-GI-NEXT: .cfi_offset w24, -484131; CHECK-GI-NEXT: .cfi_offset w30, -644132; CHECK-GI-NEXT: mov x19, x24133; CHECK-GI-NEXT: mov x20, x34134; CHECK-GI-NEXT: mov x2, x44135; CHECK-GI-NEXT: mov x3, x54136; CHECK-GI-NEXT: mov x21, x64137; CHECK-GI-NEXT: mov x22, x74138; CHECK-GI-NEXT: bl __umodti34139; CHECK-GI-NEXT: mov x23, x04140; CHECK-GI-NEXT: mov x24, x14141; CHECK-GI-NEXT: mov x0, x194142; CHECK-GI-NEXT: mov x1, x204143; CHECK-GI-NEXT: mov x2, x214144; CHECK-GI-NEXT: mov x3, x224145; CHECK-GI-NEXT: bl __umodti34146; CHECK-GI-NEXT: mov x2, x04147; CHECK-GI-NEXT: mov x3, x14148; CHECK-GI-NEXT: mov x0, x234149; CHECK-GI-NEXT: mov x1, x244150; CHECK-GI-NEXT: ldp x20, x19, [sp, #48] // 16-byte Folded Reload4151; CHECK-GI-NEXT: ldp x22, x21, [sp, #32] // 16-byte Folded Reload4152; CHECK-GI-NEXT: ldp x24, x23, [sp, #16] // 16-byte Folded Reload4153; CHECK-GI-NEXT: ldr x30, [sp], #64 // 8-byte Folded Reload4154; CHECK-GI-NEXT: ret4155entry:4156 %s = urem <2 x i128> %d, %e4157 ret <2 x i128> %s4158}4159 4160define <3 x i128> @uv3i128(<3 x i128> %d, <3 x i128> %e) {4161; CHECK-SD-LABEL: uv3i128:4162; CHECK-SD: // %bb.0: // %entry4163; CHECK-SD-NEXT: str x30, [sp, #-96]! // 8-byte Folded Spill4164; CHECK-SD-NEXT: stp x28, x27, [sp, #16] // 16-byte Folded Spill4165; CHECK-SD-NEXT: stp x26, x25, [sp, #32] // 16-byte Folded Spill4166; CHECK-SD-NEXT: stp x24, x23, [sp, #48] // 16-byte Folded Spill4167; CHECK-SD-NEXT: stp x22, x21, [sp, #64] // 16-byte Folded Spill4168; CHECK-SD-NEXT: stp x20, x19, [sp, #80] // 16-byte Folded Spill4169; CHECK-SD-NEXT: .cfi_def_cfa_offset 964170; CHECK-SD-NEXT: .cfi_offset w19, -84171; CHECK-SD-NEXT: .cfi_offset w20, -164172; CHECK-SD-NEXT: .cfi_offset w21, -244173; CHECK-SD-NEXT: .cfi_offset w22, -324174; CHECK-SD-NEXT: .cfi_offset w23, -404175; CHECK-SD-NEXT: .cfi_offset w24, -484176; CHECK-SD-NEXT: .cfi_offset w25, -564177; CHECK-SD-NEXT: .cfi_offset w26, -644178; CHECK-SD-NEXT: .cfi_offset w27, -724179; CHECK-SD-NEXT: .cfi_offset w28, -804180; CHECK-SD-NEXT: .cfi_offset w30, -964181; CHECK-SD-NEXT: ldp x23, x24, [sp, #112]4182; CHECK-SD-NEXT: mov x21, x34183; CHECK-SD-NEXT: ldp x25, x26, [sp, #96]4184; CHECK-SD-NEXT: mov x22, x24185; CHECK-SD-NEXT: mov x2, x64186; CHECK-SD-NEXT: mov x3, x74187; CHECK-SD-NEXT: mov x19, x54188; CHECK-SD-NEXT: mov x20, x44189; CHECK-SD-NEXT: bl __umodti34190; CHECK-SD-NEXT: mov x27, x04191; CHECK-SD-NEXT: mov x28, x14192; CHECK-SD-NEXT: mov x0, x224193; CHECK-SD-NEXT: mov x1, x214194; CHECK-SD-NEXT: mov x2, x254195; CHECK-SD-NEXT: mov x3, x264196; CHECK-SD-NEXT: bl __umodti34197; CHECK-SD-NEXT: mov x21, x04198; CHECK-SD-NEXT: mov x22, x14199; CHECK-SD-NEXT: mov x0, x204200; CHECK-SD-NEXT: mov x1, x194201; CHECK-SD-NEXT: mov x2, x234202; CHECK-SD-NEXT: mov x3, x244203; CHECK-SD-NEXT: bl __umodti34204; CHECK-SD-NEXT: mov x4, x04205; CHECK-SD-NEXT: mov x5, x14206; CHECK-SD-NEXT: mov x0, x274207; CHECK-SD-NEXT: mov x1, x284208; CHECK-SD-NEXT: mov x2, x214209; CHECK-SD-NEXT: mov x3, x224210; CHECK-SD-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload4211; CHECK-SD-NEXT: ldp x22, x21, [sp, #64] // 16-byte Folded Reload4212; CHECK-SD-NEXT: ldp x24, x23, [sp, #48] // 16-byte Folded Reload4213; CHECK-SD-NEXT: ldp x26, x25, [sp, #32] // 16-byte Folded Reload4214; CHECK-SD-NEXT: ldp x28, x27, [sp, #16] // 16-byte Folded Reload4215; CHECK-SD-NEXT: ldr x30, [sp], #96 // 8-byte Folded Reload4216; CHECK-SD-NEXT: ret4217;4218; CHECK-GI-LABEL: uv3i128:4219; CHECK-GI: // %bb.0: // %entry4220; CHECK-GI-NEXT: str x30, [sp, #-96]! // 8-byte Folded Spill4221; CHECK-GI-NEXT: stp x28, x27, [sp, #16] // 16-byte Folded Spill4222; CHECK-GI-NEXT: stp x26, x25, [sp, #32] // 16-byte Folded Spill4223; CHECK-GI-NEXT: stp x24, x23, [sp, #48] // 16-byte Folded Spill4224; CHECK-GI-NEXT: stp x22, x21, [sp, #64] // 16-byte Folded Spill4225; CHECK-GI-NEXT: stp x20, x19, [sp, #80] // 16-byte Folded Spill4226; CHECK-GI-NEXT: .cfi_def_cfa_offset 964227; CHECK-GI-NEXT: .cfi_offset w19, -84228; CHECK-GI-NEXT: .cfi_offset w20, -164229; CHECK-GI-NEXT: .cfi_offset w21, -244230; CHECK-GI-NEXT: .cfi_offset w22, -324231; CHECK-GI-NEXT: .cfi_offset w23, -404232; CHECK-GI-NEXT: .cfi_offset w24, -484233; CHECK-GI-NEXT: .cfi_offset w25, -564234; CHECK-GI-NEXT: .cfi_offset w26, -644235; CHECK-GI-NEXT: .cfi_offset w27, -724236; CHECK-GI-NEXT: .cfi_offset w28, -804237; CHECK-GI-NEXT: .cfi_offset w30, -964238; CHECK-GI-NEXT: ldp x23, x24, [sp, #96]4239; CHECK-GI-NEXT: mov x19, x24240; CHECK-GI-NEXT: ldp x25, x26, [sp, #112]4241; CHECK-GI-NEXT: mov x20, x34242; CHECK-GI-NEXT: mov x2, x64243; CHECK-GI-NEXT: mov x3, x74244; CHECK-GI-NEXT: mov x21, x44245; CHECK-GI-NEXT: mov x22, x54246; CHECK-GI-NEXT: bl __umodti34247; CHECK-GI-NEXT: mov x27, x04248; CHECK-GI-NEXT: mov x28, x14249; CHECK-GI-NEXT: mov x0, x194250; CHECK-GI-NEXT: mov x1, x204251; CHECK-GI-NEXT: mov x2, x234252; CHECK-GI-NEXT: mov x3, x244253; CHECK-GI-NEXT: bl __umodti34254; CHECK-GI-NEXT: mov x19, x04255; CHECK-GI-NEXT: mov x20, x14256; CHECK-GI-NEXT: mov x0, x214257; CHECK-GI-NEXT: mov x1, x224258; CHECK-GI-NEXT: mov x2, x254259; CHECK-GI-NEXT: mov x3, x264260; CHECK-GI-NEXT: bl __umodti34261; CHECK-GI-NEXT: mov x4, x04262; CHECK-GI-NEXT: mov x5, x14263; CHECK-GI-NEXT: mov x0, x274264; CHECK-GI-NEXT: mov x1, x284265; CHECK-GI-NEXT: mov x2, x194266; CHECK-GI-NEXT: mov x3, x204267; CHECK-GI-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload4268; CHECK-GI-NEXT: ldp x22, x21, [sp, #64] // 16-byte Folded Reload4269; CHECK-GI-NEXT: ldp x24, x23, [sp, #48] // 16-byte Folded Reload4270; CHECK-GI-NEXT: ldp x26, x25, [sp, #32] // 16-byte Folded Reload4271; CHECK-GI-NEXT: ldp x28, x27, [sp, #16] // 16-byte Folded Reload4272; CHECK-GI-NEXT: ldr x30, [sp], #96 // 8-byte Folded Reload4273; CHECK-GI-NEXT: ret4274entry:4275 %s = urem <3 x i128> %d, %e4276 ret <3 x i128> %s4277}4278 4279define <4 x i128> @uv4i128(<4 x i128> %d, <4 x i128> %e) {4280; CHECK-SD-LABEL: uv4i128:4281; CHECK-SD: // %bb.0: // %entry4282; CHECK-SD-NEXT: sub sp, sp, #1284283; CHECK-SD-NEXT: stp x29, x30, [sp, #32] // 16-byte Folded Spill4284; CHECK-SD-NEXT: stp x28, x27, [sp, #48] // 16-byte Folded Spill4285; CHECK-SD-NEXT: stp x26, x25, [sp, #64] // 16-byte Folded Spill4286; CHECK-SD-NEXT: stp x24, x23, [sp, #80] // 16-byte Folded Spill4287; CHECK-SD-NEXT: stp x22, x21, [sp, #96] // 16-byte Folded Spill4288; CHECK-SD-NEXT: stp x20, x19, [sp, #112] // 16-byte Folded Spill4289; CHECK-SD-NEXT: .cfi_def_cfa_offset 1284290; CHECK-SD-NEXT: .cfi_offset w19, -84291; CHECK-SD-NEXT: .cfi_offset w20, -164292; CHECK-SD-NEXT: .cfi_offset w21, -244293; CHECK-SD-NEXT: .cfi_offset w22, -324294; CHECK-SD-NEXT: .cfi_offset w23, -404295; CHECK-SD-NEXT: .cfi_offset w24, -484296; CHECK-SD-NEXT: .cfi_offset w25, -564297; CHECK-SD-NEXT: .cfi_offset w26, -644298; CHECK-SD-NEXT: .cfi_offset w27, -724299; CHECK-SD-NEXT: .cfi_offset w28, -804300; CHECK-SD-NEXT: .cfi_offset w30, -884301; CHECK-SD-NEXT: .cfi_offset w29, -964302; CHECK-SD-NEXT: mov x23, x34303; CHECK-SD-NEXT: mov x24, x24304; CHECK-SD-NEXT: stp x6, x7, [sp, #16] // 16-byte Folded Spill4305; CHECK-SD-NEXT: ldp x8, x26, [sp, #176]4306; CHECK-SD-NEXT: mov x21, x54307; CHECK-SD-NEXT: ldp x2, x3, [sp, #128]4308; CHECK-SD-NEXT: mov x22, x44309; CHECK-SD-NEXT: ldp x27, x28, [sp, #160]4310; CHECK-SD-NEXT: ldp x29, x19, [sp, #144]4311; CHECK-SD-NEXT: str x8, [sp, #8] // 8-byte Spill4312; CHECK-SD-NEXT: bl __umodti34313; CHECK-SD-NEXT: mov x20, x04314; CHECK-SD-NEXT: mov x25, x14315; CHECK-SD-NEXT: mov x0, x244316; CHECK-SD-NEXT: mov x1, x234317; CHECK-SD-NEXT: mov x2, x294318; CHECK-SD-NEXT: mov x3, x194319; CHECK-SD-NEXT: bl __umodti34320; CHECK-SD-NEXT: mov x19, x04321; CHECK-SD-NEXT: mov x23, x14322; CHECK-SD-NEXT: mov x0, x224323; CHECK-SD-NEXT: mov x1, x214324; CHECK-SD-NEXT: mov x2, x274325; CHECK-SD-NEXT: mov x3, x284326; CHECK-SD-NEXT: bl __umodti34327; CHECK-SD-NEXT: mov x21, x04328; CHECK-SD-NEXT: mov x22, x14329; CHECK-SD-NEXT: ldr x2, [sp, #8] // 8-byte Reload4330; CHECK-SD-NEXT: ldp x0, x1, [sp, #16] // 16-byte Folded Reload4331; CHECK-SD-NEXT: mov x3, x264332; CHECK-SD-NEXT: bl __umodti34333; CHECK-SD-NEXT: mov x6, x04334; CHECK-SD-NEXT: mov x7, x14335; CHECK-SD-NEXT: mov x0, x204336; CHECK-SD-NEXT: mov x1, x254337; CHECK-SD-NEXT: mov x2, x194338; CHECK-SD-NEXT: mov x3, x234339; CHECK-SD-NEXT: mov x4, x214340; CHECK-SD-NEXT: mov x5, x224341; CHECK-SD-NEXT: ldp x20, x19, [sp, #112] // 16-byte Folded Reload4342; CHECK-SD-NEXT: ldp x22, x21, [sp, #96] // 16-byte Folded Reload4343; CHECK-SD-NEXT: ldp x24, x23, [sp, #80] // 16-byte Folded Reload4344; CHECK-SD-NEXT: ldp x26, x25, [sp, #64] // 16-byte Folded Reload4345; CHECK-SD-NEXT: ldp x28, x27, [sp, #48] // 16-byte Folded Reload4346; CHECK-SD-NEXT: ldp x29, x30, [sp, #32] // 16-byte Folded Reload4347; CHECK-SD-NEXT: add sp, sp, #1284348; CHECK-SD-NEXT: ret4349;4350; CHECK-GI-LABEL: uv4i128:4351; CHECK-GI: // %bb.0: // %entry4352; CHECK-GI-NEXT: sub sp, sp, #1284353; CHECK-GI-NEXT: stp x29, x30, [sp, #32] // 16-byte Folded Spill4354; CHECK-GI-NEXT: stp x28, x27, [sp, #48] // 16-byte Folded Spill4355; CHECK-GI-NEXT: stp x26, x25, [sp, #64] // 16-byte Folded Spill4356; CHECK-GI-NEXT: stp x24, x23, [sp, #80] // 16-byte Folded Spill4357; CHECK-GI-NEXT: stp x22, x21, [sp, #96] // 16-byte Folded Spill4358; CHECK-GI-NEXT: stp x20, x19, [sp, #112] // 16-byte Folded Spill4359; CHECK-GI-NEXT: .cfi_def_cfa_offset 1284360; CHECK-GI-NEXT: .cfi_offset w19, -84361; CHECK-GI-NEXT: .cfi_offset w20, -164362; CHECK-GI-NEXT: .cfi_offset w21, -244363; CHECK-GI-NEXT: .cfi_offset w22, -324364; CHECK-GI-NEXT: .cfi_offset w23, -404365; CHECK-GI-NEXT: .cfi_offset w24, -484366; CHECK-GI-NEXT: .cfi_offset w25, -564367; CHECK-GI-NEXT: .cfi_offset w26, -644368; CHECK-GI-NEXT: .cfi_offset w27, -724369; CHECK-GI-NEXT: .cfi_offset w28, -804370; CHECK-GI-NEXT: .cfi_offset w30, -884371; CHECK-GI-NEXT: .cfi_offset w29, -964372; CHECK-GI-NEXT: mov x19, x24373; CHECK-GI-NEXT: mov x20, x34374; CHECK-GI-NEXT: mov x21, x44375; CHECK-GI-NEXT: ldp x2, x3, [sp, #128]4376; CHECK-GI-NEXT: mov x22, x54377; CHECK-GI-NEXT: ldp x9, x8, [sp, #176]4378; CHECK-GI-NEXT: mov x23, x74379; CHECK-GI-NEXT: ldp x24, x25, [sp, #144]4380; CHECK-GI-NEXT: ldp x26, x27, [sp, #160]4381; CHECK-GI-NEXT: stp x9, x6, [sp, #16] // 16-byte Folded Spill4382; CHECK-GI-NEXT: str x8, [sp, #8] // 8-byte Spill4383; CHECK-GI-NEXT: bl __umodti34384; CHECK-GI-NEXT: mov x28, x04385; CHECK-GI-NEXT: mov x29, x14386; CHECK-GI-NEXT: mov x0, x194387; CHECK-GI-NEXT: mov x1, x204388; CHECK-GI-NEXT: mov x2, x244389; CHECK-GI-NEXT: mov x3, x254390; CHECK-GI-NEXT: bl __umodti34391; CHECK-GI-NEXT: mov x19, x04392; CHECK-GI-NEXT: mov x20, x14393; CHECK-GI-NEXT: mov x0, x214394; CHECK-GI-NEXT: mov x1, x224395; CHECK-GI-NEXT: mov x2, x264396; CHECK-GI-NEXT: mov x3, x274397; CHECK-GI-NEXT: bl __umodti34398; CHECK-GI-NEXT: mov x21, x04399; CHECK-GI-NEXT: ldp x2, x0, [sp, #16] // 16-byte Folded Reload4400; CHECK-GI-NEXT: ldr x3, [sp, #8] // 8-byte Reload4401; CHECK-GI-NEXT: mov x22, x14402; CHECK-GI-NEXT: mov x1, x234403; CHECK-GI-NEXT: bl __umodti34404; CHECK-GI-NEXT: mov x6, x04405; CHECK-GI-NEXT: mov x7, x14406; CHECK-GI-NEXT: mov x0, x284407; CHECK-GI-NEXT: mov x1, x294408; CHECK-GI-NEXT: mov x2, x194409; CHECK-GI-NEXT: mov x3, x204410; CHECK-GI-NEXT: mov x4, x214411; CHECK-GI-NEXT: mov x5, x224412; CHECK-GI-NEXT: ldp x20, x19, [sp, #112] // 16-byte Folded Reload4413; CHECK-GI-NEXT: ldp x22, x21, [sp, #96] // 16-byte Folded Reload4414; CHECK-GI-NEXT: ldp x24, x23, [sp, #80] // 16-byte Folded Reload4415; CHECK-GI-NEXT: ldp x26, x25, [sp, #64] // 16-byte Folded Reload4416; CHECK-GI-NEXT: ldp x28, x27, [sp, #48] // 16-byte Folded Reload4417; CHECK-GI-NEXT: ldp x29, x30, [sp, #32] // 16-byte Folded Reload4418; CHECK-GI-NEXT: add sp, sp, #1284419; CHECK-GI-NEXT: ret4420entry:4421 %s = urem <4 x i128> %d, %e4422 ret <4 x i128> %s4423}4424