QBE
Файл all.h
#include <assert.h>
#include <inttypes.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ops.h"
Граф включаемых заголовочных файлов для all.h:
Граф файлов, в которые включается этот файл:

См. исходные тексты.

Структуры данных

struct  Target
 
struct  BSet
 
struct  Ref
 Структура, хранящая описание переменных (более подробное описание переменной ищите в Tmp). Для получения информации об имени этой переменной требуется писать конструкцию вида: fn->tmp[blk->ins->to.val].name - здесь будет получено имя переменной, в которую записывается результат операции, стоящей первой в списке инструкций ins (Ins) блока blk (Blk). Подробнее...
 
struct  Op
 Структура, хранящая информацию об операции. Подробнее...
 
struct  Ins
 Структура, хранящая информацию об инструкциях. Подробнее...
 
struct  Phi
 
struct  Blk
 Непосредственно информация о базовом блоке. Подробнее...
 
struct  Use
 Структура, хранящая информацию об одном "использовании" переменной. Подробнее...
 
struct  Alias
 
struct  Tmp
 Содержит информацию о переменной Подробнее...
 
struct  Con
 
struct  Addr
 
struct  Fn
 Структура, хранящая в себе информацию о функции Подробнее...
 
struct  Typ
 
struct  Typ::Field
 
struct  Dat
 

Макросы

#define MAKESURE(what, x)   typedef char make_sure_##what[(x)?1:-1]
 
#define die(...)   die_(__FILE__, __VA_ARGS__)
 
#define BIT(n)   ((bits)1 << (n))
 
#define R   (Ref){0, 0}
 
#define TMP(x)   (Ref){RTmp, x}
 
#define CON(x)   (Ref){RCon, x}
 
#define CON_Z   CON(0) /* reserved zero constant */
 
#define SLOT(x)   (Ref){RSlot, (x)&0x1fffffff}
 
#define TYPE(x)   (Ref){RType, x}
 
#define CALL(x)   (Ref){RCall, x}
 
#define MEM(x)   (Ref){RMem, x}
 
#define O(op, x, y)   O##op,
 
#define JMPS(X)
 
#define X(j)   J##j,
 
#define isstore(o)   (Ostoreb <= o && o <= Ostored)
 
#define isload(o)   (Oloadsb <= o && o <= Oload)
 
#define isext(o)   (Oextsb <= o && o <= Oextuw)
 
#define ispar(o)   (Opar <= o && o <= Opare)
 
#define isarg(o)   (Oarg <= o && o <= Oarge)
 
#define isret(j)   (Jret0 <= j && j <= Jretc)
 
#define KWIDE(k)   ((k)&1)
 
#define KBASE(k)   ((k)>>1)
 
#define astack(t)   ((t) & 1)
 

Определения типов

typedef unsigned char uchar
 
typedef unsigned int uint
 
typedef unsigned long ulong
 
typedef unsigned long long bits
 
typedef struct BSet BSet
 
typedef struct Ref Ref
 
typedef struct Op Op
 
typedef struct Ins Ins
 
typedef struct Phi Phi
 
typedef struct Blk Blk
 
typedef struct Use Use
 
typedef struct Alias Alias
 
typedef struct Tmp Tmp
 
typedef struct Con Con
 
typedef struct Addr Mem
 
typedef struct Fn Fn
 
typedef struct Typ Typ
 
typedef struct Field Field
 
typedef struct Dat Dat
 
typedef struct Target Target
 
typedef struct Addr Addr
 

Перечисления

enum  { NString = 32, NPred = 63, NIns = 1 << 20, NAlign = 3, NField = 32, NBit = CHAR_BIT * sizeof(bits) }
 
enum  { RXX = 0, Tmp0 = NBit }
 
enum  { RTmp, RCon, RType, RSlot, RCall, RMem }
 
enum  CmpI { Cieq, Cine, Cisge, Cisgt, Cisle, Cislt, Ciuge, Ciugt, Ciule, Ciult, NCmpI }
 Сравнения для 32 битных целых чисел. Подробнее...
 
enum  CmpF { Cfeq, Cfge, Cfgt, Cfle, Cflt, Cfne, Cfo, Cfuo, NCmpF, NCmp = NCmpI + NCmpF }
 Сравнения для чисел типа float. Подробнее...
 
