Skip to content

Commit

Permalink
removed mergecells update to globalMapping
Browse files Browse the repository at this point in the history
  • Loading branch information
sadrabt committed Nov 24, 2024
1 parent 4ee5df3 commit 8959364
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 19 deletions.
33 changes: 17 additions & 16 deletions src/main/scala/analysis/data_structure_analysis/Graph.scala
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,7 @@ class Graph(val proc: Procedure,
* @param cell2
* @return the resulting cell in the unified node
*/
def mergeCells(c1: Cell, c2: Cell, count: Int = 0): Cell = {
def mergeCells(c1: Cell, c2: Cell): Cell = {
var cell1 = c1
var cell2 = c2
if c1.node.isDefined then
Expand Down Expand Up @@ -642,12 +642,12 @@ class Graph(val proc: Procedure,
resultNode.children(k) = node2.children(k) + delta
}
resultNode.children += (node2 -> delta)
if node2.flags.global then // node 2 may have been adjusted depending on cell1 and cell2 offsets
globalMapping.foreach { // update global mapping if node 2 was global
case (range: AddressRange, Field(node, offset)) =>
if node.equals(node2) then
globalMapping.update(range, Field(node, offset + delta))
}
// if node2.flags.global then // node 2 may have been adjusted depending on cell1 and cell2 offsets
// globalMapping.foreach { // update global mapping if node 2 was global
// case (range: AddressRange, Field(node, offset)) =>
// if node.equals(node2) then
// globalMapping.update(range, Field(node, offset + delta))
// }

// compute the cells present in the resulting unified node
// a mapping from offsets to the set of old cells which are merged to form a cell in the new unified node
Expand Down Expand Up @@ -689,7 +689,7 @@ class Graph(val proc: Procedure,
} else if (outgoing.size > 1) {
val result = outgoing.tail.foldLeft(adjust(outgoing.head)) {
(result, pointee) =>
mergeCells(result, adjust(pointee), count+1)
mergeCells(result, adjust(pointee))
}
collapsedCell.pointee = Some(deadjust(result))
}
Expand Down Expand Up @@ -725,7 +725,7 @@ class Graph(val proc: Procedure,
}

def handleOverlapping(cell: Cell): Cell = {
var size = cell.node.get.getSize - cell.offset // if it's stack the size is rest of the node
val size = cell.node.get.getSize - cell.offset // if it's stack the size is rest of the node
val result =
if cell.node.get.flags.stack then
getStackOffsets(cell).foldLeft(cell) {
Expand All @@ -736,7 +736,7 @@ class Graph(val proc: Procedure,
cell


size = result.largestAccessedSize
// size = result.largestAccessedSize
if result.node.get.flags.global then
getGlobalAddresses(result).foldLeft(result) {
(res, offset) =>
Expand Down Expand Up @@ -867,12 +867,13 @@ class Graph(val proc: Procedure,

globalMapping.foreach { case (range: AddressRange, Field(node, offset)) =>
assert(newGraph.globalMapping.contains(range))
val field = find(node)
nodes.add(field.node)
if !idToNode.contains(field.node.id) then
val newNode = node.cloneSelf(newGraph)
idToNode.update(field.node.id, newNode)
newGraph.globalMapping.update(range, Field(idToNode(field.node.id), field.offset))
val cell: Cell = find(node.getCell(offset))
val finalNode: Node = cell.node.get
nodes.add(finalNode)
if !idToNode.contains(finalNode.id) then
val newNode = finalNode.cloneSelf(newGraph)
idToNode.update(finalNode.id, newNode)
newGraph.globalMapping.update(range, Field(idToNode(finalNode.id), cell.offset + (node.getCell(offset).offset - offset)))
}

val queue = mutable.Queue[Node]()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ class LocalPhase(proc: Procedure,
}
val resultOffset = result.offset
graph.selfCollapse(result.node.get)
result.node.get.getCell(result.offset)
graph.handleOverlapping(result.node.get.getCell(result.offset))

/**
* handles unsupported pointer arithmetic by collapsing all the nodes invloved
Expand Down Expand Up @@ -194,8 +194,9 @@ class LocalPhase(proc: Procedure,
val pointers = pointer.node.get.cells.filter((offset, _) => offset >= startPointerOffset && offset < startPointerOffset + size).toSeq.sortBy((offset, cell) => offset)
for (((offset, cell), i) <- pointers.zipWithIndex) {
val lhs = lhsNode.addCell(offset - diff, 0) // todo check if 0 is the right size
graph.mergeCells(lhs, graph.adjust(graph.find(cell).getPointee))
graph.find(cell).growSize(if i < pointers.size - 1 then (pointers(i+1)._1 - offset - diff).toInt else (size - (offset - diff)).toInt)
graph.find(cell).growSize(if i < pointers.size - 1 then (pointers(i + 1)._1 - offset - diff).toInt else (size - (offset - diff)).toInt)
val res = graph.mergeCells(lhs, graph.adjust(graph.find(cell).getPointee))
graph.handleOverlapping(res)
}
}

Expand Down

0 comments on commit 8959364

Please sign in to comment.