2240 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: sed 's/iGRLen/i32/g' %s | llc --mtriple=loongarch32 --mattr=+ual \3; RUN: | FileCheck %s --check-prefixes=CHECK,LA32,LA32-UAL4; RUN: sed 's/iGRLen/i64/g' %s | llc --mtriple=loongarch64 --mattr=+ual \5; RUN: | FileCheck %s --check-prefixes=CHECK,LA64,LA64-UAL6; RUN: sed 's/iGRLen/i32/g' %s | llc --mtriple=loongarch32 --mattr=-ual \7; RUN: | FileCheck %s --check-prefixes=CHECK,LA32,LA32-NUAL8; RUN: sed 's/iGRLen/i64/g' %s | llc --mtriple=loongarch64 --mattr=-ual \9; RUN: | FileCheck %s --check-prefixes=CHECK,LA64,LA64-NUAL10 11declare signext i32 @bcmp(ptr, ptr, iGRLen) nounwind readonly12declare signext i32 @memcmp(ptr, ptr, iGRLen) nounwind readonly13 14define signext i32 @bcmp_size_0(ptr %s1, ptr %s2) nounwind optsize {15; LA32-LABEL: bcmp_size_0:16; LA32: # %bb.0: # %entry17; LA32-NEXT: addi.w $sp, $sp, -1618; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill19; LA32-NEXT: move $a2, $zero20; LA32-NEXT: bl bcmp21; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload22; LA32-NEXT: addi.w $sp, $sp, 1623; LA32-NEXT: ret24;25; LA64-LABEL: bcmp_size_0:26; LA64: # %bb.0: # %entry27; LA64-NEXT: addi.d $sp, $sp, -1628; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill29; LA64-NEXT: move $a2, $zero30; LA64-NEXT: pcaddu18i $ra, %call36(bcmp)31; LA64-NEXT: jirl $ra, $ra, 032; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload33; LA64-NEXT: addi.d $sp, $sp, 1634; LA64-NEXT: ret35entry:36 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 0)37 ret i32 %bcmp38}39 40define signext i32 @bcmp_size_1(ptr %s1, ptr %s2) nounwind optsize {41; LA32-UAL-LABEL: bcmp_size_1:42; LA32-UAL: # %bb.0: # %entry43; LA32-UAL-NEXT: ld.bu $a0, $a0, 044; LA32-UAL-NEXT: ld.bu $a1, $a1, 045; LA32-UAL-NEXT: xor $a0, $a0, $a146; LA32-UAL-NEXT: sltu $a0, $zero, $a047; LA32-UAL-NEXT: ret48;49; LA64-UAL-LABEL: bcmp_size_1:50; LA64-UAL: # %bb.0: # %entry51; LA64-UAL-NEXT: ld.bu $a0, $a0, 052; LA64-UAL-NEXT: ld.bu $a1, $a1, 053; LA64-UAL-NEXT: xor $a0, $a0, $a154; LA64-UAL-NEXT: sltu $a0, $zero, $a055; LA64-UAL-NEXT: ret56;57; LA32-NUAL-LABEL: bcmp_size_1:58; LA32-NUAL: # %bb.0: # %entry59; LA32-NUAL-NEXT: addi.w $sp, $sp, -1660; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill61; LA32-NUAL-NEXT: ori $a2, $zero, 162; LA32-NUAL-NEXT: bl bcmp63; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload64; LA32-NUAL-NEXT: addi.w $sp, $sp, 1665; LA32-NUAL-NEXT: ret66;67; LA64-NUAL-LABEL: bcmp_size_1:68; LA64-NUAL: # %bb.0: # %entry69; LA64-NUAL-NEXT: addi.d $sp, $sp, -1670; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill71; LA64-NUAL-NEXT: ori $a2, $zero, 172; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)73; LA64-NUAL-NEXT: jirl $ra, $ra, 074; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload75; LA64-NUAL-NEXT: addi.d $sp, $sp, 1676; LA64-NUAL-NEXT: ret77entry:78 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 1)79 ret i32 %bcmp80}81 82define signext i32 @bcmp_size_2(ptr %s1, ptr %s2) nounwind optsize {83; LA32-UAL-LABEL: bcmp_size_2:84; LA32-UAL: # %bb.0: # %entry85; LA32-UAL-NEXT: ld.hu $a0, $a0, 086; LA32-UAL-NEXT: ld.hu $a1, $a1, 087; LA32-UAL-NEXT: xor $a0, $a0, $a188; LA32-UAL-NEXT: sltu $a0, $zero, $a089; LA32-UAL-NEXT: ret90;91; LA64-UAL-LABEL: bcmp_size_2:92; LA64-UAL: # %bb.0: # %entry93; LA64-UAL-NEXT: ld.hu $a0, $a0, 094; LA64-UAL-NEXT: ld.hu $a1, $a1, 095; LA64-UAL-NEXT: xor $a0, $a0, $a196; LA64-UAL-NEXT: sltu $a0, $zero, $a097; LA64-UAL-NEXT: ret98;99; LA32-NUAL-LABEL: bcmp_size_2:100; LA32-NUAL: # %bb.0: # %entry101; LA32-NUAL-NEXT: addi.w $sp, $sp, -16102; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill103; LA32-NUAL-NEXT: ori $a2, $zero, 2104; LA32-NUAL-NEXT: bl bcmp105; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload106; LA32-NUAL-NEXT: addi.w $sp, $sp, 16107; LA32-NUAL-NEXT: ret108;109; LA64-NUAL-LABEL: bcmp_size_2:110; LA64-NUAL: # %bb.0: # %entry111; LA64-NUAL-NEXT: addi.d $sp, $sp, -16112; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill113; LA64-NUAL-NEXT: ori $a2, $zero, 2114; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)115; LA64-NUAL-NEXT: jirl $ra, $ra, 0116; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload117; LA64-NUAL-NEXT: addi.d $sp, $sp, 16118; LA64-NUAL-NEXT: ret119entry:120 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 2)121 ret i32 %bcmp122}123 124define signext i32 @bcmp_size_3(ptr %s1, ptr %s2) nounwind optsize {125; LA32-UAL-LABEL: bcmp_size_3:126; LA32-UAL: # %bb.0: # %entry127; LA32-UAL-NEXT: ld.hu $a2, $a0, 0128; LA32-UAL-NEXT: ld.hu $a3, $a1, 0129; LA32-UAL-NEXT: ld.bu $a0, $a0, 2130; LA32-UAL-NEXT: ld.bu $a1, $a1, 2131; LA32-UAL-NEXT: xor $a2, $a2, $a3132; LA32-UAL-NEXT: xor $a0, $a0, $a1133; LA32-UAL-NEXT: or $a0, $a2, $a0134; LA32-UAL-NEXT: sltu $a0, $zero, $a0135; LA32-UAL-NEXT: ret136;137; LA64-UAL-LABEL: bcmp_size_3:138; LA64-UAL: # %bb.0: # %entry139; LA64-UAL-NEXT: ld.hu $a2, $a0, 0140; LA64-UAL-NEXT: ld.hu $a3, $a1, 0141; LA64-UAL-NEXT: ld.bu $a0, $a0, 2142; LA64-UAL-NEXT: ld.bu $a1, $a1, 2143; LA64-UAL-NEXT: xor $a2, $a2, $a3144; LA64-UAL-NEXT: xor $a0, $a0, $a1145; LA64-UAL-NEXT: or $a0, $a2, $a0146; LA64-UAL-NEXT: sltu $a0, $zero, $a0147; LA64-UAL-NEXT: ret148;149; LA32-NUAL-LABEL: bcmp_size_3:150; LA32-NUAL: # %bb.0: # %entry151; LA32-NUAL-NEXT: addi.w $sp, $sp, -16152; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill153; LA32-NUAL-NEXT: ori $a2, $zero, 3154; LA32-NUAL-NEXT: bl bcmp155; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload156; LA32-NUAL-NEXT: addi.w $sp, $sp, 16157; LA32-NUAL-NEXT: ret158;159; LA64-NUAL-LABEL: bcmp_size_3:160; LA64-NUAL: # %bb.0: # %entry161; LA64-NUAL-NEXT: addi.d $sp, $sp, -16162; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill163; LA64-NUAL-NEXT: ori $a2, $zero, 3164; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)165; LA64-NUAL-NEXT: jirl $ra, $ra, 0166; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload167; LA64-NUAL-NEXT: addi.d $sp, $sp, 16168; LA64-NUAL-NEXT: ret169entry:170 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 3)171 ret i32 %bcmp172}173 174define signext i32 @bcmp_size_4(ptr %s1, ptr %s2) nounwind optsize {175; LA32-UAL-LABEL: bcmp_size_4:176; LA32-UAL: # %bb.0: # %entry177; LA32-UAL-NEXT: ld.w $a0, $a0, 0178; LA32-UAL-NEXT: ld.w $a1, $a1, 0179; LA32-UAL-NEXT: xor $a0, $a0, $a1180; LA32-UAL-NEXT: sltu $a0, $zero, $a0181; LA32-UAL-NEXT: ret182;183; LA64-UAL-LABEL: bcmp_size_4:184; LA64-UAL: # %bb.0: # %entry185; LA64-UAL-NEXT: ld.w $a0, $a0, 0186; LA64-UAL-NEXT: ld.w $a1, $a1, 0187; LA64-UAL-NEXT: xor $a0, $a0, $a1188; LA64-UAL-NEXT: sltu $a0, $zero, $a0189; LA64-UAL-NEXT: ret190;191; LA32-NUAL-LABEL: bcmp_size_4:192; LA32-NUAL: # %bb.0: # %entry193; LA32-NUAL-NEXT: addi.w $sp, $sp, -16194; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill195; LA32-NUAL-NEXT: ori $a2, $zero, 4196; LA32-NUAL-NEXT: bl bcmp197; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload198; LA32-NUAL-NEXT: addi.w $sp, $sp, 16199; LA32-NUAL-NEXT: ret200;201; LA64-NUAL-LABEL: bcmp_size_4:202; LA64-NUAL: # %bb.0: # %entry203; LA64-NUAL-NEXT: addi.d $sp, $sp, -16204; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill205; LA64-NUAL-NEXT: ori $a2, $zero, 4206; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)207; LA64-NUAL-NEXT: jirl $ra, $ra, 0208; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload209; LA64-NUAL-NEXT: addi.d $sp, $sp, 16210; LA64-NUAL-NEXT: ret211entry:212 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 4)213 ret i32 %bcmp214}215 216define signext i32 @bcmp_size_5(ptr %s1, ptr %s2) nounwind optsize {217; LA32-UAL-LABEL: bcmp_size_5:218; LA32-UAL: # %bb.0: # %entry219; LA32-UAL-NEXT: ld.w $a2, $a0, 0220; LA32-UAL-NEXT: ld.w $a3, $a1, 0221; LA32-UAL-NEXT: ld.bu $a0, $a0, 4222; LA32-UAL-NEXT: ld.bu $a1, $a1, 4223; LA32-UAL-NEXT: xor $a2, $a2, $a3224; LA32-UAL-NEXT: xor $a0, $a0, $a1225; LA32-UAL-NEXT: or $a0, $a2, $a0226; LA32-UAL-NEXT: sltu $a0, $zero, $a0227; LA32-UAL-NEXT: ret228;229; LA64-UAL-LABEL: bcmp_size_5:230; LA64-UAL: # %bb.0: # %entry231; LA64-UAL-NEXT: ld.w $a2, $a0, 0232; LA64-UAL-NEXT: ld.w $a3, $a1, 0233; LA64-UAL-NEXT: ld.bu $a0, $a0, 4234; LA64-UAL-NEXT: ld.bu $a1, $a1, 4235; LA64-UAL-NEXT: xor $a2, $a2, $a3236; LA64-UAL-NEXT: xor $a0, $a0, $a1237; LA64-UAL-NEXT: or $a0, $a2, $a0238; LA64-UAL-NEXT: sltu $a0, $zero, $a0239; LA64-UAL-NEXT: ret240;241; LA32-NUAL-LABEL: bcmp_size_5:242; LA32-NUAL: # %bb.0: # %entry243; LA32-NUAL-NEXT: addi.w $sp, $sp, -16244; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill245; LA32-NUAL-NEXT: ori $a2, $zero, 5246; LA32-NUAL-NEXT: bl bcmp247; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload248; LA32-NUAL-NEXT: addi.w $sp, $sp, 16249; LA32-NUAL-NEXT: ret250;251; LA64-NUAL-LABEL: bcmp_size_5:252; LA64-NUAL: # %bb.0: # %entry253; LA64-NUAL-NEXT: addi.d $sp, $sp, -16254; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill255; LA64-NUAL-NEXT: ori $a2, $zero, 5256; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)257; LA64-NUAL-NEXT: jirl $ra, $ra, 0258; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload259; LA64-NUAL-NEXT: addi.d $sp, $sp, 16260; LA64-NUAL-NEXT: ret261entry:262 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 5)263 ret i32 %bcmp264}265 266define signext i32 @bcmp_size_6(ptr %s1, ptr %s2) nounwind optsize {267; LA32-UAL-LABEL: bcmp_size_6:268; LA32-UAL: # %bb.0: # %entry269; LA32-UAL-NEXT: ld.w $a2, $a0, 0270; LA32-UAL-NEXT: ld.w $a3, $a1, 0271; LA32-UAL-NEXT: ld.hu $a0, $a0, 4272; LA32-UAL-NEXT: ld.hu $a1, $a1, 4273; LA32-UAL-NEXT: xor $a2, $a2, $a3274; LA32-UAL-NEXT: xor $a0, $a0, $a1275; LA32-UAL-NEXT: or $a0, $a2, $a0276; LA32-UAL-NEXT: sltu $a0, $zero, $a0277; LA32-UAL-NEXT: ret278;279; LA64-UAL-LABEL: bcmp_size_6:280; LA64-UAL: # %bb.0: # %entry281; LA64-UAL-NEXT: ld.w $a2, $a0, 0282; LA64-UAL-NEXT: ld.w $a3, $a1, 0283; LA64-UAL-NEXT: ld.hu $a0, $a0, 4284; LA64-UAL-NEXT: ld.hu $a1, $a1, 4285; LA64-UAL-NEXT: xor $a2, $a2, $a3286; LA64-UAL-NEXT: xor $a0, $a0, $a1287; LA64-UAL-NEXT: or $a0, $a2, $a0288; LA64-UAL-NEXT: sltu $a0, $zero, $a0289; LA64-UAL-NEXT: ret290;291; LA32-NUAL-LABEL: bcmp_size_6:292; LA32-NUAL: # %bb.0: # %entry293; LA32-NUAL-NEXT: addi.w $sp, $sp, -16294; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill295; LA32-NUAL-NEXT: ori $a2, $zero, 6296; LA32-NUAL-NEXT: bl bcmp297; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload298; LA32-NUAL-NEXT: addi.w $sp, $sp, 16299; LA32-NUAL-NEXT: ret300;301; LA64-NUAL-LABEL: bcmp_size_6:302; LA64-NUAL: # %bb.0: # %entry303; LA64-NUAL-NEXT: addi.d $sp, $sp, -16304; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill305; LA64-NUAL-NEXT: ori $a2, $zero, 6306; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)307; LA64-NUAL-NEXT: jirl $ra, $ra, 0308; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload309; LA64-NUAL-NEXT: addi.d $sp, $sp, 16310; LA64-NUAL-NEXT: ret311entry:312 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 6)313 ret i32 %bcmp314}315 316define signext i32 @bcmp_size_7(ptr %s1, ptr %s2) nounwind optsize {317; LA32-UAL-LABEL: bcmp_size_7:318; LA32-UAL: # %bb.0: # %entry319; LA32-UAL-NEXT: ld.w $a2, $a0, 0320; LA32-UAL-NEXT: ld.w $a3, $a1, 0321; LA32-UAL-NEXT: ld.w $a0, $a0, 3322; LA32-UAL-NEXT: ld.w $a1, $a1, 3323; LA32-UAL-NEXT: xor $a2, $a2, $a3324; LA32-UAL-NEXT: xor $a0, $a0, $a1325; LA32-UAL-NEXT: or $a0, $a2, $a0326; LA32-UAL-NEXT: sltu $a0, $zero, $a0327; LA32-UAL-NEXT: ret328;329; LA64-UAL-LABEL: bcmp_size_7:330; LA64-UAL: # %bb.0: # %entry331; LA64-UAL-NEXT: ld.w $a2, $a0, 0332; LA64-UAL-NEXT: ld.w $a3, $a1, 0333; LA64-UAL-NEXT: ld.w $a0, $a0, 3334; LA64-UAL-NEXT: ld.w $a1, $a1, 3335; LA64-UAL-NEXT: xor $a2, $a2, $a3336; LA64-UAL-NEXT: xor $a0, $a0, $a1337; LA64-UAL-NEXT: or $a0, $a2, $a0338; LA64-UAL-NEXT: sltu $a0, $zero, $a0339; LA64-UAL-NEXT: ret340;341; LA32-NUAL-LABEL: bcmp_size_7:342; LA32-NUAL: # %bb.0: # %entry343; LA32-NUAL-NEXT: addi.w $sp, $sp, -16344; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill345; LA32-NUAL-NEXT: ori $a2, $zero, 7346; LA32-NUAL-NEXT: bl bcmp347; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload348; LA32-NUAL-NEXT: addi.w $sp, $sp, 16349; LA32-NUAL-NEXT: ret350;351; LA64-NUAL-LABEL: bcmp_size_7:352; LA64-NUAL: # %bb.0: # %entry353; LA64-NUAL-NEXT: addi.d $sp, $sp, -16354; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill355; LA64-NUAL-NEXT: ori $a2, $zero, 7356; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)357; LA64-NUAL-NEXT: jirl $ra, $ra, 0358; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload359; LA64-NUAL-NEXT: addi.d $sp, $sp, 16360; LA64-NUAL-NEXT: ret361entry:362 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 7)363 ret i32 %bcmp364}365 366define signext i32 @bcmp_size_8(ptr %s1, ptr %s2) nounwind optsize {367; LA32-UAL-LABEL: bcmp_size_8:368; LA32-UAL: # %bb.0: # %entry369; LA32-UAL-NEXT: ld.w $a2, $a0, 0370; LA32-UAL-NEXT: ld.w $a3, $a1, 0371; LA32-UAL-NEXT: ld.w $a0, $a0, 4372; LA32-UAL-NEXT: ld.w $a1, $a1, 4373; LA32-UAL-NEXT: xor $a2, $a2, $a3374; LA32-UAL-NEXT: xor $a0, $a0, $a1375; LA32-UAL-NEXT: or $a0, $a2, $a0376; LA32-UAL-NEXT: sltu $a0, $zero, $a0377; LA32-UAL-NEXT: ret378;379; LA64-UAL-LABEL: bcmp_size_8:380; LA64-UAL: # %bb.0: # %entry381; LA64-UAL-NEXT: ld.d $a0, $a0, 0382; LA64-UAL-NEXT: ld.d $a1, $a1, 0383; LA64-UAL-NEXT: xor $a0, $a0, $a1384; LA64-UAL-NEXT: sltu $a0, $zero, $a0385; LA64-UAL-NEXT: ret386;387; LA32-NUAL-LABEL: bcmp_size_8:388; LA32-NUAL: # %bb.0: # %entry389; LA32-NUAL-NEXT: addi.w $sp, $sp, -16390; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill391; LA32-NUAL-NEXT: ori $a2, $zero, 8392; LA32-NUAL-NEXT: bl bcmp393; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload394; LA32-NUAL-NEXT: addi.w $sp, $sp, 16395; LA32-NUAL-NEXT: ret396;397; LA64-NUAL-LABEL: bcmp_size_8:398; LA64-NUAL: # %bb.0: # %entry399; LA64-NUAL-NEXT: addi.d $sp, $sp, -16400; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill401; LA64-NUAL-NEXT: ori $a2, $zero, 8402; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)403; LA64-NUAL-NEXT: jirl $ra, $ra, 0404; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload405; LA64-NUAL-NEXT: addi.d $sp, $sp, 16406; LA64-NUAL-NEXT: ret407entry:408 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 8)409 ret i32 %bcmp410}411 412define signext i32 @bcmp_size_15(ptr %s1, ptr %s2) nounwind optsize {413; LA32-UAL-LABEL: bcmp_size_15:414; LA32-UAL: # %bb.0: # %entry415; LA32-UAL-NEXT: ld.w $a2, $a0, 0416; LA32-UAL-NEXT: ld.w $a3, $a1, 0417; LA32-UAL-NEXT: ld.w $a4, $a0, 4418; LA32-UAL-NEXT: ld.w $a5, $a1, 4419; LA32-UAL-NEXT: ld.w $a6, $a0, 8420; LA32-UAL-NEXT: ld.w $a7, $a1, 8421; LA32-UAL-NEXT: ld.w $a0, $a0, 11422; LA32-UAL-NEXT: ld.w $a1, $a1, 11423; LA32-UAL-NEXT: xor $a2, $a2, $a3424; LA32-UAL-NEXT: xor $a3, $a4, $a5425; LA32-UAL-NEXT: xor $a4, $a6, $a7426; LA32-UAL-NEXT: xor $a0, $a0, $a1427; LA32-UAL-NEXT: or $a1, $a2, $a3428; LA32-UAL-NEXT: or $a0, $a4, $a0429; LA32-UAL-NEXT: or $a0, $a1, $a0430; LA32-UAL-NEXT: sltu $a0, $zero, $a0431; LA32-UAL-NEXT: ret432;433; LA64-UAL-LABEL: bcmp_size_15:434; LA64-UAL: # %bb.0: # %entry435; LA64-UAL-NEXT: ld.d $a2, $a0, 0436; LA64-UAL-NEXT: ld.d $a3, $a1, 0437; LA64-UAL-NEXT: ld.d $a0, $a0, 7438; LA64-UAL-NEXT: ld.d $a1, $a1, 7439; LA64-UAL-NEXT: xor $a2, $a2, $a3440; LA64-UAL-NEXT: xor $a0, $a0, $a1441; LA64-UAL-NEXT: or $a0, $a2, $a0442; LA64-UAL-NEXT: sltu $a0, $zero, $a0443; LA64-UAL-NEXT: ret444;445; LA32-NUAL-LABEL: bcmp_size_15:446; LA32-NUAL: # %bb.0: # %entry447; LA32-NUAL-NEXT: addi.w $sp, $sp, -16448; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill449; LA32-NUAL-NEXT: ori $a2, $zero, 15450; LA32-NUAL-NEXT: bl bcmp451; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload452; LA32-NUAL-NEXT: addi.w $sp, $sp, 16453; LA32-NUAL-NEXT: ret454;455; LA64-NUAL-LABEL: bcmp_size_15:456; LA64-NUAL: # %bb.0: # %entry457; LA64-NUAL-NEXT: addi.d $sp, $sp, -16458; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill459; LA64-NUAL-NEXT: ori $a2, $zero, 15460; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)461; LA64-NUAL-NEXT: jirl $ra, $ra, 0462; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload463; LA64-NUAL-NEXT: addi.d $sp, $sp, 16464; LA64-NUAL-NEXT: ret465entry:466 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 15)467 ret i32 %bcmp468}469 470define signext i32 @bcmp_size_16(ptr %s1, ptr %s2) nounwind optsize {471; LA32-UAL-LABEL: bcmp_size_16:472; LA32-UAL: # %bb.0: # %entry473; LA32-UAL-NEXT: ld.w $a2, $a0, 0474; LA32-UAL-NEXT: ld.w $a3, $a1, 0475; LA32-UAL-NEXT: ld.w $a4, $a0, 4476; LA32-UAL-NEXT: ld.w $a5, $a1, 4477; LA32-UAL-NEXT: ld.w $a6, $a0, 8478; LA32-UAL-NEXT: ld.w $a7, $a1, 8479; LA32-UAL-NEXT: ld.w $a0, $a0, 12480; LA32-UAL-NEXT: ld.w $a1, $a1, 12481; LA32-UAL-NEXT: xor $a2, $a2, $a3482; LA32-UAL-NEXT: xor $a3, $a4, $a5483; LA32-UAL-NEXT: xor $a4, $a6, $a7484; LA32-UAL-NEXT: xor $a0, $a0, $a1485; LA32-UAL-NEXT: or $a1, $a2, $a3486; LA32-UAL-NEXT: or $a0, $a4, $a0487; LA32-UAL-NEXT: or $a0, $a1, $a0488; LA32-UAL-NEXT: sltu $a0, $zero, $a0489; LA32-UAL-NEXT: ret490;491; LA64-UAL-LABEL: bcmp_size_16:492; LA64-UAL: # %bb.0: # %entry493; LA64-UAL-NEXT: ld.d $a2, $a0, 0494; LA64-UAL-NEXT: ld.d $a3, $a1, 0495; LA64-UAL-NEXT: ld.d $a0, $a0, 8496; LA64-UAL-NEXT: ld.d $a1, $a1, 8497; LA64-UAL-NEXT: xor $a2, $a2, $a3498; LA64-UAL-NEXT: xor $a0, $a0, $a1499; LA64-UAL-NEXT: or $a0, $a2, $a0500; LA64-UAL-NEXT: sltu $a0, $zero, $a0501; LA64-UAL-NEXT: ret502;503; LA32-NUAL-LABEL: bcmp_size_16:504; LA32-NUAL: # %bb.0: # %entry505; LA32-NUAL-NEXT: addi.w $sp, $sp, -16506; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill507; LA32-NUAL-NEXT: ori $a2, $zero, 16508; LA32-NUAL-NEXT: bl bcmp509; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload510; LA32-NUAL-NEXT: addi.w $sp, $sp, 16511; LA32-NUAL-NEXT: ret512;513; LA64-NUAL-LABEL: bcmp_size_16:514; LA64-NUAL: # %bb.0: # %entry515; LA64-NUAL-NEXT: addi.d $sp, $sp, -16516; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill517; LA64-NUAL-NEXT: ori $a2, $zero, 16518; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)519; LA64-NUAL-NEXT: jirl $ra, $ra, 0520; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload521; LA64-NUAL-NEXT: addi.d $sp, $sp, 16522; LA64-NUAL-NEXT: ret523entry:524 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 16)525 ret i32 %bcmp526}527 528define signext i32 @bcmp_size_31(ptr %s1, ptr %s2) nounwind optsize {529; LA32-LABEL: bcmp_size_31:530; LA32: # %bb.0: # %entry531; LA32-NEXT: addi.w $sp, $sp, -16532; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill533; LA32-NEXT: ori $a2, $zero, 31534; LA32-NEXT: bl bcmp535; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload536; LA32-NEXT: addi.w $sp, $sp, 16537; LA32-NEXT: ret538;539; LA64-UAL-LABEL: bcmp_size_31:540; LA64-UAL: # %bb.0: # %entry541; LA64-UAL-NEXT: ld.d $a2, $a0, 0542; LA64-UAL-NEXT: ld.d $a3, $a1, 0543; LA64-UAL-NEXT: ld.d $a4, $a0, 8544; LA64-UAL-NEXT: ld.d $a5, $a1, 8545; LA64-UAL-NEXT: ld.d $a6, $a0, 16546; LA64-UAL-NEXT: ld.d $a7, $a1, 16547; LA64-UAL-NEXT: ld.d $a0, $a0, 23548; LA64-UAL-NEXT: ld.d $a1, $a1, 23549; LA64-UAL-NEXT: xor $a2, $a2, $a3550; LA64-UAL-NEXT: xor $a3, $a4, $a5551; LA64-UAL-NEXT: xor $a4, $a6, $a7552; LA64-UAL-NEXT: xor $a0, $a0, $a1553; LA64-UAL-NEXT: or $a1, $a2, $a3554; LA64-UAL-NEXT: or $a0, $a4, $a0555; LA64-UAL-NEXT: or $a0, $a1, $a0556; LA64-UAL-NEXT: sltu $a0, $zero, $a0557; LA64-UAL-NEXT: ret558;559; LA64-NUAL-LABEL: bcmp_size_31:560; LA64-NUAL: # %bb.0: # %entry561; LA64-NUAL-NEXT: addi.d $sp, $sp, -16562; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill563; LA64-NUAL-NEXT: ori $a2, $zero, 31564; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)565; LA64-NUAL-NEXT: jirl $ra, $ra, 0566; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload567; LA64-NUAL-NEXT: addi.d $sp, $sp, 16568; LA64-NUAL-NEXT: ret569entry:570 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 31)571 ret i32 %bcmp572}573 574define signext i32 @bcmp_size_32(ptr %s1, ptr %s2) nounwind optsize {575; LA32-LABEL: bcmp_size_32:576; LA32: # %bb.0: # %entry577; LA32-NEXT: addi.w $sp, $sp, -16578; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill579; LA32-NEXT: ori $a2, $zero, 32580; LA32-NEXT: bl bcmp581; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload582; LA32-NEXT: addi.w $sp, $sp, 16583; LA32-NEXT: ret584;585; LA64-UAL-LABEL: bcmp_size_32:586; LA64-UAL: # %bb.0: # %entry587; LA64-UAL-NEXT: ld.d $a2, $a0, 0588; LA64-UAL-NEXT: ld.d $a3, $a1, 0589; LA64-UAL-NEXT: ld.d $a4, $a0, 8590; LA64-UAL-NEXT: ld.d $a5, $a1, 8591; LA64-UAL-NEXT: ld.d $a6, $a0, 16592; LA64-UAL-NEXT: ld.d $a7, $a1, 16593; LA64-UAL-NEXT: ld.d $a0, $a0, 24594; LA64-UAL-NEXT: ld.d $a1, $a1, 24595; LA64-UAL-NEXT: xor $a2, $a2, $a3596; LA64-UAL-NEXT: xor $a3, $a4, $a5597; LA64-UAL-NEXT: xor $a4, $a6, $a7598; LA64-UAL-NEXT: xor $a0, $a0, $a1599; LA64-UAL-NEXT: or $a1, $a2, $a3600; LA64-UAL-NEXT: or $a0, $a4, $a0601; LA64-UAL-NEXT: or $a0, $a1, $a0602; LA64-UAL-NEXT: sltu $a0, $zero, $a0603; LA64-UAL-NEXT: ret604;605; LA64-NUAL-LABEL: bcmp_size_32:606; LA64-NUAL: # %bb.0: # %entry607; LA64-NUAL-NEXT: addi.d $sp, $sp, -16608; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill609; LA64-NUAL-NEXT: ori $a2, $zero, 32610; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)611; LA64-NUAL-NEXT: jirl $ra, $ra, 0612; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload613; LA64-NUAL-NEXT: addi.d $sp, $sp, 16614; LA64-NUAL-NEXT: ret615entry:616 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 32)617 ret i32 %bcmp618}619 620define signext i32 @bcmp_size_63(ptr %s1, ptr %s2) nounwind optsize {621; LA32-LABEL: bcmp_size_63:622; LA32: # %bb.0: # %entry623; LA32-NEXT: addi.w $sp, $sp, -16624; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill625; LA32-NEXT: ori $a2, $zero, 63626; LA32-NEXT: bl bcmp627; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload628; LA32-NEXT: addi.w $sp, $sp, 16629; LA32-NEXT: ret630;631; LA64-LABEL: bcmp_size_63:632; LA64: # %bb.0: # %entry633; LA64-NEXT: addi.d $sp, $sp, -16634; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill635; LA64-NEXT: ori $a2, $zero, 63636; LA64-NEXT: pcaddu18i $ra, %call36(bcmp)637; LA64-NEXT: jirl $ra, $ra, 0638; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload639; LA64-NEXT: addi.d $sp, $sp, 16640; LA64-NEXT: ret641entry:642 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 63)643 ret i32 %bcmp644}645 646define signext i32 @bcmp_size_64(ptr %s1, ptr %s2) nounwind optsize {647; LA32-LABEL: bcmp_size_64:648; LA32: # %bb.0: # %entry649; LA32-NEXT: addi.w $sp, $sp, -16650; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill651; LA32-NEXT: ori $a2, $zero, 64652; LA32-NEXT: bl bcmp653; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload654; LA32-NEXT: addi.w $sp, $sp, 16655; LA32-NEXT: ret656;657; LA64-LABEL: bcmp_size_64:658; LA64: # %bb.0: # %entry659; LA64-NEXT: addi.d $sp, $sp, -16660; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill661; LA64-NEXT: ori $a2, $zero, 64662; LA64-NEXT: pcaddu18i $ra, %call36(bcmp)663; LA64-NEXT: jirl $ra, $ra, 0664; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload665; LA64-NEXT: addi.d $sp, $sp, 16666; LA64-NEXT: ret667entry:668 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 64)669 ret i32 %bcmp670}671 672define signext i32 @bcmp_size_127(ptr %s1, ptr %s2) nounwind optsize {673; LA32-LABEL: bcmp_size_127:674; LA32: # %bb.0: # %entry675; LA32-NEXT: addi.w $sp, $sp, -16676; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill677; LA32-NEXT: ori $a2, $zero, 127678; LA32-NEXT: bl bcmp679; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload680; LA32-NEXT: addi.w $sp, $sp, 16681; LA32-NEXT: ret682;683; LA64-LABEL: bcmp_size_127:684; LA64: # %bb.0: # %entry685; LA64-NEXT: addi.d $sp, $sp, -16686; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill687; LA64-NEXT: ori $a2, $zero, 127688; LA64-NEXT: pcaddu18i $ra, %call36(bcmp)689; LA64-NEXT: jirl $ra, $ra, 0690; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload691; LA64-NEXT: addi.d $sp, $sp, 16692; LA64-NEXT: ret693entry:694 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 127)695 ret i32 %bcmp696}697 698define signext i32 @bcmp_size_128(ptr %s1, ptr %s2) nounwind optsize {699; LA32-LABEL: bcmp_size_128:700; LA32: # %bb.0: # %entry701; LA32-NEXT: addi.w $sp, $sp, -16702; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill703; LA32-NEXT: ori $a2, $zero, 128704; LA32-NEXT: bl bcmp705; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload706; LA32-NEXT: addi.w $sp, $sp, 16707; LA32-NEXT: ret708;709; LA64-LABEL: bcmp_size_128:710; LA64: # %bb.0: # %entry711; LA64-NEXT: addi.d $sp, $sp, -16712; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill713; LA64-NEXT: ori $a2, $zero, 128714; LA64-NEXT: pcaddu18i $ra, %call36(bcmp)715; LA64-NEXT: jirl $ra, $ra, 0716; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload717; LA64-NEXT: addi.d $sp, $sp, 16718; LA64-NEXT: ret719entry:720 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 128)721 ret i32 %bcmp722}723 724define signext i32 @bcmp_size_runtime(ptr %s1, ptr %s2, iGRLen %len) nounwind optsize {725; LA32-LABEL: bcmp_size_runtime:726; LA32: # %bb.0: # %entry727; LA32-NEXT: addi.w $sp, $sp, -16728; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill729; LA32-NEXT: bl bcmp730; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload731; LA32-NEXT: addi.w $sp, $sp, 16732; LA32-NEXT: ret733;734; LA64-LABEL: bcmp_size_runtime:735; LA64: # %bb.0: # %entry736; LA64-NEXT: addi.d $sp, $sp, -16737; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill738; LA64-NEXT: pcaddu18i $ra, %call36(bcmp)739; LA64-NEXT: jirl $ra, $ra, 0740; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload741; LA64-NEXT: addi.d $sp, $sp, 16742; LA64-NEXT: ret743entry:744 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen %len)745 ret i32 %bcmp746}747 748define i1 @bcmp_eq_zero(ptr %s1, ptr %s2) nounwind optsize {749; LA32-UAL-LABEL: bcmp_eq_zero:750; LA32-UAL: # %bb.0: # %entry751; LA32-UAL-NEXT: ld.w $a0, $a0, 0752; LA32-UAL-NEXT: ld.w $a1, $a1, 0753; LA32-UAL-NEXT: xor $a0, $a0, $a1754; LA32-UAL-NEXT: sltui $a0, $a0, 1755; LA32-UAL-NEXT: ret756;757; LA64-UAL-LABEL: bcmp_eq_zero:758; LA64-UAL: # %bb.0: # %entry759; LA64-UAL-NEXT: ld.w $a0, $a0, 0760; LA64-UAL-NEXT: ld.w $a1, $a1, 0761; LA64-UAL-NEXT: xor $a0, $a0, $a1762; LA64-UAL-NEXT: sltui $a0, $a0, 1763; LA64-UAL-NEXT: ret764;765; LA32-NUAL-LABEL: bcmp_eq_zero:766; LA32-NUAL: # %bb.0: # %entry767; LA32-NUAL-NEXT: addi.w $sp, $sp, -16768; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill769; LA32-NUAL-NEXT: ori $a2, $zero, 4770; LA32-NUAL-NEXT: bl bcmp771; LA32-NUAL-NEXT: sltui $a0, $a0, 1772; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload773; LA32-NUAL-NEXT: addi.w $sp, $sp, 16774; LA32-NUAL-NEXT: ret775;776; LA64-NUAL-LABEL: bcmp_eq_zero:777; LA64-NUAL: # %bb.0: # %entry778; LA64-NUAL-NEXT: addi.d $sp, $sp, -16779; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill780; LA64-NUAL-NEXT: ori $a2, $zero, 4781; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)782; LA64-NUAL-NEXT: jirl $ra, $ra, 0783; LA64-NUAL-NEXT: sltui $a0, $a0, 1784; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload785; LA64-NUAL-NEXT: addi.d $sp, $sp, 16786; LA64-NUAL-NEXT: ret787entry:788 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 4)789 %ret = icmp eq i32 %bcmp, 0790 ret i1 %ret791}792 793define i1 @bcmp_lt_zero(ptr %s1, ptr %s2) nounwind optsize {794; LA32-UAL-LABEL: bcmp_lt_zero:795; LA32-UAL: # %bb.0: # %entry796; LA32-UAL-NEXT: move $a0, $zero797; LA32-UAL-NEXT: ret798;799; LA64-UAL-LABEL: bcmp_lt_zero:800; LA64-UAL: # %bb.0: # %entry801; LA64-UAL-NEXT: move $a0, $zero802; LA64-UAL-NEXT: ret803;804; LA32-NUAL-LABEL: bcmp_lt_zero:805; LA32-NUAL: # %bb.0: # %entry806; LA32-NUAL-NEXT: addi.w $sp, $sp, -16807; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill808; LA32-NUAL-NEXT: ori $a2, $zero, 4809; LA32-NUAL-NEXT: bl bcmp810; LA32-NUAL-NEXT: srli.w $a0, $a0, 31811; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload812; LA32-NUAL-NEXT: addi.w $sp, $sp, 16813; LA32-NUAL-NEXT: ret814;815; LA64-NUAL-LABEL: bcmp_lt_zero:816; LA64-NUAL: # %bb.0: # %entry817; LA64-NUAL-NEXT: addi.d $sp, $sp, -16818; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill819; LA64-NUAL-NEXT: ori $a2, $zero, 4820; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)821; LA64-NUAL-NEXT: jirl $ra, $ra, 0822; LA64-NUAL-NEXT: slti $a0, $a0, 0823; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload824; LA64-NUAL-NEXT: addi.d $sp, $sp, 16825; LA64-NUAL-NEXT: ret826entry:827 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 4)828 %ret = icmp slt i32 %bcmp, 0829 ret i1 %ret830}831 832define i1 @bcmp_gt_zero(ptr %s1, ptr %s2) nounwind optsize {833; LA32-UAL-LABEL: bcmp_gt_zero:834; LA32-UAL: # %bb.0: # %entry835; LA32-UAL-NEXT: ld.w $a0, $a0, 0836; LA32-UAL-NEXT: ld.w $a1, $a1, 0837; LA32-UAL-NEXT: xor $a0, $a0, $a1838; LA32-UAL-NEXT: sltu $a0, $zero, $a0839; LA32-UAL-NEXT: ret840;841; LA64-UAL-LABEL: bcmp_gt_zero:842; LA64-UAL: # %bb.0: # %entry843; LA64-UAL-NEXT: ld.w $a0, $a0, 0844; LA64-UAL-NEXT: ld.w $a1, $a1, 0845; LA64-UAL-NEXT: xor $a0, $a0, $a1846; LA64-UAL-NEXT: sltu $a0, $zero, $a0847; LA64-UAL-NEXT: ret848;849; LA32-NUAL-LABEL: bcmp_gt_zero:850; LA32-NUAL: # %bb.0: # %entry851; LA32-NUAL-NEXT: addi.w $sp, $sp, -16852; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill853; LA32-NUAL-NEXT: ori $a2, $zero, 4854; LA32-NUAL-NEXT: bl bcmp855; LA32-NUAL-NEXT: slt $a0, $zero, $a0856; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload857; LA32-NUAL-NEXT: addi.w $sp, $sp, 16858; LA32-NUAL-NEXT: ret859;860; LA64-NUAL-LABEL: bcmp_gt_zero:861; LA64-NUAL: # %bb.0: # %entry862; LA64-NUAL-NEXT: addi.d $sp, $sp, -16863; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill864; LA64-NUAL-NEXT: ori $a2, $zero, 4865; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(bcmp)866; LA64-NUAL-NEXT: jirl $ra, $ra, 0867; LA64-NUAL-NEXT: slt $a0, $zero, $a0868; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload869; LA64-NUAL-NEXT: addi.d $sp, $sp, 16870; LA64-NUAL-NEXT: ret871entry:872 %bcmp = call signext i32 @bcmp(ptr %s1, ptr %s2, iGRLen 4)873 %ret = icmp sgt i32 %bcmp, 0874 ret i1 %ret875}876 877define signext i32 @memcmp_size_0(ptr %s1, ptr %s2) nounwind optsize {878; CHECK-LABEL: memcmp_size_0:879; CHECK: # %bb.0: # %entry880; CHECK-NEXT: move $a0, $zero881; CHECK-NEXT: ret882entry:883 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 0)884 ret i32 %memcmp885}886 887define signext i32 @memcmp_size_1(ptr %s1, ptr %s2) nounwind optsize {888; LA32-UAL-LABEL: memcmp_size_1:889; LA32-UAL: # %bb.0: # %entry890; LA32-UAL-NEXT: ld.bu $a0, $a0, 0891; LA32-UAL-NEXT: ld.bu $a1, $a1, 0892; LA32-UAL-NEXT: sub.w $a0, $a0, $a1893; LA32-UAL-NEXT: ret894;895; LA64-UAL-LABEL: memcmp_size_1:896; LA64-UAL: # %bb.0: # %entry897; LA64-UAL-NEXT: ld.bu $a0, $a0, 0898; LA64-UAL-NEXT: ld.bu $a1, $a1, 0899; LA64-UAL-NEXT: sub.d $a0, $a0, $a1900; LA64-UAL-NEXT: ret901;902; LA32-NUAL-LABEL: memcmp_size_1:903; LA32-NUAL: # %bb.0: # %entry904; LA32-NUAL-NEXT: addi.w $sp, $sp, -16905; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill906; LA32-NUAL-NEXT: ori $a2, $zero, 1907; LA32-NUAL-NEXT: bl memcmp908; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload909; LA32-NUAL-NEXT: addi.w $sp, $sp, 16910; LA32-NUAL-NEXT: ret911;912; LA64-NUAL-LABEL: memcmp_size_1:913; LA64-NUAL: # %bb.0: # %entry914; LA64-NUAL-NEXT: addi.d $sp, $sp, -16915; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill916; LA64-NUAL-NEXT: ori $a2, $zero, 1917; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)918; LA64-NUAL-NEXT: jirl $ra, $ra, 0919; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload920; LA64-NUAL-NEXT: addi.d $sp, $sp, 16921; LA64-NUAL-NEXT: ret922entry:923 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 1)924 ret i32 %memcmp925}926 927define signext i32 @memcmp_size_2(ptr %s1, ptr %s2) nounwind optsize {928; LA32-UAL-LABEL: memcmp_size_2:929; LA32-UAL: # %bb.0: # %entry930; LA32-UAL-NEXT: ld.hu $a0, $a0, 0931; LA32-UAL-NEXT: ld.hu $a1, $a1, 0932; LA32-UAL-NEXT: srli.w $a2, $a0, 8933; LA32-UAL-NEXT: slli.w $a0, $a0, 8934; LA32-UAL-NEXT: or $a0, $a0, $a2935; LA32-UAL-NEXT: srli.w $a2, $a1, 8936; LA32-UAL-NEXT: slli.w $a1, $a1, 8937; LA32-UAL-NEXT: or $a1, $a1, $a2938; LA32-UAL-NEXT: lu12i.w $a2, 15939; LA32-UAL-NEXT: ori $a2, $a2, 4095940; LA32-UAL-NEXT: and $a0, $a0, $a2941; LA32-UAL-NEXT: and $a1, $a1, $a2942; LA32-UAL-NEXT: sub.w $a0, $a0, $a1943; LA32-UAL-NEXT: ret944;945; LA64-UAL-LABEL: memcmp_size_2:946; LA64-UAL: # %bb.0: # %entry947; LA64-UAL-NEXT: ld.h $a0, $a0, 0948; LA64-UAL-NEXT: ld.h $a1, $a1, 0949; LA64-UAL-NEXT: revb.2h $a0, $a0950; LA64-UAL-NEXT: revb.2h $a1, $a1951; LA64-UAL-NEXT: bstrpick.d $a0, $a0, 15, 0952; LA64-UAL-NEXT: bstrpick.d $a1, $a1, 15, 0953; LA64-UAL-NEXT: sub.d $a0, $a0, $a1954; LA64-UAL-NEXT: ret955;956; LA32-NUAL-LABEL: memcmp_size_2:957; LA32-NUAL: # %bb.0: # %entry958; LA32-NUAL-NEXT: addi.w $sp, $sp, -16959; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill960; LA32-NUAL-NEXT: ori $a2, $zero, 2961; LA32-NUAL-NEXT: bl memcmp962; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload963; LA32-NUAL-NEXT: addi.w $sp, $sp, 16964; LA32-NUAL-NEXT: ret965;966; LA64-NUAL-LABEL: memcmp_size_2:967; LA64-NUAL: # %bb.0: # %entry968; LA64-NUAL-NEXT: addi.d $sp, $sp, -16969; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill970; LA64-NUAL-NEXT: ori $a2, $zero, 2971; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)972; LA64-NUAL-NEXT: jirl $ra, $ra, 0973; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload974; LA64-NUAL-NEXT: addi.d $sp, $sp, 16975; LA64-NUAL-NEXT: ret976entry:977 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 2)978 ret i32 %memcmp979}980 981define signext i32 @memcmp_size_3(ptr %s1, ptr %s2) nounwind optsize {982; LA32-UAL-LABEL: memcmp_size_3:983; LA32-UAL: # %bb.0: # %entry984; LA32-UAL-NEXT: ld.bu $a2, $a0, 2985; LA32-UAL-NEXT: ld.hu $a0, $a0, 0986; LA32-UAL-NEXT: ld.bu $a3, $a1, 2987; LA32-UAL-NEXT: ld.hu $a1, $a1, 0988; LA32-UAL-NEXT: lu12i.w $a4, 15989; LA32-UAL-NEXT: ori $a4, $a4, 3840990; LA32-UAL-NEXT: and $a5, $a0, $a4991; LA32-UAL-NEXT: or $a2, $a5, $a2992; LA32-UAL-NEXT: slli.w $a2, $a2, 8993; LA32-UAL-NEXT: slli.w $a0, $a0, 24994; LA32-UAL-NEXT: or $a0, $a2, $a0995; LA32-UAL-NEXT: and $a2, $a1, $a4996; LA32-UAL-NEXT: or $a2, $a2, $a3997; LA32-UAL-NEXT: slli.w $a2, $a2, 8998; LA32-UAL-NEXT: slli.w $a1, $a1, 24999; LA32-UAL-NEXT: or $a1, $a2, $a11000; LA32-UAL-NEXT: sltu $a2, $a0, $a11001; LA32-UAL-NEXT: sltu $a0, $a1, $a01002; LA32-UAL-NEXT: sub.w $a0, $a0, $a21003; LA32-UAL-NEXT: ret1004;1005; LA64-UAL-LABEL: memcmp_size_3:1006; LA64-UAL: # %bb.0: # %entry1007; LA64-UAL-NEXT: ld.bu $a2, $a0, 21008; LA64-UAL-NEXT: ld.hu $a0, $a0, 01009; LA64-UAL-NEXT: ld.bu $a3, $a1, 21010; LA64-UAL-NEXT: ld.hu $a1, $a1, 01011; LA64-UAL-NEXT: slli.d $a2, $a2, 161012; LA64-UAL-NEXT: or $a0, $a0, $a21013; LA64-UAL-NEXT: slli.d $a2, $a3, 161014; LA64-UAL-NEXT: or $a1, $a1, $a21015; LA64-UAL-NEXT: revb.2w $a0, $a01016; LA64-UAL-NEXT: addi.w $a0, $a0, 01017; LA64-UAL-NEXT: revb.2w $a1, $a11018; LA64-UAL-NEXT: addi.w $a1, $a1, 01019; LA64-UAL-NEXT: sltu $a2, $a0, $a11020; LA64-UAL-NEXT: sltu $a0, $a1, $a01021; LA64-UAL-NEXT: sub.d $a0, $a0, $a21022; LA64-UAL-NEXT: ret1023;1024; LA32-NUAL-LABEL: memcmp_size_3:1025; LA32-NUAL: # %bb.0: # %entry1026; LA32-NUAL-NEXT: addi.w $sp, $sp, -161027; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1028; LA32-NUAL-NEXT: ori $a2, $zero, 31029; LA32-NUAL-NEXT: bl memcmp1030; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1031; LA32-NUAL-NEXT: addi.w $sp, $sp, 161032; LA32-NUAL-NEXT: ret1033;1034; LA64-NUAL-LABEL: memcmp_size_3:1035; LA64-NUAL: # %bb.0: # %entry1036; LA64-NUAL-NEXT: addi.d $sp, $sp, -161037; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1038; LA64-NUAL-NEXT: ori $a2, $zero, 31039; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)1040; LA64-NUAL-NEXT: jirl $ra, $ra, 01041; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1042; LA64-NUAL-NEXT: addi.d $sp, $sp, 161043; LA64-NUAL-NEXT: ret1044entry:1045 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 3)1046 ret i32 %memcmp1047}1048 1049define signext i32 @memcmp_size_4(ptr %s1, ptr %s2) nounwind optsize {1050; LA32-UAL-LABEL: memcmp_size_4:1051; LA32-UAL: # %bb.0: # %entry1052; LA32-UAL-NEXT: ld.w $a0, $a0, 01053; LA32-UAL-NEXT: ld.w $a1, $a1, 01054; LA32-UAL-NEXT: srli.w $a2, $a0, 81055; LA32-UAL-NEXT: lu12i.w $a3, 151056; LA32-UAL-NEXT: ori $a3, $a3, 38401057; LA32-UAL-NEXT: and $a2, $a2, $a31058; LA32-UAL-NEXT: srli.w $a4, $a0, 241059; LA32-UAL-NEXT: or $a2, $a2, $a41060; LA32-UAL-NEXT: and $a4, $a0, $a31061; LA32-UAL-NEXT: slli.w $a4, $a4, 81062; LA32-UAL-NEXT: slli.w $a0, $a0, 241063; LA32-UAL-NEXT: or $a0, $a0, $a41064; LA32-UAL-NEXT: or $a0, $a0, $a21065; LA32-UAL-NEXT: srli.w $a2, $a1, 81066; LA32-UAL-NEXT: and $a2, $a2, $a31067; LA32-UAL-NEXT: srli.w $a4, $a1, 241068; LA32-UAL-NEXT: or $a2, $a2, $a41069; LA32-UAL-NEXT: and $a3, $a1, $a31070; LA32-UAL-NEXT: slli.w $a3, $a3, 81071; LA32-UAL-NEXT: slli.w $a1, $a1, 241072; LA32-UAL-NEXT: or $a1, $a1, $a31073; LA32-UAL-NEXT: or $a1, $a1, $a21074; LA32-UAL-NEXT: sltu $a2, $a0, $a11075; LA32-UAL-NEXT: sltu $a0, $a1, $a01076; LA32-UAL-NEXT: sub.w $a0, $a0, $a21077; LA32-UAL-NEXT: ret1078;1079; LA64-UAL-LABEL: memcmp_size_4:1080; LA64-UAL: # %bb.0: # %entry1081; LA64-UAL-NEXT: ld.w $a0, $a0, 01082; LA64-UAL-NEXT: ld.w $a1, $a1, 01083; LA64-UAL-NEXT: revb.2w $a0, $a01084; LA64-UAL-NEXT: addi.w $a0, $a0, 01085; LA64-UAL-NEXT: revb.2w $a1, $a11086; LA64-UAL-NEXT: addi.w $a1, $a1, 01087; LA64-UAL-NEXT: sltu $a2, $a0, $a11088; LA64-UAL-NEXT: sltu $a0, $a1, $a01089; LA64-UAL-NEXT: sub.d $a0, $a0, $a21090; LA64-UAL-NEXT: ret1091;1092; LA32-NUAL-LABEL: memcmp_size_4:1093; LA32-NUAL: # %bb.0: # %entry1094; LA32-NUAL-NEXT: addi.w $sp, $sp, -161095; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1096; LA32-NUAL-NEXT: ori $a2, $zero, 41097; LA32-NUAL-NEXT: bl memcmp1098; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1099; LA32-NUAL-NEXT: addi.w $sp, $sp, 161100; LA32-NUAL-NEXT: ret1101;1102; LA64-NUAL-LABEL: memcmp_size_4:1103; LA64-NUAL: # %bb.0: # %entry1104; LA64-NUAL-NEXT: addi.d $sp, $sp, -161105; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1106; LA64-NUAL-NEXT: ori $a2, $zero, 41107; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)1108; LA64-NUAL-NEXT: jirl $ra, $ra, 01109; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1110; LA64-NUAL-NEXT: addi.d $sp, $sp, 161111; LA64-NUAL-NEXT: ret1112entry:1113 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 4)1114 ret i32 %memcmp1115}1116 1117define signext i32 @memcmp_size_5(ptr %s1, ptr %s2) nounwind optsize {1118; LA32-UAL-LABEL: memcmp_size_5:1119; LA32-UAL: # %bb.0: # %entry1120; LA32-UAL-NEXT: ld.w $a2, $a0, 01121; LA32-UAL-NEXT: ld.w $a3, $a1, 01122; LA32-UAL-NEXT: srli.w $a4, $a2, 81123; LA32-UAL-NEXT: lu12i.w $a5, 151124; LA32-UAL-NEXT: ori $a5, $a5, 38401125; LA32-UAL-NEXT: and $a4, $a4, $a51126; LA32-UAL-NEXT: srli.w $a6, $a2, 241127; LA32-UAL-NEXT: or $a4, $a4, $a61128; LA32-UAL-NEXT: and $a6, $a2, $a51129; LA32-UAL-NEXT: slli.w $a6, $a6, 81130; LA32-UAL-NEXT: slli.w $a2, $a2, 241131; LA32-UAL-NEXT: or $a2, $a2, $a61132; LA32-UAL-NEXT: or $a2, $a2, $a41133; LA32-UAL-NEXT: srli.w $a4, $a3, 81134; LA32-UAL-NEXT: and $a4, $a4, $a51135; LA32-UAL-NEXT: srli.w $a6, $a3, 241136; LA32-UAL-NEXT: or $a4, $a4, $a61137; LA32-UAL-NEXT: and $a5, $a3, $a51138; LA32-UAL-NEXT: slli.w $a5, $a5, 81139; LA32-UAL-NEXT: slli.w $a3, $a3, 241140; LA32-UAL-NEXT: or $a3, $a3, $a51141; LA32-UAL-NEXT: or $a3, $a3, $a41142; LA32-UAL-NEXT: bne $a2, $a3, .LBB26_21143; LA32-UAL-NEXT: # %bb.1: # %loadbb11144; LA32-UAL-NEXT: ld.bu $a0, $a0, 41145; LA32-UAL-NEXT: ld.bu $a1, $a1, 41146; LA32-UAL-NEXT: sub.w $a0, $a0, $a11147; LA32-UAL-NEXT: ret1148; LA32-UAL-NEXT: .LBB26_2: # %res_block1149; LA32-UAL-NEXT: sltu $a0, $a2, $a31150; LA32-UAL-NEXT: sub.w $a0, $zero, $a01151; LA32-UAL-NEXT: ori $a0, $a0, 11152; LA32-UAL-NEXT: ret1153;1154; LA64-UAL-LABEL: memcmp_size_5:1155; LA64-UAL: # %bb.0: # %entry1156; LA64-UAL-NEXT: ld.bu $a2, $a0, 41157; LA64-UAL-NEXT: ld.wu $a0, $a0, 01158; LA64-UAL-NEXT: ld.bu $a3, $a1, 41159; LA64-UAL-NEXT: ld.wu $a1, $a1, 01160; LA64-UAL-NEXT: slli.d $a2, $a2, 321161; LA64-UAL-NEXT: or $a0, $a0, $a21162; LA64-UAL-NEXT: slli.d $a2, $a3, 321163; LA64-UAL-NEXT: or $a1, $a1, $a21164; LA64-UAL-NEXT: revb.d $a0, $a01165; LA64-UAL-NEXT: revb.d $a1, $a11166; LA64-UAL-NEXT: sltu $a2, $a0, $a11167; LA64-UAL-NEXT: sltu $a0, $a1, $a01168; LA64-UAL-NEXT: sub.d $a0, $a0, $a21169; LA64-UAL-NEXT: ret1170;1171; LA32-NUAL-LABEL: memcmp_size_5:1172; LA32-NUAL: # %bb.0: # %entry1173; LA32-NUAL-NEXT: addi.w $sp, $sp, -161174; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1175; LA32-NUAL-NEXT: ori $a2, $zero, 51176; LA32-NUAL-NEXT: bl memcmp1177; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1178; LA32-NUAL-NEXT: addi.w $sp, $sp, 161179; LA32-NUAL-NEXT: ret1180;1181; LA64-NUAL-LABEL: memcmp_size_5:1182; LA64-NUAL: # %bb.0: # %entry1183; LA64-NUAL-NEXT: addi.d $sp, $sp, -161184; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1185; LA64-NUAL-NEXT: ori $a2, $zero, 51186; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)1187; LA64-NUAL-NEXT: jirl $ra, $ra, 01188; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1189; LA64-NUAL-NEXT: addi.d $sp, $sp, 161190; LA64-NUAL-NEXT: ret1191entry:1192 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 5)1193 ret i32 %memcmp1194}1195 1196define signext i32 @memcmp_size_6(ptr %s1, ptr %s2) nounwind optsize {1197; LA32-UAL-LABEL: memcmp_size_6:1198; LA32-UAL: # %bb.0: # %entry1199; LA32-UAL-NEXT: ld.w $a3, $a0, 01200; LA32-UAL-NEXT: ld.w $a4, $a1, 01201; LA32-UAL-NEXT: srli.w $a5, $a3, 81202; LA32-UAL-NEXT: lu12i.w $a2, 151203; LA32-UAL-NEXT: ori $a6, $a2, 38401204; LA32-UAL-NEXT: and $a5, $a5, $a61205; LA32-UAL-NEXT: srli.w $a7, $a3, 241206; LA32-UAL-NEXT: or $a5, $a5, $a71207; LA32-UAL-NEXT: and $a7, $a3, $a61208; LA32-UAL-NEXT: slli.w $a7, $a7, 81209; LA32-UAL-NEXT: slli.w $a3, $a3, 241210; LA32-UAL-NEXT: or $a3, $a3, $a71211; LA32-UAL-NEXT: or $a3, $a3, $a51212; LA32-UAL-NEXT: srli.w $a5, $a4, 81213; LA32-UAL-NEXT: and $a5, $a5, $a61214; LA32-UAL-NEXT: srli.w $a7, $a4, 241215; LA32-UAL-NEXT: or $a5, $a5, $a71216; LA32-UAL-NEXT: and $a6, $a4, $a61217; LA32-UAL-NEXT: slli.w $a6, $a6, 81218; LA32-UAL-NEXT: slli.w $a4, $a4, 241219; LA32-UAL-NEXT: or $a4, $a4, $a61220; LA32-UAL-NEXT: or $a4, $a4, $a51221; LA32-UAL-NEXT: bne $a3, $a4, .LBB27_31222; LA32-UAL-NEXT: # %bb.1: # %loadbb11223; LA32-UAL-NEXT: ld.hu $a0, $a0, 41224; LA32-UAL-NEXT: ld.hu $a1, $a1, 41225; LA32-UAL-NEXT: srli.w $a3, $a0, 81226; LA32-UAL-NEXT: slli.w $a0, $a0, 81227; LA32-UAL-NEXT: or $a0, $a0, $a31228; LA32-UAL-NEXT: srli.w $a3, $a1, 81229; LA32-UAL-NEXT: slli.w $a1, $a1, 81230; LA32-UAL-NEXT: or $a1, $a1, $a31231; LA32-UAL-NEXT: ori $a2, $a2, 40951232; LA32-UAL-NEXT: and $a3, $a0, $a21233; LA32-UAL-NEXT: and $a4, $a1, $a21234; LA32-UAL-NEXT: bne $a3, $a4, .LBB27_31235; LA32-UAL-NEXT: # %bb.2:1236; LA32-UAL-NEXT: move $a0, $zero1237; LA32-UAL-NEXT: ret1238; LA32-UAL-NEXT: .LBB27_3: # %res_block1239; LA32-UAL-NEXT: sltu $a0, $a3, $a41240; LA32-UAL-NEXT: sub.w $a0, $zero, $a01241; LA32-UAL-NEXT: ori $a0, $a0, 11242; LA32-UAL-NEXT: ret1243;1244; LA64-UAL-LABEL: memcmp_size_6:1245; LA64-UAL: # %bb.0: # %entry1246; LA64-UAL-NEXT: ld.hu $a2, $a0, 41247; LA64-UAL-NEXT: ld.wu $a0, $a0, 01248; LA64-UAL-NEXT: ld.hu $a3, $a1, 41249; LA64-UAL-NEXT: ld.wu $a1, $a1, 01250; LA64-UAL-NEXT: slli.d $a2, $a2, 321251; LA64-UAL-NEXT: or $a0, $a0, $a21252; LA64-UAL-NEXT: slli.d $a2, $a3, 321253; LA64-UAL-NEXT: or $a1, $a1, $a21254; LA64-UAL-NEXT: revb.d $a0, $a01255; LA64-UAL-NEXT: revb.d $a1, $a11256; LA64-UAL-NEXT: sltu $a2, $a0, $a11257; LA64-UAL-NEXT: sltu $a0, $a1, $a01258; LA64-UAL-NEXT: sub.d $a0, $a0, $a21259; LA64-UAL-NEXT: ret1260;1261; LA32-NUAL-LABEL: memcmp_size_6:1262; LA32-NUAL: # %bb.0: # %entry1263; LA32-NUAL-NEXT: addi.w $sp, $sp, -161264; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1265; LA32-NUAL-NEXT: ori $a2, $zero, 61266; LA32-NUAL-NEXT: bl memcmp1267; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1268; LA32-NUAL-NEXT: addi.w $sp, $sp, 161269; LA32-NUAL-NEXT: ret1270;1271; LA64-NUAL-LABEL: memcmp_size_6:1272; LA64-NUAL: # %bb.0: # %entry1273; LA64-NUAL-NEXT: addi.d $sp, $sp, -161274; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1275; LA64-NUAL-NEXT: ori $a2, $zero, 61276; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)1277; LA64-NUAL-NEXT: jirl $ra, $ra, 01278; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1279; LA64-NUAL-NEXT: addi.d $sp, $sp, 161280; LA64-NUAL-NEXT: ret1281entry:1282 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 6)1283 ret i32 %memcmp1284}1285 1286define signext i32 @memcmp_size_7(ptr %s1, ptr %s2) nounwind optsize {1287; LA32-UAL-LABEL: memcmp_size_7:1288; LA32-UAL: # %bb.0: # %entry1289; LA32-UAL-NEXT: ld.w $a3, $a0, 01290; LA32-UAL-NEXT: ld.w $a4, $a1, 01291; LA32-UAL-NEXT: srli.w $a5, $a3, 81292; LA32-UAL-NEXT: lu12i.w $a2, 151293; LA32-UAL-NEXT: ori $a2, $a2, 38401294; LA32-UAL-NEXT: and $a5, $a5, $a21295; LA32-UAL-NEXT: srli.w $a6, $a3, 241296; LA32-UAL-NEXT: or $a5, $a5, $a61297; LA32-UAL-NEXT: and $a6, $a3, $a21298; LA32-UAL-NEXT: slli.w $a6, $a6, 81299; LA32-UAL-NEXT: slli.w $a3, $a3, 241300; LA32-UAL-NEXT: or $a3, $a3, $a61301; LA32-UAL-NEXT: or $a3, $a3, $a51302; LA32-UAL-NEXT: srli.w $a5, $a4, 81303; LA32-UAL-NEXT: and $a5, $a5, $a21304; LA32-UAL-NEXT: srli.w $a6, $a4, 241305; LA32-UAL-NEXT: or $a5, $a5, $a61306; LA32-UAL-NEXT: and $a6, $a4, $a21307; LA32-UAL-NEXT: slli.w $a6, $a6, 81308; LA32-UAL-NEXT: slli.w $a4, $a4, 241309; LA32-UAL-NEXT: or $a4, $a4, $a61310; LA32-UAL-NEXT: or $a4, $a4, $a51311; LA32-UAL-NEXT: bne $a3, $a4, .LBB28_31312; LA32-UAL-NEXT: # %bb.1: # %loadbb11313; LA32-UAL-NEXT: ld.w $a0, $a0, 31314; LA32-UAL-NEXT: ld.w $a1, $a1, 31315; LA32-UAL-NEXT: srli.w $a3, $a0, 81316; LA32-UAL-NEXT: and $a3, $a3, $a21317; LA32-UAL-NEXT: srli.w $a4, $a0, 241318; LA32-UAL-NEXT: or $a3, $a3, $a41319; LA32-UAL-NEXT: and $a4, $a0, $a21320; LA32-UAL-NEXT: slli.w $a4, $a4, 81321; LA32-UAL-NEXT: slli.w $a0, $a0, 241322; LA32-UAL-NEXT: or $a0, $a0, $a41323; LA32-UAL-NEXT: or $a3, $a0, $a31324; LA32-UAL-NEXT: srli.w $a0, $a1, 81325; LA32-UAL-NEXT: and $a0, $a0, $a21326; LA32-UAL-NEXT: srli.w $a4, $a1, 241327; LA32-UAL-NEXT: or $a0, $a0, $a41328; LA32-UAL-NEXT: and $a2, $a1, $a21329; LA32-UAL-NEXT: slli.w $a2, $a2, 81330; LA32-UAL-NEXT: slli.w $a1, $a1, 241331; LA32-UAL-NEXT: or $a1, $a1, $a21332; LA32-UAL-NEXT: or $a4, $a1, $a01333; LA32-UAL-NEXT: bne $a3, $a4, .LBB28_31334; LA32-UAL-NEXT: # %bb.2:1335; LA32-UAL-NEXT: move $a0, $zero1336; LA32-UAL-NEXT: ret1337; LA32-UAL-NEXT: .LBB28_3: # %res_block1338; LA32-UAL-NEXT: sltu $a0, $a3, $a41339; LA32-UAL-NEXT: sub.w $a0, $zero, $a01340; LA32-UAL-NEXT: ori $a0, $a0, 11341; LA32-UAL-NEXT: ret1342;1343; LA64-UAL-LABEL: memcmp_size_7:1344; LA64-UAL: # %bb.0: # %entry1345; LA64-UAL-NEXT: ld.w $a2, $a0, 01346; LA64-UAL-NEXT: ld.w $a3, $a1, 01347; LA64-UAL-NEXT: revb.2w $a2, $a21348; LA64-UAL-NEXT: addi.w $a4, $a2, 01349; LA64-UAL-NEXT: revb.2w $a3, $a31350; LA64-UAL-NEXT: addi.w $a5, $a3, 01351; LA64-UAL-NEXT: bne $a4, $a5, .LBB28_31352; LA64-UAL-NEXT: # %bb.1: # %loadbb11353; LA64-UAL-NEXT: ld.w $a0, $a0, 31354; LA64-UAL-NEXT: ld.w $a1, $a1, 31355; LA64-UAL-NEXT: revb.2w $a2, $a01356; LA64-UAL-NEXT: addi.w $a0, $a2, 01357; LA64-UAL-NEXT: revb.2w $a3, $a11358; LA64-UAL-NEXT: addi.w $a1, $a3, 01359; LA64-UAL-NEXT: bne $a0, $a1, .LBB28_31360; LA64-UAL-NEXT: # %bb.2:1361; LA64-UAL-NEXT: move $a0, $zero1362; LA64-UAL-NEXT: ret1363; LA64-UAL-NEXT: .LBB28_3: # %res_block1364; LA64-UAL-NEXT: addi.w $a0, $a3, 01365; LA64-UAL-NEXT: addi.w $a1, $a2, 01366; LA64-UAL-NEXT: sltu $a0, $a1, $a01367; LA64-UAL-NEXT: sub.d $a0, $zero, $a01368; LA64-UAL-NEXT: ori $a0, $a0, 11369; LA64-UAL-NEXT: ret1370;1371; LA32-NUAL-LABEL: memcmp_size_7:1372; LA32-NUAL: # %bb.0: # %entry1373; LA32-NUAL-NEXT: addi.w $sp, $sp, -161374; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1375; LA32-NUAL-NEXT: ori $a2, $zero, 71376; LA32-NUAL-NEXT: bl memcmp1377; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1378; LA32-NUAL-NEXT: addi.w $sp, $sp, 161379; LA32-NUAL-NEXT: ret1380;1381; LA64-NUAL-LABEL: memcmp_size_7:1382; LA64-NUAL: # %bb.0: # %entry1383; LA64-NUAL-NEXT: addi.d $sp, $sp, -161384; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1385; LA64-NUAL-NEXT: ori $a2, $zero, 71386; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)1387; LA64-NUAL-NEXT: jirl $ra, $ra, 01388; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1389; LA64-NUAL-NEXT: addi.d $sp, $sp, 161390; LA64-NUAL-NEXT: ret1391entry:1392 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 7)1393 ret i32 %memcmp1394}1395 1396define signext i32 @memcmp_size_8(ptr %s1, ptr %s2) nounwind optsize {1397; LA32-UAL-LABEL: memcmp_size_8:1398; LA32-UAL: # %bb.0: # %entry1399; LA32-UAL-NEXT: ld.w $a3, $a0, 01400; LA32-UAL-NEXT: ld.w $a4, $a1, 01401; LA32-UAL-NEXT: srli.w $a5, $a3, 81402; LA32-UAL-NEXT: lu12i.w $a2, 151403; LA32-UAL-NEXT: ori $a2, $a2, 38401404; LA32-UAL-NEXT: and $a5, $a5, $a21405; LA32-UAL-NEXT: srli.w $a6, $a3, 241406; LA32-UAL-NEXT: or $a5, $a5, $a61407; LA32-UAL-NEXT: and $a6, $a3, $a21408; LA32-UAL-NEXT: slli.w $a6, $a6, 81409; LA32-UAL-NEXT: slli.w $a3, $a3, 241410; LA32-UAL-NEXT: or $a3, $a3, $a61411; LA32-UAL-NEXT: or $a3, $a3, $a51412; LA32-UAL-NEXT: srli.w $a5, $a4, 81413; LA32-UAL-NEXT: and $a5, $a5, $a21414; LA32-UAL-NEXT: srli.w $a6, $a4, 241415; LA32-UAL-NEXT: or $a5, $a5, $a61416; LA32-UAL-NEXT: and $a6, $a4, $a21417; LA32-UAL-NEXT: slli.w $a6, $a6, 81418; LA32-UAL-NEXT: slli.w $a4, $a4, 241419; LA32-UAL-NEXT: or $a4, $a4, $a61420; LA32-UAL-NEXT: or $a4, $a4, $a51421; LA32-UAL-NEXT: bne $a3, $a4, .LBB29_31422; LA32-UAL-NEXT: # %bb.1: # %loadbb11423; LA32-UAL-NEXT: ld.w $a0, $a0, 41424; LA32-UAL-NEXT: ld.w $a1, $a1, 41425; LA32-UAL-NEXT: srli.w $a3, $a0, 81426; LA32-UAL-NEXT: and $a3, $a3, $a21427; LA32-UAL-NEXT: srli.w $a4, $a0, 241428; LA32-UAL-NEXT: or $a3, $a3, $a41429; LA32-UAL-NEXT: and $a4, $a0, $a21430; LA32-UAL-NEXT: slli.w $a4, $a4, 81431; LA32-UAL-NEXT: slli.w $a0, $a0, 241432; LA32-UAL-NEXT: or $a0, $a0, $a41433; LA32-UAL-NEXT: or $a3, $a0, $a31434; LA32-UAL-NEXT: srli.w $a0, $a1, 81435; LA32-UAL-NEXT: and $a0, $a0, $a21436; LA32-UAL-NEXT: srli.w $a4, $a1, 241437; LA32-UAL-NEXT: or $a0, $a0, $a41438; LA32-UAL-NEXT: and $a2, $a1, $a21439; LA32-UAL-NEXT: slli.w $a2, $a2, 81440; LA32-UAL-NEXT: slli.w $a1, $a1, 241441; LA32-UAL-NEXT: or $a1, $a1, $a21442; LA32-UAL-NEXT: or $a4, $a1, $a01443; LA32-UAL-NEXT: bne $a3, $a4, .LBB29_31444; LA32-UAL-NEXT: # %bb.2:1445; LA32-UAL-NEXT: move $a0, $zero1446; LA32-UAL-NEXT: ret1447; LA32-UAL-NEXT: .LBB29_3: # %res_block1448; LA32-UAL-NEXT: sltu $a0, $a3, $a41449; LA32-UAL-NEXT: sub.w $a0, $zero, $a01450; LA32-UAL-NEXT: ori $a0, $a0, 11451; LA32-UAL-NEXT: ret1452;1453; LA64-UAL-LABEL: memcmp_size_8:1454; LA64-UAL: # %bb.0: # %entry1455; LA64-UAL-NEXT: ld.d $a0, $a0, 01456; LA64-UAL-NEXT: ld.d $a1, $a1, 01457; LA64-UAL-NEXT: revb.d $a0, $a01458; LA64-UAL-NEXT: revb.d $a1, $a11459; LA64-UAL-NEXT: sltu $a2, $a0, $a11460; LA64-UAL-NEXT: sltu $a0, $a1, $a01461; LA64-UAL-NEXT: sub.d $a0, $a0, $a21462; LA64-UAL-NEXT: ret1463;1464; LA32-NUAL-LABEL: memcmp_size_8:1465; LA32-NUAL: # %bb.0: # %entry1466; LA32-NUAL-NEXT: addi.w $sp, $sp, -161467; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1468; LA32-NUAL-NEXT: ori $a2, $zero, 81469; LA32-NUAL-NEXT: bl memcmp1470; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1471; LA32-NUAL-NEXT: addi.w $sp, $sp, 161472; LA32-NUAL-NEXT: ret1473;1474; LA64-NUAL-LABEL: memcmp_size_8:1475; LA64-NUAL: # %bb.0: # %entry1476; LA64-NUAL-NEXT: addi.d $sp, $sp, -161477; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1478; LA64-NUAL-NEXT: ori $a2, $zero, 81479; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)1480; LA64-NUAL-NEXT: jirl $ra, $ra, 01481; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1482; LA64-NUAL-NEXT: addi.d $sp, $sp, 161483; LA64-NUAL-NEXT: ret1484entry:1485 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 8)1486 ret i32 %memcmp1487}1488 1489define signext i32 @memcmp_size_15(ptr %s1, ptr %s2) nounwind optsize {1490; LA32-UAL-LABEL: memcmp_size_15:1491; LA32-UAL: # %bb.0: # %entry1492; LA32-UAL-NEXT: ld.w $a3, $a0, 01493; LA32-UAL-NEXT: ld.w $a4, $a1, 01494; LA32-UAL-NEXT: srli.w $a5, $a3, 81495; LA32-UAL-NEXT: lu12i.w $a2, 151496; LA32-UAL-NEXT: ori $a2, $a2, 38401497; LA32-UAL-NEXT: and $a5, $a5, $a21498; LA32-UAL-NEXT: srli.w $a6, $a3, 241499; LA32-UAL-NEXT: or $a5, $a5, $a61500; LA32-UAL-NEXT: and $a6, $a3, $a21501; LA32-UAL-NEXT: slli.w $a6, $a6, 81502; LA32-UAL-NEXT: slli.w $a3, $a3, 241503; LA32-UAL-NEXT: or $a3, $a3, $a61504; LA32-UAL-NEXT: or $a3, $a3, $a51505; LA32-UAL-NEXT: srli.w $a5, $a4, 81506; LA32-UAL-NEXT: and $a5, $a5, $a21507; LA32-UAL-NEXT: srli.w $a6, $a4, 241508; LA32-UAL-NEXT: or $a5, $a5, $a61509; LA32-UAL-NEXT: and $a6, $a4, $a21510; LA32-UAL-NEXT: slli.w $a6, $a6, 81511; LA32-UAL-NEXT: slli.w $a4, $a4, 241512; LA32-UAL-NEXT: or $a4, $a4, $a61513; LA32-UAL-NEXT: or $a4, $a4, $a51514; LA32-UAL-NEXT: bne $a3, $a4, .LBB30_51515; LA32-UAL-NEXT: # %bb.1: # %loadbb11516; LA32-UAL-NEXT: ld.w $a3, $a0, 41517; LA32-UAL-NEXT: ld.w $a4, $a1, 41518; LA32-UAL-NEXT: srli.w $a5, $a3, 81519; LA32-UAL-NEXT: and $a5, $a5, $a21520; LA32-UAL-NEXT: srli.w $a6, $a3, 241521; LA32-UAL-NEXT: or $a5, $a5, $a61522; LA32-UAL-NEXT: and $a6, $a3, $a21523; LA32-UAL-NEXT: slli.w $a6, $a6, 81524; LA32-UAL-NEXT: slli.w $a3, $a3, 241525; LA32-UAL-NEXT: or $a3, $a3, $a61526; LA32-UAL-NEXT: or $a3, $a3, $a51527; LA32-UAL-NEXT: srli.w $a5, $a4, 81528; LA32-UAL-NEXT: and $a5, $a5, $a21529; LA32-UAL-NEXT: srli.w $a6, $a4, 241530; LA32-UAL-NEXT: or $a5, $a5, $a61531; LA32-UAL-NEXT: and $a6, $a4, $a21532; LA32-UAL-NEXT: slli.w $a6, $a6, 81533; LA32-UAL-NEXT: slli.w $a4, $a4, 241534; LA32-UAL-NEXT: or $a4, $a4, $a61535; LA32-UAL-NEXT: or $a4, $a4, $a51536; LA32-UAL-NEXT: bne $a3, $a4, .LBB30_51537; LA32-UAL-NEXT: # %bb.2: # %loadbb21538; LA32-UAL-NEXT: ld.w $a3, $a0, 81539; LA32-UAL-NEXT: ld.w $a4, $a1, 81540; LA32-UAL-NEXT: srli.w $a5, $a3, 81541; LA32-UAL-NEXT: and $a5, $a5, $a21542; LA32-UAL-NEXT: srli.w $a6, $a3, 241543; LA32-UAL-NEXT: or $a5, $a5, $a61544; LA32-UAL-NEXT: and $a6, $a3, $a21545; LA32-UAL-NEXT: slli.w $a6, $a6, 81546; LA32-UAL-NEXT: slli.w $a3, $a3, 241547; LA32-UAL-NEXT: or $a3, $a3, $a61548; LA32-UAL-NEXT: or $a3, $a3, $a51549; LA32-UAL-NEXT: srli.w $a5, $a4, 81550; LA32-UAL-NEXT: and $a5, $a5, $a21551; LA32-UAL-NEXT: srli.w $a6, $a4, 241552; LA32-UAL-NEXT: or $a5, $a5, $a61553; LA32-UAL-NEXT: and $a6, $a4, $a21554; LA32-UAL-NEXT: slli.w $a6, $a6, 81555; LA32-UAL-NEXT: slli.w $a4, $a4, 241556; LA32-UAL-NEXT: or $a4, $a4, $a61557; LA32-UAL-NEXT: or $a4, $a4, $a51558; LA32-UAL-NEXT: bne $a3, $a4, .LBB30_51559; LA32-UAL-NEXT: # %bb.3: # %loadbb31560; LA32-UAL-NEXT: ld.w $a0, $a0, 111561; LA32-UAL-NEXT: ld.w $a1, $a1, 111562; LA32-UAL-NEXT: srli.w $a3, $a0, 81563; LA32-UAL-NEXT: and $a3, $a3, $a21564; LA32-UAL-NEXT: srli.w $a4, $a0, 241565; LA32-UAL-NEXT: or $a3, $a3, $a41566; LA32-UAL-NEXT: and $a4, $a0, $a21567; LA32-UAL-NEXT: slli.w $a4, $a4, 81568; LA32-UAL-NEXT: slli.w $a0, $a0, 241569; LA32-UAL-NEXT: or $a0, $a0, $a41570; LA32-UAL-NEXT: or $a3, $a0, $a31571; LA32-UAL-NEXT: srli.w $a0, $a1, 81572; LA32-UAL-NEXT: and $a0, $a0, $a21573; LA32-UAL-NEXT: srli.w $a4, $a1, 241574; LA32-UAL-NEXT: or $a0, $a0, $a41575; LA32-UAL-NEXT: and $a2, $a1, $a21576; LA32-UAL-NEXT: slli.w $a2, $a2, 81577; LA32-UAL-NEXT: slli.w $a1, $a1, 241578; LA32-UAL-NEXT: or $a1, $a1, $a21579; LA32-UAL-NEXT: or $a4, $a1, $a01580; LA32-UAL-NEXT: bne $a3, $a4, .LBB30_51581; LA32-UAL-NEXT: # %bb.4:1582; LA32-UAL-NEXT: move $a0, $zero1583; LA32-UAL-NEXT: ret1584; LA32-UAL-NEXT: .LBB30_5: # %res_block1585; LA32-UAL-NEXT: sltu $a0, $a3, $a41586; LA32-UAL-NEXT: sub.w $a0, $zero, $a01587; LA32-UAL-NEXT: ori $a0, $a0, 11588; LA32-UAL-NEXT: ret1589;1590; LA64-UAL-LABEL: memcmp_size_15:1591; LA64-UAL: # %bb.0: # %entry1592; LA64-UAL-NEXT: ld.d $a2, $a0, 01593; LA64-UAL-NEXT: ld.d $a3, $a1, 01594; LA64-UAL-NEXT: revb.d $a2, $a21595; LA64-UAL-NEXT: revb.d $a3, $a31596; LA64-UAL-NEXT: bne $a2, $a3, .LBB30_31597; LA64-UAL-NEXT: # %bb.1: # %loadbb11598; LA64-UAL-NEXT: ld.d $a0, $a0, 71599; LA64-UAL-NEXT: ld.d $a1, $a1, 71600; LA64-UAL-NEXT: revb.d $a2, $a01601; LA64-UAL-NEXT: revb.d $a3, $a11602; LA64-UAL-NEXT: bne $a2, $a3, .LBB30_31603; LA64-UAL-NEXT: # %bb.2:1604; LA64-UAL-NEXT: move $a0, $zero1605; LA64-UAL-NEXT: ret1606; LA64-UAL-NEXT: .LBB30_3: # %res_block1607; LA64-UAL-NEXT: sltu $a0, $a2, $a31608; LA64-UAL-NEXT: sub.d $a0, $zero, $a01609; LA64-UAL-NEXT: ori $a0, $a0, 11610; LA64-UAL-NEXT: ret1611;1612; LA32-NUAL-LABEL: memcmp_size_15:1613; LA32-NUAL: # %bb.0: # %entry1614; LA32-NUAL-NEXT: addi.w $sp, $sp, -161615; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1616; LA32-NUAL-NEXT: ori $a2, $zero, 151617; LA32-NUAL-NEXT: bl memcmp1618; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1619; LA32-NUAL-NEXT: addi.w $sp, $sp, 161620; LA32-NUAL-NEXT: ret1621;1622; LA64-NUAL-LABEL: memcmp_size_15:1623; LA64-NUAL: # %bb.0: # %entry1624; LA64-NUAL-NEXT: addi.d $sp, $sp, -161625; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1626; LA64-NUAL-NEXT: ori $a2, $zero, 151627; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)1628; LA64-NUAL-NEXT: jirl $ra, $ra, 01629; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1630; LA64-NUAL-NEXT: addi.d $sp, $sp, 161631; LA64-NUAL-NEXT: ret1632entry:1633 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 15)1634 ret i32 %memcmp1635}1636 1637define signext i32 @memcmp_size_16(ptr %s1, ptr %s2) nounwind optsize {1638; LA32-UAL-LABEL: memcmp_size_16:1639; LA32-UAL: # %bb.0: # %entry1640; LA32-UAL-NEXT: ld.w $a3, $a0, 01641; LA32-UAL-NEXT: ld.w $a4, $a1, 01642; LA32-UAL-NEXT: srli.w $a5, $a3, 81643; LA32-UAL-NEXT: lu12i.w $a2, 151644; LA32-UAL-NEXT: ori $a2, $a2, 38401645; LA32-UAL-NEXT: and $a5, $a5, $a21646; LA32-UAL-NEXT: srli.w $a6, $a3, 241647; LA32-UAL-NEXT: or $a5, $a5, $a61648; LA32-UAL-NEXT: and $a6, $a3, $a21649; LA32-UAL-NEXT: slli.w $a6, $a6, 81650; LA32-UAL-NEXT: slli.w $a3, $a3, 241651; LA32-UAL-NEXT: or $a3, $a3, $a61652; LA32-UAL-NEXT: or $a3, $a3, $a51653; LA32-UAL-NEXT: srli.w $a5, $a4, 81654; LA32-UAL-NEXT: and $a5, $a5, $a21655; LA32-UAL-NEXT: srli.w $a6, $a4, 241656; LA32-UAL-NEXT: or $a5, $a5, $a61657; LA32-UAL-NEXT: and $a6, $a4, $a21658; LA32-UAL-NEXT: slli.w $a6, $a6, 81659; LA32-UAL-NEXT: slli.w $a4, $a4, 241660; LA32-UAL-NEXT: or $a4, $a4, $a61661; LA32-UAL-NEXT: or $a4, $a4, $a51662; LA32-UAL-NEXT: bne $a3, $a4, .LBB31_51663; LA32-UAL-NEXT: # %bb.1: # %loadbb11664; LA32-UAL-NEXT: ld.w $a3, $a0, 41665; LA32-UAL-NEXT: ld.w $a4, $a1, 41666; LA32-UAL-NEXT: srli.w $a5, $a3, 81667; LA32-UAL-NEXT: and $a5, $a5, $a21668; LA32-UAL-NEXT: srli.w $a6, $a3, 241669; LA32-UAL-NEXT: or $a5, $a5, $a61670; LA32-UAL-NEXT: and $a6, $a3, $a21671; LA32-UAL-NEXT: slli.w $a6, $a6, 81672; LA32-UAL-NEXT: slli.w $a3, $a3, 241673; LA32-UAL-NEXT: or $a3, $a3, $a61674; LA32-UAL-NEXT: or $a3, $a3, $a51675; LA32-UAL-NEXT: srli.w $a5, $a4, 81676; LA32-UAL-NEXT: and $a5, $a5, $a21677; LA32-UAL-NEXT: srli.w $a6, $a4, 241678; LA32-UAL-NEXT: or $a5, $a5, $a61679; LA32-UAL-NEXT: and $a6, $a4, $a21680; LA32-UAL-NEXT: slli.w $a6, $a6, 81681; LA32-UAL-NEXT: slli.w $a4, $a4, 241682; LA32-UAL-NEXT: or $a4, $a4, $a61683; LA32-UAL-NEXT: or $a4, $a4, $a51684; LA32-UAL-NEXT: bne $a3, $a4, .LBB31_51685; LA32-UAL-NEXT: # %bb.2: # %loadbb21686; LA32-UAL-NEXT: ld.w $a3, $a0, 81687; LA32-UAL-NEXT: ld.w $a4, $a1, 81688; LA32-UAL-NEXT: srli.w $a5, $a3, 81689; LA32-UAL-NEXT: and $a5, $a5, $a21690; LA32-UAL-NEXT: srli.w $a6, $a3, 241691; LA32-UAL-NEXT: or $a5, $a5, $a61692; LA32-UAL-NEXT: and $a6, $a3, $a21693; LA32-UAL-NEXT: slli.w $a6, $a6, 81694; LA32-UAL-NEXT: slli.w $a3, $a3, 241695; LA32-UAL-NEXT: or $a3, $a3, $a61696; LA32-UAL-NEXT: or $a3, $a3, $a51697; LA32-UAL-NEXT: srli.w $a5, $a4, 81698; LA32-UAL-NEXT: and $a5, $a5, $a21699; LA32-UAL-NEXT: srli.w $a6, $a4, 241700; LA32-UAL-NEXT: or $a5, $a5, $a61701; LA32-UAL-NEXT: and $a6, $a4, $a21702; LA32-UAL-NEXT: slli.w $a6, $a6, 81703; LA32-UAL-NEXT: slli.w $a4, $a4, 241704; LA32-UAL-NEXT: or $a4, $a4, $a61705; LA32-UAL-NEXT: or $a4, $a4, $a51706; LA32-UAL-NEXT: bne $a3, $a4, .LBB31_51707; LA32-UAL-NEXT: # %bb.3: # %loadbb31708; LA32-UAL-NEXT: ld.w $a0, $a0, 121709; LA32-UAL-NEXT: ld.w $a1, $a1, 121710; LA32-UAL-NEXT: srli.w $a3, $a0, 81711; LA32-UAL-NEXT: and $a3, $a3, $a21712; LA32-UAL-NEXT: srli.w $a4, $a0, 241713; LA32-UAL-NEXT: or $a3, $a3, $a41714; LA32-UAL-NEXT: and $a4, $a0, $a21715; LA32-UAL-NEXT: slli.w $a4, $a4, 81716; LA32-UAL-NEXT: slli.w $a0, $a0, 241717; LA32-UAL-NEXT: or $a0, $a0, $a41718; LA32-UAL-NEXT: or $a3, $a0, $a31719; LA32-UAL-NEXT: srli.w $a0, $a1, 81720; LA32-UAL-NEXT: and $a0, $a0, $a21721; LA32-UAL-NEXT: srli.w $a4, $a1, 241722; LA32-UAL-NEXT: or $a0, $a0, $a41723; LA32-UAL-NEXT: and $a2, $a1, $a21724; LA32-UAL-NEXT: slli.w $a2, $a2, 81725; LA32-UAL-NEXT: slli.w $a1, $a1, 241726; LA32-UAL-NEXT: or $a1, $a1, $a21727; LA32-UAL-NEXT: or $a4, $a1, $a01728; LA32-UAL-NEXT: bne $a3, $a4, .LBB31_51729; LA32-UAL-NEXT: # %bb.4:1730; LA32-UAL-NEXT: move $a0, $zero1731; LA32-UAL-NEXT: ret1732; LA32-UAL-NEXT: .LBB31_5: # %res_block1733; LA32-UAL-NEXT: sltu $a0, $a3, $a41734; LA32-UAL-NEXT: sub.w $a0, $zero, $a01735; LA32-UAL-NEXT: ori $a0, $a0, 11736; LA32-UAL-NEXT: ret1737;1738; LA64-UAL-LABEL: memcmp_size_16:1739; LA64-UAL: # %bb.0: # %entry1740; LA64-UAL-NEXT: ld.d $a2, $a0, 01741; LA64-UAL-NEXT: ld.d $a3, $a1, 01742; LA64-UAL-NEXT: revb.d $a2, $a21743; LA64-UAL-NEXT: revb.d $a3, $a31744; LA64-UAL-NEXT: bne $a2, $a3, .LBB31_31745; LA64-UAL-NEXT: # %bb.1: # %loadbb11746; LA64-UAL-NEXT: ld.d $a0, $a0, 81747; LA64-UAL-NEXT: ld.d $a1, $a1, 81748; LA64-UAL-NEXT: revb.d $a2, $a01749; LA64-UAL-NEXT: revb.d $a3, $a11750; LA64-UAL-NEXT: bne $a2, $a3, .LBB31_31751; LA64-UAL-NEXT: # %bb.2:1752; LA64-UAL-NEXT: move $a0, $zero1753; LA64-UAL-NEXT: ret1754; LA64-UAL-NEXT: .LBB31_3: # %res_block1755; LA64-UAL-NEXT: sltu $a0, $a2, $a31756; LA64-UAL-NEXT: sub.d $a0, $zero, $a01757; LA64-UAL-NEXT: ori $a0, $a0, 11758; LA64-UAL-NEXT: ret1759;1760; LA32-NUAL-LABEL: memcmp_size_16:1761; LA32-NUAL: # %bb.0: # %entry1762; LA32-NUAL-NEXT: addi.w $sp, $sp, -161763; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1764; LA32-NUAL-NEXT: ori $a2, $zero, 161765; LA32-NUAL-NEXT: bl memcmp1766; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1767; LA32-NUAL-NEXT: addi.w $sp, $sp, 161768; LA32-NUAL-NEXT: ret1769;1770; LA64-NUAL-LABEL: memcmp_size_16:1771; LA64-NUAL: # %bb.0: # %entry1772; LA64-NUAL-NEXT: addi.d $sp, $sp, -161773; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1774; LA64-NUAL-NEXT: ori $a2, $zero, 161775; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)1776; LA64-NUAL-NEXT: jirl $ra, $ra, 01777; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1778; LA64-NUAL-NEXT: addi.d $sp, $sp, 161779; LA64-NUAL-NEXT: ret1780entry:1781 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 16)1782 ret i32 %memcmp1783}1784 1785define signext i32 @memcmp_size_31(ptr %s1, ptr %s2) nounwind optsize {1786; LA32-LABEL: memcmp_size_31:1787; LA32: # %bb.0: # %entry1788; LA32-NEXT: addi.w $sp, $sp, -161789; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1790; LA32-NEXT: ori $a2, $zero, 311791; LA32-NEXT: bl memcmp1792; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1793; LA32-NEXT: addi.w $sp, $sp, 161794; LA32-NEXT: ret1795;1796; LA64-UAL-LABEL: memcmp_size_31:1797; LA64-UAL: # %bb.0: # %entry1798; LA64-UAL-NEXT: ld.d $a2, $a0, 01799; LA64-UAL-NEXT: ld.d $a3, $a1, 01800; LA64-UAL-NEXT: revb.d $a2, $a21801; LA64-UAL-NEXT: revb.d $a3, $a31802; LA64-UAL-NEXT: bne $a2, $a3, .LBB32_51803; LA64-UAL-NEXT: # %bb.1: # %loadbb11804; LA64-UAL-NEXT: ld.d $a2, $a0, 81805; LA64-UAL-NEXT: ld.d $a3, $a1, 81806; LA64-UAL-NEXT: revb.d $a2, $a21807; LA64-UAL-NEXT: revb.d $a3, $a31808; LA64-UAL-NEXT: bne $a2, $a3, .LBB32_51809; LA64-UAL-NEXT: # %bb.2: # %loadbb21810; LA64-UAL-NEXT: ld.d $a2, $a0, 161811; LA64-UAL-NEXT: ld.d $a3, $a1, 161812; LA64-UAL-NEXT: revb.d $a2, $a21813; LA64-UAL-NEXT: revb.d $a3, $a31814; LA64-UAL-NEXT: bne $a2, $a3, .LBB32_51815; LA64-UAL-NEXT: # %bb.3: # %loadbb31816; LA64-UAL-NEXT: ld.d $a0, $a0, 231817; LA64-UAL-NEXT: ld.d $a1, $a1, 231818; LA64-UAL-NEXT: revb.d $a2, $a01819; LA64-UAL-NEXT: revb.d $a3, $a11820; LA64-UAL-NEXT: bne $a2, $a3, .LBB32_51821; LA64-UAL-NEXT: # %bb.4:1822; LA64-UAL-NEXT: move $a0, $zero1823; LA64-UAL-NEXT: ret1824; LA64-UAL-NEXT: .LBB32_5: # %res_block1825; LA64-UAL-NEXT: sltu $a0, $a2, $a31826; LA64-UAL-NEXT: sub.d $a0, $zero, $a01827; LA64-UAL-NEXT: ori $a0, $a0, 11828; LA64-UAL-NEXT: ret1829;1830; LA64-NUAL-LABEL: memcmp_size_31:1831; LA64-NUAL: # %bb.0: # %entry1832; LA64-NUAL-NEXT: addi.d $sp, $sp, -161833; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1834; LA64-NUAL-NEXT: ori $a2, $zero, 311835; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)1836; LA64-NUAL-NEXT: jirl $ra, $ra, 01837; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1838; LA64-NUAL-NEXT: addi.d $sp, $sp, 161839; LA64-NUAL-NEXT: ret1840entry:1841 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 31)1842 ret i32 %memcmp1843}1844 1845define signext i32 @memcmp_size_32(ptr %s1, ptr %s2) nounwind optsize {1846; LA32-LABEL: memcmp_size_32:1847; LA32: # %bb.0: # %entry1848; LA32-NEXT: addi.w $sp, $sp, -161849; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1850; LA32-NEXT: ori $a2, $zero, 321851; LA32-NEXT: bl memcmp1852; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1853; LA32-NEXT: addi.w $sp, $sp, 161854; LA32-NEXT: ret1855;1856; LA64-UAL-LABEL: memcmp_size_32:1857; LA64-UAL: # %bb.0: # %entry1858; LA64-UAL-NEXT: ld.d $a2, $a0, 01859; LA64-UAL-NEXT: ld.d $a3, $a1, 01860; LA64-UAL-NEXT: revb.d $a2, $a21861; LA64-UAL-NEXT: revb.d $a3, $a31862; LA64-UAL-NEXT: bne $a2, $a3, .LBB33_51863; LA64-UAL-NEXT: # %bb.1: # %loadbb11864; LA64-UAL-NEXT: ld.d $a2, $a0, 81865; LA64-UAL-NEXT: ld.d $a3, $a1, 81866; LA64-UAL-NEXT: revb.d $a2, $a21867; LA64-UAL-NEXT: revb.d $a3, $a31868; LA64-UAL-NEXT: bne $a2, $a3, .LBB33_51869; LA64-UAL-NEXT: # %bb.2: # %loadbb21870; LA64-UAL-NEXT: ld.d $a2, $a0, 161871; LA64-UAL-NEXT: ld.d $a3, $a1, 161872; LA64-UAL-NEXT: revb.d $a2, $a21873; LA64-UAL-NEXT: revb.d $a3, $a31874; LA64-UAL-NEXT: bne $a2, $a3, .LBB33_51875; LA64-UAL-NEXT: # %bb.3: # %loadbb31876; LA64-UAL-NEXT: ld.d $a0, $a0, 241877; LA64-UAL-NEXT: ld.d $a1, $a1, 241878; LA64-UAL-NEXT: revb.d $a2, $a01879; LA64-UAL-NEXT: revb.d $a3, $a11880; LA64-UAL-NEXT: bne $a2, $a3, .LBB33_51881; LA64-UAL-NEXT: # %bb.4:1882; LA64-UAL-NEXT: move $a0, $zero1883; LA64-UAL-NEXT: ret1884; LA64-UAL-NEXT: .LBB33_5: # %res_block1885; LA64-UAL-NEXT: sltu $a0, $a2, $a31886; LA64-UAL-NEXT: sub.d $a0, $zero, $a01887; LA64-UAL-NEXT: ori $a0, $a0, 11888; LA64-UAL-NEXT: ret1889;1890; LA64-NUAL-LABEL: memcmp_size_32:1891; LA64-NUAL: # %bb.0: # %entry1892; LA64-NUAL-NEXT: addi.d $sp, $sp, -161893; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1894; LA64-NUAL-NEXT: ori $a2, $zero, 321895; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)1896; LA64-NUAL-NEXT: jirl $ra, $ra, 01897; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1898; LA64-NUAL-NEXT: addi.d $sp, $sp, 161899; LA64-NUAL-NEXT: ret1900entry:1901 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 32)1902 ret i32 %memcmp1903}1904 1905define signext i32 @memcmp_size_63(ptr %s1, ptr %s2) nounwind optsize {1906; LA32-LABEL: memcmp_size_63:1907; LA32: # %bb.0: # %entry1908; LA32-NEXT: addi.w $sp, $sp, -161909; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1910; LA32-NEXT: ori $a2, $zero, 631911; LA32-NEXT: bl memcmp1912; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1913; LA32-NEXT: addi.w $sp, $sp, 161914; LA32-NEXT: ret1915;1916; LA64-LABEL: memcmp_size_63:1917; LA64: # %bb.0: # %entry1918; LA64-NEXT: addi.d $sp, $sp, -161919; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1920; LA64-NEXT: ori $a2, $zero, 631921; LA64-NEXT: pcaddu18i $ra, %call36(memcmp)1922; LA64-NEXT: jirl $ra, $ra, 01923; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1924; LA64-NEXT: addi.d $sp, $sp, 161925; LA64-NEXT: ret1926entry:1927 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 63)1928 ret i32 %memcmp1929}1930 1931define signext i32 @memcmp_size_64(ptr %s1, ptr %s2) nounwind optsize {1932; LA32-LABEL: memcmp_size_64:1933; LA32: # %bb.0: # %entry1934; LA32-NEXT: addi.w $sp, $sp, -161935; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1936; LA32-NEXT: ori $a2, $zero, 641937; LA32-NEXT: bl memcmp1938; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1939; LA32-NEXT: addi.w $sp, $sp, 161940; LA32-NEXT: ret1941;1942; LA64-LABEL: memcmp_size_64:1943; LA64: # %bb.0: # %entry1944; LA64-NEXT: addi.d $sp, $sp, -161945; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1946; LA64-NEXT: ori $a2, $zero, 641947; LA64-NEXT: pcaddu18i $ra, %call36(memcmp)1948; LA64-NEXT: jirl $ra, $ra, 01949; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1950; LA64-NEXT: addi.d $sp, $sp, 161951; LA64-NEXT: ret1952entry:1953 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 64)1954 ret i32 %memcmp1955}1956 1957define signext i32 @memcmp_size_127(ptr %s1, ptr %s2) nounwind optsize {1958; LA32-LABEL: memcmp_size_127:1959; LA32: # %bb.0: # %entry1960; LA32-NEXT: addi.w $sp, $sp, -161961; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1962; LA32-NEXT: ori $a2, $zero, 1271963; LA32-NEXT: bl memcmp1964; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1965; LA32-NEXT: addi.w $sp, $sp, 161966; LA32-NEXT: ret1967;1968; LA64-LABEL: memcmp_size_127:1969; LA64: # %bb.0: # %entry1970; LA64-NEXT: addi.d $sp, $sp, -161971; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1972; LA64-NEXT: ori $a2, $zero, 1271973; LA64-NEXT: pcaddu18i $ra, %call36(memcmp)1974; LA64-NEXT: jirl $ra, $ra, 01975; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1976; LA64-NEXT: addi.d $sp, $sp, 161977; LA64-NEXT: ret1978entry:1979 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 127)1980 ret i32 %memcmp1981}1982 1983define signext i32 @memcmp_size_128(ptr %s1, ptr %s2) nounwind optsize {1984; LA32-LABEL: memcmp_size_128:1985; LA32: # %bb.0: # %entry1986; LA32-NEXT: addi.w $sp, $sp, -161987; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1988; LA32-NEXT: ori $a2, $zero, 1281989; LA32-NEXT: bl memcmp1990; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1991; LA32-NEXT: addi.w $sp, $sp, 161992; LA32-NEXT: ret1993;1994; LA64-LABEL: memcmp_size_128:1995; LA64: # %bb.0: # %entry1996; LA64-NEXT: addi.d $sp, $sp, -161997; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1998; LA64-NEXT: ori $a2, $zero, 1281999; LA64-NEXT: pcaddu18i $ra, %call36(memcmp)2000; LA64-NEXT: jirl $ra, $ra, 02001; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload2002; LA64-NEXT: addi.d $sp, $sp, 162003; LA64-NEXT: ret2004entry:2005 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 128)2006 ret i32 %memcmp2007}2008 2009define signext i32 @memcmp_size_runtime(ptr %s1, ptr %s2, iGRLen %len) nounwind optsize {2010; LA32-LABEL: memcmp_size_runtime:2011; LA32: # %bb.0: # %entry2012; LA32-NEXT: addi.w $sp, $sp, -162013; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill2014; LA32-NEXT: bl memcmp2015; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload2016; LA32-NEXT: addi.w $sp, $sp, 162017; LA32-NEXT: ret2018;2019; LA64-LABEL: memcmp_size_runtime:2020; LA64: # %bb.0: # %entry2021; LA64-NEXT: addi.d $sp, $sp, -162022; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill2023; LA64-NEXT: pcaddu18i $ra, %call36(memcmp)2024; LA64-NEXT: jirl $ra, $ra, 02025; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload2026; LA64-NEXT: addi.d $sp, $sp, 162027; LA64-NEXT: ret2028entry:2029 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen %len)2030 ret i32 %memcmp2031}2032 2033define i1 @memcmp_eq_zero(ptr %s1, ptr %s2) nounwind optsize {2034; LA32-UAL-LABEL: memcmp_eq_zero:2035; LA32-UAL: # %bb.0: # %entry2036; LA32-UAL-NEXT: ld.w $a0, $a0, 02037; LA32-UAL-NEXT: ld.w $a1, $a1, 02038; LA32-UAL-NEXT: xor $a0, $a0, $a12039; LA32-UAL-NEXT: sltui $a0, $a0, 12040; LA32-UAL-NEXT: ret2041;2042; LA64-UAL-LABEL: memcmp_eq_zero:2043; LA64-UAL: # %bb.0: # %entry2044; LA64-UAL-NEXT: ld.w $a0, $a0, 02045; LA64-UAL-NEXT: ld.w $a1, $a1, 02046; LA64-UAL-NEXT: xor $a0, $a0, $a12047; LA64-UAL-NEXT: sltui $a0, $a0, 12048; LA64-UAL-NEXT: ret2049;2050; LA32-NUAL-LABEL: memcmp_eq_zero:2051; LA32-NUAL: # %bb.0: # %entry2052; LA32-NUAL-NEXT: ld.bu $a2, $a1, 12053; LA32-NUAL-NEXT: ld.bu $a3, $a1, 02054; LA32-NUAL-NEXT: ld.bu $a4, $a1, 22055; LA32-NUAL-NEXT: ld.bu $a1, $a1, 32056; LA32-NUAL-NEXT: slli.w $a2, $a2, 82057; LA32-NUAL-NEXT: or $a2, $a2, $a32058; LA32-NUAL-NEXT: slli.w $a3, $a4, 162059; LA32-NUAL-NEXT: slli.w $a1, $a1, 242060; LA32-NUAL-NEXT: or $a1, $a1, $a32061; LA32-NUAL-NEXT: or $a1, $a1, $a22062; LA32-NUAL-NEXT: ld.bu $a2, $a0, 12063; LA32-NUAL-NEXT: ld.bu $a3, $a0, 02064; LA32-NUAL-NEXT: ld.bu $a4, $a0, 22065; LA32-NUAL-NEXT: ld.bu $a0, $a0, 32066; LA32-NUAL-NEXT: slli.w $a2, $a2, 82067; LA32-NUAL-NEXT: or $a2, $a2, $a32068; LA32-NUAL-NEXT: slli.w $a3, $a4, 162069; LA32-NUAL-NEXT: slli.w $a0, $a0, 242070; LA32-NUAL-NEXT: or $a0, $a0, $a32071; LA32-NUAL-NEXT: or $a0, $a0, $a22072; LA32-NUAL-NEXT: xor $a0, $a0, $a12073; LA32-NUAL-NEXT: sltui $a0, $a0, 12074; LA32-NUAL-NEXT: ret2075;2076; LA64-NUAL-LABEL: memcmp_eq_zero:2077; LA64-NUAL: # %bb.0: # %entry2078; LA64-NUAL-NEXT: ld.bu $a2, $a1, 12079; LA64-NUAL-NEXT: ld.bu $a3, $a1, 02080; LA64-NUAL-NEXT: ld.bu $a4, $a1, 22081; LA64-NUAL-NEXT: ld.b $a1, $a1, 32082; LA64-NUAL-NEXT: slli.d $a2, $a2, 82083; LA64-NUAL-NEXT: or $a2, $a2, $a32084; LA64-NUAL-NEXT: slli.d $a3, $a4, 162085; LA64-NUAL-NEXT: slli.d $a1, $a1, 242086; LA64-NUAL-NEXT: or $a1, $a1, $a32087; LA64-NUAL-NEXT: or $a1, $a1, $a22088; LA64-NUAL-NEXT: ld.bu $a2, $a0, 12089; LA64-NUAL-NEXT: ld.bu $a3, $a0, 02090; LA64-NUAL-NEXT: ld.bu $a4, $a0, 22091; LA64-NUAL-NEXT: ld.b $a0, $a0, 32092; LA64-NUAL-NEXT: slli.d $a2, $a2, 82093; LA64-NUAL-NEXT: or $a2, $a2, $a32094; LA64-NUAL-NEXT: slli.d $a3, $a4, 162095; LA64-NUAL-NEXT: slli.d $a0, $a0, 242096; LA64-NUAL-NEXT: or $a0, $a0, $a32097; LA64-NUAL-NEXT: or $a0, $a0, $a22098; LA64-NUAL-NEXT: xor $a0, $a0, $a12099; LA64-NUAL-NEXT: sltui $a0, $a0, 12100; LA64-NUAL-NEXT: ret2101entry:2102 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 4)2103 %ret = icmp eq i32 %memcmp, 02104 ret i1 %ret2105}2106 2107define i1 @memcmp_lt_zero(ptr %s1, ptr %s2) nounwind optsize {2108; LA32-UAL-LABEL: memcmp_lt_zero:2109; LA32-UAL: # %bb.0: # %entry2110; LA32-UAL-NEXT: ld.w $a0, $a0, 02111; LA32-UAL-NEXT: ld.w $a1, $a1, 02112; LA32-UAL-NEXT: srli.w $a2, $a0, 82113; LA32-UAL-NEXT: lu12i.w $a3, 152114; LA32-UAL-NEXT: ori $a3, $a3, 38402115; LA32-UAL-NEXT: and $a2, $a2, $a32116; LA32-UAL-NEXT: srli.w $a4, $a0, 242117; LA32-UAL-NEXT: or $a2, $a2, $a42118; LA32-UAL-NEXT: and $a4, $a0, $a32119; LA32-UAL-NEXT: slli.w $a4, $a4, 82120; LA32-UAL-NEXT: slli.w $a0, $a0, 242121; LA32-UAL-NEXT: or $a0, $a0, $a42122; LA32-UAL-NEXT: or $a0, $a0, $a22123; LA32-UAL-NEXT: srli.w $a2, $a1, 82124; LA32-UAL-NEXT: and $a2, $a2, $a32125; LA32-UAL-NEXT: srli.w $a4, $a1, 242126; LA32-UAL-NEXT: or $a2, $a2, $a42127; LA32-UAL-NEXT: and $a3, $a1, $a32128; LA32-UAL-NEXT: slli.w $a3, $a3, 82129; LA32-UAL-NEXT: slli.w $a1, $a1, 242130; LA32-UAL-NEXT: or $a1, $a1, $a32131; LA32-UAL-NEXT: or $a1, $a1, $a22132; LA32-UAL-NEXT: sltu $a0, $a0, $a12133; LA32-UAL-NEXT: ret2134;2135; LA64-UAL-LABEL: memcmp_lt_zero:2136; LA64-UAL: # %bb.0: # %entry2137; LA64-UAL-NEXT: ld.w $a0, $a0, 02138; LA64-UAL-NEXT: ld.w $a1, $a1, 02139; LA64-UAL-NEXT: revb.2w $a0, $a02140; LA64-UAL-NEXT: addi.w $a0, $a0, 02141; LA64-UAL-NEXT: revb.2w $a1, $a12142; LA64-UAL-NEXT: addi.w $a1, $a1, 02143; LA64-UAL-NEXT: sltu $a0, $a0, $a12144; LA64-UAL-NEXT: ret2145;2146; LA32-NUAL-LABEL: memcmp_lt_zero:2147; LA32-NUAL: # %bb.0: # %entry2148; LA32-NUAL-NEXT: addi.w $sp, $sp, -162149; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill2150; LA32-NUAL-NEXT: ori $a2, $zero, 42151; LA32-NUAL-NEXT: bl memcmp2152; LA32-NUAL-NEXT: srli.w $a0, $a0, 312153; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload2154; LA32-NUAL-NEXT: addi.w $sp, $sp, 162155; LA32-NUAL-NEXT: ret2156;2157; LA64-NUAL-LABEL: memcmp_lt_zero:2158; LA64-NUAL: # %bb.0: # %entry2159; LA64-NUAL-NEXT: addi.d $sp, $sp, -162160; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill2161; LA64-NUAL-NEXT: ori $a2, $zero, 42162; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)2163; LA64-NUAL-NEXT: jirl $ra, $ra, 02164; LA64-NUAL-NEXT: slti $a0, $a0, 02165; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload2166; LA64-NUAL-NEXT: addi.d $sp, $sp, 162167; LA64-NUAL-NEXT: ret2168entry:2169 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 4)2170 %ret = icmp slt i32 %memcmp, 02171 ret i1 %ret2172}2173 2174define i1 @memcmp_gt_zero(ptr %s1, ptr %s2) nounwind optsize {2175; LA32-UAL-LABEL: memcmp_gt_zero:2176; LA32-UAL: # %bb.0: # %entry2177; LA32-UAL-NEXT: ld.w $a0, $a0, 02178; LA32-UAL-NEXT: ld.w $a1, $a1, 02179; LA32-UAL-NEXT: srli.w $a2, $a0, 82180; LA32-UAL-NEXT: lu12i.w $a3, 152181; LA32-UAL-NEXT: ori $a3, $a3, 38402182; LA32-UAL-NEXT: and $a2, $a2, $a32183; LA32-UAL-NEXT: srli.w $a4, $a0, 242184; LA32-UAL-NEXT: or $a2, $a2, $a42185; LA32-UAL-NEXT: and $a4, $a0, $a32186; LA32-UAL-NEXT: slli.w $a4, $a4, 82187; LA32-UAL-NEXT: slli.w $a0, $a0, 242188; LA32-UAL-NEXT: or $a0, $a0, $a42189; LA32-UAL-NEXT: or $a0, $a0, $a22190; LA32-UAL-NEXT: srli.w $a2, $a1, 82191; LA32-UAL-NEXT: and $a2, $a2, $a32192; LA32-UAL-NEXT: srli.w $a4, $a1, 242193; LA32-UAL-NEXT: or $a2, $a2, $a42194; LA32-UAL-NEXT: and $a3, $a1, $a32195; LA32-UAL-NEXT: slli.w $a3, $a3, 82196; LA32-UAL-NEXT: slli.w $a1, $a1, 242197; LA32-UAL-NEXT: or $a1, $a1, $a32198; LA32-UAL-NEXT: or $a1, $a1, $a22199; LA32-UAL-NEXT: sltu $a0, $a1, $a02200; LA32-UAL-NEXT: ret2201;2202; LA64-UAL-LABEL: memcmp_gt_zero:2203; LA64-UAL: # %bb.0: # %entry2204; LA64-UAL-NEXT: ld.w $a0, $a0, 02205; LA64-UAL-NEXT: ld.w $a1, $a1, 02206; LA64-UAL-NEXT: revb.2w $a0, $a02207; LA64-UAL-NEXT: addi.w $a0, $a0, 02208; LA64-UAL-NEXT: revb.2w $a1, $a12209; LA64-UAL-NEXT: addi.w $a1, $a1, 02210; LA64-UAL-NEXT: sltu $a0, $a1, $a02211; LA64-UAL-NEXT: ret2212;2213; LA32-NUAL-LABEL: memcmp_gt_zero:2214; LA32-NUAL: # %bb.0: # %entry2215; LA32-NUAL-NEXT: addi.w $sp, $sp, -162216; LA32-NUAL-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill2217; LA32-NUAL-NEXT: ori $a2, $zero, 42218; LA32-NUAL-NEXT: bl memcmp2219; LA32-NUAL-NEXT: slt $a0, $zero, $a02220; LA32-NUAL-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload2221; LA32-NUAL-NEXT: addi.w $sp, $sp, 162222; LA32-NUAL-NEXT: ret2223;2224; LA64-NUAL-LABEL: memcmp_gt_zero:2225; LA64-NUAL: # %bb.0: # %entry2226; LA64-NUAL-NEXT: addi.d $sp, $sp, -162227; LA64-NUAL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill2228; LA64-NUAL-NEXT: ori $a2, $zero, 42229; LA64-NUAL-NEXT: pcaddu18i $ra, %call36(memcmp)2230; LA64-NUAL-NEXT: jirl $ra, $ra, 02231; LA64-NUAL-NEXT: slt $a0, $zero, $a02232; LA64-NUAL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload2233; LA64-NUAL-NEXT: addi.d $sp, $sp, 162234; LA64-NUAL-NEXT: ret2235entry:2236 %memcmp = call signext i32 @memcmp(ptr %s1, ptr %s2, iGRLen 4)2237 %ret = icmp sgt i32 %memcmp, 02238 ret i1 %ret2239}2240