Skip to content

Commit 36c6394

Browse files
committed
[RISCV] Add VTs to some multi instruction isel patterns to resolve ambiguity.
See also #81192. These were found by disabling tablegen's ForceArbitraryInstResultType. For one of the patterns I was able to get a failure if Zfh was enabled, but Zfbfmin was not. It appears ForceArbitraryInstResultType picks bf16 over f16. I think something like #116165 is a better long term fix for these issues. I will update that to include f16/bf16.
1 parent be15fd5 commit 36c6394

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoD.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ def : PatFprFpr<riscv_fsgnjx, FSGNJX_D_INX, FPR64INX, f64>;
325325
def : Pat<(fcopysign FPR64INX:$rs1, (fneg FPR64INX:$rs2)),
326326
(FSGNJN_D_INX $rs1, $rs2)>;
327327
def : Pat<(fcopysign FPR64INX:$rs1, FPR32INX:$rs2),
328-
(FSGNJ_D_INX $rs1, (FCVT_D_S_INX $rs2, FRM_RNE))>;
328+
(FSGNJ_D_INX $rs1, (f64 (FCVT_D_S_INX $rs2, FRM_RNE)))>;
329329
def : Pat<(fcopysign FPR32INX:$rs1, FPR64INX:$rs2),
330330
(FSGNJ_S_INX $rs1, (FCVT_S_D_INX $rs2, FRM_DYN))>;
331331

llvm/lib/Target/RISCV/RISCVInstrInfoZfh.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ def : PatFprFpr<fcopysign, FSGNJ_H, FPR16, f16>;
293293
def : PatFprFpr<riscv_fsgnjx, FSGNJX_H, FPR16, f16>;
294294
def : Pat<(f16 (fcopysign FPR16:$rs1, (f16 (fneg FPR16:$rs2)))), (FSGNJN_H $rs1, $rs2)>;
295295
def : Pat<(f16 (fcopysign FPR16:$rs1, FPR32:$rs2)),
296-
(FSGNJ_H $rs1, (FCVT_H_S $rs2, FRM_DYN))>;
296+
(FSGNJ_H $rs1, (f16 (FCVT_H_S $rs2, FRM_DYN)))>;
297297

298298
// fmadd: rs1 * rs2 + rs3
299299
def : Pat<(f16 (any_fma FPR16:$rs1, FPR16:$rs2, FPR16:$rs3)),
@@ -588,7 +588,7 @@ def : Pat<(any_fpextend (f16 FPR16:$rs1)), (FCVT_D_H FPR16:$rs1, FRM_RNE)>;
588588

589589
/// Float arithmetic operations
590590
def : Pat<(f16 (fcopysign FPR16:$rs1, FPR64:$rs2)),
591-
(FSGNJ_H $rs1, (FCVT_H_D $rs2, FRM_DYN))>;
591+
(FSGNJ_H $rs1, (f16 (FCVT_H_D $rs2, FRM_DYN)))>;
592592
def : Pat<(fcopysign FPR64:$rs1, (f16 FPR16:$rs2)), (FSGNJ_D $rs1, (FCVT_D_H $rs2, FRM_RNE))>;
593593
} // Predicates = [HasStdExtZfhmin, HasStdExtD]
594594

@@ -613,5 +613,5 @@ def : Pat<(any_fpextend FPR16INX:$rs1), (FCVT_D_H_INX FPR16INX:$rs1, FRM_RNE)>;
613613
/// Float arithmetic operations
614614
def : Pat<(fcopysign FPR16INX:$rs1, FPR64INX:$rs2),
615615
(FSGNJ_H_INX $rs1, (FCVT_H_D_INX $rs2, 0b111))>;
616-
def : Pat<(fcopysign FPR64INX:$rs1, FPR16INX:$rs2), (FSGNJ_D_INX $rs1, (FCVT_D_H_INX $rs2, FRM_RNE))>;
616+
def : Pat<(fcopysign FPR64INX:$rs1, FPR16INX:$rs2), (FSGNJ_D_INX $rs1, (f64 (FCVT_D_H_INX $rs2, FRM_RNE)))>;
617617
} // Predicates = [HasStdExtZhinxmin, HasStdExtZdinx, IsRV64]

0 commit comments

Comments
 (0)