summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2009-07-16 14:19:54 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2009-07-16 14:19:54 +0000
commitead9b9fb3158d5bc4ee7a8c8cffceaef98a2fd83 (patch)
tree72df7145fc9d22b10ffead864e48373d502cb39d /llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
parent7cb00653c1ae695ebfab22ee393fe57930c97844 (diff)
downloadbcm5719-llvm-ead9b9fb3158d5bc4ee7a8c8cffceaef98a2fd83.tar.gz
bcm5719-llvm-ead9b9fb3158d5bc4ee7a8c8cffceaef98a2fd83.zip
Implement all comparisons
llvm-svn: 76017
Diffstat (limited to 'llvm/lib/Target/SystemZ/SystemZISelLowering.cpp')
-rw-r--r--llvm/lib/Target/SystemZ/SystemZISelLowering.cpp44
1 files changed, 38 insertions, 6 deletions
diff --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
index 83ba64c0c6d..9721c67cff5 100644
--- a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
@@ -484,8 +484,6 @@ SDValue SystemZTargetLowering::LowerRET(SDValue Op, SelectionDAG &DAG) {
SDValue SystemZTargetLowering::EmitCmp(SDValue LHS, SDValue RHS,
ISD::CondCode CC, SDValue &SystemZCC,
SelectionDAG &DAG) {
- assert(!LHS.getValueType().isFloatingPoint() && "We don't handle FP yet");
-
// FIXME: Emit a test if RHS is zero
bool isUnsigned = false;
@@ -493,29 +491,63 @@ SDValue SystemZTargetLowering::EmitCmp(SDValue LHS, SDValue RHS,
switch (CC) {
default: assert(0 && "Invalid integer condition!");
case ISD::SETEQ:
+ case ISD::SETOEQ:
TCC = SystemZCC::E;
break;
+ case ISD::SETUEQ:
+ TCC = SystemZCC::NLH;
+ break;
case ISD::SETNE:
+ case ISD::SETONE:
TCC = SystemZCC::NE;
break;
+ case ISD::SETUNE:
+ TCC = SystemZCC::LH;
+ break;
+ case ISD::SETO:
+ TCC = SystemZCC::O;
+ break;
+ case ISD::SETUO:
+ TCC = SystemZCC::NO;
+ break;
case ISD::SETULE:
+ if (LHS.getValueType().isFloatingPoint()) {
+ TCC = SystemZCC::NH;
+ break;
+ }
isUnsigned = true; // FALLTHROUGH
case ISD::SETLE:
+ case ISD::SETOLE:
TCC = SystemZCC::LE;
break;
case ISD::SETUGE:
+ if (LHS.getValueType().isFloatingPoint()) {
+ TCC = SystemZCC::NL;
+ break;
+ }
isUnsigned = true; // FALLTHROUGH
case ISD::SETGE:
+ case ISD::SETOGE:
TCC = SystemZCC::HE;
break;
case ISD::SETUGT:
- isUnsigned = true;
+ if (LHS.getValueType().isFloatingPoint()) {
+ TCC = SystemZCC::NLE;
+ break;
+ }
+ isUnsigned = true; // FALLTHROUGH
case ISD::SETGT:
- TCC = SystemZCC::H; // FALLTHROUGH
+ case ISD::SETOGT:
+ TCC = SystemZCC::H;
break;
case ISD::SETULT:
- isUnsigned = true;
- case ISD::SETLT: // FALLTHROUGH
+ if (LHS.getValueType().isFloatingPoint()) {
+ TCC = SystemZCC::NHE;
+ break;
+ }
+ isUnsigned = true; // FALLTHROUGH
+ case ISD::SETLT:
+ case ISD::SETOLT:
TCC = SystemZCC::L;
break;
}
OpenPOWER on IntegriCloud