diff options
| author | Quentin Carbonneaux <[email protected]> | 2022-08-31 17:09:04 +0200 |
|---|---|---|
| committer | Quentin Carbonneaux <[email protected]> | 2022-10-03 10:41:03 +0200 |
| commit | a9a70e30a8205a8f835c59fd8297e4a4483cc8d4 (patch) | |
| tree | a4551f26f719951a2301dc248168af385f4ebc68 /abi.c | |
| parent | 0b26cd4f5ecff8a01fb3f0adb902c14e043581e9 (diff) | |
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.
Diffstat (limited to 'abi.c')
| -rw-r--r-- | abi.c | 25 |
1 files changed, 25 insertions, 0 deletions
@@ -0,0 +1,25 @@ +#include "all.h" + +/* eliminate sub-word abi op + * variants for targets that + * treat char/short/... as + * words with arbitrary high + * bits + */ +void +elimsb(Fn *fn) +{ + Blk *b; + Ins *i; + + for (b=fn->start; b; b=b->link) { + for (i=b->ins; i<&b->ins[b->nins]; i++) { + if (isargbh(i->op)) + i->op = Oarg; + if (isparbh(i->op)) + i->op = Opar; + } + if (isretbh(b->jmp.type)) + b->jmp.type = Jretw; + } +} |
