QBE
all.h
См. документацию.
1 #include <assert.h>
2 #include <inttypes.h>
3 #include <limits.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <string.h>
7 
8 #define MAKESURE(what, x) typedef char make_sure_##what[(x)?1:-1]
9 #define die(...) die_(__FILE__, __VA_ARGS__)
10 
11 typedef unsigned char uchar;
12 typedef unsigned int uint;
13 typedef unsigned long ulong;
14 typedef unsigned long long bits;
15 
16 typedef struct BSet BSet;
17 typedef struct Ref Ref;
18 typedef struct Op Op;
19 typedef struct Ins Ins;
20 typedef struct Phi Phi;
21 typedef struct Blk Blk;
22 typedef struct Use Use;
23 typedef struct Alias Alias;
24 typedef struct Tmp Tmp;
25 typedef struct Con Con;
26 typedef struct Addr Mem;
27 typedef struct Fn Fn;
28 typedef struct Typ Typ;
29 typedef struct Field Field;
30 typedef struct Dat Dat;
31 typedef struct Target Target;
32 
33 enum {
34  NString = 32,
35  NPred = 63,
36  NIns = 1 << 20,
37  NAlign = 3,
38  NField = 32,
39  NBit = CHAR_BIT * sizeof(bits),
40 };
41 
42 struct Target {
43  int gpr0; /* first general purpose reg */
44  int ngpr;
45  int fpr0; /* first floating point reg */
46  int nfpr;
47  bits rglob; /* globally live regs (e.g., sp, fp) */
48  int nrglob;
49  int *rsave; /* caller-save */
50  int nrsave[2];
51  bits (*retregs)(Ref, int[2]);
52  bits (*argregs)(Ref, int[2]);
53  int (*memargs)(int);
54  void (*abi)(Fn *);
55  void (*isel)(Fn *);
56  void (*emitfn)(Fn *, FILE *);
57 };
58 
59 #define BIT(n) ((bits)1 << (n))
60 
61 enum {
62  RXX = 0,
63  Tmp0 = NBit,
64 };
65 
66 struct BSet {
68  bits *t;
69 };
70 
77 struct Ref {
78  uint type:3;
80  uint val:29;
81 };
82 
83 enum {
90 };
91 
92 #define R (Ref){0, 0}
93 #define TMP(x) (Ref){RTmp, x}
94 #define CON(x) (Ref){RCon, x}
95 #define CON_Z CON(0) /* reserved zero constant */
96 #define SLOT(x) (Ref){RSlot, (x)&0x1fffffff}
97 #define TYPE(x) (Ref){RType, x}
98 #define CALL(x) (Ref){RCall, x}
99 #define MEM(x) (Ref){RMem, x}
100 
107 static inline int req(Ref a, Ref b)
108 {
109  return a.type == b.type && a.val == b.val;
110 }
111 
117 static inline int rtype(Ref r)
118 {
119  if (req(r, R))
120  return -1;
121  return r.type;
122 }
123 
127 enum CmpI {
139 };
140 
144 enum CmpF {
155 };
156 
160 enum O {
162 #define O(op, x, y) O##op,
163  #include "ops.h"
164  NOp,
165 };
166 
170 enum J {
172 #define JMPS(X) \
173  X(ret0) X(retw) X(retl) X(rets) \
174  X(retd) X(retc) X(jmp) X(jnz) \
175  X(jfieq) X(jfine) X(jfisge) X(jfisgt) \
176  X(jfisle) X(jfislt) X(jfiuge) X(jfiugt) \
177  X(jfiule) X(jfiult) X(jffeq) X(jffge) \
178  X(jffgt) X(jffle) X(jfflt) X(jffne) \
179  X(jffo) X(jffuo)
180 #define X(j) J##j,
181  JMPS(X)
182 #undef X
184 };
186 enum {
202 };
204 #define isstore(o) (Ostoreb <= o && o <= Ostored)
205 #define isload(o) (Oloadsb <= o && o <= Oload)
206 #define isext(o) (Oextsb <= o && o <= Oextuw)
207 #define ispar(o) (Opar <= o && o <= Opare)
208 #define isarg(o) (Oarg <= o && o <= Oarge)
209 #define isret(j) (Jret0 <= j && j <= Jretc)
211 enum Class {
212  Kx = -1, /* "top" class (see usecheck() and clsmerge()) */
213  Kw,
214  Kl,
215  Ks,
217 };
219 #define KWIDE(k) ((k)&1)
220 #define KBASE(k) ((k)>>1)
226 struct Op {
227  char *name;
228  short argcls[2][4];
229  int canfold;
230 };
235 struct Ins {
236  uint op:30;
237  Ref to;
238  Ref arg[2];
240 };
241 
242 struct Phi {
247  int cls;
249 };
250 
254 struct Blk {
256  Ins *ins;
258  struct {
259  short type;
261  } jmp;
262  Blk *s1;
263  Blk *s2;
274  Blk **pred;
276  BSet in[1], out[1], gen[1];
277  int nlive[2];
278  int loop;
279  char name[NString];
280 };
281 
286 struct Use {
287  enum {
292  } type;
293  int bid;
294  union {
295  Ins *ins;
296  Phi *phi;
297  } u;
298 };
300 enum {
304 };
305 
306 struct Alias {
307  enum {
308  ABot = 0,
309  ALoc = 1, /* stack local */
310  ACon = 2,
311  AEsc = 3, /* stack escaping */
312  ASym = 4,
313  AUnk = 6,
314  #define astack(t) ((t) & 1)
315  } type;
317  uint32_t label;
318  int64_t offset;
320 };
326 struct Tmp {
327  char name[NString];
328  Use *use;
330  nuse;
332  short slot;
333  short cls;
334  struct {
335  int r;
336  int w;
337  bits m;
338  } hint;
339  int phi;
341  enum {
343  Wsb,
349  } width;
350  int visit;
351 };
352 
353 struct Con {
354  enum {
358  } type;
359  uint32_t label;
360  union {
361  int64_t i;
362  double d;
363  float s;
364  } bits;
365  char flt; /* 1 to print as s, 2 to print as d */
366  char local;
367 };
368 
369 typedef struct Addr Addr;
370 
371 struct Addr { /* amd64 addressing */
375  int scale;
376 };
377 
384 struct Fn {
386  Tmp *tmp;
387  Con *con;
389  int ntmp;
390  int ncon;
391  int nmem;
393  int retty;
395  Blk **rpo;
397  int slot;
398  char export;
399  char vararg;
400  char dynalloc;
401  char name[NString];
402 };
403 
404 struct Typ {
405  char name[NString];
406  int dark;
407  int align;
408  uint64_t size;
410  struct Field {
411  enum {
413  Fb,
414  Fh,
415  Fw,
416  Fl,
417  Fs,
418  Fd,
421  } type;
422  uint len; /* or index in typ[] for FTyp */
423  } (*fields)[NField+1];
424 };
425 
426 struct Dat {
427  enum {
432  DB,
433  DH,
434  DW,
435  DL,
437  } type;
438  union {
439  int64_t num;
440  double fltd;
441  float flts;
442  char *str;
443  struct {
444  char *nam;
445  int64_t off;
446  } ref;
447  } u;
448  char isref;
449  char isstr;
450  char export;
451 };
452 
453 /* main.c */
454 extern Target T;
455 extern char debug['Z'+1];
456 
457 /* util.c */
458 typedef enum {
459  Pheap, /* free() necessary */
460  Pfn, /* discarded after processing the function */
461 } Pool;
462 
463 extern Typ *typ;
464 extern Ins insb[NIns], *curi;
465 uint32_t hash(char *);
466 void die_(char *, char *, ...) __attribute__((noreturn));
467 void *emalloc(size_t);
468 void *alloc(size_t);
469 void freeall(void);
470 void *vnew(ulong, size_t, Pool);
471 void vfree(void *);
472 void vgrow(void *, ulong);
473 uint32_t intern(char *);
474 char *str(uint32_t);
475 int argcls(Ins *, int);
476 int isreg(Ref);
477 int iscmp(int, int *, int *);
478 void emit(int, int, Ref, Ref, Ref);
479 void emiti(Ins);
480 void idup(Ins **, Ins *, ulong);
481 Ins *icpy(Ins *, Ins *, ulong);
482 int cmpop(int);
483 int cmpneg(int);
484 int clsmerge(short *, short);
485 int phicls(int, Tmp *);
486 Ref newtmp(char *, int, Fn *);
487 void chuse(Ref, int, Fn *);
488 Ref getcon(int64_t, Fn *);
489 void addcon(Con *, Con *);
490 void blit(Ref, uint, Ref, uint, Fn *);
491 void dumpts(BSet *, Tmp *, FILE *);
492 
493 void bsinit(BSet *, uint);
494 void bszero(BSet *);
495 uint bscount(BSet *);
496 void bsset(BSet *, uint);
497 void bsclr(BSet *, uint);
498 void bscopy(BSet *, BSet *);
499 void bsunion(BSet *, BSet *);
500 void bsinter(BSet *, BSet *);
501 void bsdiff(BSet *, BSet *);
502 int bsequal(BSet *, BSet *);
503 int bsiter(BSet *, int *);
504 
505 static inline int
506 bshas(BSet *bs, uint elt)
507 {
508  assert(elt < bs->nt * NBit);
509  return (bs->t[elt/NBit] & BIT(elt%NBit)) != 0;
510 }
511 
512 /* parse.c */
517 extern Op optab[NOp];
518 void parse(FILE *, char *, void (*)(Dat *), void (*)(Fn *));
519 void printfn(Fn *, FILE *);
520 void printref(Ref, Fn *, FILE *);
521 void err(char *, ...) __attribute__((noreturn));
522 
523 /* cfg.c */
524 Blk *blknew(void);
525 void edgedel(Blk *, Blk **);
526 void fillpreds(Fn *);
527 void fillrpo(Fn *);
528 void filldom(Fn *);
529 int sdom(Blk *, Blk *);
530 int dom(Blk *, Blk *);
531 void fillfron(Fn *);
532 void loopiter(Fn *, void (*)(Blk *, Blk *));
533 void fillloop(Fn *);
534 void simpljmp(Fn *);
535 
536 /* mem.c */
537 void memopt(Fn *);
538 
539 /* alias.c */
540 void fillalias(Fn *);
541 int alias(Ref, int, Ref, int, int *, Fn *);
542 int escapes(Ref, Fn *);
543 
544 /* load.c */
545 int loadsz(Ins *);
546 int storesz(Ins *);
547 void loadopt(Fn *);
548 
549 /* ssa.c */
550 void filluse(Fn *);
551 void fillpreds(Fn *);
552 void fillrpo(Fn *);
553 void ssa(Fn *);
554 void ssacheck(Fn *);
555 
556 /* simpl.c */
557 void simpl(Fn *);
558 
559 /* copy.c */
560 void copy(Fn *);
561 
562 /* fold.c */
563 void fold(Fn *);
564 
565 /* live.c */
566 void liveon(BSet *, Blk *, Blk *);
567 void filllive(Fn *);
568 
569 /* spill.c */
570 void fillcost(Fn *);
571 void spill(Fn *);
572 
573 /* rega.c */
574 void rega(Fn *);
575 
576 /* gas.c */
577 extern char *gasloc;
578 extern char *gassym;
579 void gasemitdat(Dat *, FILE *);
580 int gasstash(void *, int);
581 void gasemitfin(FILE *);
Definition: all.h:215
Definition: all.h:129
int storesz(Ins *)
Definition: load.c:58
Definition: all.h:347
O
Перечисление всех операций QBE IL.
Definition: all.h:160
Ref base
Definition: all.h:316
enum Alias::@8 type
unsigned int uint
Definition: all.h:12
char name[NString]
Definition: all.h:279
Blk * blknew(void)
Definition: cfg.c:4
void bsset(BSet *, uint)
Definition: util.c:467
Ins insb[NIns]
Definition: util.c:34
void fillloop(Fn *)
Definition: cfg.c:273
unsigned long ulong
Definition: all.h:13
Mem * mem
Definition: all.h:388
Definition: all.h:181
Class
Definition: all.h:211
char flt
Definition: all.h:365
int nfpr
Definition: all.h:46
Definition: all.h:346
void filllive(Fn *)
Definition: live.c:39
Blk * start
Указатель на блок функции, являющийся её входной точкой
Definition: all.h:385
Definition: all.h:335
int sdom(Blk *, Blk *)
Definition: cfg.c:187
int ncon
Размер массива con.
Definition: all.h:390
Blk ** pred
Definition: all.h:274
void fillalias(Fn *)
Definition: alias.c:107
bits * t
Definition: all.h:68
void fillpreds(Fn *)
Definition: cfg.c:57
Definition: all.h:324
void * emalloc(size_t)
Definition: util.c:66
void gasemitdat(Dat *, FILE *)
Definition: gas.c:7
uint narg
Definition: all.h:246
void emit(int, int, Ref, Ref, Ref)
Definition: util.c:229
Definition: all.h:39
void ssa(Fn *)
Definition: ssa.c:307
int fpr0
Definition: all.h:45
Definition: all.h:145
Definition: all.h:147
Definition: all.h:225
void bsunion(BSet *, BSet *)
Definition: util.c:492
int ngpr
Definition: all.h:44
Структура, хранящая информацию об инструкциях.
Definition: all.h:235
Blk * dlink
Definition: all.h:270
Definition: all.h:404
enum Tmp::@10 width
Definition: all.h:348
Definition: all.h:345
float flts
Definition: all.h:441
int clsmerge(short *, short)
Definition: util.c:296
struct Tmp::@9 hint
int nrsave[2]
Definition: all.h:50
int visit
Definition: all.h:350
char name[NString]
Definition: all.h:405
Definition: all.h:146
#define JMPS(X)
Definition: all.h:172
Definition: all.h:84
Definition: all.h:429
int retty
index in typ[], -1 if no aggregate return
Definition: all.h:393
void simpljmp(Fn *)
Definition: cfg.c:296
int iscmp(int, int *, int *)
Definition: util.c:199
int bid
Definition: all.h:293
void * vnew(ulong, size_t, Pool)
Definition: util.c:111
Op optab[NOp]
Массив всех операций.
Definition: parse.c:10
Ref index
Definition: all.h:374
Definition: all.h:88
void edgedel(Blk *, Blk **)
Definition: cfg.c:15
Definition: all.h:212
short slot
-1 for unset
Definition: all.h:332
Phi * link
Definition: all.h:248
Definition: all.h:196
void memopt(Fn *)
Definition: mem.c:5
Blk * s1
Definition: all.h:262
BSet gen[1]
Definition: all.h:276
int cmpop(int)
Definition: util.c:289
bits reg
Definition: all.h:396
Definition: all.h:38
void vfree(void *)
Definition: util.c:129
uint ndef
Количество блоков, в которых есть объявление переменной
Definition: all.h:329
Definition: all.h:307
char * str(uint32_t)
Definition: util.c:186
int phi
Definition: all.h:339
Definition: all.h:214
#define BIT(n)
Definition: all.h:59
Definition: all.h:66
Ins * curi
Definition: util.c:34
Definition: all.h:154
Definition: all.h:289
struct Ref Ref
Definition: all.h:17
Con * con
Массив используемых функцией констант
Definition: all.h:387
void bsinit(BSet *, uint)
Definition: util.c:403
void bscopy(BSet *, BSet *)
Definition: util.c:491
Definition: all.h:288
Ref arg[NPred]
Definition: all.h:244
Definition: all.h:213
Ref base
Definition: all.h:373
Definition: all.h:195
Definition: all.h:426
Структура, хранящая описание переменных (более подробное описание переменной ищите в Tmp)...
Definition: all.h:77
Содержит информацию о переменной
Definition: all.h:326
void err(char *,...) __attribute__((noreturn))
Definition: parse.c:134
Definition: all.h:205
struct Field Field
Definition: all.h:29
Definition: all.h:136
CmpF
Сравнения для чисел типа float.
Definition: all.h:144
Tmp * tmp
Массив используемых функцией переменных
Definition: all.h:386
uint32_t label
Definition: all.h:317
enum Dat::@15 type
unsigned char uchar
Definition: all.h:11
Definition: all.h:191
int slot
Definition: all.h:397
Definition: all.h:303
struct Dat::@16::@17 ref
char * gassym
Definition: gas.c:4
Ref arg
Definition: all.h:260
Use * use
Содержит информацию об использовании переменной
Definition: all.h:328
char * nam
Definition: all.h:444
Alias * slot
Definition: all.h:319
enum Typ::Field::@13 type
Definition: all.h:435
union Use::@7 u
Definition: all.h:149
void die_(char *, char *,...) __attribute__((noreturn))
Definition: util.c:53
Definition: all.h:152
Definition: all.h:194
Alias alias
Definition: all.h:340
Definition: all.h:161
Ref to
Definition: all.h:243
Definition: all.h:62
BSet in[1]
Definition: all.h:276
int r
register or -1
Definition: all.h:335
int alias(Ref, int, Ref, int, int *, Fn *)
Definition: alias.c:31
int ntmp
Размер массива tmp.
Definition: all.h:389
Blk * s2
Definition: all.h:263
Definition: all.h:188
Definition: all.h:128
Непосредственно информация о базовом блоке.
Definition: all.h:254
void * alloc(size_t)
Definition: util.c:77
Definition: all.h:133
int bsiter(BSet *, int *)
Definition: util.c:521
void rega(Fn *)
Definition: rega.c:474
void fillfron(Fn *)
Definition: cfg.c:220
void idup(Ins **, Ins *, ulong)
Definition: util.c:246
void printfn(Fn *, FILE *)
Definition: parse.c:1160
Definition: all.h:216
void copy(Fn *)
Definition: copy.c:107
void loopiter(Fn *, void(*)(Blk *, Blk *))
void chuse(Ref, int, Fn *)
Definition: util.c:344
Ref getcon(int64_t, Fn *)
Definition: util.c:351
Definition: all.h:199
Blk * idom
Definition: all.h:269
double d
Definition: all.h:362
Blk * link
Definition: all.h:264
void loadopt(Fn *)
Definition: load.c:377
void bszero(BSet *)
Definition: util.c:509
char dynalloc
Definition: all.h:400
uint cost
Definition: all.h:331
int bsequal(BSet *, BSet *)
Definition: util.c:497
Definition: all.h:87
enum Con::@11 type
uint nins
Definition: all.h:257
Definition: all.h:283
char name[NString]
Имя переменной
Definition: all.h:327
Definition: all.h:89
Definition: all.h:183
void spill(Fn *)
Definition: spill.c:296
void fillcost(Fn *)
Definition: spill.c:40
Definition: all.h:134
Definition: all.h:460
short cls
Definition: all.h:333
Ins * ins
Definition: all.h:295
void fold(Fn *)
Definition: fold.c:184
int64_t offset
Definition: all.h:318
uint visit
Definition: all.h:267
void addcon(Con *, Con *)
Definition: util.c:364
int loop
Definition: all.h:278
char export
Definition: all.h:450
Ref to
Definition: all.h:237
void vgrow(void *, ulong)
Definition: util.c:142
Definition: all.h:203
Definition: all.h:86
bits m
avoid these registers
Definition: all.h:337
void bsclr(BSet *, uint)
Definition: util.c:474
Definition: all.h:131
Definition: all.h:42
int gasstash(void *, int)
Definition: gas.c:68
short argcls[2][4]
Definition: all.h:228
void ssacheck(Fn *)
Definition: ssa.c:363
void parse(FILE *, char *, void(*)(Dat *), void(*)(Fn *))
Парсит файл с программой на QBE IL.
Definition: parse.c:1046
int nrglob
Definition: all.h:48
Definition: all.h:151
Definition: all.h:130
char isstr
Definition: all.h:449
Definition: all.h:353
Definition: all.h:216
uint nt
Definition: all.h:67
char local
Definition: all.h:366
int w
weight
Definition: all.h:336
uint nblk
Количество блоков в функции
Definition: all.h:392
int64_t i
Definition: all.h:361
char * name
Definition: all.h:227
void filldom(Fn *)
Definition: cfg.c:152
Definition: all.h:193
Definition: all.h:37
char vararg
Definition: all.h:399
int argcls(Ins *, int)
Definition: util.c:223
Definition: all.h:135
Definition: all.h:198
uint npred
Definition: all.h:275
bits(* retregs)(Ref, int[2])
Definition: all.h:51
int gpr0
Definition: all.h:43
short type
Definition: all.h:259
char export
Definition: all.h:398
Definition: all.h:132
int align
Definition: all.h:407
int scale
Definition: all.h:375
Ins * ins
Definition: all.h:256
Phi * phi
Definition: all.h:255
Blk ** rpo
Ссылка на массив блоков, пронумерованных в порядке Reverse-Post Order, заполняется функцией fillrpo...
Definition: all.h:395
Definition: all.h:371
int nmem
Размер массива mem.
Definition: all.h:391
uint type
Definition: all.h:78
char * gasloc
Definition: gas.c:4
int escapes(Ref, Fn *)
Definition: alias.c:83
Definition: all.h:432
float s
Definition: all.h:363
int canfold
Definition: all.h:229
Definition: all.h:459
int isreg(Ref)
Definition: util.c:193
Definition: all.h:153
void simpl(Fn *)
void gasemitfin(FILE *)
Definition: gas.c:87
bits(* argregs)(Ref, int[2])
Definition: all.h:52
Ref arg[2]
Definition: all.h:238
Номер (в массиве Fn->tmp) первой не регистровой переменной
Definition: all.h:63
Blk * dom
Definition: all.h:270
void bsinter(BSet *, BSet *)
Definition: util.c:493
Definition: all.h:190
uint val
Definition: all.h:80
Definition: all.h:200
must match Oload/Oext order
Definition: all.h:343
void(* isel)(Fn *)
Definition: all.h:55
Definition: all.h:197
enum Use::@6 type
Definition: all.h:192
char * str
Definition: all.h:442
double fltd
Definition: all.h:440
Definition: all.h:301
Definition: all.h:434
char name[NString]
Имя функции
Definition: all.h:401
int nlive[2]
Definition: all.h:277
Definition: all.h:306
void fillrpo(Fn *)
Definition: cfg.c:102
Definition: all.h:85
uint id
Definition: all.h:266
uint32_t intern(char *)
Definition: util.c:158
Definition: all.h:290
void(* abi)(Fn *)
Definition: all.h:54
Definition: all.h:232
#define T(a, b, c, d, e, f, g, h)
Definition: all.h:168
BSet out[1]
Definition: all.h:276
Typ * typ
Definition: util.c:33
int(* memargs)(int)
Definition: all.h:53
Ins * icpy(Ins *, Ins *, ulong)
Definition: util.c:253
int phicls(int, Tmp *)
Definition: util.c:313
int dark
Definition: all.h:406
bits rglob
Definition: all.h:47
void bsdiff(BSet *, BSet *)
Definition: util.c:494
Definition: all.h:138
uint64_t size
Definition: all.h:408
int cls
Definition: all.h:247
Definition: all.h:269
int64_t num
Definition: all.h:439
Definition: all.h:214
Ref newtmp(char *, int, Fn *)
Definition: util.c:326
Definition: all.h:187
Definition: all.h:291
void(* emitfn)(Fn *, FILE *)
Definition: all.h:56
Definition: all.h:148
Definition: all.h:302
#define R
Definition: all.h:92
void liveon(BSet *, Blk *, Blk *)
Definition: live.c:4
Pool
Definition: all.h:458
uint len
Definition: all.h:422
Definition: all.h:137
Definition: all.h:223
int64_t off
Definition: all.h:445
union Con::@12 bits
Definition: all.h:171
Definition: all.h:150
void blit(Ref, uint, Ref, uint, Fn *)
Definition: util.c:379
uint cls
Definition: all.h:239
void dumpts(BSet *, Tmp *, FILE *)
Definition: util.c:543
Definition: all.h:436
char isref
Definition: all.h:448
uint nfron
Definition: all.h:272
union Dat::@16 u
Con offset
Definition: all.h:372
uint32_t hash(char *)
Definition: util.c:43
J
Перечисление всех прыжков QBE IL.
Definition: all.h:170
int loadsz(Ins *)
Definition: load.c:46
Blk * blk[NPred]
Definition: all.h:245
struct Blk::@5 jmp
int dom(Blk *, Blk *)
Definition: cfg.c:198
uint32_t label
Definition: all.h:359
void printref(Ref, Fn *, FILE *)
Definition: parse.c:1110
Структура, хранящая в себе информацию о функции
Definition: all.h:384
Ref retr
Definition: all.h:394
Definition: all.h:36
Definition: all.h:189
void freeall(void)
Definition: util.c:93
void emiti(Ins)
Definition: util.c:240
Структура, хранящая информацию об операции.
Definition: all.h:226
uint nuse
Количество блоков, в которых переменная используется
Definition: all.h:329
Definition: all.h:267
Definition: all.h:194
CmpI
Сравнения для 32 битных целых чисел.
Definition: all.h:127
Definition: all.h:201
uint op
Definition: all.h:236
Definition: all.h:34
Definition: all.h:181
char debug['Z'+1]
uint bscount(BSet *)
Definition: util.c:450
unsigned long long bits
Definition: all.h:14
int cmpneg(int)
Definition: util.c:282
Definition: all.h:433
Definition: all.h:35
#define X(NMemArgs, SetsZeroFlag, LeavesFlags)
Definition: all.h:180
Definition: all.h:242
Blk ** fron
Definition: all.h:271
Структура, хранящая информацию об одном "использовании" переменной.
Definition: all.h:286
uint nunion
Definition: all.h:409
int * rsave
Definition: all.h:49
void filluse(Fn *)
Заполняет информацию об использовании переменных в функции
Definition: ssa.c:46
Phi * phi
Definition: all.h:296
Definition: all.h:344