From 72ac43b1d6830940257046d8041ef4f205c61e12 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Wed, 26 Jun 2019 14:21:29 +0000 Subject: [PATCH] [X86] shouldScalarizeBinop - never scalarize target opcodes. We have (almost) no target opcodes that have scalar/vector equivalents - for now assume we can't scalarize them (we can add exceptions if we need to). llvm-svn: 364429 --- lib/Target/X86/X86ISelLowering.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 5e77a28ecfe..6bf249ceb02 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -4899,15 +4899,22 @@ bool X86TargetLowering::isExtractSubvectorCheap(EVT ResVT, EVT SrcVT, } bool X86TargetLowering::shouldScalarizeBinop(SDValue VecOp) const { + unsigned Opc = VecOp.getOpcode(); + + // Assume target opcodes can't be scalarized. + // TODO - do we have any exceptions? + if (Opc >= ISD::BUILTIN_OP_END) + return false; + // If the vector op is not supported, try to convert to scalar. EVT VecVT = VecOp.getValueType(); - if (!isOperationLegalOrCustomOrPromote(VecOp.getOpcode(), VecVT)) + if (!isOperationLegalOrCustomOrPromote(Opc, VecVT)) return true; // If the vector op is supported, but the scalar op is not, the transform may // not be worthwhile. EVT ScalarVT = VecVT.getScalarType(); - return isOperationLegalOrCustomOrPromote(VecOp.getOpcode(), ScalarVT); + return isOperationLegalOrCustomOrPromote(Opc, ScalarVT); } bool X86TargetLowering::shouldFormOverflowOp(unsigned Opcode, EVT VT) const {