From: Richard Stallman Date: Thu, 15 Jul 1993 02:16:57 +0000 (+0000) Subject: (expand_decl): Make a CONCAT, for decls of complex type. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5998c7dcc3c8f1c1825d3c8dc61aec0279bb540c;p=gcc.git (expand_decl): Make a CONCAT, for decls of complex type. From-SVN: r4922 --- diff --git a/gcc/stmt.c b/gcc/stmt.c index d767362fb7e..b61e822fa36 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -2893,10 +2893,27 @@ expand_decl (decl) PROMOTE_MODE (reg_mode, unsignedp, type); } - DECL_RTL (decl) = gen_reg_rtx (reg_mode); - if (TREE_CODE (type) == POINTER_TYPE) - mark_reg_pointer (DECL_RTL (decl)); - REG_USERVAR_P (DECL_RTL (decl)) = 1; + if (TREE_CODE (type) == COMPLEX_TYPE) + { + rtx realpart, imagpart; + enum machine_mode partmode = TYPE_MODE (TREE_TYPE (type)); + + /* For a complex type variable, make a CONCAT of two pseudos + so that the real and imaginary parts + can be allocated separately. */ + realpart = gen_reg_rtx (partmode); + REG_USERVAR_P (realpart) = 1; + imagpart = gen_reg_rtx (partmode); + REG_USERVAR_P (imagpart) = 1; + DECL_RTL (decl) = gen_rtx (CONCAT, reg_mode, realpart, imagpart); + } + else + { + DECL_RTL (decl) = gen_reg_rtx (reg_mode); + if (TREE_CODE (type) == POINTER_TYPE) + mark_reg_pointer (DECL_RTL (decl)); + REG_USERVAR_P (DECL_RTL (decl)) = 1; + } } else if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST) {