Commit f2f3e54d by Uros Bizjak

i386.md (*extzvqi_mem_rex64): Move above *extzv<mode>.

	* config/i386/i386.md (*extzvqi_mem_rex64): Move above *extzv<mode>.
	Remove UNSPEC_NOREX_MEM tag.  Update corresponding peephole2 pattern.
	(*insvqi_1_mem_rex64): Move above insv<mode>_1.  Remove
	UNSPEC_NOREX_MEM tag.  Update corresponding peephole2 pattern.
	(UNSPEC_NOREX_MEM): Remove definition.

From-SVN: r247066
parent 7b9efd03
2017-04-21 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (*extzvqi_mem_rex64): Move above *extzv<mode>.
Remove UNSPEC_NOREX_MEM tag. Update corresponding peephole2 pattern.
(*insvqi_1_mem_rex64): Move above insv<mode>_1. Remove
UNSPEC_NOREX_MEM tag. Update corresponding peephole2 pattern.
(UNSPEC_NOREX_MEM): Remove definition.
2017-04-21 Richard Biener <rguenther@suse.de> 2017-04-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/79547 PR tree-optimization/79547
......
...@@ -114,7 +114,6 @@ ...@@ -114,7 +114,6 @@
UNSPEC_STOS UNSPEC_STOS
UNSPEC_PEEPSIB UNSPEC_PEEPSIB
UNSPEC_INSN_FALSE_DEP UNSPEC_INSN_FALSE_DEP
UNSPEC_NOREX_MEM
;; For SSE/MMX support: ;; For SSE/MMX support:
UNSPEC_FIX_NOTRUNC UNSPEC_FIX_NOTRUNC
...@@ -2808,28 +2807,27 @@ ...@@ -2808,28 +2807,27 @@
operands[1] = copy_to_reg (operands[1]); operands[1] = copy_to_reg (operands[1]);
}) })
(define_insn "*extzv<mode>"
[(set (match_operand:SWI248 0 "register_operand" "=R")
(zero_extract:SWI248 (match_operand 1 "ext_register_operand" "Q")
(const_int 8)
(const_int 8)))]
""
"movz{bl|x}\t{%h1, %k0|%k0, %h1}"
[(set_attr "type" "imovx")
(set_attr "mode" "SI")])
(define_insn "*extzvqi_mem_rex64" (define_insn "*extzvqi_mem_rex64"
[(set (match_operand:QI 0 "norex_memory_operand" "=Bn") [(set (match_operand:QI 0 "norex_memory_operand" "=Bn")
(subreg:QI (subreg:QI
(zero_extract:SI (match_operand 1 "ext_register_operand" "Q") (zero_extract:SI (match_operand 1 "ext_register_operand" "Q")
(const_int 8) (const_int 8)
(const_int 8)) 0)) (const_int 8)) 0))]
(unspec [(const_int 0)] UNSPEC_NOREX_MEM)]
"TARGET_64BIT && reload_completed" "TARGET_64BIT && reload_completed"
"mov{b}\t{%h1, %0|%0, %h1}" "mov{b}\t{%h1, %0|%0, %h1}"
[(set_attr "type" "imov") [(set_attr "type" "imov")
(set_attr "mode" "QI")]) (set_attr "mode" "QI")])
(define_insn "*extzv<mode>"
[(set (match_operand:SWI248 0 "register_operand" "=R")
(zero_extract:SWI248 (match_operand 1 "ext_register_operand" "Q")
(const_int 8)
(const_int 8)))]
""
"movz{bl|x}\t{%h1, %k0|%k0, %h1}"
[(set_attr "type" "imovx")
(set_attr "mode" "SI")])
(define_insn "*extzvqi" (define_insn "*extzvqi"
[(set (match_operand:QI 0 "nonimmediate_operand" "=QBc,?R,m") [(set (match_operand:QI 0 "nonimmediate_operand" "=QBc,?R,m")
(subreg:QI (subreg:QI
...@@ -2867,13 +2865,11 @@ ...@@ -2867,13 +2865,11 @@
(set (match_operand:QI 2 "norex_memory_operand") (match_dup 0))] (set (match_operand:QI 2 "norex_memory_operand") (match_dup 0))]
"TARGET_64BIT "TARGET_64BIT
&& peep2_reg_dead_p (2, operands[0])" && peep2_reg_dead_p (2, operands[0])"
[(parallel
[(set (match_dup 2) [(set (match_dup 2)
(subreg:QI (subreg:QI
(zero_extract:SI (match_dup 1) (zero_extract:SI (match_dup 1)
(const_int 8) (const_int 8)
(const_int 8)) 0)) (const_int 8)) 0))])
(unspec [(const_int 0)] UNSPEC_NOREX_MEM)])])
(define_expand "insv<mode>" (define_expand "insv<mode>"
[(set (zero_extract:SWI248 (match_operand:SWI248 0 "register_operand") [(set (zero_extract:SWI248 (match_operand:SWI248 0 "register_operand")
...@@ -2908,6 +2904,17 @@ ...@@ -2908,6 +2904,17 @@
DONE; DONE;
}) })
(define_insn "*insvqi_1_mem_rex64"
[(set (zero_extract:SI (match_operand 0 "ext_register_operand" "+Q")
(const_int 8)
(const_int 8))
(subreg:SI
(match_operand:QI 1 "norex_memory_operand" "Bn") 0))]
"TARGET_64BIT && reload_completed"
"mov{b}\t{%1, %h0|%h0, %1}"
[(set_attr "type" "imov")
(set_attr "mode" "QI")])
(define_insn "insv<mode>_1" (define_insn "insv<mode>_1"
[(set (zero_extract:SWI248 (match_operand 0 "ext_register_operand" "+Q,Q") [(set (zero_extract:SWI248 (match_operand 0 "ext_register_operand" "+Q,Q")
(const_int 8) (const_int 8)
...@@ -2923,18 +2930,6 @@ ...@@ -2923,18 +2930,6 @@
(set_attr "type" "imov") (set_attr "type" "imov")
(set_attr "mode" "QI")]) (set_attr "mode" "QI")])
(define_insn "*insvqi_1_mem_rex64"
[(set (zero_extract:SI (match_operand 0 "ext_register_operand" "+Q")
(const_int 8)
(const_int 8))
(subreg:SI
(match_operand:QI 1 "norex_memory_operand" "Bn") 0))
(unspec [(const_int 0)] UNSPEC_NOREX_MEM)]
"TARGET_64BIT && reload_completed"
"mov{b}\t{%1, %h0|%h0, %1}"
[(set_attr "type" "imov")
(set_attr "mode" "QI")])
(define_insn "*insvqi_1" (define_insn "*insvqi_1"
[(set (zero_extract:SI (match_operand 0 "ext_register_operand" "+Q,Q") [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "+Q,Q")
(const_int 8) (const_int 8)
...@@ -2956,12 +2951,10 @@ ...@@ -2956,12 +2951,10 @@
(subreg:SI (match_dup 0) 0))] (subreg:SI (match_dup 0) 0))]
"TARGET_64BIT "TARGET_64BIT
&& peep2_reg_dead_p (2, operands[0])" && peep2_reg_dead_p (2, operands[0])"
[(parallel
[(set (zero_extract:SI (match_dup 2) [(set (zero_extract:SI (match_dup 2)
(const_int 8) (const_int 8)
(const_int 8)) (const_int 8))
(subreg:SI (match_dup 1) 0)) (subreg:SI (match_dup 1) 0))])
(unspec [(const_int 0)] UNSPEC_NOREX_MEM)])])
(define_code_iterator any_extract [sign_extract zero_extract]) (define_code_iterator any_extract [sign_extract zero_extract])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment