brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.1 KiB · bb0456f Raw
334 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=riscv32  < %s | FileCheck -check-prefixes=RV32,NO-ZBA %s3; RUN: llc -mtriple=riscv32 -mattr=+zba  < %s | FileCheck -check-prefixes=RV32,ZBA %s4; RUN: llc -mtriple=riscv32 -mattr=+xandesperf  < %s | FileCheck -check-prefixes=RV32,XANDESPERF %s5 6define i32 @add_shl_oneUse(i32 %x, i32 %y) nounwind {7; NO-ZBA-LABEL: add_shl_oneUse:8; NO-ZBA:       # %bb.0:9; NO-ZBA-NEXT:    slli a0, a0, 310; NO-ZBA-NEXT:    add a0, a0, a111; NO-ZBA-NEXT:    addi a0, a0, 98412; NO-ZBA-NEXT:    ret13;14; ZBA-LABEL: add_shl_oneUse:15; ZBA:       # %bb.0:16; ZBA-NEXT:    addi a0, a0, 12317; ZBA-NEXT:    sh3add a0, a0, a118; ZBA-NEXT:    ret19;20; XANDESPERF-LABEL: add_shl_oneUse:21; XANDESPERF:       # %bb.0:22; XANDESPERF-NEXT:    addi a0, a0, 12323; XANDESPERF-NEXT:    nds.lea.d a0, a1, a024; XANDESPERF-NEXT:    ret25  %add.0 = add i32 %x, 12326  %shl = shl i32 %add.0, 327  %add.1 = add i32 %shl, %y28  ret i32 %add.129}30 31define void @add_shl_moreOneUse_inStore(ptr %array1, i32 %a, i32 %b)  {32; NO-ZBA-LABEL: add_shl_moreOneUse_inStore:33; NO-ZBA:       # %bb.0: # %entry34; NO-ZBA-NEXT:    addi a3, a1, 535; NO-ZBA-NEXT:    slli a1, a1, 236; NO-ZBA-NEXT:    add a0, a0, a137; NO-ZBA-NEXT:    sw a2, 20(a0)38; NO-ZBA-NEXT:    sw a2, 24(a0)39; NO-ZBA-NEXT:    sw a3, 140(a0)40; NO-ZBA-NEXT:    ret41;42; ZBA-LABEL: add_shl_moreOneUse_inStore:43; ZBA:       # %bb.0: # %entry44; ZBA-NEXT:    addi a3, a1, 545; ZBA-NEXT:    sh2add a0, a1, a046; ZBA-NEXT:    sw a2, 20(a0)47; ZBA-NEXT:    sw a2, 24(a0)48; ZBA-NEXT:    sw a3, 140(a0)49; ZBA-NEXT:    ret50;51; XANDESPERF-LABEL: add_shl_moreOneUse_inStore:52; XANDESPERF:       # %bb.0: # %entry53; XANDESPERF-NEXT:    addi a3, a1, 554; XANDESPERF-NEXT:    nds.lea.w a0, a0, a155; XANDESPERF-NEXT:    sw a2, 20(a0)56; XANDESPERF-NEXT:    sw a2, 24(a0)57; XANDESPERF-NEXT:    sw a3, 140(a0)58; XANDESPERF-NEXT:    ret59entry:60  %add = add nsw i32 %a, 561  %arrayidx = getelementptr inbounds i32, ptr %array1, i32 %add62  store i32 %b, ptr %arrayidx63  %0 = getelementptr i32, ptr %array1, i32 %a64  %arrayidx3 = getelementptr i8, ptr %0, i32 2465  store i32 %b, ptr %arrayidx366  %arrayidx5 = getelementptr i8, ptr %0, i32 14067  store i32 %add, ptr %arrayidx568  ret void69}70 71define void @add_shl_moreOneUse_inStore_addexceedsign12(ptr %array1, i32 %a, i32 %b)  {72; NO-ZBA-LABEL: add_shl_moreOneUse_inStore_addexceedsign12:73; NO-ZBA:       # %bb.0: # %entry74; NO-ZBA-NEXT:    addi a3, a1, 204775; NO-ZBA-NEXT:    lui a4, 276; NO-ZBA-NEXT:    slli a1, a1, 277; NO-ZBA-NEXT:    addi a3, a3, 178; NO-ZBA-NEXT:    add a0, a0, a179; NO-ZBA-NEXT:    add a0, a0, a480; NO-ZBA-NEXT:    sw a2, 0(a0)81; NO-ZBA-NEXT:    sw a3, 4(a0)82; NO-ZBA-NEXT:    sw a2, 120(a0)83; NO-ZBA-NEXT:    ret84;85; ZBA-LABEL: add_shl_moreOneUse_inStore_addexceedsign12:86; ZBA:       # %bb.0: # %entry87; ZBA-NEXT:    addi a3, a1, 204788; ZBA-NEXT:    lui a4, 289; ZBA-NEXT:    sh2add a0, a1, a090; ZBA-NEXT:    addi a3, a3, 191; ZBA-NEXT:    add a0, a0, a492; ZBA-NEXT:    sw a2, 0(a0)93; ZBA-NEXT:    sw a3, 4(a0)94; ZBA-NEXT:    sw a2, 120(a0)95; ZBA-NEXT:    ret96;97; XANDESPERF-LABEL: add_shl_moreOneUse_inStore_addexceedsign12:98; XANDESPERF:       # %bb.0: # %entry99; XANDESPERF-NEXT:    addi a3, a1, 2047100; XANDESPERF-NEXT:    lui a4, 2101; XANDESPERF-NEXT:    nds.lea.w a0, a0, a1102; XANDESPERF-NEXT:    addi a3, a3, 1103; XANDESPERF-NEXT:    add a0, a0, a4104; XANDESPERF-NEXT:    sw a2, 0(a0)105; XANDESPERF-NEXT:    sw a3, 4(a0)106; XANDESPERF-NEXT:    sw a2, 120(a0)107; XANDESPERF-NEXT:    ret108entry:109  %add = add nsw i32 %a, 2048110  %arrayidx = getelementptr inbounds i32, ptr %array1, i32 %add111  store i32 %b, ptr %arrayidx112  %0 = getelementptr i32, ptr %array1, i32 %a113  %arrayidx2 = getelementptr i8, ptr %0, i32 8196114  store i32 %add, ptr %arrayidx2115  %arrayidx4 = getelementptr i8, ptr %0, i32 8312116  store i32 %b, ptr %arrayidx4117  ret void118}119 120define void @add_shl_moreOneUse_inSelect(ptr %array1, i32 %a, i32 %b, i32 %x) {121; NO-ZBA-LABEL: add_shl_moreOneUse_inSelect:122; NO-ZBA:       # %bb.0: # %entry123; NO-ZBA-NEXT:    addi a4, a1, 5124; NO-ZBA-NEXT:    mv a5, a4125; NO-ZBA-NEXT:    bgtz a3, .LBB3_2126; NO-ZBA-NEXT:  # %bb.1: # %entry127; NO-ZBA-NEXT:    mv a5, a2128; NO-ZBA-NEXT:  .LBB3_2: # %entry129; NO-ZBA-NEXT:    slli a1, a1, 2130; NO-ZBA-NEXT:    add a0, a0, a1131; NO-ZBA-NEXT:    sw a5, 20(a0)132; NO-ZBA-NEXT:    sw a5, 24(a0)133; NO-ZBA-NEXT:    sw a4, 140(a0)134; NO-ZBA-NEXT:    ret135;136; ZBA-LABEL: add_shl_moreOneUse_inSelect:137; ZBA:       # %bb.0: # %entry138; ZBA-NEXT:    addi a4, a1, 5139; ZBA-NEXT:    mv a5, a4140; ZBA-NEXT:    bgtz a3, .LBB3_2141; ZBA-NEXT:  # %bb.1: # %entry142; ZBA-NEXT:    mv a5, a2143; ZBA-NEXT:  .LBB3_2: # %entry144; ZBA-NEXT:    sh2add a0, a1, a0145; ZBA-NEXT:    sw a5, 20(a0)146; ZBA-NEXT:    sw a5, 24(a0)147; ZBA-NEXT:    sw a4, 140(a0)148; ZBA-NEXT:    ret149;150; XANDESPERF-LABEL: add_shl_moreOneUse_inSelect:151; XANDESPERF:       # %bb.0: # %entry152; XANDESPERF-NEXT:    addi a4, a1, 5153; XANDESPERF-NEXT:    mv a5, a4154; XANDESPERF-NEXT:    bgtz a3, .LBB3_2155; XANDESPERF-NEXT:  # %bb.1: # %entry156; XANDESPERF-NEXT:    mv a5, a2157; XANDESPERF-NEXT:  .LBB3_2: # %entry158; XANDESPERF-NEXT:    nds.lea.w a0, a0, a1159; XANDESPERF-NEXT:    sw a5, 20(a0)160; XANDESPERF-NEXT:    sw a5, 24(a0)161; XANDESPERF-NEXT:    sw a4, 140(a0)162; XANDESPERF-NEXT:    ret163entry:164  %add = add nsw i32 %a, 5165  %cmp = icmp sgt i32 %x, 0166  %cond = select i1 %cmp, i32 %add, i32 %b167  %arrayidx = getelementptr inbounds i32, ptr %array1, i32 %add168  store i32 %cond, ptr %arrayidx169  %0 = getelementptr i32, ptr %array1, i32 %a170  %arrayidx2 = getelementptr i32, ptr %0, i32 6171  store i32 %cond, ptr %arrayidx2172  %arrayidx4 = getelementptr i32, ptr %0, i32 35173  store i32 %add, ptr %arrayidx4174  ret void175}176 177define void @add_shl_moreOneUse_inSelect_addexceedsign12(ptr %array1, i32 %a, i32 %b, i32 %x) {178; NO-ZBA-LABEL: add_shl_moreOneUse_inSelect_addexceedsign12:179; NO-ZBA:       # %bb.0: # %entry180; NO-ZBA-NEXT:    addi a4, a1, 2047181; NO-ZBA-NEXT:    addi a4, a4, 1182; NO-ZBA-NEXT:    mv a5, a4183; NO-ZBA-NEXT:    bgtz a3, .LBB4_2184; NO-ZBA-NEXT:  # %bb.1: # %entry185; NO-ZBA-NEXT:    mv a5, a2186; NO-ZBA-NEXT:  .LBB4_2: # %entry187; NO-ZBA-NEXT:    lui a2, 2188; NO-ZBA-NEXT:    slli a1, a1, 2189; NO-ZBA-NEXT:    add a0, a0, a1190; NO-ZBA-NEXT:    add a0, a0, a2191; NO-ZBA-NEXT:    sw a5, 0(a0)192; NO-ZBA-NEXT:    sw a5, 4(a0)193; NO-ZBA-NEXT:    sw a4, 120(a0)194; NO-ZBA-NEXT:    ret195;196; ZBA-LABEL: add_shl_moreOneUse_inSelect_addexceedsign12:197; ZBA:       # %bb.0: # %entry198; ZBA-NEXT:    addi a4, a1, 2047199; ZBA-NEXT:    addi a4, a4, 1200; ZBA-NEXT:    mv a5, a4201; ZBA-NEXT:    bgtz a3, .LBB4_2202; ZBA-NEXT:  # %bb.1: # %entry203; ZBA-NEXT:    mv a5, a2204; ZBA-NEXT:  .LBB4_2: # %entry205; ZBA-NEXT:    lui a2, 2206; ZBA-NEXT:    sh2add a0, a1, a0207; ZBA-NEXT:    add a0, a0, a2208; ZBA-NEXT:    sw a5, 0(a0)209; ZBA-NEXT:    sw a5, 4(a0)210; ZBA-NEXT:    sw a4, 120(a0)211; ZBA-NEXT:    ret212;213; XANDESPERF-LABEL: add_shl_moreOneUse_inSelect_addexceedsign12:214; XANDESPERF:       # %bb.0: # %entry215; XANDESPERF-NEXT:    addi a4, a1, 2047216; XANDESPERF-NEXT:    addi a4, a4, 1217; XANDESPERF-NEXT:    mv a5, a4218; XANDESPERF-NEXT:    bgtz a3, .LBB4_2219; XANDESPERF-NEXT:  # %bb.1: # %entry220; XANDESPERF-NEXT:    mv a5, a2221; XANDESPERF-NEXT:  .LBB4_2: # %entry222; XANDESPERF-NEXT:    lui a2, 2223; XANDESPERF-NEXT:    nds.lea.w a0, a0, a1224; XANDESPERF-NEXT:    add a0, a0, a2225; XANDESPERF-NEXT:    sw a5, 0(a0)226; XANDESPERF-NEXT:    sw a5, 4(a0)227; XANDESPERF-NEXT:    sw a4, 120(a0)228; XANDESPERF-NEXT:    ret229entry:230  %add = add nsw i32 %a, 2048231  %cmp = icmp sgt i32 %x, 0232  %spec.select = select i1 %cmp, i32 %add, i32 %b233  %0 = getelementptr inbounds i32, ptr %array1, i32 %add234  store i32 %spec.select, ptr %0, align 4235  %1 = getelementptr i32, ptr %array1, i32 %a236  %arrayidx4 = getelementptr i8, ptr %1, i32 8196237  store i32 %spec.select, ptr %arrayidx4238  %arrayidx6 = getelementptr i8, ptr %1, i32 8312239  store i32 %add, ptr %arrayidx6240  ret void241}242 243define i32 @add_shl_moreOneUse_sh1add(i32 %x) {244; NO-ZBA-LABEL: add_shl_moreOneUse_sh1add:245; NO-ZBA:       # %bb.0:246; NO-ZBA-NEXT:    ori a1, a0, 1247; NO-ZBA-NEXT:    slli a0, a0, 1248; NO-ZBA-NEXT:    ori a0, a0, 2249; NO-ZBA-NEXT:    add a0, a0, a1250; NO-ZBA-NEXT:    ret251;252; ZBA-LABEL: add_shl_moreOneUse_sh1add:253; ZBA:       # %bb.0:254; ZBA-NEXT:    ori a0, a0, 1255; ZBA-NEXT:    sh1add a0, a0, a0256; ZBA-NEXT:    ret257;258; XANDESPERF-LABEL: add_shl_moreOneUse_sh1add:259; XANDESPERF:       # %bb.0:260; XANDESPERF-NEXT:    ori a0, a0, 1261; XANDESPERF-NEXT:    nds.lea.h a0, a0, a0262; XANDESPERF-NEXT:    ret263  %or = or i32 %x, 1264  %mul = shl i32 %or, 1265  %add = add i32 %mul, %or266  ret i32 %add267}268 269define i32 @add_shl_moreOneUse_sh2add(i32 %x) {270; NO-ZBA-LABEL: add_shl_moreOneUse_sh2add:271; NO-ZBA:       # %bb.0:272; NO-ZBA-NEXT:    ori a1, a0, 1273; NO-ZBA-NEXT:    slli a0, a0, 2274; NO-ZBA-NEXT:    ori a0, a0, 4275; NO-ZBA-NEXT:    add a0, a0, a1276; NO-ZBA-NEXT:    ret277;278; ZBA-LABEL: add_shl_moreOneUse_sh2add:279; ZBA:       # %bb.0:280; ZBA-NEXT:    ori a0, a0, 1281; ZBA-NEXT:    sh2add a0, a0, a0282; ZBA-NEXT:    ret283;284; XANDESPERF-LABEL: add_shl_moreOneUse_sh2add:285; XANDESPERF:       # %bb.0:286; XANDESPERF-NEXT:    ori a0, a0, 1287; XANDESPERF-NEXT:    nds.lea.w a0, a0, a0288; XANDESPERF-NEXT:    ret289  %or = or i32 %x, 1290  %mul = shl i32 %or, 2291  %add = add i32 %mul, %or292  ret i32 %add293}294 295define i32 @add_shl_moreOneUse_sh3add(i32 %x) {296; NO-ZBA-LABEL: add_shl_moreOneUse_sh3add:297; NO-ZBA:       # %bb.0:298; NO-ZBA-NEXT:    ori a1, a0, 1299; NO-ZBA-NEXT:    slli a0, a0, 3300; NO-ZBA-NEXT:    ori a0, a0, 8301; NO-ZBA-NEXT:    add a0, a0, a1302; NO-ZBA-NEXT:    ret303;304; ZBA-LABEL: add_shl_moreOneUse_sh3add:305; ZBA:       # %bb.0:306; ZBA-NEXT:    ori a0, a0, 1307; ZBA-NEXT:    sh3add a0, a0, a0308; ZBA-NEXT:    ret309;310; XANDESPERF-LABEL: add_shl_moreOneUse_sh3add:311; XANDESPERF:       # %bb.0:312; XANDESPERF-NEXT:    ori a0, a0, 1313; XANDESPERF-NEXT:    nds.lea.d a0, a0, a0314; XANDESPERF-NEXT:    ret315  %or = or i32 %x, 1316  %mul = shl i32 %or, 3317  %add = add i32 %mul, %or318  ret i32 %add319}320 321define i32 @add_shl_moreOneUse_sh4add(i32 %x) {322; RV32-LABEL: add_shl_moreOneUse_sh4add:323; RV32:       # %bb.0:324; RV32-NEXT:    ori a1, a0, 1325; RV32-NEXT:    slli a0, a0, 4326; RV32-NEXT:    ori a0, a0, 16327; RV32-NEXT:    add a0, a0, a1328; RV32-NEXT:    ret329  %or = or i32 %x, 1330  %mul = shl i32 %or, 4331  %add = add i32 %mul, %or332  ret i32 %add333}334