[llvm-commits] [poolalloc] r134956 - /poolalloc/trunk/lib/AssistDS/TypeChecks.cpp
Arushi Aggarwal
aggarwa4 at illinois.edu
Mon Jul 11 20:12:59 PDT 2011
Author: aggarwa4
Date: Mon Jul 11 22:12:59 2011
New Revision: 134956
URL: http://llvm.org/viewvc/llvm-project?rev=134956&view=rev
Log:
1. more library functions.
2. Insert check if a load is used as condition in select
Modified:
poolalloc/trunk/lib/AssistDS/TypeChecks.cpp
Modified: poolalloc/trunk/lib/AssistDS/TypeChecks.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/AssistDS/TypeChecks.cpp?rev=134956&r1=134955&r2=134956&view=diff
==============================================================================
--- poolalloc/trunk/lib/AssistDS/TypeChecks.cpp (original)
+++ poolalloc/trunk/lib/AssistDS/TypeChecks.cpp Mon Jul 11 22:12:59 2011
@@ -1401,19 +1401,23 @@
CastInst *BCI = BitCastInst::CreatePointerCast(&AI, VoidPtrTy);
BCI->insertAfter(&AI);
- CastInst *ArraySize = CastInst::CreateSExtOrBitCast(AI.getArraySize(), Int64Ty);
- ArraySize->insertAfter(BCI);
- BinaryOperator *Size = BinaryOperator::Create(Instruction::Mul, AllocSize, ArraySize);
- Size->insertAfter(ArraySize);
+ Value *TotalSize;
+ if(!AI.isArrayAllocation()) {
+ TotalSize = AllocSize;
+ } else {
+ CastInst *ArraySize = CastInst::CreateSExtOrBitCast(AI.getArraySize(), Int64Ty, "", &AI);
+ BinaryOperator *Size = BinaryOperator::Create(Instruction::Mul, AllocSize, ArraySize, "", &AI);
+ TotalSize = Size;
+ }
// Setting metadata to be 0(BOTTOM/Uninitialized)
std::vector<Value *> Args;
Args.push_back(BCI);
- Args.push_back(Size);
+ Args.push_back(TotalSize);
Args.push_back(getTagCounter());
CallInst *CI = CallInst::Create(trackUnInitInst, Args.begin(), Args.end());
- CI->insertAfter(Size);
+ CI->insertAfter(BCI);
return true;
}
@@ -1591,6 +1595,15 @@
Args.push_back(getTagCounter());
CallInst *CI = CallInst::Create(trackInitInst, Args.begin(), Args.end());
CI->insertAfter(BCI);
+ } else if (F->getNameStr() == std::string("getservbyname")) {
+ CastInst *BCI = BitCastInst::CreatePointerCast(I, VoidPtrTy);
+ BCI->insertAfter(I);
+ std::vector<Value*>Args;
+ Args.push_back(BCI);
+ Args.push_back(getTagCounter());
+ Constant *F = M.getOrInsertFunction("trackgetservbyname", VoidTy, VoidPtrTy, Int32Ty, NULL);
+ CallInst *CI = CallInst::Create(F, Args.begin(), Args.end());
+ CI->insertAfter(BCI);
} else if (F->getNameStr() == std::string("gethostbyname") ||
F->getNameStr() == std::string("gethostbyaddr")) {
CastInst *BCI = BitCastInst::CreatePointerCast(I, VoidPtrTy);
@@ -1642,6 +1655,7 @@
} else if (F->getNameStr() == std::string("getrusage") ||
F->getNameStr() == std::string("getrlimit") ||
F->getNameStr() == std::string("stat") ||
+ F->getNameStr() == std::string("vfsstat") ||
F->getNameStr() == std::string("fstat") ||
F->getNameStr() == std::string("lstat")) {
CastInst *BCI = BitCastInst::CreatePointerCast(CS.getArgument(1), VoidPtrTy, "", I);
@@ -1883,17 +1897,23 @@
Args.push_back(getTagCounter());
CallInst *CINew = CallInst::Create(trackInitInst, Args.begin(), Args.end());
CINew->insertAfter(NewValue);
+ } else if(F->getNameStr() == std::string("scanf")) {
+ unsigned i = 1;
+ while(i < CS.arg_size()) {
+ visitInputFunctionValue(M, CS.getArgument(i), I);
+ i++;
+ }
} else if(F->getNameStr() == std::string("sscanf")) {
// FIXME: Need to look at the format string and check
- unsigned i = 3;
- while(i < I->getNumOperands()) {
- visitInputFunctionValue(M, CS.getArgument(i-1), I);
+ unsigned i = 2;
+ while(i < CS.arg_size()) {
+ visitInputFunctionValue(M, CS.getArgument(i), I);
i++;
}
} else if(F->getNameStr() == std::string("fscanf")) {
- unsigned i = 3;
- while(i < I->getNumOperands()) {
- visitInputFunctionValue(M, CS.getArgument(i-1), I);
+ unsigned i = 2;
+ while(i < CS.arg_size()) {
+ visitInputFunctionValue(M, CS.getArgument(i), I);
i++;
}
}
@@ -2060,40 +2080,45 @@
CallInst::Create(checkTypeInst, Args.begin(), Args.end(), "", cast<Instruction>(II.getUse().getUser()));
}
} else if(SelectInst *SelI = dyn_cast<SelectInst>(II)) {
- SelectInst *Prev = NULL;
- SelectInst *PrevBasePtr = NULL;
- if(SelectInst_MD_Map.find(SelI) != SelectInst_MD_Map.end()) {
- Prev = SelectInst_MD_Map[SelI];
- PrevBasePtr = SelectInst_BasePtr_Map[SelI];
- }
- SelectInst *AI_New;
- SelectInst *BCI_New;
- if(SelI->getTrueValue() == I) {
- if(!Prev) {
- AI_New = SelectInst::Create(SelI->getCondition(), AI, Constant::getNullValue(AI->getType()), "", SelI);
- BCI_New = SelectInst::Create(SelI->getCondition(), BCI, Constant::getNullValue(BCI->getType()), "", SelI);
- } else {
- AI_New = SelectInst::Create(SelI->getCondition(), AI, Prev->getFalseValue(), "", SelI);
- BCI_New = SelectInst::Create(SelI->getCondition(), BCI, Prev->getFalseValue(), "", SelI);
- Prev->replaceAllUsesWith(AI_New);
- PrevBasePtr->replaceAllUsesWith(BCI_New);
+ if(SelI->getOperand(0) == I) {
+ CallInst::Create(checkTypeInst, Args.begin(), Args.end(), "", cast<Instruction>(II.getUse().getUser()));
+ // if it is used as the condition, just insert a check
+ } else {
+ SelectInst *Prev = NULL;
+ SelectInst *PrevBasePtr = NULL;
+ if(SelectInst_MD_Map.find(SelI) != SelectInst_MD_Map.end()) {
+ Prev = SelectInst_MD_Map[SelI];
+ PrevBasePtr = SelectInst_BasePtr_Map[SelI];
}
- }
- else {
- if(!Prev) {
- AI_New = SelectInst::Create(SelI->getCondition(), Constant::getNullValue(AI->getType()), AI, "", SelI);
- BCI_New = SelectInst::Create(SelI->getCondition(), Constant::getNullValue(BCI->getType()), BCI, "", SelI);
- } else {
- AI_New = SelectInst::Create(SelI->getCondition(), Prev->getTrueValue(), AI, "", SelI);
- BCI_New = SelectInst::Create(SelI->getCondition(), Prev->getTrueValue(), BCI, "", SelI);
- Prev->replaceAllUsesWith(AI_New);
- PrevBasePtr->replaceAllUsesWith(BCI_New);
+ SelectInst *AI_New;
+ SelectInst *BCI_New;
+ if(SelI->getTrueValue() == I) {
+ if(!Prev) {
+ AI_New = SelectInst::Create(SelI->getCondition(), AI, Constant::getNullValue(AI->getType()), "", SelI);
+ BCI_New = SelectInst::Create(SelI->getCondition(), BCI, Constant::getNullValue(BCI->getType()), "", SelI);
+ } else {
+ AI_New = SelectInst::Create(SelI->getCondition(), AI, Prev->getFalseValue(), "", SelI);
+ BCI_New = SelectInst::Create(SelI->getCondition(), BCI, Prev->getFalseValue(), "", SelI);
+ Prev->replaceAllUsesWith(AI_New);
+ PrevBasePtr->replaceAllUsesWith(BCI_New);
+ }
+ }
+ else {
+ if(!Prev) {
+ AI_New = SelectInst::Create(SelI->getCondition(), Constant::getNullValue(AI->getType()), AI, "", SelI);
+ BCI_New = SelectInst::Create(SelI->getCondition(), Constant::getNullValue(BCI->getType()), BCI, "", SelI);
+ } else {
+ AI_New = SelectInst::Create(SelI->getCondition(), Prev->getTrueValue(), AI, "", SelI);
+ BCI_New = SelectInst::Create(SelI->getCondition(), Prev->getTrueValue(), BCI, "", SelI);
+ Prev->replaceAllUsesWith(AI_New);
+ PrevBasePtr->replaceAllUsesWith(BCI_New);
+ }
}
+ SelectInst_MD_Map[SelI] = AI_New;
+ SelectInst_BasePtr_Map[SelI] = BCI_New;
+ if(!Prev)
+ visitUses(SelI, AI_New, BCI_New);
}
- SelectInst_MD_Map[SelI] = AI_New;
- SelectInst_BasePtr_Map[SelI] = BCI_New;
- if(!Prev)
- visitUses(SelI, AI_New, BCI_New);
} else if(PHINode *PH = dyn_cast<PHINode>(II)) {
PHINode *Prev = NULL;
PHINode *PrevBasePtr = NULL;
More information about the llvm-commits
mailing list