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