1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00

Revert "Simplify blockaddress usage before giving up in MergeBlockIntoPredecessor"

This reverts commit f976cf4cca0794267f28b54e468007fd476d37d9.

I am reverting this because it causes break in a few bots and its going
to take me sometime to look at this.

llvm-svn: 334993
This commit is contained in:
Xin Tong 2018-06-18 23:20:08 +00:00
parent 9534232b81
commit 59e17b49d1
3 changed files with 5 additions and 37 deletions

View File

@ -119,14 +119,7 @@ bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, DominatorTree *DT,
LoopInfo *LI,
MemoryDependenceResults *MemDep) {
// Don't merge away blocks who have their address taken.
if (BB->hasAddressTaken()) {
// If the block has its address taken, it may be a tree of dead constants
// hanging off of it. These shouldn't keep the block alive.
BlockAddress *BA = BlockAddress::get(BB);
BA->removeDeadConstantUsers();
if (!BA->use_empty())
return false;
}
if (BB->hasAddressTaken()) return false;
// Can't merge if there are multiple predecessors, or no predecessors.
BasicBlock *PredBB = BB->getUniquePredecessor();

View File

@ -37,7 +37,10 @@ define void @test_indirectbr(i32 %x) {
entry:
; CHECK-LABEL: @test_indirectbr(
; CHECK-NEXT: entry:
; CHECK-NEXT: ret void
; Ideally this should now check:
; CHK-NEXT: ret void
; But that doesn't happen yet. Instead:
; CHECK-NEXT: br label %L1
%label = bitcast i8* blockaddress(@test_indirectbr, %L1) to i8*
indirectbr i8* %label, [label %L1, label %L2]

View File

@ -50,31 +50,3 @@ TEST(BasicBlockUtils, SplitBlockPredecessors) {
SplitBlockPredecessors(&F->getEntryBlock(), {}, "split.entry", &DT);
EXPECT_TRUE(DT.verify());
}
TEST(BasicBlockUtils, MergeBlockIntoPredecessor) {
LLVMContext C;
std::unique_ptr<Module> M = parseIR(C,
R"(
define i32 @f(i8* %str) {
entry:
%dead = extractvalue [1 x i8*] [ i8* blockaddress(@f, %L0) ], 0
br label %L0
L0:
ret i32 0
}
)");
// First remove the dead instruction to empty the usage of the constant
// containing blockaddress(@f, %L0)
Function *F = M->getFunction("f");
auto BBI = F->begin();
Instruction *DI = &*((*BBI).begin());
EXPECT_TRUE(DI->use_empty());
DI->eraseFromParent();
// Get L0 and make sure that it can be merged into entry block.
++BBI;
BasicBlock *BB = &(*BBI);
EXPECT_TRUE(MergeBlockIntoPredecessor(BB));
}