On Wed, 15 Aug 2007, [ISO-8859-1] Em�lio Wuerges wrote:> -- > int total = BB->size(); > std::vector<MachineInstr*> positionmap(total); > for (int i = 0; i< total; ++i) > positionmap.push_back(BB->remove(BB->begin())); > for(int i = 0; i< total; ++i) > BB->push_back(positionmap[i]); > --This doesn't do what you think. This line: std::vector<MachineInstr*> positionmap(total); Creates a vector with "total" null elements in it, it doesn't reserve space. This means that this loop: for(int i = 0; i< total; ++i) BB->push_back(positionmap[i]); Inserts all these nulls into the BB. I'm surprised this doesn't explode. -Chris -- http://nondot.org/sabre/ http://llvm.org/
Yup, You are right. That exploded. I missed some lines in between. there was a .reserve(total) in the actual code. But, there is some side effect I still could not find. 2007/8/16, Chris Lattner <sabre at nondot.org>:> > On Wed, 15 Aug 2007, [ISO-8859-1] Emílio Wuerges wrote: > > -- > > int total = BB->size(); > > std::vector<MachineInstr*> positionmap(total); > > for (int i = 0; i< total; ++i) > > positionmap.push_back(BB->remove(BB->begin())); > > for(int i = 0; i< total; ++i) > > BB->push_back(positionmap[i]); > > -- > > This doesn't do what you think. This line: > > std::vector<MachineInstr*> positionmap(total); > > Creates a vector with "total" null elements in it, it doesn't reserve > space. This means that this loop: > for(int i = 0; i< total; ++i) > BB->push_back(positionmap[i]); > > Inserts all these nulls into the BB. I'm surprised this doesn't explode. > > -Chris > > -- > http://nondot.org/sabre/ > http://llvm.org/ > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-- Emilio Wuerges LAPS - Laboratorio de Automacao de Projeto de Sistemas UFSC - Universidade Federal de Santa Catarina Brasil -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20070816/7755786b/attachment.html>
Just for the update, I found my way around like this: rts is my optimizer. for (int i = 0; i < rts.total_emmited(); ++i) { MachineInstr * mi = rts.emmited_instruction(i); MachineInstr* last = BB->remove(mi); BB->push_back(last); } 2007/8/16, Emílio Wuerges <wuerges at gmail.com>:> > Yup, > You are right. That exploded. > I missed some lines in between. > there was a .reserve(total) in the actual code. > But, there is some side effect I still could not find. > > > 2007/8/16, Chris Lattner <sabre at nondot.org>: > > > > On Wed, 15 Aug 2007, [ISO-8859-1] Emílio Wuerges wrote: > > > -- > > > int total = BB->size(); > > > std::vector<MachineInstr*> positionmap(total); > > > for (int i = 0; i< total; ++i) > > > positionmap.push_back (BB->remove(BB->begin())); > > > for(int i = 0; i< total; ++i) > > > BB->push_back(positionmap[i]); > > > -- > > > > This doesn't do what you think. This line: > > > > std::vector<MachineInstr*> positionmap(total); > > > > Creates a vector with "total" null elements in it, it doesn't reserve > > space. This means that this loop: > > for(int i = 0; i< total; ++i) > > BB->push_back(positionmap[i]); > > > > Inserts all these nulls into the BB. I'm surprised this doesn't > > explode. > > > > -Chris > > > > -- > > http://nondot.org/sabre/ > > http://llvm.org/ > > _______________________________________________ > > LLVM Developers mailing list > > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > > > > > > -- > Emilio Wuerges > LAPS - Laboratorio de Automacao de Projeto de Sistemas > UFSC - Universidade Federal de Santa Catarina > Brasil >-- Emilio Wuerges LAPS - Laboratorio de Automacao de Projeto de Sistemas UFSC - Universidade Federal de Santa Catarina Brasil -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20070817/de040ae2/attachment.html>