summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/RISCV/RISCVISelLowering.h
diff options
context:
space:
mode:
authorAlex Bradbury <asb@lowrisc.org>2018-11-30 09:56:54 +0000
committerAlex Bradbury <asb@lowrisc.org>2018-11-30 09:56:54 +0000
commite0e62e97dfddb01a6f2e32d2f951c317a7478f9a (patch)
tree258079ea1dc9509b8bfb1fc63de9a416143bbb04 /llvm/lib/Target/RISCV/RISCVISelLowering.h
parentdeaa3e2068cf14834e4063729887bb19eb4a9c2d (diff)
downloadbcm5719-llvm-e0e62e97dfddb01a6f2e32d2f951c317a7478f9a.tar.gz
bcm5719-llvm-e0e62e97dfddb01a6f2e32d2f951c317a7478f9a.zip
[TargetLowering][RISCV] Introduce isSExtCheaperThanZExt hook and implement for RISC-V
DAGTypeLegalizer::PromoteSetCCOperands currently prefers to zero-extend operands when it is able to do so. For some targets this is more expensive than a sign-extension, which is also a valid choice. Introduce the isSExtCheaperThanZExt hook and use it in the new SExtOrZExtPromotedInteger helper. On RISC-V, we prefer sign-extension for FromTy == MVT::i32 and ToTy == MVT::i64, as it can be performed using a single instruction. Differential Revision: https://reviews.llvm.org/D52978 llvm-svn: 347977
Diffstat (limited to 'llvm/lib/Target/RISCV/RISCVISelLowering.h')
-rw-r--r--llvm/lib/Target/RISCV/RISCVISelLowering.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.h b/llvm/lib/Target/RISCV/RISCVISelLowering.h
index a99e2c2f53b..6970900bb06 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.h
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.h
@@ -54,6 +54,7 @@ public:
bool isTruncateFree(Type *SrcTy, Type *DstTy) const override;
bool isTruncateFree(EVT SrcVT, EVT DstVT) const override;
bool isZExtFree(SDValue Val, EVT VT2) const override;
+ bool isSExtCheaperThanZExt(EVT SrcVT, EVT DstVT) const override;
// Provide custom lowering hooks for some operations.
SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override;
OpenPOWER on IntegriCloud