125 lines · plain
1; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr9 -verify-machineinstrs | FileCheck %s2; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr9 -verify-machineinstrs | FileCheck %s3; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 -verify-machineinstrs | FileCheck %s4; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -verify-machineinstrs | FileCheck %s5 6; Verify pre-inc preparation pass doesn't prepare pre-inc for i64 load/store7; when the stride doesn't conform LDU/STDU DS-form requirement.8 9@result = local_unnamed_addr global i64 0, align 810 11define i64 @test_preinc_i64_ld(ptr nocapture readonly, i64) local_unnamed_addr {12 %3 = icmp eq i64 %1, 013 br i1 %3, label %4, label %614 15; <label>:4: ; preds = %216 %5 = load i64, ptr @result, align 817 br label %1318 19; <label>:6: ; preds = %220 %7 = getelementptr inbounds i8, ptr %0, i64 -5000021 %8 = getelementptr inbounds i8, ptr %0, i64 -6102422 %9 = getelementptr inbounds i8, ptr %0, i64 -6204823 %10 = getelementptr inbounds i8, ptr %0, i64 -6409624 %11 = load i64, ptr @result, align 825 br label %1526 27; <label>:12: ; preds = %1528 store i64 %33, ptr @result, align 829 br label %1330 31; <label>:13: ; preds = %12, %432 %14 = phi i64 [ %5, %4 ], [ %33, %12 ]33 ret i64 %1434 35; <label>:15: ; preds = %15, %636 %16 = phi i64 [ %11, %6 ], [ %33, %15 ]37 %17 = phi i64 [ 0, %6 ], [ %34, %15 ]38 %18 = getelementptr inbounds i8, ptr %7, i64 %1739 %19 = bitcast ptr %18 to ptr40 %20 = load i64, ptr %19, align 841 %21 = getelementptr inbounds i8, ptr %8, i64 %1742 %22 = bitcast ptr %21 to ptr43 %23 = load i64, ptr %22, align 844 %24 = getelementptr inbounds i8, ptr %9, i64 %1745 %25 = bitcast ptr %24 to ptr46 %26 = load i64, ptr %25, align 847 %27 = getelementptr inbounds i8, ptr %10, i64 %1748 %28 = bitcast ptr %27 to ptr49 %29 = load i64, ptr %28, align 850 %30 = mul i64 %23, %2051 %31 = mul i64 %30, %2652 %32 = mul i64 %31, %2953 %33 = mul i64 %32, %1654 %34 = add nuw i64 %17, 155 %35 = icmp eq i64 %34, %156 br i1 %35, label %12, label %1557}58 59; CHECK-LABEL: test_preinc_i64_ld60; CHECK-NOT: addi {{[0-9]+}}, {{[0-9]+}}, -1102361; CHECK-NOT: addi {{[0-9]+}}, {{[0-9]+}}, -1204762; CHECK-NOT: addi {{[0-9]+}}, {{[0-9]+}}, -1409563; CHECK-DAG: ld {{[0-9]+}}, 14096([[REG1:[0-9]+]])64; CHECK-DAG: ld {{[0-9]+}}, 3072([[REG1]])65; CHECK-DAG: ld {{[0-9]+}}, 2048([[REG1]])66; CHECK-DAG: ld {{[0-9]+}}, 0([[REG1]])67; CHECK: blr68 69define i64 @test_preinc_i64_ldst(ptr nocapture, i64, i64) local_unnamed_addr {70 %4 = icmp eq i64 %1, 071 br i1 %4, label %5, label %772 73; <label>:5: ; preds = %374 %6 = load i64, ptr @result, align 875 br label %1676 77; <label>:7: ; preds = %378 %8 = add i64 %2, 179 %9 = getelementptr inbounds i8, ptr %0, i64 -102480 %10 = add i64 %2, 281 %11 = getelementptr inbounds i8, ptr %0, i64 -204882 %12 = getelementptr inbounds i8, ptr %0, i64 -307283 %13 = getelementptr inbounds i8, ptr %0, i64 -409684 %14 = load i64, ptr @result, align 885 br label %1886 87; <label>:15: ; preds = %1888 store i64 %32, ptr @result, align 889 br label %1690 91; <label>:16: ; preds = %15, %592 %17 = phi i64 [ %6, %5 ], [ %32, %15 ]93 ret i64 %1794 95; <label>:18: ; preds = %18, %796 %19 = phi i64 [ %14, %7 ], [ %32, %18 ]97 %20 = phi i64 [ 0, %7 ], [ %33, %18 ]98 %21 = getelementptr inbounds i8, ptr %9, i64 %2099 %22 = bitcast ptr %21 to ptr100 store i64 %8, ptr %22, align 8101 %23 = getelementptr inbounds i8, ptr %11, i64 %20102 %24 = bitcast ptr %23 to ptr103 store i64 %10, ptr %24, align 8104 %25 = getelementptr inbounds i8, ptr %12, i64 %20105 %26 = bitcast ptr %25 to ptr106 %27 = load i64, ptr %26, align 8107 %28 = getelementptr inbounds i8, ptr %13, i64 %20108 %29 = bitcast ptr %28 to ptr109 %30 = load i64, ptr %29, align 8110 %31 = mul i64 %30, %27111 %32 = mul i64 %31, %19112 %33 = add nuw i64 %20, 1113 %34 = icmp eq i64 %33, %1114 br i1 %34, label %15, label %18115}116 117; CHECK-LABEL: test_preinc_i64_ldst118; CHECK-NOT: addi {{[0-9]+}}, {{[0-9]+}}, -3071119; CHECK-NOT: addi {{[0-9]+}}, {{[0-9]+}}, -2047120; CHECK-NOT: addi {{[0-9]+}}, {{[0-9]+}}, -1023121; CHECK-DAG: ld {{[0-9]+}}, -1024([[REG2:[0-9]+]])122; CHECK-DAG: ld {{[0-9]+}}, -2048([[REG2]])123; CHECK-DAG: std {{[0-9]+}}, 1024([[REG2]])124; CHECK-DAG: std {{[0-9]+}}, 0([[REG2]])125