summaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/function.c')
-rwxr-xr-xgcc/function.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 553bbe7..d5ffd30 100755
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -1989,6 +1989,13 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
enum machine_mode is_mode = GET_MODE (tem);
HOST_WIDE_INT pos = INTVAL (XEXP (x, 2));
+ if (GET_CODE (x) == ZERO_EXTRACT)
+ {
+ wanted_mode = insn_operand_mode[(int) CODE_FOR_extzv][1];
+ if (wanted_mode == VOIDmode)
+ wanted_mode = word_mode;
+ }
+
/* If we have a narrower mode, we can do something. */
if (wanted_mode != VOIDmode
&& GET_MODE_SIZE (wanted_mode) < GET_MODE_SIZE (is_mode))