diff options
author | Bjorn Pettersson <bjorn.a.pettersson@ericsson.com> | 2019-09-07 12:16:14 +0000 |
---|---|---|
committer | Bjorn Pettersson <bjorn.a.pettersson@ericsson.com> | 2019-09-07 12:16:14 +0000 |
commit | 5e331e4ce85ad37dca45739846c2a801f06ab573 (patch) | |
tree | 9fd99630a22771b748a2c0d3e6282a55116e4130 /llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | |
parent | 314893cc4ba05e65da4be26afb21b2fb50eab7b3 (diff) | |
download | bcm5719-llvm-5e331e4ce85ad37dca45739846c2a801f06ab573.tar.gz bcm5719-llvm-5e331e4ce85ad37dca45739846c2a801f06ab573.zip |
[Intrinsic] Add the llvm.umul.fix.sat intrinsic
Summary:
Add an intrinsic that takes 2 unsigned integers with
the scale of them provided as the third argument and
performs fixed point multiplication on them. The
result is saturated and clamped between the largest and
smallest representable values of the first 2 operands.
This is a part of implementing fixed point arithmetic
in clang where some of the more complex operations
will be implemented as intrinsics.
Patch by: leonardchan, bjope
Reviewers: RKSimon, craig.topper, bevinh, leonardchan, lebedev.ri, spatel
Reviewed By: leonardchan
Subscribers: ychen, wuzish, nemanjai, MaskRay, jsji, jdoerfert, Ka-Ka, hiraditya, rjmccall, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D57836
llvm-svn: 371308
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 3ab3a572487..248525e52e4 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -1749,7 +1749,8 @@ SDValue DAGCombiner::visit(SDNode *N) { case ISD::SUBCARRY: return visitSUBCARRY(N); case ISD::SMULFIX: case ISD::SMULFIXSAT: - case ISD::UMULFIX: return visitMULFIX(N); + case ISD::UMULFIX: + case ISD::UMULFIXSAT: return visitMULFIX(N); case ISD::MUL: return visitMUL(N); case ISD::SDIV: return visitSDIV(N); case ISD::UDIV: return visitUDIV(N); @@ -3519,7 +3520,8 @@ SDValue DAGCombiner::visitSUBCARRY(SDNode *N) { return SDValue(); } -// Notice that "mulfix" can be any of SMULFIX, SMULFIXSAT and UMULFIX here. +// Notice that "mulfix" can be any of SMULFIX, SMULFIXSAT, UMULFIX and +// UMULFIXSAT here. SDValue DAGCombiner::visitMULFIX(SDNode *N) { SDValue N0 = N->getOperand(0); SDValue N1 = N->getOperand(1); |