Go to the documentation of this file.
72 if (maus1 == 0 || maus2 == 0) {
77 if (index1 == index2) {
86 int maus = std::max(maus1, maus2);
89 if ((index1 & (~(maus-1))) == (index2 & (~(maus-1)))) {
118 for (
int i = 0; i < op.
dagCount(); i++) {
121 for (OperationDAG::NodeSet::iterator j = tailNodes.begin();
122 j != tailNodes.end(); j++) {
158 for (
int i = 0, inputCount = op.
numberOfInputs() ; i < inputCount; i++) {
163 if (mns.
count() != 1) {
184 for (
int i = 0; i < op.
dagCount(); i++) {
187 for (OperationDAG::NodeSet::iterator j = tailNodes.begin();
188 j != tailNodes.end(); j++) {
198 int addrOperandNum = 0;
200 k < inputCount; k++) {
203 addrOperandNum = k+1;
206 if (addrOperandNum == 0) {
213 for (
int k = 0; k < oDag.
inDegree(*n); k++) {
219 if (addressSource == NULL) {
225 if (addrSrcOn == NULL) {
229 if (addrOp.
name() ==
"add" ||
230 addrOp.
name() ==
"ADD") {
234 if (addrOp.
name() ==
"sub" ||
235 addrOp.
name() ==
"SUB") {
247 if (addrInputs.size() != 2) {
251 for (OperationDAG::NodeSet::iterator k = addrInputs.begin();
252 k != addrInputs.end(); k++) {
282 if (!isSub && !isAdd) {
289 if (input1Set.
count() != 1 || input2Set.
count() != 1) {
329 if (input1Set.
count() != 1 || input2Set.
count() != 1) {
341 if (prevSrc2 == NULL) {
351 if (prevSrc2 == NULL) {
354 loopMul <<= shiftAmount;
365 if (prevSrc2 == NULL) {
375 if (counterInit != 0) {
384 loopIncrement = increment * loopMul;
399 if (input1Set.
count() != 1 || input2Set.
count() != 1) {
const Operation & operation() const
virtual NodeSet predecessors(const Node &node, bool ignoreBackEdges=false, bool ignoreForwardEdges=false) const
virtual Node & tailNode(const Edge &edge) const
unsigned int mausOfOperation(const Operation &op)
std::set< OperationDAGNode *, typename OperationDAGNode ::Comparator > NodeSet
virtual int numberOfInputs() const
bool isSourceConstant() const
Operation & referencedOperation() const
virtual TCEString name() const
MoveNode * onlyRegisterRawSource(const MoveNode &mn, int allowGuardEdges=2, int backEdges=0) const
static const MoveNode * detectConstantScale(const MoveNode &mn, int &shiftAmount)
static TwoPartAddressOperandDetection findTwoPartAddressOperands(const ProgramOperation &po)
const OperationDAG::NodeSet & endNodes() const
ProgramOperation & sourceOperation() const
OffsetOperation offsetOperation
virtual Edge & inEdge(const Node &node, const int index) const
virtual bool isGPR() const
bool isSourceOperation() const
virtual SimValue value() const
static const MoveNode * searchLoopIndexBasedIncrement(DataDependenceGraph &ddg, const MoveNode &mn, long &loopIncrement)
static const MoveNode * addressOperandMove(const ProgramOperation &po)
virtual int inDegree(const Node &node) const
virtual Operand & input(int index) const
bool isSourceVariable() const
virtual bool usesMemory() const
TTAProgram::Move & move()
virtual int dagCount() const
static const MoveNode * findIncrement(const MoveNode &mn, long &increment)
AliasingResult compareIndeces(int index1, int index2, const ProgramOperation &pop1, const ProgramOperation &pop2)
MoveNodeSet & inputNode(int in) const
virtual int memoryUnits() const
Terminal & source() const
virtual bool isAddress() const
virtual bool isImmediate() const
virtual OperationDAG & dag(int index) const
virtual int operandIndex() const