brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · ad4b8b6 Raw
102 lines · plain
1; RUN: llc -mtriple=thumbv7 -mcpu=cortex-m0 < %s -disable-lsr | FileCheck %s2; FIXME: LSR mangles the last two testcases pretty badly. When this is fixed, remove3; the -disable-lsr above.4 5; CHECK-LABEL: @f6; CHECK: ldm {{r[0-9]}}!, {r{{[0-9]}}}7define i32 @f(ptr readonly %a, ptr readnone %b) {8  %1 = icmp eq ptr %a, %b9  br i1 %1, label %._crit_edge, label %.lr.ph10 11.lr.ph:                                           ; preds = %.lr.ph, %012  %i.02 = phi i32 [ %3, %.lr.ph ], [ 0, %0 ]13  %.01 = phi ptr [ %4, %.lr.ph ], [ %a, %0 ]14  %2 = load i32, ptr %.01, align 415  %3 = add nsw i32 %2, %i.0216  %4 = getelementptr inbounds i32, ptr %.01, i32 117  %5 = icmp eq ptr %4, %b18  br i1 %5, label %._crit_edge, label %.lr.ph19 20._crit_edge:                                      ; preds = %.lr.ph, %021  %i.0.lcssa = phi i32 [ 0, %0 ], [ %3, %.lr.ph ]22  ret i32 %i.0.lcssa23}24 25; CHECK-LABEL: @g26; CHECK-NOT: ldm27define i32 @g(ptr readonly %a, ptr readnone %b) {28  %1 = icmp eq ptr %a, %b29  br i1 %1, label %._crit_edge, label %.lr.ph30 31.lr.ph:                                           ; preds = %.lr.ph, %032  %i.02 = phi i32 [ %3, %.lr.ph ], [ 0, %0 ]33  %.01 = phi ptr [ %4, %.lr.ph ], [ %a, %0 ]34  %2 = load i32, ptr %.01, align 435  %3 = add nsw i32 %2, %i.0236  %4 = getelementptr inbounds i32, ptr %.01, i32 237  %5 = icmp eq ptr %4, %b38  br i1 %5, label %._crit_edge, label %.lr.ph39 40._crit_edge:                                      ; preds = %.lr.ph, %041  %i.0.lcssa = phi i32 [ 0, %0 ], [ %3, %.lr.ph ]42  ret i32 %i.0.lcssa43}44 45; CHECK-LABEL: @h46; CHECK: stm {{r[0-9]}}!, {r{{[0-9]}}}47define void @h(ptr %a, ptr readnone %b) {48  %1 = icmp eq ptr %a, %b49  br i1 %1, label %._crit_edge, label %.lr.ph50 51.lr.ph:                                           ; preds = %.lr.ph, %052  %i.02 = phi i32 [ %2, %.lr.ph ], [ 0, %0 ]53  %.01 = phi ptr [ %3, %.lr.ph ], [ %a, %0 ]54  %2 = add nsw i32 %i.02, 155  store i32 %i.02, ptr %.01, align 456  %3 = getelementptr inbounds i32, ptr %.01, i32 157  %4 = icmp eq ptr %3, %b58  br i1 %4, label %._crit_edge, label %.lr.ph59 60._crit_edge:                                      ; preds = %.lr.ph, %061  ret void62}63 64; CHECK-LABEL: @j65; CHECK-NOT: stm66define void @j(ptr %a, ptr readnone %b) {67  %1 = icmp eq ptr %a, %b68  br i1 %1, label %._crit_edge, label %.lr.ph69 70.lr.ph:                                           ; preds = %.lr.ph, %071  %i.02 = phi i32 [ %2, %.lr.ph ], [ 0, %0 ]72  %.01 = phi ptr [ %3, %.lr.ph ], [ %a, %0 ]73  %2 = add nsw i32 %i.02, 174  store i32 %i.02, ptr %.01, align 475  %3 = getelementptr inbounds i32, ptr %.01, i32 276  %4 = icmp eq ptr %3, %b77  br i1 %4, label %._crit_edge, label %.lr.ph78 79._crit_edge:                                      ; preds = %.lr.ph, %080  ret void81}82 83; Make sure we don't transform str->stm when unaligned loads are allowed.84; CHECK-LABEL: @nostrictalign85; CHECK: str r2, [r0]86define void @nostrictalign(ptr %a, ptr readnone %b) "target-features"="-strict-align" {87  %1 = icmp eq ptr %a, %b88  br i1 %1, label %._crit_edge, label %.lr.ph89 90.lr.ph:                                           ; preds = %.lr.ph, %091  %i.02 = phi i32 [ %2, %.lr.ph ], [ 0, %0 ]92  %.01 = phi ptr [ %3, %.lr.ph ], [ %a, %0 ]93  %2 = add nsw i32 %i.02, 194  store i32 %i.02, ptr %.01, align 195  %3 = getelementptr inbounds i32, ptr %.01, i32 196  %4 = icmp eq ptr %3, %b97  br i1 %4, label %._crit_edge, label %.lr.ph98 99._crit_edge:                                      ; preds = %.lr.ph, %0100  ret void101}102