[llvm] r258654 - [SCCP] Remove duplicate code

David Majnemer via llvm-commits llvm-commits at lists.llvm.org
Sun Jan 24 08:50:54 PST 2016


Fixed in r258661.

On Sun, Jan 24, 2016 at 6:30 AM, NAKAMURA Takumi <geek4civic at gmail.com>
wrote:

> It crashes LTO.
> http://bb.pgr.jp/builders/clang-3stage-x86_64-linux/builds/9251
>
> A reduced testcase attached. Reproducible with "opt -ipsccp".
>
>
> On Sun, Jan 24, 2016 at 3:30 PM David Majnemer via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: majnemer
>> Date: Sun Jan 24 00:26:47 2016
>> New Revision: 258654
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=258654&view=rev
>> Log:
>> [SCCP] Remove duplicate code
>>
>> SCCP has code identical to changeToUnreachable's behavior, switch it
>> over to just call changeToUnreachable.
>>
>> No functionality change intended.
>>
>> Modified:
>>     llvm/trunk/include/llvm/Transforms/Utils/Local.h
>>     llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
>>     llvm/trunk/lib/Transforms/Utils/Local.cpp
>>
>> Modified: llvm/trunk/include/llvm/Transforms/Utils/Local.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/Local.h?rev=258654&r1=258653&r2=258654&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/include/llvm/Transforms/Utils/Local.h (original)
>> +++ llvm/trunk/include/llvm/Transforms/Utils/Local.h Sun Jan 24 00:26:47
>> 2016
>> @@ -295,7 +295,7 @@ unsigned removeAllNonTerminatorAndEHPadI
>>
>>  /// \brief Insert an unreachable instruction before the specified
>>  /// instruction, making it and the rest of the code in the block dead.
>> -void changeToUnreachable(Instruction *I, bool UseLLVMTrap);
>> +unsigned changeToUnreachable(Instruction *I, bool UseLLVMTrap);
>>
>>  /// Replace 'BB's terminator with one that does not have an unwind
>> successor
>>  /// block.  Rewrites `invoke` to `call`, etc.  Updates any PHIs in unwind
>>
>> Modified: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=258654&r1=258653&r2=258654&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp Sun Jan 24 00:26:47 2016
>> @@ -1564,14 +1564,6 @@ FunctionPass *llvm::createSCCPPass() {
>>    return new SCCP();
>>  }
>>
>> -static void DeleteInstructionInBlock(BasicBlock *BB) {
>> -  DEBUG(dbgs() << "  BasicBlock Dead:" << *BB);
>> -  ++NumDeadBlocks;
>> -
>> -  unsigned NumRemovedInBB =
>> removeAllNonTerminatorAndEHPadInstructions(BB);
>> -  NumInstRemoved += NumRemovedInBB;
>> -}
>> -
>>  // runOnFunction() - Run the Sparse Conditional Constant Propagation
>> algorithm,
>>  // and return true if the function was modified.
>>  //
>> @@ -1608,7 +1600,11 @@ bool SCCP::runOnFunction(Function &F) {
>>
>>    for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
>>      if (!Solver.isBlockExecutable(&*BB)) {
>> -      DeleteInstructionInBlock(&*BB);
>> +      DEBUG(dbgs() << "  BasicBlock Dead:" << *BB);
>> +
>> +      ++NumDeadBlocks;
>> +      NumInstRemoved += removeAllNonTerminatorAndEHPadInstructions(BB);
>> +
>>        MadeChanges = true;
>>        continue;
>>      }
>> @@ -1806,18 +1802,13 @@ bool IPSCCP::runOnModule(Module &M) {
>>
>>      for (Function::iterator BB = F->begin(), E = F->end(); BB != E;
>> ++BB) {
>>        if (!Solver.isBlockExecutable(&*BB)) {
>> -        DeleteInstructionInBlock(&*BB);
>> -        MadeChanges = true;
>> +        DEBUG(dbgs() << "  BasicBlock Dead:" << *BB);
>>
>> -        TerminatorInst *TI = BB->getTerminator();
>> -        for (BasicBlock *Succ : TI->successors()) {
>> -          if (!Succ->empty() && isa<PHINode>(Succ->begin()))
>> -            Succ->removePredecessor(&*BB);
>> -        }
>> -        if (!TI->use_empty())
>> -          TI->replaceAllUsesWith(UndefValue::get(TI->getType()));
>> -        TI->eraseFromParent();
>> -        new UnreachableInst(M.getContext(), &*BB);
>> +        ++NumDeadBlocks;
>> +        NumInstRemoved +=
>> +            changeToUnreachable(&*BB->begin(), /*UseLLVMTrap=*/false);
>> +
>> +        MadeChanges = true;
>>
>>          if (&*BB != &F->front())
>>            BlocksToErase.push_back(&*BB);
>>
>> Modified: llvm/trunk/lib/Transforms/Utils/Local.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/Local.cpp?rev=258654&r1=258653&r2=258654&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Transforms/Utils/Local.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Utils/Local.cpp Sun Jan 24 00:26:47 2016
>> @@ -1243,7 +1243,7 @@ unsigned llvm::removeAllNonTerminatorAnd
>>    return NumDeadInst;
>>  }
>>
>> -void llvm::changeToUnreachable(Instruction *I, bool UseLLVMTrap) {
>> +unsigned llvm::changeToUnreachable(Instruction *I, bool UseLLVMTrap) {
>>    BasicBlock *BB = I->getParent();
>>    // Loop over all of the successors, removing BB's entry from any PHI
>>    // nodes.
>> @@ -1261,12 +1261,15 @@ void llvm::changeToUnreachable(Instructi
>>    new UnreachableInst(I->getContext(), I);
>>
>>    // All instructions after this are dead.
>> +  unsigned NumInstrsRemoved = 0;
>>    BasicBlock::iterator BBI = I->getIterator(), BBE = BB->end();
>>    while (BBI != BBE) {
>>      if (!BBI->use_empty())
>>        BBI->replaceAllUsesWith(UndefValue::get(BBI->getType()));
>>      BB->getInstList().erase(BBI++);
>> +    ++NumInstrsRemoved;
>>    }
>> +  return NumInstrsRemoved;
>>  }
>>
>>  /// changeToCall - Convert the specified invoke into a normal call.
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160124/d1f71761/attachment.html>


More information about the llvm-commits mailing list