Lines Matching refs:CI
63 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B)
66 Value *OptimizeCall(CallInst *CI, const TargetData *TD, in OptimizeCall() argument
68 Caller = CI->getParent()->getParent(); in OptimizeCall()
71 if (CI->getCalledFunction()) in OptimizeCall()
72 Context = &CI->getCalledFunction()->getContext(); in OptimizeCall()
75 if (CI->getCallingConv() != llvm::CallingConv::C) in OptimizeCall()
78 return CallOptimizer(CI->getCalledFunction(), CI, B); in OptimizeCall()
104 static bool CallHasFloatingPointArgument(const CallInst *CI) { in CallHasFloatingPointArgument() argument
105 for (CallInst::const_op_iterator it = CI->op_begin(), e = CI->op_end(); in CallHasFloatingPointArgument()
135 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
145 Value *Dst = CI->getArgOperand(0); in CallOptimizer()
146 Value *Src = CI->getArgOperand(1); in CallOptimizer()
185 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
196 Value *Dst = CI->getArgOperand(0); in CallOptimizer()
197 Value *Src = CI->getArgOperand(1); in CallOptimizer()
201 if (ConstantInt *LengthArg = dyn_cast<ConstantInt>(CI->getArgOperand(2))) in CallOptimizer()
233 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
242 Value *SrcStr = CI->getArgOperand(0); in CallOptimizer()
246 ConstantInt *CharC = dyn_cast<ConstantInt>(CI->getArgOperand(1)); in CallOptimizer()
255 return EmitMemChr(SrcStr, CI->getArgOperand(1), // include nul. in CallOptimizer()
271 return Constant::getNullValue(CI->getType()); in CallOptimizer()
282 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
291 Value *SrcStr = CI->getArgOperand(0); in CallOptimizer()
292 ConstantInt *CharC = dyn_cast<ConstantInt>(CI->getArgOperand(1)); in CallOptimizer()
310 return Constant::getNullValue(CI->getType()); in CallOptimizer()
321 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
330 Value *Str1P = CI->getArgOperand(0), *Str2P = CI->getArgOperand(1); in CallOptimizer()
332 return ConstantInt::get(CI->getType(), 0); in CallOptimizer()
340 return ConstantInt::get(CI->getType(), Str1.compare(Str2)); in CallOptimizer()
344 CI->getType())); in CallOptimizer()
347 return B.CreateZExt(B.CreateLoad(Str1P, "strcmpload"), CI->getType()); in CallOptimizer()
369 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
379 Value *Str1P = CI->getArgOperand(0), *Str2P = CI->getArgOperand(1); in CallOptimizer()
381 return ConstantInt::get(CI->getType(), 0); in CallOptimizer()
385 if (ConstantInt *LengthArg = dyn_cast<ConstantInt>(CI->getArgOperand(2))) in CallOptimizer()
391 return ConstantInt::get(CI->getType(), 0); in CallOptimizer()
394 return EmitMemCmp(Str1P, Str2P, CI->getArgOperand(2), B, TD); in CallOptimizer()
404 return ConstantInt::get(CI->getType(), SubStr1.compare(SubStr2)); in CallOptimizer()
409 CI->getType())); in CallOptimizer()
412 return B.CreateZExt(B.CreateLoad(Str1P, "strcmpload"), CI->getType()); in CallOptimizer()
427 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
437 Value *Dst = CI->getArgOperand(0), *Src = CI->getArgOperand(1); in CallOptimizer()
453 CI->getArgOperand(2), B, TD); in CallOptimizer()
465 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
473 Value *Dst = CI->getArgOperand(0); in CallOptimizer()
474 Value *Src = CI->getArgOperand(1); in CallOptimizer()
475 Value *LenOp = CI->getArgOperand(2); in CallOptimizer()
514 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
521 Value *Src = CI->getArgOperand(0); in CallOptimizer()
525 return ConstantInt::get(CI->getType(), Len-1); in CallOptimizer()
529 if (IsOnlyUsedInZeroEqualityComparison(CI)) in CallOptimizer()
530 return B.CreateZExt(B.CreateLoad(Src, "strlenfirst"), CI->getType()); in CallOptimizer()
540 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
549 bool HasS1 = getConstantStringInfo(CI->getArgOperand(0), S1); in CallOptimizer()
550 bool HasS2 = getConstantStringInfo(CI->getArgOperand(1), S2); in CallOptimizer()
555 return Constant::getNullValue(CI->getType()); in CallOptimizer()
561 return Constant::getNullValue(CI->getType()); in CallOptimizer()
563 return B.CreateGEP(CI->getArgOperand(0), B.getInt64(I), "strpbrk"); in CallOptimizer()
568 return EmitStrChr(CI->getArgOperand(0), S2[0], B, TD); in CallOptimizer()
578 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
585 Value *EndPtr = CI->getArgOperand(1); in CallOptimizer()
589 CI->addAttribute(1, Attribute::NoCapture); in CallOptimizer()
600 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
609 bool HasS1 = getConstantStringInfo(CI->getArgOperand(0), S1); in CallOptimizer()
610 bool HasS2 = getConstantStringInfo(CI->getArgOperand(1), S2); in CallOptimizer()
615 return Constant::getNullValue(CI->getType()); in CallOptimizer()
621 return ConstantInt::get(CI->getType(), Pos); in CallOptimizer()
632 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
641 bool HasS1 = getConstantStringInfo(CI->getArgOperand(0), S1); in CallOptimizer()
642 bool HasS2 = getConstantStringInfo(CI->getArgOperand(1), S2); in CallOptimizer()
646 return Constant::getNullValue(CI->getType()); in CallOptimizer()
652 return ConstantInt::get(CI->getType(), Pos); in CallOptimizer()
657 return EmitStrLen(CI->getArgOperand(0), B, TD); in CallOptimizer()
667 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
676 if (CI->getArgOperand(0) == CI->getArgOperand(1)) in CallOptimizer()
677 return B.CreateBitCast(CI->getArgOperand(0), CI->getType()); in CallOptimizer()
680 if (TD && IsOnlyUsedInEqualityComparison(CI, CI->getArgOperand(0))) { in CallOptimizer()
681 Value *StrLen = EmitStrLen(CI->getArgOperand(1), B, TD); in CallOptimizer()
682 Value *StrNCmp = EmitStrNCmp(CI->getArgOperand(0), CI->getArgOperand(1), in CallOptimizer()
684 for (Value::use_iterator UI = CI->use_begin(), UE = CI->use_end(); in CallOptimizer()
693 return CI; in CallOptimizer()
698 bool HasStr1 = getConstantStringInfo(CI->getArgOperand(0), SearchStr); in CallOptimizer()
699 bool HasStr2 = getConstantStringInfo(CI->getArgOperand(1), ToFindStr); in CallOptimizer()
703 return B.CreateBitCast(CI->getArgOperand(0), CI->getType()); in CallOptimizer()
710 return Constant::getNullValue(CI->getType()); in CallOptimizer()
713 Value *Result = CastToCStr(CI->getArgOperand(0), B); in CallOptimizer()
715 return B.CreateBitCast(Result, CI->getType()); in CallOptimizer()
720 return B.CreateBitCast(EmitStrChr(CI->getArgOperand(0), in CallOptimizer()
721 ToFindStr[0], B, TD), CI->getType()); in CallOptimizer()
731 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
738 Value *LHS = CI->getArgOperand(0), *RHS = CI->getArgOperand(1); in CallOptimizer()
741 return Constant::getNullValue(CI->getType()); in CallOptimizer()
744 ConstantInt *LenC = dyn_cast<ConstantInt>(CI->getArgOperand(2)); in CallOptimizer()
749 return Constant::getNullValue(CI->getType()); in CallOptimizer()
754 CI->getType(), "lhsv"); in CallOptimizer()
756 CI->getType(), "rhsv"); in CallOptimizer()
768 return ConstantInt::get(CI->getType(), Ret); in CallOptimizer()
779 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
791 B.CreateMemCpy(CI->getArgOperand(0), CI->getArgOperand(1), in CallOptimizer()
792 CI->getArgOperand(2), 1); in CallOptimizer()
793 return CI->getArgOperand(0); in CallOptimizer()
801 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
813 B.CreateMemMove(CI->getArgOperand(0), CI->getArgOperand(1), in CallOptimizer()
814 CI->getArgOperand(2), 1); in CallOptimizer()
815 return CI->getArgOperand(0); in CallOptimizer()
823 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
835 Value *Val = B.CreateIntCast(CI->getArgOperand(1), B.getInt8Ty(), false); in CallOptimizer()
836 B.CreateMemSet(CI->getArgOperand(0), Val, CI->getArgOperand(2), 1); in CallOptimizer()
837 return CI->getArgOperand(0); in CallOptimizer()
849 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
858 Value *Op1 = CI->getArgOperand(0); in CallOptimizer()
871 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
880 Value *Op1 = CI->getArgOperand(0), *Op2 = CI->getArgOperand(1); in CallOptimizer()
892 return ConstantFP::get(CI->getType(), 1.0); in CallOptimizer()
900 Value *Inf = ConstantFP::getInfinity(CI->getType()); in CallOptimizer()
901 Value *NegInf = ConstantFP::getInfinity(CI->getType(), true); in CallOptimizer()
916 return B.CreateFDiv(ConstantFP::get(CI->getType(), 1.0), in CallOptimizer()
926 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
934 Value *Op = CI->getArgOperand(0); in CallOptimizer()
963 CallInst *CI = B.CreateCall2(Callee, One, LdExpArg); in CallOptimizer() local
965 CI->setCallingConv(F->getCallingConv()); in CallOptimizer()
967 return CI; in CallOptimizer()
977 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
984 FPExtInst *Cast = dyn_cast<FPExtInst>(CI->getArgOperand(0)); in CallOptimizer()
1003 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
1012 Value *Op = CI->getArgOperand(0); in CallOptimizer()
1015 if (ConstantInt *CI = dyn_cast<ConstantInt>(Op)) { in CallOptimizer() local
1016 if (CI->getValue() == 0) // ffs(0) -> 0. in CallOptimizer()
1017 return Constant::getNullValue(CI->getType()); in CallOptimizer()
1019 return B.getInt32(CI->getValue().countTrailingZeros() + 1); in CallOptimizer()
1039 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
1047 Value *Op = CI->getArgOperand(0); in CallOptimizer()
1050 return B.CreateZExt(Op, CI->getType()); in CallOptimizer()
1058 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
1066 Value *Op = CI->getArgOperand(0); in CallOptimizer()
1068 return B.CreateZExt(Op, CI->getType()); in CallOptimizer()
1076 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
1084 Value *Op = CI->getArgOperand(0); in CallOptimizer()
1097 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
1105 return B.CreateAnd(CI->getArgOperand(0), in CallOptimizer()
1106 ConstantInt::get(CI->getType(),0x7F)); in CallOptimizer()
1118 Value *OptimizeFixedFormatString(Function *Callee, CallInst *CI, in OptimizeFixedFormatString()
1122 if (!getConstantStringInfo(CI->getArgOperand(0), FormatStr)) in OptimizeFixedFormatString()
1127 return CI->use_empty() ? (Value*)CI : in OptimizeFixedFormatString()
1128 ConstantInt::get(CI->getType(), 0); in OptimizeFixedFormatString()
1133 if (!CI->use_empty()) in OptimizeFixedFormatString()
1139 if (CI->use_empty()) return CI; in OptimizeFixedFormatString()
1140 return B.CreateIntCast(Res, CI->getType(), true); in OptimizeFixedFormatString()
1151 return CI->use_empty() ? (Value*)CI : in OptimizeFixedFormatString()
1152 ConstantInt::get(CI->getType(), FormatStr.size()+1); in OptimizeFixedFormatString()
1157 if (FormatStr == "%c" && CI->getNumArgOperands() > 1 && in OptimizeFixedFormatString()
1158 CI->getArgOperand(1)->getType()->isIntegerTy()) { in OptimizeFixedFormatString()
1159 Value *Res = EmitPutChar(CI->getArgOperand(1), B, TD); in OptimizeFixedFormatString()
1161 if (CI->use_empty()) return CI; in OptimizeFixedFormatString()
1162 return B.CreateIntCast(Res, CI->getType(), true); in OptimizeFixedFormatString()
1166 if (FormatStr == "%s\n" && CI->getNumArgOperands() > 1 && in OptimizeFixedFormatString()
1167 CI->getArgOperand(1)->getType()->isPointerTy()) { in OptimizeFixedFormatString()
1168 EmitPutS(CI->getArgOperand(1), B, TD); in OptimizeFixedFormatString()
1169 return CI; in OptimizeFixedFormatString()
1174 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
1182 if (Value *V = OptimizeFixedFormatString(Callee, CI, B)) { in CallOptimizer()
1188 if (TLI->has(LibFunc::iprintf) && !CallHasFloatingPointArgument(CI)) { in CallOptimizer()
1192 CallInst *New = cast<CallInst>(CI->clone()); in CallOptimizer()
1205 Value *OptimizeFixedFormatString(Function *Callee, CallInst *CI, in OptimizeFixedFormatString()
1209 if (!getConstantStringInfo(CI->getArgOperand(1), FormatStr)) in OptimizeFixedFormatString()
1213 if (CI->getNumArgOperands() == 2) { in OptimizeFixedFormatString()
1224 B.CreateMemCpy(CI->getArgOperand(0), CI->getArgOperand(1), in OptimizeFixedFormatString()
1227 return ConstantInt::get(CI->getType(), FormatStr.size()); in OptimizeFixedFormatString()
1233 CI->getNumArgOperands() < 3) in OptimizeFixedFormatString()
1239 if (!CI->getArgOperand(2)->getType()->isIntegerTy()) return 0; in OptimizeFixedFormatString()
1240 Value *V = B.CreateTrunc(CI->getArgOperand(2), B.getInt8Ty(), "char"); in OptimizeFixedFormatString()
1241 Value *Ptr = CastToCStr(CI->getArgOperand(0), B); in OptimizeFixedFormatString()
1246 return ConstantInt::get(CI->getType(), 1); in OptimizeFixedFormatString()
1254 if (!CI->getArgOperand(2)->getType()->isPointerTy()) return 0; in OptimizeFixedFormatString()
1256 Value *Len = EmitStrLen(CI->getArgOperand(2), B, TD); in OptimizeFixedFormatString()
1260 B.CreateMemCpy(CI->getArgOperand(0), CI->getArgOperand(2), IncLen, 1); in OptimizeFixedFormatString()
1263 return B.CreateIntCast(Len, CI->getType(), false); in OptimizeFixedFormatString()
1268 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
1276 if (Value *V = OptimizeFixedFormatString(Callee, CI, B)) { in CallOptimizer()
1282 if (TLI->has(LibFunc::siprintf) && !CallHasFloatingPointArgument(CI)) { in CallOptimizer()
1286 CallInst *New = cast<CallInst>(CI->clone()); in CallOptimizer()
1299 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
1310 ConstantInt *SizeC = dyn_cast<ConstantInt>(CI->getArgOperand(1)); in CallOptimizer()
1311 ConstantInt *CountC = dyn_cast<ConstantInt>(CI->getArgOperand(2)); in CallOptimizer()
1317 return ConstantInt::get(CI->getType(), 0); in CallOptimizer()
1321 if (Bytes == 1 && CI->use_empty()) { // fwrite(S,1,1,F) -> fputc(S[0],F) in CallOptimizer()
1322 Value *Char = B.CreateLoad(CastToCStr(CI->getArgOperand(0), B), "char"); in CallOptimizer()
1323 EmitFPutC(Char, CI->getArgOperand(3), B, TD); in CallOptimizer()
1324 return ConstantInt::get(CI->getType(), 1); in CallOptimizer()
1335 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
1343 !CI->use_empty()) in CallOptimizer()
1347 uint64_t Len = GetStringLength(CI->getArgOperand(0)); in CallOptimizer()
1349 EmitFWrite(CI->getArgOperand(0), in CallOptimizer()
1351 CI->getArgOperand(1), B, TD, TLI); in CallOptimizer()
1352 return CI; // Known to have no uses (see above). in CallOptimizer()
1360 Value *OptimizeFixedFormatString(Function *Callee, CallInst *CI, in OptimizeFixedFormatString()
1364 if (!getConstantStringInfo(CI->getArgOperand(1), FormatStr)) in OptimizeFixedFormatString()
1368 if (CI->getNumArgOperands() == 2) { in OptimizeFixedFormatString()
1376 EmitFWrite(CI->getArgOperand(1), in OptimizeFixedFormatString()
1379 CI->getArgOperand(0), B, TD, TLI); in OptimizeFixedFormatString()
1380 return ConstantInt::get(CI->getType(), FormatStr.size()); in OptimizeFixedFormatString()
1386 CI->getNumArgOperands() < 3) in OptimizeFixedFormatString()
1392 if (!CI->getArgOperand(2)->getType()->isIntegerTy()) return 0; in OptimizeFixedFormatString()
1393 EmitFPutC(CI->getArgOperand(2), CI->getArgOperand(0), B, TD); in OptimizeFixedFormatString()
1394 return ConstantInt::get(CI->getType(), 1); in OptimizeFixedFormatString()
1399 if (!CI->getArgOperand(2)->getType()->isPointerTy() || !CI->use_empty()) in OptimizeFixedFormatString()
1401 EmitFPutS(CI->getArgOperand(2), CI->getArgOperand(0), B, TD, TLI); in OptimizeFixedFormatString()
1402 return CI; in OptimizeFixedFormatString()
1407 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
1415 if (Value *V = OptimizeFixedFormatString(Callee, CI, B)) { in CallOptimizer()
1421 if (TLI->has(LibFunc::fiprintf) && !CallHasFloatingPointArgument(CI)) { in CallOptimizer()
1425 CallInst *New = cast<CallInst>(CI->clone()); in CallOptimizer()
1438 virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) { in CallOptimizer()
1448 if (!getConstantStringInfo(CI->getArgOperand(0), Str)) in CallOptimizer()
1451 if (Str.empty() && CI->use_empty()) { in CallOptimizer()
1454 if (CI->use_empty()) return CI; in CallOptimizer()
1455 return B.CreateIntCast(Res, CI->getType(), true); in CallOptimizer()
1634 CallInst *CI = dyn_cast<CallInst>(I++); in runOnFunction() local
1635 if (!CI) continue; in runOnFunction()
1638 Function *Callee = CI->getCalledFunction(); in runOnFunction()
1651 Builder.SetCurrentDebugLocation(CI->getDebugLoc()); in runOnFunction()
1654 Value *Result = LCO->OptimizeCall(CI, TD, TLI, Builder); in runOnFunction()
1657 DEBUG(dbgs() << "SimplifyLibCalls simplified: " << *CI; in runOnFunction()
1666 I = CI; ++I; in runOnFunction()
1668 if (CI != Result && !CI->use_empty()) { in runOnFunction()
1669 CI->replaceAllUsesWith(Result); in runOnFunction()
1671 Result->takeName(CI); in runOnFunction()
1673 CI->eraseFromParent(); in runOnFunction()