blob: aabbfae8b879b4aa71a68873dd3769a2e999953b [file] [log] [blame]
Saleem Abdulrasool905b6d192014-04-03 23:47:24 +00001; RUN: llc -mtriple=thumb-eabi -mattr=+v7,+thumb2 %s -o - | FileCheck %s
Renato Golinb184cd92013-08-14 16:35:29 +00002
3define i8 @f1(i8* %call1, i8* %call3, i32 %h, i32 %w, i32 %Width) {
4; CHECK: f1:
5entry:
6 %mul17 = mul nsw i32 %Width, %h
7 %add = add nsw i32 %mul17, %w
8 %sub19 = sub i32 %add, %Width
9 %sub20 = add i32 %sub19, -1
David Blaikie79e6c742015-02-27 19:29:02 +000010 %arrayidx21 = getelementptr inbounds i8, i8* %call1, i32 %sub20
David Blaikiea79ac142015-02-27 21:17:42 +000011 %0 = load i8, i8* %arrayidx21, align 1
Renato Golinb184cd92013-08-14 16:35:29 +000012 %conv22 = zext i8 %0 to i32
David Blaikie79e6c742015-02-27 19:29:02 +000013 %arrayidx25 = getelementptr inbounds i8, i8* %call1, i32 %sub19
David Blaikiea79ac142015-02-27 21:17:42 +000014 %1 = load i8, i8* %arrayidx25, align 1
Renato Golinb184cd92013-08-14 16:35:29 +000015 %conv26 = zext i8 %1 to i32
16 %mul23189 = add i32 %conv26, %conv22
17 %add30 = add i32 %sub19, 1
David Blaikie79e6c742015-02-27 19:29:02 +000018 %arrayidx31 = getelementptr inbounds i8, i8* %call1, i32 %add30
David Blaikiea79ac142015-02-27 21:17:42 +000019 %2 = load i8, i8* %arrayidx31, align 1
Renato Golinb184cd92013-08-14 16:35:29 +000020 %conv32 = zext i8 %2 to i32
21; CHECK: ldrb r{{[0-9]*}}, [r{{[0-9]*}}, #-1]
22; CHECK-NEXT: ldrb r{{[0-9]*}}, [r{{[0-9]*}}, #1]
23 %add28190 = add i32 %mul23189, %conv32
24 %sub35 = add i32 %add, -1
David Blaikie79e6c742015-02-27 19:29:02 +000025 %arrayidx36 = getelementptr inbounds i8, i8* %call1, i32 %sub35
David Blaikiea79ac142015-02-27 21:17:42 +000026 %3 = load i8, i8* %arrayidx36, align 1
Renato Golinb184cd92013-08-14 16:35:29 +000027 %conv37 = zext i8 %3 to i32
28 %add34191 = add i32 %add28190, %conv37
David Blaikie79e6c742015-02-27 19:29:02 +000029 %arrayidx40 = getelementptr inbounds i8, i8* %call1, i32 %add
David Blaikiea79ac142015-02-27 21:17:42 +000030 %4 = load i8, i8* %arrayidx40, align 1
Renato Golinb184cd92013-08-14 16:35:29 +000031 %conv41 = zext i8 %4 to i32
32 %mul42 = mul nsw i32 %conv41, 255
33 %add44 = add i32 %add, 1
David Blaikie79e6c742015-02-27 19:29:02 +000034 %arrayidx45 = getelementptr inbounds i8, i8* %call1, i32 %add44
David Blaikiea79ac142015-02-27 21:17:42 +000035 %5 = load i8, i8* %arrayidx45, align 1
Renato Golinb184cd92013-08-14 16:35:29 +000036 %conv46 = zext i8 %5 to i32
37; CHECK: ldrb r{{[0-9]*}}, [r{{[0-9]*}}, #-1]
38; CHECK-NEXT: ldrb r{{[0-9]*}}, [r{{[0-9]*}}, #1]
39 %add49 = add i32 %add, %Width
40 %sub50 = add i32 %add49, -1
David Blaikie79e6c742015-02-27 19:29:02 +000041 %arrayidx51 = getelementptr inbounds i8, i8* %call1, i32 %sub50
David Blaikiea79ac142015-02-27 21:17:42 +000042 %6 = load i8, i8* %arrayidx51, align 1
Renato Golinb184cd92013-08-14 16:35:29 +000043 %conv52 = zext i8 %6 to i32
David Blaikie79e6c742015-02-27 19:29:02 +000044 %arrayidx56 = getelementptr inbounds i8, i8* %call1, i32 %add49
David Blaikiea79ac142015-02-27 21:17:42 +000045 %7 = load i8, i8* %arrayidx56, align 1
Renato Golinb184cd92013-08-14 16:35:29 +000046 %conv57 = zext i8 %7 to i32
47 %add61 = add i32 %add49, 1
David Blaikie79e6c742015-02-27 19:29:02 +000048 %arrayidx62 = getelementptr inbounds i8, i8* %call1, i32 %add61
David Blaikiea79ac142015-02-27 21:17:42 +000049 %8 = load i8, i8* %arrayidx62, align 1
Renato Golinb184cd92013-08-14 16:35:29 +000050 %conv63 = zext i8 %8 to i32
51; CHECK: ldrb r{{[0-9]*}}, [r{{[0-9]*}}, #-1]
52; CHECK-NEXT: ldrb{{[.w]*}} r{{[0-9]*}}, [r{{[0-9]*}}, #1]
53 %tmp = add i32 %add34191, %conv46
54 %tmp193 = add i32 %tmp, %conv52
55 %tmp194 = add i32 %tmp193, %conv57
56 %tmp195 = add i32 %tmp194, %conv63
57 %tmp196 = mul i32 %tmp195, -28
58 %add65 = add i32 %tmp196, %mul42
59 %9 = lshr i32 %add65, 8
60 %conv68 = trunc i32 %9 to i8
David Blaikie79e6c742015-02-27 19:29:02 +000061 %arrayidx69 = getelementptr inbounds i8, i8* %call3, i32 %add
Renato Golinb184cd92013-08-14 16:35:29 +000062 store i8 %conv68, i8* %arrayidx69, align 1
63 ret i8 %conv68
64}