[llvm] r324538 - [X86] Prune some unreachable 'return SDValue()' paths from LowerSIGN_EXTEND/LowerZERO_EXTEND/LowerANY_EXTEND.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 7 14:45:38 PST 2018
Author: ctopper
Date: Wed Feb 7 14:45:38 2018
New Revision: 324538
URL: http://llvm.org/viewvc/llvm-project?rev=324538&view=rev
Log:
[X86] Prune some unreachable 'return SDValue()' paths from LowerSIGN_EXTEND/LowerZERO_EXTEND/LowerANY_EXTEND.
We were doing a lot of whitelisting of what we handle in these routines, but setOperationAction constrains what we can get here. So just add some asserts and prune the unreachable paths.
Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=324538&r1=324537&r2=324538&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Feb 7 14:45:38 2018
@@ -16352,15 +16352,17 @@ static SDValue LowerAVXExtend(SDValue Op
MVT InVT = In.getSimpleValueType();
SDLoc dl(Op);
- if ((VT != MVT::v4i64 || InVT != MVT::v4i32) &&
- (VT != MVT::v8i32 || InVT != MVT::v8i16) &&
- (VT != MVT::v16i16 || InVT != MVT::v16i8) &&
- (VT != MVT::v8i64 || InVT != MVT::v8i32) &&
- (VT != MVT::v8i64 || InVT != MVT::v8i16) &&
- (VT != MVT::v16i32 || InVT != MVT::v16i16) &&
- (VT != MVT::v16i32 || InVT != MVT::v16i8) &&
- (VT != MVT::v32i16 || InVT != MVT::v32i8))
- return SDValue();
+ assert(VT.isVector() && InVT.isVector() && "Expected vector type");
+ assert(VT.getVectorNumElements() == VT.getVectorNumElements() &&
+ "Expected same number of elements");
+ assert((VT.getVectorElementType() == MVT::i16 ||
+ VT.getVectorElementType() == MVT::i32 ||
+ VT.getVectorElementType() == MVT::i64) &&
+ "Unexpected element type");
+ assert((InVT.getVectorElementType() == MVT::i8 ||
+ InVT.getVectorElementType() == MVT::i16 ||
+ InVT.getVectorElementType() == MVT::i32) &&
+ "Unexpected element type");
if (Subtarget.hasInt256())
return DAG.getNode(X86ISD::VZEXT, dl, VT, In);
@@ -16466,14 +16468,8 @@ static SDValue LowerZERO_EXTEND(SDValue
if (SVT.getVectorElementType() == MVT::i1)
return LowerZERO_EXTEND_Mask(Op, Subtarget, DAG);
- if (Subtarget.hasFp256())
- if (SDValue Res = LowerAVXExtend(Op, DAG, Subtarget))
- return Res;
-
- assert(!Op.getSimpleValueType().is256BitVector() || !SVT.is128BitVector() ||
- Op.getSimpleValueType().getVectorNumElements() !=
- SVT.getVectorNumElements());
- return SDValue();
+ assert(Subtarget.hasFp256() && "Expected AVX support");
+ return LowerAVXExtend(Op, DAG, Subtarget);
}
/// Helper to recursively truncate vector elements in half with PACKSS/PACKUS.
@@ -18663,11 +18659,8 @@ static SDValue LowerANY_EXTEND(SDValue O
if (InVT.getVectorElementType() == MVT::i1)
return LowerSIGN_EXTEND_Mask(Op, Subtarget, DAG);
- if (Subtarget.hasFp256())
- if (SDValue Res = LowerAVXExtend(Op, DAG, Subtarget))
- return Res;
-
- return SDValue();
+ assert(Subtarget.hasFp256() && "Expected AVX support");
+ return LowerAVXExtend(Op, DAG, Subtarget);
}
// Lowering for SIGN_EXTEND_VECTOR_INREG and ZERO_EXTEND_VECTOR_INREG.
@@ -18767,15 +18760,17 @@ static SDValue LowerSIGN_EXTEND(SDValue
if (InVT.getVectorElementType() == MVT::i1)
return LowerSIGN_EXTEND_Mask(Op, Subtarget, DAG);
- if ((VT != MVT::v4i64 || InVT != MVT::v4i32) &&
- (VT != MVT::v8i32 || InVT != MVT::v8i16) &&
- (VT != MVT::v16i16 || InVT != MVT::v16i8) &&
- (VT != MVT::v8i64 || InVT != MVT::v8i32) &&
- (VT != MVT::v8i64 || InVT != MVT::v8i16) &&
- (VT != MVT::v16i32 || InVT != MVT::v16i16) &&
- (VT != MVT::v16i32 || InVT != MVT::v16i8) &&
- (VT != MVT::v32i16 || InVT != MVT::v32i8))
- return SDValue();
+ assert(VT.isVector() && InVT.isVector() && "Expected vector type");
+ assert(VT.getVectorNumElements() == VT.getVectorNumElements() &&
+ "Expected same number of elements");
+ assert((VT.getVectorElementType() == MVT::i16 ||
+ VT.getVectorElementType() == MVT::i32 ||
+ VT.getVectorElementType() == MVT::i64) &&
+ "Unexpected element type");
+ assert((InVT.getVectorElementType() == MVT::i8 ||
+ InVT.getVectorElementType() == MVT::i16 ||
+ InVT.getVectorElementType() == MVT::i32) &&
+ "Unexpected element type");
if (Subtarget.hasInt256())
return DAG.getNode(X86ISD::VSEXT, dl, VT, In);
More information about the llvm-commits
mailing list