1544 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=+mul32high,mul32 -verify-machineinstrs < %s \5; RUN: | FileCheck -check-prefix=XTENSA-MUL %s6 7define signext i32 @square(i32 %a) nounwind {8; XTENSA-LABEL: square: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: or a3, a2, a215; XTENSA-NEXT: callx0 a816; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload17; XTENSA-NEXT: addi a8, a1, 1618; XTENSA-NEXT: or a1, a8, a819; XTENSA-NEXT: ret20;21; XTENSA-MUL-LABEL: square:22; XTENSA-MUL: # %bb.0:23; XTENSA-MUL-NEXT: mull a2, a2, a224; XTENSA-MUL-NEXT: ret25 %1 = mul i32 %a, %a26 ret i32 %127}28 29define signext i32 @mul(i32 %a, i32 %b) nounwind {30; XTENSA-LABEL: mul:31; XTENSA: # %bb.0:32; XTENSA-NEXT: addi a8, a1, -1633; XTENSA-NEXT: or a1, a8, a834; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill35; 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-MUL-LABEL: mul:43; XTENSA-MUL: # %bb.0:44; XTENSA-MUL-NEXT: mull a2, a2, a345; XTENSA-MUL-NEXT: ret46 %1 = mul i32 %a, %b47 ret i32 %148}49 50define signext i32 @mul_constant(i32 %a) nounwind {51; XTENSA-LABEL: mul_constant:52; XTENSA: # %bb.0:53; XTENSA-NEXT: addi a8, a1, -1654; XTENSA-NEXT: or a1, a8, a855; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill56; XTENSA-NEXT: movi a3, 557; XTENSA-NEXT: l32r a8, .LCPI2_058; XTENSA-NEXT: callx0 a859; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload60; XTENSA-NEXT: addi a8, a1, 1661; XTENSA-NEXT: or a1, a8, a862; XTENSA-NEXT: ret63;64; XTENSA-MUL-LABEL: mul_constant:65; XTENSA-MUL: # %bb.0:66; XTENSA-MUL-NEXT: movi a8, 567; XTENSA-MUL-NEXT: mull a2, a2, a868; XTENSA-MUL-NEXT: ret69 %1 = mul i32 %a, 570 ret i32 %171}72 73define i32 @mul_pow2(i32 %a) nounwind {74; XTENSA-LABEL: mul_pow2:75; XTENSA: # %bb.0:76; XTENSA-NEXT: slli a2, a2, 377; XTENSA-NEXT: ret78;79; XTENSA-MUL-LABEL: mul_pow2:80; XTENSA-MUL: # %bb.0:81; XTENSA-MUL-NEXT: slli a2, a2, 382; XTENSA-MUL-NEXT: ret83 %1 = mul i32 %a, 884 ret i32 %185}86 87define i64 @mul64(i64 %a, i64 %b) nounwind {88; XTENSA-LABEL: mul64:89; XTENSA: # %bb.0:90; XTENSA-NEXT: addi a8, a1, -1691; XTENSA-NEXT: or a1, a8, a892; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill93; XTENSA-NEXT: l32r a8, .LCPI4_094; XTENSA-NEXT: callx0 a895; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload96; XTENSA-NEXT: addi a8, a1, 1697; XTENSA-NEXT: or a1, a8, a898; XTENSA-NEXT: ret99;100; XTENSA-MUL-LABEL: mul64:101; XTENSA-MUL: # %bb.0:102; XTENSA-MUL-NEXT: mull a8, a2, a5103; XTENSA-MUL-NEXT: muluh a9, a2, a4104; XTENSA-MUL-NEXT: add a8, a9, a8105; XTENSA-MUL-NEXT: mull a9, a3, a4106; XTENSA-MUL-NEXT: add a3, a8, a9107; XTENSA-MUL-NEXT: mull a2, a2, a4108; XTENSA-MUL-NEXT: ret109 %1 = mul i64 %a, %b110 ret i64 %1111}112 113define i64 @mul64_constant(i64 %a) nounwind {114; XTENSA-LABEL: mul64_constant:115; XTENSA: # %bb.0:116; XTENSA-NEXT: addi a8, a1, -16117; XTENSA-NEXT: or a1, a8, a8118; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill119; XTENSA-NEXT: movi a4, 5120; XTENSA-NEXT: movi a5, 0121; XTENSA-NEXT: l32r a8, .LCPI5_0122; XTENSA-NEXT: callx0 a8123; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload124; XTENSA-NEXT: addi a8, a1, 16125; XTENSA-NEXT: or a1, a8, a8126; XTENSA-NEXT: ret127;128; XTENSA-MUL-LABEL: mul64_constant:129; XTENSA-MUL: # %bb.0:130; XTENSA-MUL-NEXT: movi a8, 5131; XTENSA-MUL-NEXT: mull a9, a3, a8132; XTENSA-MUL-NEXT: muluh a10, a2, a8133; XTENSA-MUL-NEXT: add a3, a10, a9134; XTENSA-MUL-NEXT: mull a2, a2, a8135; XTENSA-MUL-NEXT: ret136 %1 = mul i64 %a, 5137 ret i64 %1138}139 140define i32 @mulhs(i32 %a, i32 %b) nounwind {141; XTENSA-LABEL: mulhs:142; XTENSA: # %bb.0:143; XTENSA-NEXT: addi a8, a1, -16144; XTENSA-NEXT: or a1, a8, a8145; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill146; XTENSA-NEXT: or a4, a3, a3147; XTENSA-NEXT: srai a3, a2, 31148; XTENSA-NEXT: srai a5, a4, 31149; XTENSA-NEXT: l32r a8, .LCPI6_0150; XTENSA-NEXT: callx0 a8151; XTENSA-NEXT: or a2, a3, a3152; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload153; XTENSA-NEXT: addi a8, a1, 16154; XTENSA-NEXT: or a1, a8, a8155; XTENSA-NEXT: ret156;157; XTENSA-MUL-LABEL: mulhs:158; XTENSA-MUL: # %bb.0:159; XTENSA-MUL-NEXT: mulsh a2, a2, a3160; XTENSA-MUL-NEXT: ret161 %1 = sext i32 %a to i64162 %2 = sext i32 %b to i64163 %3 = mul i64 %1, %2164 %4 = lshr i64 %3, 32165 %5 = trunc i64 %4 to i32166 ret i32 %5167}168 169define i32 @mulhs_positive_constant(i32 %a) nounwind {170; XTENSA-LABEL: mulhs_positive_constant:171; XTENSA: # %bb.0:172; XTENSA-NEXT: addi a8, a1, -16173; XTENSA-NEXT: or a1, a8, a8174; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill175; XTENSA-NEXT: srai a3, a2, 31176; XTENSA-NEXT: movi a4, 5177; XTENSA-NEXT: movi a5, 0178; XTENSA-NEXT: l32r a8, .LCPI7_0179; XTENSA-NEXT: callx0 a8180; XTENSA-NEXT: or a2, a3, a3181; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload182; XTENSA-NEXT: addi a8, a1, 16183; XTENSA-NEXT: or a1, a8, a8184; XTENSA-NEXT: ret185;186; XTENSA-MUL-LABEL: mulhs_positive_constant:187; XTENSA-MUL: # %bb.0:188; XTENSA-MUL-NEXT: movi a8, 5189; XTENSA-MUL-NEXT: mulsh a2, a2, a8190; XTENSA-MUL-NEXT: ret191 %1 = sext i32 %a to i64192 %2 = mul i64 %1, 5193 %3 = lshr i64 %2, 32194 %4 = trunc i64 %3 to i32195 ret i32 %4196}197 198define i32 @mulhs_negative_constant(i32 %a) nounwind {199; XTENSA-LABEL: mulhs_negative_constant:200; XTENSA: # %bb.0:201; XTENSA-NEXT: addi a8, a1, -16202; XTENSA-NEXT: or a1, a8, a8203; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill204; XTENSA-NEXT: srai a3, a2, 31205; XTENSA-NEXT: movi a4, -5206; XTENSA-NEXT: movi a5, -1207; XTENSA-NEXT: l32r a8, .LCPI8_0208; XTENSA-NEXT: callx0 a8209; XTENSA-NEXT: or a2, a3, a3210; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload211; XTENSA-NEXT: addi a8, a1, 16212; XTENSA-NEXT: or a1, a8, a8213; XTENSA-NEXT: ret214;215; XTENSA-MUL-LABEL: mulhs_negative_constant:216; XTENSA-MUL: # %bb.0:217; XTENSA-MUL-NEXT: movi a8, -5218; XTENSA-MUL-NEXT: mulsh a2, a2, a8219; XTENSA-MUL-NEXT: ret220 %1 = sext i32 %a to i64221 %2 = mul i64 %1, -5222 %3 = lshr i64 %2, 32223 %4 = trunc i64 %3 to i32224 ret i32 %4225}226 227define zeroext i32 @mulhu(i32 zeroext %a, i32 zeroext %b) nounwind {228; XTENSA-LABEL: mulhu:229; XTENSA: # %bb.0:230; XTENSA-NEXT: addi a8, a1, -16231; XTENSA-NEXT: or a1, a8, a8232; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill233; XTENSA-NEXT: or a4, a3, a3234; XTENSA-NEXT: movi a3, 0235; XTENSA-NEXT: l32r a8, .LCPI9_0236; XTENSA-NEXT: or a5, a3, a3237; XTENSA-NEXT: callx0 a8238; XTENSA-NEXT: or a2, a3, a3239; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload240; XTENSA-NEXT: addi a8, a1, 16241; XTENSA-NEXT: or a1, a8, a8242; XTENSA-NEXT: ret243;244; XTENSA-MUL-LABEL: mulhu:245; XTENSA-MUL: # %bb.0:246; XTENSA-MUL-NEXT: muluh a2, a2, a3247; XTENSA-MUL-NEXT: ret248 %1 = zext i32 %a to i64249 %2 = zext i32 %b to i64250 %3 = mul i64 %1, %2251 %4 = lshr i64 %3, 32252 %5 = trunc i64 %4 to i32253 ret i32 %5254}255 256define i32 @mulhsu(i32 %a, i32 %b) nounwind {257; XTENSA-LABEL: mulhsu:258; XTENSA: # %bb.0:259; XTENSA-NEXT: addi a8, a1, -16260; XTENSA-NEXT: or a1, a8, a8261; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill262; XTENSA-NEXT: or a4, a3, a3263; XTENSA-NEXT: srai a5, a4, 31264; XTENSA-NEXT: movi a3, 0265; XTENSA-NEXT: l32r a8, .LCPI10_0266; XTENSA-NEXT: callx0 a8267; XTENSA-NEXT: or a2, a3, a3268; 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-MUL-LABEL: mulhsu:274; XTENSA-MUL: # %bb.0:275; XTENSA-MUL-NEXT: muluh a8, a2, a3276; XTENSA-MUL-NEXT: srai a9, a3, 31277; XTENSA-MUL-NEXT: mull a9, a2, a9278; XTENSA-MUL-NEXT: add a2, a8, a9279; XTENSA-MUL-NEXT: ret280 %1 = zext i32 %a to i64281 %2 = sext i32 %b to i64282 %3 = mul i64 %1, %2283 %4 = lshr i64 %3, 32284 %5 = trunc i64 %4 to i32285 ret i32 %5286}287 288define i32 @mulhu_constant(i32 %a) nounwind {289; XTENSA-LABEL: mulhu_constant:290; XTENSA: # %bb.0:291; XTENSA-NEXT: addi a8, a1, -16292; XTENSA-NEXT: or a1, a8, a8293; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill294; XTENSA-NEXT: movi a4, 5295; XTENSA-NEXT: movi a3, 0296; XTENSA-NEXT: l32r a8, .LCPI11_0297; XTENSA-NEXT: or a5, a3, a3298; XTENSA-NEXT: callx0 a8299; XTENSA-NEXT: or a2, a3, a3300; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload301; XTENSA-NEXT: addi a8, a1, 16302; XTENSA-NEXT: or a1, a8, a8303; XTENSA-NEXT: ret304;305; XTENSA-MUL-LABEL: mulhu_constant:306; XTENSA-MUL: # %bb.0:307; XTENSA-MUL-NEXT: movi a8, 5308; XTENSA-MUL-NEXT: muluh a2, a2, a8309; XTENSA-MUL-NEXT: ret310 %1 = zext i32 %a to i64311 %2 = mul i64 %1, 5312 %3 = lshr i64 %2, 32313 %4 = trunc i64 %3 to i32314 ret i32 %4315}316 317define i32 @muli32_p65(i32 %a) nounwind {318; XTENSA-LABEL: muli32_p65:319; XTENSA: # %bb.0:320; XTENSA-NEXT: addi a8, a1, -16321; XTENSA-NEXT: or a1, a8, a8322; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill323; XTENSA-NEXT: movi a3, 65324; XTENSA-NEXT: l32r a8, .LCPI12_0325; XTENSA-NEXT: callx0 a8326; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload327; XTENSA-NEXT: addi a8, a1, 16328; XTENSA-NEXT: or a1, a8, a8329; XTENSA-NEXT: ret330;331; XTENSA-MUL-LABEL: muli32_p65:332; XTENSA-MUL: # %bb.0:333; XTENSA-MUL-NEXT: movi a8, 65334; XTENSA-MUL-NEXT: mull a2, a2, a8335; XTENSA-MUL-NEXT: ret336 %1 = mul i32 %a, 65337 ret i32 %1338}339 340define i32 @muli32_p63(i32 %a) nounwind {341; XTENSA-LABEL: muli32_p63:342; XTENSA: # %bb.0:343; XTENSA-NEXT: addi a8, a1, -16344; XTENSA-NEXT: or a1, a8, a8345; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill346; XTENSA-NEXT: movi a3, 63347; XTENSA-NEXT: l32r a8, .LCPI13_0348; XTENSA-NEXT: callx0 a8349; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload350; XTENSA-NEXT: addi a8, a1, 16351; XTENSA-NEXT: or a1, a8, a8352; XTENSA-NEXT: ret353;354; XTENSA-MUL-LABEL: muli32_p63:355; XTENSA-MUL: # %bb.0:356; XTENSA-MUL-NEXT: movi a8, 63357; XTENSA-MUL-NEXT: mull a2, a2, a8358; XTENSA-MUL-NEXT: ret359 %1 = mul i32 %a, 63360 ret i32 %1361}362 363define i64 @muli64_p65(i64 %a) nounwind {364; XTENSA-LABEL: muli64_p65:365; XTENSA: # %bb.0:366; XTENSA-NEXT: addi a8, a1, -16367; XTENSA-NEXT: or a1, a8, a8368; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill369; XTENSA-NEXT: movi a4, 65370; XTENSA-NEXT: movi a5, 0371; XTENSA-NEXT: l32r a8, .LCPI14_0372; XTENSA-NEXT: callx0 a8373; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload374; XTENSA-NEXT: addi a8, a1, 16375; XTENSA-NEXT: or a1, a8, a8376; XTENSA-NEXT: ret377;378; XTENSA-MUL-LABEL: muli64_p65:379; XTENSA-MUL: # %bb.0:380; XTENSA-MUL-NEXT: movi a8, 65381; XTENSA-MUL-NEXT: mull a9, a3, a8382; XTENSA-MUL-NEXT: muluh a10, a2, a8383; XTENSA-MUL-NEXT: add a3, a10, a9384; XTENSA-MUL-NEXT: mull a2, a2, a8385; XTENSA-MUL-NEXT: ret386 %1 = mul i64 %a, 65387 ret i64 %1388}389 390define i64 @muli64_p63(i64 %a) nounwind {391; XTENSA-LABEL: muli64_p63:392; XTENSA: # %bb.0:393; XTENSA-NEXT: addi a8, a1, -16394; XTENSA-NEXT: or a1, a8, a8395; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill396; XTENSA-NEXT: movi a4, 63397; XTENSA-NEXT: movi a5, 0398; XTENSA-NEXT: l32r a8, .LCPI15_0399; XTENSA-NEXT: callx0 a8400; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload401; XTENSA-NEXT: addi a8, a1, 16402; XTENSA-NEXT: or a1, a8, a8403; XTENSA-NEXT: ret404;405; XTENSA-MUL-LABEL: muli64_p63:406; XTENSA-MUL: # %bb.0:407; XTENSA-MUL-NEXT: movi a8, 63408; XTENSA-MUL-NEXT: mull a9, a3, a8409; XTENSA-MUL-NEXT: muluh a10, a2, a8410; XTENSA-MUL-NEXT: add a3, a10, a9411; XTENSA-MUL-NEXT: mull a2, a2, a8412; XTENSA-MUL-NEXT: ret413 %1 = mul i64 %a, 63414 ret i64 %1415}416 417define i32 @muli32_m63(i32 %a) nounwind {418; XTENSA-LABEL: muli32_m63:419; XTENSA: # %bb.0:420; XTENSA-NEXT: addi a8, a1, -16421; XTENSA-NEXT: or a1, a8, a8422; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill423; XTENSA-NEXT: movi a3, -63424; XTENSA-NEXT: l32r a8, .LCPI16_0425; XTENSA-NEXT: callx0 a8426; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload427; XTENSA-NEXT: addi a8, a1, 16428; XTENSA-NEXT: or a1, a8, a8429; XTENSA-NEXT: ret430;431; XTENSA-MUL-LABEL: muli32_m63:432; XTENSA-MUL: # %bb.0:433; XTENSA-MUL-NEXT: movi a8, -63434; XTENSA-MUL-NEXT: mull a2, a2, a8435; XTENSA-MUL-NEXT: ret436 %1 = mul i32 %a, -63437 ret i32 %1438}439 440define i32 @muli32_m65(i32 %a) nounwind {441; XTENSA-LABEL: muli32_m65:442; XTENSA: # %bb.0:443; XTENSA-NEXT: addi a8, a1, -16444; XTENSA-NEXT: or a1, a8, a8445; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill446; XTENSA-NEXT: movi a3, -65447; XTENSA-NEXT: l32r a8, .LCPI17_0448; XTENSA-NEXT: callx0 a8449; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload450; XTENSA-NEXT: addi a8, a1, 16451; XTENSA-NEXT: or a1, a8, a8452; XTENSA-NEXT: ret453;454; XTENSA-MUL-LABEL: muli32_m65:455; XTENSA-MUL: # %bb.0:456; XTENSA-MUL-NEXT: movi a8, -65457; XTENSA-MUL-NEXT: mull a2, a2, a8458; XTENSA-MUL-NEXT: ret459 %1 = mul i32 %a, -65460 ret i32 %1461}462 463define i64 @muli64_m63(i64 %a) nounwind {464; XTENSA-LABEL: muli64_m63:465; XTENSA: # %bb.0:466; XTENSA-NEXT: addi a8, a1, -16467; XTENSA-NEXT: or a1, a8, a8468; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill469; XTENSA-NEXT: movi a4, -63470; XTENSA-NEXT: movi a5, -1471; 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-MUL-LABEL: muli64_m63:479; XTENSA-MUL: # %bb.0:480; XTENSA-MUL-NEXT: movi a8, -63481; XTENSA-MUL-NEXT: mull a9, a3, a8482; XTENSA-MUL-NEXT: muluh a10, a2, a8483; XTENSA-MUL-NEXT: sub a10, a10, a2484; XTENSA-MUL-NEXT: add a3, a10, a9485; XTENSA-MUL-NEXT: mull a2, a2, a8486; XTENSA-MUL-NEXT: ret487 %1 = mul i64 %a, -63488 ret i64 %1489}490 491define i64 @muli64_m65(i64 %a) nounwind {492; XTENSA-LABEL: muli64_m65:493; XTENSA: # %bb.0:494; XTENSA-NEXT: addi a8, a1, -16495; XTENSA-NEXT: or a1, a8, a8496; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill497; XTENSA-NEXT: movi a4, -65498; XTENSA-NEXT: movi a5, -1499; XTENSA-NEXT: l32r a8, .LCPI19_0500; XTENSA-NEXT: callx0 a8501; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload502; XTENSA-NEXT: addi a8, a1, 16503; XTENSA-NEXT: or a1, a8, a8504; XTENSA-NEXT: ret505;506; XTENSA-MUL-LABEL: muli64_m65:507; XTENSA-MUL: # %bb.0:508; XTENSA-MUL-NEXT: movi a8, -65509; XTENSA-MUL-NEXT: mull a9, a3, a8510; XTENSA-MUL-NEXT: muluh a10, a2, a8511; XTENSA-MUL-NEXT: sub a10, a10, a2512; XTENSA-MUL-NEXT: add a3, a10, a9513; XTENSA-MUL-NEXT: mull a2, a2, a8514; XTENSA-MUL-NEXT: ret515 %1 = mul i64 %a, -65516 ret i64 %1517}518 519define i32 @muli32_p384(i32 %a) nounwind {520; XTENSA-LABEL: muli32_p384:521; XTENSA: # %bb.0:522; XTENSA-NEXT: addi a8, a1, -16523; XTENSA-NEXT: or a1, a8, a8524; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill525; XTENSA-NEXT: movi a3, 384526; XTENSA-NEXT: l32r a8, .LCPI20_0527; XTENSA-NEXT: callx0 a8528; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload529; XTENSA-NEXT: addi a8, a1, 16530; XTENSA-NEXT: or a1, a8, a8531; XTENSA-NEXT: ret532;533; XTENSA-MUL-LABEL: muli32_p384:534; XTENSA-MUL: # %bb.0:535; XTENSA-MUL-NEXT: movi a8, 384536; XTENSA-MUL-NEXT: mull a2, a2, a8537; XTENSA-MUL-NEXT: ret538 %1 = mul i32 %a, 384539 ret i32 %1540}541 542define i32 @muli32_p12288(i32 %a) nounwind {543; XTENSA-LABEL: muli32_p12288:544; XTENSA: # %bb.0:545; XTENSA-NEXT: addi a8, a1, -16546; XTENSA-NEXT: or a1, a8, a8547; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill548; XTENSA-NEXT: l32r a3, .LCPI21_0549; XTENSA-NEXT: l32r a8, .LCPI21_1550; XTENSA-NEXT: callx0 a8551; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload552; XTENSA-NEXT: addi a8, a1, 16553; XTENSA-NEXT: or a1, a8, a8554; XTENSA-NEXT: ret555;556; XTENSA-MUL-LABEL: muli32_p12288:557; XTENSA-MUL: # %bb.0:558; XTENSA-MUL-NEXT: l32r a8, .LCPI21_0559; XTENSA-MUL-NEXT: mull a2, a2, a8560; XTENSA-MUL-NEXT: ret561 %1 = mul i32 %a, 12288562 ret i32 %1563}564 565define i32 @muli32_p4352(i32 %a) nounwind {566; XTENSA-LABEL: muli32_p4352:567; XTENSA: # %bb.0:568; XTENSA-NEXT: addi a8, a1, -16569; XTENSA-NEXT: or a1, a8, a8570; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill571; XTENSA-NEXT: l32r a3, .LCPI22_0572; XTENSA-NEXT: l32r a8, .LCPI22_1573; 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-MUL-LABEL: muli32_p4352:580; XTENSA-MUL: # %bb.0:581; XTENSA-MUL-NEXT: l32r a8, .LCPI22_0582; XTENSA-MUL-NEXT: mull a2, a2, a8583; XTENSA-MUL-NEXT: ret584 %1 = mul i32 %a, 4352585 ret i32 %1586}587 588define i32 @muli32_p3840(i32 %a) nounwind {589; XTENSA-LABEL: muli32_p3840:590; XTENSA: # %bb.0:591; XTENSA-NEXT: addi a8, a1, -16592; XTENSA-NEXT: or a1, a8, a8593; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill594; XTENSA-NEXT: l32r a3, .LCPI23_0595; XTENSA-NEXT: l32r a8, .LCPI23_1596; XTENSA-NEXT: callx0 a8597; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload598; XTENSA-NEXT: addi a8, a1, 16599; XTENSA-NEXT: or a1, a8, a8600; XTENSA-NEXT: ret601;602; XTENSA-MUL-LABEL: muli32_p3840:603; XTENSA-MUL: # %bb.0:604; XTENSA-MUL-NEXT: l32r a8, .LCPI23_0605; XTENSA-MUL-NEXT: mull a2, a2, a8606; XTENSA-MUL-NEXT: ret607 %1 = mul i32 %a, 3840608 ret i32 %1609}610 611define i32 @muli32_m3840(i32 %a) nounwind {612; XTENSA-LABEL: muli32_m3840:613; XTENSA: # %bb.0:614; XTENSA-NEXT: addi a8, a1, -16615; XTENSA-NEXT: or a1, a8, a8616; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill617; XTENSA-NEXT: l32r a3, .LCPI24_0618; XTENSA-NEXT: l32r a8, .LCPI24_1619; XTENSA-NEXT: callx0 a8620; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload621; XTENSA-NEXT: addi a8, a1, 16622; XTENSA-NEXT: or a1, a8, a8623; XTENSA-NEXT: ret624;625; XTENSA-MUL-LABEL: muli32_m3840:626; XTENSA-MUL: # %bb.0:627; XTENSA-MUL-NEXT: l32r a8, .LCPI24_0628; XTENSA-MUL-NEXT: mull a2, a2, a8629; XTENSA-MUL-NEXT: ret630 %1 = mul i32 %a, -3840631 ret i32 %1632}633 634define i32 @muli32_m4352(i32 %a) nounwind {635; XTENSA-LABEL: muli32_m4352:636; XTENSA: # %bb.0:637; XTENSA-NEXT: addi a8, a1, -16638; XTENSA-NEXT: or a1, a8, a8639; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill640; XTENSA-NEXT: l32r a3, .LCPI25_0641; XTENSA-NEXT: l32r a8, .LCPI25_1642; XTENSA-NEXT: callx0 a8643; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload644; XTENSA-NEXT: addi a8, a1, 16645; XTENSA-NEXT: or a1, a8, a8646; XTENSA-NEXT: ret647;648; XTENSA-MUL-LABEL: muli32_m4352:649; XTENSA-MUL: # %bb.0:650; XTENSA-MUL-NEXT: l32r a8, .LCPI25_0651; XTENSA-MUL-NEXT: mull a2, a2, a8652; XTENSA-MUL-NEXT: ret653 %1 = mul i32 %a, -4352654 ret i32 %1655}656 657define i64 @muli64_p4352(i64 %a) nounwind {658; XTENSA-LABEL: muli64_p4352:659; XTENSA: # %bb.0:660; XTENSA-NEXT: addi a8, a1, -16661; XTENSA-NEXT: or a1, a8, a8662; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill663; XTENSA-NEXT: l32r a4, .LCPI26_0664; XTENSA-NEXT: movi a5, 0665; XTENSA-NEXT: l32r a8, .LCPI26_1666; XTENSA-NEXT: callx0 a8667; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload668; XTENSA-NEXT: addi a8, a1, 16669; XTENSA-NEXT: or a1, a8, a8670; XTENSA-NEXT: ret671;672; XTENSA-MUL-LABEL: muli64_p4352:673; XTENSA-MUL: # %bb.0:674; XTENSA-MUL-NEXT: l32r a8, .LCPI26_0675; XTENSA-MUL-NEXT: mull a9, a3, a8676; XTENSA-MUL-NEXT: muluh a10, a2, a8677; XTENSA-MUL-NEXT: add a3, a10, a9678; XTENSA-MUL-NEXT: mull a2, a2, a8679; XTENSA-MUL-NEXT: ret680 %1 = mul i64 %a, 4352681 ret i64 %1682}683 684define i64 @muli64_p3840(i64 %a) nounwind {685; XTENSA-LABEL: muli64_p3840:686; XTENSA: # %bb.0:687; XTENSA-NEXT: addi a8, a1, -16688; XTENSA-NEXT: or a1, a8, a8689; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill690; XTENSA-NEXT: l32r a4, .LCPI27_0691; XTENSA-NEXT: movi a5, 0692; XTENSA-NEXT: l32r a8, .LCPI27_1693; XTENSA-NEXT: callx0 a8694; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload695; XTENSA-NEXT: addi a8, a1, 16696; XTENSA-NEXT: or a1, a8, a8697; XTENSA-NEXT: ret698;699; XTENSA-MUL-LABEL: muli64_p3840:700; XTENSA-MUL: # %bb.0:701; XTENSA-MUL-NEXT: l32r a8, .LCPI27_0702; XTENSA-MUL-NEXT: mull a9, a3, a8703; XTENSA-MUL-NEXT: muluh a10, a2, a8704; XTENSA-MUL-NEXT: add a3, a10, a9705; XTENSA-MUL-NEXT: mull a2, a2, a8706; XTENSA-MUL-NEXT: ret707 %1 = mul i64 %a, 3840708 ret i64 %1709}710 711define i64 @muli64_m4352(i64 %a) nounwind {712; XTENSA-LABEL: muli64_m4352:713; XTENSA: # %bb.0:714; XTENSA-NEXT: addi a8, a1, -16715; XTENSA-NEXT: or a1, a8, a8716; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill717; XTENSA-NEXT: l32r a4, .LCPI28_0718; XTENSA-NEXT: movi a5, -1719; XTENSA-NEXT: l32r a8, .LCPI28_1720; XTENSA-NEXT: callx0 a8721; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload722; XTENSA-NEXT: addi a8, a1, 16723; XTENSA-NEXT: or a1, a8, a8724; XTENSA-NEXT: ret725;726; XTENSA-MUL-LABEL: muli64_m4352:727; XTENSA-MUL: # %bb.0:728; XTENSA-MUL-NEXT: l32r a8, .LCPI28_0729; XTENSA-MUL-NEXT: mull a9, a3, a8730; XTENSA-MUL-NEXT: muluh a10, a2, a8731; XTENSA-MUL-NEXT: sub a10, a10, a2732; XTENSA-MUL-NEXT: add a3, a10, a9733; XTENSA-MUL-NEXT: mull a2, a2, a8734; XTENSA-MUL-NEXT: ret735 %1 = mul i64 %a, -4352736 ret i64 %1737}738 739define i64 @muli64_m3840(i64 %a) nounwind {740; XTENSA-LABEL: muli64_m3840:741; XTENSA: # %bb.0:742; XTENSA-NEXT: addi a8, a1, -16743; XTENSA-NEXT: or a1, a8, a8744; XTENSA-NEXT: s32i a0, a1, 0 # 4-byte Folded Spill745; XTENSA-NEXT: l32r a4, .LCPI29_0746; XTENSA-NEXT: movi a5, -1747; XTENSA-NEXT: l32r a8, .LCPI29_1748; XTENSA-NEXT: callx0 a8749; XTENSA-NEXT: l32i a0, a1, 0 # 4-byte Folded Reload750; XTENSA-NEXT: addi a8, a1, 16751; XTENSA-NEXT: or a1, a8, a8752; XTENSA-NEXT: ret753;754; XTENSA-MUL-LABEL: muli64_m3840:755; XTENSA-MUL: # %bb.0:756; XTENSA-MUL-NEXT: l32r a8, .LCPI29_0757; XTENSA-MUL-NEXT: mull a9, a3, a8758; XTENSA-MUL-NEXT: muluh a10, a2, a8759; XTENSA-MUL-NEXT: sub a10, a10, a2760; XTENSA-MUL-NEXT: add a3, a10, a9761; XTENSA-MUL-NEXT: mull a2, a2, a8762; XTENSA-MUL-NEXT: ret763 %1 = mul i64 %a, -3840764 ret i64 %1765}766 767define i128 @muli128_m3840(i128 %a) nounwind {768; XTENSA-LABEL: muli128_m3840:769; XTENSA: # %bb.0:770; XTENSA-NEXT: addi a8, a1, -64771; XTENSA-NEXT: or a1, a8, a8772; XTENSA-NEXT: s32i a0, a1, 60 # 4-byte Folded Spill773; XTENSA-NEXT: s32i a12, a1, 56 # 4-byte Folded Spill774; XTENSA-NEXT: s32i a13, a1, 52 # 4-byte Folded Spill775; XTENSA-NEXT: s32i a14, a1, 48 # 4-byte Folded Spill776; XTENSA-NEXT: s32i a15, a1, 44 # 4-byte Folded Spill777; XTENSA-NEXT: s32i a5, a1, 20 # 4-byte Folded Spill778; XTENSA-NEXT: s32i a4, a1, 16 # 4-byte Folded Spill779; XTENSA-NEXT: or a13, a3, a3780; XTENSA-NEXT: l32r a15, .LCPI30_0781; XTENSA-NEXT: movi a12, 0782; XTENSA-NEXT: l32r a8, .LCPI30_1783; XTENSA-NEXT: s32i a2, a1, 36 # 4-byte Folded Spill784; XTENSA-NEXT: or a3, a12, a12785; XTENSA-NEXT: or a4, a15, a15786; XTENSA-NEXT: or a5, a12, a12787; XTENSA-NEXT: callx0 a8788; XTENSA-NEXT: s32i a2, a1, 28 # 4-byte Folded Spill789; XTENSA-NEXT: or a14, a3, a3790; XTENSA-NEXT: l32r a8, .LCPI30_2791; XTENSA-NEXT: s32i a13, a1, 40 # 4-byte Folded Spill792; XTENSA-NEXT: or a2, a13, a13793; XTENSA-NEXT: or a3, a12, a12794; XTENSA-NEXT: s32i a15, a1, 12 # 4-byte Folded Spill795; XTENSA-NEXT: or a4, a15, a15796; XTENSA-NEXT: or a5, a12, a12797; XTENSA-NEXT: callx0 a8798; XTENSA-NEXT: add a13, a2, a14799; XTENSA-NEXT: movi a15, 1800; XTENSA-NEXT: or a8, a15, a15801; XTENSA-NEXT: bltu a13, a2, .LBB30_2802; XTENSA-NEXT: # %bb.1:803; XTENSA-NEXT: or a8, a12, a12804; XTENSA-NEXT: .LBB30_2:805; XTENSA-NEXT: add a8, a3, a8806; XTENSA-NEXT: s32i a8, a1, 32 # 4-byte Folded Spill807; XTENSA-NEXT: movi a14, -1808; XTENSA-NEXT: l32r a8, .LCPI30_3809; XTENSA-NEXT: l32i a2, a1, 36 # 4-byte Folded Reload810; XTENSA-NEXT: or a3, a12, a12811; XTENSA-NEXT: or a4, a14, a14812; XTENSA-NEXT: or a5, a12, a12813; XTENSA-NEXT: callx0 a8814; XTENSA-NEXT: add a9, a2, a13815; XTENSA-NEXT: or a8, a15, a15816; XTENSA-NEXT: s32i a9, a1, 24 # 4-byte Folded Spill817; XTENSA-NEXT: bltu a9, a2, .LBB30_4818; XTENSA-NEXT: # %bb.3:819; XTENSA-NEXT: or a8, a12, a12820; XTENSA-NEXT: .LBB30_4:821; XTENSA-NEXT: add a8, a3, a8822; XTENSA-NEXT: l32i a9, a1, 32 # 4-byte Folded Reload823; XTENSA-NEXT: add a13, a9, a8824; XTENSA-NEXT: l32r a8, .LCPI30_4825; XTENSA-NEXT: l32i a2, a1, 40 # 4-byte Folded Reload826; XTENSA-NEXT: or a3, a12, a12827; XTENSA-NEXT: or a4, a14, a14828; XTENSA-NEXT: or a5, a12, a12829; XTENSA-NEXT: callx0 a8830; XTENSA-NEXT: s32i a3, a1, 4 # 4-byte Folded Spill831; XTENSA-NEXT: s32i a13, a1, 8 # 4-byte Folded Spill832; XTENSA-NEXT: s32i a2, a1, 0 # 4-byte Folded Spill833; XTENSA-NEXT: add a13, a2, a13834; XTENSA-NEXT: l32r a8, .LCPI30_5835; XTENSA-NEXT: l32i a2, a1, 16 # 4-byte Folded Reload836; XTENSA-NEXT: l32i a3, a1, 20 # 4-byte Folded Reload837; XTENSA-NEXT: l32i a4, a1, 12 # 4-byte Folded Reload838; XTENSA-NEXT: or a5, a14, a14839; XTENSA-NEXT: callx0 a8840; XTENSA-NEXT: s32i a2, a1, 16 # 4-byte Folded Spill841; XTENSA-NEXT: s32i a3, a1, 20 # 4-byte Folded Spill842; XTENSA-NEXT: l32r a8, .LCPI30_6843; XTENSA-NEXT: l32i a2, a1, 36 # 4-byte Folded Reload844; XTENSA-NEXT: l32i a3, a1, 40 # 4-byte Folded Reload845; XTENSA-NEXT: or a4, a14, a14846; XTENSA-NEXT: or a5, a14, a14847; XTENSA-NEXT: callx0 a8848; XTENSA-NEXT: l32i a8, a1, 16 # 4-byte Folded Reload849; XTENSA-NEXT: add a9, a2, a8850; XTENSA-NEXT: add a4, a13, a9851; XTENSA-NEXT: or a8, a15, a15852; XTENSA-NEXT: bltu a4, a13, .LBB30_6853; XTENSA-NEXT: # %bb.5:854; XTENSA-NEXT: or a8, a12, a12855; XTENSA-NEXT: .LBB30_6:856; XTENSA-NEXT: or a10, a15, a15857; XTENSA-NEXT: l32i a11, a1, 0 # 4-byte Folded Reload858; XTENSA-NEXT: bltu a13, a11, .LBB30_8859; XTENSA-NEXT: # %bb.7:860; XTENSA-NEXT: or a10, a12, a12861; XTENSA-NEXT: .LBB30_8:862; XTENSA-NEXT: or a11, a15, a15863; XTENSA-NEXT: l32i a7, a1, 32 # 4-byte Folded Reload864; XTENSA-NEXT: l32i a6, a1, 8 # 4-byte Folded Reload865; XTENSA-NEXT: bltu a6, a7, .LBB30_10866; XTENSA-NEXT: # %bb.9:867; XTENSA-NEXT: or a11, a12, a12868; XTENSA-NEXT: .LBB30_10:869; XTENSA-NEXT: l32i a7, a1, 4 # 4-byte Folded Reload870; XTENSA-NEXT: add a11, a7, a11871; XTENSA-NEXT: add a10, a11, a10872; XTENSA-NEXT: bltu a9, a2, .LBB30_12873; XTENSA-NEXT: # %bb.11:874; XTENSA-NEXT: or a15, a12, a12875; XTENSA-NEXT: .LBB30_12:876; XTENSA-NEXT: l32i a9, a1, 20 # 4-byte Folded Reload877; XTENSA-NEXT: add a9, a3, a9878; XTENSA-NEXT: add a9, a9, a15879; XTENSA-NEXT: add a9, a10, a9880; XTENSA-NEXT: add a5, a9, a8881; XTENSA-NEXT: l32i a2, a1, 28 # 4-byte Folded Reload882; XTENSA-NEXT: l32i a3, a1, 24 # 4-byte Folded Reload883; XTENSA-NEXT: l32i a15, a1, 44 # 4-byte Folded Reload884; XTENSA-NEXT: l32i a14, a1, 48 # 4-byte Folded Reload885; XTENSA-NEXT: l32i a13, a1, 52 # 4-byte Folded Reload886; XTENSA-NEXT: l32i a12, a1, 56 # 4-byte Folded Reload887; XTENSA-NEXT: l32i a0, a1, 60 # 4-byte Folded Reload888; XTENSA-NEXT: addi a8, a1, 64889; XTENSA-NEXT: or a1, a8, a8890; XTENSA-NEXT: ret891;892; XTENSA-MUL-LABEL: muli128_m3840:893; XTENSA-MUL: # %bb.0:894; XTENSA-MUL-NEXT: addi a8, a1, -48895; XTENSA-MUL-NEXT: or a1, a8, a8896; XTENSA-MUL-NEXT: s32i a12, a1, 32 # 4-byte Folded Spill897; XTENSA-MUL-NEXT: s32i a13, a1, 28 # 4-byte Folded Spill898; XTENSA-MUL-NEXT: s32i a14, a1, 24 # 4-byte Folded Spill899; XTENSA-MUL-NEXT: s32i a15, a1, 20 # 4-byte Folded Spill900; XTENSA-MUL-NEXT: s32i a5, a1, 16 # 4-byte Folded Spill901; XTENSA-MUL-NEXT: l32r a10, .LCPI30_0902; XTENSA-MUL-NEXT: muluh a8, a2, a10903; XTENSA-MUL-NEXT: mull a7, a3, a10904; XTENSA-MUL-NEXT: add a8, a7, a8905; XTENSA-MUL-NEXT: movi a5, 0906; XTENSA-MUL-NEXT: movi a11, 1907; XTENSA-MUL-NEXT: or a9, a11, a11908; XTENSA-MUL-NEXT: bltu a8, a7, .LBB30_2909; XTENSA-MUL-NEXT: # %bb.1:910; XTENSA-MUL-NEXT: or a9, a5, a5911; XTENSA-MUL-NEXT: .LBB30_2:912; XTENSA-MUL-NEXT: muluh a7, a3, a10913; XTENSA-MUL-NEXT: add a15, a7, a9914; XTENSA-MUL-NEXT: sub a8, a8, a2915; XTENSA-MUL-NEXT: neg a7, a2916; XTENSA-MUL-NEXT: or a9, a11, a11917; XTENSA-MUL-NEXT: s32i a8, a1, 12 # 4-byte Folded Spill918; XTENSA-MUL-NEXT: s32i a7, a1, 8 # 4-byte Folded Spill919; XTENSA-MUL-NEXT: bltu a8, a7, .LBB30_4920; XTENSA-MUL-NEXT: # %bb.3:921; XTENSA-MUL-NEXT: or a9, a5, a5922; XTENSA-MUL-NEXT: .LBB30_4:923; XTENSA-MUL-NEXT: movi a8, -1924; XTENSA-MUL-NEXT: muluh a13, a2, a8925; XTENSA-MUL-NEXT: add a9, a13, a9926; XTENSA-MUL-NEXT: add a12, a15, a9927; XTENSA-MUL-NEXT: sub a6, a12, a3928; XTENSA-MUL-NEXT: mull a9, a4, a10929; XTENSA-MUL-NEXT: sub a14, a9, a2930; XTENSA-MUL-NEXT: add a9, a6, a14931; XTENSA-MUL-NEXT: or a7, a11, a11932; XTENSA-MUL-NEXT: s32i a9, a1, 4 # 4-byte Folded Spill933; XTENSA-MUL-NEXT: bltu a9, a6, .LBB30_6934; XTENSA-MUL-NEXT: # %bb.5:935; XTENSA-MUL-NEXT: or a7, a5, a5936; XTENSA-MUL-NEXT: .LBB30_6:937; XTENSA-MUL-NEXT: s32i a7, a1, 0 # 4-byte Folded Spill938; XTENSA-MUL-NEXT: neg a9, a3939; XTENSA-MUL-NEXT: or a7, a11, a11940; XTENSA-MUL-NEXT: bltu a6, a9, .LBB30_8941; XTENSA-MUL-NEXT: # %bb.7:942; XTENSA-MUL-NEXT: or a7, a5, a5943; XTENSA-MUL-NEXT: .LBB30_8:944; XTENSA-MUL-NEXT: or a6, a11, a11945; XTENSA-MUL-NEXT: bltu a12, a15, .LBB30_10946; XTENSA-MUL-NEXT: # %bb.9:947; XTENSA-MUL-NEXT: or a6, a5, a5948; XTENSA-MUL-NEXT: .LBB30_10:949; XTENSA-MUL-NEXT: muluh a8, a3, a8950; XTENSA-MUL-NEXT: add a8, a8, a6951; XTENSA-MUL-NEXT: add a8, a8, a7952; XTENSA-MUL-NEXT: l32i a9, a1, 16 # 4-byte Folded Reload953; XTENSA-MUL-NEXT: mull a9, a9, a10954; XTENSA-MUL-NEXT: muluh a7, a4, a10955; XTENSA-MUL-NEXT: sub a7, a7, a4956; XTENSA-MUL-NEXT: add a9, a7, a9957; XTENSA-MUL-NEXT: sub a7, a13, a2958; XTENSA-MUL-NEXT: sub a7, a7, a3959; XTENSA-MUL-NEXT: add a7, a7, a9960; XTENSA-MUL-NEXT: l32i a9, a1, 8 # 4-byte Folded Reload961; XTENSA-MUL-NEXT: bltu a14, a9, .LBB30_12962; XTENSA-MUL-NEXT: # %bb.11:963; XTENSA-MUL-NEXT: or a11, a5, a5964; XTENSA-MUL-NEXT: .LBB30_12:965; XTENSA-MUL-NEXT: add a9, a7, a11966; XTENSA-MUL-NEXT: add a8, a8, a9967; XTENSA-MUL-NEXT: l32i a9, a1, 0 # 4-byte Folded Reload968; XTENSA-MUL-NEXT: add a5, a8, a9969; XTENSA-MUL-NEXT: mull a2, a2, a10970; XTENSA-MUL-NEXT: l32i a3, a1, 12 # 4-byte Folded Reload971; XTENSA-MUL-NEXT: l32i a4, a1, 4 # 4-byte Folded Reload972; XTENSA-MUL-NEXT: l32i a15, a1, 20 # 4-byte Folded Reload973; XTENSA-MUL-NEXT: l32i a14, a1, 24 # 4-byte Folded Reload974; XTENSA-MUL-NEXT: l32i a13, a1, 28 # 4-byte Folded Reload975; XTENSA-MUL-NEXT: l32i a12, a1, 32 # 4-byte Folded Reload976; XTENSA-MUL-NEXT: addi a8, a1, 48977; XTENSA-MUL-NEXT: or a1, a8, a8978; XTENSA-MUL-NEXT: ret979 %1 = mul i128 %a, -3840980 ret i128 %1981}982 983define i128 @muli128_m63(i128 %a) nounwind {984; XTENSA-LABEL: muli128_m63:985; XTENSA: # %bb.0:986; XTENSA-NEXT: addi a8, a1, -64987; XTENSA-NEXT: or a1, a8, a8988; XTENSA-NEXT: s32i a0, a1, 60 # 4-byte Folded Spill989; XTENSA-NEXT: s32i a12, a1, 56 # 4-byte Folded Spill990; XTENSA-NEXT: s32i a13, a1, 52 # 4-byte Folded Spill991; XTENSA-NEXT: s32i a14, a1, 48 # 4-byte Folded Spill992; XTENSA-NEXT: s32i a15, a1, 44 # 4-byte Folded Spill993; XTENSA-NEXT: s32i a5, a1, 20 # 4-byte Folded Spill994; XTENSA-NEXT: s32i a4, a1, 16 # 4-byte Folded Spill995; XTENSA-NEXT: or a13, a3, a3996; XTENSA-NEXT: movi a15, -63997; XTENSA-NEXT: movi a12, 0998; XTENSA-NEXT: l32r a8, .LCPI31_0999; XTENSA-NEXT: s32i a2, a1, 36 # 4-byte Folded Spill1000; XTENSA-NEXT: or a3, a12, a121001; XTENSA-NEXT: or a4, a15, a151002; XTENSA-NEXT: or a5, a12, a121003; XTENSA-NEXT: callx0 a81004; XTENSA-NEXT: s32i a2, a1, 28 # 4-byte Folded Spill1005; XTENSA-NEXT: or a14, a3, a31006; XTENSA-NEXT: l32r a8, .LCPI31_11007; XTENSA-NEXT: s32i a13, a1, 40 # 4-byte Folded Spill1008; XTENSA-NEXT: or a2, a13, a131009; XTENSA-NEXT: or a3, a12, a121010; XTENSA-NEXT: s32i a15, a1, 12 # 4-byte Folded Spill1011; XTENSA-NEXT: or a4, a15, a151012; XTENSA-NEXT: or a5, a12, a121013; XTENSA-NEXT: callx0 a81014; XTENSA-NEXT: add a13, a2, a141015; XTENSA-NEXT: movi a15, 11016; XTENSA-NEXT: or a8, a15, a151017; XTENSA-NEXT: bltu a13, a2, .LBB31_21018; XTENSA-NEXT: # %bb.1:1019; XTENSA-NEXT: or a8, a12, a121020; XTENSA-NEXT: .LBB31_2:1021; XTENSA-NEXT: add a8, a3, a81022; XTENSA-NEXT: s32i a8, a1, 32 # 4-byte Folded Spill1023; XTENSA-NEXT: movi a14, -11024; XTENSA-NEXT: l32r a8, .LCPI31_21025; XTENSA-NEXT: l32i a2, a1, 36 # 4-byte Folded Reload1026; XTENSA-NEXT: or a3, a12, a121027; XTENSA-NEXT: or a4, a14, a141028; XTENSA-NEXT: or a5, a12, a121029; XTENSA-NEXT: callx0 a81030; XTENSA-NEXT: add a9, a2, a131031; XTENSA-NEXT: or a8, a15, a151032; XTENSA-NEXT: s32i a9, a1, 24 # 4-byte Folded Spill1033; XTENSA-NEXT: bltu a9, a2, .LBB31_41034; XTENSA-NEXT: # %bb.3:1035; XTENSA-NEXT: or a8, a12, a121036; XTENSA-NEXT: .LBB31_4:1037; XTENSA-NEXT: add a8, a3, a81038; XTENSA-NEXT: l32i a9, a1, 32 # 4-byte Folded Reload1039; XTENSA-NEXT: add a13, a9, a81040; XTENSA-NEXT: l32r a8, .LCPI31_31041; XTENSA-NEXT: l32i a2, a1, 40 # 4-byte Folded Reload1042; XTENSA-NEXT: or a3, a12, a121043; XTENSA-NEXT: or a4, a14, a141044; XTENSA-NEXT: or a5, a12, a121045; XTENSA-NEXT: callx0 a81046; XTENSA-NEXT: s32i a3, a1, 4 # 4-byte Folded Spill1047; XTENSA-NEXT: s32i a13, a1, 8 # 4-byte Folded Spill1048; XTENSA-NEXT: s32i a2, a1, 0 # 4-byte Folded Spill1049; XTENSA-NEXT: add a13, a2, a131050; XTENSA-NEXT: l32r a8, .LCPI31_41051; XTENSA-NEXT: l32i a2, a1, 16 # 4-byte Folded Reload1052; XTENSA-NEXT: l32i a3, a1, 20 # 4-byte Folded Reload1053; XTENSA-NEXT: l32i a4, a1, 12 # 4-byte Folded Reload1054; XTENSA-NEXT: or a5, a14, a141055; XTENSA-NEXT: callx0 a81056; XTENSA-NEXT: s32i a2, a1, 16 # 4-byte Folded Spill1057; XTENSA-NEXT: s32i a3, a1, 20 # 4-byte Folded Spill1058; XTENSA-NEXT: l32r a8, .LCPI31_51059; XTENSA-NEXT: l32i a2, a1, 36 # 4-byte Folded Reload1060; XTENSA-NEXT: l32i a3, a1, 40 # 4-byte Folded Reload1061; XTENSA-NEXT: or a4, a14, a141062; XTENSA-NEXT: or a5, a14, a141063; XTENSA-NEXT: callx0 a81064; XTENSA-NEXT: l32i a8, a1, 16 # 4-byte Folded Reload1065; XTENSA-NEXT: add a9, a2, a81066; XTENSA-NEXT: add a4, a13, a91067; XTENSA-NEXT: or a8, a15, a151068; XTENSA-NEXT: bltu a4, a13, .LBB31_61069; XTENSA-NEXT: # %bb.5:1070; XTENSA-NEXT: or a8, a12, a121071; XTENSA-NEXT: .LBB31_6:1072; XTENSA-NEXT: or a10, a15, a151073; XTENSA-NEXT: l32i a11, a1, 0 # 4-byte Folded Reload1074; XTENSA-NEXT: bltu a13, a11, .LBB31_81075; XTENSA-NEXT: # %bb.7:1076; XTENSA-NEXT: or a10, a12, a121077; XTENSA-NEXT: .LBB31_8:1078; XTENSA-NEXT: or a11, a15, a151079; XTENSA-NEXT: l32i a7, a1, 32 # 4-byte Folded Reload1080; XTENSA-NEXT: l32i a6, a1, 8 # 4-byte Folded Reload1081; XTENSA-NEXT: bltu a6, a7, .LBB31_101082; XTENSA-NEXT: # %bb.9:1083; XTENSA-NEXT: or a11, a12, a121084; XTENSA-NEXT: .LBB31_10:1085; XTENSA-NEXT: l32i a7, a1, 4 # 4-byte Folded Reload1086; XTENSA-NEXT: add a11, a7, a111087; XTENSA-NEXT: add a10, a11, a101088; XTENSA-NEXT: bltu a9, a2, .LBB31_121089; XTENSA-NEXT: # %bb.11:1090; XTENSA-NEXT: or a15, a12, a121091; XTENSA-NEXT: .LBB31_12:1092; XTENSA-NEXT: l32i a9, a1, 20 # 4-byte Folded Reload1093; XTENSA-NEXT: add a9, a3, a91094; XTENSA-NEXT: add a9, a9, a151095; XTENSA-NEXT: add a9, a10, a91096; XTENSA-NEXT: add a5, a9, a81097; XTENSA-NEXT: l32i a2, a1, 28 # 4-byte Folded Reload1098; XTENSA-NEXT: l32i a3, a1, 24 # 4-byte Folded Reload1099; XTENSA-NEXT: l32i a15, a1, 44 # 4-byte Folded Reload1100; XTENSA-NEXT: l32i a14, a1, 48 # 4-byte Folded Reload1101; XTENSA-NEXT: l32i a13, a1, 52 # 4-byte Folded Reload1102; XTENSA-NEXT: l32i a12, a1, 56 # 4-byte Folded Reload1103; XTENSA-NEXT: l32i a0, a1, 60 # 4-byte Folded Reload1104; XTENSA-NEXT: addi a8, a1, 641105; XTENSA-NEXT: or a1, a8, a81106; XTENSA-NEXT: ret1107;1108; XTENSA-MUL-LABEL: muli128_m63:1109; XTENSA-MUL: # %bb.0:1110; XTENSA-MUL-NEXT: addi a8, a1, -481111; XTENSA-MUL-NEXT: or a1, a8, a81112; XTENSA-MUL-NEXT: s32i a12, a1, 32 # 4-byte Folded Spill1113; XTENSA-MUL-NEXT: s32i a13, a1, 28 # 4-byte Folded Spill1114; XTENSA-MUL-NEXT: s32i a14, a1, 24 # 4-byte Folded Spill1115; XTENSA-MUL-NEXT: s32i a15, a1, 20 # 4-byte Folded Spill1116; XTENSA-MUL-NEXT: s32i a5, a1, 16 # 4-byte Folded Spill1117; XTENSA-MUL-NEXT: movi a10, -631118; XTENSA-MUL-NEXT: muluh a8, a2, a101119; XTENSA-MUL-NEXT: mull a7, a3, a101120; XTENSA-MUL-NEXT: add a8, a7, a81121; XTENSA-MUL-NEXT: movi a5, 01122; XTENSA-MUL-NEXT: movi a11, 11123; XTENSA-MUL-NEXT: or a9, a11, a111124; XTENSA-MUL-NEXT: bltu a8, a7, .LBB31_21125; XTENSA-MUL-NEXT: # %bb.1:1126; XTENSA-MUL-NEXT: or a9, a5, a51127; XTENSA-MUL-NEXT: .LBB31_2:1128; XTENSA-MUL-NEXT: muluh a7, a3, a101129; XTENSA-MUL-NEXT: add a15, a7, a91130; XTENSA-MUL-NEXT: sub a8, a8, a21131; XTENSA-MUL-NEXT: neg a7, a21132; XTENSA-MUL-NEXT: or a9, a11, a111133; XTENSA-MUL-NEXT: s32i a8, a1, 12 # 4-byte Folded Spill1134; XTENSA-MUL-NEXT: s32i a7, a1, 8 # 4-byte Folded Spill1135; XTENSA-MUL-NEXT: bltu a8, a7, .LBB31_41136; XTENSA-MUL-NEXT: # %bb.3:1137; XTENSA-MUL-NEXT: or a9, a5, a51138; XTENSA-MUL-NEXT: .LBB31_4:1139; XTENSA-MUL-NEXT: movi a8, -11140; XTENSA-MUL-NEXT: muluh a13, a2, a81141; XTENSA-MUL-NEXT: add a9, a13, a91142; XTENSA-MUL-NEXT: add a12, a15, a91143; XTENSA-MUL-NEXT: sub a6, a12, a31144; XTENSA-MUL-NEXT: mull a9, a4, a101145; XTENSA-MUL-NEXT: sub a14, a9, a21146; XTENSA-MUL-NEXT: add a9, a6, a141147; XTENSA-MUL-NEXT: or a7, a11, a111148; XTENSA-MUL-NEXT: s32i a9, a1, 4 # 4-byte Folded Spill1149; XTENSA-MUL-NEXT: bltu a9, a6, .LBB31_61150; XTENSA-MUL-NEXT: # %bb.5:1151; XTENSA-MUL-NEXT: or a7, a5, a51152; XTENSA-MUL-NEXT: .LBB31_6:1153; XTENSA-MUL-NEXT: s32i a7, a1, 0 # 4-byte Folded Spill1154; XTENSA-MUL-NEXT: neg a9, a31155; XTENSA-MUL-NEXT: or a7, a11, a111156; XTENSA-MUL-NEXT: bltu a6, a9, .LBB31_81157; XTENSA-MUL-NEXT: # %bb.7:1158; XTENSA-MUL-NEXT: or a7, a5, a51159; XTENSA-MUL-NEXT: .LBB31_8:1160; XTENSA-MUL-NEXT: or a6, a11, a111161; XTENSA-MUL-NEXT: bltu a12, a15, .LBB31_101162; XTENSA-MUL-NEXT: # %bb.9:1163; XTENSA-MUL-NEXT: or a6, a5, a51164; XTENSA-MUL-NEXT: .LBB31_10:1165; XTENSA-MUL-NEXT: muluh a8, a3, a81166; XTENSA-MUL-NEXT: add a8, a8, a61167; XTENSA-MUL-NEXT: add a8, a8, a71168; XTENSA-MUL-NEXT: l32i a9, a1, 16 # 4-byte Folded Reload1169; XTENSA-MUL-NEXT: mull a9, a9, a101170; XTENSA-MUL-NEXT: muluh a7, a4, a101171; XTENSA-MUL-NEXT: sub a7, a7, a41172; XTENSA-MUL-NEXT: add a9, a7, a91173; XTENSA-MUL-NEXT: sub a7, a13, a21174; XTENSA-MUL-NEXT: sub a7, a7, a31175; XTENSA-MUL-NEXT: add a7, a7, a91176; XTENSA-MUL-NEXT: l32i a9, a1, 8 # 4-byte Folded Reload1177; XTENSA-MUL-NEXT: bltu a14, a9, .LBB31_121178; XTENSA-MUL-NEXT: # %bb.11:1179; XTENSA-MUL-NEXT: or a11, a5, a51180; XTENSA-MUL-NEXT: .LBB31_12:1181; XTENSA-MUL-NEXT: add a9, a7, a111182; XTENSA-MUL-NEXT: add a8, a8, a91183; XTENSA-MUL-NEXT: l32i a9, a1, 0 # 4-byte Folded Reload1184; XTENSA-MUL-NEXT: add a5, a8, a91185; XTENSA-MUL-NEXT: mull a2, a2, a101186; XTENSA-MUL-NEXT: l32i a3, a1, 12 # 4-byte Folded Reload1187; XTENSA-MUL-NEXT: l32i a4, a1, 4 # 4-byte Folded Reload1188; XTENSA-MUL-NEXT: l32i a15, a1, 20 # 4-byte Folded Reload1189; XTENSA-MUL-NEXT: l32i a14, a1, 24 # 4-byte Folded Reload1190; XTENSA-MUL-NEXT: l32i a13, a1, 28 # 4-byte Folded Reload1191; XTENSA-MUL-NEXT: l32i a12, a1, 32 # 4-byte Folded Reload1192; XTENSA-MUL-NEXT: addi a8, a1, 481193; XTENSA-MUL-NEXT: or a1, a8, a81194; XTENSA-MUL-NEXT: ret1195 %1 = mul i128 %a, -631196 ret i128 %11197}1198 1199define i64 @mulhsu_i64(i64 %a, i64 %b) nounwind {1200; XTENSA-LABEL: mulhsu_i64:1201; XTENSA: # %bb.0:1202; XTENSA-NEXT: addi a8, a1, -641203; XTENSA-NEXT: or a1, a8, a81204; XTENSA-NEXT: s32i a0, a1, 52 # 4-byte Folded Spill1205; XTENSA-NEXT: s32i a12, a1, 48 # 4-byte Folded Spill1206; XTENSA-NEXT: s32i a13, a1, 44 # 4-byte Folded Spill1207; XTENSA-NEXT: s32i a14, a1, 40 # 4-byte Folded Spill1208; XTENSA-NEXT: s32i a15, a1, 36 # 4-byte Folded Spill1209; XTENSA-NEXT: s32i a5, a1, 28 # 4-byte Folded Spill1210; XTENSA-NEXT: or a13, a4, a41211; XTENSA-NEXT: or a15, a3, a31212; XTENSA-NEXT: movi a12, 01213; XTENSA-NEXT: l32r a8, .LCPI32_01214; XTENSA-NEXT: s32i a2, a1, 32 # 4-byte Folded Spill1215; XTENSA-NEXT: or a3, a12, a121216; XTENSA-NEXT: or a5, a12, a121217; XTENSA-NEXT: callx0 a81218; XTENSA-NEXT: or a14, a3, a31219; XTENSA-NEXT: l32r a8, .LCPI32_11220; XTENSA-NEXT: s32i a15, a1, 20 # 4-byte Folded Spill1221; XTENSA-NEXT: or a2, a15, a151222; XTENSA-NEXT: or a3, a12, a121223; XTENSA-NEXT: s32i a13, a1, 16 # 4-byte Folded Spill1224; XTENSA-NEXT: or a4, a13, a131225; XTENSA-NEXT: or a5, a12, a121226; XTENSA-NEXT: callx0 a81227; XTENSA-NEXT: add a14, a2, a141228; XTENSA-NEXT: movi a15, 11229; XTENSA-NEXT: or a8, a15, a151230; XTENSA-NEXT: bltu a14, a2, .LBB32_21231; XTENSA-NEXT: # %bb.1:1232; XTENSA-NEXT: or a8, a12, a121233; XTENSA-NEXT: .LBB32_2:1234; XTENSA-NEXT: add a8, a3, a81235; XTENSA-NEXT: s32i a8, a1, 24 # 4-byte Folded Spill1236; XTENSA-NEXT: l32r a8, .LCPI32_21237; XTENSA-NEXT: l32i a2, a1, 32 # 4-byte Folded Reload1238; XTENSA-NEXT: or a3, a12, a121239; XTENSA-NEXT: l32i a4, a1, 28 # 4-byte Folded Reload1240; XTENSA-NEXT: or a5, a12, a121241; XTENSA-NEXT: callx0 a81242; XTENSA-NEXT: add a9, a2, a141243; XTENSA-NEXT: or a8, a15, a151244; XTENSA-NEXT: bltu a9, a2, .LBB32_41245; XTENSA-NEXT: # %bb.3:1246; XTENSA-NEXT: or a8, a12, a121247; XTENSA-NEXT: .LBB32_4:1248; XTENSA-NEXT: add a8, a3, a81249; XTENSA-NEXT: l32i a9, a1, 24 # 4-byte Folded Reload1250; XTENSA-NEXT: add a14, a9, a81251; XTENSA-NEXT: l32r a8, .LCPI32_31252; XTENSA-NEXT: l32i a2, a1, 20 # 4-byte Folded Reload1253; XTENSA-NEXT: or a3, a12, a121254; XTENSA-NEXT: l32i a13, a1, 28 # 4-byte Folded Reload1255; XTENSA-NEXT: or a4, a13, a131256; XTENSA-NEXT: or a5, a12, a121257; XTENSA-NEXT: callx0 a81258; XTENSA-NEXT: s32i a3, a1, 8 # 4-byte Folded Spill1259; XTENSA-NEXT: s32i a14, a1, 12 # 4-byte Folded Spill1260; XTENSA-NEXT: s32i a2, a1, 4 # 4-byte Folded Spill1261; XTENSA-NEXT: add a14, a2, a141262; XTENSA-NEXT: l32r a8, .LCPI32_41263; XTENSA-NEXT: l32i a2, a1, 16 # 4-byte Folded Reload1264; XTENSA-NEXT: or a3, a13, a131265; XTENSA-NEXT: or a4, a12, a121266; XTENSA-NEXT: or a5, a12, a121267; XTENSA-NEXT: callx0 a81268; XTENSA-NEXT: s32i a2, a1, 0 # 4-byte Folded Spill1269; XTENSA-NEXT: s32i a3, a1, 16 # 4-byte Folded Spill1270; XTENSA-NEXT: srai a2, a13, 311271; XTENSA-NEXT: l32r a8, .LCPI32_51272; XTENSA-NEXT: or a3, a2, a21273; XTENSA-NEXT: l32i a4, a1, 32 # 4-byte Folded Reload1274; XTENSA-NEXT: l32i a5, a1, 20 # 4-byte Folded Reload1275; XTENSA-NEXT: callx0 a81276; XTENSA-NEXT: or a8, a2, a21277; XTENSA-NEXT: l32i a9, a1, 0 # 4-byte Folded Reload1278; XTENSA-NEXT: add a10, a8, a91279; XTENSA-NEXT: add a2, a14, a101280; XTENSA-NEXT: or a9, a15, a151281; XTENSA-NEXT: bltu a2, a14, .LBB32_61282; XTENSA-NEXT: # %bb.5:1283; XTENSA-NEXT: or a9, a12, a121284; XTENSA-NEXT: .LBB32_6:1285; XTENSA-NEXT: or a11, a15, a151286; XTENSA-NEXT: l32i a7, a1, 4 # 4-byte Folded Reload1287; XTENSA-NEXT: bltu a14, a7, .LBB32_81288; XTENSA-NEXT: # %bb.7:1289; XTENSA-NEXT: or a11, a12, a121290; XTENSA-NEXT: .LBB32_8:1291; XTENSA-NEXT: or a7, a15, a151292; XTENSA-NEXT: l32i a6, a1, 24 # 4-byte Folded Reload1293; XTENSA-NEXT: l32i a5, a1, 12 # 4-byte Folded Reload1294; XTENSA-NEXT: bltu a5, a6, .LBB32_101295; XTENSA-NEXT: # %bb.9:1296; XTENSA-NEXT: or a7, a12, a121297; XTENSA-NEXT: .LBB32_10:1298; XTENSA-NEXT: l32i a6, a1, 8 # 4-byte Folded Reload1299; XTENSA-NEXT: add a7, a6, a71300; XTENSA-NEXT: add a11, a7, a111301; XTENSA-NEXT: bltu a10, a8, .LBB32_121302; XTENSA-NEXT: # %bb.11:1303; XTENSA-NEXT: or a15, a12, a121304; XTENSA-NEXT: .LBB32_12:1305; XTENSA-NEXT: l32i a8, a1, 16 # 4-byte Folded Reload1306; XTENSA-NEXT: add a8, a3, a81307; XTENSA-NEXT: add a8, a8, a151308; XTENSA-NEXT: add a8, a11, a81309; XTENSA-NEXT: add a3, a8, a91310; XTENSA-NEXT: l32i a15, a1, 36 # 4-byte Folded Reload1311; XTENSA-NEXT: l32i a14, a1, 40 # 4-byte Folded Reload1312; XTENSA-NEXT: l32i a13, a1, 44 # 4-byte Folded Reload1313; XTENSA-NEXT: l32i a12, a1, 48 # 4-byte Folded Reload1314; XTENSA-NEXT: l32i a0, a1, 52 # 4-byte Folded Reload1315; XTENSA-NEXT: addi a8, a1, 641316; XTENSA-NEXT: or a1, a8, a81317; XTENSA-NEXT: ret1318;1319; XTENSA-MUL-LABEL: mulhsu_i64:1320; XTENSA-MUL: # %bb.0:1321; XTENSA-MUL-NEXT: addi a8, a1, -161322; XTENSA-MUL-NEXT: or a1, a8, a81323; XTENSA-MUL-NEXT: s32i a12, a1, 12 # 4-byte Folded Spill1324; XTENSA-MUL-NEXT: s32i a13, a1, 8 # 4-byte Folded Spill1325; XTENSA-MUL-NEXT: s32i a14, a1, 4 # 4-byte Folded Spill1326; XTENSA-MUL-NEXT: s32i a15, a1, 0 # 4-byte Folded Spill1327; XTENSA-MUL-NEXT: muluh a8, a2, a41328; XTENSA-MUL-NEXT: mull a7, a3, a41329; XTENSA-MUL-NEXT: add a8, a7, a81330; XTENSA-MUL-NEXT: movi a10, 01331; XTENSA-MUL-NEXT: movi a9, 11332; XTENSA-MUL-NEXT: or a11, a9, a91333; XTENSA-MUL-NEXT: bltu a8, a7, .LBB32_21334; XTENSA-MUL-NEXT: # %bb.1:1335; XTENSA-MUL-NEXT: or a11, a10, a101336; XTENSA-MUL-NEXT: .LBB32_2:1337; XTENSA-MUL-NEXT: muluh a7, a3, a41338; XTENSA-MUL-NEXT: add a11, a7, a111339; XTENSA-MUL-NEXT: mull a7, a2, a51340; XTENSA-MUL-NEXT: add a6, a7, a81341; XTENSA-MUL-NEXT: or a8, a9, a91342; XTENSA-MUL-NEXT: bltu a6, a7, .LBB32_41343; XTENSA-MUL-NEXT: # %bb.3:1344; XTENSA-MUL-NEXT: or a8, a10, a101345; XTENSA-MUL-NEXT: .LBB32_4:1346; XTENSA-MUL-NEXT: muluh a7, a2, a51347; XTENSA-MUL-NEXT: add a8, a7, a81348; XTENSA-MUL-NEXT: add a12, a11, a81349; XTENSA-MUL-NEXT: mull a14, a3, a51350; XTENSA-MUL-NEXT: add a15, a14, a121351; XTENSA-MUL-NEXT: srai a6, a5, 311352; XTENSA-MUL-NEXT: mull a7, a6, a21353; XTENSA-MUL-NEXT: add a8, a15, a71354; XTENSA-MUL-NEXT: or a4, a9, a91355; XTENSA-MUL-NEXT: bgeu a8, a15, .LBB32_91356; XTENSA-MUL-NEXT: # %bb.5:1357; XTENSA-MUL-NEXT: or a13, a9, a91358; XTENSA-MUL-NEXT: bgeu a15, a14, .LBB32_101359; XTENSA-MUL-NEXT: .LBB32_6:1360; XTENSA-MUL-NEXT: bltu a12, a11, .LBB32_81361; XTENSA-MUL-NEXT: .LBB32_7:1362; XTENSA-MUL-NEXT: or a9, a10, a101363; XTENSA-MUL-NEXT: .LBB32_8:1364; XTENSA-MUL-NEXT: muluh a10, a3, a51365; XTENSA-MUL-NEXT: add a9, a10, a91366; XTENSA-MUL-NEXT: add a9, a9, a131367; XTENSA-MUL-NEXT: mull a10, a6, a31368; XTENSA-MUL-NEXT: muluh a11, a6, a21369; XTENSA-MUL-NEXT: add a10, a11, a101370; XTENSA-MUL-NEXT: add a10, a10, a71371; XTENSA-MUL-NEXT: add a9, a9, a101372; XTENSA-MUL-NEXT: add a3, a9, a41373; XTENSA-MUL-NEXT: or a2, a8, a81374; XTENSA-MUL-NEXT: l32i a15, a1, 0 # 4-byte Folded Reload1375; XTENSA-MUL-NEXT: l32i a14, a1, 4 # 4-byte Folded Reload1376; XTENSA-MUL-NEXT: l32i a13, a1, 8 # 4-byte Folded Reload1377; XTENSA-MUL-NEXT: l32i a12, a1, 12 # 4-byte Folded Reload1378; XTENSA-MUL-NEXT: addi a8, a1, 161379; XTENSA-MUL-NEXT: or a1, a8, a81380; XTENSA-MUL-NEXT: ret1381; XTENSA-MUL-NEXT: .LBB32_9:1382; XTENSA-MUL-NEXT: or a4, a10, a101383; XTENSA-MUL-NEXT: or a13, a9, a91384; XTENSA-MUL-NEXT: bltu a15, a14, .LBB32_61385; XTENSA-MUL-NEXT: .LBB32_10:1386; XTENSA-MUL-NEXT: or a13, a10, a101387; XTENSA-MUL-NEXT: bgeu a12, a11, .LBB32_71388; XTENSA-MUL-NEXT: j .LBB32_81389 %1 = zext i64 %a to i1281390 %2 = sext i64 %b to i1281391 %3 = mul i128 %1, %21392 %4 = lshr i128 %3, 641393 %5 = trunc i128 %4 to i641394 ret i64 %51395}1396 1397define i8 @muladd_demand(i8 %x, i8 %y) nounwind {1398; XTENSA-LABEL: muladd_demand:1399; XTENSA: # %bb.0:1400; XTENSA-NEXT: slli a8, a2, 11401; XTENSA-NEXT: sub a8, a3, a81402; XTENSA-NEXT: movi a9, 151403; XTENSA-NEXT: and a2, a8, a91404; XTENSA-NEXT: ret1405;1406; XTENSA-MUL-LABEL: muladd_demand:1407; XTENSA-MUL: # %bb.0:1408; XTENSA-MUL-NEXT: slli a8, a2, 11409; XTENSA-MUL-NEXT: sub a8, a3, a81410; XTENSA-MUL-NEXT: movi a9, 151411; XTENSA-MUL-NEXT: and a2, a8, a91412; XTENSA-MUL-NEXT: ret1413 %m = mul i8 %x, 141414 %a = add i8 %y, %m1415 %r = and i8 %a, 151416 ret i8 %r1417}1418 1419define i8 @mulsub_demand(i8 %x, i8 %y) nounwind {1420; XTENSA-LABEL: mulsub_demand:1421; XTENSA: # %bb.0:1422; XTENSA-NEXT: addx2 a8, a2, a31423; XTENSA-NEXT: movi a9, 151424; XTENSA-NEXT: and a2, a8, a91425; XTENSA-NEXT: ret1426;1427; XTENSA-MUL-LABEL: mulsub_demand:1428; XTENSA-MUL: # %bb.0:1429; XTENSA-MUL-NEXT: addx2 a8, a2, a31430; XTENSA-MUL-NEXT: movi a9, 151431; XTENSA-MUL-NEXT: and a2, a8, a91432; XTENSA-MUL-NEXT: ret1433 %m = mul i8 %x, 141434 %a = sub i8 %y, %m1435 %r = and i8 %a, 151436 ret i8 %r1437}1438 1439define i8 @muladd_demand_2(i8 %x, i8 %y) nounwind {1440; XTENSA-LABEL: muladd_demand_2:1441; XTENSA: # %bb.0:1442; XTENSA-NEXT: slli a8, a2, 11443; XTENSA-NEXT: sub a8, a3, a81444; XTENSA-NEXT: movi a9, -161445; XTENSA-NEXT: or a2, a8, a91446; XTENSA-NEXT: ret1447;1448; XTENSA-MUL-LABEL: muladd_demand_2:1449; XTENSA-MUL: # %bb.0:1450; XTENSA-MUL-NEXT: slli a8, a2, 11451; XTENSA-MUL-NEXT: sub a8, a3, a81452; XTENSA-MUL-NEXT: movi a9, -161453; XTENSA-MUL-NEXT: or a2, a8, a91454; XTENSA-MUL-NEXT: ret1455 %m = mul i8 %x, 141456 %a = add i8 %y, %m1457 %r = or i8 %a, 2401458 ret i8 %r1459}1460 1461define i8 @mulsub_demand_2(i8 %x, i8 %y) nounwind {1462; XTENSA-LABEL: mulsub_demand_2:1463; XTENSA: # %bb.0:1464; XTENSA-NEXT: addx2 a8, a2, a31465; XTENSA-NEXT: movi a9, -161466; XTENSA-NEXT: or a2, a8, a91467; XTENSA-NEXT: ret1468;1469; XTENSA-MUL-LABEL: mulsub_demand_2:1470; XTENSA-MUL: # %bb.0:1471; XTENSA-MUL-NEXT: addx2 a8, a2, a31472; XTENSA-MUL-NEXT: movi a9, -161473; XTENSA-MUL-NEXT: or a2, a8, a91474; XTENSA-MUL-NEXT: ret1475 %m = mul i8 %x, 141476 %a = sub i8 %y, %m1477 %r = or i8 %a, 2401478 ret i8 %r1479}1480 1481define signext i32 @mul_imm_2(i32 %a) nounwind {1482; XTENSA-LABEL: mul_imm_2:1483; XTENSA: # %bb.0:1484; XTENSA-NEXT: slli a2, a2, 11485; XTENSA-NEXT: ret1486;1487; XTENSA-MUL-LABEL: mul_imm_2:1488; XTENSA-MUL: # %bb.0:1489; XTENSA-MUL-NEXT: slli a2, a2, 11490; XTENSA-MUL-NEXT: ret1491 %1 = mul i32 %a, 21492 ret i32 %11493}1494 1495define signext i32 @mul_imm_1024(i32 %a) nounwind {1496; XTENSA-LABEL: mul_imm_1024:1497; XTENSA: # %bb.0:1498; XTENSA-NEXT: slli a2, a2, 101499; XTENSA-NEXT: ret1500;1501; XTENSA-MUL-LABEL: mul_imm_1024:1502; XTENSA-MUL: # %bb.0:1503; XTENSA-MUL-NEXT: slli a2, a2, 101504; XTENSA-MUL-NEXT: ret1505 %1 = mul i32 %a, 10241506 ret i32 %11507}1508 1509define signext i32 @mul_imm_16384(i32 %a) nounwind {1510; XTENSA-LABEL: mul_imm_16384:1511; XTENSA: # %bb.0:1512; XTENSA-NEXT: slli a2, a2, 141513; XTENSA-NEXT: ret1514;1515; XTENSA-MUL-LABEL: mul_imm_16384:1516; XTENSA-MUL: # %bb.0:1517; XTENSA-MUL-NEXT: slli a2, a2, 141518; XTENSA-MUL-NEXT: ret1519 %1 = mul i32 %a, 163841520 ret i32 %11521}1522 1523define <4 x i32> @mul_vec_splat_constant(<4 x i32> %a) {1524; XTENSA-LABEL: mul_vec_splat_constant:1525; XTENSA: .cfi_startproc1526; XTENSA-NEXT: # %bb.0:1527; XTENSA-NEXT: slli a2, a2, 21528; XTENSA-NEXT: slli a3, a3, 21529; XTENSA-NEXT: slli a4, a4, 21530; XTENSA-NEXT: slli a5, a5, 21531; XTENSA-NEXT: ret1532;1533; XTENSA-MUL-LABEL: mul_vec_splat_constant:1534; XTENSA-MUL: .cfi_startproc1535; XTENSA-MUL-NEXT: # %bb.0:1536; XTENSA-MUL-NEXT: slli a2, a2, 21537; XTENSA-MUL-NEXT: slli a3, a3, 21538; XTENSA-MUL-NEXT: slli a4, a4, 21539; XTENSA-MUL-NEXT: slli a5, a5, 21540; XTENSA-MUL-NEXT: ret1541 %mul = mul <4 x i32> %a, <i32 4, i32 4, i32 4, i32 4>1542 ret <4 x i32> %mul1543}1544