diff options
author | Chris Lattner <sabre@nondot.org> | 2002-04-18 14:44:13 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-04-18 14:44:13 +0000 |
commit | 6428a27ee3d54660a315c864d98b821d0607dfca (patch) | |
tree | 9543c8cd92260c732975a3e576466f11fd56818a /lib | |
parent | 27e3420ce9f0d2076147e87b4181d2456fb5c9cb (diff) |
GEP instructions can never be constant propogated.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2284 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/Scalar/SCCP.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/Transforms/Scalar/SCCP.cpp b/lib/Transforms/Scalar/SCCP.cpp index e6cf765e55..e7e8f4177c 100644 --- a/lib/Transforms/Scalar/SCCP.cpp +++ b/lib/Transforms/Scalar/SCCP.cpp @@ -429,14 +429,9 @@ void SCCP::UpdateInstruction(Instruction *I) { //===-------------------------------------------------------------------===// - // Handle Unary instructions... - // Also treated as unary here, are cast instructions and getelementptr - // instructions on struct* operands. + // Handle Unary and cast instructions... // - if (isa<UnaryOperator>(I) || isa<CastInst>(I) || - (isa<GetElementPtrInst>(I) && - cast<GetElementPtrInst>(I)->isStructSelector())) { - + if (isa<UnaryOperator>(I) || isa<CastInst>(I)) { Value *V = I->getOperand(0); InstVal &VState = getValueState(V); if (VState.isOverdefined()) { // Inherit overdefinedness of operand @@ -456,6 +451,16 @@ void SCCP::UpdateInstruction(Instruction *I) { return; } + + //===-----------------------------------------------------------------===// + // Handle GetElementPtr instructions... + // + if (isa<GetElementPtrInst>(I)) { + markOverdefined(I); + return; + } + + //===-----------------------------------------------------------------===// // Handle Binary instructions... // |