add union for ArrayDimension
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user