xref: /llvm-project/llvm/test/CodeGen/RISCV/add_sext_shl_constant.ll (revision 51c9c823ca187895478e42883ba7a8d1f3150e87)
13083acc2SLiqinWeng; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2b359c84fSLuke Lau; RUN: llc -mtriple=riscv64 < %s | FileCheck -check-prefixes=RV64,NO-ZBA %s
3b359c84fSLuke Lau; RUN: llc -mtriple=riscv64 -mattr=+zba < %s | FileCheck -check-prefixes=RV64,ZBA %s
43083acc2SLiqinWeng
53083acc2SLiqinWengdefine void @add_sext_shl_moreOneUse_add(ptr %array1, i32 %a, i32 %b) {
6b359c84fSLuke Lau; NO-ZBA-LABEL: add_sext_shl_moreOneUse_add:
7b359c84fSLuke Lau; NO-ZBA:       # %bb.0: # %entry
8b359c84fSLuke Lau; NO-ZBA-NEXT:    addi a3, a1, 5
9b359c84fSLuke Lau; NO-ZBA-NEXT:    sext.w a1, a1
10b359c84fSLuke Lau; NO-ZBA-NEXT:    slli a1, a1, 2
11b359c84fSLuke Lau; NO-ZBA-NEXT:    add a0, a1, a0
12b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a2, 20(a0)
13b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a2, 24(a0)
14b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a3, 140(a0)
15b359c84fSLuke Lau; NO-ZBA-NEXT:    ret
16b359c84fSLuke Lau;
17b359c84fSLuke Lau; ZBA-LABEL: add_sext_shl_moreOneUse_add:
18b359c84fSLuke Lau; ZBA:       # %bb.0: # %entry
19b359c84fSLuke Lau; ZBA-NEXT:    addi a3, a1, 5
20b359c84fSLuke Lau; ZBA-NEXT:    sext.w a1, a1
21b359c84fSLuke Lau; ZBA-NEXT:    sh2add a0, a1, a0
22b359c84fSLuke Lau; ZBA-NEXT:    sw a2, 20(a0)
23b359c84fSLuke Lau; ZBA-NEXT:    sw a2, 24(a0)
24b359c84fSLuke Lau; ZBA-NEXT:    sw a3, 140(a0)
25b359c84fSLuke Lau; ZBA-NEXT:    ret
263083acc2SLiqinWengentry:
273083acc2SLiqinWeng  %add = add nsw i32 %a, 5
283083acc2SLiqinWeng  %idxprom = sext i32 %add to i64
293083acc2SLiqinWeng  %arrayidx = getelementptr inbounds i32, ptr %array1, i64 %idxprom
303083acc2SLiqinWeng  store i32 %b, ptr %arrayidx
313083acc2SLiqinWeng  %add3 = add nsw i32 %a, 6
323083acc2SLiqinWeng  %idxprom4 = sext i32 %add3 to i64
333083acc2SLiqinWeng  %arrayidx5 = getelementptr inbounds i32, ptr %array1, i64 %idxprom4
343083acc2SLiqinWeng  store i32 %b, ptr %arrayidx5
353083acc2SLiqinWeng  %add6 = add nsw i32 %a, 35
363083acc2SLiqinWeng  %idxprom7 = sext i32 %add6 to i64
373083acc2SLiqinWeng  %arrayidx8 = getelementptr inbounds i32, ptr %array1, i64 %idxprom7
383083acc2SLiqinWeng  store i32 %add, ptr %arrayidx8
393083acc2SLiqinWeng  ret void
403083acc2SLiqinWeng}
413083acc2SLiqinWeng
423083acc2SLiqinWengdefine void @add_sext_shl_moreOneUse_addexceedsign12(ptr %array1, i32 %a, i32 %b) {
43b359c84fSLuke Lau; NO-ZBA-LABEL: add_sext_shl_moreOneUse_addexceedsign12:
44b359c84fSLuke Lau; NO-ZBA:       # %bb.0: # %entry
45b359c84fSLuke Lau; NO-ZBA-NEXT:    addi a3, a1, 2047
46b359c84fSLuke Lau; NO-ZBA-NEXT:    lui a4, 2
47b359c84fSLuke Lau; NO-ZBA-NEXT:    sext.w a1, a1
48b359c84fSLuke Lau; NO-ZBA-NEXT:    addi a3, a3, 1
49b359c84fSLuke Lau; NO-ZBA-NEXT:    slli a1, a1, 2
50b359c84fSLuke Lau; NO-ZBA-NEXT:    add a0, a0, a4
51b359c84fSLuke Lau; NO-ZBA-NEXT:    add a0, a0, a1
52b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a2, 0(a0)
53b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a3, 4(a0)
54b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a2, 120(a0)
55b359c84fSLuke Lau; NO-ZBA-NEXT:    ret
56b359c84fSLuke Lau;
57b359c84fSLuke Lau; ZBA-LABEL: add_sext_shl_moreOneUse_addexceedsign12:
58b359c84fSLuke Lau; ZBA:       # %bb.0: # %entry
59b359c84fSLuke Lau; ZBA-NEXT:    addi a3, a1, 2047
60b359c84fSLuke Lau; ZBA-NEXT:    lui a4, 2
61b359c84fSLuke Lau; ZBA-NEXT:    sext.w a1, a1
62b359c84fSLuke Lau; ZBA-NEXT:    addi a3, a3, 1
63b359c84fSLuke Lau; ZBA-NEXT:    sh2add a0, a1, a0
64b359c84fSLuke Lau; ZBA-NEXT:    add a0, a0, a4
65b359c84fSLuke Lau; ZBA-NEXT:    sw a2, 0(a0)
66b359c84fSLuke Lau; ZBA-NEXT:    sw a3, 4(a0)
67b359c84fSLuke Lau; ZBA-NEXT:    sw a2, 120(a0)
68b359c84fSLuke Lau; ZBA-NEXT:    ret
693083acc2SLiqinWengentry:
703083acc2SLiqinWeng  %add = add nsw i32 %a, 2048
713083acc2SLiqinWeng  %idxprom = sext i32 %add to i64
723083acc2SLiqinWeng  %arrayidx = getelementptr inbounds i32, ptr %array1, i64 %idxprom
733083acc2SLiqinWeng  store i32 %b, ptr %arrayidx
743083acc2SLiqinWeng  %0 = sext i32 %a to i64
753083acc2SLiqinWeng  %1 = getelementptr i32, ptr %array1, i64 %0
763083acc2SLiqinWeng  %arrayidx3 = getelementptr i8, ptr %1, i64 8196
773083acc2SLiqinWeng  store i32 %add, ptr %arrayidx3
783083acc2SLiqinWeng  %arrayidx6 = getelementptr i8, ptr %1, i64 8312
793083acc2SLiqinWeng  store i32 %b, ptr %arrayidx6
803083acc2SLiqinWeng  ret void
813083acc2SLiqinWeng}
823083acc2SLiqinWeng
833083acc2SLiqinWengdefine void @add_sext_shl_moreOneUse_sext(ptr %array1, i32 %a, i32 %b) {
84b359c84fSLuke Lau; NO-ZBA-LABEL: add_sext_shl_moreOneUse_sext:
85b359c84fSLuke Lau; NO-ZBA:       # %bb.0: # %entry
86b359c84fSLuke Lau; NO-ZBA-NEXT:    sext.w a1, a1
87b359c84fSLuke Lau; NO-ZBA-NEXT:    addi a3, a1, 5
88b359c84fSLuke Lau; NO-ZBA-NEXT:    slli a1, a1, 2
89b359c84fSLuke Lau; NO-ZBA-NEXT:    add a0, a1, a0
90b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a2, 20(a0)
91b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a2, 24(a0)
92b359c84fSLuke Lau; NO-ZBA-NEXT:    sd a3, 140(a0)
93b359c84fSLuke Lau; NO-ZBA-NEXT:    ret
94b359c84fSLuke Lau;
95b359c84fSLuke Lau; ZBA-LABEL: add_sext_shl_moreOneUse_sext:
96b359c84fSLuke Lau; ZBA:       # %bb.0: # %entry
97b359c84fSLuke Lau; ZBA-NEXT:    sext.w a1, a1
98b359c84fSLuke Lau; ZBA-NEXT:    addi a3, a1, 5
99b359c84fSLuke Lau; ZBA-NEXT:    sh2add a0, a1, a0
100b359c84fSLuke Lau; ZBA-NEXT:    sw a2, 20(a0)
101b359c84fSLuke Lau; ZBA-NEXT:    sw a2, 24(a0)
102b359c84fSLuke Lau; ZBA-NEXT:    sd a3, 140(a0)
103b359c84fSLuke Lau; ZBA-NEXT:    ret
1043083acc2SLiqinWengentry:
1053083acc2SLiqinWeng  %add = add nsw i32 %a, 5
1063083acc2SLiqinWeng  %idxprom = sext i32 %add to i64
1073083acc2SLiqinWeng  %arrayidx = getelementptr inbounds i32, ptr %array1, i64 %idxprom
1083083acc2SLiqinWeng  store i32 %b, ptr %arrayidx
1093083acc2SLiqinWeng  %add3 = add nsw i32 %a, 6
1103083acc2SLiqinWeng  %idxprom4 = sext i32 %add3 to i64
1113083acc2SLiqinWeng  %arrayidx5 = getelementptr inbounds i32, ptr %array1, i64 %idxprom4
1123083acc2SLiqinWeng  store i32 %b, ptr %arrayidx5
1133083acc2SLiqinWeng  %add6 = add nsw i32 %a, 35
1143083acc2SLiqinWeng  %idxprom7 = sext i32 %add6 to i64
1153083acc2SLiqinWeng  %arrayidx8 = getelementptr inbounds i32, ptr %array1, i64 %idxprom7
1163083acc2SLiqinWeng  store i64 %idxprom, ptr %arrayidx8
1173083acc2SLiqinWeng  ret void
1183083acc2SLiqinWeng}
1193083acc2SLiqinWeng
1203083acc2SLiqinWeng; test of jumpping, find add's operand has one more use can simplified
1213083acc2SLiqinWengdefine void @add_sext_shl_moreOneUse_add_inSelect(ptr %array1, i32 signext  %a, i32 %b, i32 signext %x) {
122b359c84fSLuke Lau; NO-ZBA-LABEL: add_sext_shl_moreOneUse_add_inSelect:
123b359c84fSLuke Lau; NO-ZBA:       # %bb.0: # %entry
124b359c84fSLuke Lau; NO-ZBA-NEXT:    addi a4, a1, 5
125b359c84fSLuke Lau; NO-ZBA-NEXT:    mv a5, a4
126b359c84fSLuke Lau; NO-ZBA-NEXT:    bgtz a3, .LBB3_2
127b359c84fSLuke Lau; NO-ZBA-NEXT:  # %bb.1: # %entry
128b359c84fSLuke Lau; NO-ZBA-NEXT:    mv a5, a2
129b359c84fSLuke Lau; NO-ZBA-NEXT:  .LBB3_2: # %entry
130b359c84fSLuke Lau; NO-ZBA-NEXT:    slli a1, a1, 2
131b359c84fSLuke Lau; NO-ZBA-NEXT:    add a0, a1, a0
132b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a5, 20(a0)
133b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a5, 24(a0)
134b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a4, 140(a0)
135b359c84fSLuke Lau; NO-ZBA-NEXT:    ret
136b359c84fSLuke Lau;
137b359c84fSLuke Lau; ZBA-LABEL: add_sext_shl_moreOneUse_add_inSelect:
138b359c84fSLuke Lau; ZBA:       # %bb.0: # %entry
139b359c84fSLuke Lau; ZBA-NEXT:    addi a4, a1, 5
140b359c84fSLuke Lau; ZBA-NEXT:    mv a5, a4
141b359c84fSLuke Lau; ZBA-NEXT:    bgtz a3, .LBB3_2
142b359c84fSLuke Lau; ZBA-NEXT:  # %bb.1: # %entry
143b359c84fSLuke Lau; ZBA-NEXT:    mv a5, a2
144b359c84fSLuke Lau; ZBA-NEXT:  .LBB3_2: # %entry
145b359c84fSLuke Lau; ZBA-NEXT:    sh2add a0, a1, a0
146b359c84fSLuke Lau; ZBA-NEXT:    sw a5, 20(a0)
147b359c84fSLuke Lau; ZBA-NEXT:    sw a5, 24(a0)
148b359c84fSLuke Lau; ZBA-NEXT:    sw a4, 140(a0)
149b359c84fSLuke Lau; ZBA-NEXT:    ret
1503083acc2SLiqinWengentry:
1513083acc2SLiqinWeng  %add = add nsw i32 %a, 5
1523083acc2SLiqinWeng  %cmp = icmp sgt i32 %x, 0
1533083acc2SLiqinWeng  %idxprom = sext i32 %add to i64
1543083acc2SLiqinWeng  %arrayidx = getelementptr inbounds i32, ptr %array1, i64 %idxprom
1553083acc2SLiqinWeng  %add.b = select i1 %cmp, i32 %add, i32 %b
1563083acc2SLiqinWeng  store i32 %add.b, ptr %arrayidx
1573083acc2SLiqinWeng  %add5 = add nsw i32 %a, 6
1583083acc2SLiqinWeng  %idxprom6 = sext i32 %add5 to i64
1593083acc2SLiqinWeng  %arrayidx7 = getelementptr inbounds i32, ptr %array1, i64 %idxprom6
1603083acc2SLiqinWeng  store i32 %add.b, ptr %arrayidx7
1613083acc2SLiqinWeng  %add8 = add nsw i32 %a, 35
1623083acc2SLiqinWeng  %idxprom9 = sext i32 %add8 to i64
1633083acc2SLiqinWeng  %arrayidx10 = getelementptr inbounds i32, ptr %array1, i64 %idxprom9
1643083acc2SLiqinWeng  store i32 %add, ptr %arrayidx10
1653083acc2SLiqinWeng  ret void
1663083acc2SLiqinWeng}
1673083acc2SLiqinWeng
1683083acc2SLiqinWengdefine void @add_sext_shl_moreOneUse_add_inSelect_addexceedsign12(ptr %array1, i32 signext  %a, i32 %b, i32 signext %x) {
169b359c84fSLuke Lau; NO-ZBA-LABEL: add_sext_shl_moreOneUse_add_inSelect_addexceedsign12:
170b359c84fSLuke Lau; NO-ZBA:       # %bb.0: # %entry
171b359c84fSLuke Lau; NO-ZBA-NEXT:    addi a4, a1, 2047
172b359c84fSLuke Lau; NO-ZBA-NEXT:    lui a5, 2
173b359c84fSLuke Lau; NO-ZBA-NEXT:    slli a6, a1, 2
174b359c84fSLuke Lau; NO-ZBA-NEXT:    addi a1, a4, 1
175b359c84fSLuke Lau; NO-ZBA-NEXT:    add a0, a0, a6
176b359c84fSLuke Lau; NO-ZBA-NEXT:    add a0, a0, a5
177b359c84fSLuke Lau; NO-ZBA-NEXT:    mv a4, a1
178b359c84fSLuke Lau; NO-ZBA-NEXT:    bgtz a3, .LBB4_2
179b359c84fSLuke Lau; NO-ZBA-NEXT:  # %bb.1: # %entry
180b359c84fSLuke Lau; NO-ZBA-NEXT:    mv a4, a2
181b359c84fSLuke Lau; NO-ZBA-NEXT:  .LBB4_2: # %entry
182b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a4, 0(a0)
183b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a4, 4(a0)
184b359c84fSLuke Lau; NO-ZBA-NEXT:    sw a1, 120(a0)
185b359c84fSLuke Lau; NO-ZBA-NEXT:    ret
186b359c84fSLuke Lau;
187b359c84fSLuke Lau; ZBA-LABEL: add_sext_shl_moreOneUse_add_inSelect_addexceedsign12:
188b359c84fSLuke Lau; ZBA:       # %bb.0: # %entry
189b359c84fSLuke Lau; ZBA-NEXT:    addi a4, a1, 2047
190b359c84fSLuke Lau; ZBA-NEXT:    lui a5, 2
191b359c84fSLuke Lau; ZBA-NEXT:    addi a4, a4, 1
192b359c84fSLuke Lau; ZBA-NEXT:    sh2add a0, a1, a0
193b359c84fSLuke Lau; ZBA-NEXT:    add a0, a0, a5
194b359c84fSLuke Lau; ZBA-NEXT:    mv a1, a4
195b359c84fSLuke Lau; ZBA-NEXT:    bgtz a3, .LBB4_2
196b359c84fSLuke Lau; ZBA-NEXT:  # %bb.1: # %entry
197b359c84fSLuke Lau; ZBA-NEXT:    mv a1, a2
198b359c84fSLuke Lau; ZBA-NEXT:  .LBB4_2: # %entry
199b359c84fSLuke Lau; ZBA-NEXT:    sw a1, 0(a0)
200b359c84fSLuke Lau; ZBA-NEXT:    sw a1, 4(a0)
201b359c84fSLuke Lau; ZBA-NEXT:    sw a4, 120(a0)
202b359c84fSLuke Lau; ZBA-NEXT:    ret
2033083acc2SLiqinWengentry:
2043083acc2SLiqinWeng  %add = add nsw i32 %a, 2048
2053083acc2SLiqinWeng  %cmp = icmp sgt i32 %x, 0
2063083acc2SLiqinWeng  %idxprom = sext i32 %add to i64
2073083acc2SLiqinWeng  %arrayidx = getelementptr inbounds i32, ptr %array1, i64 %idxprom
2083083acc2SLiqinWeng  %add.b = select i1 %cmp, i32 %add, i32 %b
2093083acc2SLiqinWeng  store i32 %add.b, ptr %arrayidx
2103083acc2SLiqinWeng  %0 = sext i32 %a to i64
2113083acc2SLiqinWeng  %1 = getelementptr i32, ptr %array1, i64 %0
2123083acc2SLiqinWeng  %arrayidx7 = getelementptr i8, ptr %1, i64 8196
2133083acc2SLiqinWeng  store i32 %add.b, ptr %arrayidx7
2143083acc2SLiqinWeng  %arrayidx10 = getelementptr i8, ptr %1, i64 8312
2153083acc2SLiqinWeng  store i32 %add, ptr %arrayidx10
2163083acc2SLiqinWeng  ret void
2173083acc2SLiqinWeng}
2183083acc2SLiqinWeng
2193083acc2SLiqinWengdefine void @add_shl_moreOneUse_inSelect(ptr %array1, i64 %a, i64 %b, i64 %x) {
220b359c84fSLuke Lau; NO-ZBA-LABEL: add_shl_moreOneUse_inSelect:
221b359c84fSLuke Lau; NO-ZBA:       # %bb.0: # %entry
222b359c84fSLuke Lau; NO-ZBA-NEXT:    addi a4, a1, 5
223b359c84fSLuke Lau; NO-ZBA-NEXT:    mv a5, a4
224b359c84fSLuke Lau; NO-ZBA-NEXT:    bgtz a3, .LBB5_2
225b359c84fSLuke Lau; NO-ZBA-NEXT:  # %bb.1: # %entry
226b359c84fSLuke Lau; NO-ZBA-NEXT:    mv a5, a2
227b359c84fSLuke Lau; NO-ZBA-NEXT:  .LBB5_2: # %entry
228b359c84fSLuke Lau; NO-ZBA-NEXT:    slli a1, a1, 3
229b359c84fSLuke Lau; NO-ZBA-NEXT:    add a0, a1, a0
230b359c84fSLuke Lau; NO-ZBA-NEXT:    sd a5, 40(a0)
231b359c84fSLuke Lau; NO-ZBA-NEXT:    sd a5, 48(a0)
232b359c84fSLuke Lau; NO-ZBA-NEXT:    sd a4, 280(a0)
233b359c84fSLuke Lau; NO-ZBA-NEXT:    ret
234b359c84fSLuke Lau;
235b359c84fSLuke Lau; ZBA-LABEL: add_shl_moreOneUse_inSelect:
236b359c84fSLuke Lau; ZBA:       # %bb.0: # %entry
237b359c84fSLuke Lau; ZBA-NEXT:    addi a4, a1, 5
238b359c84fSLuke Lau; ZBA-NEXT:    mv a5, a4
239b359c84fSLuke Lau; ZBA-NEXT:    bgtz a3, .LBB5_2
240b359c84fSLuke Lau; ZBA-NEXT:  # %bb.1: # %entry
241b359c84fSLuke Lau; ZBA-NEXT:    mv a5, a2
242b359c84fSLuke Lau; ZBA-NEXT:  .LBB5_2: # %entry
243b359c84fSLuke Lau; ZBA-NEXT:    sh3add a0, a1, a0
244b359c84fSLuke Lau; ZBA-NEXT:    sd a5, 40(a0)
245b359c84fSLuke Lau; ZBA-NEXT:    sd a5, 48(a0)
246b359c84fSLuke Lau; ZBA-NEXT:    sd a4, 280(a0)
247b359c84fSLuke Lau; ZBA-NEXT:    ret
2483083acc2SLiqinWengentry:
2493083acc2SLiqinWeng  %add = add nsw i64 %a, 5
2503083acc2SLiqinWeng  %cmp = icmp sgt i64 %x, 0
2513083acc2SLiqinWeng  %spec.select = select i1 %cmp, i64 %add, i64 %b
2523083acc2SLiqinWeng  %0 = getelementptr inbounds i64, ptr %array1, i64 %add
2533083acc2SLiqinWeng  store i64 %spec.select, ptr %0
2543083acc2SLiqinWeng  %add3 = add nsw i64 %a, 6
2553083acc2SLiqinWeng  %arrayidx4 = getelementptr inbounds i64, ptr %array1, i64 %add3
2563083acc2SLiqinWeng  store i64 %spec.select, ptr %arrayidx4
2573083acc2SLiqinWeng  %add5 = add nsw i64 %a, 35
2583083acc2SLiqinWeng  %arrayidx6 = getelementptr inbounds i64, ptr %array1, i64 %add5
2593083acc2SLiqinWeng  store i64 %add, ptr %arrayidx6
2603083acc2SLiqinWeng  ret void
2613083acc2SLiqinWeng}
262b359c84fSLuke Lau
263b359c84fSLuke Laudefine i64 @add_shl_moreOneUse_sh1add(i64 %x) {
264b359c84fSLuke Lau; NO-ZBA-LABEL: add_shl_moreOneUse_sh1add:
265b359c84fSLuke Lau; NO-ZBA:       # %bb.0:
266b359c84fSLuke Lau; NO-ZBA-NEXT:    ori a1, a0, 1
267b359c84fSLuke Lau; NO-ZBA-NEXT:    slli a0, a0, 1
268b359c84fSLuke Lau; NO-ZBA-NEXT:    ori a0, a0, 2
269b359c84fSLuke Lau; NO-ZBA-NEXT:    add a0, a0, a1
270b359c84fSLuke Lau; NO-ZBA-NEXT:    ret
271b359c84fSLuke Lau;
272b359c84fSLuke Lau; ZBA-LABEL: add_shl_moreOneUse_sh1add:
273b359c84fSLuke Lau; ZBA:       # %bb.0:
274b359c84fSLuke Lau; ZBA-NEXT:    ori a0, a0, 1
275b359c84fSLuke Lau; ZBA-NEXT:    sh1add a0, a0, a0
276b359c84fSLuke Lau; ZBA-NEXT:    ret
277b359c84fSLuke Lau  %or = or i64 %x, 1
278b359c84fSLuke Lau  %mul = shl i64 %or, 1
279b359c84fSLuke Lau  %add = add i64 %mul, %or
280b359c84fSLuke Lau  ret i64 %add
281b359c84fSLuke Lau}
282b359c84fSLuke Lau
283b359c84fSLuke Laudefine i64 @add_shl_moreOneUse_sh2add(i64 %x) {
284b359c84fSLuke Lau; NO-ZBA-LABEL: add_shl_moreOneUse_sh2add:
285b359c84fSLuke Lau; NO-ZBA:       # %bb.0:
286b359c84fSLuke Lau; NO-ZBA-NEXT:    ori a1, a0, 1
287b359c84fSLuke Lau; NO-ZBA-NEXT:    slli a0, a0, 2
288b359c84fSLuke Lau; NO-ZBA-NEXT:    ori a0, a0, 4
289b359c84fSLuke Lau; NO-ZBA-NEXT:    add a0, a0, a1
290b359c84fSLuke Lau; NO-ZBA-NEXT:    ret
291b359c84fSLuke Lau;
292b359c84fSLuke Lau; ZBA-LABEL: add_shl_moreOneUse_sh2add:
293b359c84fSLuke Lau; ZBA:       # %bb.0:
294b359c84fSLuke Lau; ZBA-NEXT:    ori a0, a0, 1
295b359c84fSLuke Lau; ZBA-NEXT:    sh2add a0, a0, a0
296b359c84fSLuke Lau; ZBA-NEXT:    ret
297b359c84fSLuke Lau  %or = or i64 %x, 1
298b359c84fSLuke Lau  %mul = shl i64 %or, 2
299b359c84fSLuke Lau  %add = add i64 %mul, %or
300b359c84fSLuke Lau  ret i64 %add
301b359c84fSLuke Lau}
302b359c84fSLuke Lau
303b359c84fSLuke Laudefine i64 @add_shl_moreOneUse_sh3add(i64 %x) {
304b359c84fSLuke Lau; NO-ZBA-LABEL: add_shl_moreOneUse_sh3add:
305b359c84fSLuke Lau; NO-ZBA:       # %bb.0:
306b359c84fSLuke Lau; NO-ZBA-NEXT:    ori a1, a0, 1
307b359c84fSLuke Lau; NO-ZBA-NEXT:    slli a0, a0, 3
308b359c84fSLuke Lau; NO-ZBA-NEXT:    ori a0, a0, 8
309b359c84fSLuke Lau; NO-ZBA-NEXT:    add a0, a0, a1
310b359c84fSLuke Lau; NO-ZBA-NEXT:    ret
311b359c84fSLuke Lau;
312b359c84fSLuke Lau; ZBA-LABEL: add_shl_moreOneUse_sh3add:
313b359c84fSLuke Lau; ZBA:       # %bb.0:
314b359c84fSLuke Lau; ZBA-NEXT:    ori a0, a0, 1
315b359c84fSLuke Lau; ZBA-NEXT:    sh3add a0, a0, a0
316b359c84fSLuke Lau; ZBA-NEXT:    ret
317b359c84fSLuke Lau  %or = or i64 %x, 1
318b359c84fSLuke Lau  %mul = shl i64 %or, 3
319b359c84fSLuke Lau  %add = add i64 %mul, %or
320b359c84fSLuke Lau  ret i64 %add
321b359c84fSLuke Lau}
322b359c84fSLuke Lau
323*51c9c823SMikhail R. Gadelha;; Covers a case which previously crashed (pr119527)
324*51c9c823SMikhail R. Gadelhadefine i64 @add_shl_sext(i32 %1) {
325*51c9c823SMikhail R. Gadelha; RV64-LABEL: add_shl_sext:
326*51c9c823SMikhail R. Gadelha; RV64:       # %bb.0:
327*51c9c823SMikhail R. Gadelha; RV64-NEXT:    addi a1, a0, 3
328*51c9c823SMikhail R. Gadelha; RV64-NEXT:    sllw a0, a1, a0
329*51c9c823SMikhail R. Gadelha; RV64-NEXT:    ret
330*51c9c823SMikhail R. Gadelha  %3 = add i32 %1, 3
331*51c9c823SMikhail R. Gadelha  %4 = shl i32 %3, %1
332*51c9c823SMikhail R. Gadelha  %5 = sext i32 %4 to i64
333*51c9c823SMikhail R. Gadelha  ret i64 %5
334*51c9c823SMikhail R. Gadelha}
335*51c9c823SMikhail R. Gadelha
336b359c84fSLuke Laudefine i64 @add_shl_moreOneUse_sh4add(i64 %x) {
337b359c84fSLuke Lau; RV64-LABEL: add_shl_moreOneUse_sh4add:
338b359c84fSLuke Lau; RV64:       # %bb.0:
339b359c84fSLuke Lau; RV64-NEXT:    ori a1, a0, 1
340b359c84fSLuke Lau; RV64-NEXT:    slli a0, a0, 4
341b359c84fSLuke Lau; RV64-NEXT:    ori a0, a0, 16
342b359c84fSLuke Lau; RV64-NEXT:    add a0, a0, a1
343b359c84fSLuke Lau; RV64-NEXT:    ret
344b359c84fSLuke Lau  %or = or i64 %x, 1
345b359c84fSLuke Lau  %mul = shl i64 %or, 4
346b359c84fSLuke Lau  %add = add i64 %mul, %or
347b359c84fSLuke Lau  ret i64 %add
348b359c84fSLuke Lau}
349b359c84fSLuke Lau
350b359c84fSLuke Laudefine i64 @add_shl_rhs_constant(i64 %x, i64 %y) {
351b359c84fSLuke Lau; RV64-LABEL: add_shl_rhs_constant:
352b359c84fSLuke Lau; RV64:       # %bb.0:
353b359c84fSLuke Lau; RV64-NEXT:    add a0, a0, a1
354b359c84fSLuke Lau; RV64-NEXT:    slli a0, a0, 3
355b359c84fSLuke Lau; RV64-NEXT:    ret
356b359c84fSLuke Lau  %a = add i64 %x, 1
357b359c84fSLuke Lau  %b = add i64 %y, %a
358b359c84fSLuke Lau  %c = shl i64 %b, 3
359b359c84fSLuke Lau  %d = add i64 %c, -8
360b359c84fSLuke Lau  ret i64 %d
361b359c84fSLuke Lau}
362