summaryrefslogtreecommitdiff
path: root/gcc/config/arc/predicates.md
diff options
context:
space:
mode:
authorJoern Rennecke <joern.rennecke@embecosm.com>2014-03-11 16:09:59 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2014-03-11 16:09:59 +0000
commit167ba5b9dc22350d5fec46299769a4030b5cde4a (patch)
tree946c5020bb9110324f70e5b2548286d8b69846fc /gcc/config/arc/predicates.md
parenta07f6ed2dd05923f69b8983e1fab767feecd393a (diff)
downloadgcc-167ba5b9dc22350d5fec46299769a4030b5cde4a.tar.gz
Fix post-reload predicate mismatch ICE during qt build:
* config/arc/predicates.md (extend_operand): During/after reload, allow const_int_operand. * config/arc/arc.md (mulsidi3_700): Use extend_operand predicate. (umulsidi3_700): Likewise. Change operand 2 constraint back to "cL". (mulsi3_highpart): Change operand 2 constraint alternatives 2 and 3 to "i". (umulsi3_highpart_i): Likewise. From-SVN: r208487
Diffstat (limited to 'gcc/config/arc/predicates.md')
-rw-r--r--gcc/config/arc/predicates.md10
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/config/arc/predicates.md b/gcc/config/arc/predicates.md
index 779af443517..81bf6277ee8 100644
--- a/gcc/config/arc/predicates.md
+++ b/gcc/config/arc/predicates.md
@@ -776,10 +776,14 @@
(and (match_code "reg")
(match_test "REGNO (op) == (TARGET_BIG_ENDIAN ? 58 : 59)")))
+; Unfortunately, we can not allow a const_int_operand before reload, because
+; reload needs a non-void mode to guide it how to reload the inside of a
+; {sign_}extend.
(define_predicate "extend_operand"
- (ior (match_test "register_operand (op, mode)")
- (and (match_test "immediate_operand (op, mode)")
- (not (match_test "const_int_operand (op, mode)")))))
+ (ior (match_operand 0 "register_operand")
+ (and (match_operand 0 "immediate_operand")
+ (ior (not (match_operand 0 "const_int_operand"))
+ (match_test "reload_in_progress || reload_completed")))))
(define_predicate "millicode_store_operation"
(match_code "parallel")