[LLVMdev] Possible bug in LiveIntervalAnalysis?

Scott Graham scott.llvm at h4ck3r.net
Fri Apr 18 09:07:08 PDT 2008


http://llvm.org/bugs/show_bug.cgi?id=2232

On Fri, Apr 18, 2008 at 12:38 AM, Evan Cheng <evan.cheng at apple.com> wrote:
> Can you file a bug so I don't forget? I'm a little occupied right now.
>  But I'll take care of this soon.
>
>  Evan
>
>
>
>  On Apr 16, 2008, at 10:52 AM, Scott Graham wrote:
>
>  > Hi
>  >
>  > I'm seeing something probably related to this. I'm getting an assert
>  > from the lower_bound in LiveIntervals::findLiveinMBBs (from a checking
>  > std:: VS2005 implementation). Idx2MBBMap has two elements in it, both
>  > of which have a .first of 0. (I believe because of an empty MBB in the
>  > function below, so StartIndex doesn't advance).
>  >
>  > scott
>  >
>  > On Wed, Apr 16, 2008 at 2:52 AM, Roman Levenstein
>  > <romixlev at yahoo.com> wrote:
>  >> Hi,
>  >>
>  >> In the LiveIntervalAnalysis::runOnMachineFunction, there is a code to
>  >> compute the MBB2IdxMap, by remembering for each MBB its start and end
>  >> instruction numbers:
>  >>
>  >>  unsigned MIIndex = 0;
>  >>  for (MachineFunction::iterator MBB = mf_->begin(), E = mf_->end();
>  >>       MBB != E; ++MBB) {
>  >>    unsigned StartIdx = MIIndex;
>  >>
>  >>    for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end();
>  >>         I != E; ++I) {
>  >>      bool inserted = mi2iMap_.insert(std::make_pair(I,
>  >> MIIndex)).second;
>  >>      assert(inserted && "multiple MachineInstr -> index mappings");
>  >>      i2miMap_.push_back(I);
>  >>      MIIndex += InstrSlots::NUM;
>  >>    }
>  >>
>  >>    // Set the MBB2IdxMap entry for this MBB.
>  >>    MBB2IdxMap[MBB->getNumber()] = std::make_pair(StartIdx, MIIndex -
>  >> 1);
>  >>
>  >>  For empty MBBs, the last line would create a pair, where the end
>  >> element is smaller than the start element, which is a bit
>  >> counter-intuitive. This may lead to some assertion failures in other
>  >> parts of the code generator, if they use MBB2IdxMap for checking is
>  >> an
>  >> instruction belongs to a given MBB.
>  >>
>  >>  Question: Is this way of handling empty MBBs in the
>  >> LiveIntervalAnalysis a bug or a feature? Any special reason, why the
>  >> pair for an empty block does not look e.g. like (start, start)?
>  >>
>  >>  -Roman
>  >>
>  >>
>  >>      __________________________________________________________
>  >> Gesendet von Yahoo! Mail.
>  >> Der Mailbox mit unbegrenztem Speicher.
>  >> http://de.overview.mail.yahoo.com
>  >> _______________________________________________
>  >> LLVM Developers mailing list
>  >> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>  >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>  >>
>  > _______________________________________________
>  > LLVM Developers mailing list
>  > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>  > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>  _______________________________________________
>  LLVM Developers mailing list
>  LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>  http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>



More information about the llvm-dev mailing list