enum  O {
  Oxxx, Oadd, Osub, Odiv, Orem, Oudiv, Ourem, Omul, Oand, Oor, Oxor, Osar, Oshr, Oshl, Oceqw, Ocnew, Ocsgew, Ocsgtw, Ocslew, Ocsltw,
  Ocugew, Ocugtw, Oculew, Ocultw, Oceql, Ocnel, Ocsgel, Ocsgtl, Ocslel, Ocsltl, Ocugel, Ocugtl, Oculel, Ocultl, Oceqs, Ocges, Ocgts, Ocles, Oclts, Ocnes,
  Ocos, Ocuos, Oceqd, Ocged, Ocgtd, Ocled, Ocltd, Ocned, Ocod, Ocuod, Ostoreb, Ostoreh, Ostorew, Ostorel, Ostores, Ostored, Oloadsb, Oloadub, Oloadsh, Oloaduh,
  Oloadsw, Oloaduw, Oload, Oextsb, Oextub, Oextsh, Oextuh, Oextsw, Oextuw, Oexts, Otruncd, Ostosi, Odtosi, Oswtof, Osltof, Ocast, Oalloc4, Oalloc8, Oalloc16, Ovaarg,
  Ovastart, Ocopy, Onop, Oaddr, Oswap, Osign, Osalloc, Oxidiv, Oxdiv, Oxcmp, Oxtest, Oacmp, Oacmn, Oafcmp, Opar, Oparc, Opare, Oarg, Oargc, Oarge,
  Ocall, Ovacall, Oflagieq, Oflagine, Oflagisge, Oflagisgt, Oflagisle, Oflagislt, Oflagiuge, Oflagiugt, Oflagiule, Oflagiult, Oflagfeq, Oflagfge, Oflagfgt, Oflagfle, Oflagflt, Oflagfne, Oflagfo, Oflagfuo,
  NOp
}
 Перечисление всех операций QBE IL. Подробнее...
 
enum  J {
  Jxxx, Jret0, Jretw, Jretl, Jrets, Jretd, Jretc, Jjmp, Jjnz, Jjfieq, Jjfine, Jjfisge, Jjfisgt, Jjfisle, Jjfislt, Jjfiuge, Jjfiugt, Jjfiule, Jjfiult, Jjffeq,
  Jjffge, Jjffgt, Jjffle, Jjfflt, Jjffne, Jjffo, Jjffuo, NJmp
}
 Перечисление всех прыжков QBE IL. Подробнее...
 
enum  { Ocmpw = Oceqw, Ocmpw1 = Ocultw, Ocmpl = Oceql, Ocmpl1 = Ocultl, Ocmps = Oceqs, Ocmps1 = Ocuos, Ocmpd = Oceqd, Ocmpd1 = Ocuod, Oalloc = Oalloc4, Oalloc1 = Oalloc16, Oflag = Oflagieq, Oflag1 = Oflagfuo, NPubOp = Onop, Jjf = Jjfieq, Jjf1 = Jjffuo }
 
enum  Class { Kx = -1, Kw, Kl, Ks, Kd }
 
enum  { NoAlias, MayAlias, MustAlias }
 
enum  { FEnd, Fb, Fh, Fw, Fl, Fs, Fd, FPad, FTyp }
 
enum  Pool { Pheap, Pfn }
 

Функции

uint32_t hash (char *)
 
void die_ (char *, char *,...) __attribute__((noreturn))
 
void * emalloc (size_t)
 
void * alloc (size_t)
 
void freeall (void)
 
void * vnew (ulong, size_t, Pool)
 
void vfree (void *)
 
void vgrow (void *, ulong)
 
uint32_t intern (char *)
 
char * str (uint32_t)
 
int argcls (Ins *, int)
 
int isreg (Ref)
 
int iscmp (int, int *, int *)
 
void emit (int, int, Ref, Ref, Ref)
 
void emiti (Ins)
 
void idup (Ins **, Ins *, ulong)
 
Insicpy (Ins *, Ins *, ulong)
 
int cmpop (int)
 
int cmpneg (int)
 
int clsmerge (short *, short)
 
int phicls (int, Tmp *)
 
Ref newtmp (char *, int, Fn *)
 
void chuse (Ref, int, Fn *)
 
Ref getcon (int64_t, Fn *)
 
void addcon (Con *, Con *)
 
void blit (Ref, uint, Ref, uint, Fn *)
 
void dumpts (BSet *, Tmp *, FILE *)
 
void bsinit (BSet *, uint)
 
void bszero (BSet *)
 
uint bscount (BSet *)
 
void bsset (BSet *, uint)
 
void bsclr (BSet *, uint)
 
void bscopy (BSet *, BSet *)
 
void bsunion (BSet *, BSet *)
 
void bsinter (BSet *, BSet *)
 
void bsdiff (BSet *, BSet *)
 
