Skip to content

Commit fcbdd41

Browse files
pfusikDhruvSrivastavaX
authored andcommitted
[RISCV][test] Add tests for add.uw with a constant
1 parent 4a86de6 commit fcbdd41

File tree

1 file changed

+132
-0
lines changed

1 file changed

+132
-0
lines changed

llvm/test/CodeGen/RISCV/rv64zba.ll

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4411,3 +4411,135 @@ define ptr @udiv1280_gep(ptr %p, i16 zeroext %i) {
44114411
%add.ptr = getelementptr i64, ptr %p, i64 %idx.ext
44124412
ret ptr %add.ptr
44134413
}
4414+
4415+
define i64 @adduw_m1(i64 %x) {
4416+
; CHECK-LABEL: adduw_m1:
4417+
; CHECK: # %bb.0:
4418+
; CHECK-NEXT: li a1, -1
4419+
; CHECK-NEXT: srli a1, a1, 32
4420+
; CHECK-NEXT: add a0, a0, a1
4421+
; CHECK-NEXT: ret
4422+
%a = add i64 %x, 4294967295
4423+
ret i64 %a
4424+
}
4425+
4426+
define i64 @adduw_m3(i64 %x) {
4427+
; RV64I-LABEL: adduw_m3:
4428+
; RV64I: # %bb.0:
4429+
; RV64I-NEXT: li a1, 1
4430+
; RV64I-NEXT: slli a1, a1, 32
4431+
; RV64I-NEXT: addi a1, a1, -3
4432+
; RV64I-NEXT: add a0, a0, a1
4433+
; RV64I-NEXT: ret
4434+
;
4435+
; RV64ZBA-LABEL: adduw_m3:
4436+
; RV64ZBA: # %bb.0:
4437+
; RV64ZBA-NEXT: li a1, -3
4438+
; RV64ZBA-NEXT: zext.w a1, a1
4439+
; RV64ZBA-NEXT: add a0, a0, a1
4440+
; RV64ZBA-NEXT: ret
4441+
;
4442+
; RV64XANDESPERF-LABEL: adduw_m3:
4443+
; RV64XANDESPERF: # %bb.0:
4444+
; RV64XANDESPERF-NEXT: li a1, 1
4445+
; RV64XANDESPERF-NEXT: slli a1, a1, 32
4446+
; RV64XANDESPERF-NEXT: addi a1, a1, -3
4447+
; RV64XANDESPERF-NEXT: add a0, a0, a1
4448+
; RV64XANDESPERF-NEXT: ret
4449+
%a = add i64 %x, 4294967293
4450+
ret i64 %a
4451+
}
4452+
4453+
define i64 @adduw_3shl30(i64 %x) {
4454+
; CHECK-LABEL: adduw_3shl30:
4455+
; CHECK: # %bb.0:
4456+
; CHECK-NEXT: li a1, 3
4457+
; CHECK-NEXT: slli a1, a1, 30
4458+
; CHECK-NEXT: add a0, a0, a1
4459+
; CHECK-NEXT: ret
4460+
%a = add i64 %x, 3221225472
4461+
ret i64 %a
4462+
}
4463+
4464+
define i64 @adduw_m3_multiuse(i64 %x, i64 %y) {
4465+
; RV64I-LABEL: adduw_m3_multiuse:
4466+
; RV64I: # %bb.0:
4467+
; RV64I-NEXT: li a2, 1
4468+
; RV64I-NEXT: slli a2, a2, 32
4469+
; RV64I-NEXT: addi a2, a2, -3
4470+
; RV64I-NEXT: add a0, a0, a2
4471+
; RV64I-NEXT: add a1, a1, a2
4472+
; RV64I-NEXT: or a0, a0, a1
4473+
; RV64I-NEXT: ret
4474+
;
4475+
; RV64ZBA-LABEL: adduw_m3_multiuse:
4476+
; RV64ZBA: # %bb.0:
4477+
; RV64ZBA-NEXT: li a2, -3
4478+
; RV64ZBA-NEXT: zext.w a2, a2
4479+
; RV64ZBA-NEXT: add a0, a0, a2
4480+
; RV64ZBA-NEXT: add a1, a1, a2
4481+
; RV64ZBA-NEXT: or a0, a0, a1
4482+
; RV64ZBA-NEXT: ret
4483+
;
4484+
; RV64XANDESPERF-LABEL: adduw_m3_multiuse:
4485+
; RV64XANDESPERF: # %bb.0:
4486+
; RV64XANDESPERF-NEXT: li a2, 1
4487+
; RV64XANDESPERF-NEXT: slli a2, a2, 32
4488+
; RV64XANDESPERF-NEXT: addi a2, a2, -3
4489+
; RV64XANDESPERF-NEXT: add a0, a0, a2
4490+
; RV64XANDESPERF-NEXT: add a1, a1, a2
4491+
; RV64XANDESPERF-NEXT: or a0, a0, a1
4492+
; RV64XANDESPERF-NEXT: ret
4493+
%a = add i64 %x, 4294967293
4494+
%b = add i64 %y, 4294967293
4495+
%c = or i64 %a, %b
4496+
ret i64 %c
4497+
}
4498+
4499+
define i64 @add_or_m3(i64 %x) {
4500+
; RV64I-LABEL: add_or_m3:
4501+
; RV64I: # %bb.0:
4502+
; RV64I-NEXT: li a1, 1
4503+
; RV64I-NEXT: slli a1, a1, 32
4504+
; RV64I-NEXT: addi a1, a1, -3
4505+
; RV64I-NEXT: or a2, a0, a1
4506+
; RV64I-NEXT: add a0, a0, a1
4507+
; RV64I-NEXT: add a0, a0, a2
4508+
; RV64I-NEXT: ret
4509+
;
4510+
; RV64ZBA-LABEL: add_or_m3:
4511+
; RV64ZBA: # %bb.0:
4512+
; RV64ZBA-NEXT: li a1, -3
4513+
; RV64ZBA-NEXT: zext.w a1, a1
4514+
; RV64ZBA-NEXT: or a2, a0, a1
4515+
; RV64ZBA-NEXT: add a0, a0, a1
4516+
; RV64ZBA-NEXT: add a0, a0, a2
4517+
; RV64ZBA-NEXT: ret
4518+
;
4519+
; RV64XANDESPERF-LABEL: add_or_m3:
4520+
; RV64XANDESPERF: # %bb.0:
4521+
; RV64XANDESPERF-NEXT: li a1, 1
4522+
; RV64XANDESPERF-NEXT: slli a1, a1, 32
4523+
; RV64XANDESPERF-NEXT: addi a1, a1, -3
4524+
; RV64XANDESPERF-NEXT: or a2, a0, a1
4525+
; RV64XANDESPERF-NEXT: add a0, a0, a1
4526+
; RV64XANDESPERF-NEXT: add a0, a0, a2
4527+
; RV64XANDESPERF-NEXT: ret
4528+
%a = add i64 %x, 4294967293
4529+
%o = or i64 %x, 4294967293
4530+
%c = add i64 %a, %o
4531+
ret i64 %c
4532+
}
4533+
4534+
define i64 @append_32ones(i64 %x) {
4535+
; CHECK-LABEL: append_32ones:
4536+
; CHECK: # %bb.0:
4537+
; CHECK-NEXT: slli a0, a0, 32
4538+
; CHECK-NEXT: li a1, -1
4539+
; CHECK-NEXT: srli a1, a1, 32
4540+
; CHECK-NEXT: or a0, a0, a1
4541+
; CHECK-NEXT: ret
4542+
%s = shl i64 %x, 32
4543+
%o = or i64 %s, 4294967295
4544+
ret i64 %o
4545+
}

0 commit comments

Comments
 (0)