Goose  Artifact [88f747ec99]

Artifact 88f747ec9975087339e78bb83afae460ee4dd08de2fd67c7f22f386a42ce744e:

  • File bs/llr/terminator.cpp — part of check-in [4ae6912760] at 2019-09-29 22:30:12 on branch trunk —
    • Fixed some issues with implicit termination of void functions.
    • llr: give an index to each basic block, and keep track of back links towards previous blocks.
    (user: achavasse size: 980)

#include "llr/llr.h"

namespace goose::llr
{
    bool Terminator::canBeExecuted() const
    {
        return visit( []( auto&& e )
        {
            return e.canBeExecuted();
        }, m_content );
    }

    bool Terminator::canBeEagerlyEvaluated() const
    {
        return visit( []( auto&& e )
        {
            return e.canBeEagerlyEvaluated();
        }, m_content );
    }

    void Terminator::setupBackLinks( uint32_t srcBBIndex )
    {
        visit( [&]( auto&& e )
        {
            e.setupBackLinks( srcBBIndex );
        }, m_content );
    }

    void Branch::setupBackLinks( uint32_t srcBBIndex )
    {
        assert( m_dest.lock() );
        m_dest.lock()->addBackLink( srcBBIndex );
    }

    void CondBranch::setupBackLinks( uint32_t srcBBIndex )
    {
        assert( m_trueDest.lock() );
        assert( m_falseDest.lock() );
        m_trueDest.lock()->addBackLink( srcBBIndex );
        m_falseDest.lock()->addBackLink( srcBBIndex );
    }
}