Lines Matching +full:get +full:- +full:intrinsic
1 //===-- AutoUpgrade.cpp - Implement auto-upgrade helper functions ---------===//
8 //===----------------------------------------------------------------------===//
10 // This file implements the auto-upgrade helper functions.
14 //===----------------------------------------------------------------------===//
36 static bool UpgradeSSE41Function(Function* F, Intrinsic::ID IID, in UpgradeSSE41Function()
40 Type *Arg0Type = F->getFunctionType()->getParamType(0); in UpgradeSSE41Function()
41 if (Arg0Type != VectorType::get(Type::getFloatTy(F->getContext()), 4)) in UpgradeSSE41Function()
45 F->setName(F->getName() + ".old"); in UpgradeSSE41Function()
46 NewFn = Intrinsic::getDeclaration(F->getParent(), IID); in UpgradeSSE41Function()
50 // Upgrade the declarations of intrinsic functions whose 8-bit immediate mask
52 static bool UpgradeX86IntrinsicsWith8BitMask(Function *F, Intrinsic::ID IID, in UpgradeX86IntrinsicsWith8BitMask()
55 Type *LastArgType = F->getFunctionType()->getParamType( in UpgradeX86IntrinsicsWith8BitMask()
56 F->getFunctionType()->getNumParams() - 1); in UpgradeX86IntrinsicsWith8BitMask()
57 if (!LastArgType->isIntegerTy(32)) in UpgradeX86IntrinsicsWith8BitMask()
61 F->setName(F->getName() + ".old"); in UpgradeX86IntrinsicsWith8BitMask()
62 NewFn = Intrinsic::getDeclaration(F->getParent(), IID); in UpgradeX86IntrinsicsWith8BitMask()
67 assert(F && "Illegal to upgrade a non-existent Function."); in UpgradeIntrinsicFunction1()
70 StringRef Name = F->getName(); in UpgradeIntrinsicFunction1()
80 F->arg_begin()->getType(), in UpgradeIntrinsicFunction1()
81 Type::getInt1Ty(F->getContext()) in UpgradeIntrinsicFunction1()
83 // Can't use Intrinsic::getDeclaration here as it adds a ".i1" to in UpgradeIntrinsicFunction1()
86 FunctionType* fType = FunctionType::get(F->getReturnType(), args, false); in UpgradeIntrinsicFunction1()
87 NewFn = Function::Create(fType, F->getLinkage(), in UpgradeIntrinsicFunction1()
88 "llvm.ctlz." + Name.substr(14), F->getParent()); in UpgradeIntrinsicFunction1()
92 NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::ctpop, in UpgradeIntrinsicFunction1()
93 F->arg_begin()->getType()); in UpgradeIntrinsicFunction1()
96 Regex vldRegex("^arm\\.neon\\.vld([1234]|[234]lane)\\.v[a-z0-9]*$"); in UpgradeIntrinsicFunction1()
98 auto fArgs = F->getFunctionType()->params(); in UpgradeIntrinsicFunction1()
100 // Can't use Intrinsic::getDeclaration here as the return types might in UpgradeIntrinsicFunction1()
102 FunctionType* fType = FunctionType::get(F->getReturnType(), Tys, false); in UpgradeIntrinsicFunction1()
103 NewFn = Function::Create(fType, F->getLinkage(), in UpgradeIntrinsicFunction1()
104 "llvm." + Name + ".p0i8", F->getParent()); in UpgradeIntrinsicFunction1()
107 Regex vstRegex("^arm\\.neon\\.vst([1234]|[234]lane)\\.v[a-z0-9]*$"); in UpgradeIntrinsicFunction1()
109 static const Intrinsic::ID StoreInts[] = {Intrinsic::arm_neon_vst1, in UpgradeIntrinsicFunction1()
110 Intrinsic::arm_neon_vst2, in UpgradeIntrinsicFunction1()
111 Intrinsic::arm_neon_vst3, in UpgradeIntrinsicFunction1()
112 Intrinsic::arm_neon_vst4}; in UpgradeIntrinsicFunction1()
114 static const Intrinsic::ID StoreLaneInts[] = { in UpgradeIntrinsicFunction1()
115 Intrinsic::arm_neon_vst2lane, Intrinsic::arm_neon_vst3lane, in UpgradeIntrinsicFunction1()
116 Intrinsic::arm_neon_vst4lane in UpgradeIntrinsicFunction1()
119 auto fArgs = F->getFunctionType()->params(); in UpgradeIntrinsicFunction1()
122 NewFn = Intrinsic::getDeclaration(F->getParent(), in UpgradeIntrinsicFunction1()
123 StoreInts[fArgs.size() - 3], Tys); in UpgradeIntrinsicFunction1()
125 NewFn = Intrinsic::getDeclaration(F->getParent(), in UpgradeIntrinsicFunction1()
126 StoreLaneInts[fArgs.size() - 5], Tys); in UpgradeIntrinsicFunction1()
130 NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::thread_pointer); in UpgradeIntrinsicFunction1()
137 if (Name.startswith("ctlz.") && F->arg_size() == 1) { in UpgradeIntrinsicFunction1()
138 F->setName(Name + ".old"); in UpgradeIntrinsicFunction1()
139 NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::ctlz, in UpgradeIntrinsicFunction1()
140 F->arg_begin()->getType()); in UpgradeIntrinsicFunction1()
143 if (Name.startswith("cttz.") && F->arg_size() == 1) { in UpgradeIntrinsicFunction1()
144 F->setName(Name + ".old"); in UpgradeIntrinsicFunction1()
145 NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::cttz, in UpgradeIntrinsicFunction1()
146 F->arg_begin()->getType()); in UpgradeIntrinsicFunction1()
154 Type *Tys[] = { F->getReturnType(), F->arg_begin()->getType() }; in UpgradeIntrinsicFunction1()
155 if (F->getName() != Intrinsic::getName(Intrinsic::masked_load, Tys)) { in UpgradeIntrinsicFunction1()
156 F->setName(Name + ".old"); in UpgradeIntrinsicFunction1()
157 NewFn = Intrinsic::getDeclaration(F->getParent(), in UpgradeIntrinsicFunction1()
158 Intrinsic::masked_load, in UpgradeIntrinsicFunction1()
164 auto Args = F->getFunctionType()->params(); in UpgradeIntrinsicFunction1()
166 if (F->getName() != Intrinsic::getName(Intrinsic::masked_store, Tys)) { in UpgradeIntrinsicFunction1()
167 F->setName(Name + ".old"); in UpgradeIntrinsicFunction1()
168 NewFn = Intrinsic::getDeclaration(F->getParent(), in UpgradeIntrinsicFunction1()
169 Intrinsic::masked_store, in UpgradeIntrinsicFunction1()
180 if (F->arg_size() == 2 && Name.startswith("objectsize.")) { in UpgradeIntrinsicFunction1()
181 Type *Tys[2] = { F->getReturnType(), F->arg_begin()->getType() }; in UpgradeIntrinsicFunction1()
182 if (F->getName() != Intrinsic::getName(Intrinsic::objectsize, Tys)) { in UpgradeIntrinsicFunction1()
183 F->setName(Name + ".old"); in UpgradeIntrinsicFunction1()
184 NewFn = Intrinsic::getDeclaration(F->getParent(), in UpgradeIntrinsicFunction1()
185 Intrinsic::objectsize, Tys); in UpgradeIntrinsicFunction1()
303 (Name.startswith("xop.vpcom") && F->arg_size() == 2))) { in UpgradeIntrinsicFunction1()
310 return UpgradeSSE41Function(F, Intrinsic::x86_sse41_ptestc, NewFn); in UpgradeIntrinsicFunction1()
312 return UpgradeSSE41Function(F, Intrinsic::x86_sse41_ptestz, NewFn); in UpgradeIntrinsicFunction1()
314 return UpgradeSSE41Function(F, Intrinsic::x86_sse41_ptestnzc, NewFn); in UpgradeIntrinsicFunction1()
319 return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_sse41_insertps, in UpgradeIntrinsicFunction1()
322 return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_sse41_dppd, in UpgradeIntrinsicFunction1()
325 return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_sse41_dpps, in UpgradeIntrinsicFunction1()
328 return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_sse41_mpsadbw, in UpgradeIntrinsicFunction1()
331 return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_avx_dp_ps_256, in UpgradeIntrinsicFunction1()
334 return UpgradeX86IntrinsicsWith8BitMask(F, Intrinsic::x86_avx2_mpsadbw, in UpgradeIntrinsicFunction1()
338 if (IsX86 && Name.startswith("xop.vfrcz.ss") && F->arg_size() == 2) { in UpgradeIntrinsicFunction1()
339 F->setName(Name + ".old"); in UpgradeIntrinsicFunction1()
340 NewFn = Intrinsic::getDeclaration(F->getParent(), in UpgradeIntrinsicFunction1()
341 Intrinsic::x86_xop_vfrcz_ss); in UpgradeIntrinsicFunction1()
344 if (IsX86 && Name.startswith("xop.vfrcz.sd") && F->arg_size() == 2) { in UpgradeIntrinsicFunction1()
345 F->setName(Name + ".old"); in UpgradeIntrinsicFunction1()
346 NewFn = Intrinsic::getDeclaration(F->getParent(), in UpgradeIntrinsicFunction1()
347 Intrinsic::x86_xop_vfrcz_sd); in UpgradeIntrinsicFunction1()
353 Intrinsic::ID ShiftID; in UpgradeIntrinsicFunction1()
355 ShiftID = Name[18] == 'd' ? Intrinsic::x86_avx512_mask_psll_di_512 in UpgradeIntrinsicFunction1()
356 : Intrinsic::x86_avx512_mask_psll_qi_512; in UpgradeIntrinsicFunction1()
358 ShiftID = Name[18] == 'd' ? Intrinsic::x86_avx512_mask_psra_di_512 in UpgradeIntrinsicFunction1()
359 : Intrinsic::x86_avx512_mask_psra_qi_512; in UpgradeIntrinsicFunction1()
361 ShiftID = Name[18] == 'd' ? Intrinsic::x86_avx512_mask_psrl_di_512 in UpgradeIntrinsicFunction1()
362 : Intrinsic::x86_avx512_mask_psrl_qi_512; in UpgradeIntrinsicFunction1()
363 F->setName("llvm.x86." + Name + ".old"); in UpgradeIntrinsicFunction1()
364 NewFn = Intrinsic::getDeclaration(F->getParent(), ShiftID); in UpgradeIntrinsicFunction1()
369 F->setName("llvm.x86.fma" + Name.substr(5)); in UpgradeIntrinsicFunction1()
375 auto Params = F->getFunctionType()->params(); in UpgradeIntrinsicFunction1()
377 if (Idx->getScalarType()->isFloatingPointTy()) { in UpgradeIntrinsicFunction1()
378 F->setName("llvm.x86." + Name + ".old"); in UpgradeIntrinsicFunction1()
379 unsigned IdxSize = Idx->getPrimitiveSizeInBits(); in UpgradeIntrinsicFunction1()
380 unsigned EltSize = Idx->getScalarSizeInBits(); in UpgradeIntrinsicFunction1()
381 Intrinsic::ID Permil2ID; in UpgradeIntrinsicFunction1()
383 Permil2ID = Intrinsic::x86_xop_vpermil2pd; in UpgradeIntrinsicFunction1()
385 Permil2ID = Intrinsic::x86_xop_vpermil2ps; in UpgradeIntrinsicFunction1()
387 Permil2ID = Intrinsic::x86_xop_vpermil2pd_256; in UpgradeIntrinsicFunction1()
389 Permil2ID = Intrinsic::x86_xop_vpermil2ps_256; in UpgradeIntrinsicFunction1()
390 NewFn = Intrinsic::getDeclaration(F->getParent(), Permil2ID); in UpgradeIntrinsicFunction1()
399 // to both detect an intrinsic which needs upgrading, and to provide the in UpgradeIntrinsicFunction1()
400 // upgraded form of the intrinsic. We should perhaps have two separate in UpgradeIntrinsicFunction1()
408 assert(F != NewFn && "Intrinsic function upgraded to the same function"); in UpgradeIntrinsicFunction()
410 // Upgrade intrinsic attributes. This does not change the function. in UpgradeIntrinsicFunction()
413 if (Intrinsic::ID id = F->getIntrinsicID()) in UpgradeIntrinsicFunction()
414 F->setAttributes(Intrinsic::getAttributes(F->getContext(), id)); in UpgradeIntrinsicFunction()
427 Type *ResultTy = Op->getType(); in UpgradeX86PSLLDQIntrinsics()
428 unsigned NumElts = ResultTy->getVectorNumElements() * 8; in UpgradeX86PSLLDQIntrinsics()
430 // Bitcast from a 64-bit element type to a byte element type. in UpgradeX86PSLLDQIntrinsics()
431 Type *VecTy = VectorType::get(Builder.getInt8Ty(), NumElts); in UpgradeX86PSLLDQIntrinsics()
441 // 256/512-bit version is split into 2/4 16-byte lanes. in UpgradeX86PSLLDQIntrinsics()
444 unsigned Idx = NumElts + i - Shift; in UpgradeX86PSLLDQIntrinsics()
446 Idx -= NumElts - 16; // end of lane, switch operand. in UpgradeX86PSLLDQIntrinsics()
453 // Bitcast back to a 64-bit element type. in UpgradeX86PSLLDQIntrinsics()
461 Type *ResultTy = Op->getType(); in UpgradeX86PSRLDQIntrinsics()
462 unsigned NumElts = ResultTy->getVectorNumElements() * 8; in UpgradeX86PSRLDQIntrinsics()
464 // Bitcast from a 64-bit element type to a byte element type. in UpgradeX86PSRLDQIntrinsics()
465 Type *VecTy = VectorType::get(Builder.getInt8Ty(), NumElts); in UpgradeX86PSRLDQIntrinsics()
475 // 256/512-bit version is split into 2/4 16-byte lanes. in UpgradeX86PSRLDQIntrinsics()
480 Idx += NumElts - 16; // end of lane, switch operand. in UpgradeX86PSRLDQIntrinsics()
487 // Bitcast back to a 64-bit element type. in UpgradeX86PSRLDQIntrinsics()
493 llvm::VectorType *MaskTy = llvm::VectorType::get(Builder.getInt1Ty(), in getX86MaskVec()
494 cast<IntegerType>(Mask->getType())->getBitWidth()); in getX86MaskVec()
515 if (C->isAllOnesValue()) in EmitX86Select()
518 Mask = getX86MaskVec(Builder, Mask, Op0->getType()->getVectorNumElements()); in EmitX86Select()
525 unsigned ShiftVal = cast<llvm::ConstantInt>(Shift)->getZExtValue(); in UpgradeX86PALIGNRIntrinsics()
527 unsigned NumElts = Op0->getType()->getVectorNumElements(); in UpgradeX86PALIGNRIntrinsics()
533 return llvm::Constant::getNullValue(Op0->getType()); in UpgradeX86PALIGNRIntrinsics()
538 ShiftVal -= 16; in UpgradeX86PALIGNRIntrinsics()
540 Op0 = llvm::Constant::getNullValue(Op0->getType()); in UpgradeX86PALIGNRIntrinsics()
544 // 256-bit palignr operates on 128-bit lanes so we need to handle that in UpgradeX86PALIGNRIntrinsics()
549 Idx += NumElts - 16; // End of lane, switch operand. in UpgradeX86PALIGNRIntrinsics()
566 llvm::PointerType::getUnqual(Data->getType())); in UpgradeMaskedStore()
568 Aligned ? cast<VectorType>(Data->getType())->getBitWidth() / 8 : 1; in UpgradeMaskedStore()
572 if (C->isAllOnesValue()) in UpgradeMaskedStore()
576 unsigned NumElts = Data->getType()->getVectorNumElements(); in UpgradeMaskedStore()
586 llvm::PointerType::getUnqual(Passthru->getType())); in UpgradeMaskedLoad()
588 Aligned ? cast<VectorType>(Passthru->getType())->getBitWidth() / 8 : 1; in UpgradeMaskedLoad()
592 if (C->isAllOnesValue()) in UpgradeMaskedLoad()
596 unsigned NumElts = Passthru->getType()->getVectorNumElements(); in UpgradeMaskedLoad()
612 unsigned NumElts = Op0->getType()->getVectorNumElements(); in upgradeMaskedCompare()
617 if (!C || !C->isAllOnesValue()) in upgradeMaskedCompare()
627 Constant::getNullValue(Cmp->getType()), in upgradeMaskedCompare()
630 return Builder.CreateBitCast(Cmp, IntegerType::get(CI.getContext(), in upgradeMaskedCompare()
634 /// Upgrade a call to an old intrinsic. All argument and return casting must be
637 Function *F = CI->getCalledFunction(); in UpgradeIntrinsicCall()
638 LLVMContext &C = CI->getContext(); in UpgradeIntrinsicCall()
640 Builder.SetInsertPoint(CI->getParent(), CI->getIterator()); in UpgradeIntrinsicCall()
642 assert(F && "Intrinsic call is not direct?"); in UpgradeIntrinsicCall()
645 // Get the Function's name. in UpgradeIntrinsicCall()
646 StringRef Name = F->getName(); in UpgradeIntrinsicCall()
648 assert(Name.startswith("llvm.") && "Intrinsic doesn't start with 'llvm.'"); in UpgradeIntrinsicCall()
659 Rep = Builder.CreateICmpEQ(CI->getArgOperand(0), CI->getArgOperand(1), in UpgradeIntrinsicCall()
661 Rep = Builder.CreateSExt(Rep, CI->getType(), ""); in UpgradeIntrinsicCall()
664 Rep = Builder.CreateICmpSGT(CI->getArgOperand(0), CI->getArgOperand(1), in UpgradeIntrinsicCall()
666 Rep = Builder.CreateSExt(Rep, CI->getType(), ""); in UpgradeIntrinsicCall()
697 Value *Src = CI->getArgOperand(0); in UpgradeIntrinsicCall()
698 VectorType *SrcTy = cast<VectorType>(Src->getType()); in UpgradeIntrinsicCall()
699 VectorType *DstTy = cast<VectorType>(CI->getType()); in UpgradeIntrinsicCall()
700 Rep = CI->getArgOperand(0); in UpgradeIntrinsicCall()
702 unsigned NumDstElts = DstTy->getNumElements(); in UpgradeIntrinsicCall()
703 if (NumDstElts < SrcTy->getNumElements()) { in UpgradeIntrinsicCall()
706 Rep = Builder.CreateShuffleVector(Rep, UndefValue::get(SrcTy), in UpgradeIntrinsicCall()
718 Value *Src = CI->getArgOperand(0); in UpgradeIntrinsicCall()
719 VectorType *DstTy = cast<VectorType>(CI->getType()); in UpgradeIntrinsicCall()
722 Module *M = F->getParent(); in UpgradeIntrinsicCall()
725 ConstantAsMetadata::get(ConstantInt::get(Type::getInt32Ty(C), 1))); in UpgradeIntrinsicCall()
726 MDNode *Node = MDNode::get(C, Elts); in UpgradeIntrinsicCall()
728 Value *Arg0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
729 Value *Arg1 = CI->getArgOperand(1); in UpgradeIntrinsicCall()
733 Type *SrcEltTy = cast<VectorType>(Arg1->getType())->getElementType(); in UpgradeIntrinsicCall()
740 SI->setMetadata(M->getMDKindID("nontemporal"), Node); in UpgradeIntrinsicCall()
742 // Remove intrinsic. in UpgradeIntrinsicCall()
743 CI->eraseFromParent(); in UpgradeIntrinsicCall()
747 Module *M = F->getParent(); in UpgradeIntrinsicCall()
750 ConstantAsMetadata::get(ConstantInt::get(Type::getInt32Ty(C), 1))); in UpgradeIntrinsicCall()
751 MDNode *Node = MDNode::get(C, Elts); in UpgradeIntrinsicCall()
753 Value *Arg0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
754 Value *Arg1 = CI->getArgOperand(1); in UpgradeIntrinsicCall()
758 PointerType::getUnqual(Arg1->getType()), in UpgradeIntrinsicCall()
760 VectorType *VTy = cast<VectorType>(Arg1->getType()); in UpgradeIntrinsicCall()
762 VTy->getBitWidth() / 8); in UpgradeIntrinsicCall()
763 SI->setMetadata(M->getMDKindID("nontemporal"), Node); in UpgradeIntrinsicCall()
765 // Remove intrinsic. in UpgradeIntrinsicCall()
766 CI->eraseFromParent(); in UpgradeIntrinsicCall()
769 Value *Arg0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
770 Value *Arg1 = CI->getArgOperand(1); in UpgradeIntrinsicCall()
772 Type *NewVecTy = VectorType::get(Type::getInt64Ty(C), 2); in UpgradeIntrinsicCall()
776 PointerType::getUnqual(Elt->getType()), in UpgradeIntrinsicCall()
780 // Remove intrinsic. in UpgradeIntrinsicCall()
781 CI->eraseFromParent(); in UpgradeIntrinsicCall()
786 Value *Arg0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
787 Value *Arg1 = CI->getArgOperand(1); in UpgradeIntrinsicCall()
790 PointerType::getUnqual(Arg1->getType()), in UpgradeIntrinsicCall()
794 // Remove intrinsic. in UpgradeIntrinsicCall()
795 CI->eraseFromParent(); in UpgradeIntrinsicCall()
802 UpgradeMaskedStore(Builder, CI->getArgOperand(0), CI->getArgOperand(1), in UpgradeIntrinsicCall()
803 CI->getArgOperand(2), /*Aligned*/false); in UpgradeIntrinsicCall()
805 // Remove intrinsic. in UpgradeIntrinsicCall()
806 CI->eraseFromParent(); in UpgradeIntrinsicCall()
813 UpgradeMaskedStore(Builder, CI->getArgOperand(0), CI->getArgOperand(1), in UpgradeIntrinsicCall()
814 CI->getArgOperand(2), /*Aligned*/true); in UpgradeIntrinsicCall()
816 // Remove intrinsic. in UpgradeIntrinsicCall()
817 CI->eraseFromParent(); in UpgradeIntrinsicCall()
824 Rep = UpgradeMaskedLoad(Builder, CI->getArgOperand(0), in UpgradeIntrinsicCall()
825 CI->getArgOperand(1), CI->getArgOperand(2), in UpgradeIntrinsicCall()
832 Rep = UpgradeMaskedLoad(Builder, CI->getArgOperand(0), in UpgradeIntrinsicCall()
833 CI->getArgOperand(1),CI->getArgOperand(2), in UpgradeIntrinsicCall()
836 Intrinsic::ID intID; in UpgradeIntrinsicCall()
838 intID = Intrinsic::x86_xop_vpcomub; in UpgradeIntrinsicCall()
840 intID = Intrinsic::x86_xop_vpcomuw; in UpgradeIntrinsicCall()
842 intID = Intrinsic::x86_xop_vpcomud; in UpgradeIntrinsicCall()
844 intID = Intrinsic::x86_xop_vpcomuq; in UpgradeIntrinsicCall()
846 intID = Intrinsic::x86_xop_vpcomb; in UpgradeIntrinsicCall()
848 intID = Intrinsic::x86_xop_vpcomw; in UpgradeIntrinsicCall()
850 intID = Intrinsic::x86_xop_vpcomd; in UpgradeIntrinsicCall()
852 intID = Intrinsic::x86_xop_vpcomq; in UpgradeIntrinsicCall()
877 Function *VPCOM = Intrinsic::getDeclaration(F->getParent(), intID); in UpgradeIntrinsicCall()
879 Builder.CreateCall(VPCOM, {CI->getArgOperand(0), CI->getArgOperand(1), in UpgradeIntrinsicCall()
882 Value *Arg0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
883 Value *Arg1 = CI->getArgOperand(1); in UpgradeIntrinsicCall()
884 Value *Sel = CI->getArgOperand(2); in UpgradeIntrinsicCall()
885 unsigned NumElts = CI->getType()->getVectorNumElements(); in UpgradeIntrinsicCall()
886 Constant *MinusOne = ConstantVector::getSplat(NumElts, Builder.getInt64(-1)); in UpgradeIntrinsicCall()
892 Function *CRC32 = Intrinsic::getDeclaration(F->getParent(), in UpgradeIntrinsicCall()
893 Intrinsic::x86_sse42_crc32_32_8); in UpgradeIntrinsicCall()
894 Value *Trunc0 = Builder.CreateTrunc(CI->getArgOperand(0), Type::getInt32Ty(C)); in UpgradeIntrinsicCall()
895 Rep = Builder.CreateCall(CRC32, {Trunc0, CI->getArgOperand(1)}); in UpgradeIntrinsicCall()
896 Rep = Builder.CreateZExt(Rep, CI->getType(), ""); in UpgradeIntrinsicCall()
899 Type *VecTy = CI->getType(); in UpgradeIntrinsicCall()
900 Type *EltTy = VecTy->getVectorElementType(); in UpgradeIntrinsicCall()
901 unsigned EltNum = VecTy->getVectorNumElements(); in UpgradeIntrinsicCall()
902 Value *Cast = Builder.CreateBitCast(CI->getArgOperand(0), in UpgradeIntrinsicCall()
903 EltTy->getPointerTo()); in UpgradeIntrinsicCall()
906 Rep = UndefValue::get(VecTy); in UpgradeIntrinsicCall()
909 ConstantInt::get(I32Ty, I)); in UpgradeIntrinsicCall()
914 VectorType *SrcTy = cast<VectorType>(CI->getArgOperand(0)->getType()); in UpgradeIntrinsicCall()
915 VectorType *DstTy = cast<VectorType>(CI->getType()); in UpgradeIntrinsicCall()
916 unsigned NumDstElts = DstTy->getNumElements(); in UpgradeIntrinsicCall()
924 CI->getArgOperand(0), UndefValue::get(SrcTy), ShuffleMask); in UpgradeIntrinsicCall()
931 Type *VT = VectorType::get(Type::getInt64Ty(C), 2); in UpgradeIntrinsicCall()
932 Value *Op = Builder.CreatePointerCast(CI->getArgOperand(0), in UpgradeIntrinsicCall()
936 Rep = Builder.CreateShuffleVector(Load, UndefValue::get(Load->getType()), in UpgradeIntrinsicCall()
943 Value *Op = CI->getArgOperand(0); in UpgradeIntrinsicCall()
944 unsigned NumElts = CI->getType()->getVectorNumElements(); in UpgradeIntrinsicCall()
945 Type *MaskTy = VectorType::get(Type::getInt32Ty(C), NumElts); in UpgradeIntrinsicCall()
946 Rep = Builder.CreateShuffleVector(Op, UndefValue::get(Op->getType()), in UpgradeIntrinsicCall()
949 if (CI->getNumArgOperands() == 3) in UpgradeIntrinsicCall()
950 Rep = EmitX86Select(Builder, CI->getArgOperand(2), Rep, in UpgradeIntrinsicCall()
951 CI->getArgOperand(1)); in UpgradeIntrinsicCall()
953 Rep = UpgradeX86PALIGNRIntrinsics(Builder, CI->getArgOperand(0), in UpgradeIntrinsicCall()
954 CI->getArgOperand(1), in UpgradeIntrinsicCall()
955 CI->getArgOperand(2), in UpgradeIntrinsicCall()
956 CI->getArgOperand(3), in UpgradeIntrinsicCall()
957 CI->getArgOperand(4)); in UpgradeIntrinsicCall()
960 // 128/256-bit shift left specified in bits. in UpgradeIntrinsicCall()
961 unsigned Shift = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue(); in UpgradeIntrinsicCall()
962 Rep = UpgradeX86PSLLDQIntrinsics(Builder, CI->getArgOperand(0), in UpgradeIntrinsicCall()
966 // 128/256-bit shift right specified in bits. in UpgradeIntrinsicCall()
967 unsigned Shift = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue(); in UpgradeIntrinsicCall()
968 Rep = UpgradeX86PSRLDQIntrinsics(Builder, CI->getArgOperand(0), in UpgradeIntrinsicCall()
973 // 128/256/512-bit shift left specified in bytes. in UpgradeIntrinsicCall()
974 unsigned Shift = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue(); in UpgradeIntrinsicCall()
975 Rep = UpgradeX86PSLLDQIntrinsics(Builder, CI->getArgOperand(0), Shift); in UpgradeIntrinsicCall()
979 // 128/256/512-bit shift right specified in bytes. in UpgradeIntrinsicCall()
980 unsigned Shift = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue(); in UpgradeIntrinsicCall()
981 Rep = UpgradeX86PSRLDQIntrinsics(Builder, CI->getArgOperand(0), Shift); in UpgradeIntrinsicCall()
987 Value *Op0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
988 Value *Op1 = CI->getArgOperand(1); in UpgradeIntrinsicCall()
989 unsigned Imm = cast <ConstantInt>(CI->getArgOperand(2))->getZExtValue(); in UpgradeIntrinsicCall()
990 VectorType *VecTy = cast<VectorType>(CI->getType()); in UpgradeIntrinsicCall()
991 unsigned NumElts = VecTy->getNumElements(); in UpgradeIntrinsicCall()
1000 Value *Op0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
1001 Value *Op1 = CI->getArgOperand(1); in UpgradeIntrinsicCall()
1002 unsigned Imm = cast<ConstantInt>(CI->getArgOperand(2))->getZExtValue(); in UpgradeIntrinsicCall()
1003 VectorType *VecTy = cast<VectorType>(CI->getType()); in UpgradeIntrinsicCall()
1004 unsigned NumElts = VecTy->getNumElements(); in UpgradeIntrinsicCall()
1010 Value *UndefV = UndefValue::get(Op1->getType()); in UpgradeIntrinsicCall()
1023 // Example of shuffle mask for 32-bit elements: in UpgradeIntrinsicCall()
1038 Value *Op0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
1039 unsigned Imm = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue(); in UpgradeIntrinsicCall()
1040 VectorType *VecTy = cast<VectorType>(CI->getType()); in UpgradeIntrinsicCall()
1041 unsigned NumElts = VecTy->getNumElements(); in UpgradeIntrinsicCall()
1046 // Get indexes for either the high half or low half of the input vector. in UpgradeIntrinsicCall()
1052 Value *UndefV = UndefValue::get(Op0->getType()); in UpgradeIntrinsicCall()
1058 Value *Op0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
1059 unsigned Imm = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue(); in UpgradeIntrinsicCall()
1060 VectorType *VecTy = cast<VectorType>(CI->getType()); in UpgradeIntrinsicCall()
1061 unsigned NumElts = VecTy->getNumElements(); in UpgradeIntrinsicCall()
1069 if (CI->getNumArgOperands() == 4) in UpgradeIntrinsicCall()
1070 Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep, in UpgradeIntrinsicCall()
1071 CI->getArgOperand(2)); in UpgradeIntrinsicCall()
1076 Value *Op0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
1077 unsigned Imm = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue(); in UpgradeIntrinsicCall()
1078 VectorType *VecTy = cast<VectorType>(CI->getType()); in UpgradeIntrinsicCall()
1079 unsigned NumElts = VecTy->getNumElements(); in UpgradeIntrinsicCall()
1081 unsigned IdxSize = 64 / VecTy->getScalarSizeInBits(); in UpgradeIntrinsicCall()
1082 unsigned IdxMask = ((1 << IdxSize) - 1); in UpgradeIntrinsicCall()
1086 // 8-bits. Elements are grouped into sets of 2 or 4 elements so we need in UpgradeIntrinsicCall()
1093 if (CI->getNumArgOperands() == 4) in UpgradeIntrinsicCall()
1094 Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep, in UpgradeIntrinsicCall()
1095 CI->getArgOperand(2)); in UpgradeIntrinsicCall()
1098 Value *Op0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
1099 unsigned Imm = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue(); in UpgradeIntrinsicCall()
1100 unsigned NumElts = CI->getType()->getVectorNumElements(); in UpgradeIntrinsicCall()
1112 if (CI->getNumArgOperands() == 4) in UpgradeIntrinsicCall()
1113 Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep, in UpgradeIntrinsicCall()
1114 CI->getArgOperand(2)); in UpgradeIntrinsicCall()
1117 Value *Op0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
1118 unsigned Imm = cast<ConstantInt>(CI->getArgOperand(1))->getZExtValue(); in UpgradeIntrinsicCall()
1119 unsigned NumElts = CI->getType()->getVectorNumElements(); in UpgradeIntrinsicCall()
1131 if (CI->getNumArgOperands() == 4) in UpgradeIntrinsicCall()
1132 Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep, in UpgradeIntrinsicCall()
1133 CI->getArgOperand(2)); in UpgradeIntrinsicCall()
1137 Value *Op0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
1138 unsigned NumElts = CI->getType()->getVectorNumElements(); in UpgradeIntrinsicCall()
1139 unsigned NumLaneElts = 128/CI->getType()->getScalarSizeInBits(); in UpgradeIntrinsicCall()
1154 Rep = EmitX86Select(Builder, CI->getArgOperand(2), Rep, in UpgradeIntrinsicCall()
1155 CI->getArgOperand(1)); in UpgradeIntrinsicCall()
1158 Value *Op0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
1159 Value *Op1 = CI->getArgOperand(1); in UpgradeIntrinsicCall()
1160 int NumElts = CI->getType()->getVectorNumElements(); in UpgradeIntrinsicCall()
1161 int NumLaneElts = 128/CI->getType()->getScalarSizeInBits(); in UpgradeIntrinsicCall()
1170 Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep, in UpgradeIntrinsicCall()
1171 CI->getArgOperand(2)); in UpgradeIntrinsicCall()
1174 Value *Op0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
1175 Value *Op1 = CI->getArgOperand(1); in UpgradeIntrinsicCall()
1176 int NumElts = CI->getType()->getVectorNumElements(); in UpgradeIntrinsicCall()
1177 int NumLaneElts = 128/CI->getType()->getScalarSizeInBits(); in UpgradeIntrinsicCall()
1186 Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep, in UpgradeIntrinsicCall()
1187 CI->getArgOperand(2)); in UpgradeIntrinsicCall()
1189 Rep = Builder.CreateAnd(CI->getArgOperand(0), CI->getArgOperand(1)); in UpgradeIntrinsicCall()
1190 Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep, in UpgradeIntrinsicCall()
1191 CI->getArgOperand(2)); in UpgradeIntrinsicCall()
1193 Rep = Builder.CreateAnd(Builder.CreateNot(CI->getArgOperand(0)), in UpgradeIntrinsicCall()
1194 CI->getArgOperand(1)); in UpgradeIntrinsicCall()
1195 Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep, in UpgradeIntrinsicCall()
1196 CI->getArgOperand(2)); in UpgradeIntrinsicCall()
1198 Rep = Builder.CreateOr(CI->getArgOperand(0), CI->getArgOperand(1)); in UpgradeIntrinsicCall()
1199 Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep, in UpgradeIntrinsicCall()
1200 CI->getArgOperand(2)); in UpgradeIntrinsicCall()
1202 Rep = Builder.CreateXor(CI->getArgOperand(0), CI->getArgOperand(1)); in UpgradeIntrinsicCall()
1203 Rep = EmitX86Select(Builder, CI->getArgOperand(3), Rep, in UpgradeIntrinsicCall()
1204 CI->getArgOperand(2)); in UpgradeIntrinsicCall()
1210 CI->replaceAllUsesWith(Rep); in UpgradeIntrinsicCall()
1211 CI->eraseFromParent(); in UpgradeIntrinsicCall()
1215 std::string Name = CI->getName(); in UpgradeIntrinsicCall()
1217 CI->setName(Name + ".old"); in UpgradeIntrinsicCall()
1219 switch (NewFn->getIntrinsicID()) { in UpgradeIntrinsicCall()
1223 case Intrinsic::x86_avx512_mask_psll_di_512: in UpgradeIntrinsicCall()
1224 case Intrinsic::x86_avx512_mask_psra_di_512: in UpgradeIntrinsicCall()
1225 case Intrinsic::x86_avx512_mask_psrl_di_512: in UpgradeIntrinsicCall()
1226 case Intrinsic::x86_avx512_mask_psll_qi_512: in UpgradeIntrinsicCall()
1227 case Intrinsic::x86_avx512_mask_psra_qi_512: in UpgradeIntrinsicCall()
1228 case Intrinsic::x86_avx512_mask_psrl_qi_512: in UpgradeIntrinsicCall()
1229 case Intrinsic::arm_neon_vld1: in UpgradeIntrinsicCall()
1230 case Intrinsic::arm_neon_vld2: in UpgradeIntrinsicCall()
1231 case Intrinsic::arm_neon_vld3: in UpgradeIntrinsicCall()
1232 case Intrinsic::arm_neon_vld4: in UpgradeIntrinsicCall()
1233 case Intrinsic::arm_neon_vld2lane: in UpgradeIntrinsicCall()
1234 case Intrinsic::arm_neon_vld3lane: in UpgradeIntrinsicCall()
1235 case Intrinsic::arm_neon_vld4lane: in UpgradeIntrinsicCall()
1236 case Intrinsic::arm_neon_vst1: in UpgradeIntrinsicCall()
1237 case Intrinsic::arm_neon_vst2: in UpgradeIntrinsicCall()
1238 case Intrinsic::arm_neon_vst3: in UpgradeIntrinsicCall()
1239 case Intrinsic::arm_neon_vst4: in UpgradeIntrinsicCall()
1240 case Intrinsic::arm_neon_vst2lane: in UpgradeIntrinsicCall()
1241 case Intrinsic::arm_neon_vst3lane: in UpgradeIntrinsicCall()
1242 case Intrinsic::arm_neon_vst4lane: { in UpgradeIntrinsicCall()
1243 SmallVector<Value *, 4> Args(CI->arg_operands().begin(), in UpgradeIntrinsicCall()
1244 CI->arg_operands().end()); in UpgradeIntrinsicCall()
1245 CI->replaceAllUsesWith(Builder.CreateCall(NewFn, Args)); in UpgradeIntrinsicCall()
1246 CI->eraseFromParent(); in UpgradeIntrinsicCall()
1250 case Intrinsic::ctlz: in UpgradeIntrinsicCall()
1251 case Intrinsic::cttz: in UpgradeIntrinsicCall()
1252 assert(CI->getNumArgOperands() == 1 && in UpgradeIntrinsicCall()
1254 CI->replaceAllUsesWith(Builder.CreateCall( in UpgradeIntrinsicCall()
1255 NewFn, {CI->getArgOperand(0), Builder.getFalse()}, Name)); in UpgradeIntrinsicCall()
1256 CI->eraseFromParent(); in UpgradeIntrinsicCall()
1259 case Intrinsic::objectsize: in UpgradeIntrinsicCall()
1260 CI->replaceAllUsesWith(Builder.CreateCall( in UpgradeIntrinsicCall()
1261 NewFn, {CI->getArgOperand(0), CI->getArgOperand(1)}, Name)); in UpgradeIntrinsicCall()
1262 CI->eraseFromParent(); in UpgradeIntrinsicCall()
1265 case Intrinsic::ctpop: { in UpgradeIntrinsicCall()
1266 CI->replaceAllUsesWith(Builder.CreateCall(NewFn, {CI->getArgOperand(0)})); in UpgradeIntrinsicCall()
1267 CI->eraseFromParent(); in UpgradeIntrinsicCall()
1271 case Intrinsic::x86_xop_vfrcz_ss: in UpgradeIntrinsicCall()
1272 case Intrinsic::x86_xop_vfrcz_sd: in UpgradeIntrinsicCall()
1273 CI->replaceAllUsesWith( in UpgradeIntrinsicCall()
1274 Builder.CreateCall(NewFn, {CI->getArgOperand(1)}, Name)); in UpgradeIntrinsicCall()
1275 CI->eraseFromParent(); in UpgradeIntrinsicCall()
1278 case Intrinsic::x86_xop_vpermil2pd: in UpgradeIntrinsicCall()
1279 case Intrinsic::x86_xop_vpermil2ps: in UpgradeIntrinsicCall()
1280 case Intrinsic::x86_xop_vpermil2pd_256: in UpgradeIntrinsicCall()
1281 case Intrinsic::x86_xop_vpermil2ps_256: { in UpgradeIntrinsicCall()
1282 SmallVector<Value *, 4> Args(CI->arg_operands().begin(), in UpgradeIntrinsicCall()
1283 CI->arg_operands().end()); in UpgradeIntrinsicCall()
1284 VectorType *FltIdxTy = cast<VectorType>(Args[2]->getType()); in UpgradeIntrinsicCall()
1287 CI->replaceAllUsesWith(Builder.CreateCall(NewFn, Args, Name)); in UpgradeIntrinsicCall()
1288 CI->eraseFromParent(); in UpgradeIntrinsicCall()
1292 case Intrinsic::x86_sse41_ptestc: in UpgradeIntrinsicCall()
1293 case Intrinsic::x86_sse41_ptestz: in UpgradeIntrinsicCall()
1294 case Intrinsic::x86_sse41_ptestnzc: { in UpgradeIntrinsicCall()
1299 Value *Arg0 = CI->getArgOperand(0); in UpgradeIntrinsicCall()
1300 if (Arg0->getType() != VectorType::get(Type::getFloatTy(C), 4)) in UpgradeIntrinsicCall()
1303 // Old intrinsic, add bitcasts in UpgradeIntrinsicCall()
1304 Value *Arg1 = CI->getArgOperand(1); in UpgradeIntrinsicCall()
1306 Type *NewVecTy = VectorType::get(Type::getInt64Ty(C), 2); in UpgradeIntrinsicCall()
1312 CI->replaceAllUsesWith(NewCall); in UpgradeIntrinsicCall()
1313 CI->eraseFromParent(); in UpgradeIntrinsicCall()
1317 case Intrinsic::x86_sse41_insertps: in UpgradeIntrinsicCall()
1318 case Intrinsic::x86_sse41_dppd: in UpgradeIntrinsicCall()
1319 case Intrinsic::x86_sse41_dpps: in UpgradeIntrinsicCall()
1320 case Intrinsic::x86_sse41_mpsadbw: in UpgradeIntrinsicCall()
1321 case Intrinsic::x86_avx_dp_ps_256: in UpgradeIntrinsicCall()
1322 case Intrinsic::x86_avx2_mpsadbw: { in UpgradeIntrinsicCall()
1323 // Need to truncate the last argument from i32 to i8 -- this argument models in UpgradeIntrinsicCall()
1324 // an inherently 8-bit immediate operand to these x86 instructions. in UpgradeIntrinsicCall()
1325 SmallVector<Value *, 4> Args(CI->arg_operands().begin(), in UpgradeIntrinsicCall()
1326 CI->arg_operands().end()); in UpgradeIntrinsicCall()
1332 CI->replaceAllUsesWith(NewCall); in UpgradeIntrinsicCall()
1333 CI->eraseFromParent(); in UpgradeIntrinsicCall()
1337 case Intrinsic::thread_pointer: { in UpgradeIntrinsicCall()
1338 CI->replaceAllUsesWith(Builder.CreateCall(NewFn, {})); in UpgradeIntrinsicCall()
1339 CI->eraseFromParent(); in UpgradeIntrinsicCall()
1343 case Intrinsic::masked_load: in UpgradeIntrinsicCall()
1344 case Intrinsic::masked_store: { in UpgradeIntrinsicCall()
1345 SmallVector<Value *, 4> Args(CI->arg_operands().begin(), in UpgradeIntrinsicCall()
1346 CI->arg_operands().end()); in UpgradeIntrinsicCall()
1347 CI->replaceAllUsesWith(Builder.CreateCall(NewFn, Args)); in UpgradeIntrinsicCall()
1348 CI->eraseFromParent(); in UpgradeIntrinsicCall()
1355 assert(F && "Illegal attempt to upgrade a non-existent intrinsic."); in UpgradeCallsToIntrinsic()
1357 // Check if this function should be upgraded and get the replacement function in UpgradeCallsToIntrinsic()
1363 for (auto UI = F->user_begin(), UE = F->user_end(); UI != UE; ) in UpgradeCallsToIntrinsic()
1368 F->eraseFromParent(); in UpgradeCallsToIntrinsic()
1373 MDNode *MD = I->getMetadata(LLVMContext::MD_tbaa); in UpgradeInstWithTBAATag()
1375 // Check if the tag uses struct-path aware TBAA format. in UpgradeInstWithTBAATag()
1376 if (isa<MDNode>(MD->getOperand(0)) && MD->getNumOperands() >= 3) in UpgradeInstWithTBAATag()
1379 if (MD->getNumOperands() == 3) { in UpgradeInstWithTBAATag()
1380 Metadata *Elts[] = {MD->getOperand(0), MD->getOperand(1)}; in UpgradeInstWithTBAATag()
1381 MDNode *ScalarType = MDNode::get(I->getContext(), Elts); in UpgradeInstWithTBAATag()
1384 ConstantAsMetadata::get(Constant::getNullValue( in UpgradeInstWithTBAATag()
1385 Type::getInt64Ty(I->getContext()))), in UpgradeInstWithTBAATag()
1386 MD->getOperand(2)}; in UpgradeInstWithTBAATag()
1387 I->setMetadata(LLVMContext::MD_tbaa, MDNode::get(I->getContext(), Elts2)); in UpgradeInstWithTBAATag()
1390 Metadata *Elts[] = {MD, MD, ConstantAsMetadata::get(Constant::getNullValue( in UpgradeInstWithTBAATag()
1391 Type::getInt64Ty(I->getContext())))}; in UpgradeInstWithTBAATag()
1392 I->setMetadata(LLVMContext::MD_tbaa, MDNode::get(I->getContext(), Elts)); in UpgradeInstWithTBAATag()
1402 Type *SrcTy = V->getType(); in UpgradeBitCastInst()
1403 if (SrcTy->isPtrOrPtrVectorTy() && DestTy->isPtrOrPtrVectorTy() && in UpgradeBitCastInst()
1404 SrcTy->getPointerAddressSpace() != DestTy->getPointerAddressSpace()) { in UpgradeBitCastInst()
1405 LLVMContext &Context = V->getContext(); in UpgradeBitCastInst()
1422 Type *SrcTy = C->getType(); in UpgradeBitCastExpr()
1423 if (SrcTy->isPtrOrPtrVectorTy() && DestTy->isPtrOrPtrVectorTy() && in UpgradeBitCastExpr()
1424 SrcTy->getPointerAddressSpace() != DestTy->getPointerAddressSpace()) { in UpgradeBitCastExpr()
1425 LLVMContext &Context = C->getContext(); in UpgradeBitCastExpr()
1438 /// Check the debug info version number, if it is out-dated, drop the debug
1459 for (unsigned I = 0, E = ModFlags->getNumOperands(); I != E; ++I) { in UpgradeModuleFlags()
1460 MDNode *Op = ModFlags->getOperand(I); in UpgradeModuleFlags()
1461 if (Op->getNumOperands() < 2) in UpgradeModuleFlags()
1463 MDString *ID = dyn_cast_or_null<MDString>(Op->getOperand(1)); in UpgradeModuleFlags()
1466 if (ID->getString() == "Objective-C Image Info Version") in UpgradeModuleFlags()
1468 if (ID->getString() == "Objective-C Class Properties") in UpgradeModuleFlags()
1471 // "Objective-C Class Properties" is recently added for Objective-C. We in UpgradeModuleFlags()
1472 // upgrade ObjC bitcodes to contain a "Objective-C Class Properties" module in UpgradeModuleFlags()
1477 M.addModuleFlag(llvm::Module::Error, "Objective-C Class Properties", in UpgradeModuleFlags()
1488 if (T->getNumOperands() < 1) in isOldLoopArgument()
1490 auto *S = dyn_cast_or_null<MDString>(T->getOperand(0)); in isOldLoopArgument()
1493 return S->getString().startswith("llvm.vectorizer."); in isOldLoopArgument()
1501 return MDString::get(C, "llvm.loop.interleave.count"); in upgradeLoopTag()
1503 return MDString::get( in upgradeLoopTag()
1512 if (T->getNumOperands() < 1) in upgradeLoopArgument()
1514 auto *OldTag = dyn_cast_or_null<MDString>(T->getOperand(0)); in upgradeLoopArgument()
1517 if (!OldTag->getString().startswith("llvm.vectorizer.")) in upgradeLoopArgument()
1522 Ops.reserve(T->getNumOperands()); in upgradeLoopArgument()
1523 Ops.push_back(upgradeLoopTag(T->getContext(), OldTag->getString())); in upgradeLoopArgument()
1524 for (unsigned I = 1, E = T->getNumOperands(); I != E; ++I) in upgradeLoopArgument()
1525 Ops.push_back(T->getOperand(I)); in upgradeLoopArgument()
1527 return MDTuple::get(T->getContext(), Ops); in upgradeLoopArgument()
1535 if (!llvm::any_of(T->operands(), isOldLoopArgument)) in upgradeInstructionLoopAttachment()
1539 Ops.reserve(T->getNumOperands()); in upgradeInstructionLoopAttachment()
1540 for (Metadata *MD : T->operands()) in upgradeInstructionLoopAttachment()
1543 return MDTuple::get(T->getContext(), Ops); in upgradeInstructionLoopAttachment()