xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/tbi.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -aarch64-use-tbi -mtriple=arm64-apple-ios8.0.0 < %s \
2*9880d681SAndroid Build Coastguard Worker; RUN:     | FileCheck --check-prefix=TBI    --check-prefix=BOTH %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -aarch64-use-tbi -mtriple=arm64-apple-ios7.1.0 < %s \
4*9880d681SAndroid Build Coastguard Worker; RUN:     | FileCheck --check-prefix=NO_TBI --check-prefix=BOTH %s
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; BOTH-LABEL:ld_and32:
7*9880d681SAndroid Build Coastguard Worker; TBI-NOT: and x
8*9880d681SAndroid Build Coastguard Worker; NO_TBI: and x
9*9880d681SAndroid Build Coastguard Workerdefine i32 @ld_and32(i64 %p) {
10*9880d681SAndroid Build Coastguard Worker  %and = and i64 %p, 72057594037927935
11*9880d681SAndroid Build Coastguard Worker  %cast = inttoptr i64 %and to i32*
12*9880d681SAndroid Build Coastguard Worker  %load = load i32, i32* %cast
13*9880d681SAndroid Build Coastguard Worker  ret i32 %load
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker; load (r & MASK) + 4
17*9880d681SAndroid Build Coastguard Worker; BOTH-LABEL:ld_and_plus_offset:
18*9880d681SAndroid Build Coastguard Worker; TBI-NOT: and x
19*9880d681SAndroid Build Coastguard Worker; NO_TBI: and x
20*9880d681SAndroid Build Coastguard Workerdefine i32 @ld_and_plus_offset(i64 %p) {
21*9880d681SAndroid Build Coastguard Worker  %and = and i64 %p, 72057594037927935
22*9880d681SAndroid Build Coastguard Worker  %cast = inttoptr i64 %and to i32*
23*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32* %cast, i64 4
24*9880d681SAndroid Build Coastguard Worker  %load = load i32, i32* %gep
25*9880d681SAndroid Build Coastguard Worker  ret i32 %load
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker; load (r & WIDER_MASK)
29*9880d681SAndroid Build Coastguard Worker; BOTH-LABEL:ld_and32_wider:
30*9880d681SAndroid Build Coastguard Worker; TBI-NOT: and x
31*9880d681SAndroid Build Coastguard Worker; NO_TBI: and x
32*9880d681SAndroid Build Coastguard Workerdefine i32 @ld_and32_wider(i64 %p) {
33*9880d681SAndroid Build Coastguard Worker  %and = and i64 %p, 1152921504606846975
34*9880d681SAndroid Build Coastguard Worker  %cast = inttoptr i64 %and to i32*
35*9880d681SAndroid Build Coastguard Worker  %load = load i32, i32* %cast
36*9880d681SAndroid Build Coastguard Worker  ret i32 %load
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker; BOTH-LABEL:ld_and64:
40*9880d681SAndroid Build Coastguard Worker; TBI-NOT: and x
41*9880d681SAndroid Build Coastguard Worker; NO_TBI: and x
42*9880d681SAndroid Build Coastguard Workerdefine i64 @ld_and64(i64 %p) {
43*9880d681SAndroid Build Coastguard Worker  %and = and i64 %p, 72057594037927935
44*9880d681SAndroid Build Coastguard Worker  %cast = inttoptr i64 %and to i64*
45*9880d681SAndroid Build Coastguard Worker  %load = load i64, i64* %cast
46*9880d681SAndroid Build Coastguard Worker  ret i64 %load
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker; BOTH-LABEL:st_and32:
50*9880d681SAndroid Build Coastguard Worker; TBI-NOT: and x
51*9880d681SAndroid Build Coastguard Worker; NO_TBI: and x
52*9880d681SAndroid Build Coastguard Workerdefine void @st_and32(i64 %p, i32 %v) {
53*9880d681SAndroid Build Coastguard Worker  %and = and i64 %p, 72057594037927935
54*9880d681SAndroid Build Coastguard Worker  %cast = inttoptr i64 %and to i32*
55*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %cast
56*9880d681SAndroid Build Coastguard Worker  ret void
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker; load (x1 + x2) & MASK
60*9880d681SAndroid Build Coastguard Worker; BOTH-LABEL:ld_ro:
61*9880d681SAndroid Build Coastguard Worker; TBI-NOT: and x
62*9880d681SAndroid Build Coastguard Worker; NO_TBI: and x
63*9880d681SAndroid Build Coastguard Workerdefine i32 @ld_ro(i64 %a, i64 %b) {
64*9880d681SAndroid Build Coastguard Worker  %p = add i64 %a, %b
65*9880d681SAndroid Build Coastguard Worker  %and = and i64 %p, 72057594037927935
66*9880d681SAndroid Build Coastguard Worker  %cast = inttoptr i64 %and to i32*
67*9880d681SAndroid Build Coastguard Worker  %load = load i32, i32* %cast
68*9880d681SAndroid Build Coastguard Worker  ret i32 %load
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker; load (r1 & MASK) + r2
72*9880d681SAndroid Build Coastguard Worker; BOTH-LABEL:ld_ro2:
73*9880d681SAndroid Build Coastguard Worker; TBI-NOT: and x
74*9880d681SAndroid Build Coastguard Worker; NO_TBI: and x
75*9880d681SAndroid Build Coastguard Workerdefine i32 @ld_ro2(i64 %a, i64 %b) {
76*9880d681SAndroid Build Coastguard Worker  %and = and i64 %a, 72057594037927935
77*9880d681SAndroid Build Coastguard Worker  %p = add i64 %and, %b
78*9880d681SAndroid Build Coastguard Worker  %cast = inttoptr i64 %p to i32*
79*9880d681SAndroid Build Coastguard Worker  %load = load i32, i32* %cast
80*9880d681SAndroid Build Coastguard Worker  ret i32 %load
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker; load (r1 & MASK) | r2
84*9880d681SAndroid Build Coastguard Worker; BOTH-LABEL:ld_indirect_and:
85*9880d681SAndroid Build Coastguard Worker; TBI-NOT: and x
86*9880d681SAndroid Build Coastguard Worker; NO_TBI: and x
87*9880d681SAndroid Build Coastguard Workerdefine i32 @ld_indirect_and(i64 %r1, i64 %r2) {
88*9880d681SAndroid Build Coastguard Worker  %and = and i64 %r1, 72057594037927935
89*9880d681SAndroid Build Coastguard Worker  %p = or i64 %and, %r2
90*9880d681SAndroid Build Coastguard Worker  %cast = inttoptr i64 %p to i32*
91*9880d681SAndroid Build Coastguard Worker  %load = load i32, i32* %cast
92*9880d681SAndroid Build Coastguard Worker  ret i32 %load
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Worker; BOTH-LABEL:ld_and32_narrower:
96*9880d681SAndroid Build Coastguard Worker; BOTH: and x
97*9880d681SAndroid Build Coastguard Workerdefine i32 @ld_and32_narrower(i64 %p) {
98*9880d681SAndroid Build Coastguard Worker  %and = and i64 %p, 36028797018963967
99*9880d681SAndroid Build Coastguard Worker  %cast = inttoptr i64 %and to i32*
100*9880d681SAndroid Build Coastguard Worker  %load = load i32, i32* %cast
101*9880d681SAndroid Build Coastguard Worker  ret i32 %load
102*9880d681SAndroid Build Coastguard Worker}
103