int bsequal (BSet *, BSet *)
 
int bsiter (BSet *, int *)
 
void parse (FILE *, char *, void(*)(Dat *), void(*)(Fn *))
 Парсит файл с программой на QBE IL. Подробнее...
 
void printfn (Fn *, FILE *)
 
void printref (Ref, Fn *, FILE *)
 
void err (char *,...) __attribute__((noreturn))
 
Blkblknew (void)
 
void edgedel (Blk *, Blk **)
 
void fillpreds (Fn *)
 
void fillrpo (Fn *)
 
void filldom (Fn *)
 
int sdom (Blk *, Blk *)
 
int dom (Blk *, Blk *)
 
void fillfron (Fn *)
 
void loopiter (Fn *, void(*)(Blk *, Blk *))
 
void fillloop (Fn *)
 
void simpljmp (Fn *)
 
void memopt (Fn *)
 
void fillalias (Fn *)
 
int alias (Ref, int, Ref, int, int *, Fn *)
 
int escapes (Ref, Fn *)
 
int loadsz (Ins *)
 
int storesz (Ins *)
 
void loadopt (Fn *)
 
void filluse (Fn *)
 Заполняет информацию об использовании переменных в функции Подробнее...
 
void ssa (Fn *)
 
void ssacheck (Fn *)
 
void simpl (Fn *)
 
void copy (Fn *)
 
void fold (Fn *)
 
void liveon (BSet *, Blk *, Blk *)
 
void filllive (Fn *)
 
void fillcost (Fn *)
 
void spill (Fn *)
 
void rega (Fn *)
 
void gasemitdat (Dat *, FILE *)
 
int gasstash (void *, int)
 
void gasemitfin (FILE *)
 

Переменные

enum { ... }  type
 
uint len
 
Target T
 
char debug ['Z'+1]
 
Typtyp
 
Ins insb [NIns]
 
Inscuri
 
Op optab [NOp]
 Массив всех операций. Подробнее...
 
char * gasloc
 
char * gassym
 

Макросы

◆ astack

#define astack (   t)    ((t) & 1)

См. определение в файле all.h строка 314

◆ BIT

#define BIT (   n)    ((bits)1 << (n))

См. определение в файле all.h строка 59

Используется в bsiter().

◆ CALL

#define CALL (   x)    (Ref){RCall, x}

См. определение в файле all.h строка 98

◆ CON

#define CON (   x)    (Ref){RCon, x}

См. определение в файле all.h строка 94

◆ CON_Z

#define CON_Z   CON(0) /* reserved zero constant */

См. определение в файле all.h строка 95

◆ die

#define die (   ...)    die_(__FILE__, __VA_ARGS__)

См. определение в файле all.h строка 9

Используется в emalloc(), emit(), loadsz() и storesz().

◆ isarg

#define isarg (   o)    (Oarg <= o && o <= Oarge)

См. определение в файле all.h строка 208

◆ isext

#define isext (   o)    (Oextsb <= o && o <= Oextuw)

См. определение в файле all.h строка 206

◆ isload

#define isload (   o)    (Oloadsb <= o && o <= Oload)

См. определение в файле all.h строка 205

◆ ispar

#define ispar (   o)    (Opar <= o && o <= Opare)

См. определение в файле all.h строка 207

◆ isret

#define isret (   j)    (Jret0 <= j && j <= Jretc)

См. определение в файле all.h строка 209

◆ isstore

#define isstore (   o)    (Ostoreb <= o && o <= Ostored)

См. определение в файле all.h строка 204

◆ JMPS

#define JMPS (   X)
Макроопределение:
X(ret0) X(retw) X(retl) X(rets) \
X(retd) X(retc) X(jmp) X(jnz) \
X(jfieq) X(jfine) X(jfisge) X(jfisgt) \
X(jfisle) X(jfislt) X(jfiuge) X(jfiugt) \
X(jfiule) X(jfiult) X(jffeq) X(jffge) \
X(jffgt) X(jffle) X(jfflt) X(jffne) \
X(jffo) X(jffuo)
#define X(NMemArgs, SetsZeroFlag, LeavesFlags)
Definition: all.h:180

См. определение в файле all.h строка 172

Используется в printfn().

◆ KBASE

#define KBASE (   k)    ((k)>>1)

См. определение в файле all.h строка 220

Используется в filllive().

◆ KWIDE

#define KWIDE (   k)    ((k)&1)

См. определение в файле all.h строка 219

Используется в loadsz().

◆ MAKESURE

#define MAKESURE (   what,
 
)    typedef char make_sure_##what[(x)?1:-1]

