Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
211fe9d
upd(FuncRetToRef): removed volatile load and stores
EmilioCorigliano Jun 16, 2026
2840ffa
upd(Utils): update functions to exclude and duplicate values
EmilioCorigliano Jun 16, 2026
ee9147f
upd(EDDI): create synchronizeFunctionArguments
EmilioCorigliano Jun 16, 2026
e3c46c6
upd(EDDI): exclude volatile and inline asm
EmilioCorigliano Jun 16, 2026
df6a83c
upd(EDDI): update to exclude and to duplicate functions
EmilioCorigliano Jun 16, 2026
48cf366
fix(EDDI): fix TAD in case of global variables
EmilioCorigliano Jun 16, 2026
931f7bf
upd(EDDI): now synchronizeFunctionArguments can synchronize the argum…
EmilioCorigliano Jun 17, 2026
9d78358
feat(EDDI): duplicate volatile integer after loads and create consist…
EmilioCorigliano Jun 17, 2026
3ec5ee9
feat(EDDI): duplicate volatiles explicitly marked as to_duplicate or …
EmilioCorigliano Jun 17, 2026
e8e6925
feat(EDDI): add other functions to be excluded by default
EmilioCorigliano Jun 17, 2026
eca0927
fix(EDDI): fixed isLocalValueInitializedBefore function
EmilioCorigliano Jun 19, 2026
2fcc8df
upd(isToDuplicate): duplicate by default if the value doesn't have an…
EmilioCorigliano Aug 21, 2026
e1f900c
upd(EDDI): synchronize also global variables when fixing func values …
EmilioCorigliano Aug 21, 2026
90b5142
upd(EDDI): base-case covered also without TDA to infere alloca types
EmilioCorigliano Aug 21, 2026
3e30d69
upd(EDDI): add the consistency checks at the end of duplication process
EmilioCorigliano Aug 26, 2026
f49cce4
upd(EDDI): enhanced checking of structs and arrays
EmilioCorigliano Aug 27, 2026
92646f1
TEMP - fix(EDDI): harden instead of TAD if the resources is in heap
EmilioCorigliano Aug 27, 2026
b724595
upd(EDDI): fix "this" value in case of empty class
EmilioCorigliano Aug 28, 2026
868aea1
fix(EDDI): now when duplicating instruction we transfer all deduced t…
EmilioCorigliano Aug 28, 2026
037bf7c
upd(EDDI): now getBestType handles the retrieving of types
EmilioCorigliano Aug 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions passes/ASPIS.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,27 +61,30 @@ class EDDI : public PassInfoMixin<EDDI> {
std::set<Function *> getVirtualMethodsFromConstructor(Function *Fn);
int isUsedByStore(Instruction &I, Instruction &Use);
Instruction* cloneInstr(Instruction &I);
void duplicateOperands (Instruction &I, BasicBlock &ErrBB);
Value* getPtrFinalValue(Value &V);
void duplicateOperands (Instruction &I);
bool ptrNotDereferenceable(Value &V);
void comparePtrs(std::vector<Value *> *CmpInstructions, Value &V1, Value &V2, IRBuilder<> &B);
void addConsistencyChecks(Instruction &I, BasicBlock &ErrBB);
void fixFuncValsPassedByReference(Instruction &I, IRBuilder<> &B);
int transformCallBaseInst(CallBase *CInstr, IRBuilder<> &B, BasicBlock &ErrBB) ;
int transformCallBaseInst(CallBase *CInstr, IRBuilder<> &B) ;
Function *getFunctionDuplicate(Function *Fn);
Function *getFunctionFromDuplicate(Function *Fn);
void duplicateGlobals (Module &Md);
bool isAllocaForExceptionHandling(AllocaInst &I);
int duplicateInstruction (Instruction &I, BasicBlock &ErrBB);
int duplicateInstruction (Instruction &I);
bool isValueDuplicated(Instruction &V);
Function *duplicateFnArgs(Function &Fn, Module &Md);
void CreateErrBB(Module &Md, Function &Fn, BasicBlock *ErrBB);
bool temporaryArgumentDuplication(Module &Md, llvm::Value *value, IRBuilder<> &B);
Value *getDuplicateValue(Value *V, Instruction *I);
bool synchronizeFunctionArguments(Module &Md, llvm::Value *value, IRBuilder<> &B, Instruction *I, bool before);
Value *getDuplicateValue(Value *V, Function *Fn);
tda::TransparentType *getBestType(Value *V);
void createCompareOnOperand(std::vector<Value *> *CmpInstructions, Value *V, Instruction &I, IRBuilder<> &B);
void compareValues(std::vector<Value *> *CmpInstructions, Value &V1, Value &V2, IRBuilder<> &B);
void compareValues(std::vector<Value *> *CmpInstructions, Value &V1, Value &V2, IRBuilder<> &B, bool checkCompositeTypes = true);
void fixGlobalCtors(Module &M);
void repairBasicBlock(BasicBlock &BB);
bool isHeapOriginated(llvm::Value *V, unsigned depth = 0);
bool isHeapOriginatedThroughAlloca(llvm::AllocaInst *AI, unsigned depth = 0);
bool synchronizeHeapValue(llvm::Value *value, Instruction *I, bool before);
public:
explicit EDDI(bool duplicateAll, bool MultipleErrBBEnabled = false, bool CoarseGrainedDuplicationEnabled = true, std::string entryPoint = "main") : duplicateAll(duplicateAll), MultipleErrBBEnabled(MultipleErrBBEnabled), CoarseGrainedDuplicationEnabled(CoarseGrainedDuplicationEnabled), entryPoint(entryPoint) {}

Expand Down
Loading
Loading