brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 82eab1a Raw
99 lines · plain
1; RUN: llc < %s -mtriple=armv7-apple-darwin | FileCheck %s2 3; Make sure that we merge the consecutive load/store sequence below and use a4; word (16 bit) instead of a byte copy.5; CHECK: MergeLoadStoreBaseIndexOffset6; CHECK: ldrh    [[REG:r[0-9]+]], [{{.*}}]7; CHECK: strh    [[REG]], [r1], #28define void @MergeLoadStoreBaseIndexOffset(ptr %a, ptr %b, ptr %c, i32 %n) {9  br label %110 11; <label>:112  %.09 = phi i32 [ %n, %0 ], [ %11, %1 ]13  %.08 = phi ptr [ %b, %0 ], [ %10, %1 ]14  %.0 = phi ptr [ %a, %0 ], [ %2, %1 ]15  %2 = getelementptr inbounds i32, ptr %.0, i32 116  %3 = load i32, ptr %.0, align 117  %4 = getelementptr inbounds i8, ptr %c, i32 %318  %5 = load i8, ptr %4, align 119  %6 = add i32 %3, 120  %7 = getelementptr inbounds i8, ptr %c, i32 %621  %8 = load i8, ptr %7, align 122  store i8 %5, ptr %.08, align 123  %9 = getelementptr inbounds i8, ptr %.08, i32 124  store i8 %8, ptr %9, align 125  %10 = getelementptr inbounds i8, ptr %.08, i32 226  %11 = add nsw i32 %.09, -127  %12 = icmp eq i32 %11, 028  br i1 %12, label %13, label %129 30; <label>:1331  ret void32}33 34; Make sure that we merge the consecutive load/store sequence below and use a35; word (16 bit) instead of a byte copy even if there are intermediate sign36; extensions.37; CHECK: MergeLoadStoreBaseIndexOffsetSext38; CHECK: ldrh    [[REG:r[0-9]+]], [{{.*}}]39; CHECK: strh    [[REG]], [r1], #240define void @MergeLoadStoreBaseIndexOffsetSext(ptr %a, ptr %b, ptr %c, i32 %n) {41  br label %142 43; <label>:144  %.09 = phi i32 [ %n, %0 ], [ %12, %1 ]45  %.08 = phi ptr [ %b, %0 ], [ %11, %1 ]46  %.0 = phi ptr [ %a, %0 ], [ %2, %1 ]47  %2 = getelementptr inbounds i8, ptr %.0, i32 148  %3 = load i8, ptr %.0, align 149  %4 = sext i8 %3 to i3250  %5 = getelementptr inbounds i8, ptr %c, i32 %451  %6 = load i8, ptr %5, align 152  %7 = add i32 %4, 153  %8 = getelementptr inbounds i8, ptr %c, i32 %754  %9 = load i8, ptr %8, align 155  store i8 %6, ptr %.08, align 156  %10 = getelementptr inbounds i8, ptr %.08, i32 157  store i8 %9, ptr %10, align 158  %11 = getelementptr inbounds i8, ptr %.08, i32 259  %12 = add nsw i32 %.09, -160  %13 = icmp eq i32 %12, 061  br i1 %13, label %14, label %162 63; <label>:1464  ret void65}66 67; However, we can only merge ignore sign extensions when they are on all memory68; computations;69; CHECK: loadStoreBaseIndexOffsetSextNoSex70; CHECK-NOT: ldrh    [[REG:r[0-9]+]], [{{.*}}]71; CHECK-NOT: strh    [[REG]], [r1], #272define void @loadStoreBaseIndexOffsetSextNoSex(ptr %a, ptr %b, ptr %c, i32 %n) {73  br label %174 75; <label>:176  %.09 = phi i32 [ %n, %0 ], [ %12, %1 ]77  %.08 = phi ptr [ %b, %0 ], [ %11, %1 ]78  %.0 = phi ptr [ %a, %0 ], [ %2, %1 ]79  %2 = getelementptr inbounds i8, ptr %.0, i32 180  %3 = load i8, ptr %.0, align 181  %4 = sext i8 %3 to i3282  %5 = getelementptr inbounds i8, ptr %c, i32 %483  %6 = load i8, ptr %5, align 184  %7 = add i8 %3, 185  %wrap.4 = sext i8 %7 to i3286  %8 = getelementptr inbounds i8, ptr %c, i32 %wrap.487  %9 = load i8, ptr %8, align 188  store i8 %6, ptr %.08, align 189  %10 = getelementptr inbounds i8, ptr %.08, i32 190  store i8 %9, ptr %10, align 191  %11 = getelementptr inbounds i8, ptr %.08, i32 292  %12 = add nsw i32 %.09, -193  %13 = icmp eq i32 %12, 094  br i1 %13, label %14, label %195 96; <label>:1497  ret void98}99