См. определение в файле all.h строка 8

◆ MEM

#define MEM (   x)    (Ref){RMem, x}

См. определение в файле all.h строка 99

◆ O

#define O (   op,
  x,
 
)    O##op,

См. определение в файле all.h строка 162

◆ R

#define R   (Ref){0, 0}

См. определение в файле all.h строка 92

Используется в blit().

◆ SLOT

#define SLOT (   x)    (Ref){RSlot, (x)&0x1fffffff}

См. определение в файле all.h строка 96

◆ TMP

#define TMP (   x)    (Ref){RTmp, x}

См. определение в файле all.h строка 93

Используется в newtmp().

◆ TYPE

#define TYPE (   x)    (Ref){RType, x}

См. определение в файле all.h строка 97

◆ X

#define X (   j)    J##j,

См. определение в файле all.h строка 180

Типы

◆ Addr

typedef struct Addr Addr

См. определение в файле all.h строка 369

◆ Alias

typedef struct Alias Alias

См. определение в файле all.h строка 23

◆ bits

typedef unsigned long long bits

См. определение в файле all.h строка 14

◆ Blk

typedef struct Blk Blk

См. определение в файле all.h строка 21

◆ BSet

typedef struct BSet BSet

См. определение в файле all.h строка 16

◆ Con

typedef struct Con Con

См. определение в файле all.h строка 25

◆ Dat

typedef struct Dat Dat

См. определение в файле all.h строка 30

◆ Field

typedef struct Field Field

См. определение в файле all.h строка 29

◆ Fn

typedef struct Fn Fn

См. определение в файле all.h строка 27

◆ Ins

typedef struct Ins Ins

См. определение в файле all.h строка 19

◆ Mem

typedef struct Addr Mem

См. определение в файле all.h строка 26

◆ Op

typedef struct Op Op

См. определение в файле all.h строка 18

◆ Phi

typedef struct Phi Phi

См. определение в файле all.h строка 20

◆ Ref

typedef struct Ref Ref

См. определение в файле all.h строка 17

◆ Target

typedef struct Target Target

См. определение в файле all.h строка 31

◆ Tmp

typedef struct Tmp Tmp

См. определение в файле all.h строка 24

◆ Typ

typedef struct Typ Typ

См. определение в файле all.h строка 28

◆ uchar

typedef unsigned char uchar

См. определение в файле all.h строка 11

◆ uint

typedef unsigned int uint

См. определение в файле all.h строка 12

◆ ulong

typedef unsigned long ulong

См. определение в файле all.h строка 13

◆ Use

typedef struct Use Use

См. определение в файле all.h строка 22

Перечисления

◆ anonymous enum

anonymous enum
Элементы перечислений
NString 
NPred 
NIns 
NAlign 
NField 
NBit 

См. определение в файле all.h строка 33

◆ anonymous enum

anonymous enum
Элементы перечислений
RXX 
Tmp0 

Номер (в массиве Fn->tmp) первой не регистровой переменной

См. определение в файле all.h строка 61

◆ anonymous enum

anonymous enum
Элементы перечислений
FEnd 
Fb 
Fh 
Fw 
Fl 
Fs 
Fd 
FPad 
FTyp 

См. определение в файле all.h строка 410

◆ anonymous enum

anonymous enum
Элементы перечислений
RTmp 
RCon 
RType 
RSlot 
RCall 
RMem 

См. определение в файле all.h строка 83

◆ anonymous enum

anonymous enum
Элементы перечислений
Ocmpw 
Ocmpw1 
Ocmpl 
Ocmpl1 
Ocmps 
Ocmps1 
Ocmpd 
Ocmpd1 
Oalloc 
Oalloc1 
Oflag 
Oflag1 
NPubOp 
Jjf 
Jjf1 

См. определение в файле all.h строка 186

◆ anonymous enum

anonymous enum
Элементы перечислений
NoAlias 
MayAlias 
MustAlias 

См. определение в файле all.h строка 300

◆ Class

enum Class
Элементы перечислений
Kx 
Kw 
Kl 
Ks 
Kd 

См. определение в файле all.h строка 211

◆ CmpF

enum CmpF

Сравнения для чисел типа float.

Элементы перечислений
Cfeq 
Cfge 
Cfgt 
Cfle 
Cflt 
Cfne 
Cfo 
Cfuo 
NCmpF 
NCmp 

См. определение в файле all.h строка 144

◆ CmpI

enum CmpI

Сравнения для 32 битных целых чисел.

