forked from OSchip/llvm-project
Have a few places that want to simplify phi nodes use SimplifyInstruction
rather than calling hasConstantValue. No intended functionality change. llvm-svn: 119352
This commit is contained in:
parent
a230754385
commit
637049515f
|
@ -16,6 +16,7 @@
|
|||
#include "llvm/Function.h"
|
||||
#include "llvm/Instructions.h"
|
||||
#include "llvm/Pass.h"
|
||||
#include "llvm/Analysis/InstructionSimplify.h"
|
||||
#include "llvm/Analysis/LazyValueInfo.h"
|
||||
#include "llvm/Support/CFG.h"
|
||||
#include "llvm/Transforms/Utils/Local.h"
|
||||
|
@ -96,13 +97,13 @@ bool CorrelatedValuePropagation::processPHI(PHINode *P) {
|
|||
P->setIncomingValue(i, C);
|
||||
Changed = true;
|
||||
}
|
||||
|
||||
if (Value *ConstVal = P->hasConstantValue()) {
|
||||
P->replaceAllUsesWith(ConstVal);
|
||||
|
||||
if (Value *V = SimplifyInstruction(P)) {
|
||||
P->replaceAllUsesWith(V);
|
||||
P->eraseFromParent();
|
||||
Changed = true;
|
||||
}
|
||||
|
||||
|
||||
++NumPhis;
|
||||
|
||||
return Changed;
|
||||
|
|
|
@ -60,6 +60,7 @@
|
|||
#include "llvm/Pass.h"
|
||||
#include "llvm/Analysis/CaptureTracking.h"
|
||||
#include "llvm/Analysis/InlineCost.h"
|
||||
#include "llvm/Analysis/InstructionSimplify.h"
|
||||
#include "llvm/Analysis/Loads.h"
|
||||
#include "llvm/Support/CallSite.h"
|
||||
#include "llvm/Support/CFG.h"
|
||||
|
@ -177,7 +178,7 @@ bool TailCallElim::runOnFunction(Function &F) {
|
|||
PHINode *PN = ArgumentPHIs[i];
|
||||
|
||||
// If the PHI Node is a dynamic constant, replace it with the value it is.
|
||||
if (Value *PNV = PN->hasConstantValue()) {
|
||||
if (Value *PNV = SimplifyInstruction(PN)) {
|
||||
PN->replaceAllUsesWith(PNV);
|
||||
PN->eraseFromParent();
|
||||
}
|
||||
|
|
|
@ -46,9 +46,10 @@
|
|||
#include "llvm/LLVMContext.h"
|
||||
#include "llvm/Type.h"
|
||||
#include "llvm/Analysis/AliasAnalysis.h"
|
||||
#include "llvm/Analysis/ScalarEvolution.h"
|
||||
#include "llvm/Analysis/Dominators.h"
|
||||
#include "llvm/Analysis/InstructionSimplify.h"
|
||||
#include "llvm/Analysis/LoopPass.h"
|
||||
#include "llvm/Analysis/ScalarEvolution.h"
|
||||
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
||||
#include "llvm/Transforms/Utils/Local.h"
|
||||
#include "llvm/Support/CFG.h"
|
||||
|
@ -268,7 +269,7 @@ ReprocessLoop:
|
|||
PHINode *PN;
|
||||
for (BasicBlock::iterator I = L->getHeader()->begin();
|
||||
(PN = dyn_cast<PHINode>(I++)); )
|
||||
if (Value *V = PN->hasConstantValue(DT)) {
|
||||
if (Value *V = SimplifyInstruction(PN, 0, DT)) {
|
||||
if (AA) AA->deleteValue(PN);
|
||||
PN->replaceAllUsesWith(V);
|
||||
PN->eraseFromParent();
|
||||
|
@ -448,7 +449,7 @@ static PHINode *FindPHIToPartitionLoops(Loop *L, DominatorTree *DT,
|
|||
for (BasicBlock::iterator I = L->getHeader()->begin(); isa<PHINode>(I); ) {
|
||||
PHINode *PN = cast<PHINode>(I);
|
||||
++I;
|
||||
if (Value *V = PN->hasConstantValue(DT)) {
|
||||
if (Value *V = SimplifyInstruction(PN, 0, DT)) {
|
||||
// This is a degenerate PHI already, don't modify it!
|
||||
PN->replaceAllUsesWith(V);
|
||||
if (AA) AA->deleteValue(PN);
|
||||
|
|
|
@ -24,9 +24,10 @@
|
|||
#include "llvm/Instructions.h"
|
||||
#include "llvm/IntrinsicInst.h"
|
||||
#include "llvm/Metadata.h"
|
||||
#include "llvm/Analysis/AliasSetTracker.h"
|
||||
#include "llvm/Analysis/DebugInfo.h"
|
||||
#include "llvm/Analysis/Dominators.h"
|
||||
#include "llvm/Analysis/AliasSetTracker.h"
|
||||
#include "llvm/Analysis/InstructionSimplify.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
|
@ -509,9 +510,9 @@ void PromoteMem2Reg::run() {
|
|||
for (DenseMap<std::pair<BasicBlock*, unsigned>, PHINode*>::iterator I =
|
||||
NewPhiNodes.begin(), E = NewPhiNodes.end(); I != E;) {
|
||||
PHINode *PN = I->second;
|
||||
|
||||
|
||||
// If this PHI node merges one value and/or undefs, get the value.
|
||||
if (Value *V = PN->hasConstantValue(&DT)) {
|
||||
if (Value *V = SimplifyInstruction(PN, 0, &DT)) {
|
||||
if (AST && PN->getType()->isPointerTy())
|
||||
AST->deleteValue(PN);
|
||||
PN->replaceAllUsesWith(V);
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#define DEBUG_TYPE "ssaupdater"
|
||||
#include "llvm/Instructions.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/Analysis/InstructionSimplify.h"
|
||||
#include "llvm/Support/AlignOf.h"
|
||||
#include "llvm/Support/Allocator.h"
|
||||
#include "llvm/Support/CFG.h"
|
||||
|
@ -178,9 +179,9 @@ Value *SSAUpdater::GetValueInMiddleOfBlock(BasicBlock *BB) {
|
|||
|
||||
// See if the PHI node can be merged to a single value. This can happen in
|
||||
// loop cases when we get a PHI of itself and one other value.
|
||||
if (Value *ConstVal = InsertedPHI->hasConstantValue()) {
|
||||
if (Value *V = SimplifyInstruction(InsertedPHI)) {
|
||||
InsertedPHI->eraseFromParent();
|
||||
return ConstVal;
|
||||
return V;
|
||||
}
|
||||
|
||||
// If the client wants to know about all new instructions, tell it.
|
||||
|
|
Loading…
Reference in New Issue