[llvm] 50ee0b9 - [InstCombine][X86] getNegativeIsTrueBoolVec - use ConstantExpr evaluators. NFCI.
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 12 06:01:02 PDT 2020
Author: Simon Pilgrim
Date: 2020-09-12T13:58:58+01:00
New Revision: 50ee0b99ec2902f5cf7a62a5e9b4a4f882b17031
URL: https://github.com/llvm/llvm-project/commit/50ee0b99ec2902f5cf7a62a5e9b4a4f882b17031
DIFF: https://github.com/llvm/llvm-project/commit/50ee0b99ec2902f5cf7a62a5e9b4a4f882b17031.diff
LOG: [InstCombine][X86] getNegativeIsTrueBoolVec - use ConstantExpr evaluators. NFCI.
Don't do this manually, we can just use the ConstantExpr evaluators to do it more tidily for us.
Added:
Modified:
llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp b/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp
index e2582bae3010..d93f22d0365c 100644
--- a/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp
+++ b/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp
@@ -24,19 +24,12 @@ using namespace llvm;
/// Return a constant boolean vector that has true elements in all positions
/// where the input constant data vector has an element with the sign bit set.
-static Constant *getNegativeIsTrueBoolVec(ConstantDataVector *V) {
- SmallVector<Constant *, 32> BoolVec;
- IntegerType *BoolTy = Type::getInt1Ty(V->getContext());
- for (unsigned I = 0, E = V->getNumElements(); I != E; ++I) {
- Constant *Elt = V->getElementAsConstant(I);
- assert((isa<ConstantInt>(Elt) || isa<ConstantFP>(Elt)) &&
- "Unexpected constant data vector element type");
- bool Sign = V->getElementType()->isIntegerTy()
- ? cast<ConstantInt>(Elt)->isNegative()
- : cast<ConstantFP>(Elt)->isNegative();
- BoolVec.push_back(ConstantInt::get(BoolTy, Sign));
- }
- return ConstantVector::get(BoolVec);
+static Constant *getNegativeIsTrueBoolVec(Constant *V) {
+ VectorType *IntTy = VectorType::getInteger(cast<VectorType>(V->getType()));
+ V = ConstantExpr::getBitCast(V, IntTy);
+ V = ConstantExpr::getICmp(CmpInst::ICMP_SGT, Constant::getNullValue(IntTy),
+ V);
+ return V;
}
// TODO: If the x86 backend knew how to convert a bool vector mask back to an
More information about the llvm-commits
mailing list