add union for ArrayDimension

This commit is contained in:
2024-12-25 13:02:21 +03:00
parent c55eabf0ad
commit 6922676265

View File

@@ -249,7 +249,7 @@ vector<uint64_t> FindParticularSolution(const ArrayDimension& dim1, const ArrayD
return {};
}
/* dim1 /\ dim2 */
ArrayDimension* IntersectDimension(const ArrayDimension& dim1, const ArrayDimension& dim2)
ArrayDimension* DimensionIntersection(const ArrayDimension& dim1, const ArrayDimension& dim2)
{
vector<uint64_t> partSolution = FindParticularSolution(dim1, dim2);
if (partSolution.empty())
@@ -281,10 +281,10 @@ ArrayDimension* IntersectDimension(const ArrayDimension& dim1, const ArrayDimens
/* dim1 / dim2 */
vector<ArrayDimension> DimensionDifference(const ArrayDimension& dim1, const ArrayDimension& dim2)
{
ArrayDimension* intersection = IntersectDimension(dim1, dim2);
ArrayDimension* intersection = DimensionIntersection(dim1, dim2);
if (!intersection)
{
return {dim1, dim2};
return {dim1};
}
vector<ArrayDimension> result;
/* add the part before intersection */
@@ -321,6 +321,24 @@ vector<ArrayDimension> DimensionDifference(const ArrayDimension& dim1, const Arr
}
vector<ArrayDimension> DimensionUnion(const ArrayDimension& dim1, const ArrayDimension& dim2)
{
vector<ArrayDimension> res;
ArrayDimension* inter = DimensionIntersection(dim1, dim2);
if(!inter)
{
return { dim1, dim2 };
}
res.push_back(*inter);
delete(inter);
vector<ArrayDimension> diff1, diff2;
diff1 = DimensionDifference(dim1, dim2);
diff2 = DimensionDifference(dim2, dim1);
res.insert(res.end(), diff1.begin(), diff1.end());
res.insert(res.end(), diff2.begin(), diff2.end());
return res;
}
void FindPrivateArrays(map<string, vector<LoopGraph*>> &loopGraph, map<FuncInfo*, vector<SAPFOR::BasicBlock*>>& FullIR)
{
for (const auto& curr_graph_pair: loopGraph)