commit 30f27528f11cb62062805ee9d854c1011d0933cd
Author:     Roberto E. Vargas Caballero <Roberto E. Vargas Caballero>
AuthorDate: Sun May 8 20:12:18 2016 +0200
Commit:     Roberto E. Vargas Caballero <Roberto E. Vargas Caballero>
CommitDate: Sun May 8 20:12:18 2016 +0200

    [cc2-qbe] Emit abbrev statements
    
    Abbrev statements are the combination of a assignation
    and some other operator, and they don't have special
    meaning in QBE. They must be expanded.

diff --git a/cc2/arch/qbe/cgen.c b/cc2/arch/qbe/cgen.c
index 3af006d..c3facc3 100644
--- a/cc2/arch/qbe/cgen.c
+++ b/cc2/arch/qbe/cgen.c
@@ -231,6 +231,20 @@ cast(Node *nd)
        return nd;
 }
 
+static Node *
+abbrev(Node *np)
+{
+       Node *tmp;
+
+       if (np->u.subop == 0)
+               return np->right;
+       tmp = newnode(np->u.subop);
+       tmp->type = np->type;
+       tmp->right = np->right;
+       tmp->left = np->left;
+       return np->right = cgen(tmp);
+}
+
 Node *
 cgen(Node *np)
 {
@@ -317,6 +331,7 @@ cgen(Node *np)
        case ODEC:
                abort();
        case OASSIG:
+               r = abbrev(np);
                switch (tp->size) {
                case 1:
                        op = ASSTB;

Reply via email to