@@ -4260,10 +4260,11 @@ define i64 @add_u32simm32_zextw(i64 %x) nounwind {
42604260;
42614261; RV64XANDESPERF-LABEL: add_u32simm32_zextw:
42624262; RV64XANDESPERF: # %bb.0: # %entry
4263+ ; RV64XANDESPERF-NEXT: li a1, -2
4264+ ; RV64XANDESPERF-NEXT: nds.lea.b.ze a0, a0, a1
42634265; RV64XANDESPERF-NEXT: li a1, 1
42644266; RV64XANDESPERF-NEXT: slli a1, a1, 32
42654267; RV64XANDESPERF-NEXT: addi a1, a1, -2
4266- ; RV64XANDESPERF-NEXT: add a0, a0, a1
42674268; RV64XANDESPERF-NEXT: addi a1, a1, 1
42684269; RV64XANDESPERF-NEXT: and a0, a0, a1
42694270; RV64XANDESPERF-NEXT: ret
@@ -4413,12 +4414,24 @@ define ptr @udiv1280_gep(ptr %p, i16 zeroext %i) {
44134414}
44144415
44154416define 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
4417+ ; RV64I-LABEL: adduw_m1:
4418+ ; RV64I: # %bb.0:
4419+ ; RV64I-NEXT: li a1, -1
4420+ ; RV64I-NEXT: srli a1, a1, 32
4421+ ; RV64I-NEXT: add a0, a0, a1
4422+ ; RV64I-NEXT: ret
4423+ ;
4424+ ; RV64ZBA-LABEL: adduw_m1:
4425+ ; RV64ZBA: # %bb.0:
4426+ ; RV64ZBA-NEXT: li a1, -1
4427+ ; RV64ZBA-NEXT: add.uw a0, a1, a0
4428+ ; RV64ZBA-NEXT: ret
4429+ ;
4430+ ; RV64XANDESPERF-LABEL: adduw_m1:
4431+ ; RV64XANDESPERF: # %bb.0:
4432+ ; RV64XANDESPERF-NEXT: li a1, -1
4433+ ; RV64XANDESPERF-NEXT: nds.lea.b.ze a0, a0, a1
4434+ ; RV64XANDESPERF-NEXT: ret
44224435 %a = add i64 %x , 4294967295
44234436 ret i64 %a
44244437}
@@ -4435,28 +4448,37 @@ define i64 @adduw_m3(i64 %x) {
44354448; RV64ZBA-LABEL: adduw_m3:
44364449; RV64ZBA: # %bb.0:
44374450; RV64ZBA-NEXT: li a1, -3
4438- ; RV64ZBA-NEXT: zext.w a1, a1
4439- ; RV64ZBA-NEXT: add a0, a0, a1
4451+ ; RV64ZBA-NEXT: add.uw a0, a1, a0
44404452; RV64ZBA-NEXT: ret
44414453;
44424454; RV64XANDESPERF-LABEL: adduw_m3:
44434455; 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
4456+ ; RV64XANDESPERF-NEXT: li a1, -3
4457+ ; RV64XANDESPERF-NEXT: nds.lea.b.ze a0, a0, a1
44484458; RV64XANDESPERF-NEXT: ret
44494459 %a = add i64 %x , 4294967293
44504460 ret i64 %a
44514461}
44524462
44534463define 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
4464+ ; RV64I-LABEL: adduw_3shl30:
4465+ ; RV64I: # %bb.0:
4466+ ; RV64I-NEXT: li a1, 3
4467+ ; RV64I-NEXT: slli a1, a1, 30
4468+ ; RV64I-NEXT: add a0, a0, a1
4469+ ; RV64I-NEXT: ret
4470+ ;
4471+ ; RV64ZBA-LABEL: adduw_3shl30:
4472+ ; RV64ZBA: # %bb.0:
4473+ ; RV64ZBA-NEXT: lui a1, 786432
4474+ ; RV64ZBA-NEXT: add.uw a0, a1, a0
4475+ ; RV64ZBA-NEXT: ret
4476+ ;
4477+ ; RV64XANDESPERF-LABEL: adduw_3shl30:
4478+ ; RV64XANDESPERF: # %bb.0:
4479+ ; RV64XANDESPERF-NEXT: lui a1, 786432
4480+ ; RV64XANDESPERF-NEXT: nds.lea.b.ze a0, a0, a1
4481+ ; RV64XANDESPERF-NEXT: ret
44604482 %a = add i64 %x , 3221225472
44614483 ret i64 %a
44624484}
@@ -4475,19 +4497,16 @@ define i64 @adduw_m3_multiuse(i64 %x, i64 %y) {
44754497; RV64ZBA-LABEL: adduw_m3_multiuse:
44764498; RV64ZBA: # %bb.0:
44774499; 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
4500+ ; RV64ZBA-NEXT: add.uw a0, a2, a0
4501+ ; RV64ZBA-NEXT: add.uw a1, a2, a1
44814502; RV64ZBA-NEXT: or a0, a0, a1
44824503; RV64ZBA-NEXT: ret
44834504;
44844505; RV64XANDESPERF-LABEL: adduw_m3_multiuse:
44854506; 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
4507+ ; RV64XANDESPERF-NEXT: li a2, -3
4508+ ; RV64XANDESPERF-NEXT: nds.lea.b.ze a0, a0, a2
4509+ ; RV64XANDESPERF-NEXT: nds.lea.b.ze a1, a1, a2
44914510; RV64XANDESPERF-NEXT: or a0, a0, a1
44924511; RV64XANDESPERF-NEXT: ret
44934512 %a = add i64 %x , 4294967293
@@ -4532,13 +4551,27 @@ define i64 @add_or_m3(i64 %x) {
45324551}
45334552
45344553define 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
4554+ ; RV64I-LABEL: append_32ones:
4555+ ; RV64I: # %bb.0:
4556+ ; RV64I-NEXT: slli a0, a0, 32
4557+ ; RV64I-NEXT: li a1, -1
4558+ ; RV64I-NEXT: srli a1, a1, 32
4559+ ; RV64I-NEXT: or a0, a0, a1
4560+ ; RV64I-NEXT: ret
4561+ ;
4562+ ; RV64ZBA-LABEL: append_32ones:
4563+ ; RV64ZBA: # %bb.0:
4564+ ; RV64ZBA-NEXT: slli a0, a0, 32
4565+ ; RV64ZBA-NEXT: li a1, -1
4566+ ; RV64ZBA-NEXT: add.uw a0, a1, a0
4567+ ; RV64ZBA-NEXT: ret
4568+ ;
4569+ ; RV64XANDESPERF-LABEL: append_32ones:
4570+ ; RV64XANDESPERF: # %bb.0:
4571+ ; RV64XANDESPERF-NEXT: slli a0, a0, 32
4572+ ; RV64XANDESPERF-NEXT: li a1, -1
4573+ ; RV64XANDESPERF-NEXT: nds.lea.b.ze a0, a0, a1
4574+ ; RV64XANDESPERF-NEXT: ret
45424575 %s = shl i64 %x , 32
45434576 %o = or i64 %s , 4294967295
45444577 ret i64 %o
0 commit comments