Go to file
Roland Paterson-Jones 95541ccfb0 Simple Inner Loop Optimzation
Two simple loop optimizations.

1. Strength reduction of mul[tiplication] by loop induction
variable.

2. Hoisting of (address) base into phi where loop induction
variable is used only as a base (address) offset.

Limited to loops with a single body block, which happily
is always innermost loops. This restriction would not be
very hard to lift - it would require detecting the set of
loop blocks (and ensuring reducibility?)

Limited to loop induction variables with 0 initial value
and increment of 1 (for mul strength reduction). This
limitation is trivial to lift; however all of the
cproc/hare[c]/coremark opportunity is with 0/1 loops for
mul reduction, and 0 initial value for base-offset opt.
2025-03-21 16:02:12 +01:00
amd64 gvn/gcm review 2025-03-14 13:09:21 +01:00
arm64 arm64: use IP1 as scratch register 2025-03-15 14:27:34 +01:00
doc function params must be unique 2024-04-27 10:52:03 +02:00
minic minic: C23 doesn't allow bool as identifier 2025-03-16 11:27:49 +01:00
rv64 Re-use (vgrow) b->ins vector in backend xxx_abi() fn's. 2025-03-14 09:47:05 +01:00
test gvn/gcm review 2025-03-14 13:09:21 +01:00
tools tools/test.sh: test the native architecture without QEMU 2025-03-15 14:43:33 +01:00
.gitignore Global Value Numbering / Global Code Motion 2025-03-14 09:58:37 +01:00
abi.c add new target-specific abi0 pass 2022-10-03 10:41:03 +02:00
alias.c fix bug in alias analysis 2024-03-07 16:40:51 +01:00
all.h Simple Inner Loop Optimzation 2025-03-21 16:02:12 +01:00
cfg.c gvn/gcm review 2025-03-14 13:09:21 +01:00
copy.c gvn/gcm review 2025-03-14 13:09:21 +01:00
emit.c drop unnecessary check 2024-04-12 11:37:35 +02:00
fold.c gvn/gcm review 2025-03-14 13:09:21 +01:00
gcm.c gvn/gcm review 2025-03-14 13:09:21 +01:00
gvn.c gvn/gcm review 2025-03-14 13:09:21 +01:00
LICENSE 10 years of qbe! 2025-03-14 13:09:42 +01:00
live.c refine assertion in liveness analysis 2022-06-14 09:11:44 +02:00
load.c gvn/gcm review 2025-03-14 13:09:21 +01:00
loopopt.c Simple Inner Loop Optimzation 2025-03-21 16:02:12 +01:00
main.c Simple Inner Loop Optimzation 2025-03-21 16:02:12 +01:00
Makefile Simple Inner Loop Optimzation 2025-03-21 16:02:12 +01:00
mem.c relax one assert 2024-06-05 12:50:36 +02:00
ops.h gvn/gcm review 2025-03-14 13:09:21 +01:00
parse.c gvn/gcm review 2025-03-14 13:09:21 +01:00
README 10 years of qbe! 2025-03-14 13:09:42 +01:00
rega.c idup(Ins **, Ins *, ulong) -> idup(Blk *, Ins *, ulong) 2025-03-14 09:47:05 +01:00
simpl.c idup(Ins **, Ins *, ulong) -> idup(Blk *, Ins *, ulong) 2025-03-14 09:47:05 +01:00
spill.c idup(Ins **, Ins *, ulong) -> idup(Blk *, Ins *, ulong) 2025-03-14 09:47:05 +01:00
ssa.c gvn/gcm review 2025-03-14 13:09:21 +01:00
util.c gvn/gcm review 2025-03-14 13:09:21 +01:00

QBE - Backend Compiler              http://c9x.me/compile/

doc/    Documentation.
minic/  An example C frontend for QBE.
tools/  Miscellaneous tools (testing).
test/   Tests.
amd64/
arm64/
rv64/   Architecture-specific code.

The LICENSE file applies to all files distributed.

- Compilation and Installation

Invoke make in this directory to create the executable
file qbe.  Install using 'make install', the standard
DESTDIR and PREFIX environment variables are supported.
Alternatively, you may simply copy the qbe binary.