Skip to content

Commit 5251d57

Browse files
committed
[AArch64] Add tests for prevent (shl (srl x, c1), c2) -> (and (shift x, c3)) when load
1 parent b5b34db commit 5251d57

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2+
; RUN: llc < %s -mtriple=aarch64 | FileCheck %s
3+
;
4+
5+
define i32 @load_shr64(i64 %a, i64 %b, ptr %table) {
6+
; CHECK-LABEL: load_shr64:
7+
; CHECK: // %bb.0: // %entry
8+
; CHECK-NEXT: ldr w0, [x2]
9+
; CHECK-NEXT: ret
10+
entry:
11+
%mul = mul i64 %b, %a
12+
%shr = lshr i64 %mul, 64
13+
%arrayidx = getelementptr inbounds i32, ptr %table, i64 %shr
14+
%0 = load i32, ptr %arrayidx, align 4
15+
ret i32 %0
16+
}
17+
18+
define i32 @load_shr63(i64 %a, i64 %b, ptr %table) {
19+
; CHECK-LABEL: load_shr63:
20+
; CHECK: // %bb.0: // %entry
21+
; CHECK-NEXT: mul x8, x1, x0
22+
; CHECK-NEXT: lsr x8, x8, #61
23+
; CHECK-NEXT: and x8, x8, #0x4
24+
; CHECK-NEXT: ldr w0, [x2, x8]
25+
; CHECK-NEXT: ret
26+
entry:
27+
%mul = mul i64 %b, %a
28+
%shr = lshr i64 %mul, 63
29+
%arrayidx = getelementptr inbounds i32, ptr %table, i64 %shr
30+
%0 = load i32, ptr %arrayidx, align 4
31+
ret i32 %0
32+
}
33+
34+
define i32 @load_shr2(i64 %a, i64 %b, ptr %table) {
35+
; CHECK-LABEL: load_shr2:
36+
; CHECK: // %bb.0: // %entry
37+
; CHECK-NEXT: mul x8, x1, x0
38+
; CHECK-NEXT: and x8, x8, #0xfffffffffffffffc
39+
; CHECK-NEXT: ldr w0, [x2, x8]
40+
; CHECK-NEXT: ret
41+
entry:
42+
%mul = mul i64 %b, %a
43+
%shr = lshr i64 %mul, 2
44+
%arrayidx = getelementptr inbounds i32, ptr %table, i64 %shr
45+
%0 = load i32, ptr %arrayidx, align 4
46+
ret i32 %0
47+
}
48+
49+
define i32 @load_shr1(i64 %a, i64 %b, ptr %table) {
50+
; CHECK-LABEL: load_shr1:
51+
; CHECK: // %bb.0: // %entry
52+
; CHECK-NEXT: mul x8, x1, x0
53+
; CHECK-NEXT: lsl x8, x8, #1
54+
; CHECK-NEXT: and x8, x8, #0xfffffffffffffffc
55+
; CHECK-NEXT: ldr w0, [x2, x8]
56+
; CHECK-NEXT: ret
57+
entry:
58+
%mul = mul i64 %b, %a
59+
%shr = lshr i64 %mul, 1
60+
%arrayidx = getelementptr inbounds i32, ptr %table, i64 %shr
61+
%0 = load i32, ptr %arrayidx, align 4
62+
ret i32 %0
63+
}
64+
65+
define i32 @load_shl1(i64 %a, i64 %b, ptr %table) {
66+
; CHECK-LABEL: load_shl1:
67+
; CHECK: // %bb.0: // %entry
68+
; CHECK-NEXT: lsl x8, x0, #3
69+
; CHECK-NEXT: ldr w0, [x2, x8]
70+
; CHECK-NEXT: ret
71+
entry:
72+
%shl = shl i64 %a, 1
73+
%arrayidx = getelementptr inbounds i32, ptr %table, i64 %shl
74+
%0 = load i32, ptr %arrayidx, align 4
75+
ret i32 %0
76+
}

0 commit comments

Comments
 (0)