brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.2 KiB · 6666ea0 Raw
791 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=xtensa -verify-machineinstrs < %s \3; RUN:   | FileCheck -check-prefix=XTENSA %s4; RUN: llc -mtriple=xtensa -mattr=+div32 -verify-machineinstrs < %s \5; RUN:   | FileCheck -check-prefix=XTENSA-DIV %s6 7define i32 @udiv(i32 %a, i32 %b) nounwind {8; XTENSA-LABEL: udiv:9; XTENSA:       # %bb.0:10; XTENSA-NEXT:    addi a8, a1, -1611; XTENSA-NEXT:    or a1, a8, a812; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill13; XTENSA-NEXT:    l32r a8, .LCPI0_014; XTENSA-NEXT:    callx0 a815; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload16; XTENSA-NEXT:    addi a8, a1, 1617; XTENSA-NEXT:    or a1, a8, a818; XTENSA-NEXT:    ret19;20; XTENSA-DIV-LABEL: udiv:21; XTENSA-DIV:       # %bb.0:22; XTENSA-DIV-NEXT:    quou a2, a2, a323; XTENSA-DIV-NEXT:    ret24  %1 = udiv i32 %a, %b25  ret i32 %126}27 28define i32 @udiv_constant(i32 %a) nounwind {29; XTENSA-LABEL: udiv_constant:30; XTENSA:       # %bb.0:31; XTENSA-NEXT:    addi a8, a1, -1632; XTENSA-NEXT:    or a1, a8, a833; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill34; XTENSA-NEXT:    movi a3, 535; XTENSA-NEXT:    l32r a8, .LCPI1_036; XTENSA-NEXT:    callx0 a837; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload38; XTENSA-NEXT:    addi a8, a1, 1639; XTENSA-NEXT:    or a1, a8, a840; XTENSA-NEXT:    ret41;42; XTENSA-DIV-LABEL: udiv_constant:43; XTENSA-DIV:       # %bb.0:44; XTENSA-DIV-NEXT:    movi a8, 545; XTENSA-DIV-NEXT:    quou a2, a2, a846; XTENSA-DIV-NEXT:    ret47  %1 = udiv i32 %a, 548  ret i32 %149}50 51define i32 @udiv_pow2(i32 %a) nounwind {52; XTENSA-LABEL: udiv_pow2:53; XTENSA:       # %bb.0:54; XTENSA-NEXT:    srli a2, a2, 355; XTENSA-NEXT:    ret56;57; XTENSA-DIV-LABEL: udiv_pow2:58; XTENSA-DIV:       # %bb.0:59; XTENSA-DIV-NEXT:    srli a2, a2, 360; XTENSA-DIV-NEXT:    ret61  %1 = udiv i32 %a, 862  ret i32 %163}64 65define i32 @udiv_constant_lhs(i32 %a) nounwind {66; XTENSA-LABEL: udiv_constant_lhs:67; XTENSA:       # %bb.0:68; XTENSA-NEXT:    addi a8, a1, -1669; XTENSA-NEXT:    or a1, a8, a870; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill71; XTENSA-NEXT:    or a3, a2, a272; XTENSA-NEXT:    movi a2, 1073; XTENSA-NEXT:    l32r a8, .LCPI3_074; XTENSA-NEXT:    callx0 a875; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload76; XTENSA-NEXT:    addi a8, a1, 1677; XTENSA-NEXT:    or a1, a8, a878; XTENSA-NEXT:    ret79;80; XTENSA-DIV-LABEL: udiv_constant_lhs:81; XTENSA-DIV:       # %bb.0:82; XTENSA-DIV-NEXT:    movi a8, 1083; XTENSA-DIV-NEXT:    quou a2, a8, a284; XTENSA-DIV-NEXT:    ret85  %1 = udiv i32 10, %a86  ret i32 %187}88 89define i64 @udiv64(i64 %a, i64 %b) nounwind {90; XTENSA-LABEL: udiv64:91; XTENSA:       # %bb.0:92; XTENSA-NEXT:    addi a8, a1, -1693; XTENSA-NEXT:    or a1, a8, a894; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill95; XTENSA-NEXT:    l32r a8, .LCPI4_096; XTENSA-NEXT:    callx0 a897; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload98; XTENSA-NEXT:    addi a8, a1, 1699; XTENSA-NEXT:    or a1, a8, a8100; XTENSA-NEXT:    ret101;102; XTENSA-DIV-LABEL: udiv64:103; XTENSA-DIV:       # %bb.0:104; XTENSA-DIV-NEXT:    addi a8, a1, -16105; XTENSA-DIV-NEXT:    or a1, a8, a8106; XTENSA-DIV-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill107; XTENSA-DIV-NEXT:    l32r a8, .LCPI4_0108; XTENSA-DIV-NEXT:    callx0 a8109; XTENSA-DIV-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload110; XTENSA-DIV-NEXT:    addi a8, a1, 16111; XTENSA-DIV-NEXT:    or a1, a8, a8112; XTENSA-DIV-NEXT:    ret113  %1 = udiv i64 %a, %b114  ret i64 %1115}116 117define i64 @udiv64_constant(i64 %a) nounwind {118; XTENSA-LABEL: udiv64_constant:119; XTENSA:       # %bb.0:120; XTENSA-NEXT:    addi a8, a1, -16121; XTENSA-NEXT:    or a1, a8, a8122; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill123; XTENSA-NEXT:    movi a4, 5124; XTENSA-NEXT:    movi a5, 0125; XTENSA-NEXT:    l32r a8, .LCPI5_0126; XTENSA-NEXT:    callx0 a8127; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload128; XTENSA-NEXT:    addi a8, a1, 16129; XTENSA-NEXT:    or a1, a8, a8130; XTENSA-NEXT:    ret131;132; XTENSA-DIV-LABEL: udiv64_constant:133; XTENSA-DIV:       # %bb.0:134; XTENSA-DIV-NEXT:    addi a8, a1, -16135; XTENSA-DIV-NEXT:    or a1, a8, a8136; XTENSA-DIV-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill137; XTENSA-DIV-NEXT:    movi a4, 5138; XTENSA-DIV-NEXT:    movi a5, 0139; XTENSA-DIV-NEXT:    l32r a8, .LCPI5_0140; XTENSA-DIV-NEXT:    callx0 a8141; XTENSA-DIV-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload142; XTENSA-DIV-NEXT:    addi a8, a1, 16143; XTENSA-DIV-NEXT:    or a1, a8, a8144; XTENSA-DIV-NEXT:    ret145  %1 = udiv i64 %a, 5146  ret i64 %1147}148 149define i64 @udiv64_constant_lhs(i64 %a) nounwind {150; XTENSA-LABEL: udiv64_constant_lhs:151; XTENSA:       # %bb.0:152; XTENSA-NEXT:    addi a8, a1, -16153; XTENSA-NEXT:    or a1, a8, a8154; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill155; XTENSA-NEXT:    or a5, a3, a3156; XTENSA-NEXT:    or a4, a2, a2157; XTENSA-NEXT:    movi a2, 10158; XTENSA-NEXT:    movi a3, 0159; XTENSA-NEXT:    l32r a8, .LCPI6_0160; XTENSA-NEXT:    callx0 a8161; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload162; XTENSA-NEXT:    addi a8, a1, 16163; XTENSA-NEXT:    or a1, a8, a8164; XTENSA-NEXT:    ret165;166; XTENSA-DIV-LABEL: udiv64_constant_lhs:167; XTENSA-DIV:       # %bb.0:168; XTENSA-DIV-NEXT:    addi a8, a1, -16169; XTENSA-DIV-NEXT:    or a1, a8, a8170; XTENSA-DIV-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill171; XTENSA-DIV-NEXT:    or a5, a3, a3172; XTENSA-DIV-NEXT:    or a4, a2, a2173; XTENSA-DIV-NEXT:    movi a2, 10174; XTENSA-DIV-NEXT:    movi a3, 0175; XTENSA-DIV-NEXT:    l32r a8, .LCPI6_0176; XTENSA-DIV-NEXT:    callx0 a8177; XTENSA-DIV-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload178; XTENSA-DIV-NEXT:    addi a8, a1, 16179; XTENSA-DIV-NEXT:    or a1, a8, a8180; XTENSA-DIV-NEXT:    ret181  %1 = udiv i64 10, %a182  ret i64 %1183}184 185define i8 @udiv8(i8 %a, i8 %b) nounwind {186; XTENSA-LABEL: udiv8:187; XTENSA:       # %bb.0:188; XTENSA-NEXT:    addi a8, a1, -16189; XTENSA-NEXT:    or a1, a8, a8190; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill191; XTENSA-NEXT:    movi a8, 255192; XTENSA-NEXT:    and a2, a2, a8193; XTENSA-NEXT:    and a3, a3, a8194; XTENSA-NEXT:    l32r a8, .LCPI7_0195; XTENSA-NEXT:    callx0 a8196; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload197; XTENSA-NEXT:    addi a8, a1, 16198; XTENSA-NEXT:    or a1, a8, a8199; XTENSA-NEXT:    ret200;201; XTENSA-DIV-LABEL: udiv8:202; XTENSA-DIV:       # %bb.0:203; XTENSA-DIV-NEXT:    movi a8, 255204; XTENSA-DIV-NEXT:    and a9, a3, a8205; XTENSA-DIV-NEXT:    and a8, a2, a8206; XTENSA-DIV-NEXT:    quou a2, a8, a9207; XTENSA-DIV-NEXT:    ret208  %1 = udiv i8 %a, %b209  ret i8 %1210}211 212define i8 @udiv8_constant(i8 %a) nounwind {213; XTENSA-LABEL: udiv8_constant:214; XTENSA:       # %bb.0:215; XTENSA-NEXT:    addi a8, a1, -16216; XTENSA-NEXT:    or a1, a8, a8217; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill218; XTENSA-NEXT:    movi a8, 255219; XTENSA-NEXT:    and a2, a2, a8220; XTENSA-NEXT:    movi a3, 5221; XTENSA-NEXT:    l32r a8, .LCPI8_0222; XTENSA-NEXT:    callx0 a8223; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload224; XTENSA-NEXT:    addi a8, a1, 16225; XTENSA-NEXT:    or a1, a8, a8226; XTENSA-NEXT:    ret227;228; XTENSA-DIV-LABEL: udiv8_constant:229; XTENSA-DIV:       # %bb.0:230; XTENSA-DIV-NEXT:    movi a8, 255231; XTENSA-DIV-NEXT:    and a8, a2, a8232; XTENSA-DIV-NEXT:    movi a9, 5233; XTENSA-DIV-NEXT:    quou a2, a8, a9234; XTENSA-DIV-NEXT:    ret235  %1 = udiv i8 %a, 5236  ret i8 %1237}238 239define i8 @udiv8_pow2(i8 %a) nounwind {240; XTENSA-LABEL: udiv8_pow2:241; XTENSA:       # %bb.0:242; XTENSA-NEXT:    movi a8, 248243; XTENSA-NEXT:    and a8, a2, a8244; XTENSA-NEXT:    srli a2, a8, 3245; XTENSA-NEXT:    ret246;247; XTENSA-DIV-LABEL: udiv8_pow2:248; XTENSA-DIV:       # %bb.0:249; XTENSA-DIV-NEXT:    movi a8, 248250; XTENSA-DIV-NEXT:    and a8, a2, a8251; XTENSA-DIV-NEXT:    srli a2, a8, 3252; XTENSA-DIV-NEXT:    ret253  %1 = udiv i8 %a, 8254  ret i8 %1255}256 257define i8 @udiv8_constant_lhs(i8 %a) nounwind {258; XTENSA-LABEL: udiv8_constant_lhs:259; XTENSA:       # %bb.0:260; XTENSA-NEXT:    addi a8, a1, -16261; XTENSA-NEXT:    or a1, a8, a8262; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill263; XTENSA-NEXT:    movi a8, 255264; XTENSA-NEXT:    and a3, a2, a8265; XTENSA-NEXT:    movi a2, 10266; XTENSA-NEXT:    l32r a8, .LCPI10_0267; XTENSA-NEXT:    callx0 a8268; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload269; XTENSA-NEXT:    addi a8, a1, 16270; XTENSA-NEXT:    or a1, a8, a8271; XTENSA-NEXT:    ret272;273; XTENSA-DIV-LABEL: udiv8_constant_lhs:274; XTENSA-DIV:       # %bb.0:275; XTENSA-DIV-NEXT:    movi a8, 255276; XTENSA-DIV-NEXT:    and a8, a2, a8277; XTENSA-DIV-NEXT:    movi a9, 10278; XTENSA-DIV-NEXT:    quou a2, a9, a8279; XTENSA-DIV-NEXT:    ret280  %1 = udiv i8 10, %a281  ret i8 %1282}283 284define i16 @udiv16(i16 %a, i16 %b) nounwind {285; XTENSA-LABEL: udiv16:286; XTENSA:       # %bb.0:287; XTENSA-NEXT:    addi a8, a1, -16288; XTENSA-NEXT:    or a1, a8, a8289; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill290; XTENSA-NEXT:    l32r a8, .LCPI11_0291; XTENSA-NEXT:    and a2, a2, a8292; XTENSA-NEXT:    and a3, a3, a8293; XTENSA-NEXT:    l32r a8, .LCPI11_1294; XTENSA-NEXT:    callx0 a8295; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload296; XTENSA-NEXT:    addi a8, a1, 16297; XTENSA-NEXT:    or a1, a8, a8298; XTENSA-NEXT:    ret299;300; XTENSA-DIV-LABEL: udiv16:301; XTENSA-DIV:       # %bb.0:302; XTENSA-DIV-NEXT:    l32r a8, .LCPI11_0303; XTENSA-DIV-NEXT:    and a9, a3, a8304; XTENSA-DIV-NEXT:    and a8, a2, a8305; XTENSA-DIV-NEXT:    quou a2, a8, a9306; XTENSA-DIV-NEXT:    ret307  %1 = udiv i16 %a, %b308  ret i16 %1309}310 311define i16 @udiv16_constant(i16 %a) nounwind {312; XTENSA-LABEL: udiv16_constant:313; XTENSA:       # %bb.0:314; XTENSA-NEXT:    addi a8, a1, -16315; XTENSA-NEXT:    or a1, a8, a8316; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill317; XTENSA-NEXT:    l32r a8, .LCPI12_0318; XTENSA-NEXT:    and a2, a2, a8319; XTENSA-NEXT:    movi a3, 5320; XTENSA-NEXT:    l32r a8, .LCPI12_1321; XTENSA-NEXT:    callx0 a8322; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload323; XTENSA-NEXT:    addi a8, a1, 16324; XTENSA-NEXT:    or a1, a8, a8325; XTENSA-NEXT:    ret326;327; XTENSA-DIV-LABEL: udiv16_constant:328; XTENSA-DIV:       # %bb.0:329; XTENSA-DIV-NEXT:    l32r a8, .LCPI12_0330; XTENSA-DIV-NEXT:    and a8, a2, a8331; XTENSA-DIV-NEXT:    movi a9, 5332; XTENSA-DIV-NEXT:    quou a2, a8, a9333; XTENSA-DIV-NEXT:    ret334  %1 = udiv i16 %a, 5335  ret i16 %1336}337 338define i16 @udiv16_pow2(i16 %a) nounwind {339; XTENSA-LABEL: udiv16_pow2:340; XTENSA:       # %bb.0:341; XTENSA-NEXT:    l32r a8, .LCPI13_0342; XTENSA-NEXT:    and a8, a2, a8343; XTENSA-NEXT:    srli a2, a8, 3344; XTENSA-NEXT:    ret345;346; XTENSA-DIV-LABEL: udiv16_pow2:347; XTENSA-DIV:       # %bb.0:348; XTENSA-DIV-NEXT:    l32r a8, .LCPI13_0349; XTENSA-DIV-NEXT:    and a8, a2, a8350; XTENSA-DIV-NEXT:    srli a2, a8, 3351; XTENSA-DIV-NEXT:    ret352  %1 = udiv i16 %a, 8353  ret i16 %1354}355 356define i32 @sdiv(i32 %a, i32 %b) nounwind {357; XTENSA-LABEL: sdiv:358; XTENSA:       # %bb.0:359; XTENSA-NEXT:    addi a8, a1, -16360; XTENSA-NEXT:    or a1, a8, a8361; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill362; XTENSA-NEXT:    l32r a8, .LCPI14_0363; XTENSA-NEXT:    callx0 a8364; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload365; XTENSA-NEXT:    addi a8, a1, 16366; XTENSA-NEXT:    or a1, a8, a8367; XTENSA-NEXT:    ret368;369; XTENSA-DIV-LABEL: sdiv:370; XTENSA-DIV:       # %bb.0:371; XTENSA-DIV-NEXT:    quos a2, a2, a3372; XTENSA-DIV-NEXT:    ret373  %1 = sdiv i32 %a, %b374  ret i32 %1375}376 377define i32 @sdiv_constant_lhs(i32 %a) nounwind {378; XTENSA-LABEL: sdiv_constant_lhs:379; XTENSA:       # %bb.0:380; XTENSA-NEXT:    addi a8, a1, -16381; XTENSA-NEXT:    or a1, a8, a8382; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill383; XTENSA-NEXT:    or a3, a2, a2384; XTENSA-NEXT:    movi a2, -10385; XTENSA-NEXT:    l32r a8, .LCPI15_0386; XTENSA-NEXT:    callx0 a8387; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload388; XTENSA-NEXT:    addi a8, a1, 16389; XTENSA-NEXT:    or a1, a8, a8390; XTENSA-NEXT:    ret391;392; XTENSA-DIV-LABEL: sdiv_constant_lhs:393; XTENSA-DIV:       # %bb.0:394; XTENSA-DIV-NEXT:    movi a8, -10395; XTENSA-DIV-NEXT:    quos a2, a8, a2396; XTENSA-DIV-NEXT:    ret397  %1 = sdiv i32 -10, %a398  ret i32 %1399}400 401define i64 @sdiv64(i64 %a, i64 %b) nounwind {402; XTENSA-LABEL: sdiv64:403; XTENSA:       # %bb.0:404; XTENSA-NEXT:    addi a8, a1, -16405; XTENSA-NEXT:    or a1, a8, a8406; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill407; XTENSA-NEXT:    l32r a8, .LCPI16_0408; XTENSA-NEXT:    callx0 a8409; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload410; XTENSA-NEXT:    addi a8, a1, 16411; XTENSA-NEXT:    or a1, a8, a8412; XTENSA-NEXT:    ret413;414; XTENSA-DIV-LABEL: sdiv64:415; XTENSA-DIV:       # %bb.0:416; XTENSA-DIV-NEXT:    addi a8, a1, -16417; XTENSA-DIV-NEXT:    or a1, a8, a8418; XTENSA-DIV-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill419; XTENSA-DIV-NEXT:    l32r a8, .LCPI16_0420; XTENSA-DIV-NEXT:    callx0 a8421; XTENSA-DIV-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload422; XTENSA-DIV-NEXT:    addi a8, a1, 16423; XTENSA-DIV-NEXT:    or a1, a8, a8424; XTENSA-DIV-NEXT:    ret425  %1 = sdiv i64 %a, %b426  ret i64 %1427}428 429define i64 @sdiv64_constant(i64 %a) nounwind {430; XTENSA-LABEL: sdiv64_constant:431; XTENSA:       # %bb.0:432; XTENSA-NEXT:    addi a8, a1, -16433; XTENSA-NEXT:    or a1, a8, a8434; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill435; XTENSA-NEXT:    movi a4, 5436; XTENSA-NEXT:    movi a5, 0437; XTENSA-NEXT:    l32r a8, .LCPI17_0438; XTENSA-NEXT:    callx0 a8439; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload440; XTENSA-NEXT:    addi a8, a1, 16441; XTENSA-NEXT:    or a1, a8, a8442; XTENSA-NEXT:    ret443;444; XTENSA-DIV-LABEL: sdiv64_constant:445; XTENSA-DIV:       # %bb.0:446; XTENSA-DIV-NEXT:    addi a8, a1, -16447; XTENSA-DIV-NEXT:    or a1, a8, a8448; XTENSA-DIV-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill449; XTENSA-DIV-NEXT:    movi a4, 5450; XTENSA-DIV-NEXT:    movi a5, 0451; XTENSA-DIV-NEXT:    l32r a8, .LCPI17_0452; XTENSA-DIV-NEXT:    callx0 a8453; XTENSA-DIV-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload454; XTENSA-DIV-NEXT:    addi a8, a1, 16455; XTENSA-DIV-NEXT:    or a1, a8, a8456; XTENSA-DIV-NEXT:    ret457  %1 = sdiv i64 %a, 5458  ret i64 %1459}460 461define i64 @sdiv64_constant_lhs(i64 %a) nounwind {462; XTENSA-LABEL: sdiv64_constant_lhs:463; XTENSA:       # %bb.0:464; XTENSA-NEXT:    addi a8, a1, -16465; XTENSA-NEXT:    or a1, a8, a8466; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill467; XTENSA-NEXT:    or a5, a3, a3468; XTENSA-NEXT:    or a4, a2, a2469; XTENSA-NEXT:    movi a2, 10470; XTENSA-NEXT:    movi a3, 0471; XTENSA-NEXT:    l32r a8, .LCPI18_0472; XTENSA-NEXT:    callx0 a8473; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload474; XTENSA-NEXT:    addi a8, a1, 16475; XTENSA-NEXT:    or a1, a8, a8476; XTENSA-NEXT:    ret477;478; XTENSA-DIV-LABEL: sdiv64_constant_lhs:479; XTENSA-DIV:       # %bb.0:480; XTENSA-DIV-NEXT:    addi a8, a1, -16481; XTENSA-DIV-NEXT:    or a1, a8, a8482; XTENSA-DIV-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill483; XTENSA-DIV-NEXT:    or a5, a3, a3484; XTENSA-DIV-NEXT:    or a4, a2, a2485; XTENSA-DIV-NEXT:    movi a2, 10486; XTENSA-DIV-NEXT:    movi a3, 0487; XTENSA-DIV-NEXT:    l32r a8, .LCPI18_0488; XTENSA-DIV-NEXT:    callx0 a8489; XTENSA-DIV-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload490; XTENSA-DIV-NEXT:    addi a8, a1, 16491; XTENSA-DIV-NEXT:    or a1, a8, a8492; XTENSA-DIV-NEXT:    ret493  %1 = sdiv i64 10, %a494  ret i64 %1495}496 497 498define i64 @sdiv64_sext_operands(i32 %a, i32 %b) nounwind {499; XTENSA-LABEL: sdiv64_sext_operands:500; XTENSA:       # %bb.0:501; XTENSA-NEXT:    addi a8, a1, -16502; XTENSA-NEXT:    or a1, a8, a8503; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill504; XTENSA-NEXT:    or a4, a3, a3505; XTENSA-NEXT:    srai a3, a2, 31506; XTENSA-NEXT:    srai a5, a4, 31507; XTENSA-NEXT:    l32r a8, .LCPI19_0508; XTENSA-NEXT:    callx0 a8509; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload510; XTENSA-NEXT:    addi a8, a1, 16511; XTENSA-NEXT:    or a1, a8, a8512; XTENSA-NEXT:    ret513;514; XTENSA-DIV-LABEL: sdiv64_sext_operands:515; XTENSA-DIV:       # %bb.0:516; XTENSA-DIV-NEXT:    addi a8, a1, -16517; XTENSA-DIV-NEXT:    or a1, a8, a8518; XTENSA-DIV-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill519; XTENSA-DIV-NEXT:    or a4, a3, a3520; XTENSA-DIV-NEXT:    srai a3, a2, 31521; XTENSA-DIV-NEXT:    srai a5, a4, 31522; XTENSA-DIV-NEXT:    l32r a8, .LCPI19_0523; XTENSA-DIV-NEXT:    callx0 a8524; XTENSA-DIV-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload525; XTENSA-DIV-NEXT:    addi a8, a1, 16526; XTENSA-DIV-NEXT:    or a1, a8, a8527; XTENSA-DIV-NEXT:    ret528  %1 = sext i32 %a to i64529  %2 = sext i32 %b to i64530  %3 = sdiv i64 %1, %2531  ret i64 %3532}533 534define i8 @sdiv8(i8 %a, i8 %b) nounwind {535; XTENSA-LABEL: sdiv8:536; XTENSA:       # %bb.0:537; XTENSA-NEXT:    addi a8, a1, -16538; XTENSA-NEXT:    or a1, a8, a8539; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill540; XTENSA-NEXT:    slli a8, a2, 24541; XTENSA-NEXT:    srai a2, a8, 24542; XTENSA-NEXT:    slli a8, a3, 24543; XTENSA-NEXT:    srai a3, a8, 24544; XTENSA-NEXT:    l32r a8, .LCPI20_0545; XTENSA-NEXT:    callx0 a8546; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload547; XTENSA-NEXT:    addi a8, a1, 16548; XTENSA-NEXT:    or a1, a8, a8549; XTENSA-NEXT:    ret550;551; XTENSA-DIV-LABEL: sdiv8:552; XTENSA-DIV:       # %bb.0:553; XTENSA-DIV-NEXT:    slli a8, a3, 24554; XTENSA-DIV-NEXT:    srai a8, a8, 24555; XTENSA-DIV-NEXT:    slli a9, a2, 24556; XTENSA-DIV-NEXT:    srai a9, a9, 24557; XTENSA-DIV-NEXT:    quos a2, a9, a8558; XTENSA-DIV-NEXT:    ret559  %1 = sdiv i8 %a, %b560  ret i8 %1561}562 563define i8 @sdiv8_constant(i8 %a) nounwind {564; XTENSA-LABEL: sdiv8_constant:565; XTENSA:       # %bb.0:566; XTENSA-NEXT:    addi a8, a1, -16567; XTENSA-NEXT:    or a1, a8, a8568; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill569; XTENSA-NEXT:    slli a8, a2, 24570; XTENSA-NEXT:    srai a2, a8, 24571; XTENSA-NEXT:    movi a3, 5572; XTENSA-NEXT:    l32r a8, .LCPI21_0573; XTENSA-NEXT:    callx0 a8574; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload575; XTENSA-NEXT:    addi a8, a1, 16576; XTENSA-NEXT:    or a1, a8, a8577; XTENSA-NEXT:    ret578;579; XTENSA-DIV-LABEL: sdiv8_constant:580; XTENSA-DIV:       # %bb.0:581; XTENSA-DIV-NEXT:    slli a8, a2, 24582; XTENSA-DIV-NEXT:    srai a8, a8, 24583; XTENSA-DIV-NEXT:    movi a9, 5584; XTENSA-DIV-NEXT:    quos a2, a8, a9585; XTENSA-DIV-NEXT:    ret586  %1 = sdiv i8 %a, 5587  ret i8 %1588}589 590define i8 @sdiv8_pow2(i8 %a) nounwind {591; XTENSA-LABEL: sdiv8_pow2:592; XTENSA:       # %bb.0:593; XTENSA-NEXT:    slli a8, a2, 24594; XTENSA-NEXT:    srai a8, a8, 31595; XTENSA-NEXT:    movi a9, 7596; XTENSA-NEXT:    and a8, a8, a9597; XTENSA-NEXT:    add a8, a2, a8598; XTENSA-NEXT:    slli a8, a8, 24599; XTENSA-NEXT:    srai a2, a8, 27600; XTENSA-NEXT:    ret601;602; XTENSA-DIV-LABEL: sdiv8_pow2:603; XTENSA-DIV:       # %bb.0:604; XTENSA-DIV-NEXT:    slli a8, a2, 24605; XTENSA-DIV-NEXT:    srai a8, a8, 31606; XTENSA-DIV-NEXT:    movi a9, 7607; XTENSA-DIV-NEXT:    and a8, a8, a9608; XTENSA-DIV-NEXT:    add a8, a2, a8609; XTENSA-DIV-NEXT:    slli a8, a8, 24610; XTENSA-DIV-NEXT:    srai a2, a8, 27611; XTENSA-DIV-NEXT:    ret612  %1 = sdiv i8 %a, 8613  ret i8 %1614}615 616define i8 @sdiv8_constant_lhs(i8 %a) nounwind {617; XTENSA-LABEL: sdiv8_constant_lhs:618; XTENSA:       # %bb.0:619; XTENSA-NEXT:    addi a8, a1, -16620; XTENSA-NEXT:    or a1, a8, a8621; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill622; XTENSA-NEXT:    slli a8, a2, 24623; XTENSA-NEXT:    srai a3, a8, 24624; XTENSA-NEXT:    movi a2, -10625; XTENSA-NEXT:    l32r a8, .LCPI23_0626; XTENSA-NEXT:    callx0 a8627; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload628; XTENSA-NEXT:    addi a8, a1, 16629; XTENSA-NEXT:    or a1, a8, a8630; XTENSA-NEXT:    ret631;632; XTENSA-DIV-LABEL: sdiv8_constant_lhs:633; XTENSA-DIV:       # %bb.0:634; XTENSA-DIV-NEXT:    slli a8, a2, 24635; XTENSA-DIV-NEXT:    srai a8, a8, 24636; XTENSA-DIV-NEXT:    movi a9, -10637; XTENSA-DIV-NEXT:    quos a2, a9, a8638; XTENSA-DIV-NEXT:    ret639  %1 = sdiv i8 -10, %a640  ret i8 %1641}642 643define i16 @sdiv16(i16 %a, i16 %b) nounwind {644; XTENSA-LABEL: sdiv16:645; XTENSA:       # %bb.0:646; XTENSA-NEXT:    addi a8, a1, -16647; XTENSA-NEXT:    or a1, a8, a8648; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill649; XTENSA-NEXT:    slli a8, a2, 16650; XTENSA-NEXT:    srai a2, a8, 16651; XTENSA-NEXT:    slli a8, a3, 16652; XTENSA-NEXT:    srai a3, a8, 16653; XTENSA-NEXT:    l32r a8, .LCPI24_0654; XTENSA-NEXT:    callx0 a8655; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload656; XTENSA-NEXT:    addi a8, a1, 16657; XTENSA-NEXT:    or a1, a8, a8658; XTENSA-NEXT:    ret659;660; XTENSA-DIV-LABEL: sdiv16:661; XTENSA-DIV:       # %bb.0:662; XTENSA-DIV-NEXT:    slli a8, a3, 16663; XTENSA-DIV-NEXT:    srai a8, a8, 16664; XTENSA-DIV-NEXT:    slli a9, a2, 16665; XTENSA-DIV-NEXT:    srai a9, a9, 16666; XTENSA-DIV-NEXT:    quos a2, a9, a8667; XTENSA-DIV-NEXT:    ret668  %1 = sdiv i16 %a, %b669  ret i16 %1670}671 672define i16 @sdiv16_constant(i16 %a) nounwind {673; XTENSA-LABEL: sdiv16_constant:674; XTENSA:       # %bb.0:675; XTENSA-NEXT:    addi a8, a1, -16676; XTENSA-NEXT:    or a1, a8, a8677; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill678; XTENSA-NEXT:    slli a8, a2, 16679; XTENSA-NEXT:    srai a2, a8, 16680; XTENSA-NEXT:    movi a3, 5681; XTENSA-NEXT:    l32r a8, .LCPI25_0682; XTENSA-NEXT:    callx0 a8683; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload684; XTENSA-NEXT:    addi a8, a1, 16685; XTENSA-NEXT:    or a1, a8, a8686; XTENSA-NEXT:    ret687;688; XTENSA-DIV-LABEL: sdiv16_constant:689; XTENSA-DIV:       # %bb.0:690; XTENSA-DIV-NEXT:    slli a8, a2, 16691; XTENSA-DIV-NEXT:    srai a8, a8, 16692; XTENSA-DIV-NEXT:    movi a9, 5693; XTENSA-DIV-NEXT:    quos a2, a8, a9694; XTENSA-DIV-NEXT:    ret695  %1 = sdiv i16 %a, 5696  ret i16 %1697}698 699define i16 @sdiv16_constant_lhs(i16 %a) nounwind {700; XTENSA-LABEL: sdiv16_constant_lhs:701; XTENSA:       # %bb.0:702; XTENSA-NEXT:    addi a8, a1, -16703; XTENSA-NEXT:    or a1, a8, a8704; XTENSA-NEXT:    s32i a0, a1, 0 # 4-byte Folded Spill705; XTENSA-NEXT:    slli a8, a2, 16706; XTENSA-NEXT:    srai a3, a8, 16707; XTENSA-NEXT:    movi a2, -10708; XTENSA-NEXT:    l32r a8, .LCPI26_0709; XTENSA-NEXT:    callx0 a8710; XTENSA-NEXT:    l32i a0, a1, 0 # 4-byte Folded Reload711; XTENSA-NEXT:    addi a8, a1, 16712; XTENSA-NEXT:    or a1, a8, a8713; XTENSA-NEXT:    ret714;715; XTENSA-DIV-LABEL: sdiv16_constant_lhs:716; XTENSA-DIV:       # %bb.0:717; XTENSA-DIV-NEXT:    slli a8, a2, 16718; XTENSA-DIV-NEXT:    srai a8, a8, 16719; XTENSA-DIV-NEXT:    movi a9, -10720; XTENSA-DIV-NEXT:    quos a2, a9, a8721; XTENSA-DIV-NEXT:    ret722  %1 = sdiv i16 -10, %a723  ret i16 %1724}725 726define i32 @sdiv_pow2(i32 %a) nounwind {727; XTENSA-LABEL: sdiv_pow2:728; XTENSA:       # %bb.0:729; XTENSA-NEXT:    srai a8, a2, 31730; XTENSA-NEXT:    extui a8, a8, 29, 3731; XTENSA-NEXT:    add a8, a2, a8732; XTENSA-NEXT:    srai a2, a8, 3733; XTENSA-NEXT:    ret734;735; XTENSA-DIV-LABEL: sdiv_pow2:736; XTENSA-DIV:       # %bb.0:737; XTENSA-DIV-NEXT:    srai a8, a2, 31738; XTENSA-DIV-NEXT:    extui a8, a8, 29, 3739; XTENSA-DIV-NEXT:    add a8, a2, a8740; XTENSA-DIV-NEXT:    srai a2, a8, 3741; XTENSA-DIV-NEXT:    ret742  %1 = sdiv i32 %a, 8743  ret i32 %1744}745 746define i32 @sdiv_pow2_2(i32 %a) nounwind {747; XTENSA-LABEL: sdiv_pow2_2:748; XTENSA:       # %bb.0:749; XTENSA-NEXT:    srai a8, a2, 31750; XTENSA-NEXT:    extui a8, a8, 16, 16751; XTENSA-NEXT:    add a8, a2, a8752; XTENSA-NEXT:    srai a2, a8, 16753; XTENSA-NEXT:    ret754;755; XTENSA-DIV-LABEL: sdiv_pow2_2:756; XTENSA-DIV:       # %bb.0:757; XTENSA-DIV-NEXT:    srai a8, a2, 31758; XTENSA-DIV-NEXT:    extui a8, a8, 16, 16759; XTENSA-DIV-NEXT:    add a8, a2, a8760; XTENSA-DIV-NEXT:    srai a2, a8, 16761; XTENSA-DIV-NEXT:    ret762  %1 = sdiv i32 %a, 65536763  ret i32 %1764}765 766define i16 @sdiv16_pow2(i16 %a) nounwind {767; XTENSA-LABEL: sdiv16_pow2:768; XTENSA:       # %bb.0:769; XTENSA-NEXT:    slli a8, a2, 16770; XTENSA-NEXT:    srai a8, a8, 31771; XTENSA-NEXT:    movi a9, 7772; XTENSA-NEXT:    and a8, a8, a9773; XTENSA-NEXT:    add a8, a2, a8774; XTENSA-NEXT:    slli a8, a8, 16775; XTENSA-NEXT:    srai a2, a8, 19776; XTENSA-NEXT:    ret777;778; XTENSA-DIV-LABEL: sdiv16_pow2:779; XTENSA-DIV:       # %bb.0:780; XTENSA-DIV-NEXT:    slli a8, a2, 16781; XTENSA-DIV-NEXT:    srai a8, a8, 31782; XTENSA-DIV-NEXT:    movi a9, 7783; XTENSA-DIV-NEXT:    and a8, a8, a9784; XTENSA-DIV-NEXT:    add a8, a2, a8785; XTENSA-DIV-NEXT:    slli a8, a8, 16786; XTENSA-DIV-NEXT:    srai a2, a8, 19787; XTENSA-DIV-NEXT:    ret788  %1 = sdiv i16 %a, 8789  ret i16 %1790}791