Local.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //===- Local.cpp - Unit tests for Local -----------------------------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "llvm/Transforms/Utils/Local.h"
  10. #include "llvm/BasicBlock.h"
  11. #include "llvm/IRBuilder.h"
  12. #include "llvm/Instructions.h"
  13. #include "llvm/LLVMContext.h"
  14. #include "gtest/gtest.h"
  15. using namespace llvm;
  16. TEST(Local, RecursivelyDeleteDeadPHINodes) {
  17. LLVMContext &C(getGlobalContext());
  18. IRBuilder<> builder(C);
  19. // Make blocks
  20. BasicBlock *bb0 = BasicBlock::Create(C);
  21. BasicBlock *bb1 = BasicBlock::Create(C);
  22. builder.SetInsertPoint(bb0);
  23. PHINode *phi = builder.CreatePHI(Type::getInt32Ty(C), 2);
  24. BranchInst *br0 = builder.CreateCondBr(builder.getTrue(), bb0, bb1);
  25. builder.SetInsertPoint(bb1);
  26. BranchInst *br1 = builder.CreateBr(bb0);
  27. phi->addIncoming(phi, bb0);
  28. phi->addIncoming(phi, bb1);
  29. // The PHI will be removed
  30. EXPECT_TRUE(RecursivelyDeleteDeadPHINode(phi));
  31. // Make sure the blocks only contain the branches
  32. EXPECT_EQ(&bb0->front(), br0);
  33. EXPECT_EQ(&bb1->front(), br1);
  34. builder.SetInsertPoint(bb0);
  35. phi = builder.CreatePHI(Type::getInt32Ty(C), 0);
  36. EXPECT_TRUE(RecursivelyDeleteDeadPHINode(phi));
  37. builder.SetInsertPoint(bb0);
  38. phi = builder.CreatePHI(Type::getInt32Ty(C), 0);
  39. builder.CreateAdd(phi, phi);
  40. EXPECT_TRUE(RecursivelyDeleteDeadPHINode(phi));
  41. bb0->dropAllReferences();
  42. bb1->dropAllReferences();
  43. delete bb0;
  44. delete bb1;
  45. }