Skip to content

Commit a366323

Browse files
committed
[RISCV][GISel] Restore s32 support for G_ABS on RV64.
This reverts commit 5e6a198. I was was plannig to remove s32 as a legal type on RV64, but I'm rethinking that.
1 parent bffb26f commit a366323

File tree

3 files changed

+7
-5
lines changed

3 files changed

+7
-5
lines changed

llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST)
466466

467467
auto &AbsActions = getActionDefinitionsBuilder(G_ABS);
468468
if (ST.hasStdExtZbb())
469-
AbsActions.customFor({sXLen}).minScalar(0, sXLen);
469+
AbsActions.customFor({s32, sXLen}).minScalar(0, sXLen);
470470
AbsActions.lower();
471471

472472
auto &MinMaxActions =

llvm/test/CodeGen/RISCV/GlobalISel/iabs.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ define i32 @abs32(i32 %x) {
108108
;
109109
; RV64ZBB-LABEL: abs32:
110110
; RV64ZBB: # %bb.0:
111+
; RV64ZBB-NEXT: negw a1, a0
111112
; RV64ZBB-NEXT: sext.w a0, a0
112-
; RV64ZBB-NEXT: neg a1, a0
113113
; RV64ZBB-NEXT: max a0, a0, a1
114114
; RV64ZBB-NEXT: ret
115115
%abs = tail call i32 @llvm.abs.i32(i32 %x, i1 true)

llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-abs-rv64.mir

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,11 @@ body: |
102102
; RV64ZBB-LABEL: name: abs_i32
103103
; RV64ZBB: [[COPY:%[0-9]+]]:_(s64) = COPY $x10
104104
; RV64ZBB-NEXT: [[ASSERT_SEXT:%[0-9]+]]:_(s64) = G_ASSERT_SEXT [[COPY]], 32
105-
; RV64ZBB-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
106-
; RV64ZBB-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[C]], [[ASSERT_SEXT]]
107-
; RV64ZBB-NEXT: [[SMAX:%[0-9]+]]:_(s64) = G_SMAX [[ASSERT_SEXT]], [[SUB]]
105+
; RV64ZBB-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[ASSERT_SEXT]](s64)
106+
; RV64ZBB-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
107+
; RV64ZBB-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[C]], [[TRUNC]]
108+
; RV64ZBB-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[SUB]](s32)
109+
; RV64ZBB-NEXT: [[SMAX:%[0-9]+]]:_(s64) = G_SMAX [[ASSERT_SEXT]], [[SEXT]]
108110
; RV64ZBB-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[SMAX]], 32
109111
; RV64ZBB-NEXT: $x10 = COPY [[SEXT_INREG]](s64)
110112
; RV64ZBB-NEXT: PseudoRET implicit $x10

0 commit comments

Comments
 (0)