brintos

brintos / llvm-project-archived public Read only

0
0
Text · 38.7 KiB · a03961b Raw
1309 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=riscv32 -mattr=+m \3; RUN:   | FileCheck %s --check-prefixes=RV32-BOTH,RV324; RUN: llc < %s -mtriple=riscv64 -mattr=+m \5; RUN:   | FileCheck %s --check-prefixes=RV64-BOTH,RV646; RUN: llc < %s -mtriple=riscv32 -mattr=+m,+unaligned-scalar-mem \7; RUN:   | FileCheck %s --check-prefixes=RV32-BOTH,RV32-FAST8; RUN: llc < %s -mtriple=riscv64 -mattr=+m,+unaligned-scalar-mem \9; RUN:   | FileCheck %s --check-prefixes=RV64-BOTH,RV64-FAST10%struct.x = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }11 12; /////////////////////////////////////////////////////////////////////////////13 14define void @memset_1(ptr %a, i8 %value) nounwind {15; RV32-BOTH-LABEL: memset_1:16; RV32-BOTH:       # %bb.0:17; RV32-BOTH-NEXT:    sb a1, 0(a0)18; RV32-BOTH-NEXT:    ret19;20; RV64-BOTH-LABEL: memset_1:21; RV64-BOTH:       # %bb.0:22; RV64-BOTH-NEXT:    sb a1, 0(a0)23; RV64-BOTH-NEXT:    ret24  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 1, i1 0)25  ret void26}27 28define void @memset_2(ptr %a, i8 %value) nounwind {29; RV32-LABEL: memset_2:30; RV32:       # %bb.0:31; RV32-NEXT:    sb a1, 0(a0)32; RV32-NEXT:    sb a1, 1(a0)33; RV32-NEXT:    ret34;35; RV64-LABEL: memset_2:36; RV64:       # %bb.0:37; RV64-NEXT:    sb a1, 0(a0)38; RV64-NEXT:    sb a1, 1(a0)39; RV64-NEXT:    ret40;41; RV32-FAST-LABEL: memset_2:42; RV32-FAST:       # %bb.0:43; RV32-FAST-NEXT:    zext.b a2, a144; RV32-FAST-NEXT:    slli a1, a1, 845; RV32-FAST-NEXT:    or a1, a1, a246; RV32-FAST-NEXT:    sh a1, 0(a0)47; RV32-FAST-NEXT:    ret48;49; RV64-FAST-LABEL: memset_2:50; RV64-FAST:       # %bb.0:51; RV64-FAST-NEXT:    zext.b a2, a152; RV64-FAST-NEXT:    slli a1, a1, 853; RV64-FAST-NEXT:    or a1, a1, a254; RV64-FAST-NEXT:    sh a1, 0(a0)55; RV64-FAST-NEXT:    ret56  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 2, i1 0)57  ret void58}59 60define void @memset_4(ptr %a, i8 %value) nounwind {61; RV32-LABEL: memset_4:62; RV32:       # %bb.0:63; RV32-NEXT:    sb a1, 0(a0)64; RV32-NEXT:    sb a1, 1(a0)65; RV32-NEXT:    sb a1, 2(a0)66; RV32-NEXT:    sb a1, 3(a0)67; RV32-NEXT:    ret68;69; RV64-LABEL: memset_4:70; RV64:       # %bb.0:71; RV64-NEXT:    sb a1, 0(a0)72; RV64-NEXT:    sb a1, 1(a0)73; RV64-NEXT:    sb a1, 2(a0)74; RV64-NEXT:    sb a1, 3(a0)75; RV64-NEXT:    ret76;77; RV32-FAST-LABEL: memset_4:78; RV32-FAST:       # %bb.0:79; RV32-FAST-NEXT:    zext.b a1, a180; RV32-FAST-NEXT:    lui a2, 411281; RV32-FAST-NEXT:    addi a2, a2, 25782; RV32-FAST-NEXT:    mul a1, a1, a283; RV32-FAST-NEXT:    sw a1, 0(a0)84; RV32-FAST-NEXT:    ret85;86; RV64-FAST-LABEL: memset_4:87; RV64-FAST:       # %bb.0:88; RV64-FAST-NEXT:    slli a1, a1, 5689; RV64-FAST-NEXT:    lui a2, 6579390; RV64-FAST-NEXT:    slli a2, a2, 491; RV64-FAST-NEXT:    addi a2, a2, 25692; RV64-FAST-NEXT:    mulhu a1, a1, a293; RV64-FAST-NEXT:    sw a1, 0(a0)94; RV64-FAST-NEXT:    ret95  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 4, i1 0)96  ret void97}98 99define void @memset_8(ptr %a, i8 %value) nounwind {100; RV32-LABEL: memset_8:101; RV32:       # %bb.0:102; RV32-NEXT:    sb a1, 4(a0)103; RV32-NEXT:    sb a1, 5(a0)104; RV32-NEXT:    sb a1, 6(a0)105; RV32-NEXT:    sb a1, 7(a0)106; RV32-NEXT:    sb a1, 0(a0)107; RV32-NEXT:    sb a1, 1(a0)108; RV32-NEXT:    sb a1, 2(a0)109; RV32-NEXT:    sb a1, 3(a0)110; RV32-NEXT:    ret111;112; RV64-LABEL: memset_8:113; RV64:       # %bb.0:114; RV64-NEXT:    sb a1, 4(a0)115; RV64-NEXT:    sb a1, 5(a0)116; RV64-NEXT:    sb a1, 6(a0)117; RV64-NEXT:    sb a1, 7(a0)118; RV64-NEXT:    sb a1, 0(a0)119; RV64-NEXT:    sb a1, 1(a0)120; RV64-NEXT:    sb a1, 2(a0)121; RV64-NEXT:    sb a1, 3(a0)122; RV64-NEXT:    ret123;124; RV32-FAST-LABEL: memset_8:125; RV32-FAST:       # %bb.0:126; RV32-FAST-NEXT:    zext.b a1, a1127; RV32-FAST-NEXT:    lui a2, 4112128; RV32-FAST-NEXT:    addi a2, a2, 257129; RV32-FAST-NEXT:    mul a1, a1, a2130; RV32-FAST-NEXT:    sw a1, 0(a0)131; RV32-FAST-NEXT:    sw a1, 4(a0)132; RV32-FAST-NEXT:    ret133;134; RV64-FAST-LABEL: memset_8:135; RV64-FAST:       # %bb.0:136; RV64-FAST-NEXT:    zext.b a1, a1137; RV64-FAST-NEXT:    lui a2, 4112138; RV64-FAST-NEXT:    addi a2, a2, 257139; RV64-FAST-NEXT:    slli a3, a2, 32140; RV64-FAST-NEXT:    add a2, a2, a3141; RV64-FAST-NEXT:    mul a1, a1, a2142; RV64-FAST-NEXT:    sd a1, 0(a0)143; RV64-FAST-NEXT:    ret144  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 8, i1 0)145  ret void146}147 148define void @memset_16(ptr %a, i8 %value) nounwind {149; RV32-LABEL: memset_16:150; RV32:       # %bb.0:151; RV32-NEXT:    sb a1, 12(a0)152; RV32-NEXT:    sb a1, 13(a0)153; RV32-NEXT:    sb a1, 14(a0)154; RV32-NEXT:    sb a1, 15(a0)155; RV32-NEXT:    sb a1, 8(a0)156; RV32-NEXT:    sb a1, 9(a0)157; RV32-NEXT:    sb a1, 10(a0)158; RV32-NEXT:    sb a1, 11(a0)159; RV32-NEXT:    sb a1, 4(a0)160; RV32-NEXT:    sb a1, 5(a0)161; RV32-NEXT:    sb a1, 6(a0)162; RV32-NEXT:    sb a1, 7(a0)163; RV32-NEXT:    sb a1, 0(a0)164; RV32-NEXT:    sb a1, 1(a0)165; RV32-NEXT:    sb a1, 2(a0)166; RV32-NEXT:    sb a1, 3(a0)167; RV32-NEXT:    ret168;169; RV64-LABEL: memset_16:170; RV64:       # %bb.0:171; RV64-NEXT:    sb a1, 12(a0)172; RV64-NEXT:    sb a1, 13(a0)173; RV64-NEXT:    sb a1, 14(a0)174; RV64-NEXT:    sb a1, 15(a0)175; RV64-NEXT:    sb a1, 8(a0)176; RV64-NEXT:    sb a1, 9(a0)177; RV64-NEXT:    sb a1, 10(a0)178; RV64-NEXT:    sb a1, 11(a0)179; RV64-NEXT:    sb a1, 4(a0)180; RV64-NEXT:    sb a1, 5(a0)181; RV64-NEXT:    sb a1, 6(a0)182; RV64-NEXT:    sb a1, 7(a0)183; RV64-NEXT:    sb a1, 0(a0)184; RV64-NEXT:    sb a1, 1(a0)185; RV64-NEXT:    sb a1, 2(a0)186; RV64-NEXT:    sb a1, 3(a0)187; RV64-NEXT:    ret188;189; RV32-FAST-LABEL: memset_16:190; RV32-FAST:       # %bb.0:191; RV32-FAST-NEXT:    zext.b a1, a1192; RV32-FAST-NEXT:    lui a2, 4112193; RV32-FAST-NEXT:    addi a2, a2, 257194; RV32-FAST-NEXT:    mul a1, a1, a2195; RV32-FAST-NEXT:    sw a1, 0(a0)196; RV32-FAST-NEXT:    sw a1, 4(a0)197; RV32-FAST-NEXT:    sw a1, 8(a0)198; RV32-FAST-NEXT:    sw a1, 12(a0)199; RV32-FAST-NEXT:    ret200;201; RV64-FAST-LABEL: memset_16:202; RV64-FAST:       # %bb.0:203; RV64-FAST-NEXT:    zext.b a1, a1204; RV64-FAST-NEXT:    lui a2, 4112205; RV64-FAST-NEXT:    addi a2, a2, 257206; RV64-FAST-NEXT:    slli a3, a2, 32207; RV64-FAST-NEXT:    add a2, a2, a3208; RV64-FAST-NEXT:    mul a1, a1, a2209; RV64-FAST-NEXT:    sd a1, 0(a0)210; RV64-FAST-NEXT:    sd a1, 8(a0)211; RV64-FAST-NEXT:    ret212  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 16, i1 0)213  ret void214}215 216define void @memset_32(ptr %a, i8 %value) nounwind {217; RV32-LABEL: memset_32:218; RV32:       # %bb.0:219; RV32-NEXT:    sb a1, 28(a0)220; RV32-NEXT:    sb a1, 29(a0)221; RV32-NEXT:    sb a1, 30(a0)222; RV32-NEXT:    sb a1, 31(a0)223; RV32-NEXT:    sb a1, 24(a0)224; RV32-NEXT:    sb a1, 25(a0)225; RV32-NEXT:    sb a1, 26(a0)226; RV32-NEXT:    sb a1, 27(a0)227; RV32-NEXT:    sb a1, 20(a0)228; RV32-NEXT:    sb a1, 21(a0)229; RV32-NEXT:    sb a1, 22(a0)230; RV32-NEXT:    sb a1, 23(a0)231; RV32-NEXT:    sb a1, 16(a0)232; RV32-NEXT:    sb a1, 17(a0)233; RV32-NEXT:    sb a1, 18(a0)234; RV32-NEXT:    sb a1, 19(a0)235; RV32-NEXT:    sb a1, 12(a0)236; RV32-NEXT:    sb a1, 13(a0)237; RV32-NEXT:    sb a1, 14(a0)238; RV32-NEXT:    sb a1, 15(a0)239; RV32-NEXT:    sb a1, 8(a0)240; RV32-NEXT:    sb a1, 9(a0)241; RV32-NEXT:    sb a1, 10(a0)242; RV32-NEXT:    sb a1, 11(a0)243; RV32-NEXT:    sb a1, 4(a0)244; RV32-NEXT:    sb a1, 5(a0)245; RV32-NEXT:    sb a1, 6(a0)246; RV32-NEXT:    sb a1, 7(a0)247; RV32-NEXT:    sb a1, 0(a0)248; RV32-NEXT:    sb a1, 1(a0)249; RV32-NEXT:    sb a1, 2(a0)250; RV32-NEXT:    sb a1, 3(a0)251; RV32-NEXT:    ret252;253; RV64-LABEL: memset_32:254; RV64:       # %bb.0:255; RV64-NEXT:    sb a1, 28(a0)256; RV64-NEXT:    sb a1, 29(a0)257; RV64-NEXT:    sb a1, 30(a0)258; RV64-NEXT:    sb a1, 31(a0)259; RV64-NEXT:    sb a1, 24(a0)260; RV64-NEXT:    sb a1, 25(a0)261; RV64-NEXT:    sb a1, 26(a0)262; RV64-NEXT:    sb a1, 27(a0)263; RV64-NEXT:    sb a1, 20(a0)264; RV64-NEXT:    sb a1, 21(a0)265; RV64-NEXT:    sb a1, 22(a0)266; RV64-NEXT:    sb a1, 23(a0)267; RV64-NEXT:    sb a1, 16(a0)268; RV64-NEXT:    sb a1, 17(a0)269; RV64-NEXT:    sb a1, 18(a0)270; RV64-NEXT:    sb a1, 19(a0)271; RV64-NEXT:    sb a1, 12(a0)272; RV64-NEXT:    sb a1, 13(a0)273; RV64-NEXT:    sb a1, 14(a0)274; RV64-NEXT:    sb a1, 15(a0)275; RV64-NEXT:    sb a1, 8(a0)276; RV64-NEXT:    sb a1, 9(a0)277; RV64-NEXT:    sb a1, 10(a0)278; RV64-NEXT:    sb a1, 11(a0)279; RV64-NEXT:    sb a1, 4(a0)280; RV64-NEXT:    sb a1, 5(a0)281; RV64-NEXT:    sb a1, 6(a0)282; RV64-NEXT:    sb a1, 7(a0)283; RV64-NEXT:    sb a1, 0(a0)284; RV64-NEXT:    sb a1, 1(a0)285; RV64-NEXT:    sb a1, 2(a0)286; RV64-NEXT:    sb a1, 3(a0)287; RV64-NEXT:    ret288;289; RV32-FAST-LABEL: memset_32:290; RV32-FAST:       # %bb.0:291; RV32-FAST-NEXT:    zext.b a1, a1292; RV32-FAST-NEXT:    lui a2, 4112293; RV32-FAST-NEXT:    addi a2, a2, 257294; RV32-FAST-NEXT:    mul a1, a1, a2295; RV32-FAST-NEXT:    sw a1, 16(a0)296; RV32-FAST-NEXT:    sw a1, 20(a0)297; RV32-FAST-NEXT:    sw a1, 24(a0)298; RV32-FAST-NEXT:    sw a1, 28(a0)299; RV32-FAST-NEXT:    sw a1, 0(a0)300; RV32-FAST-NEXT:    sw a1, 4(a0)301; RV32-FAST-NEXT:    sw a1, 8(a0)302; RV32-FAST-NEXT:    sw a1, 12(a0)303; RV32-FAST-NEXT:    ret304;305; RV64-FAST-LABEL: memset_32:306; RV64-FAST:       # %bb.0:307; RV64-FAST-NEXT:    zext.b a1, a1308; RV64-FAST-NEXT:    lui a2, 4112309; RV64-FAST-NEXT:    addi a2, a2, 257310; RV64-FAST-NEXT:    slli a3, a2, 32311; RV64-FAST-NEXT:    add a2, a2, a3312; RV64-FAST-NEXT:    mul a1, a1, a2313; RV64-FAST-NEXT:    sd a1, 0(a0)314; RV64-FAST-NEXT:    sd a1, 8(a0)315; RV64-FAST-NEXT:    sd a1, 16(a0)316; RV64-FAST-NEXT:    sd a1, 24(a0)317; RV64-FAST-NEXT:    ret318  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 32, i1 0)319  ret void320}321 322define void @memset_64(ptr %a, i8 %value) nounwind {323; RV32-LABEL: memset_64:324; RV32:       # %bb.0:325; RV32-NEXT:    sb a1, 60(a0)326; RV32-NEXT:    sb a1, 61(a0)327; RV32-NEXT:    sb a1, 62(a0)328; RV32-NEXT:    sb a1, 63(a0)329; RV32-NEXT:    sb a1, 56(a0)330; RV32-NEXT:    sb a1, 57(a0)331; RV32-NEXT:    sb a1, 58(a0)332; RV32-NEXT:    sb a1, 59(a0)333; RV32-NEXT:    sb a1, 52(a0)334; RV32-NEXT:    sb a1, 53(a0)335; RV32-NEXT:    sb a1, 54(a0)336; RV32-NEXT:    sb a1, 55(a0)337; RV32-NEXT:    sb a1, 48(a0)338; RV32-NEXT:    sb a1, 49(a0)339; RV32-NEXT:    sb a1, 50(a0)340; RV32-NEXT:    sb a1, 51(a0)341; RV32-NEXT:    sb a1, 44(a0)342; RV32-NEXT:    sb a1, 45(a0)343; RV32-NEXT:    sb a1, 46(a0)344; RV32-NEXT:    sb a1, 47(a0)345; RV32-NEXT:    sb a1, 40(a0)346; RV32-NEXT:    sb a1, 41(a0)347; RV32-NEXT:    sb a1, 42(a0)348; RV32-NEXT:    sb a1, 43(a0)349; RV32-NEXT:    sb a1, 36(a0)350; RV32-NEXT:    sb a1, 37(a0)351; RV32-NEXT:    sb a1, 38(a0)352; RV32-NEXT:    sb a1, 39(a0)353; RV32-NEXT:    sb a1, 32(a0)354; RV32-NEXT:    sb a1, 33(a0)355; RV32-NEXT:    sb a1, 34(a0)356; RV32-NEXT:    sb a1, 35(a0)357; RV32-NEXT:    sb a1, 28(a0)358; RV32-NEXT:    sb a1, 29(a0)359; RV32-NEXT:    sb a1, 30(a0)360; RV32-NEXT:    sb a1, 31(a0)361; RV32-NEXT:    sb a1, 24(a0)362; RV32-NEXT:    sb a1, 25(a0)363; RV32-NEXT:    sb a1, 26(a0)364; RV32-NEXT:    sb a1, 27(a0)365; RV32-NEXT:    sb a1, 20(a0)366; RV32-NEXT:    sb a1, 21(a0)367; RV32-NEXT:    sb a1, 22(a0)368; RV32-NEXT:    sb a1, 23(a0)369; RV32-NEXT:    sb a1, 16(a0)370; RV32-NEXT:    sb a1, 17(a0)371; RV32-NEXT:    sb a1, 18(a0)372; RV32-NEXT:    sb a1, 19(a0)373; RV32-NEXT:    sb a1, 12(a0)374; RV32-NEXT:    sb a1, 13(a0)375; RV32-NEXT:    sb a1, 14(a0)376; RV32-NEXT:    sb a1, 15(a0)377; RV32-NEXT:    sb a1, 8(a0)378; RV32-NEXT:    sb a1, 9(a0)379; RV32-NEXT:    sb a1, 10(a0)380; RV32-NEXT:    sb a1, 11(a0)381; RV32-NEXT:    sb a1, 4(a0)382; RV32-NEXT:    sb a1, 5(a0)383; RV32-NEXT:    sb a1, 6(a0)384; RV32-NEXT:    sb a1, 7(a0)385; RV32-NEXT:    sb a1, 0(a0)386; RV32-NEXT:    sb a1, 1(a0)387; RV32-NEXT:    sb a1, 2(a0)388; RV32-NEXT:    sb a1, 3(a0)389; RV32-NEXT:    ret390;391; RV64-LABEL: memset_64:392; RV64:       # %bb.0:393; RV64-NEXT:    sb a1, 60(a0)394; RV64-NEXT:    sb a1, 61(a0)395; RV64-NEXT:    sb a1, 62(a0)396; RV64-NEXT:    sb a1, 63(a0)397; RV64-NEXT:    sb a1, 56(a0)398; RV64-NEXT:    sb a1, 57(a0)399; RV64-NEXT:    sb a1, 58(a0)400; RV64-NEXT:    sb a1, 59(a0)401; RV64-NEXT:    sb a1, 52(a0)402; RV64-NEXT:    sb a1, 53(a0)403; RV64-NEXT:    sb a1, 54(a0)404; RV64-NEXT:    sb a1, 55(a0)405; RV64-NEXT:    sb a1, 48(a0)406; RV64-NEXT:    sb a1, 49(a0)407; RV64-NEXT:    sb a1, 50(a0)408; RV64-NEXT:    sb a1, 51(a0)409; RV64-NEXT:    sb a1, 44(a0)410; RV64-NEXT:    sb a1, 45(a0)411; RV64-NEXT:    sb a1, 46(a0)412; RV64-NEXT:    sb a1, 47(a0)413; RV64-NEXT:    sb a1, 40(a0)414; RV64-NEXT:    sb a1, 41(a0)415; RV64-NEXT:    sb a1, 42(a0)416; RV64-NEXT:    sb a1, 43(a0)417; RV64-NEXT:    sb a1, 36(a0)418; RV64-NEXT:    sb a1, 37(a0)419; RV64-NEXT:    sb a1, 38(a0)420; RV64-NEXT:    sb a1, 39(a0)421; RV64-NEXT:    sb a1, 32(a0)422; RV64-NEXT:    sb a1, 33(a0)423; RV64-NEXT:    sb a1, 34(a0)424; RV64-NEXT:    sb a1, 35(a0)425; RV64-NEXT:    sb a1, 28(a0)426; RV64-NEXT:    sb a1, 29(a0)427; RV64-NEXT:    sb a1, 30(a0)428; RV64-NEXT:    sb a1, 31(a0)429; RV64-NEXT:    sb a1, 24(a0)430; RV64-NEXT:    sb a1, 25(a0)431; RV64-NEXT:    sb a1, 26(a0)432; RV64-NEXT:    sb a1, 27(a0)433; RV64-NEXT:    sb a1, 20(a0)434; RV64-NEXT:    sb a1, 21(a0)435; RV64-NEXT:    sb a1, 22(a0)436; RV64-NEXT:    sb a1, 23(a0)437; RV64-NEXT:    sb a1, 16(a0)438; RV64-NEXT:    sb a1, 17(a0)439; RV64-NEXT:    sb a1, 18(a0)440; RV64-NEXT:    sb a1, 19(a0)441; RV64-NEXT:    sb a1, 12(a0)442; RV64-NEXT:    sb a1, 13(a0)443; RV64-NEXT:    sb a1, 14(a0)444; RV64-NEXT:    sb a1, 15(a0)445; RV64-NEXT:    sb a1, 8(a0)446; RV64-NEXT:    sb a1, 9(a0)447; RV64-NEXT:    sb a1, 10(a0)448; RV64-NEXT:    sb a1, 11(a0)449; RV64-NEXT:    sb a1, 4(a0)450; RV64-NEXT:    sb a1, 5(a0)451; RV64-NEXT:    sb a1, 6(a0)452; RV64-NEXT:    sb a1, 7(a0)453; RV64-NEXT:    sb a1, 0(a0)454; RV64-NEXT:    sb a1, 1(a0)455; RV64-NEXT:    sb a1, 2(a0)456; RV64-NEXT:    sb a1, 3(a0)457; RV64-NEXT:    ret458;459; RV32-FAST-LABEL: memset_64:460; RV32-FAST:       # %bb.0:461; RV32-FAST-NEXT:    zext.b a1, a1462; RV32-FAST-NEXT:    lui a2, 4112463; RV32-FAST-NEXT:    addi a2, a2, 257464; RV32-FAST-NEXT:    mul a1, a1, a2465; RV32-FAST-NEXT:    sw a1, 48(a0)466; RV32-FAST-NEXT:    sw a1, 52(a0)467; RV32-FAST-NEXT:    sw a1, 56(a0)468; RV32-FAST-NEXT:    sw a1, 60(a0)469; RV32-FAST-NEXT:    sw a1, 32(a0)470; RV32-FAST-NEXT:    sw a1, 36(a0)471; RV32-FAST-NEXT:    sw a1, 40(a0)472; RV32-FAST-NEXT:    sw a1, 44(a0)473; RV32-FAST-NEXT:    sw a1, 16(a0)474; RV32-FAST-NEXT:    sw a1, 20(a0)475; RV32-FAST-NEXT:    sw a1, 24(a0)476; RV32-FAST-NEXT:    sw a1, 28(a0)477; RV32-FAST-NEXT:    sw a1, 0(a0)478; RV32-FAST-NEXT:    sw a1, 4(a0)479; RV32-FAST-NEXT:    sw a1, 8(a0)480; RV32-FAST-NEXT:    sw a1, 12(a0)481; RV32-FAST-NEXT:    ret482;483; RV64-FAST-LABEL: memset_64:484; RV64-FAST:       # %bb.0:485; RV64-FAST-NEXT:    zext.b a1, a1486; RV64-FAST-NEXT:    lui a2, 4112487; RV64-FAST-NEXT:    addi a2, a2, 257488; RV64-FAST-NEXT:    slli a3, a2, 32489; RV64-FAST-NEXT:    add a2, a2, a3490; RV64-FAST-NEXT:    mul a1, a1, a2491; RV64-FAST-NEXT:    sd a1, 32(a0)492; RV64-FAST-NEXT:    sd a1, 40(a0)493; RV64-FAST-NEXT:    sd a1, 48(a0)494; RV64-FAST-NEXT:    sd a1, 56(a0)495; RV64-FAST-NEXT:    sd a1, 0(a0)496; RV64-FAST-NEXT:    sd a1, 8(a0)497; RV64-FAST-NEXT:    sd a1, 16(a0)498; RV64-FAST-NEXT:    sd a1, 24(a0)499; RV64-FAST-NEXT:    ret500  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 %value, i64 64, i1 0)501  ret void502}503 504; /////////////////////////////////////////////////////////////////////////////505 506define void @aligned_memset_2(ptr align 2 %a, i8 %value) nounwind {507; RV32-BOTH-LABEL: aligned_memset_2:508; RV32-BOTH:       # %bb.0:509; RV32-BOTH-NEXT:    zext.b a2, a1510; RV32-BOTH-NEXT:    slli a1, a1, 8511; RV32-BOTH-NEXT:    or a1, a1, a2512; RV32-BOTH-NEXT:    sh a1, 0(a0)513; RV32-BOTH-NEXT:    ret514;515; RV64-BOTH-LABEL: aligned_memset_2:516; RV64-BOTH:       # %bb.0:517; RV64-BOTH-NEXT:    zext.b a2, a1518; RV64-BOTH-NEXT:    slli a1, a1, 8519; RV64-BOTH-NEXT:    or a1, a1, a2520; RV64-BOTH-NEXT:    sh a1, 0(a0)521; RV64-BOTH-NEXT:    ret522  tail call void @llvm.memset.inline.p0.i64(ptr align 2 %a, i8 %value, i64 2, i1 0)523  ret void524}525 526define void @aligned_memset_4(ptr align 4 %a, i8 %value) nounwind {527; RV32-BOTH-LABEL: aligned_memset_4:528; RV32-BOTH:       # %bb.0:529; RV32-BOTH-NEXT:    zext.b a1, a1530; RV32-BOTH-NEXT:    lui a2, 4112531; RV32-BOTH-NEXT:    addi a2, a2, 257532; RV32-BOTH-NEXT:    mul a1, a1, a2533; RV32-BOTH-NEXT:    sw a1, 0(a0)534; RV32-BOTH-NEXT:    ret535;536; RV64-BOTH-LABEL: aligned_memset_4:537; RV64-BOTH:       # %bb.0:538; RV64-BOTH-NEXT:    slli a1, a1, 56539; RV64-BOTH-NEXT:    lui a2, 65793540; RV64-BOTH-NEXT:    slli a2, a2, 4541; RV64-BOTH-NEXT:    addi a2, a2, 256542; RV64-BOTH-NEXT:    mulhu a1, a1, a2543; RV64-BOTH-NEXT:    sw a1, 0(a0)544; RV64-BOTH-NEXT:    ret545  tail call void @llvm.memset.inline.p0.i64(ptr align 4 %a, i8 %value, i64 4, i1 0)546  ret void547}548 549define void @aligned_memset_8(ptr align 8 %a, i8 %value) nounwind {550; RV32-BOTH-LABEL: aligned_memset_8:551; RV32-BOTH:       # %bb.0:552; RV32-BOTH-NEXT:    zext.b a1, a1553; RV32-BOTH-NEXT:    lui a2, 4112554; RV32-BOTH-NEXT:    addi a2, a2, 257555; RV32-BOTH-NEXT:    mul a1, a1, a2556; RV32-BOTH-NEXT:    sw a1, 0(a0)557; RV32-BOTH-NEXT:    sw a1, 4(a0)558; RV32-BOTH-NEXT:    ret559;560; RV64-BOTH-LABEL: aligned_memset_8:561; RV64-BOTH:       # %bb.0:562; RV64-BOTH-NEXT:    zext.b a1, a1563; RV64-BOTH-NEXT:    lui a2, 4112564; RV64-BOTH-NEXT:    addi a2, a2, 257565; RV64-BOTH-NEXT:    slli a3, a2, 32566; RV64-BOTH-NEXT:    add a2, a2, a3567; RV64-BOTH-NEXT:    mul a1, a1, a2568; RV64-BOTH-NEXT:    sd a1, 0(a0)569; RV64-BOTH-NEXT:    ret570  tail call void @llvm.memset.inline.p0.i64(ptr align 8 %a, i8 %value, i64 8, i1 0)571  ret void572}573 574define void @aligned_memset_16(ptr align 16 %a, i8 %value) nounwind {575; RV32-BOTH-LABEL: aligned_memset_16:576; RV32-BOTH:       # %bb.0:577; RV32-BOTH-NEXT:    zext.b a1, a1578; RV32-BOTH-NEXT:    lui a2, 4112579; RV32-BOTH-NEXT:    addi a2, a2, 257580; RV32-BOTH-NEXT:    mul a1, a1, a2581; RV32-BOTH-NEXT:    sw a1, 0(a0)582; RV32-BOTH-NEXT:    sw a1, 4(a0)583; RV32-BOTH-NEXT:    sw a1, 8(a0)584; RV32-BOTH-NEXT:    sw a1, 12(a0)585; RV32-BOTH-NEXT:    ret586;587; RV64-BOTH-LABEL: aligned_memset_16:588; RV64-BOTH:       # %bb.0:589; RV64-BOTH-NEXT:    zext.b a1, a1590; RV64-BOTH-NEXT:    lui a2, 4112591; RV64-BOTH-NEXT:    addi a2, a2, 257592; RV64-BOTH-NEXT:    slli a3, a2, 32593; RV64-BOTH-NEXT:    add a2, a2, a3594; RV64-BOTH-NEXT:    mul a1, a1, a2595; RV64-BOTH-NEXT:    sd a1, 0(a0)596; RV64-BOTH-NEXT:    sd a1, 8(a0)597; RV64-BOTH-NEXT:    ret598  tail call void @llvm.memset.inline.p0.i64(ptr align 16 %a, i8 %value, i64 16, i1 0)599  ret void600}601 602define void @aligned_memset_32(ptr align 32 %a, i8 %value) nounwind {603; RV32-BOTH-LABEL: aligned_memset_32:604; RV32-BOTH:       # %bb.0:605; RV32-BOTH-NEXT:    zext.b a1, a1606; RV32-BOTH-NEXT:    lui a2, 4112607; RV32-BOTH-NEXT:    addi a2, a2, 257608; RV32-BOTH-NEXT:    mul a1, a1, a2609; RV32-BOTH-NEXT:    sw a1, 16(a0)610; RV32-BOTH-NEXT:    sw a1, 20(a0)611; RV32-BOTH-NEXT:    sw a1, 24(a0)612; RV32-BOTH-NEXT:    sw a1, 28(a0)613; RV32-BOTH-NEXT:    sw a1, 0(a0)614; RV32-BOTH-NEXT:    sw a1, 4(a0)615; RV32-BOTH-NEXT:    sw a1, 8(a0)616; RV32-BOTH-NEXT:    sw a1, 12(a0)617; RV32-BOTH-NEXT:    ret618;619; RV64-BOTH-LABEL: aligned_memset_32:620; RV64-BOTH:       # %bb.0:621; RV64-BOTH-NEXT:    zext.b a1, a1622; RV64-BOTH-NEXT:    lui a2, 4112623; RV64-BOTH-NEXT:    addi a2, a2, 257624; RV64-BOTH-NEXT:    slli a3, a2, 32625; RV64-BOTH-NEXT:    add a2, a2, a3626; RV64-BOTH-NEXT:    mul a1, a1, a2627; RV64-BOTH-NEXT:    sd a1, 0(a0)628; RV64-BOTH-NEXT:    sd a1, 8(a0)629; RV64-BOTH-NEXT:    sd a1, 16(a0)630; RV64-BOTH-NEXT:    sd a1, 24(a0)631; RV64-BOTH-NEXT:    ret632  tail call void @llvm.memset.inline.p0.i64(ptr align 32 %a, i8 %value, i64 32, i1 0)633  ret void634}635 636define void @aligned_memset_64(ptr align 64 %a, i8 %value) nounwind {637; RV32-BOTH-LABEL: aligned_memset_64:638; RV32-BOTH:       # %bb.0:639; RV32-BOTH-NEXT:    zext.b a1, a1640; RV32-BOTH-NEXT:    lui a2, 4112641; RV32-BOTH-NEXT:    addi a2, a2, 257642; RV32-BOTH-NEXT:    mul a1, a1, a2643; RV32-BOTH-NEXT:    sw a1, 48(a0)644; RV32-BOTH-NEXT:    sw a1, 52(a0)645; RV32-BOTH-NEXT:    sw a1, 56(a0)646; RV32-BOTH-NEXT:    sw a1, 60(a0)647; RV32-BOTH-NEXT:    sw a1, 32(a0)648; RV32-BOTH-NEXT:    sw a1, 36(a0)649; RV32-BOTH-NEXT:    sw a1, 40(a0)650; RV32-BOTH-NEXT:    sw a1, 44(a0)651; RV32-BOTH-NEXT:    sw a1, 16(a0)652; RV32-BOTH-NEXT:    sw a1, 20(a0)653; RV32-BOTH-NEXT:    sw a1, 24(a0)654; RV32-BOTH-NEXT:    sw a1, 28(a0)655; RV32-BOTH-NEXT:    sw a1, 0(a0)656; RV32-BOTH-NEXT:    sw a1, 4(a0)657; RV32-BOTH-NEXT:    sw a1, 8(a0)658; RV32-BOTH-NEXT:    sw a1, 12(a0)659; RV32-BOTH-NEXT:    ret660;661; RV64-BOTH-LABEL: aligned_memset_64:662; RV64-BOTH:       # %bb.0:663; RV64-BOTH-NEXT:    zext.b a1, a1664; RV64-BOTH-NEXT:    lui a2, 4112665; RV64-BOTH-NEXT:    addi a2, a2, 257666; RV64-BOTH-NEXT:    slli a3, a2, 32667; RV64-BOTH-NEXT:    add a2, a2, a3668; RV64-BOTH-NEXT:    mul a1, a1, a2669; RV64-BOTH-NEXT:    sd a1, 32(a0)670; RV64-BOTH-NEXT:    sd a1, 40(a0)671; RV64-BOTH-NEXT:    sd a1, 48(a0)672; RV64-BOTH-NEXT:    sd a1, 56(a0)673; RV64-BOTH-NEXT:    sd a1, 0(a0)674; RV64-BOTH-NEXT:    sd a1, 8(a0)675; RV64-BOTH-NEXT:    sd a1, 16(a0)676; RV64-BOTH-NEXT:    sd a1, 24(a0)677; RV64-BOTH-NEXT:    ret678  tail call void @llvm.memset.inline.p0.i64(ptr align 64 %a, i8 %value, i64 64, i1 0)679  ret void680}681 682; /////////////////////////////////////////////////////////////////////////////683 684define void @memset_zero_1(ptr %a) nounwind {685; RV32-BOTH-LABEL: memset_zero_1:686; RV32-BOTH:       # %bb.0:687; RV32-BOTH-NEXT:    sb zero, 0(a0)688; RV32-BOTH-NEXT:    ret689;690; RV64-BOTH-LABEL: memset_zero_1:691; RV64-BOTH:       # %bb.0:692; RV64-BOTH-NEXT:    sb zero, 0(a0)693; RV64-BOTH-NEXT:    ret694  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 1, i1 0)695  ret void696}697 698define void @memset_zero_2(ptr %a) nounwind {699; RV32-LABEL: memset_zero_2:700; RV32:       # %bb.0:701; RV32-NEXT:    sb zero, 0(a0)702; RV32-NEXT:    sb zero, 1(a0)703; RV32-NEXT:    ret704;705; RV64-LABEL: memset_zero_2:706; RV64:       # %bb.0:707; RV64-NEXT:    sb zero, 0(a0)708; RV64-NEXT:    sb zero, 1(a0)709; RV64-NEXT:    ret710;711; RV32-FAST-LABEL: memset_zero_2:712; RV32-FAST:       # %bb.0:713; RV32-FAST-NEXT:    sh zero, 0(a0)714; RV32-FAST-NEXT:    ret715;716; RV64-FAST-LABEL: memset_zero_2:717; RV64-FAST:       # %bb.0:718; RV64-FAST-NEXT:    sh zero, 0(a0)719; RV64-FAST-NEXT:    ret720  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 2, i1 0)721  ret void722}723 724define void @memset_zero_4(ptr %a) nounwind {725; RV32-LABEL: memset_zero_4:726; RV32:       # %bb.0:727; RV32-NEXT:    sb zero, 0(a0)728; RV32-NEXT:    sb zero, 1(a0)729; RV32-NEXT:    sb zero, 2(a0)730; RV32-NEXT:    sb zero, 3(a0)731; RV32-NEXT:    ret732;733; RV64-LABEL: memset_zero_4:734; RV64:       # %bb.0:735; RV64-NEXT:    sb zero, 0(a0)736; RV64-NEXT:    sb zero, 1(a0)737; RV64-NEXT:    sb zero, 2(a0)738; RV64-NEXT:    sb zero, 3(a0)739; RV64-NEXT:    ret740;741; RV32-FAST-LABEL: memset_zero_4:742; RV32-FAST:       # %bb.0:743; RV32-FAST-NEXT:    sw zero, 0(a0)744; RV32-FAST-NEXT:    ret745;746; RV64-FAST-LABEL: memset_zero_4:747; RV64-FAST:       # %bb.0:748; RV64-FAST-NEXT:    sw zero, 0(a0)749; RV64-FAST-NEXT:    ret750  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 4, i1 0)751  ret void752}753 754define void @memset_zero_8(ptr %a) nounwind {755; RV32-LABEL: memset_zero_8:756; RV32:       # %bb.0:757; RV32-NEXT:    sb zero, 4(a0)758; RV32-NEXT:    sb zero, 5(a0)759; RV32-NEXT:    sb zero, 6(a0)760; RV32-NEXT:    sb zero, 7(a0)761; RV32-NEXT:    sb zero, 0(a0)762; RV32-NEXT:    sb zero, 1(a0)763; RV32-NEXT:    sb zero, 2(a0)764; RV32-NEXT:    sb zero, 3(a0)765; RV32-NEXT:    ret766;767; RV64-LABEL: memset_zero_8:768; RV64:       # %bb.0:769; RV64-NEXT:    sb zero, 4(a0)770; RV64-NEXT:    sb zero, 5(a0)771; RV64-NEXT:    sb zero, 6(a0)772; RV64-NEXT:    sb zero, 7(a0)773; RV64-NEXT:    sb zero, 0(a0)774; RV64-NEXT:    sb zero, 1(a0)775; RV64-NEXT:    sb zero, 2(a0)776; RV64-NEXT:    sb zero, 3(a0)777; RV64-NEXT:    ret778;779; RV32-FAST-LABEL: memset_zero_8:780; RV32-FAST:       # %bb.0:781; RV32-FAST-NEXT:    sw zero, 0(a0)782; RV32-FAST-NEXT:    sw zero, 4(a0)783; RV32-FAST-NEXT:    ret784;785; RV64-FAST-LABEL: memset_zero_8:786; RV64-FAST:       # %bb.0:787; RV64-FAST-NEXT:    sd zero, 0(a0)788; RV64-FAST-NEXT:    ret789  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 8, i1 0)790  ret void791}792 793define void @memset_zero_16(ptr %a) nounwind {794; RV32-LABEL: memset_zero_16:795; RV32:       # %bb.0:796; RV32-NEXT:    sb zero, 12(a0)797; RV32-NEXT:    sb zero, 13(a0)798; RV32-NEXT:    sb zero, 14(a0)799; RV32-NEXT:    sb zero, 15(a0)800; RV32-NEXT:    sb zero, 8(a0)801; RV32-NEXT:    sb zero, 9(a0)802; RV32-NEXT:    sb zero, 10(a0)803; RV32-NEXT:    sb zero, 11(a0)804; RV32-NEXT:    sb zero, 4(a0)805; RV32-NEXT:    sb zero, 5(a0)806; RV32-NEXT:    sb zero, 6(a0)807; RV32-NEXT:    sb zero, 7(a0)808; RV32-NEXT:    sb zero, 0(a0)809; RV32-NEXT:    sb zero, 1(a0)810; RV32-NEXT:    sb zero, 2(a0)811; RV32-NEXT:    sb zero, 3(a0)812; RV32-NEXT:    ret813;814; RV64-LABEL: memset_zero_16:815; RV64:       # %bb.0:816; RV64-NEXT:    sb zero, 12(a0)817; RV64-NEXT:    sb zero, 13(a0)818; RV64-NEXT:    sb zero, 14(a0)819; RV64-NEXT:    sb zero, 15(a0)820; RV64-NEXT:    sb zero, 8(a0)821; RV64-NEXT:    sb zero, 9(a0)822; RV64-NEXT:    sb zero, 10(a0)823; RV64-NEXT:    sb zero, 11(a0)824; RV64-NEXT:    sb zero, 4(a0)825; RV64-NEXT:    sb zero, 5(a0)826; RV64-NEXT:    sb zero, 6(a0)827; RV64-NEXT:    sb zero, 7(a0)828; RV64-NEXT:    sb zero, 0(a0)829; RV64-NEXT:    sb zero, 1(a0)830; RV64-NEXT:    sb zero, 2(a0)831; RV64-NEXT:    sb zero, 3(a0)832; RV64-NEXT:    ret833;834; RV32-FAST-LABEL: memset_zero_16:835; RV32-FAST:       # %bb.0:836; RV32-FAST-NEXT:    sw zero, 0(a0)837; RV32-FAST-NEXT:    sw zero, 4(a0)838; RV32-FAST-NEXT:    sw zero, 8(a0)839; RV32-FAST-NEXT:    sw zero, 12(a0)840; RV32-FAST-NEXT:    ret841;842; RV64-FAST-LABEL: memset_zero_16:843; RV64-FAST:       # %bb.0:844; RV64-FAST-NEXT:    sd zero, 0(a0)845; RV64-FAST-NEXT:    sd zero, 8(a0)846; RV64-FAST-NEXT:    ret847  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 16, i1 0)848  ret void849}850 851define void @memset_zero_32(ptr %a) nounwind {852; RV32-LABEL: memset_zero_32:853; RV32:       # %bb.0:854; RV32-NEXT:    sb zero, 28(a0)855; RV32-NEXT:    sb zero, 29(a0)856; RV32-NEXT:    sb zero, 30(a0)857; RV32-NEXT:    sb zero, 31(a0)858; RV32-NEXT:    sb zero, 24(a0)859; RV32-NEXT:    sb zero, 25(a0)860; RV32-NEXT:    sb zero, 26(a0)861; RV32-NEXT:    sb zero, 27(a0)862; RV32-NEXT:    sb zero, 20(a0)863; RV32-NEXT:    sb zero, 21(a0)864; RV32-NEXT:    sb zero, 22(a0)865; RV32-NEXT:    sb zero, 23(a0)866; RV32-NEXT:    sb zero, 16(a0)867; RV32-NEXT:    sb zero, 17(a0)868; RV32-NEXT:    sb zero, 18(a0)869; RV32-NEXT:    sb zero, 19(a0)870; RV32-NEXT:    sb zero, 12(a0)871; RV32-NEXT:    sb zero, 13(a0)872; RV32-NEXT:    sb zero, 14(a0)873; RV32-NEXT:    sb zero, 15(a0)874; RV32-NEXT:    sb zero, 8(a0)875; RV32-NEXT:    sb zero, 9(a0)876; RV32-NEXT:    sb zero, 10(a0)877; RV32-NEXT:    sb zero, 11(a0)878; RV32-NEXT:    sb zero, 4(a0)879; RV32-NEXT:    sb zero, 5(a0)880; RV32-NEXT:    sb zero, 6(a0)881; RV32-NEXT:    sb zero, 7(a0)882; RV32-NEXT:    sb zero, 0(a0)883; RV32-NEXT:    sb zero, 1(a0)884; RV32-NEXT:    sb zero, 2(a0)885; RV32-NEXT:    sb zero, 3(a0)886; RV32-NEXT:    ret887;888; RV64-LABEL: memset_zero_32:889; RV64:       # %bb.0:890; RV64-NEXT:    sb zero, 28(a0)891; RV64-NEXT:    sb zero, 29(a0)892; RV64-NEXT:    sb zero, 30(a0)893; RV64-NEXT:    sb zero, 31(a0)894; RV64-NEXT:    sb zero, 24(a0)895; RV64-NEXT:    sb zero, 25(a0)896; RV64-NEXT:    sb zero, 26(a0)897; RV64-NEXT:    sb zero, 27(a0)898; RV64-NEXT:    sb zero, 20(a0)899; RV64-NEXT:    sb zero, 21(a0)900; RV64-NEXT:    sb zero, 22(a0)901; RV64-NEXT:    sb zero, 23(a0)902; RV64-NEXT:    sb zero, 16(a0)903; RV64-NEXT:    sb zero, 17(a0)904; RV64-NEXT:    sb zero, 18(a0)905; RV64-NEXT:    sb zero, 19(a0)906; RV64-NEXT:    sb zero, 12(a0)907; RV64-NEXT:    sb zero, 13(a0)908; RV64-NEXT:    sb zero, 14(a0)909; RV64-NEXT:    sb zero, 15(a0)910; RV64-NEXT:    sb zero, 8(a0)911; RV64-NEXT:    sb zero, 9(a0)912; RV64-NEXT:    sb zero, 10(a0)913; RV64-NEXT:    sb zero, 11(a0)914; RV64-NEXT:    sb zero, 4(a0)915; RV64-NEXT:    sb zero, 5(a0)916; RV64-NEXT:    sb zero, 6(a0)917; RV64-NEXT:    sb zero, 7(a0)918; RV64-NEXT:    sb zero, 0(a0)919; RV64-NEXT:    sb zero, 1(a0)920; RV64-NEXT:    sb zero, 2(a0)921; RV64-NEXT:    sb zero, 3(a0)922; RV64-NEXT:    ret923;924; RV32-FAST-LABEL: memset_zero_32:925; RV32-FAST:       # %bb.0:926; RV32-FAST-NEXT:    sw zero, 16(a0)927; RV32-FAST-NEXT:    sw zero, 20(a0)928; RV32-FAST-NEXT:    sw zero, 24(a0)929; RV32-FAST-NEXT:    sw zero, 28(a0)930; RV32-FAST-NEXT:    sw zero, 0(a0)931; RV32-FAST-NEXT:    sw zero, 4(a0)932; RV32-FAST-NEXT:    sw zero, 8(a0)933; RV32-FAST-NEXT:    sw zero, 12(a0)934; RV32-FAST-NEXT:    ret935;936; RV64-FAST-LABEL: memset_zero_32:937; RV64-FAST:       # %bb.0:938; RV64-FAST-NEXT:    sd zero, 0(a0)939; RV64-FAST-NEXT:    sd zero, 8(a0)940; RV64-FAST-NEXT:    sd zero, 16(a0)941; RV64-FAST-NEXT:    sd zero, 24(a0)942; RV64-FAST-NEXT:    ret943  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 32, i1 0)944  ret void945}946 947define void @memset_zero_64(ptr %a) nounwind {948; RV32-LABEL: memset_zero_64:949; RV32:       # %bb.0:950; RV32-NEXT:    sb zero, 60(a0)951; RV32-NEXT:    sb zero, 61(a0)952; RV32-NEXT:    sb zero, 62(a0)953; RV32-NEXT:    sb zero, 63(a0)954; RV32-NEXT:    sb zero, 56(a0)955; RV32-NEXT:    sb zero, 57(a0)956; RV32-NEXT:    sb zero, 58(a0)957; RV32-NEXT:    sb zero, 59(a0)958; RV32-NEXT:    sb zero, 52(a0)959; RV32-NEXT:    sb zero, 53(a0)960; RV32-NEXT:    sb zero, 54(a0)961; RV32-NEXT:    sb zero, 55(a0)962; RV32-NEXT:    sb zero, 48(a0)963; RV32-NEXT:    sb zero, 49(a0)964; RV32-NEXT:    sb zero, 50(a0)965; RV32-NEXT:    sb zero, 51(a0)966; RV32-NEXT:    sb zero, 44(a0)967; RV32-NEXT:    sb zero, 45(a0)968; RV32-NEXT:    sb zero, 46(a0)969; RV32-NEXT:    sb zero, 47(a0)970; RV32-NEXT:    sb zero, 40(a0)971; RV32-NEXT:    sb zero, 41(a0)972; RV32-NEXT:    sb zero, 42(a0)973; RV32-NEXT:    sb zero, 43(a0)974; RV32-NEXT:    sb zero, 36(a0)975; RV32-NEXT:    sb zero, 37(a0)976; RV32-NEXT:    sb zero, 38(a0)977; RV32-NEXT:    sb zero, 39(a0)978; RV32-NEXT:    sb zero, 32(a0)979; RV32-NEXT:    sb zero, 33(a0)980; RV32-NEXT:    sb zero, 34(a0)981; RV32-NEXT:    sb zero, 35(a0)982; RV32-NEXT:    sb zero, 28(a0)983; RV32-NEXT:    sb zero, 29(a0)984; RV32-NEXT:    sb zero, 30(a0)985; RV32-NEXT:    sb zero, 31(a0)986; RV32-NEXT:    sb zero, 24(a0)987; RV32-NEXT:    sb zero, 25(a0)988; RV32-NEXT:    sb zero, 26(a0)989; RV32-NEXT:    sb zero, 27(a0)990; RV32-NEXT:    sb zero, 20(a0)991; RV32-NEXT:    sb zero, 21(a0)992; RV32-NEXT:    sb zero, 22(a0)993; RV32-NEXT:    sb zero, 23(a0)994; RV32-NEXT:    sb zero, 16(a0)995; RV32-NEXT:    sb zero, 17(a0)996; RV32-NEXT:    sb zero, 18(a0)997; RV32-NEXT:    sb zero, 19(a0)998; RV32-NEXT:    sb zero, 12(a0)999; RV32-NEXT:    sb zero, 13(a0)1000; RV32-NEXT:    sb zero, 14(a0)1001; RV32-NEXT:    sb zero, 15(a0)1002; RV32-NEXT:    sb zero, 8(a0)1003; RV32-NEXT:    sb zero, 9(a0)1004; RV32-NEXT:    sb zero, 10(a0)1005; RV32-NEXT:    sb zero, 11(a0)1006; RV32-NEXT:    sb zero, 4(a0)1007; RV32-NEXT:    sb zero, 5(a0)1008; RV32-NEXT:    sb zero, 6(a0)1009; RV32-NEXT:    sb zero, 7(a0)1010; RV32-NEXT:    sb zero, 0(a0)1011; RV32-NEXT:    sb zero, 1(a0)1012; RV32-NEXT:    sb zero, 2(a0)1013; RV32-NEXT:    sb zero, 3(a0)1014; RV32-NEXT:    ret1015;1016; RV64-LABEL: memset_zero_64:1017; RV64:       # %bb.0:1018; RV64-NEXT:    sb zero, 60(a0)1019; RV64-NEXT:    sb zero, 61(a0)1020; RV64-NEXT:    sb zero, 62(a0)1021; RV64-NEXT:    sb zero, 63(a0)1022; RV64-NEXT:    sb zero, 56(a0)1023; RV64-NEXT:    sb zero, 57(a0)1024; RV64-NEXT:    sb zero, 58(a0)1025; RV64-NEXT:    sb zero, 59(a0)1026; RV64-NEXT:    sb zero, 52(a0)1027; RV64-NEXT:    sb zero, 53(a0)1028; RV64-NEXT:    sb zero, 54(a0)1029; RV64-NEXT:    sb zero, 55(a0)1030; RV64-NEXT:    sb zero, 48(a0)1031; RV64-NEXT:    sb zero, 49(a0)1032; RV64-NEXT:    sb zero, 50(a0)1033; RV64-NEXT:    sb zero, 51(a0)1034; RV64-NEXT:    sb zero, 44(a0)1035; RV64-NEXT:    sb zero, 45(a0)1036; RV64-NEXT:    sb zero, 46(a0)1037; RV64-NEXT:    sb zero, 47(a0)1038; RV64-NEXT:    sb zero, 40(a0)1039; RV64-NEXT:    sb zero, 41(a0)1040; RV64-NEXT:    sb zero, 42(a0)1041; RV64-NEXT:    sb zero, 43(a0)1042; RV64-NEXT:    sb zero, 36(a0)1043; RV64-NEXT:    sb zero, 37(a0)1044; RV64-NEXT:    sb zero, 38(a0)1045; RV64-NEXT:    sb zero, 39(a0)1046; RV64-NEXT:    sb zero, 32(a0)1047; RV64-NEXT:    sb zero, 33(a0)1048; RV64-NEXT:    sb zero, 34(a0)1049; RV64-NEXT:    sb zero, 35(a0)1050; RV64-NEXT:    sb zero, 28(a0)1051; RV64-NEXT:    sb zero, 29(a0)1052; RV64-NEXT:    sb zero, 30(a0)1053; RV64-NEXT:    sb zero, 31(a0)1054; RV64-NEXT:    sb zero, 24(a0)1055; RV64-NEXT:    sb zero, 25(a0)1056; RV64-NEXT:    sb zero, 26(a0)1057; RV64-NEXT:    sb zero, 27(a0)1058; RV64-NEXT:    sb zero, 20(a0)1059; RV64-NEXT:    sb zero, 21(a0)1060; RV64-NEXT:    sb zero, 22(a0)1061; RV64-NEXT:    sb zero, 23(a0)1062; RV64-NEXT:    sb zero, 16(a0)1063; RV64-NEXT:    sb zero, 17(a0)1064; RV64-NEXT:    sb zero, 18(a0)1065; RV64-NEXT:    sb zero, 19(a0)1066; RV64-NEXT:    sb zero, 12(a0)1067; RV64-NEXT:    sb zero, 13(a0)1068; RV64-NEXT:    sb zero, 14(a0)1069; RV64-NEXT:    sb zero, 15(a0)1070; RV64-NEXT:    sb zero, 8(a0)1071; RV64-NEXT:    sb zero, 9(a0)1072; RV64-NEXT:    sb zero, 10(a0)1073; RV64-NEXT:    sb zero, 11(a0)1074; RV64-NEXT:    sb zero, 4(a0)1075; RV64-NEXT:    sb zero, 5(a0)1076; RV64-NEXT:    sb zero, 6(a0)1077; RV64-NEXT:    sb zero, 7(a0)1078; RV64-NEXT:    sb zero, 0(a0)1079; RV64-NEXT:    sb zero, 1(a0)1080; RV64-NEXT:    sb zero, 2(a0)1081; RV64-NEXT:    sb zero, 3(a0)1082; RV64-NEXT:    ret1083;1084; RV32-FAST-LABEL: memset_zero_64:1085; RV32-FAST:       # %bb.0:1086; RV32-FAST-NEXT:    sw zero, 48(a0)1087; RV32-FAST-NEXT:    sw zero, 52(a0)1088; RV32-FAST-NEXT:    sw zero, 56(a0)1089; RV32-FAST-NEXT:    sw zero, 60(a0)1090; RV32-FAST-NEXT:    sw zero, 32(a0)1091; RV32-FAST-NEXT:    sw zero, 36(a0)1092; RV32-FAST-NEXT:    sw zero, 40(a0)1093; RV32-FAST-NEXT:    sw zero, 44(a0)1094; RV32-FAST-NEXT:    sw zero, 16(a0)1095; RV32-FAST-NEXT:    sw zero, 20(a0)1096; RV32-FAST-NEXT:    sw zero, 24(a0)1097; RV32-FAST-NEXT:    sw zero, 28(a0)1098; RV32-FAST-NEXT:    sw zero, 0(a0)1099; RV32-FAST-NEXT:    sw zero, 4(a0)1100; RV32-FAST-NEXT:    sw zero, 8(a0)1101; RV32-FAST-NEXT:    sw zero, 12(a0)1102; RV32-FAST-NEXT:    ret1103;1104; RV64-FAST-LABEL: memset_zero_64:1105; RV64-FAST:       # %bb.0:1106; RV64-FAST-NEXT:    sd zero, 32(a0)1107; RV64-FAST-NEXT:    sd zero, 40(a0)1108; RV64-FAST-NEXT:    sd zero, 48(a0)1109; RV64-FAST-NEXT:    sd zero, 56(a0)1110; RV64-FAST-NEXT:    sd zero, 0(a0)1111; RV64-FAST-NEXT:    sd zero, 8(a0)1112; RV64-FAST-NEXT:    sd zero, 16(a0)1113; RV64-FAST-NEXT:    sd zero, 24(a0)1114; RV64-FAST-NEXT:    ret1115  tail call void @llvm.memset.inline.p0.i64(ptr %a, i8 0, i64 64, i1 0)1116  ret void1117}1118 1119; /////////////////////////////////////////////////////////////////////////////1120 1121define void @aligned_memset_zero_2(ptr %a) nounwind {1122; RV32-BOTH-LABEL: aligned_memset_zero_2:1123; RV32-BOTH:       # %bb.0:1124; RV32-BOTH-NEXT:    sh zero, 0(a0)1125; RV32-BOTH-NEXT:    ret1126;1127; RV64-BOTH-LABEL: aligned_memset_zero_2:1128; RV64-BOTH:       # %bb.0:1129; RV64-BOTH-NEXT:    sh zero, 0(a0)1130; RV64-BOTH-NEXT:    ret1131  tail call void @llvm.memset.inline.p0.i64(ptr align 2 %a, i8 0, i64 2, i1 0)1132  ret void1133}1134 1135define void @aligned_memset_zero_4(ptr %a) nounwind {1136; RV32-BOTH-LABEL: aligned_memset_zero_4:1137; RV32-BOTH:       # %bb.0:1138; RV32-BOTH-NEXT:    sw zero, 0(a0)1139; RV32-BOTH-NEXT:    ret1140;1141; RV64-BOTH-LABEL: aligned_memset_zero_4:1142; RV64-BOTH:       # %bb.0:1143; RV64-BOTH-NEXT:    sw zero, 0(a0)1144; RV64-BOTH-NEXT:    ret1145  tail call void @llvm.memset.inline.p0.i64(ptr align 4 %a, i8 0, i64 4, i1 0)1146  ret void1147}1148 1149define void @aligned_memset_zero_8(ptr %a) nounwind {1150; RV32-BOTH-LABEL: aligned_memset_zero_8:1151; RV32-BOTH:       # %bb.0:1152; RV32-BOTH-NEXT:    sw zero, 0(a0)1153; RV32-BOTH-NEXT:    sw zero, 4(a0)1154; RV32-BOTH-NEXT:    ret1155;1156; RV64-BOTH-LABEL: aligned_memset_zero_8:1157; RV64-BOTH:       # %bb.0:1158; RV64-BOTH-NEXT:    sd zero, 0(a0)1159; RV64-BOTH-NEXT:    ret1160  tail call void @llvm.memset.inline.p0.i64(ptr align 8 %a, i8 0, i64 8, i1 0)1161  ret void1162}1163 1164define void @aligned_memset_zero_16(ptr %a) nounwind {1165; RV32-BOTH-LABEL: aligned_memset_zero_16:1166; RV32-BOTH:       # %bb.0:1167; RV32-BOTH-NEXT:    sw zero, 0(a0)1168; RV32-BOTH-NEXT:    sw zero, 4(a0)1169; RV32-BOTH-NEXT:    sw zero, 8(a0)1170; RV32-BOTH-NEXT:    sw zero, 12(a0)1171; RV32-BOTH-NEXT:    ret1172;1173; RV64-BOTH-LABEL: aligned_memset_zero_16:1174; RV64-BOTH:       # %bb.0:1175; RV64-BOTH-NEXT:    sd zero, 0(a0)1176; RV64-BOTH-NEXT:    sd zero, 8(a0)1177; RV64-BOTH-NEXT:    ret1178  tail call void @llvm.memset.inline.p0.i64(ptr align 16 %a, i8 0, i64 16, i1 0)1179  ret void1180}1181 1182define void @aligned_memset_zero_32(ptr %a) nounwind {1183; RV32-BOTH-LABEL: aligned_memset_zero_32:1184; RV32-BOTH:       # %bb.0:1185; RV32-BOTH-NEXT:    sw zero, 16(a0)1186; RV32-BOTH-NEXT:    sw zero, 20(a0)1187; RV32-BOTH-NEXT:    sw zero, 24(a0)1188; RV32-BOTH-NEXT:    sw zero, 28(a0)1189; RV32-BOTH-NEXT:    sw zero, 0(a0)1190; RV32-BOTH-NEXT:    sw zero, 4(a0)1191; RV32-BOTH-NEXT:    sw zero, 8(a0)1192; RV32-BOTH-NEXT:    sw zero, 12(a0)1193; RV32-BOTH-NEXT:    ret1194;1195; RV64-BOTH-LABEL: aligned_memset_zero_32:1196; RV64-BOTH:       # %bb.0:1197; RV64-BOTH-NEXT:    sd zero, 0(a0)1198; RV64-BOTH-NEXT:    sd zero, 8(a0)1199; RV64-BOTH-NEXT:    sd zero, 16(a0)1200; RV64-BOTH-NEXT:    sd zero, 24(a0)1201; RV64-BOTH-NEXT:    ret1202  tail call void @llvm.memset.inline.p0.i64(ptr align 32 %a, i8 0, i64 32, i1 0)1203  ret void1204}1205 1206define void @aligned_memset_zero_64(ptr %a) nounwind {1207; RV32-BOTH-LABEL: aligned_memset_zero_64:1208; RV32-BOTH:       # %bb.0:1209; RV32-BOTH-NEXT:    sw zero, 48(a0)1210; RV32-BOTH-NEXT:    sw zero, 52(a0)1211; RV32-BOTH-NEXT:    sw zero, 56(a0)1212; RV32-BOTH-NEXT:    sw zero, 60(a0)1213; RV32-BOTH-NEXT:    sw zero, 32(a0)1214; RV32-BOTH-NEXT:    sw zero, 36(a0)1215; RV32-BOTH-NEXT:    sw zero, 40(a0)1216; RV32-BOTH-NEXT:    sw zero, 44(a0)1217; RV32-BOTH-NEXT:    sw zero, 16(a0)1218; RV32-BOTH-NEXT:    sw zero, 20(a0)1219; RV32-BOTH-NEXT:    sw zero, 24(a0)1220; RV32-BOTH-NEXT:    sw zero, 28(a0)1221; RV32-BOTH-NEXT:    sw zero, 0(a0)1222; RV32-BOTH-NEXT:    sw zero, 4(a0)1223; RV32-BOTH-NEXT:    sw zero, 8(a0)1224; RV32-BOTH-NEXT:    sw zero, 12(a0)1225; RV32-BOTH-NEXT:    ret1226;1227; RV64-BOTH-LABEL: aligned_memset_zero_64:1228; RV64-BOTH:       # %bb.0:1229; RV64-BOTH-NEXT:    sd zero, 32(a0)1230; RV64-BOTH-NEXT:    sd zero, 40(a0)1231; RV64-BOTH-NEXT:    sd zero, 48(a0)1232; RV64-BOTH-NEXT:    sd zero, 56(a0)1233; RV64-BOTH-NEXT:    sd zero, 0(a0)1234; RV64-BOTH-NEXT:    sd zero, 8(a0)1235; RV64-BOTH-NEXT:    sd zero, 16(a0)1236; RV64-BOTH-NEXT:    sd zero, 24(a0)1237; RV64-BOTH-NEXT:    ret1238  tail call void @llvm.memset.inline.p0.i64(ptr align 64 %a, i8 0, i64 64, i1 0)1239  ret void1240}1241 1242; /////////////////////////////////////////////////////////////////////////////1243; Usual overlap tricks1244 1245define void @aligned_memset_zero_7(ptr %a) nounwind {1246; RV32-LABEL: aligned_memset_zero_7:1247; RV32:       # %bb.0:1248; RV32-NEXT:    sw zero, 0(a0)1249; RV32-NEXT:    sh zero, 4(a0)1250; RV32-NEXT:    sb zero, 6(a0)1251; RV32-NEXT:    ret1252;1253; RV64-LABEL: aligned_memset_zero_7:1254; RV64:       # %bb.0:1255; RV64-NEXT:    sw zero, 0(a0)1256; RV64-NEXT:    sh zero, 4(a0)1257; RV64-NEXT:    sb zero, 6(a0)1258; RV64-NEXT:    ret1259;1260; RV32-FAST-LABEL: aligned_memset_zero_7:1261; RV32-FAST:       # %bb.0:1262; RV32-FAST-NEXT:    sw zero, 3(a0)1263; RV32-FAST-NEXT:    sw zero, 0(a0)1264; RV32-FAST-NEXT:    ret1265;1266; RV64-FAST-LABEL: aligned_memset_zero_7:1267; RV64-FAST:       # %bb.0:1268; RV64-FAST-NEXT:    sw zero, 3(a0)1269; RV64-FAST-NEXT:    sw zero, 0(a0)1270; RV64-FAST-NEXT:    ret1271  tail call void @llvm.memset.inline.p0.i64(ptr align 8 %a, i8 0, i64 7, i1 0)1272  ret void1273}1274 1275define void @aligned_memset_zero_15(ptr %a) nounwind {1276; RV32-LABEL: aligned_memset_zero_15:1277; RV32:       # %bb.0:1278; RV32-NEXT:    sb zero, 14(a0)1279; RV32-NEXT:    sw zero, 0(a0)1280; RV32-NEXT:    sw zero, 4(a0)1281; RV32-NEXT:    sw zero, 8(a0)1282; RV32-NEXT:    sh zero, 12(a0)1283; RV32-NEXT:    ret1284;1285; RV64-LABEL: aligned_memset_zero_15:1286; RV64:       # %bb.0:1287; RV64-NEXT:    sd zero, 0(a0)1288; RV64-NEXT:    sw zero, 8(a0)1289; RV64-NEXT:    sh zero, 12(a0)1290; RV64-NEXT:    sb zero, 14(a0)1291; RV64-NEXT:    ret1292;1293; RV32-FAST-LABEL: aligned_memset_zero_15:1294; RV32-FAST:       # %bb.0:1295; RV32-FAST-NEXT:    sw zero, 11(a0)1296; RV32-FAST-NEXT:    sw zero, 0(a0)1297; RV32-FAST-NEXT:    sw zero, 4(a0)1298; RV32-FAST-NEXT:    sw zero, 8(a0)1299; RV32-FAST-NEXT:    ret1300;1301; RV64-FAST-LABEL: aligned_memset_zero_15:1302; RV64-FAST:       # %bb.0:1303; RV64-FAST-NEXT:    sd zero, 7(a0)1304; RV64-FAST-NEXT:    sd zero, 0(a0)1305; RV64-FAST-NEXT:    ret1306  tail call void @llvm.memset.inline.p0.i64(ptr align 8 %a, i8 0, i64 15, i1 0)1307  ret void1308}1309