xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/2013-05-07-ByteLoadSameAddress.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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