Элементы перечислений
Cieq 
Cine 
Cisge 
Cisgt 
Cisle 
Cislt 
Ciuge 
Ciugt 
Ciule 
Ciult 
NCmpI 

См. определение в файле all.h строка 127

◆ J

enum J

Перечисление всех прыжков QBE IL.

Элементы перечислений
Jxxx 
Jret0 
Jretw 
Jretl 
Jrets 
Jretd 
Jretc 
Jjmp 
Jjnz 
Jjfieq 
Jjfine 
Jjfisge 
Jjfisgt 
Jjfisle 
Jjfislt 
Jjfiuge 
Jjfiugt 
Jjfiule 
Jjfiult 
Jjffeq 
Jjffge 
Jjffgt 
Jjffle 
Jjfflt 
Jjffne 
Jjffo 
Jjffuo 

Количество прыжков языка QBE IL

NJmp 

См. определение в файле all.h строка 170

◆ O

enum O

Перечисление всех операций QBE IL.

Элементы перечислений
Oxxx 
Oadd 
Osub 
Odiv 
Orem 
Oudiv 
Ourem 
Omul 
Oand 
Oor 
Oxor 
Osar 
Oshr 
Oshl 
Oceqw 
Ocnew 
Ocsgew 
Ocsgtw 
Ocslew 
Ocsltw 
Ocugew 
Ocugtw 
Oculew 
Ocultw 
Oceql 
Ocnel 
Ocsgel 
Ocsgtl 
Ocslel 
Ocsltl 
Ocugel 
Ocugtl 
Oculel 
Ocultl 
Oceqs 
Ocges 
Ocgts 
Ocles 
Oclts 
Ocnes 
Ocos 
Ocuos 
Oceqd 
Ocged 
Ocgtd 
Ocled 
Ocltd 
Ocned 
Ocod 
Ocuod 
Ostoreb 
Ostoreh 
Ostorew 
Ostorel 
Ostores 
Ostored 
Oloadsb 
Oloadub 
Oloadsh 
Oloaduh 
Oloadsw 
Oloaduw 
Oload 
Oextsb 
Oextub 
Oextsh 
Oextuh 
Oextsw 
Oextuw 
Oexts 
Otruncd 
Ostosi 
Odtosi 
Oswtof 
Osltof 
Ocast 
Oalloc4 
Oalloc8 
Oalloc16 
Ovaarg 
Ovastart 
Ocopy 
Onop 
Oaddr 
Oswap 
Osign 
Osalloc 
Oxidiv 
Oxdiv 
Oxcmp 
Oxtest 
Oacmp 
Oacmn 
Oafcmp 
Opar 
Oparc 
Opare 
Oarg 
Oargc 
Oarge 
Ocall 
Ovacall 
Oflagieq 
Oflagine 
Oflagisge 
Oflagisgt 
Oflagisle 
Oflagislt 
Oflagiuge 
Oflagiugt 
Oflagiule 
Oflagiult 
Oflagfeq 
Oflagfge 
Oflagfgt 
Oflagfle 
Oflagflt 
Oflagfne 
Oflagfo 
Oflagfuo 
NOp 

Количество операций языка QBE IL

См. определение в файле all.h строка 160

◆ Pool

enum Pool
Элементы перечислений
Pheap 
Pfn 

См. определение в файле all.h строка 458

Функции

◆ addcon()

void addcon ( Con ,
Con  
)

См. определение в файле util.c строка 364

Перекрестные ссылки Con::bits, Con::i, Con::label и Con::type.

◆ alias()

int alias ( Ref  ,
int  ,
Ref  ,
int  ,
int *  ,
Fn  
)

См. определение в файле alias.c строка 31

◆ alloc()

void* alloc ( size_t  )

См. определение в файле util.c строка 77

Используется в blknew(), bsinit() и idup().

◆ argcls()

int argcls ( Ins ,
int   
)

См. определение в файле util.c строка 223

Перекрестные ссылки Op::argcls, Ins::cls, Ins::op и optab.

◆ blit()

void blit ( Ref  ,
uint  ,
Ref  ,
uint  ,
Fn  
)

См. определение в файле util.c строка 379

Перекрестные ссылки cls, emit(), getcon(), Kl, Kw, newtmp(), Oadd, Oload, Oloadub, Oloaduh, Ostoreb, Ostoreh, Ostorel, Ostorew и R.

◆ blknew()

Blk* blknew ( void  )

См. определение в файле cfg.c строка 4

Перекрестные ссылки alloc().

◆ bsclr()

void bsclr ( BSet ,
uint   
)

См. определение в файле util.c строка 474

◆ bscopy()

