Doing diffs in .: --- ./expr.c.~1~ 2006-01-27 14:56:09.000000000 -0800 +++ ./expr.c 2006-01-27 15:46:14.000000000 -0800 @@ -6358,9 +6358,11 @@ expand_expr_addr_expr_1 (tree exp, rtx t TREE_USED (exp) = 1; } +#if 0 if (modifier != EXPAND_INITIALIZER && modifier != EXPAND_CONST_ADDRESS) result = force_operand (result, target); +#endif return result; } --- ./function.c.~1~ 2006-01-27 14:56:10.000000000 -0800 +++ ./function.c 2006-01-27 16:55:58.000000000 -0800 @@ -1455,6 +1455,18 @@ instantiate_virtual_regs_in_insn (rtx in x = recog_data.operand[i]; switch (GET_CODE (x)) { + case PLUS: + { + bool changed = false; + rtx addr = x; + + for_each_rtx (&addr, instantiate_virtual_regs_in_rtx, &changed); + x = addr; + if (!changed) + continue; + } + break; + case MEM: { rtx addr = XEXP (x, 0); --- ./stmt.c.~1~ 2006-01-27 14:56:16.000000000 -0800 +++ ./stmt.c 2006-01-27 15:56:26.000000000 -0800 @@ -867,7 +867,7 @@ expand_asm_operands (tree string, tree o type = TREE_TYPE (val); op = expand_expr (val, NULL_RTX, VOIDmode, (allows_mem && !allows_reg - ? EXPAND_MEMORY : EXPAND_NORMAL)); + ? EXPAND_MEMORY : EXPAND_SUM)); /* Never pass a CONCAT to an ASM. */ if (GET_CODE (op) == CONCAT) --- ./tree-gimple.c.~1~ 2006-01-27 14:56:06.000000000 -0800 +++ ./tree-gimple.c 2006-01-27 15:41:37.000000000 -0800 @@ -386,6 +386,9 @@ is_gimple_asm_val (tree t) if (TREE_CODE (t) == VAR_DECL && DECL_HARD_REGISTER (t)) return true; + if (TREE_CODE (t) == PLUS_EXPR) + return true; + return is_gimple_val (t); } --------------