mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-08 19:25:47 +00:00
Remove AVX vpermil intrinsics. I removed their uses from clang headers and builtins a while back.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154985 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1091,20 +1091,6 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
|||||||
GCCBuiltin<"__builtin_ia32_vperm2f128_si256">,
|
GCCBuiltin<"__builtin_ia32_vperm2f128_si256">,
|
||||||
Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
|
Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
|
||||||
llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
|
llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
|
||||||
|
|
||||||
def int_x86_avx_vpermil_pd :
|
|
||||||
Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
|
|
||||||
llvm_i8_ty], [IntrNoMem]>;
|
|
||||||
def int_x86_avx_vpermil_ps :
|
|
||||||
Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
|
|
||||||
llvm_i8_ty], [IntrNoMem]>;
|
|
||||||
|
|
||||||
def int_x86_avx_vpermil_pd_256 :
|
|
||||||
Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
|
|
||||||
llvm_i8_ty], [IntrNoMem]>;
|
|
||||||
def int_x86_avx_vpermil_ps_256 :
|
|
||||||
Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
|
|
||||||
llvm_i8_ty], [IntrNoMem]>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vector blend
|
// Vector blend
|
||||||
|
@@ -9592,12 +9592,6 @@ X86TargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG) const
|
|||||||
case Intrinsic::x86_avx2_vperm2i128:
|
case Intrinsic::x86_avx2_vperm2i128:
|
||||||
return DAG.getNode(X86ISD::VPERM2X128, dl, Op.getValueType(),
|
return DAG.getNode(X86ISD::VPERM2X128, dl, Op.getValueType(),
|
||||||
Op.getOperand(1), Op.getOperand(2), Op.getOperand(3));
|
Op.getOperand(1), Op.getOperand(2), Op.getOperand(3));
|
||||||
case Intrinsic::x86_avx_vpermil_ps:
|
|
||||||
case Intrinsic::x86_avx_vpermil_pd:
|
|
||||||
case Intrinsic::x86_avx_vpermil_ps_256:
|
|
||||||
case Intrinsic::x86_avx_vpermil_pd_256:
|
|
||||||
return DAG.getNode(X86ISD::VPERMILP, dl, Op.getValueType(),
|
|
||||||
Op.getOperand(1), Op.getOperand(2));
|
|
||||||
case Intrinsic::x86_avx2_permd:
|
case Intrinsic::x86_avx2_permd:
|
||||||
case Intrinsic::x86_avx2_permps:
|
case Intrinsic::x86_avx2_permps:
|
||||||
// Operands intentionally swapped. Mask is last operand to intrinsic,
|
// Operands intentionally swapped. Mask is last operand to intrinsic,
|
||||||
|
@@ -18,9 +18,6 @@
|
|||||||
#include "llvm/LLVMContext.h"
|
#include "llvm/LLVMContext.h"
|
||||||
#include "llvm/Module.h"
|
#include "llvm/Module.h"
|
||||||
#include "llvm/IntrinsicInst.h"
|
#include "llvm/IntrinsicInst.h"
|
||||||
#include "llvm/ADT/DenseMap.h"
|
|
||||||
#include "llvm/ADT/SmallPtrSet.h"
|
|
||||||
#include "llvm/ADT/SmallVector.h"
|
|
||||||
#include "llvm/Support/CallSite.h"
|
#include "llvm/Support/CallSite.h"
|
||||||
#include "llvm/Support/CFG.h"
|
#include "llvm/Support/CFG.h"
|
||||||
#include "llvm/Support/ErrorHandling.h"
|
#include "llvm/Support/ErrorHandling.h"
|
||||||
@@ -59,7 +56,8 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) {
|
|||||||
if (Name.startswith("x86.sse2.pcmpeq.") ||
|
if (Name.startswith("x86.sse2.pcmpeq.") ||
|
||||||
Name.startswith("x86.sse2.pcmpgt.") ||
|
Name.startswith("x86.sse2.pcmpgt.") ||
|
||||||
Name.startswith("x86.avx2.pcmpeq.") ||
|
Name.startswith("x86.avx2.pcmpeq.") ||
|
||||||
Name.startswith("x86.avx2.pcmpgt.")) {
|
Name.startswith("x86.avx2.pcmpgt.") ||
|
||||||
|
Name.startswith("x86.avx.vpermil.")) {
|
||||||
NewFn = 0;
|
NewFn = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -121,7 +119,42 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
|
|||||||
// need to sign extend since icmp returns vector of i1
|
// need to sign extend since icmp returns vector of i1
|
||||||
Rep = Builder.CreateSExt(Rep, CI->getType(), "");
|
Rep = Builder.CreateSExt(Rep, CI->getType(), "");
|
||||||
} else {
|
} else {
|
||||||
llvm_unreachable("Unknown function for CallInst upgrade.");
|
bool PD128 = false, PD256 = false, PS128 = false, PS256 = false;
|
||||||
|
if (Name.startswith("llvm.x86.avx.vpermil.pd.256"))
|
||||||
|
PD256 = true;
|
||||||
|
else if (Name.startswith("llvm.x86.avx.vpermil.pd"))
|
||||||
|
PD128 = true;
|
||||||
|
else if (Name.startswith("llvm.x86.avx.vpermil.ps.256"))
|
||||||
|
PS256 = true;
|
||||||
|
else if (Name.startswith("llvm.x86.avx.vpermil.ps"))
|
||||||
|
PS128 = true;
|
||||||
|
|
||||||
|
if (PD256 || PD128 || PS256 || PS128) {
|
||||||
|
Value *Op0 = CI->getArgOperand(0);
|
||||||
|
unsigned Imm = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue();
|
||||||
|
SmallVector<Constant*, 8> Idxs;
|
||||||
|
|
||||||
|
if (PD128)
|
||||||
|
for (unsigned i = 0; i != 2; ++i)
|
||||||
|
Idxs.push_back(Builder.getInt32((Imm >> i) & 0x1));
|
||||||
|
else if (PD256)
|
||||||
|
for (unsigned l = 0; l != 4; l+=2)
|
||||||
|
for (unsigned i = 0; i != 2; ++i)
|
||||||
|
Idxs.push_back(Builder.getInt32(((Imm >> (l+i)) & 0x1) + l));
|
||||||
|
else if (PS128)
|
||||||
|
for (unsigned i = 0; i != 4; ++i)
|
||||||
|
Idxs.push_back(Builder.getInt32((Imm >> (2 * i)) & 0x3));
|
||||||
|
else if (PS256)
|
||||||
|
for (unsigned l = 0; l != 8; l+=4)
|
||||||
|
for (unsigned i = 0; i != 4; ++i)
|
||||||
|
Idxs.push_back(Builder.getInt32(((Imm >> (2 * i)) & 0x3) + l));
|
||||||
|
else
|
||||||
|
llvm_unreachable("Unexpected function");
|
||||||
|
|
||||||
|
Rep = Builder.CreateShuffleVector(Op0, Op0, ConstantVector::get(Idxs));
|
||||||
|
} else {
|
||||||
|
llvm_unreachable("Unknown function for CallInst upgrade.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CI->replaceAllUsesWith(Rep);
|
CI->replaceAllUsesWith(Rep);
|
||||||
|
Reference in New Issue
Block a user