Skip to content

Commit 6325a17

Browse files
committed
[RISCV][test] Add tests for (mul (shr exact X, C1), C2) foldings
1 parent 5f55048 commit 6325a17

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

llvm/test/CodeGen/RISCV/rv64zba.ll

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5016,3 +5016,82 @@ define ptr @shl_add_knownbits(ptr %p, i64 %i) {
50165016
%r = getelementptr i8, ptr %p, i64 %shr
50175017
ret ptr %r
50185018
}
5019+
5020+
define i64 @exactashr1mul6(i64 %a) {
5021+
; RV64I-LABEL: exactashr1mul6:
5022+
; RV64I: # %bb.0:
5023+
; RV64I-NEXT: slli a1, a0, 1
5024+
; RV64I-NEXT: add a0, a1, a0
5025+
; RV64I-NEXT: ret
5026+
;
5027+
; RV64ZBA-LABEL: exactashr1mul6:
5028+
; RV64ZBA: # %bb.0:
5029+
; RV64ZBA-NEXT: srli a0, a0, 1
5030+
; RV64ZBA-NEXT: sh1add a0, a0, a0
5031+
; RV64ZBA-NEXT: slli a0, a0, 1
5032+
; RV64ZBA-NEXT: ret
5033+
;
5034+
; RV64XANDESPERF-LABEL: exactashr1mul6:
5035+
; RV64XANDESPERF: # %bb.0:
5036+
; RV64XANDESPERF-NEXT: srli a0, a0, 1
5037+
; RV64XANDESPERF-NEXT: nds.lea.h a0, a0, a0
5038+
; RV64XANDESPERF-NEXT: slli a0, a0, 1
5039+
; RV64XANDESPERF-NEXT: ret
5040+
%c = ashr exact i64 %a, 1
5041+
%d = mul i64 %c, 6
5042+
ret i64 %d
5043+
}
5044+
5045+
define i64 @exactlshr3mul22(i64 %a) {
5046+
; RV64I-LABEL: exactlshr3mul22:
5047+
; RV64I: # %bb.0:
5048+
; RV64I-NEXT: srli a0, a0, 3
5049+
; RV64I-NEXT: li a1, 22
5050+
; RV64I-NEXT: mul a0, a0, a1
5051+
; RV64I-NEXT: ret
5052+
;
5053+
; RV64ZBA-LABEL: exactlshr3mul22:
5054+
; RV64ZBA: # %bb.0:
5055+
; RV64ZBA-NEXT: srli a0, a0, 3
5056+
; RV64ZBA-NEXT: sh2add a1, a0, a0
5057+
; RV64ZBA-NEXT: sh1add a0, a1, a0
5058+
; RV64ZBA-NEXT: slli a0, a0, 1
5059+
; RV64ZBA-NEXT: ret
5060+
;
5061+
; RV64XANDESPERF-LABEL: exactlshr3mul22:
5062+
; RV64XANDESPERF: # %bb.0:
5063+
; RV64XANDESPERF-NEXT: srli a0, a0, 3
5064+
; RV64XANDESPERF-NEXT: nds.lea.w a1, a0, a0
5065+
; RV64XANDESPERF-NEXT: nds.lea.h a0, a0, a1
5066+
; RV64XANDESPERF-NEXT: slli a0, a0, 1
5067+
; RV64XANDESPERF-NEXT: ret
5068+
%c = lshr exact i64 %a, 3
5069+
%d = mul i64 %c, 22
5070+
ret i64 %d
5071+
}
5072+
5073+
define i64 @exactashr1mul36(i64 %a) {
5074+
; RV64I-LABEL: exactashr1mul36:
5075+
; RV64I: # %bb.0:
5076+
; RV64I-NEXT: slli a1, a0, 1
5077+
; RV64I-NEXT: slli a0, a0, 4
5078+
; RV64I-NEXT: add a0, a0, a1
5079+
; RV64I-NEXT: ret
5080+
;
5081+
; RV64ZBA-LABEL: exactashr1mul36:
5082+
; RV64ZBA: # %bb.0:
5083+
; RV64ZBA-NEXT: srli a0, a0, 1
5084+
; RV64ZBA-NEXT: sh3add a0, a0, a0
5085+
; RV64ZBA-NEXT: slli a0, a0, 2
5086+
; RV64ZBA-NEXT: ret
5087+
;
5088+
; RV64XANDESPERF-LABEL: exactashr1mul36:
5089+
; RV64XANDESPERF: # %bb.0:
5090+
; RV64XANDESPERF-NEXT: srli a0, a0, 1
5091+
; RV64XANDESPERF-NEXT: nds.lea.d a0, a0, a0
5092+
; RV64XANDESPERF-NEXT: slli a0, a0, 2
5093+
; RV64XANDESPERF-NEXT: ret
5094+
%c = ashr exact i64 %a, 1
5095+
%d = mul i64 %c, 36
5096+
ret i64 %d
5097+
}

0 commit comments

Comments
 (0)