add union for ArrayDimension
This commit is contained in:
@@ -249,7 +249,7 @@ vector<uint64_t> FindParticularSolution(const ArrayDimension& dim1, const ArrayD
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
/* dim1 /\ dim2 */
|
/* 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);
|
vector<uint64_t> partSolution = FindParticularSolution(dim1, dim2);
|
||||||
if (partSolution.empty())
|
if (partSolution.empty())
|
||||||
@@ -281,10 +281,10 @@ ArrayDimension* IntersectDimension(const ArrayDimension& dim1, const ArrayDimens
|
|||||||
/* dim1 / dim2 */
|
/* dim1 / dim2 */
|
||||||
vector<ArrayDimension> DimensionDifference(const ArrayDimension& dim1, const ArrayDimension& dim2)
|
vector<ArrayDimension> DimensionDifference(const ArrayDimension& dim1, const ArrayDimension& dim2)
|
||||||
{
|
{
|
||||||
ArrayDimension* intersection = IntersectDimension(dim1, dim2);
|
ArrayDimension* intersection = DimensionIntersection(dim1, dim2);
|
||||||
if (!intersection)
|
if (!intersection)
|
||||||
{
|
{
|
||||||
return {dim1, dim2};
|
return {dim1};
|
||||||
}
|
}
|
||||||
vector<ArrayDimension> result;
|
vector<ArrayDimension> result;
|
||||||
/* add the part before intersection */
|
/* 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)
|
void FindPrivateArrays(map<string, vector<LoopGraph*>> &loopGraph, map<FuncInfo*, vector<SAPFOR::BasicBlock*>>& FullIR)
|
||||||
{
|
{
|
||||||
for (const auto& curr_graph_pair: loopGraph)
|
for (const auto& curr_graph_pair: loopGraph)
|
||||||
|
|||||||
Reference in New Issue
Block a user