PointerAnalysisFlow* PointerAnalysis::operation_X_Y(PointerAnalysisFlow* in, Instruction* instruction) { LoadInst* load = static_cast<LoadInst*>(instruction); PointerAnalysisFlow* f = new PointerAnalysisFlow(in); Value* Y = load->getOperand(0); //RO Value* X = load->getNextNode()->getOperand(1); //LO // X = Y // Check if X Y are pointers. if (isPointer(Y) && isPointer(X)) { if (isVariable(Y) && isVariable(X)) { //x points to what y points to PointerAnalysisFlow* ff = new PointerAnalysisFlow(); map<string, set<string> > value; value[X->getName()] = in->value[Y->getName()];; ff->value = value; PointerAnalysisFlow* tmp = static_cast<PointerAnalysisFlow*>(ff->join(f)); delete ff; delete f; f = tmp; } } return f; }