Home | History | Annotate | Download | only in ARM
      1 ; RUN: llc -mtriple=thumb-eabi -mattr=+v7,+thumb2 %s -o - | FileCheck %s
      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
     10         %arrayidx21 = getelementptr inbounds i8, i8* %call1, i32 %sub20
     11         %0 = load i8, i8* %arrayidx21, align 1
     12         %conv22 = zext i8 %0 to i32
     13         %arrayidx25 = getelementptr inbounds i8, i8* %call1, i32 %sub19
     14         %1 = load i8, i8* %arrayidx25, align 1
     15         %conv26 = zext i8 %1 to i32
     16         %mul23189 = add i32 %conv26, %conv22
     17         %add30 = add i32 %sub19, 1
     18         %arrayidx31 = getelementptr inbounds i8, i8* %call1, i32 %add30
     19         %2 = load i8, i8* %arrayidx31, align 1
     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
     25         %arrayidx36 = getelementptr inbounds i8, i8* %call1, i32 %sub35
     26         %3 = load i8, i8* %arrayidx36, align 1
     27         %conv37 = zext i8 %3 to i32
     28         %add34191 = add i32 %add28190, %conv37
     29         %arrayidx40 = getelementptr inbounds i8, i8* %call1, i32 %add
     30         %4 = load i8, i8* %arrayidx40, align 1
     31         %conv41 = zext i8 %4 to i32
     32         %mul42 = mul nsw i32 %conv41, 255
     33         %add44 = add i32 %add, 1
     34         %arrayidx45 = getelementptr inbounds i8, i8* %call1, i32 %add44
     35         %5 = load i8, i8* %arrayidx45, align 1
     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
     41         %arrayidx51 = getelementptr inbounds i8, i8* %call1, i32 %sub50
     42         %6 = load i8, i8* %arrayidx51, align 1
     43         %conv52 = zext i8 %6 to i32
     44         %arrayidx56 = getelementptr inbounds i8, i8* %call1, i32 %add49
     45         %7 = load i8, i8* %arrayidx56, align 1
     46         %conv57 = zext i8 %7 to i32
     47         %add61 = add i32 %add49, 1
     48         %arrayidx62 = getelementptr inbounds i8, i8* %call1, i32 %add61
     49         %8 = load i8, i8* %arrayidx62, align 1
     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
     61         %arrayidx69 = getelementptr inbounds i8, i8* %call3, i32 %add
     62         store i8 %conv68, i8* %arrayidx69, align 1
     63         ret i8 %conv68
     64 }
     65