void bscopy ( BSet ,
BSet  
)

См. определение в файле util.c строка 491

Используется в filllive() и liveon().

◆ bscount()

uint bscount ( BSet )

См. определение в файле util.c строка 450

Перекрестные ссылки BSet::nt.

◆ bsdiff()

void bsdiff ( BSet ,
BSet  
)

См. определение в файле util.c строка 494

◆ bsequal()

int bsequal ( BSet ,
BSet  
)

См. определение в файле util.c строка 497

Используется в filllive().

◆ bsinit()

void bsinit ( BSet ,
uint   
)

См. определение в файле util.c строка 403

Перекрестные ссылки alloc(), NBit, BSet::nt и BSet::t.

Используется в filllive().

◆ bsinter()

void bsinter ( BSet ,
BSet  
)

См. определение в файле util.c строка 493

◆ bsiter()

int bsiter ( BSet ,
int *   
)

См. определение в файле util.c строка 521

Перекрестные ссылки BIT, NBit, BSet::nt и BSet::t.

Используется в filllive().

◆ bsset()

void bsset ( BSet ,
uint   
)

См. определение в файле util.c строка 467

◆ bsunion()

void bsunion ( BSet ,
BSet  
)

См. определение в файле util.c строка 492

Используется в filllive().

◆ bszero()

void bszero ( BSet )

См. определение в файле util.c строка 509

Перекрестные ссылки BSet::nt и BSet::t.

◆ chuse()

void chuse ( Ref  ,
int  ,
Fn  
)

См. определение в файле util.c строка 344

◆ clsmerge()

int clsmerge ( short *  ,
short   
)

См. определение в файле util.c строка 296

Перекрестные ссылки Kl, Kw и Kx.

◆ cmpneg()

int cmpneg ( int  )

См. определение в файле util.c строка 282

Перекрестные ссылки NCmp.

◆ cmpop()

int cmpop ( int  )

См. определение в файле util.c строка 289

Перекрестные ссылки NCmp.

◆ copy()

void copy ( Fn )

См. определение в файле copy.c строка 107

Перекрестные ссылки emalloc(), Phi::link, Blk::link, Fn::ntmp, Blk::phi и Fn::start.

◆ die_()

void die_ ( char *  ,
char *  ,
  ... 
)

См. определение в файле util.c строка 53

◆ dom()

int dom ( Blk ,
Blk  
)

См. определение в файле cfg.c строка 198

Перекрестные ссылки sdom().

◆ dumpts()

void dumpts ( BSet ,
Tmp ,
FILE *   
)

См. определение в файле util.c строка 543

◆ edgedel()

void edgedel ( Blk ,
Blk **   
)

См. определение в файле cfg.c строка 15

Перекрестные ссылки Phi::arg, Phi::blk, Phi::link, Phi::narg, Blk::npred, Blk::phi, Blk::pred, Blk::s1 и Blk::s2.

◆ emalloc()

void* emalloc ( size_t  )

См. определение в файле util.c строка 66

Перекрестные ссылки die.

Используется в copy(), simpljmp() и ssa().

◆ emit()

void emit ( int  ,
int  ,
Ref  ,
Ref  ,
Ref   
)

См. определение в файле util.c строка 229

Перекрестные ссылки curi, die, insb и Ins::op.

Используется в blit() и emiti().

◆ emiti()

void emiti ( Ins  )

См. определение в файле util.c строка 240

Перекрестные ссылки Ins::arg, Ins::cls, emit(), Ins::op и Ins::to.

◆ err()

void err ( char *  ,
  ... 
)

См. определение в файле parse.c строка 134

Используется в gasemitdat() и ssacheck().

◆ escapes()

int escapes ( Ref  ,
Fn  
)

См. определение в файле alias.c строка 83

◆ fillalias()

void fillalias ( Fn )

См. определение в файле alias.c строка 107

Перекрестные ссылки Phi::link, Fn::nblk, Blk::phi и Fn::rpo.

◆ fillcost()

void fillcost ( Fn )

См. определение в файле spill.c строка 40

Перекрестные ссылки loopiter().

◆ filldom()

void filldom ( Fn )

См. определение в файле cfg.c строка 152

Перекрестные ссылки Blk::dlink, Blk::dom, Blk::idom, Blk::link, Fn::nblk, Blk::npred, Blk::pred, Fn::rpo и Fn::start.

Используется в ssa().

◆ fillfron()

void fillfron ( Fn )

См. определение в файле cfg.c строка 220

Перекрестные ссылки Blk::idom, Blk::link, Blk::nfron, Blk::s1, sdom() и Fn::start.

