summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorElena Demikhovsky <elena.demikhovsky@intel.com>2014-01-16 08:45:54 +0000
committerElena Demikhovsky <elena.demikhovsky@intel.com>2014-01-16 08:45:54 +0000
commitd1487261a0250aa2bca61d1eeb24ec00f801e659 (patch)
tree2075842ebe37f22396d6ddc85118a57451198578 /llvm/lib
parenta9d2c67cc2ea6c0e3662ffcf4d4f3cd613a6b308 (diff)
downloadbcm5719-llvm-d1487261a0250aa2bca61d1eeb24ec00f801e659.tar.gz
bcm5719-llvm-d1487261a0250aa2bca61d1eeb24ec00f801e659.zip
AVX-512: fixed a compare pattern
llvm-svn: 199366
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 431101b6eb7..27b2d0bb942 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -9544,6 +9544,11 @@ SDValue X86TargetLowering::EmitTest(SDValue Op, unsigned X86CC,
SelectionDAG &DAG) const {
SDLoc dl(Op);
+ if (Op.getValueType() == MVT::i1)
+ // KORTEST instruction should be selected
+ return DAG.getNode(X86ISD::CMP, dl, MVT::i32, Op,
+ DAG.getConstant(0, Op.getValueType()));
+
// CF and OF aren't always set the way we want. Determine which
// of these we need.
bool NeedCF = false;
@@ -9560,15 +9565,14 @@ SDValue X86TargetLowering::EmitTest(SDValue Op, unsigned X86CC,
NeedOF = true;
break;
}
-
// See if we can use the EFLAGS value from the operand instead of
// doing a separate TEST. TEST always sets OF and CF to 0, so unless
// we prove that the arithmetic won't overflow, we can't use OF or CF.
if (Op.getResNo() != 0 || NeedOF || NeedCF) {
// Emit a CMP with 0, which is the TEST pattern.
- if (Op.getValueType() == MVT::i1)
- return DAG.getNode(X86ISD::CMP, dl, MVT::i1, Op,
- DAG.getConstant(0, MVT::i1));
+ //if (Op.getValueType() == MVT::i1)
+ // return DAG.getNode(X86ISD::CMP, dl, MVT::i1, Op,
+ // DAG.getConstant(0, MVT::i1));
return DAG.getNode(X86ISD::CMP, dl, MVT::i32, Op,
DAG.getConstant(0, Op.getValueType()));
}
@@ -9762,10 +9766,10 @@ SDValue X86TargetLowering::EmitCmp(SDValue Op0, SDValue Op1, unsigned X86CC,
return EmitTest(Op0, X86CC, DAG);
if (Op0.getValueType() == MVT::i1) {
+ // invert the value
Op0 = DAG.getNode(ISD::XOR, dl, MVT::i1, Op0,
DAG.getConstant(-1, MVT::i1));
- return DAG.getNode(X86ISD::CMP, dl, MVT::i1, Op0,
- DAG.getConstant(0, MVT::i1));
+ return EmitTest(Op0, X86CC, DAG);
}
}
OpenPOWER on IntegriCloud