[ARM] Don't try and custom lower a vNi64 SETCC.
authorJames Molloy <james.molloy@arm.com>
Thu, 20 Aug 2015 16:33:44 +0000 (16:33 +0000)
committerJames Molloy <james.molloy@arm.com>
Thu, 20 Aug 2015 16:33:44 +0000 (16:33 +0000)
It won't go well. We've already marked 64-bit SETCCs as non-Custom, but it's just possible that a SETCC has a legal result type but an illegal operand type. If this happens, bail out before we create unselectable nodes.

Fixes PR24292. I tried to create a testcase but in 99% of cases we can't trigger this - not surprising that this bug has been latent since 2009.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245577 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMISelLowering.cpp

index ebc63e0db245cbaace0cf63c913525ea520b4c78..594c2c2da1105c71d4d9dff54d91abf48546ae97 100644 (file)
@@ -4560,6 +4560,12 @@ static SDValue LowerVSETCC(SDValue Op, SelectionDAG &DAG) {
   ISD::CondCode SetCCOpcode = cast<CondCodeSDNode>(CC)->get();
   SDLoc dl(Op);
 
+  if (CmpVT.getVectorElementType() == MVT::i64)
+    // 64-bit comparisons are not legal. We've marked SETCC as non-Custom,
+    // but it's possible that our operands are 64-bit but our result is 32-bit.
+    // Bail in this case.
+    return SDValue();
+
   if (Op1.getValueType().isFloatingPoint()) {
     switch (SetCCOpcode) {
     default: llvm_unreachable("Illegal FP comparison");