]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/50099 (ICE: internal compiler error: in extract_insn, at recog.c:2113...
authorRamana Radhakrishnan <ramana.radhakrishnan@linaro.org>
Fri, 30 Sep 2011 09:36:43 +0000 (09:36 +0000)
committerRamana Radhakrishnan <ramana@gcc.gnu.org>
Fri, 30 Sep 2011 09:36:43 +0000 (09:36 +0000)
Fix PR target/50099

From-SVN: r179378

gcc/ChangeLog
gcc/config/arm/arm.md
gcc/config/arm/iterators.md
gcc/config/arm/predicates.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/pr50099.c [new file with mode: 0644]

index 96cd9d5722bf729da4be0e6d3989d505bf93940b..f5c7dfcc65ea8b15d1993cdde55d6e75b1b9a730 100644 (file)
@@ -1,3 +1,12 @@
+2011-09-30  Ramana Radhakrishnan  <ramana.radhakrishnan@linaro.org>
+
+        PR target/50099
+       * config/arm/iterators.md (qhs_zextenddi_cstr): New.
+       (qhs_zextenddi_op): New.
+       * config/arm/arm.md ("zero_extend<mode>di2"): Use them.
+       * config/arm/predicates.md ("arm_extendqisi_mem_op"):
+       Distinguish between ARM and Thumb2 states.
+
 2011-09-30  David S. Miller  <davem@davemloft.net>
 
        * config/sparc/sparc.opt (VIS2): New option.
index 3889322fd47a64bc1288fe5a985ad253340210c3..baa7eb41b4e1b855c91e30d4b91b69ae3d0138be 100644 (file)
 
 (define_insn "zero_extend<mode>di2"
   [(set (match_operand:DI 0 "s_register_operand" "=r")
-        (zero_extend:DI (match_operand:QHSI 1 "<qhs_extenddi_op>"
-                                           "<qhs_extenddi_cstr>")))]
+        (zero_extend:DI (match_operand:QHSI 1 "<qhs_zextenddi_op>"
+                                           "<qhs_zextenddi_cstr>")))]
   "TARGET_32BIT <qhs_zextenddi_cond>"
   "#"
   [(set_attr "length" "8")
index 219918c80645b146e469b2d949b3fb4b9880d291..da1f7af9b7a8b2c2a90544d219da695eb75b6024 100644 (file)
 (define_mode_attr qhs_zextenddi_cond [(SI "") (HI "&& arm_arch6") (QI "")])
 (define_mode_attr qhs_sextenddi_cond [(SI "") (HI "&& arm_arch6")
                                      (QI "&& arm_arch6")])
-(define_mode_attr qhs_extenddi_op [(SI "s_register_operand")
+(define_mode_attr qhs_zextenddi_op [(SI "s_register_operand")
                                   (HI "nonimmediate_operand")
                                   (QI "nonimmediate_operand")])
-(define_mode_attr qhs_extenddi_cstr [(SI "r") (HI "rm") (QI "rm")])
+(define_mode_attr qhs_extenddi_op [(SI "s_register_operand")
+                                  (HI "nonimmediate_operand")
+                                  (QI "arm_reg_or_extendqisi_mem_op")])
+(define_mode_attr qhs_extenddi_cstr [(SI "r") (HI "rm") (QI "rUq")])
+(define_mode_attr qhs_zextenddi_cstr [(SI "r") (HI "rm") (QI "rm")])
 
 ;; Mode attributes used for fixed-point support.
 (define_mode_attr qaddsub_suf [(V4UQQ "8") (V2UHQ "16") (UQQ "8") (UHQ "16")
index 8b4a6773936b97ede8b2573a84a6c174dcccd39c..27ba6033f78f193dd78b7dc65f1de62a47ce7400 100644 (file)
 
 (define_special_predicate "arm_extendqisi_mem_op"
   (and (match_operand 0 "memory_operand")
-       (match_test "arm_legitimate_address_outer_p (mode, XEXP (op, 0),
-                                                   SIGN_EXTEND, 0)")))
+       (match_test "TARGET_ARM ? arm_legitimate_address_outer_p (mode,
+                                                                 XEXP (op, 0),
+                                                                SIGN_EXTEND,
+                                                                0)
+                               : memory_address_p (QImode, XEXP (op, 0))")))
 
 (define_special_predicate "arm_reg_or_extendqisi_mem_op"
   (ior (match_operand 0 "arm_extendqisi_mem_op")
index fa36dd08b63d9126b4a1debb7b65a1e1fefe82ad..1ad07775e2409300b943eb04a86680d8ac239620 100644 (file)
@@ -1,3 +1,7 @@
+2011-09-30  Ramana Radhakrishnan  <ramana.radhakrishnan@linaro.org>
+
+       * gcc.target/arm/pr50099.c: New test.
+
 2011-09-30  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
 
        * gcc.target/arm/pr42835.c: Add -fno-tree-tail-merge.
diff --git a/gcc/testsuite/gcc.target/arm/pr50099.c b/gcc/testsuite/gcc.target/arm/pr50099.c
new file mode 100644 (file)
index 0000000..c0d143d
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+long long foo (signed char * arg)
+{
+  long long temp_1;
+
+  temp_1 = arg[256]; 
+  return temp_1;
+}