aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386/constraints.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/i386/constraints.md')
-rw-r--r--gcc/config/i386/constraints.md10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md
index 6b291a0..ded2e19 100644
--- a/gcc/config/i386/constraints.md
+++ b/gcc/config/i386/constraints.md
@@ -168,6 +168,7 @@
;; z Constant call address operand.
;; C Integer SSE constant with all bits set operand.
;; F Floating-point SSE constant with all bits set operand.
+;; M x86-64 memory operand.
(define_constraint "Bf"
"@internal Flags register operand."
@@ -232,6 +233,15 @@
(and (match_test "TARGET_SSE")
(match_operand 0 "float_vector_all_ones_operand")))
+;; NB: Similar to 'm', but don't use define_memory_constraint on x86-64
+;; to prevent LRA from converting the operand to the form '(mem (reg X))'
+;; where X is a base register.
+(define_constraint "BM"
+ "@internal x86-64 memory operand."
+ (and (match_code "mem")
+ (match_test "memory_address_addr_space_p (GET_MODE (op), XEXP (op, 0),
+ MEM_ADDR_SPACE (op))")))
+
;; Integer constant constraints.
(define_constraint "Wb"
"Integer constant in the range 0 @dots{} 7, for 8-bit shifts."