1 ; RUN: llc %s -enable-shrink-wrap=true -o - | FileCheck %s
3 target triple = "thumbv6m-none-none-eabi"
5 @retval = global i32 0, align 4
7 define i32 @test(i32 %i, i32 %argc, i8** nocapture readonly %argv) {
8 %1 = icmp sgt i32 %argc, %i
9 br i1 %1, label %2, label %19
11 %3 = getelementptr inbounds i8*, i8** %argv, i32 %i
12 %4 = load i8*, i8** %3, align 4
13 %5 = load i8, i8* %4, align 1
14 %6 = icmp eq i8 %5, 45
15 %7 = getelementptr inbounds i8, i8* %4, i32 1
16 %. = select i1 %6, i8* %7, i8* %4
17 %.1 = select i1 %6, i32 -1, i32 1
18 %8 = load i8, i8* %., align 1
19 %.off2 = add i8 %8, -48
20 %9 = icmp ult i8 %.off2, 10
21 %.pre = load i32, i32* @retval, align 4
22 br i1 %9, label %.lr.ph.preheader, label %.critedge
24 .lr.ph.preheader: ; preds = %2
27 .lr.ph: ; preds = %.lr.ph.preheader, %.lr.ph
28 %10 = phi i32 [ %14, %.lr.ph ], [ %.pre, %.lr.ph.preheader ]
29 %11 = phi i8 [ %15, %.lr.ph ], [ %8, %.lr.ph.preheader ]
30 %valstring.03 = phi i8* [ %13, %.lr.ph ], [ %., %.lr.ph.preheader ]
31 %12 = zext i8 %11 to i32
32 %13 = getelementptr inbounds i8, i8* %valstring.03, i32 1
33 %14 = add nsw i32 %10, %12
34 store i32 %14, i32* @retval, align 4
35 %15 = load i8, i8* %13, align 1
36 %.off = add i8 %15, -48
37 %16 = icmp ult i8 %.off, 10
38 br i1 %16, label %.lr.ph, label %.critedge.loopexit
40 .critedge.loopexit: ; preds = %.lr.ph
41 %.lcssa = phi i32 [ %14, %.lr.ph ]
44 .critedge: ; preds = %.critedge.loopexit, %2
45 %17 = phi i32 [ %.pre, %2 ], [ %.lcssa, %.critedge.loopexit ]
46 %18 = mul nsw i32 %17, %.1
47 store i32 %18, i32* @retval, align 4
50 ; <label>:19 ; preds = %.critedge, %0
54 ; CHECK: push {r4, r5, r7, lr}
55 ; CHECK: pop {r4, r5, r7}