aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2011-11-11 15:56:00 +0100
committerUros Bizjak <uros@gcc.gnu.org>2011-11-11 15:56:00 +0100
commit5da6a3837f88a9913e8b77656f34988f173b16af (patch)
treeeab0833103d2b1d12fbc3d3f99f12c0a0db8e10c
parent3fec7f10284ffde68826a66ce9e30abdbcdcc40d (diff)
downloadgcc-5da6a3837f88a9913e8b77656f34988f173b16af.zip
gcc-5da6a3837f88a9913e8b77656f34988f173b16af.tar.gz
gcc-5da6a3837f88a9913e8b77656f34988f173b16af.tar.bz2
re PR target/50762 (ICE: in extract_insn, at recog.c:2137 (unrecognizable insn))
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. From-SVN: r181285
-rw-r--r--gcc/ChangeLog28
-rw-r--r--gcc/config/i386/constraints.md7
-rw-r--r--gcc/config/i386/i386.md4
-rw-r--r--gcc/config/i386/predicates.md5
4 files changed, 27 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cf4e66b..4e1d96d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2011-11-11 Uros Bizjak <ubizjak@gmail.com>
+
+ 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 <davem@davemloft.net>
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 <hongjiu.lu@intel.com>
* 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 <jakub@redhat.com>
@@ -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<mode>, *avx2_gathersi<mode>): Use <VEC_GATHER_IDXSI>
instead of <VEC_GATHER_MODE>.
(avx2_gatherdi<mode>): Use <VEC_GATHER_IDXDI> instead of
- <<AVXMODE48P_DI> and <VEC_GATHER_SRCDI> instead of VEC_GATHER_MODE
+ <AVXMODE48P_DI> and <VEC_GATHER_SRCDI> instead of VEC_GATHER_MODE
on src and mask operands.
(*avx2_gatherdi<mode>): Likewise. Use VEC_GATHER_MODE iterator
instead of AVXMODE48P_DI.
@@ -831,7 +836,7 @@
2011-11-07 Uros Bizjak <ubizjak@gmail.com>
- * config/i386/f16cintrin: Remove extra _X86INTRIN_H_INCLUDED check.
+ * config/i386/f16cintrin.h: Remove extra _X86INTRIN_H_INCLUDED check.
2011-11-07 Tristan Gingold <gingold@adacore.com>
@@ -1104,8 +1109,7 @@
2011-11-6 Richard Guenther <rguenther@suse.de>
- * 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 <ira.rosen@linaro.org>
diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md
index bef5b30..941f48a 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 35273d9..377c78e 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 3745b49..1dda585 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;