summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
diff options
context:
space:
mode:
authorStefan Pintilie <stefanp@ca.ibm.com>2018-07-09 13:36:14 +0000
committerStefan Pintilie <stefanp@ca.ibm.com>2018-07-09 13:36:14 +0000
commit3d76326d24310638fff26267e24b5473b543913d (patch)
tree5b79d44cb07b1853723a99ab5ca3efdf4aa54e63 /llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
parent813b21e33a69d05efb65580ff56dd3aae6cfe9a6 (diff)
downloadbcm5719-llvm-3d76326d24310638fff26267e24b5473b543913d.tar.gz
bcm5719-llvm-3d76326d24310638fff26267e24b5473b543913d.zip
[Power9] Add __float128 support for compare operations
Added handling for the select f128. Differential Revision: https://reviews.llvm.org/D48294 llvm-svn: 336548
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
index 151a12bcddf..06152d05107 100644
--- a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+++ b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
@@ -3617,9 +3617,12 @@ SDValue PPCDAGToDAGISel::SelectCC(SDValue LHS, SDValue RHS, ISD::CondCode CC,
}
} else if (LHS.getValueType() == MVT::f32) {
Opc = PPC::FCMPUS;
- } else {
- assert(LHS.getValueType() == MVT::f64 && "Unknown vt!");
+ } else if (LHS.getValueType() == MVT::f64) {
Opc = PPCSubTarget->hasVSX() ? PPC::XSCMPUDP : PPC::FCMPUD;
+ } else {
+ assert(LHS.getValueType() == MVT::f128 && "Unknown vt!");
+ assert(PPCSubTarget->hasVSX() && "__float128 requires VSX");
+ Opc = PPC::XSCMPUQP;
}
return SDValue(CurDAG->getMachineNode(Opc, dl, MVT::i32, LHS, RHS), 0);
}
@@ -4564,6 +4567,8 @@ void PPCDAGToDAGISel::Select(SDNode *N) {
SelectCCOp = PPC::SELECT_CC_VSFRC;
else
SelectCCOp = PPC::SELECT_CC_F8;
+ else if (N->getValueType(0) == MVT::f128)
+ SelectCCOp = PPC::SELECT_CC_F16;
else if (PPCSubTarget->hasQPX() && N->getValueType(0) == MVT::v4f64)
SelectCCOp = PPC::SELECT_CC_QFRC;
else if (PPCSubTarget->hasQPX() && N->getValueType(0) == MVT::v4f32)
OpenPOWER on IntegriCloud