Skip to content

Commit 949caf3

Browse files
committed
[RISCV] Zba testing improvements. NFC
Add lshr+gep tests for RV32. These patterns are already handled, but we only tested for RV64. Remove stale FIXMEs and adjust test case names in rv64zba..l
1 parent b05d37d commit 949caf3

File tree

2 files changed

+118
-11
lines changed

2 files changed

+118
-11
lines changed

llvm/test/CodeGen/RISCV/rv32zba.ll

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,115 @@ define i32 @addshl_5_8(i32 %a, i32 %b) {
650650
ret i32 %e
651651
}
652652

653+
define i32 @srli_1_sh2add(ptr %0, i32 %1) {
654+
; RV32I-LABEL: srli_1_sh2add:
655+
; RV32I: # %bb.0:
656+
; RV32I-NEXT: slli a1, a1, 1
657+
; RV32I-NEXT: andi a1, a1, -4
658+
; RV32I-NEXT: add a0, a0, a1
659+
; RV32I-NEXT: lw a0, 0(a0)
660+
; RV32I-NEXT: ret
661+
;
662+
; RV32ZBA-LABEL: srli_1_sh2add:
663+
; RV32ZBA: # %bb.0:
664+
; RV32ZBA-NEXT: srli a1, a1, 1
665+
; RV32ZBA-NEXT: sh2add a0, a1, a0
666+
; RV32ZBA-NEXT: lw a0, 0(a0)
667+
; RV32ZBA-NEXT: ret
668+
%3 = lshr i32 %1, 1
669+
%4 = getelementptr inbounds i32, ptr %0, i32 %3
670+
%5 = load i32, ptr %4, align 4
671+
ret i32 %5
672+
}
673+
674+
define i64 @srli_2_sh3add(ptr %0, i32 %1) {
675+
; RV32I-LABEL: srli_2_sh3add:
676+
; RV32I: # %bb.0:
677+
; RV32I-NEXT: slli a1, a1, 1
678+
; RV32I-NEXT: andi a1, a1, -8
679+
; RV32I-NEXT: add a1, a0, a1
680+
; RV32I-NEXT: lw a0, 0(a1)
681+
; RV32I-NEXT: lw a1, 4(a1)
682+
; RV32I-NEXT: ret
683+
;
684+
; RV32ZBA-LABEL: srli_2_sh3add:
685+
; RV32ZBA: # %bb.0:
686+
; RV32ZBA-NEXT: srli a1, a1, 2
687+
; RV32ZBA-NEXT: sh3add a1, a1, a0
688+
; RV32ZBA-NEXT: lw a0, 0(a1)
689+
; RV32ZBA-NEXT: lw a1, 4(a1)
690+
; RV32ZBA-NEXT: ret
691+
%3 = lshr i32 %1, 2
692+
%4 = getelementptr inbounds i64, ptr %0, i32 %3
693+
%5 = load i64, ptr %4, align 8
694+
ret i64 %5
695+
}
696+
697+
define signext i16 @srli_2_sh1add(ptr %0, i32 %1) {
698+
; RV32I-LABEL: srli_2_sh1add:
699+
; RV32I: # %bb.0:
700+
; RV32I-NEXT: srli a1, a1, 1
701+
; RV32I-NEXT: andi a1, a1, -2
702+
; RV32I-NEXT: add a0, a0, a1
703+
; RV32I-NEXT: lh a0, 0(a0)
704+
; RV32I-NEXT: ret
705+
;
706+
; RV32ZBA-LABEL: srli_2_sh1add:
707+
; RV32ZBA: # %bb.0:
708+
; RV32ZBA-NEXT: srli a1, a1, 2
709+
; RV32ZBA-NEXT: sh1add a0, a1, a0
710+
; RV32ZBA-NEXT: lh a0, 0(a0)
711+
; RV32ZBA-NEXT: ret
712+
%3 = lshr i32 %1, 2
713+
%4 = getelementptr inbounds i16, ptr %0, i32 %3
714+
%5 = load i16, ptr %4, align 2
715+
ret i16 %5
716+
}
717+
718+
define i32 @srli_3_sh2add(ptr %0, i32 %1) {
719+
; RV32I-LABEL: srli_3_sh2add:
720+
; RV32I: # %bb.0:
721+
; RV32I-NEXT: srli a1, a1, 1
722+
; RV32I-NEXT: andi a1, a1, -4
723+
; RV32I-NEXT: add a0, a0, a1
724+
; RV32I-NEXT: lw a0, 0(a0)
725+
; RV32I-NEXT: ret
726+
;
727+
; RV32ZBA-LABEL: srli_3_sh2add:
728+
; RV32ZBA: # %bb.0:
729+
; RV32ZBA-NEXT: srli a1, a1, 3
730+
; RV32ZBA-NEXT: sh2add a0, a1, a0
731+
; RV32ZBA-NEXT: lw a0, 0(a0)
732+
; RV32ZBA-NEXT: ret
733+
%3 = lshr i32 %1, 3
734+
%4 = getelementptr inbounds i32, ptr %0, i32 %3
735+
%5 = load i32, ptr %4, align 4
736+
ret i32 %5
737+
}
738+
739+
define i64 @srli_4_sh3add(ptr %0, i32 %1) {
740+
; RV32I-LABEL: srli_4_sh3add:
741+
; RV32I: # %bb.0:
742+
; RV32I-NEXT: srli a1, a1, 1
743+
; RV32I-NEXT: andi a1, a1, -8
744+
; RV32I-NEXT: add a1, a0, a1
745+
; RV32I-NEXT: lw a0, 0(a1)
746+
; RV32I-NEXT: lw a1, 4(a1)
747+
; RV32I-NEXT: ret
748+
;
749+
; RV32ZBA-LABEL: srli_4_sh3add:
750+
; RV32ZBA: # %bb.0:
751+
; RV32ZBA-NEXT: srli a1, a1, 4
752+
; RV32ZBA-NEXT: sh3add a1, a1, a0
753+
; RV32ZBA-NEXT: lw a0, 0(a1)
754+
; RV32ZBA-NEXT: lw a1, 4(a1)
755+
; RV32ZBA-NEXT: ret
756+
%3 = lshr i32 %1, 4
757+
%4 = getelementptr inbounds i64, ptr %0, i32 %3
758+
%5 = load i64, ptr %4, align 8
759+
ret i64 %5
760+
}
761+
653762
define i32 @mul_neg1(i32 %a) {
654763
; CHECK-LABEL: mul_neg1:
655764
; CHECK: # %bb.0:

llvm/test/CodeGen/RISCV/rv64zba.ll

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1713,7 +1713,6 @@ define i64 @addshl64_5_8(i64 %a, i64 %b) {
17131713
}
17141714

17151715
; Make sure we use sext.h+slli+srli for Zba+Zbb.
1716-
; FIXME: The RV64I and Zba only cases can be done with only 3 shifts.
17171716
define zeroext i32 @sext_ashr_zext_i8(i8 %a) nounwind {
17181717
; RV64I-LABEL: sext_ashr_zext_i8:
17191718
; RV64I: # %bb.0:
@@ -1830,7 +1829,6 @@ entry:
18301829
}
18311830

18321831
; Make sure we use sext.h+slli+srli for Zba+Zbb.
1833-
; FIXME: The RV64I and Zba only cases can be done with only 3 shifts.
18341832
define zeroext i32 @sext_ashr_zext_i16(i16 %a) nounwind {
18351833
; RV64I-LABEL: sext_ashr_zext_i16:
18361834
; RV64I: # %bb.0:
@@ -2262,16 +2260,16 @@ define i64 @srli_4_sh3add(ptr %0, i64 %1) {
22622260
ret i64 %5
22632261
}
22642262

2265-
define signext i16 @shl_2_sh1add(ptr %0, i32 signext %1) {
2266-
; RV64I-LABEL: shl_2_sh1add:
2263+
define signext i16 @shl_2_sh1adduw(ptr %0, i32 signext %1) {
2264+
; RV64I-LABEL: shl_2_sh1adduw:
22672265
; RV64I: # %bb.0:
22682266
; RV64I-NEXT: slli a1, a1, 34
22692267
; RV64I-NEXT: srli a1, a1, 31
22702268
; RV64I-NEXT: add a0, a0, a1
22712269
; RV64I-NEXT: lh a0, 0(a0)
22722270
; RV64I-NEXT: ret
22732271
;
2274-
; RV64ZBA-LABEL: shl_2_sh1add:
2272+
; RV64ZBA-LABEL: shl_2_sh1adduw:
22752273
; RV64ZBA: # %bb.0:
22762274
; RV64ZBA-NEXT: slli a1, a1, 2
22772275
; RV64ZBA-NEXT: sh1add.uw a0, a1, a0
@@ -2284,16 +2282,16 @@ define signext i16 @shl_2_sh1add(ptr %0, i32 signext %1) {
22842282
ret i16 %6
22852283
}
22862284

2287-
define signext i32 @shl_16_sh2add(ptr %0, i32 signext %1) {
2288-
; RV64I-LABEL: shl_16_sh2add:
2285+
define signext i32 @shl_16_sh2adduw(ptr %0, i32 signext %1) {
2286+
; RV64I-LABEL: shl_16_sh2adduw:
22892287
; RV64I: # %bb.0:
22902288
; RV64I-NEXT: slli a1, a1, 48
22912289
; RV64I-NEXT: srli a1, a1, 30
22922290
; RV64I-NEXT: add a0, a0, a1
22932291
; RV64I-NEXT: lw a0, 0(a0)
22942292
; RV64I-NEXT: ret
22952293
;
2296-
; RV64ZBA-LABEL: shl_16_sh2add:
2294+
; RV64ZBA-LABEL: shl_16_sh2adduw:
22972295
; RV64ZBA: # %bb.0:
22982296
; RV64ZBA-NEXT: slli a1, a1, 16
22992297
; RV64ZBA-NEXT: sh2add.uw a0, a1, a0
@@ -2306,16 +2304,16 @@ define signext i32 @shl_16_sh2add(ptr %0, i32 signext %1) {
23062304
ret i32 %6
23072305
}
23082306

2309-
define i64 @shl_31_sh3add(ptr %0, i32 signext %1) {
2310-
; RV64I-LABEL: shl_31_sh3add:
2307+
define i64 @shl_31_sh3adduw(ptr %0, i32 signext %1) {
2308+
; RV64I-LABEL: shl_31_sh3adduw:
23112309
; RV64I: # %bb.0:
23122310
; RV64I-NEXT: slli a1, a1, 63
23132311
; RV64I-NEXT: srli a1, a1, 29
23142312
; RV64I-NEXT: add a0, a0, a1
23152313
; RV64I-NEXT: ld a0, 0(a0)
23162314
; RV64I-NEXT: ret
23172315
;
2318-
; RV64ZBA-LABEL: shl_31_sh3add:
2316+
; RV64ZBA-LABEL: shl_31_sh3adduw:
23192317
; RV64ZBA: # %bb.0:
23202318
; RV64ZBA-NEXT: slli a1, a1, 31
23212319
; RV64ZBA-NEXT: sh3add.uw a0, a1, a0

0 commit comments

Comments
 (0)