C-sparse
view release on metacpan or search on metacpan
src/sparse-0.4.4/graph.c view on Meta::CPAN
/* Copyright © International Business Machines Corp., 2006
* Adelard LLP, 2007
*
* Author: Josh Triplett <josh@freedesktop.org>
* Dan Sheridan <djs@adelard.com>
*
* Licensed under the Open Software License version 1.1
*/
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <fcntl.h>
#include "lib.h"
#include "allocate.h"
#include "token.h"
#include "parse.h"
#include "symbol.h"
#include "expression.h"
#include "linearize.h"
/* Draw the subgraph for a given entrypoint. Includes details of loads
* and stores for globals, and marks return bbs */
static void graph_ep(SCTX_ struct entrypoint *ep)
{
struct basic_block *bb;
struct instruction *insn;
const char *fname, *sname;
fname = show_ident(sctx_ ep->name->ident);
sname = stream_name(sctx_ ep->entry->bb->pos->pos.stream);
printf("subgraph cluster%p {\n"
" color=blue;\n"
" label=<<TABLE BORDER=\"0\" CELLBORDER=\"0\">\n"
" <TR><TD>%s</TD></TR>\n"
" <TR><TD><FONT POINT-SIZE=\"21\">%s()</FONT></TD></TR>\n"
" </TABLE>>;\n"
" file=\"%s\";\n"
" fun=\"%s\";\n"
" ep=bb%p;\n",
ep, sname, fname, sname, fname, ep->entry->bb);
FOR_EACH_PTR(ep->bbs, bb) {
struct basic_block *child;
int ret = 0;
const char * s = ", ls=\"[";
/* Node for the bb */
printf(" bb%p [shape=ellipse,label=%d,line=%d,col=%d",
bb, bb->pos->pos.line, bb->pos->pos.line, bb->pos->pos.pos);
/* List loads and stores */
FOR_EACH_PTR(bb->insns, insn) {
switch(insn->opcode) {
case OP_STORE:
if (insn->symbol->type == PSEUDO_SYM) {
printf("%s store(%s)", s, show_ident(sctx_ insn->symbol->sym->ident));
( run in 0.504 second using v1.01-cache-2.11-cpan-d7f47b0818f )