diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cf4e66b77c21..4e1d96d611d1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2011-11-11 Uros Bizjak + + PR target/50762 + * config/i386/constraints.md (j): New address constraint. + * config/i386/predicates.md (lea_address_operand): Redefine as + special predicate. + * config/i386/i386.md (*lea_3_zext): Use "j" constraint for operand 1. + (*lea_4_zext): Ditto. + 2011-11-11 David S. Miller Revert @@ -361,8 +370,7 @@ * tree-sra.c (build_accesses_from_assign): Ignore clobbers. * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Clobbers of SSA names aren't necessary. - (propagate_necessity): Accept and ignore constructors on the rhs, - tidy. + (propagate_necessity): Accept and ignore constructors on the rhs, tidy. * gimple.c (walk_gimple_op): Accept constructors like mem_rhs. * tree-ssa-structalias.c (find_func_aliases): Clobbers don't store any known value. @@ -424,8 +432,7 @@ * trans-mem.c: New file. * trans-mem.h: New file. - * opts.c (finish_options): Error out when using -flto and - -fgnu-tm. + * opts.c (finish_options): Error out when using -flto and -fgnu-tm. * config/i386/i386.c: Define TARGET_VECTORIZE* transactional variants. (ix86_handle_tm_regparm_attribute, struct bdesc_tm, @@ -767,8 +774,7 @@ 2011-11-07 H.J. Lu * dwarf2cfi.c (dwarf2out_frame_debug_expr): Check - HARD_FRAME_POINTER_REGNUM instead of hard_frame_pointer_rtx - in Rule 18. + HARD_FRAME_POINTER_REGNUM instead of hard_frame_pointer_rtx in Rule 18. 2011-11-07 Jakub Jelinek @@ -801,8 +807,7 @@ * tree-data-ref.h (initialize_data_dependence_relation, compute_self_dependence): New prototypes. * tree-vect-data-refs.c (vect_check_gather): New function. - (vect_analyze_data_refs): Detect possible gather load data - refs. + (vect_analyze_data_refs): Detect possible gather load data refs. * tree-vectorizer.h (struct _stmt_vec_info): Add gather_p field. (STMT_VINFO_GATHER_P): Define. (vect_check_gather): New prototype. @@ -815,7 +820,7 @@ (avx2_gathersi, *avx2_gathersi): Use instead of . (avx2_gatherdi): Use instead of - < and instead of VEC_GATHER_MODE + and instead of VEC_GATHER_MODE on src and mask operands. (*avx2_gatherdi): Likewise. Use VEC_GATHER_MODE iterator instead of AVXMODE48P_DI. @@ -831,7 +836,7 @@ 2011-11-07 Uros Bizjak - * config/i386/f16cintrin: Remove extra _X86INTRIN_H_INCLUDED check. + * config/i386/f16cintrin.h: Remove extra _X86INTRIN_H_INCLUDED check. 2011-11-07 Tristan Gingold @@ -1104,8 +1109,7 @@ 2011-11-6 Richard Guenther - * ipa-prop.c (ipa_modify_call_arguments): Re-compute - inlinable flag. + * ipa-prop.c (ipa_modify_call_arguments): Re-compute inlinable flag. 2011-11-06 Ira Rosen diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md index bef5b30b0131..941f48aa6e63 100644 --- a/gcc/config/i386/constraints.md +++ b/gcc/config/i386/constraints.md @@ -19,7 +19,7 @@ ;;; Unused letters: ;;; B H T W -;;; h jk v +;;; h k v ;; Integer register constraints. ;; It is not necessary to define 'r' here. @@ -127,6 +127,11 @@ (and (not (match_test "TARGET_X32")) (match_operand 0 "memory_operand"))) +(define_address_constraint "j" + "@internal Address operand that can be zero extended in LEA instruction." + (and (not (match_code "const_int")) + (match_operand 0 "address_operand"))) + ;; Integer constant constraints. (define_constraint "I" "Integer constant in the range 0 @dots{} 31, for 32-bit shifts." diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 35273d95683e..377c78eec512 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -5551,7 +5551,7 @@ (define_insn "*lea_3_zext" [(set (match_operand:DI 0 "register_operand" "=r") (zero_extend:DI - (subreg:SI (match_operand:DI 1 "lea_address_operand" "p") 0)))] + (subreg:SI (match_operand:DI 1 "lea_address_operand" "j") 0)))] "TARGET_64BIT" "lea{l}\t{%a1, %k0|%k0, %a1}" [(set_attr "type" "lea") @@ -5560,7 +5560,7 @@ (define_insn "*lea_4_zext" [(set (match_operand:DI 0 "register_operand" "=r") (zero_extend:DI - (match_operand:SI 1 "lea_address_operand" "p")))] + (match_operand:SI 1 "lea_address_operand" "j")))] "TARGET_64BIT" "lea{l}\t{%a1, %k0|%k0, %a1}" [(set_attr "type" "lea") diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 3745b497c192..1dda585bfde2 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -808,8 +808,9 @@ (match_operand 0 "const0_operand"))) ;; Return true if op if a valid address for LEA, and does not contain -;; a segment override. -(define_predicate "lea_address_operand" +;; a segment override. Defined as a special predicate to allow +;; mode-less const_int operands pass to address_operand. +(define_special_predicate "lea_address_operand" (match_operand 0 "address_operand") { struct ix86_address parts;