From f325b4bbceb5e680e64532dd018b3c0a36d1b01a Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Fri, 27 Nov 2020 11:11:41 -0800 Subject: [PATCH] [RISCV] Replace sexti32/zexti32 in isel patterns where only one part of their PatFrags can match. NFCI We had an zexti32 after a sign_extend_inreg. The AND X, 0xffffffff part of the zexti32 should never occur since SimplifyDemandedBits from the sign_extend_inreg would have removed it. We also had sexti32 as the root node of a pattern, but SelectionDAGISel matches assertsext early before the tablegen based patterns are evaluated. --- llvm/lib/Target/RISCV/RISCVInstrInfoD.td | 2 +- llvm/lib/Target/RISCV/RISCVInstrInfoF.td | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoD.td b/llvm/lib/Target/RISCV/RISCVInstrInfoD.td index 6c36f53..3aaae2d 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoD.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoD.td @@ -368,7 +368,7 @@ def : Pat<(bitconvert FPR64:$rs1), (FMV_X_D FPR64:$rs1)>; // because fpto[u|s]i produce poison if the value can't fit into the target. // We match the single case below because fcvt.wu.d sign-extends its result so // is cheaper than fcvt.lu.d+sext.w. -def : Pat<(sext_inreg (zexti32 (fp_to_uint FPR64:$rs1)), i32), +def : Pat<(sext_inreg (assertzexti32 (fp_to_uint FPR64:$rs1)), i32), (FCVT_WU_D $rs1, 0b001)>; // [u]int32->fp diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoF.td b/llvm/lib/Target/RISCV/RISCVInstrInfoF.td index 79281e7..5162b5c 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoF.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoF.td @@ -400,7 +400,7 @@ def : Pat<(uint_to_fp GPR:$rs1), (FCVT_S_WU $rs1, 0b111)>; let Predicates = [HasStdExtF, IsRV64] in { def : Pat<(riscv_fmv_w_x_rv64 GPR:$src), (FMV_W_X GPR:$src)>; def : Pat<(riscv_fmv_x_anyextw_rv64 FPR32:$src), (FMV_X_W FPR32:$src)>; -def : Pat<(sexti32 (riscv_fmv_x_anyextw_rv64 FPR32:$src)), +def : Pat<(sext_inreg (riscv_fmv_x_anyextw_rv64 FPR32:$src), i32), (FMV_X_W FPR32:$src)>; // FP->[u]int32 is mostly handled by the FP->[u]int64 patterns. This is safe -- 2.7.4