mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-28 15:33:16 +00:00
Handle X = phi Y --> X = Y
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2501 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fee97e83ce
commit
473945d1dc
@ -19,6 +19,7 @@
|
||||
#include "llvm/ConstantHandling.h"
|
||||
#include "llvm/iMemory.h"
|
||||
#include "llvm/iOther.h"
|
||||
#include "llvm/iPHINode.h"
|
||||
#include "llvm/iOperators.h"
|
||||
#include "llvm/Pass.h"
|
||||
#include "llvm/Support/InstIterator.h"
|
||||
@ -69,6 +70,7 @@ namespace {
|
||||
Instruction *visitSetCondInst(BinaryOperator *I);
|
||||
Instruction *visitShiftInst(Instruction *I);
|
||||
Instruction *visitCastInst(CastInst *CI);
|
||||
Instruction *visitPHINode(PHINode *PN);
|
||||
Instruction *visitGetElementPtrInst(GetElementPtrInst *GEP);
|
||||
Instruction *visitMemAccessInst(MemAccessInst *MAI);
|
||||
|
||||
@ -412,6 +414,8 @@ static inline bool isEliminableCastOfCast(const CastInst *CI,
|
||||
// CastInst simplification
|
||||
//
|
||||
Instruction *InstCombiner::visitCastInst(CastInst *CI) {
|
||||
if (CI->use_empty()) return 0; // Don't fix dead instructions...
|
||||
|
||||
// If the user is casting a value to the same type, eliminate this cast
|
||||
// instruction...
|
||||
if (CI->getType() == CI->getOperand(0)->getType() && !CI->use_empty()) {
|
||||
@ -436,6 +440,21 @@ Instruction *InstCombiner::visitCastInst(CastInst *CI) {
|
||||
}
|
||||
|
||||
|
||||
// PHINode simplification
|
||||
//
|
||||
Instruction *InstCombiner::visitPHINode(PHINode *PN) {
|
||||
if (PN->use_empty()) return 0; // Don't fix dead instructions...
|
||||
|
||||
// If the PHI node only has one incoming value, eliminate the PHI node...
|
||||
if (PN->getNumIncomingValues() == 1) {
|
||||
AddUsesToWorkList(PN); // Add all modified instrs to worklist
|
||||
PN->replaceAllUsesWith(PN->getIncomingValue(0));
|
||||
return PN;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst *GEP) {
|
||||
// Is it getelementptr %P, uint 0
|
||||
|
Loading…
Reference in New Issue
Block a user