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
5 define i16 @load16_shr63(i64 %a, i64 %b, ptr %table) {
6 ; CHECK-LABEL: load16_shr63:
7 ; CHECK: // %bb.0: // %entry
8 ; CHECK-NEXT: mul x8, x1, x0
9 ; CHECK-NEXT: lsr x8, x8, #63
10 ; CHECK-NEXT: ldrh w0, [x2, x8, lsl #1]
14 %shr = lshr i64 %mul, 63
15 %arrayidx = getelementptr inbounds i16, ptr %table, i64 %shr
16 %0 = load i16, ptr %arrayidx, align 2
20 define i16 @load16_shr2(i64 %a, i64 %b, ptr %table) {
21 ; CHECK-LABEL: load16_shr2:
22 ; CHECK: // %bb.0: // %entry
23 ; CHECK-NEXT: mul x8, x1, x0
24 ; CHECK-NEXT: lsr x8, x8, #2
25 ; CHECK-NEXT: ldrh w0, [x2, x8, lsl #1]
29 %shr = lshr i64 %mul, 2
30 %arrayidx = getelementptr inbounds i16, ptr %table, i64 %shr
31 %0 = load i16, ptr %arrayidx, align 2
35 define i16 @load16_shr1(i64 %a, i64 %b, ptr %table) {
36 ; CHECK-LABEL: load16_shr1:
37 ; CHECK: // %bb.0: // %entry
38 ; CHECK-NEXT: mul x8, x1, x0
39 ; CHECK-NEXT: lsr x8, x8, #1
40 ; CHECK-NEXT: ldrh w0, [x2, x8, lsl #1]
44 %shr = lshr i64 %mul, 1
45 %arrayidx = getelementptr inbounds i16, ptr %table, i64 %shr
46 %0 = load i16, ptr %arrayidx, align 2
50 define i32 @load32_shr63(i64 %a, i64 %b, ptr %table) {
51 ; CHECK-LABEL: load32_shr63:
52 ; CHECK: // %bb.0: // %entry
53 ; CHECK-NEXT: mul x8, x1, x0
54 ; CHECK-NEXT: lsr x8, x8, #63
55 ; CHECK-NEXT: ldr w0, [x2, x8, lsl #2]
59 %shr = lshr i64 %mul, 63
60 %arrayidx = getelementptr inbounds i32, ptr %table, i64 %shr
61 %0 = load i32, ptr %arrayidx, align 4
65 define i32 @load32_shr2(i64 %a, i64 %b, ptr %table) {
66 ; CHECK-LABEL: load32_shr2:
67 ; CHECK: // %bb.0: // %entry
68 ; CHECK-NEXT: mul x8, x1, x0
69 ; CHECK-NEXT: lsr x8, x8, #2
70 ; CHECK-NEXT: ldr w0, [x2, x8, lsl #2]
74 %shr = lshr i64 %mul, 2
75 %arrayidx = getelementptr inbounds i32, ptr %table, i64 %shr
76 %0 = load i32, ptr %arrayidx, align 4
80 define i32 @load32_shr1(i64 %a, i64 %b, ptr %table) {
81 ; CHECK-LABEL: load32_shr1:
82 ; CHECK: // %bb.0: // %entry
83 ; CHECK-NEXT: mul x8, x1, x0
84 ; CHECK-NEXT: lsr x8, x8, #1
85 ; CHECK-NEXT: ldr w0, [x2, x8, lsl #2]
89 %shr = lshr i64 %mul, 1
90 %arrayidx = getelementptr inbounds i32, ptr %table, i64 %shr
91 %0 = load i32, ptr %arrayidx, align 4
95 define i64 @load64_shr63(i64 %a, i64 %b, ptr %table) {
96 ; CHECK-LABEL: load64_shr63:
97 ; CHECK: // %bb.0: // %entry
98 ; CHECK-NEXT: mul x8, x1, x0
99 ; CHECK-NEXT: lsr x8, x8, #63
100 ; CHECK-NEXT: ldr x0, [x2, x8, lsl #3]
103 %mul = mul i64 %b, %a
104 %shr = lshr i64 %mul, 63
105 %arrayidx = getelementptr inbounds i64, ptr %table, i64 %shr
106 %0 = load i64, ptr %arrayidx, align 8
110 define i64 @load64_shr2(i64 %a, i64 %b, ptr %table) {
111 ; CHECK-LABEL: load64_shr2:
112 ; CHECK: // %bb.0: // %entry
113 ; CHECK-NEXT: mul x8, x1, x0
114 ; CHECK-NEXT: lsr x8, x8, #2
115 ; CHECK-NEXT: ldr x0, [x2, x8, lsl #3]
118 %mul = mul i64 %b, %a
119 %shr = lshr i64 %mul, 2
120 %arrayidx = getelementptr inbounds i64, ptr %table, i64 %shr
121 %0 = load i64, ptr %arrayidx, align 8
125 define i64 @load64_shr1(i64 %a, i64 %b, ptr %table) {
126 ; CHECK-LABEL: load64_shr1:
127 ; CHECK: // %bb.0: // %entry
128 ; CHECK-NEXT: mul x8, x1, x0
129 ; CHECK-NEXT: lsr x8, x8, #1
130 ; CHECK-NEXT: ldr x0, [x2, x8, lsl #3]
133 %mul = mul i64 %b, %a
134 %shr = lshr i64 %mul, 1
135 %arrayidx = getelementptr inbounds i64, ptr %table, i64 %shr
136 %0 = load i64, ptr %arrayidx, align 8