Skip to content

Commit 011a776

Browse files
committed
[RISCV][test] Add tests for SRLIW+SHXADD combines
1 parent 6206d7d commit 011a776

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

llvm/test/CodeGen/RISCV/rv64zba.ll

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4274,3 +4274,92 @@ entry:
42744274
%and = and i64 %add, 4294967295
42754275
ret i64 %and
42764276
}
4277+
4278+
define ptr @shl_and_gep(ptr %p, i64 %i) {
4279+
; CHECK-LABEL: shl_and_gep:
4280+
; CHECK: # %bb.0:
4281+
; CHECK-NEXT: srliw a1, a1, 2
4282+
; CHECK-NEXT: slli a1, a1, 3
4283+
; CHECK-NEXT: add a0, a0, a1
4284+
; CHECK-NEXT: ret
4285+
%shl = shl i64 %i, 1
4286+
%and = and i64 %shl, 8589934584
4287+
%gep = getelementptr i8, ptr %p, i64 %and
4288+
ret ptr %gep
4289+
}
4290+
4291+
define ptr @shr_and_gep(ptr %p, i64 %i) {
4292+
; CHECK-LABEL: shr_and_gep:
4293+
; CHECK: # %bb.0:
4294+
; CHECK-NEXT: srliw a1, a1, 6
4295+
; CHECK-NEXT: slli a1, a1, 1
4296+
; CHECK-NEXT: add a0, a0, a1
4297+
; CHECK-NEXT: ret
4298+
%lshr = lshr i64 %i, 6
4299+
%and = and i64 %lshr, 67108863
4300+
%gep = getelementptr i16, ptr %p, i64 %and
4301+
ret ptr %gep
4302+
}
4303+
4304+
define ptr @slt_select_gep(ptr %p, i32 %y) {
4305+
; CHECK-LABEL: slt_select_gep:
4306+
; CHECK: # %bb.0:
4307+
; CHECK-NEXT: srli a1, a1, 28
4308+
; CHECK-NEXT: andi a1, a1, 8
4309+
; CHECK-NEXT: add a0, a0, a1
4310+
; CHECK-NEXT: addi a0, a0, 16
4311+
; CHECK-NEXT: ret
4312+
%cmp = icmp slt i32 %y, 0
4313+
%select = select i1 %cmp, i64 24, i64 16
4314+
%gep = getelementptr i8, ptr %p, i64 %select
4315+
ret ptr %gep
4316+
}
4317+
4318+
define i32 @shr_and_add(i32 %x, i32 %y) {
4319+
; CHECK-LABEL: shr_and_add:
4320+
; CHECK: # %bb.0:
4321+
; CHECK-NEXT: srliw a1, a1, 9
4322+
; CHECK-NEXT: slli a1, a1, 2
4323+
; CHECK-NEXT: addw a0, a0, a1
4324+
; CHECK-NEXT: ret
4325+
%lshr = lshr i32 %y, 7
4326+
%and = and i32 %lshr, 33554428
4327+
%add = add i32 %x, %and
4328+
ret i32 %add
4329+
}
4330+
4331+
define ptr @udiv1280_gep(ptr %p, i16 zeroext %i) {
4332+
; RV64I-LABEL: udiv1280_gep:
4333+
; RV64I: # %bb.0:
4334+
; RV64I-NEXT: lui a2, 13
4335+
; RV64I-NEXT: addi a2, a2, -819
4336+
; RV64I-NEXT: mul a1, a1, a2
4337+
; RV64I-NEXT: srliw a1, a1, 26
4338+
; RV64I-NEXT: slli a1, a1, 3
4339+
; RV64I-NEXT: add a0, a0, a1
4340+
; RV64I-NEXT: ret
4341+
;
4342+
; RV64ZBA-LABEL: udiv1280_gep:
4343+
; RV64ZBA: # %bb.0:
4344+
; RV64ZBA-NEXT: lui a2, 13
4345+
; RV64ZBA-NEXT: addi a2, a2, -819
4346+
; RV64ZBA-NEXT: mul a1, a1, a2
4347+
; RV64ZBA-NEXT: srli a1, a1, 23
4348+
; RV64ZBA-NEXT: srliw a1, a1, 3
4349+
; RV64ZBA-NEXT: sh3add.uw a0, a1, a0
4350+
; RV64ZBA-NEXT: ret
4351+
;
4352+
; RV64XANDESPERF-LABEL: udiv1280_gep:
4353+
; RV64XANDESPERF: # %bb.0:
4354+
; RV64XANDESPERF-NEXT: lui a2, 13
4355+
; RV64XANDESPERF-NEXT: addi a2, a2, -819
4356+
; RV64XANDESPERF-NEXT: mul a1, a1, a2
4357+
; RV64XANDESPERF-NEXT: srli a1, a1, 23
4358+
; RV64XANDESPERF-NEXT: srliw a1, a1, 3
4359+
; RV64XANDESPERF-NEXT: nds.lea.d.ze a0, a0, a1
4360+
; RV64XANDESPERF-NEXT: ret
4361+
%udiv = udiv i16 %i, 1280
4362+
%idx.ext = zext nneg i16 %udiv to i64
4363+
%add.ptr = getelementptr i64, ptr %p, i64 %idx.ext
4364+
ret ptr %add.ptr
4365+
}

0 commit comments

Comments
 (0)