void Interpreter::visitFreeInst(FreeInst &I) { ExecutionContext &SF = ECStack.back(); assert(isa<PointerType>(I.getOperand(0)->getType()) && "Freeing nonptr?"); GenericValue Value = getOperandValue(I.getOperand(0), SF); // TODO: Check to make sure memory is allocated free(GVTOP(Value)); // Free memory }
void FuncTransform::visitFreeInst(FreeInst &FrI) { if (Instruction *I = InsertPoolFreeInstr(FrI.getOperand(0), &FrI)) { // Delete the now obsolete free instruction... FrI.getParent()->getInstList().erase(&FrI); // Update the NewToOldValueMap if this is a clone if (!FI.NewToOldValueMap.empty()) { std::map<Value*,const Value*>::iterator II = FI.NewToOldValueMap.find(&FrI); assert(II != FI.NewToOldValueMap.end() && "FrI not found in clone?"); FI.NewToOldValueMap.insert(std::make_pair(I, II->second)); FI.NewToOldValueMap.erase(II); } } }