add new target-specific abi0 pass
The general idea is to give abis a chance to talk before we've done all the optimizations. Currently, all targets eliminate {par,arg,ret}{sb,ub,...} during this pass. The forthcoming arm64_apple will, however, insert proper extensions during abi0. Moving forward abis can, for example, lower small-aggregates passing there so that memory optimizations can interact better with function calls.
This commit is contained in:
parent
0b26cd4f5e
commit
a9a70e30a8
7 changed files with 43 additions and 7 deletions
9
all.h
9
all.h
|
@ -52,7 +52,8 @@ struct Target {
|
|||
bits (*retregs)(Ref, int[2]);
|
||||
bits (*argregs)(Ref, int[2]);
|
||||
int (*memargs)(int);
|
||||
void (*abi)(Fn *);
|
||||
void (*abi0)(Fn *);
|
||||
void (*abi1)(Fn *);
|
||||
void (*isel)(Fn *);
|
||||
void (*emitfn)(Fn *, FILE *);
|
||||
void (*emitfin)(FILE *);
|
||||
|
@ -183,6 +184,9 @@ enum {
|
|||
#define ispar(o) INRANGE(o, Opar, Opare)
|
||||
#define isarg(o) INRANGE(o, Oarg, Oargv)
|
||||
#define isret(j) INRANGE(j, Jretw, Jret0)
|
||||
#define isparbh(o) INRANGE(o, Oparsb, Oparuh)
|
||||
#define isargbh(o) INRANGE(o, Oargsb, Oarguh)
|
||||
#define isretbh(j) INRANGE(j, Jretsb, Jretuh)
|
||||
|
||||
enum {
|
||||
Kx = -1, /* "top" class (see usecheck() and clsmerge()) */
|
||||
|
@ -478,6 +482,9 @@ void printfn(Fn *, FILE *);
|
|||
void printref(Ref, Fn *, FILE *);
|
||||
void err(char *, ...) __attribute__((noreturn));
|
||||
|
||||
/* abi.c */
|
||||
void elimsb(Fn *);
|
||||
|
||||
/* cfg.c */
|
||||
Blk *blknew(void);
|
||||
void edgedel(Blk *, Blk **);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue