1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=thumb-eabi -mattr=+v7,+thumb2 %s -o - | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine i8 @f1(i8* %call1, i8* %call3, i32 %h, i32 %w, i32 %Width) { 4*9880d681SAndroid Build Coastguard Worker; CHECK: f1: 5*9880d681SAndroid Build Coastguard Workerentry: 6*9880d681SAndroid Build Coastguard Worker %mul17 = mul nsw i32 %Width, %h 7*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %mul17, %w 8*9880d681SAndroid Build Coastguard Worker %sub19 = sub i32 %add, %Width 9*9880d681SAndroid Build Coastguard Worker %sub20 = add i32 %sub19, -1 10*9880d681SAndroid Build Coastguard Worker %arrayidx21 = getelementptr inbounds i8, i8* %call1, i32 %sub20 11*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* %arrayidx21, align 1 12*9880d681SAndroid Build Coastguard Worker %conv22 = zext i8 %0 to i32 13*9880d681SAndroid Build Coastguard Worker %arrayidx25 = getelementptr inbounds i8, i8* %call1, i32 %sub19 14*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx25, align 1 15*9880d681SAndroid Build Coastguard Worker %conv26 = zext i8 %1 to i32 16*9880d681SAndroid Build Coastguard Worker %mul23189 = add i32 %conv26, %conv22 17*9880d681SAndroid Build Coastguard Worker %add30 = add i32 %sub19, 1 18*9880d681SAndroid Build Coastguard Worker %arrayidx31 = getelementptr inbounds i8, i8* %call1, i32 %add30 19*9880d681SAndroid Build Coastguard Worker %2 = load i8, i8* %arrayidx31, align 1 20*9880d681SAndroid Build Coastguard Worker %conv32 = zext i8 %2 to i32 21*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb r{{[0-9]*}}, [r{{[0-9]*}}, #-1] 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldrb r{{[0-9]*}}, [r{{[0-9]*}}, #1] 23*9880d681SAndroid Build Coastguard Worker %add28190 = add i32 %mul23189, %conv32 24*9880d681SAndroid Build Coastguard Worker %sub35 = add i32 %add, -1 25*9880d681SAndroid Build Coastguard Worker %arrayidx36 = getelementptr inbounds i8, i8* %call1, i32 %sub35 26*9880d681SAndroid Build Coastguard Worker %3 = load i8, i8* %arrayidx36, align 1 27*9880d681SAndroid Build Coastguard Worker %conv37 = zext i8 %3 to i32 28*9880d681SAndroid Build Coastguard Worker %add34191 = add i32 %add28190, %conv37 29*9880d681SAndroid Build Coastguard Worker %arrayidx40 = getelementptr inbounds i8, i8* %call1, i32 %add 30*9880d681SAndroid Build Coastguard Worker %4 = load i8, i8* %arrayidx40, align 1 31*9880d681SAndroid Build Coastguard Worker %conv41 = zext i8 %4 to i32 32*9880d681SAndroid Build Coastguard Worker %mul42 = mul nsw i32 %conv41, 255 33*9880d681SAndroid Build Coastguard Worker %add44 = add i32 %add, 1 34*9880d681SAndroid Build Coastguard Worker %arrayidx45 = getelementptr inbounds i8, i8* %call1, i32 %add44 35*9880d681SAndroid Build Coastguard Worker %5 = load i8, i8* %arrayidx45, align 1 36*9880d681SAndroid Build Coastguard Worker %conv46 = zext i8 %5 to i32 37*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb r{{[0-9]*}}, [r{{[0-9]*}}, #-1] 38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldrb r{{[0-9]*}}, [r{{[0-9]*}}, #1] 39*9880d681SAndroid Build Coastguard Worker %add49 = add i32 %add, %Width 40*9880d681SAndroid Build Coastguard Worker %sub50 = add i32 %add49, -1 41*9880d681SAndroid Build Coastguard Worker %arrayidx51 = getelementptr inbounds i8, i8* %call1, i32 %sub50 42*9880d681SAndroid Build Coastguard Worker %6 = load i8, i8* %arrayidx51, align 1 43*9880d681SAndroid Build Coastguard Worker %conv52 = zext i8 %6 to i32 44*9880d681SAndroid Build Coastguard Worker %arrayidx56 = getelementptr inbounds i8, i8* %call1, i32 %add49 45*9880d681SAndroid Build Coastguard Worker %7 = load i8, i8* %arrayidx56, align 1 46*9880d681SAndroid Build Coastguard Worker %conv57 = zext i8 %7 to i32 47*9880d681SAndroid Build Coastguard Worker %add61 = add i32 %add49, 1 48*9880d681SAndroid Build Coastguard Worker %arrayidx62 = getelementptr inbounds i8, i8* %call1, i32 %add61 49*9880d681SAndroid Build Coastguard Worker %8 = load i8, i8* %arrayidx62, align 1 50*9880d681SAndroid Build Coastguard Worker %conv63 = zext i8 %8 to i32 51*9880d681SAndroid Build Coastguard Worker; CHECK: ldrb r{{[0-9]*}}, [r{{[0-9]*}}, #-1] 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ldrb{{[.w]*}} r{{[0-9]*}}, [r{{[0-9]*}}, #1] 53*9880d681SAndroid Build Coastguard Worker %tmp = add i32 %add34191, %conv46 54*9880d681SAndroid Build Coastguard Worker %tmp193 = add i32 %tmp, %conv52 55*9880d681SAndroid Build Coastguard Worker %tmp194 = add i32 %tmp193, %conv57 56*9880d681SAndroid Build Coastguard Worker %tmp195 = add i32 %tmp194, %conv63 57*9880d681SAndroid Build Coastguard Worker %tmp196 = mul i32 %tmp195, -28 58*9880d681SAndroid Build Coastguard Worker %add65 = add i32 %tmp196, %mul42 59*9880d681SAndroid Build Coastguard Worker %9 = lshr i32 %add65, 8 60*9880d681SAndroid Build Coastguard Worker %conv68 = trunc i32 %9 to i8 61*9880d681SAndroid Build Coastguard Worker %arrayidx69 = getelementptr inbounds i8, i8* %call3, i32 %add 62*9880d681SAndroid Build Coastguard Worker store i8 %conv68, i8* %arrayidx69, align 1 63*9880d681SAndroid Build Coastguard Worker ret i8 %conv68 64*9880d681SAndroid Build Coastguard Worker} 65