xref: /aosp_15_r20/external/llvm/test/CodeGen/Hexagon/addrmode-indoff.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=hexagon < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker;
3*9880d681SAndroid Build Coastguard Worker; Bug 6840. Use absolute+index addressing.
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker@ga = common global [1024 x i8] zeroinitializer, align 8
6*9880d681SAndroid Build Coastguard Worker@gb = common global [1024 x i8] zeroinitializer, align 8
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker; CHECK: memub(r{{[0-9]+}}{{ *}}<<{{ *}}#0{{ *}}+{{ *}}##ga)
9*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @lf2(i32 %i) nounwind readonly {
10*9880d681SAndroid Build Coastguard Workerentry:
11*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [1024 x i8], [1024 x i8]* @ga, i32 0, i32 %i
12*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* %arrayidx, align 1
13*9880d681SAndroid Build Coastguard Worker  ret i8 %0
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker; CHECK: memb(r{{[0-9]+}}{{ *}}<<{{ *}}#0{{ *}}+{{ *}}##gb)
17*9880d681SAndroid Build Coastguard Workerdefine signext i8 @lf2s(i32 %i) nounwind readonly {
18*9880d681SAndroid Build Coastguard Workerentry:
19*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [1024 x i8], [1024 x i8]* @gb, i32 0, i32 %i
20*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* %arrayidx, align 1
21*9880d681SAndroid Build Coastguard Worker  ret i8 %0
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker; CHECK: memub(r{{[0-9]+}}{{ *}}<<{{ *}}#2{{ *}}+{{ *}}##ga)
25*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @lf3(i32 %i) nounwind readonly {
26*9880d681SAndroid Build Coastguard Workerentry:
27*9880d681SAndroid Build Coastguard Worker  %mul = shl nsw i32 %i, 2
28*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [1024 x i8], [1024 x i8]* @ga, i32 0, i32 %mul
29*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* %arrayidx, align 1
30*9880d681SAndroid Build Coastguard Worker  ret i8 %0
31*9880d681SAndroid Build Coastguard Worker}
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker; CHECK: memb(r{{[0-9]+}}{{ *}}<<{{ *}}#2{{ *}}+{{ *}}##gb)
34*9880d681SAndroid Build Coastguard Workerdefine signext i8 @lf3s(i32 %i) nounwind readonly {
35*9880d681SAndroid Build Coastguard Workerentry:
36*9880d681SAndroid Build Coastguard Worker  %mul = shl nsw i32 %i, 2
37*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [1024 x i8], [1024 x i8]* @gb, i32 0, i32 %mul
38*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* %arrayidx, align 1
39*9880d681SAndroid Build Coastguard Worker  ret i8 %0
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker; CHECK: memb(r{{[0-9]+}}{{ *}}<<{{ *}}#0{{ *}}+{{ *}}##ga)
43*9880d681SAndroid Build Coastguard Workerdefine void @sf4(i32 %i, i8 zeroext %j) nounwind {
44*9880d681SAndroid Build Coastguard Workerentry:
45*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [1024 x i8], [1024 x i8]* @ga, i32 0, i32 %i
46*9880d681SAndroid Build Coastguard Worker  store i8 %j, i8* %arrayidx, align 1
47*9880d681SAndroid Build Coastguard Worker  ret void
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Worker; CHECK: memb(r{{[0-9]+}}{{ *}}<<{{ *}}#0{{ *}}+{{ *}}##gb)
51*9880d681SAndroid Build Coastguard Workerdefine void @sf4s(i32 %i, i8 signext %j) nounwind {
52*9880d681SAndroid Build Coastguard Workerentry:
53*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [1024 x i8], [1024 x i8]* @gb, i32 0, i32 %i
54*9880d681SAndroid Build Coastguard Worker  store i8 %j, i8* %arrayidx, align 1
55*9880d681SAndroid Build Coastguard Worker  ret void
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; CHECK: memb(r{{[0-9]+}}{{ *}}<<{{ *}}#2{{ *}}+{{ *}}##ga)
59*9880d681SAndroid Build Coastguard Workerdefine void @sf5(i32 %i, i8 zeroext %j) nounwind {
60*9880d681SAndroid Build Coastguard Workerentry:
61*9880d681SAndroid Build Coastguard Worker  %mul = shl nsw i32 %i, 2
62*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [1024 x i8], [1024 x i8]* @ga, i32 0, i32 %mul
63*9880d681SAndroid Build Coastguard Worker  store i8 %j, i8* %arrayidx, align 1
64*9880d681SAndroid Build Coastguard Worker  ret void
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; CHECK: memb(r{{[0-9]+}}{{ *}}<<{{ *}}#2{{ *}}+{{ *}}##gb)
68*9880d681SAndroid Build Coastguard Workerdefine void @sf5s(i32 %i, i8 signext %j) nounwind {
69*9880d681SAndroid Build Coastguard Workerentry:
70*9880d681SAndroid Build Coastguard Worker  %mul = shl nsw i32 %i, 2
71*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [1024 x i8], [1024 x i8]* @gb, i32 0, i32 %mul
72*9880d681SAndroid Build Coastguard Worker  store i8 %j, i8* %arrayidx, align 1
73*9880d681SAndroid Build Coastguard Worker  ret void
74*9880d681SAndroid Build Coastguard Worker}
75