From: Ruchira Sasanka Date: Mon, 15 Oct 2001 16:58:50 +0000 (+0000) Subject: --added support for implicit operands X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b8354a8e4f2cd93fa5f82a77b300f1d327354816;p=oota-llvm.git --added support for implicit operands git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@832 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/LiveVar/LiveVarSet.cpp b/lib/Analysis/LiveVar/LiveVarSet.cpp index 07dc1286014..1ca65f0a4ba 100644 --- a/lib/Analysis/LiveVar/LiveVarSet.cpp +++ b/lib/Analysis/LiveVar/LiveVarSet.cpp @@ -14,27 +14,34 @@ void LiveVarSet::applyTranferFuncForMInst(const MachineInstr *const MInst) for( MachineInstr::val_op_const_iterator OpI(MInst); !OpI.done() ; OpI++) { - if( OpI.isDef() ) { // kill only if this operand is a def + if( OpI.isDef() ) // kill only if this operand is a def remove(*OpI); // this definition kills any uses - } + } + // do for implicit operands as well + for( unsigned i=0; i < MInst->getNumImplicitRefs(); ++i) { + if( MInst->implicitRefIsDefined(i) ) + remove( MInst->getImplicitRef(i) ); } + for( MachineInstr::val_op_const_iterator OpI(MInst); !OpI.done() ; OpI++) { if ( ((*OpI)->getType())->isLabelType()) continue; // don't process labels - - if( ! OpI.isDef() ) { // add only if this operand is a use + + if( ! OpI.isDef() ) // add only if this operand is a use add( *OpI ); // An operand is a use - so add to use set - } } -} - - - + // do for implicit operands as well + for( unsigned i=0; i < MInst->getNumImplicitRefs(); ++i) { + if( ! MInst->implicitRefIsDefined(i) ) + add( MInst->getImplicitRef(i) ); + } +} + #if 0 void LiveVarSet::applyTranferFuncForInst(const Instruction *const Inst) diff --git a/lib/Target/SparcV9/LiveVar/LiveVarSet.cpp b/lib/Target/SparcV9/LiveVar/LiveVarSet.cpp index 07dc1286014..1ca65f0a4ba 100644 --- a/lib/Target/SparcV9/LiveVar/LiveVarSet.cpp +++ b/lib/Target/SparcV9/LiveVar/LiveVarSet.cpp @@ -14,27 +14,34 @@ void LiveVarSet::applyTranferFuncForMInst(const MachineInstr *const MInst) for( MachineInstr::val_op_const_iterator OpI(MInst); !OpI.done() ; OpI++) { - if( OpI.isDef() ) { // kill only if this operand is a def + if( OpI.isDef() ) // kill only if this operand is a def remove(*OpI); // this definition kills any uses - } + } + // do for implicit operands as well + for( unsigned i=0; i < MInst->getNumImplicitRefs(); ++i) { + if( MInst->implicitRefIsDefined(i) ) + remove( MInst->getImplicitRef(i) ); } + for( MachineInstr::val_op_const_iterator OpI(MInst); !OpI.done() ; OpI++) { if ( ((*OpI)->getType())->isLabelType()) continue; // don't process labels - - if( ! OpI.isDef() ) { // add only if this operand is a use + + if( ! OpI.isDef() ) // add only if this operand is a use add( *OpI ); // An operand is a use - so add to use set - } } -} - - - + // do for implicit operands as well + for( unsigned i=0; i < MInst->getNumImplicitRefs(); ++i) { + if( ! MInst->implicitRefIsDefined(i) ) + add( MInst->getImplicitRef(i) ); + } +} + #if 0 void LiveVarSet::applyTranferFuncForInst(const Instruction *const Inst)