Introduce ProgramCounterHandler::loadPC

This commit is contained in:
Alessandro Di Federico
2021-02-07 19:35:27 +01:00
parent 8952ca3cc1
commit 6cfcd087b7
3 changed files with 32 additions and 5 deletions
+23
View File
@@ -310,6 +310,29 @@ bool PCH::isPCAffectingHelper(Instruction *I) const {
return false;
}
llvm::Value *ProgramCounterHandler::loadPC(llvm::IRBuilder<> &Builder) const {
using namespace llvm;
BasicBlock *BB = Builder.GetInsertBlock();
Module *M = BB->getParent()->getParent();
Value *V = UndefValue::get(MetaAddress::getStruct(M));
unsigned I = 0;
auto Insert = [&](llvm::GlobalVariable *CSV) {
using IV = InsertValueInst;
Value *ToInsert = Builder.CreateZExt(Builder.CreateLoad(CSV),
V->getType()->getStructElementType(I));
V = Builder.Insert(IV::Create(V, ToInsert, { I }));
++I;
};
Insert(EpochCSV);
Insert(AddressSpaceCSV);
Insert(TypeCSV);
Insert(AddressCSV);
return V;
}
std::pair<NextJumpTarget::Values, MetaAddress>
PCH::getUniqueJumpTarget(BasicBlock *BB) {
std::vector<StackEntry> Stack;