@@ -5656,33 +5656,29 @@ void G4_BB_SB::SBDDD(G4_BB* bb,
56565656
56575657
56585658 // Add buckets of current instruction to bucket list
5659- std::vector<SBBucketNode*> bucketNodes (Opnd_total_num, nullptr ); // The coarse grained footprint of operands
56605659 if (node->instVec .size () > 1 )
56615660 {
5661+ std::map<G4_INST*, std::vector<SBBucketNode*>> bucketNodes;
56625662 for (const SBBucketDescr& BD : liveBDvec)
56635663 {
5664- if (bucketNodes[BD.opndNum ] == nullptr )
5664+ auto iter = std::find_if (bucketNodes[BD.inst ].begin (), bucketNodes[BD.inst ].end (),
5665+ [&BD](SBBucketNode* node) {return BD.opndNum == node->opndNum ; });
5666+ if (iter != bucketNodes[BD.inst ].end ())
56655667 {
5666- void * allocedMem = mem.alloc (sizeof (SBBucketNode));
5667- SBBucketNode* newNode = new (allocedMem)SBBucketNode (node, BD.opndNum , BD.inst );
5668- bucketNodes[BD.opndNum ] = newNode;
5668+ LB->add ((*iter), BD.bucket );
56695669 }
5670-
5671- if (bucketNodes[BD.opndNum ] != nullptr &&
5672- node->ALUPipe == PIPE_INT && bucketNodes[BD.opndNum ]->inst != BD.inst )
5670+ else
56735671 {
56745672 void * allocedMem = mem.alloc (sizeof (SBBucketNode));
56755673 SBBucketNode* newNode = new (allocedMem)SBBucketNode (node, BD.opndNum , BD.inst );
5674+ bucketNodes[BD.inst ].push_back (newNode);
56765675 LB->add (newNode, BD.bucket );
56775676 }
5678- else
5679- {
5680- LB->add (bucketNodes[BD.opndNum ], BD.bucket );
5681- }
56825677 }
56835678 }
56845679 else
56855680 {
5681+ std::vector<SBBucketNode*> bucketNodes (Opnd_total_num, nullptr ); // The coarse grained footprint of operands
56865682 for (const SBBucketDescr& BD : BDvec)
56875683 {
56885684 if (bucketNodes[BD.opndNum ] == nullptr )
0 commit comments