void TraceBuilder::setMarker(BCMarker marker) { if (m_curMarker == marker) return; FTRACE(2, "TraceBuilder changing current marker from {} to {}\n", m_curMarker.func ? m_curMarker.show() : "<invalid>", marker.show()); assert(marker.valid()); m_curMarker = marker; }
void IRBuilder::setMarker(BCMarker marker) { auto const oldMarker = m_state.marker(); if (marker == oldMarker) return; FTRACE(2, "IRBuilder changing current marker from {} to {}\n", oldMarker.func ? oldMarker.show() : "<invalid>", marker.show()); assert(marker.valid()); m_state.setMarker(marker); }
void TraceBuilder::pushTrace(IRTrace* t, BCMarker marker, Block* b, const boost::optional<Block::iterator>& where) { FTRACE(2, "TraceBuilder saving {}@{} and using {}@{}\n", m_curTrace, m_state.marker().show(), t, marker.show()); assert(t); assert(bool(b) == bool(where)); assert(IMPLIES(b, b->trace() == t)); m_savedTraces.push( TraceState{ m_curTrace, m_curBlock, m_state.marker(), m_curWhere }); m_curTrace = t; m_curBlock = b; setMarker(marker); m_curWhere = where; }
void TraceBuilder::pushBlock(BCMarker marker, Block* b, const boost::optional<Block::iterator>& where) { FTRACE(2, "TraceBuilder saving {}@{} and using {}@{}\n", m_curBlock, m_state.marker().show(), b, marker.show()); assert(b); m_savedBlocks.push_back( BlockState{ m_curBlock, m_state.marker(), m_curWhere }); m_curBlock = b; setMarker(marker); m_curWhere = where ? where : b->end(); if (do_assert) { for (UNUSED auto const& state : m_savedBlocks) { assert(state.block != b && "Can't push a block that's already in the saved stack"); } } }