Allow splitting of free varnodes

This commit is contained in:
caheckman 2019-10-18 17:18:33 -04:00
parent ce0ab31576
commit babc6d4d9b
2 changed files with 12 additions and 6 deletions

View file

@ -523,6 +523,9 @@ bool Funcdata::fillinReadOnly(Varnode *vn)
return false; // No change was made return false; // No change was made
} }
if (vn->getSize() > sizeof(uintb))
return false; // Constant will exceed precision
uintb res; uintb res;
uint1 bytes[32]; uint1 bytes[32];
try { try {

View file

@ -1937,18 +1937,21 @@ TransformVar *LaneDivide::setReplacement(Varnode *vn,int4 numLanes,int4 skipLane
return newSplit(vn,description, numLanes, skipLanes); return newSplit(vn,description, numLanes, skipLanes);
} }
if (vn->isFree()) // Allow free varnodes to be split
return (TransformVar *)0; // Abort // if (vn->isFree())
// return (TransformVar *)0;
if (vn->isTypeLock()) if (vn->isTypeLock())
return (TransformVar *)0; return (TransformVar *)0;
vn->setMark(); vn->setMark();
TransformVar *res = newSplit(vn, description, numLanes, skipLanes); TransformVar *res = newSplit(vn, description, numLanes, skipLanes);
workList.push_back(WorkNode()); if (!vn->isFree()) {
workList.back().lanes = res; workList.push_back(WorkNode());
workList.back().numLanes = numLanes; workList.back().lanes = res;
workList.back().skipLanes = skipLanes; workList.back().numLanes = numLanes;
workList.back().skipLanes = skipLanes;
}
return res; return res;
} }