Ignore:
Timestamp:
Jan 6, 2015, 3:29:34 PM (4 years ago)
Author:
nmedfort
Message:

Some work towards maintaining UseDef? information. Use PabloBlock::Create() instead of the PabloBlock? constructors.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/pablo/pabloAST.cpp

    r4284 r4404  
    1919#include "pe_zeroes.h"
    2020#include "pe_ones.h"
     21#include <pablo/codegenstate.h>
    2122#include <llvm/Support/Compiler.h>
    2223
     
    9293}
    9394
    94 
    9595void PabloAST::setMetadata(const std::string & name, PMDNode * node) {
    9696    if (LLVM_UNLIKELY(mMetadataMap == nullptr)) {
     
    111111}
    112112
     113
     114void Statement::insertBefore(Statement * const statement) {
     115    assert (statement);
     116    assert (statement != this);
     117    assert (statement->mParent);
     118    removeFromParent();
     119    mParent = statement->mParent;
     120    if (LLVM_UNLIKELY(mParent->mFirst == statement)) {
     121        mParent->mFirst = this;
     122    }
     123    mNext = statement;
     124    mPrev = statement->mPrev;
     125    statement->mPrev = this;
     126    if (LLVM_LIKELY(mPrev != nullptr)) {
     127        mPrev->mNext = this;
     128    }
     129}
     130
     131void Statement::insertAfter(Statement * const statement) {
     132    assert (statement);
     133    assert (statement != this);
     134    assert (statement->mParent);
     135    removeFromParent();
     136    mParent = statement->mParent;
     137    if (LLVM_UNLIKELY(mParent->mLast == statement)) {
     138        mParent->mLast = this;
     139    }
     140    mPrev = statement;
     141    mNext = statement->mNext;
     142    statement->mNext = this;
     143    if (LLVM_LIKELY(mNext != nullptr)) {
     144        mNext->mPrev = this;
     145    }
     146}
     147
     148void Statement::removeFromParent() {
     149    if (LLVM_LIKELY(mParent != nullptr)) {
     150        if (LLVM_UNLIKELY(mParent->mFirst == this)) {
     151            mParent->mFirst = mNext;
     152        }
     153        if (LLVM_UNLIKELY(mParent->mLast == this)) {
     154            mParent->mLast = mPrev;
     155        }
     156        if (LLVM_LIKELY(mPrev != nullptr)) {
     157            mPrev->mNext = mNext;
     158        }
     159        if (LLVM_LIKELY(mNext != nullptr)) {
     160            mNext->mPrev = mPrev;
     161        }
     162    }
     163    mPrev = nullptr;
     164    mNext = nullptr;
     165    mParent = nullptr;
     166}
     167
     168void Statement::replaceWith(Statement * const statement) {
     169    if (LLVM_UNLIKELY(mParent != nullptr)) {
     170        statement->removeFromParent();
     171    }
     172    statement->mParent = mParent;
     173    statement->mNext = mNext;
     174    statement->mPrev = mPrev;
     175    if (LLVM_LIKELY(mPrev != nullptr)) {
     176        mPrev->mNext = statement;
     177    }
     178    if (LLVM_LIKELY(mNext != nullptr)) {
     179        mNext->mPrev = statement;
     180    }
     181    mParent=nullptr;
     182    mNext=nullptr;
     183    mPrev=nullptr;
     184}
     185
    113186Statement::~Statement() {
    114187
Note: See TracChangeset for help on using the changeset viewer.