diff --git a/llvm/lib/Transforms/Scalar/GVN.cpp b/llvm/lib/Transforms/Scalar/GVN.cpp index 5ce51c74fdec..e537986f306b 100644 --- a/llvm/lib/Transforms/Scalar/GVN.cpp +++ b/llvm/lib/Transforms/Scalar/GVN.cpp @@ -121,7 +121,6 @@ namespace { AliasAnalysis* AA; MemoryDependenceAnalysis* MD; DominatorTree* DT; - uint32_t true_vn, false_vn; uint32_t nextValueNumber; @@ -139,14 +138,7 @@ namespace { Expression create_expression(CallInst* C); Expression create_expression(Constant* C); public: - ValueTable() : nextValueNumber(1) { - true_vn = lookup_or_add(ConstantInt::getTrue()); - false_vn = lookup_or_add(ConstantInt::getFalse()); - } - - uint32_t getTrueVN() { return true_vn; } - uint32_t getFalseVN() { return false_vn; } - + ValueTable() : nextValueNumber(1) { } uint32_t lookup_or_add(Value* V); uint32_t lookup(Value* V) const; void add(Value* V, uint32_t num); @@ -1302,27 +1294,9 @@ bool GVN::processInstruction(Instruction *I, uint32_t nextNum = VN.getNextUnusedValueNumber(); unsigned num = VN.lookup_or_add(I); - if (BranchInst* BI = dyn_cast(I)) { - localAvail[I->getParent()]->table.insert(std::make_pair(num, I)); - - if (!BI->isConditional() || isa(BI->getCondition())) - return false; - - Value* branchCond = BI->getCondition(); - uint32_t condVN = VN.lookup_or_add(branchCond); - - BasicBlock* trueSucc = BI->getSuccessor(0); - BasicBlock* falseSucc = BI->getSuccessor(1); - - localAvail[trueSucc]->table.insert(std::make_pair(condVN, - ConstantInt::getTrue())); - localAvail[falseSucc]->table.insert(std::make_pair(condVN, - ConstantInt::getFalse())); - return false; - // Allocations are always uniquely numbered, so we can save time and memory - // by fast failing them. - } else if (isa(I) || isa(I)) { + // by fast failing them. + if (isa(I) || isa(I)) { localAvail[I->getParent()]->table.insert(std::make_pair(num, I)); return false; } @@ -1431,11 +1405,18 @@ bool GVN::runOnFunction(Function& F) { bool GVN::processBlock(BasicBlock* BB) { + DomTreeNode* DTN = DT->getNode(BB); // FIXME: Kill off toErase by doing erasing eagerly in a helper function (and // incrementing BI before processing an instruction). SmallVector toErase; bool changed_function = false; + if (DTN->getIDom()) + localAvail[BB] = + new ValueNumberScope(localAvail[DTN->getIDom()->getBlock()]); + else + localAvail[BB] = new ValueNumberScope(0); + for (BasicBlock::iterator BI = BB->begin(), BE = BB->end(); BI != BE;) { changed_function |= processInstruction(BI, toErase); @@ -1626,15 +1607,6 @@ bool GVN::performPRE(Function& F) { bool GVN::iterateOnFunction(Function &F) { cleanupGlobalSets(); - for (df_iterator DI = df_begin(DT->getRootNode()), - DE = df_end(DT->getRootNode()); DI != DE; ++DI) { - if (DI->getIDom()) - localAvail[DI->getBlock()] = - new ValueNumberScope(localAvail[DI->getIDom()->getBlock()]); - else - localAvail[DI->getBlock()] = new ValueNumberScope(0); - } - // Top-down walk of the dominator tree bool changed = false; #if 0 diff --git a/llvm/test/Transforms/GVN/condprop.ll b/llvm/test/Transforms/GVN/condprop.ll deleted file mode 100644 index 53cbb509fcb2..000000000000 --- a/llvm/test/Transforms/GVN/condprop.ll +++ /dev/null @@ -1,52 +0,0 @@ -; RUN: llvm-as < %s | opt -gvn | llvm-dis | grep {br i1 false} - -@a = external global i32 ; [#uses=7] - -define i32 @foo() nounwind { -entry: - %0 = load i32* @a, align 4 ; [#uses=1] - %1 = icmp eq i32 %0, 4 ; [#uses=1] - br i1 %1, label %bb, label %bb1 - -bb: ; preds = %entry - br label %bb8 - -bb1: ; preds = %entry - %2 = load i32* @a, align 4 ; [#uses=1] - %3 = icmp eq i32 %2, 5 ; [#uses=1] - br i1 %3, label %bb2, label %bb3 - -bb2: ; preds = %bb1 - br label %bb8 - -bb3: ; preds = %bb1 - %4 = load i32* @a, align 4 ; [#uses=1] - %5 = icmp eq i32 %4, 4 ; [#uses=1] - br i1 %5, label %bb4, label %bb5 - -bb4: ; preds = %bb3 - %6 = load i32* @a, align 4 ; [#uses=1] - %7 = add i32 %6, 5 ; [#uses=1] - br label %bb8 - -bb5: ; preds = %bb3 - %8 = load i32* @a, align 4 ; [#uses=1] - %9 = icmp eq i32 %8, 5 ; [#uses=1] - br i1 %9, label %bb6, label %bb7 - -bb6: ; preds = %bb5 - %10 = load i32* @a, align 4 ; [#uses=1] - %11 = add i32 %10, 4 ; [#uses=1] - br label %bb8 - -bb7: ; preds = %bb5 - %12 = load i32* @a, align 4 ; [#uses=1] - br label %bb8 - -bb8: ; preds = %bb7, %bb6, %bb4, %bb2, %bb - %.0 = phi i32 [ %12, %bb7 ], [ %11, %bb6 ], [ %7, %bb4 ], [ 4, %bb2 ], [ 5, %bb ] ; [#uses=1] - br label %return - -return: ; preds = %bb8 - ret i32 %.0 -}