X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FIR%2FAutoUpgrade.cpp;h=8de69203811d451e94d8c7cbd4f85ac21f9a4920;hb=428e9d76082e8cb8e08e4c9b8533f0ca0f715cdc;hp=bb23d2c97155d762ce0237460fa4944648c96de6;hpb=e75a8c3855273ffcc72461a3057e50bf0baee31f;p=oota-llvm.git diff --git a/lib/IR/AutoUpgrade.cpp b/lib/IR/AutoUpgrade.cpp index bb23d2c9715..8de69203811 100644 --- a/lib/IR/AutoUpgrade.cpp +++ b/lib/IR/AutoUpgrade.cpp @@ -62,21 +62,6 @@ static bool UpgradeX86IntrinsicsWith8BitMask(Function *F, Intrinsic::ID IID, return true; } -// Upgrade the declarations of AVX-512 cmp intrinsic functions whose 8-bit -// immediates have changed their type from i32 to i8. -static bool UpgradeAVX512CmpIntrinsic(Function *F, Intrinsic::ID IID, - Function *&NewFn) { - // Check that the last argument is an i32. - Type *LastArgType = F->getFunctionType()->getParamType(2); - if (!LastArgType->isIntegerTy(32)) - return false; - - // Move this function aside and map down. - F->setName(F->getName() + ".old"); - NewFn = Intrinsic::getDeclaration(F->getParent(), IID); - return true; -} - static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) { assert(F && "Illegal to upgrade a non-existent Function."); @@ -211,88 +196,6 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) { return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_avx2_mpsadbw, NewFn); - if (Name == "x86.avx512.mask.cmp.ps.512") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_ps_512, - NewFn); - if (Name == "x86.avx512.mask.cmp.pd.512") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_pd_512, - NewFn); - - if (Name == "x86.avx512.mask.cmp.b.512") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_b_512, - NewFn); - if (Name == "x86.avx512.mask.cmp.w.512") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_w_512, - NewFn); - if (Name == "x86.avx512.mask.cmp.d.512") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_d_512, - NewFn); - if (Name == "x86.avx512.mask.cmp.q.512") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_q_512, - NewFn); - if (Name == "x86.avx512.mask.ucmp.b.512") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_ucmp_b_512, - NewFn); - if (Name == "x86.avx512.mask.ucmp.w.512") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_ucmp_w_512, - NewFn); - if (Name == "x86.avx512.mask.ucmp.d.512") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_ucmp_d_512, - NewFn); - if (Name == "x86.avx512.mask.ucmp.q.512") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_ucmp_q_512, - NewFn); - - if (Name == "x86.avx512.mask.cmp.b.256") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_b_256, - NewFn); - if (Name == "x86.avx512.mask.cmp.w.256") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_w_256, - NewFn); - if (Name == "x86.avx512.mask.cmp.d.256") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_d_256, - NewFn); - if (Name == "x86.avx512.mask.cmp.q.256") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_q_256, - NewFn); - if (Name == "x86.avx512.mask.ucmp.b.256") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_ucmp_b_256, - NewFn); - if (Name == "x86.avx512.mask.ucmp.w.256") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_ucmp_w_256, - NewFn); - if (Name == "x86.avx512.mask.ucmp.d.256") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_ucmp_d_256, - NewFn); - if (Name == "x86.avx512.mask.ucmp.q.256") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_ucmp_q_256, - NewFn); - - if (Name == "x86.avx512.mask.cmp.b.128") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_b_128, - NewFn); - if (Name == "x86.avx512.mask.cmp.w.128") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_w_128, - NewFn); - if (Name == "x86.avx512.mask.cmp.d.128") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_d_128, - NewFn); - if (Name == "x86.avx512.mask.cmp.q.128") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_cmp_q_128, - NewFn); - if (Name == "x86.avx512.mask.ucmp.b.128") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_ucmp_b_128, - NewFn); - if (Name == "x86.avx512.mask.ucmp.w.128") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_ucmp_w_128, - NewFn); - if (Name == "x86.avx512.mask.ucmp.d.128") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_ucmp_d_128, - NewFn); - if (Name == "x86.avx512.mask.ucmp.q.128") - return UpgradeAVX512CmpIntrinsic(F, Intrinsic::x86_avx512_mask_ucmp_q_128, - NewFn); - // frcz.ss/sd may need to have an argument dropped if (Name.startswith("x86.xop.vfrcz.ss") && F->arg_size() == 2) { F->setName(Name + ".old"); @@ -767,16 +670,14 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) { // Old intrinsic, add bitcasts Value *Arg1 = CI->getArgOperand(1); - Value *BC0 = - Builder.CreateBitCast(Arg0, - VectorType::get(Type::getInt64Ty(C), 2), - "cast"); - Value *BC1 = - Builder.CreateBitCast(Arg1, - VectorType::get(Type::getInt64Ty(C), 2), - "cast"); + Type *NewVecTy = VectorType::get(Type::getInt64Ty(C), 2); + + Value *BC0 = Builder.CreateBitCast(Arg0, NewVecTy, "cast"); + Value *BC1 = Builder.CreateBitCast(Arg1, NewVecTy, "cast"); - CallInst* NewCall = Builder.CreateCall2(NewFn, BC0, BC1, Name); + Type *Ty[] = {NewVecTy, NewVecTy}; + CallInst *NewCall = Builder.CreateCall2( + FunctionType::get(CI->getType(), Ty, false), NewFn, BC0, BC1, Name); CI->replaceAllUsesWith(NewCall); CI->eraseFromParent(); return; @@ -801,21 +702,6 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) { CI->eraseFromParent(); return; } - case Intrinsic::x86_avx512_mask_cmp_ps_512: - case Intrinsic::x86_avx512_mask_cmp_pd_512: { - // Need to truncate the last argument from i32 to i8 -- this argument models - // an inherently 8-bit immediate operand to these x86 instructions. - SmallVector Args(CI->arg_operands().begin(), - CI->arg_operands().end()); - - // Replace the last argument with a trunc. - Args[2] = Builder.CreateTrunc(Args[2], Type::getInt8Ty(C), "trunc"); - - CallInst *NewCall = Builder.CreateCall(NewFn, Args); - CI->replaceAllUsesWith(NewCall); - CI->eraseFromParent(); - return; - } } }