From bb5b83d3d18d7d1b36a1cf4e87ab3ed6cf47988e Mon Sep 17 00:00:00 2001 From: Bjorn Pettersson Date: Mon, 24 Jun 2019 12:07:17 +0000 Subject: [PATCH] [ConstantFolding] Use hasVectorInstrinsicScalarOpd. NFC Summary: Use the hasVectorInstrinsicScalarOpd helper function in ConstantFoldVectorCall. Reviewers: rengolin, RKSimon, dblaikie Reviewed By: rengolin, RKSimon Subscribers: tschuett, hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D63705 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364178 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/ConstantFolding.cpp | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/lib/Analysis/ConstantFolding.cpp b/lib/Analysis/ConstantFolding.cpp index 9372904f769..a5128342a7a 100644 --- a/lib/Analysis/ConstantFolding.cpp +++ b/lib/Analysis/ConstantFolding.cpp @@ -25,6 +25,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/Analysis/ValueTracking.h" +#include "llvm/Analysis/VectorUtils.h" #include "llvm/Config/config.h" #include "llvm/IR/Constant.h" #include "llvm/IR/Constants.h" @@ -1649,7 +1650,8 @@ static bool getConstIntOrUndef(Value *Op, const APInt *&C) { return false; } -static Constant *ConstantFoldScalarCall1(StringRef Name, unsigned IntrinsicID, +static Constant *ConstantFoldScalarCall1(StringRef Name, + Intrinsic::ID IntrinsicID, Type *Ty, ArrayRef Operands, const TargetLibraryInfo *TLI, @@ -1943,7 +1945,8 @@ static Constant *ConstantFoldScalarCall1(StringRef Name, unsigned IntrinsicID, return nullptr; } -static Constant *ConstantFoldScalarCall2(StringRef Name, unsigned IntrinsicID, +static Constant *ConstantFoldScalarCall2(StringRef Name, + Intrinsic::ID IntrinsicID, Type *Ty, ArrayRef Operands, const TargetLibraryInfo *TLI, @@ -2172,7 +2175,8 @@ static Constant *ConstantFoldScalarCall2(StringRef Name, unsigned IntrinsicID, return nullptr; } -static Constant *ConstantFoldScalarCall3(StringRef Name, unsigned IntrinsicID, +static Constant *ConstantFoldScalarCall3(StringRef Name, + Intrinsic::ID IntrinsicID, Type *Ty, ArrayRef Operands, const TargetLibraryInfo *TLI, @@ -2270,7 +2274,8 @@ static Constant *ConstantFoldScalarCall3(StringRef Name, unsigned IntrinsicID, return nullptr; } -static Constant *ConstantFoldScalarCall(StringRef Name, unsigned IntrinsicID, +static Constant *ConstantFoldScalarCall(StringRef Name, + Intrinsic::ID IntrinsicID, Type *Ty, ArrayRef Operands, const TargetLibraryInfo *TLI, @@ -2287,7 +2292,8 @@ static Constant *ConstantFoldScalarCall(StringRef Name, unsigned IntrinsicID, return nullptr; } -static Constant *ConstantFoldVectorCall(StringRef Name, unsigned IntrinsicID, +static Constant *ConstantFoldVectorCall(StringRef Name, + Intrinsic::ID IntrinsicID, VectorType *VTy, ArrayRef Operands, const DataLayout &DL, @@ -2339,17 +2345,8 @@ static Constant *ConstantFoldVectorCall(StringRef Name, unsigned IntrinsicID, for (unsigned I = 0, E = VTy->getNumElements(); I != E; ++I) { // Gather a column of constants. for (unsigned J = 0, JE = Operands.size(); J != JE; ++J) { - // These intrinsics use a scalar type for their second argument. - if (J == 1 && - (IntrinsicID == Intrinsic::cttz || IntrinsicID == Intrinsic::ctlz || - IntrinsicID == Intrinsic::powi)) { - Lane[J] = Operands[J]; - continue; - } - // These intrinsics use a scalar type for their third argument. - if (J == 2 && - (IntrinsicID == Intrinsic::smul_fix || - IntrinsicID == Intrinsic::smul_fix_sat)) { + // Some intrinsics use a scalar type for certain arguments. + if (hasVectorInstrinsicScalarOpd(IntrinsicID, J)) { Lane[J] = Operands[J]; continue; } -- 2.50.1