[llvm-commits] [llvm] r100062 - /llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp

Bill Wendling isanbard at gmail.com
Wed Mar 31 16:59:09 PDT 2010


No, I'm not sure. It went green before my revert went in. I'm going to reapply this. Thanks for checking. :-)

-bw

On Mar 31, 2010, at 4:38 PM, Bob Wilson wrote:

> Are you sure?  I think that's the same test that's been failing intermittently.  Daniel tried to fix it (see http://llvm.org/bugs/show_bug.cgi?id=6753) but I think I also saw a comment from him that it wasn't really fixed.
> 
> On Mar 31, 2010, at 4:26 PM, Bill Wendling wrote:
> 
>> Author: void
>> Date: Wed Mar 31 18:26:26 2010
>> New Revision: 100062
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=100062&view=rev
>> Log:
>> Revert r100056. It was causing a failure on MSVC.
>> 
>> Modified:
>>    llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp
>> 
>> Modified: llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp?rev=100062&r1=100061&r2=100062&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp Wed Mar 31 18:26:26 2010
>> @@ -23,7 +23,6 @@
>> #include "llvm/Target/TargetMachine.h"
>> #include "llvm/Assembly/Writer.h"
>> #include "llvm/ADT/SmallString.h"
>> -#include "llvm/ADT/SmallPtrSet.h"
>> #include "llvm/Support/Debug.h"
>> #include "llvm/Support/LeakDetector.h"
>> #include "llvm/Support/raw_ostream.h"
>> @@ -460,41 +459,54 @@
>>   //    conditional branch followed by an unconditional branch. DestA is the
>>   //    'true' destination and DestB is the 'false' destination.
>> 
>> -  bool Changed = false;
>> +  bool MadeChange = false;
>> +  bool AddedFallThrough = false;
>> 
>>   MachineFunction::iterator FallThru =
>>     llvm::next(MachineFunction::iterator(this));
>> -
>> -  if (DestA == 0 && DestB == 0) {
>> -    // Block falls through to successor.
>> -    DestA = FallThru;
>> -    DestB = FallThru;
>> -  } else if (DestA != 0 && DestB == 0) {
>> -    if (isCond)
>> -      // Block ends in conditional jump that falls through to successor.
>> +  
>> +  if (isCond) {
>> +    // If this block ends with a conditional branch that falls through to its
>> +    // successor, set DestB as the successor.
>> +    if (DestB == 0 && FallThru != getParent()->end()) {
>>       DestB = FallThru;
>> +      AddedFallThrough = true;
>> +    }
>>   } else {
>> -    assert(DestA && DestB && isCond &&
>> -           "CFG in a bad state. Cannot correct CFG edges");
>> +    // If this is an unconditional branch with no explicit dest, it must just be
>> +    // a fallthrough into DestA.
>> +    if (DestA == 0 && FallThru != getParent()->end()) {
>> +      DestA = FallThru;
>> +      AddedFallThrough = true;
>> +    }
>>   }
>> -
>> -  // Remove superfluous edges. I.e., those which aren't destinations of this
>> -  // basic block, duplicate edges, or landing pads.
>> -  SmallPtrSet<const MachineBasicBlock*, 8> SeenMBBs;
>> +  
>>   MachineBasicBlock::succ_iterator SI = succ_begin();
>> +  MachineBasicBlock *OrigDestA = DestA, *OrigDestB = DestB;
>>   while (SI != succ_end()) {
>>     const MachineBasicBlock *MBB = *SI;
>> -    if (!SeenMBBs.insert(MBB) ||
>> -        (MBB != DestA && MBB != DestB && !MBB->isLandingPad())) {
>> -      // This is a superfluous edge, remove it.
>> -      SI = removeSuccessor(SI);
>> -      Changed = true;
>> -    } else {
>> +    if (MBB == DestA) {
>> +      DestA = 0;
>> +      ++SI;
>> +    } else if (MBB == DestB) {
>> +      DestB = 0;
>> +      ++SI;
>> +    } else if (MBB->isLandingPad() && 
>> +               MBB != OrigDestA && MBB != OrigDestB) {
>>       ++SI;
>> +    } else {
>> +      // Otherwise, this is a superfluous edge, remove it.
>> +      SI = removeSuccessor(SI);
>> +      MadeChange = true;
>>     }
>>   }
>> 
>> -  return Changed;
>> +  if (!AddedFallThrough)
>> +    assert(DestA == 0 && DestB == 0 && "MachineCFG is missing edges!");
>> +  else if (isCond)
>> +    assert(DestA == 0 && "MachineCFG is missing edges!");
>> +
>> +  return MadeChange;
>> }
>> 
>> /// findDebugLoc - find the next valid DebugLoc starting at MBBI, skipping
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20100331/51a46b30/attachment.html>


More information about the llvm-commits mailing list