diff options
Diffstat (limited to 'gcc/cse.c')
-rw-r--r-- | gcc/cse.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -4923,7 +4923,8 @@ cse_insn (rtx_insn *insn) rtx_code extend_op; if (flag_expensive_optimizations && src_related == 0 && MEM_P (src) && ! do_not_record - && (extend_op = load_extend_op (mode)) != UNKNOWN) + && is_a <scalar_int_mode> (mode, &int_mode) + && (extend_op = load_extend_op (int_mode)) != UNKNOWN) { struct rtx_def memory_extend_buf; rtx memory_extend_rtx = &memory_extend_buf; @@ -4935,7 +4936,7 @@ cse_insn (rtx_insn *insn) PUT_CODE (memory_extend_rtx, extend_op); XEXP (memory_extend_rtx, 0) = src; - FOR_EACH_WIDER_MODE (tmode, mode) + FOR_EACH_WIDER_MODE (tmode, int_mode) { struct table_elt *larger_elt; @@ -4952,7 +4953,7 @@ cse_insn (rtx_insn *insn) larger_elt; larger_elt = larger_elt->next_same_value) if (REG_P (larger_elt->exp)) { - src_related = gen_lowpart (mode, larger_elt->exp); + src_related = gen_lowpart (int_mode, larger_elt->exp); break; } |