Skip to content

Commit

Permalink
[RISCV] Split f64 undef into two i32 undefs
Browse files Browse the repository at this point in the history
So that no store instruction will be generated.

Reviewed By: asb

Differential Revision: https://reviews.llvm.org/D118222
  • Loading branch information
pcwang-thead committed Feb 8, 2022
1 parent adbc7a2 commit c53d99c
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 5 deletions.
6 changes: 6 additions & 0 deletions llvm/lib/Target/RISCV/RISCVISelLowering.cpp
Expand Up @@ -7796,6 +7796,12 @@ SDValue RISCVTargetLowering::PerformDAGCombine(SDNode *N,
if (Op0->getOpcode() == RISCVISD::BuildPairF64)
return DCI.CombineTo(N, Op0.getOperand(0), Op0.getOperand(1));

if (Op0->isUndef()) {
SDValue Lo = DAG.getUNDEF(MVT::i32);
SDValue Hi = DAG.getUNDEF(MVT::i32);
return DCI.CombineTo(N, Lo, Hi);
}

SDLoc DL(N);

// It's cheaper to materialise two 32-bit integers than to load a double
Expand Down
5 changes: 0 additions & 5 deletions llvm/test/CodeGen/RISCV/double-calling-conv.ll
Expand Up @@ -146,11 +146,6 @@ define double @caller_double_stack() nounwind {
define double @func_return_double_undef() nounwind {
; RV32IFD-LABEL: func_return_double_undef:
; RV32IFD: # %bb.0:
; RV32IFD-NEXT: addi sp, sp, -16
; RV32IFD-NEXT: fsd ft0, 8(sp)
; RV32IFD-NEXT: lw a0, 8(sp)
; RV32IFD-NEXT: lw a1, 12(sp)
; RV32IFD-NEXT: addi sp, sp, 16
; RV32IFD-NEXT: ret
ret double undef
}

0 comments on commit c53d99c

Please sign in to comment.