Saleem Abdulrasool | 905b6d19 | 2014-04-03 23:47:24 +0000 | [diff] [blame] | 1 | ; RUN: llc -mtriple=thumb-eabi -mattr=+v7,+thumb2 %s -o - | FileCheck %s |
Renato Golin | b184cd9 | 2013-08-14 16:35:29 +0000 | [diff] [blame] | 2 | |
| 3 | define i8 @f1(i8* %call1, i8* %call3, i32 %h, i32 %w, i32 %Width) { |
| 4 | ; CHECK: f1: |
| 5 | entry: |
| 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 Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 10 | %arrayidx21 = getelementptr inbounds i8, i8* %call1, i32 %sub20 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 11 | %0 = load i8, i8* %arrayidx21, align 1 |
Renato Golin | b184cd9 | 2013-08-14 16:35:29 +0000 | [diff] [blame] | 12 | %conv22 = zext i8 %0 to i32 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 13 | %arrayidx25 = getelementptr inbounds i8, i8* %call1, i32 %sub19 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 14 | %1 = load i8, i8* %arrayidx25, align 1 |
Renato Golin | b184cd9 | 2013-08-14 16:35:29 +0000 | [diff] [blame] | 15 | %conv26 = zext i8 %1 to i32 |
| 16 | %mul23189 = add i32 %conv26, %conv22 |
| 17 | %add30 = add i32 %sub19, 1 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 18 | %arrayidx31 = getelementptr inbounds i8, i8* %call1, i32 %add30 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 19 | %2 = load i8, i8* %arrayidx31, align 1 |
Renato Golin | b184cd9 | 2013-08-14 16:35:29 +0000 | [diff] [blame] | 20 | %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 Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 25 | %arrayidx36 = getelementptr inbounds i8, i8* %call1, i32 %sub35 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 26 | %3 = load i8, i8* %arrayidx36, align 1 |
Renato Golin | b184cd9 | 2013-08-14 16:35:29 +0000 | [diff] [blame] | 27 | %conv37 = zext i8 %3 to i32 |
| 28 | %add34191 = add i32 %add28190, %conv37 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 29 | %arrayidx40 = getelementptr inbounds i8, i8* %call1, i32 %add |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 30 | %4 = load i8, i8* %arrayidx40, align 1 |
Renato Golin | b184cd9 | 2013-08-14 16:35:29 +0000 | [diff] [blame] | 31 | %conv41 = zext i8 %4 to i32 |
| 32 | %mul42 = mul nsw i32 %conv41, 255 |
| 33 | %add44 = add i32 %add, 1 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 34 | %arrayidx45 = getelementptr inbounds i8, i8* %call1, i32 %add44 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 35 | %5 = load i8, i8* %arrayidx45, align 1 |
Renato Golin | b184cd9 | 2013-08-14 16:35:29 +0000 | [diff] [blame] | 36 | %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 Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 41 | %arrayidx51 = getelementptr inbounds i8, i8* %call1, i32 %sub50 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 42 | %6 = load i8, i8* %arrayidx51, align 1 |
Renato Golin | b184cd9 | 2013-08-14 16:35:29 +0000 | [diff] [blame] | 43 | %conv52 = zext i8 %6 to i32 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 44 | %arrayidx56 = getelementptr inbounds i8, i8* %call1, i32 %add49 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 45 | %7 = load i8, i8* %arrayidx56, align 1 |
Renato Golin | b184cd9 | 2013-08-14 16:35:29 +0000 | [diff] [blame] | 46 | %conv57 = zext i8 %7 to i32 |
| 47 | %add61 = add i32 %add49, 1 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 48 | %arrayidx62 = getelementptr inbounds i8, i8* %call1, i32 %add61 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 49 | %8 = load i8, i8* %arrayidx62, align 1 |
Renato Golin | b184cd9 | 2013-08-14 16:35:29 +0000 | [diff] [blame] | 50 | %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 Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 61 | %arrayidx69 = getelementptr inbounds i8, i8* %call3, i32 %add |
Renato Golin | b184cd9 | 2013-08-14 16:35:29 +0000 | [diff] [blame] | 62 | store i8 %conv68, i8* %arrayidx69, align 1 |
| 63 | ret i8 %conv68 |
| 64 | } |