1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32" 4*9880d681SAndroid Build Coastguard Workertarget triple = "thumbv7m--linux-gnu" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f: 7*9880d681SAndroid Build Coastguard Worker; CHECK: ldm r{{[0-9]}}!, {r[[x:[0-9]]]} 8*9880d681SAndroid Build Coastguard Worker; CHECK: add.w r[[x]], r[[x]], #3 9*9880d681SAndroid Build Coastguard Worker; CHECK: stm r{{[0-9]}}!, {r[[x]]} 10*9880d681SAndroid Build Coastguard Workerdefine void @f(i32 %n, i32* nocapture %a, i32* nocapture readonly %b) optsize minsize { 11*9880d681SAndroid Build Coastguard Worker %1 = icmp sgt i32 %n, 0 12*9880d681SAndroid Build Coastguard Worker br i1 %1, label %.lr.ph, label %._crit_edge 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker.lr.ph: ; preds = %.lr.ph, %0 15*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ %6, %.lr.ph ], [ 0, %0 ] 16*9880d681SAndroid Build Coastguard Worker %.03 = phi i32* [ %2, %.lr.ph ], [ %b, %0 ] 17*9880d681SAndroid Build Coastguard Worker %.012 = phi i32* [ %5, %.lr.ph ], [ %a, %0 ] 18*9880d681SAndroid Build Coastguard Worker %2 = getelementptr inbounds i32, i32* %.03, i32 1 19*9880d681SAndroid Build Coastguard Worker %3 = load i32, i32* %.03, align 4 20*9880d681SAndroid Build Coastguard Worker %4 = add nsw i32 %3, 3 21*9880d681SAndroid Build Coastguard Worker %5 = getelementptr inbounds i32, i32* %.012, i32 1 22*9880d681SAndroid Build Coastguard Worker store i32 %4, i32* %.012, align 4 23*9880d681SAndroid Build Coastguard Worker %6 = add nsw i32 %i.04, 1 24*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i32 %6, %n 25*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %._crit_edge, label %.lr.ph 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker._crit_edge: ; preds = %.lr.ph, %0 28*9880d681SAndroid Build Coastguard Worker ret void 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_nominsize: 32*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ldm 33*9880d681SAndroid Build Coastguard Workerdefine void @f_nominsize(i32 %n, i32* nocapture %a, i32* nocapture readonly %b) optsize { 34*9880d681SAndroid Build Coastguard Worker %1 = icmp sgt i32 %n, 0 35*9880d681SAndroid Build Coastguard Worker br i1 %1, label %.lr.ph, label %._crit_edge 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker.lr.ph: ; preds = %.lr.ph, %0 38*9880d681SAndroid Build Coastguard Worker %i.04 = phi i32 [ %6, %.lr.ph ], [ 0, %0 ] 39*9880d681SAndroid Build Coastguard Worker %.03 = phi i32* [ %2, %.lr.ph ], [ %b, %0 ] 40*9880d681SAndroid Build Coastguard Worker %.012 = phi i32* [ %5, %.lr.ph ], [ %a, %0 ] 41*9880d681SAndroid Build Coastguard Worker %2 = getelementptr inbounds i32, i32* %.03, i32 1 42*9880d681SAndroid Build Coastguard Worker %3 = load i32, i32* %.03, align 4 43*9880d681SAndroid Build Coastguard Worker %4 = add nsw i32 %3, 3 44*9880d681SAndroid Build Coastguard Worker %5 = getelementptr inbounds i32, i32* %.012, i32 1 45*9880d681SAndroid Build Coastguard Worker store i32 %4, i32* %.012, align 4 46*9880d681SAndroid Build Coastguard Worker %6 = add nsw i32 %i.04, 1 47*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i32 %6, %n 48*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %._crit_edge, label %.lr.ph 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker._crit_edge: ; preds = %.lr.ph, %0 51*9880d681SAndroid Build Coastguard Worker ret void 52*9880d681SAndroid Build Coastguard Worker} 53