Используется в ssa().

◆ filllive()

void filllive ( Fn )

См. определение в файле live.c строка 39

Перекрестные ссылки bscopy(), bsequal(), bsinit(), bsiter(), bsunion(), Tmp::cls, Blk::gen, Blk::in, KBASE, Blk::link, liveon(), Fn::nblk, Fn::ntmp, Blk::out, Target::rglob, Fn::rpo, Blk::s1, Blk::s2, Fn::start, BSet::t, T и Fn::tmp.

Используется в ssa().

◆ fillloop()

void fillloop ( Fn )

См. определение в файле cfg.c строка 273

Перекрестные ссылки Blk::link, Blk::loop, loopiter(), multloop() и Fn::start.

◆ fillpreds()

void fillpreds ( Fn )

См. определение в файле cfg.c строка 57

Перекрестные ссылки Blk::link, Blk::npred, Blk::pred, Blk::s1, Blk::s2 и Fn::start.

◆ fillrpo()

void fillrpo ( Fn )

См. определение в файле cfg.c строка 102

Перекрестные ссылки Blk::id, Blk::link и Fn::start.

◆ filluse()

void filluse ( Fn fn)

Заполняет информацию об использовании переменных в функции

Заполняет поля use переменных из массива fn->tmp

Аргументы
fnФункция, для которой необходимо заполнить информацию об использовании переменных

См. определение в файле ssa.c строка 46

◆ fold()

void fold ( Fn )

См. определение в файле fold.c строка 184

◆ freeall()

void freeall ( void  )

См. определение в файле util.c строка 93

◆ gasemitdat()

void gasemitdat ( Dat ,
FILE *   
)

См. определение в файле gas.c строка 7

Перекрестные ссылки err(), Dat::export, gassym, Dat::isref, Dat::isstr, Dat::num, Dat::ref, Dat::str, Dat::type и Dat::u.

◆ gasemitfin()

void gasemitfin ( FILE *  )

См. определение в файле gas.c строка 87

◆ gasstash()

int gasstash ( void *  ,
int   
)

См. определение в файле gas.c строка 68

◆ getcon()

Ref getcon ( int64_t  ,
Fn  
)

См. определение в файле util.c строка 351

Используется в blit().

◆ hash()

uint32_t hash ( char *  )

См. определение в файле util.c строка 43

Используется в intern().

◆ icpy()

Ins* icpy ( Ins ,
Ins ,
ulong   
)

См. определение в файле util.c строка 253

◆ idup()

void idup ( Ins **  ,
Ins ,
ulong   
)

См. определение в файле util.c строка 246

Перекрестные ссылки alloc().

◆ intern()

uint32_t intern ( char *  )

См. определение в файле util.c строка 158

Перекрестные ссылки hash() и IMask.

◆ iscmp()

int iscmp ( int  ,
int *  ,
int *   
)

См. определение в файле util.c строка 199

Перекрестные ссылки Kd, Kl, Ks, Kw, NCmpI, Ocmpd, Ocmpd1, Ocmpl, Ocmpl1, Ocmps, Ocmps1, Ocmpw и Ocmpw1.

◆ isreg()

int isreg ( Ref  )

См. определение в файле util.c строка 193

◆ liveon()

void liveon ( BSet ,
Blk ,
Blk  
)

См. определение в файле live.c строка 4

Перекрестные ссылки bscopy(), Blk::in, Phi::link и Blk::phi.

Используется в filllive().

◆ loadopt()

void loadopt ( Fn )

См. определение в файле load.c строка 377

◆ loadsz()

int loadsz ( Ins )

См. определение в файле load.c строка 46

Перекрестные ссылки Ins::cls, die, KWIDE, Oload, Oloadsb, Oloadsh, Oloadsw, Oloadub, Oloaduh, Oloaduw и Ins::op.

◆ loopiter()

void loopiter ( Fn ,
void(*)(Blk *, Blk *)   
)

Используется в fillcost().

◆ memopt()

void memopt ( Fn )

См. определение в файле mem.c строка 5

Перекрестные ссылки Blk::ins, Blk::nins, Oalloc, Oalloc1, Ins::op и Fn::start.

◆ newtmp()

Ref newtmp ( char *  ,
int  ,
Fn  
)

См. определение в файле util.c строка 326

Перекрестные ссылки Tmp::cls, Tmp::name, Tmp::ndef, Fn::ntmp, Tmp::nuse, Tmp::slot, TMP, Fn::tmp и vgrow().

Используется в blit().

◆ parse()

