aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRamana Radhakrishnan <ramana.radhakrishnan@linaro.org>2011-09-30 09:36:43 +0000
committerRamana Radhakrishnan <ramana@gcc.gnu.org>2011-09-30 09:36:43 +0000
commit8d4f1548bd12ed9975ad22e1ba08ccb258352055 (patch)
tree7901f9d2d663b6736599dc46de31f1a8d9084184 /gcc
parent8a58edc29dd5c971628d802229f91476b5716116 (diff)
downloadgcc-8d4f1548bd12ed9975ad22e1ba08ccb258352055.zip
gcc-8d4f1548bd12ed9975ad22e1ba08ccb258352055.tar.gz
gcc-8d4f1548bd12ed9975ad22e1ba08ccb258352055.tar.bz2
re PR target/50099 (ICE: internal compiler error: in extract_insn, at recog.c:2113 while building lttng-ust)
Fix PR target/50099 From-SVN: r179378
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/arm/arm.md4
-rw-r--r--gcc/config/arm/iterators.md8
-rw-r--r--gcc/config/arm/predicates.md7
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/arm/pr50099.c10
6 files changed, 36 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 96cd9d5..f5c7dfc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 3889322..baa7eb4 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -4389,8 +4389,8 @@
(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")
diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md
index 219918c..da1f7af 100644
--- a/gcc/config/arm/iterators.md
+++ b/gcc/config/arm/iterators.md
@@ -390,10 +390,14 @@
(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")
diff --git a/gcc/config/arm/predicates.md b/gcc/config/arm/predicates.md
index 8b4a677..27ba603 100644
--- a/gcc/config/arm/predicates.md
+++ b/gcc/config/arm/predicates.md
@@ -301,8 +301,11 @@
(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")
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fa36dd0..1ad0777 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..c0d143d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr50099.c
@@ -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;
+}