scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit d345cbc168b653ee8338863aa8e0769f6758119c
parent dbebe83920a39618fa2d0aa8ca06572e96c20ff0
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Thu,  4 Nov 2021 07:54:49 +0100

cc2/qbe: Add complex()

The calculation of the complexity number can be factorized
and reuse it in different places of the code.

Diffstat:
Msrc/cmd/cc/cc2/target/qbe/cgen.c | 39++++++++++++++++++++++++---------------
1 file changed, 24 insertions(+), 15 deletions(-)

diff --git a/src/cmd/cc/cc2/target/qbe/cgen.c b/src/cmd/cc/cc2/target/qbe/cgen.c @@ -98,6 +98,29 @@ tmpnode(Node *np, Type *tp) } static Node * +complex(Node *np) +{ + Node *lp = np->left, *rp = np->right; + + if (np->address > 10) + return np; + if (lp) + np->complex = lp->complex; + if (rp) { + int d = np->complex - rp->complex; + + if (d == 0) + ++np->complex; + else if (d < 0) + np->complex = rp->complex; + } + if (np->complex == 0) + ++np->complex; + + return np; +} + +static Node * load(Type *tp, Node *np, Node *new) { int op; @@ -726,19 +749,5 @@ sethi(Node *np) np->left = lp; np->right = rp; - if (np->address > 10) - return np; - if (lp) - np->complex = lp->complex; - if (rp) { - int d = np->complex - rp->complex; - - if (d == 0) - ++np->complex; - else if (d < 0) - np->complex = rp->complex; - } - if (np->complex == 0) - ++np->complex; - return np; + return complex(np); }