void parse ( FILE *  f,
char *  path,
void(*)(Dat *)  data,
void(*)(Fn *)  func 
)

Парсит файл с программой на QBE IL.

Центральная функция, входная точка для запуска механизма парсинга программы на QBE IL из вашей программы, управляет процессом парсинга и дёргает коллбэки

Аргументы
fФайл с текстом программы
pathПуть к файлу с текстом программы
dataУказатель на функцию (принимающую на вход указатель на структуру Dat), которой передаётся управление для обработки глобального объекта данных из кода программы
funcУказатель на функцию (принимающую на вход указатель на структуру Fn), которой передаётся управление для обработки функций из кода программы

См. определение в файле parse.c строка 1046

◆ phicls()

int phicls ( int  ,
Tmp  
)

См. определение в файле util.c строка 313

◆ printfn()

void printfn ( Fn ,
FILE *   
)

См. определение в файле parse.c строка 1160

Перекрестные ссылки Phi::arg, Phi::blk, Phi::cls, Fn::export, Blk::ins, JMPS, Phi::link, Blk::link, Blk::name, Fn::name, Phi::narg, Blk::nins, NJmp, Blk::phi, printref(), Fn::start, Phi::to и X.

◆ printref()

void printref ( Ref  ,
Fn ,
FILE *   
)

См. определение в файле parse.c строка 1110

Используется в printfn().

◆ rega()

void rega ( Fn )

См. определение в файле rega.c строка 474

Перекрестные ссылки dst, src и Tmp0.

◆ sdom()

int sdom ( Blk ,
Blk  
)

См. определение в файле cfg.c строка 187

Перекрестные ссылки Blk::id и Blk::idom.

Используется в dom() и fillfron().

◆ simpl()

void simpl ( Fn )

◆ simpljmp()

void simpljmp ( Fn )

См. определение в файле cfg.c строка 296

Перекрестные ссылки emalloc(), Jjmp, Blk::jmp, Blk::link, Fn::nblk, Blk::nins, Blk::phi, Fn::start и Blk::type.

◆ spill()

void spill ( Fn )

См. определение в файле spill.c строка 296

◆ ssa()

void ssa ( Fn )

См. определение в файле ssa.c строка 307

Перекрестные ссылки debug, Blk::dlink, Blk::dom, emalloc(), filldom(), fillfron(), filllive(), Blk::link, Blk::name, Fn::ntmp и Fn::start.

◆ ssacheck()

void ssacheck ( Fn )

См. определение в файле ssa.c строка 363

Перекрестные ссылки Use::bid, err(), Phi::link, Blk::link, Tmp::name, Tmp::ndef, Fn::ntmp, Tmp::nuse, Blk::phi, Fn::rpo, Fn::start, Fn::tmp, Tmp0, Phi::to, Use::type, Tmp::use и Ref::val.

◆ storesz()

int storesz ( Ins )

См. определение в файле load.c строка 58

Перекрестные ссылки die, Ins::op, Ostoreb, Ostored, Ostoreh, Ostorel, Ostores и Ostorew.

◆ str()

char* str ( uint32_t  )

См. определение в файле util.c строка 186

Перекрестные ссылки IBits.

◆ vfree()

void vfree ( void *  )

См. определение в файле util.c строка 129

Перекрестные ссылки Vec::mag, Pheap, Vec::pool и VMag.

Используется в vgrow().

◆ vgrow()

void vgrow ( void *  ,
ulong   
)

См. определение в файле util.c строка 142

Перекрестные ссылки Vec::cap, Vec::esz, len, Vec::mag, Vec::pool, vfree(), VMag и vnew().

Используется в newtmp().

◆ vnew()

void* vnew ( ulong  ,
size_t  ,
Pool   
)

См. определение в файле util.c строка 111

Используется в vgrow().

Переменные

◆ curi

Ins * curi

См. определение в файле util.c строка 34

Используется в emit().

◆ debug

char debug[ 'Z'+1]

Используется в ssa().

◆ gasloc

char* gasloc

См. определение в файле gas.c строка 4

◆ gassym

char* gassym

См. определение в файле gas.c строка 4

Используется в gasemitdat().

◆ insb

Ins insb[NIns]

См. определение в файле util.c строка 34

Используется в emit().

◆ len

uint len

См. определение в файле all.h строка 421

Используется в vgrow().

◆ optab

Op optab[NOp]

Массив всех операций.

См. определение в файле parse.c строка 10

Используется в argcls().

◆ T

Target T

Используется в filllive().

◆ typ

Typ* typ

См. определение в файле util.c строка 33

◆ type

enum { ... } type