From bceed79daf4942a80e4ced7ba73617f3e7964223 Mon Sep 17 00:00:00 2001 From: SHREYASINGH29 <296shreya@gmail.com> Date: Sat, 12 Jun 2021 17:18:09 +0530 Subject: [PATCH] Handle Bitcast Instruction --- .../LFCPAInstModel/LFCPAInstModel.cpp | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/InstModel/LFCPAInstModel/LFCPAInstModel.cpp b/lib/InstModel/LFCPAInstModel/LFCPAInstModel.cpp index 5f422cb..cdde371 100644 --- a/lib/InstModel/LFCPAInstModel/LFCPAInstModel.cpp +++ b/lib/InstModel/LFCPAInstModel/LFCPAInstModel.cpp @@ -180,8 +180,9 @@ std::vector LFCPAInstModel::extractToken(llvm::CmpInst *Inst) { // llvm::errs()<<"\n VALUE= "<<*v; I = llvm::dyn_cast(v); - q.push(I); - + if(I != nullptr){ + q.push(I); + } while(!q.empty()) { llvm::Instruction *I = q.front(); @@ -205,7 +206,9 @@ std::vector LFCPAInstModel::extractToken(llvm::CmpInst *Inst) { llvm::Value* v = U.get(); // llvm::errs()<<"\n VALUE= "<<*v; llvm::Instruction *I1 = llvm::dyn_cast(v); - q.push(I1); + if(I != nullptr){ + q.push(I1); + } } } }//end if load @@ -262,6 +265,14 @@ std::vector LFCPAInstModel::extractToken(llvm::ReturnInst *Inst) { Ins = I; }//end else }//end if load + else if(llvm::BitCastInst *BI = llvm::dyn_cast(I)){ + Ins = I; + InstInfoMap[I] = II; + } + else { + skipFlag = true; + break; + } }//end for }//end while }//end if @@ -285,6 +296,18 @@ std::vector LFCPAInstModel::extractToken(llvm::BitCastInst *Inst) { } else if (llvm::BitCastInst *BI = llvm::dyn_cast(Inst->getOperand(0))) { TokenVec.push_back(this->getTokenWrapper()->getToken(BI->getDestTy())); + } else if(llvm::LoadInst *LI = llvm::dyn_cast(Inst->getOperand(0))) { + Token* TokLIOp = this->getTokenWrapper()->getToken(LI->getPointerOperand()); + if(!TokLIOp->isGlobalVar()) { + if(llvm::LoadInst* LIOp = llvm::dyn_cast(LI->getPointerOperand())) { + std::vector LITokens = this->extractToken(LIOp); + if(LITokens.size()==2) { + TokenVec.push_back(LITokens[1]); + } + } + } else { + TokenVec.push_back(this->getTokenWrapper()->getToken(LI->getPointerOperand())); + } } if (TokenVec.size() == 1) { TokenVec.push_back(this->getTokenWrapper()->getToken(Inst->getOperand(0)));