Commit 69fa742f by Jakub Jelinek Committed by Jakub Jelinek

re PR target/70028 (Error: operand size mismatch for `kmovw' (wrong assembly…

re PR target/70028 (Error: operand size mismatch for `kmovw' (wrong assembly generated) with -mavx512bw -masm=intel)

	PR target/70028
	* config/i386/i386.md (kmovw): Move m constraint to 2nd alternative.
	(*movhi_internal): Put mask moves from and to memory separately
	from moves from/to GPRs.

	* gcc.target/i386/pr70028.c: New test.

From-SVN: r233904
parent c954de7f
2016-03-02 Jakub Jelinek <jakub@redhat.com>
PR target/70028
* config/i386/i386.md (kmovw): Move m constraint to 2nd alternative.
(*movhi_internal): Put mask moves from and to memory separately
from moves from/to GPRs.
2016-03-02 Richard Biener <rguenther@suse.de> 2016-03-02 Richard Biener <rguenther@suse.de>
* genmatch.c (dt_node::gen_kids): Fix match code-gen for embedded * genmatch.c (dt_node::gen_kids): Fix match code-gen for embedded
......
...@@ -2442,7 +2442,7 @@ ...@@ -2442,7 +2442,7 @@
(define_insn "kmovw" (define_insn "kmovw"
[(set (match_operand:HI 0 "nonimmediate_operand" "=k,k") [(set (match_operand:HI 0 "nonimmediate_operand" "=k,k")
(unspec:HI (unspec:HI
[(match_operand:HI 1 "nonimmediate_operand" "rm,k")] [(match_operand:HI 1 "nonimmediate_operand" "r,km")]
UNSPEC_KMOV))] UNSPEC_KMOV))]
"!(MEM_P (operands[0]) && MEM_P (operands[1])) && TARGET_AVX512F" "!(MEM_P (operands[0]) && MEM_P (operands[1])) && TARGET_AVX512F"
"@ "@
...@@ -2454,8 +2454,8 @@ ...@@ -2454,8 +2454,8 @@
(define_insn "*movhi_internal" (define_insn "*movhi_internal"
[(set (match_operand:HI 0 "nonimmediate_operand" "=r,r ,r ,m ,k,k,rm") [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r ,r ,m ,k,k, r,m")
(match_operand:HI 1 "general_operand" "r ,rn,rm,rn,rm,k,k"))] (match_operand:HI 1 "general_operand" "r ,rn,rm,rn,r,km,k,k"))]
"!(MEM_P (operands[0]) && MEM_P (operands[1]))" "!(MEM_P (operands[0]) && MEM_P (operands[1]))"
{ {
switch (get_attr_type (insn)) switch (get_attr_type (insn))
...@@ -2469,7 +2469,8 @@ ...@@ -2469,7 +2469,8 @@
switch (which_alternative) switch (which_alternative)
{ {
case 4: return "kmovw\t{%k1, %0|%0, %k1}"; case 4: return "kmovw\t{%k1, %0|%0, %k1}";
case 5: return "kmovw\t{%1, %0|%0, %1}"; case 5: /* FALLTHRU */
case 7: return "kmovw\t{%1, %0|%0, %1}";
case 6: return "kmovw\t{%1, %k0|%k0, %1}"; case 6: return "kmovw\t{%1, %k0|%k0, %1}";
default: gcc_unreachable (); default: gcc_unreachable ();
} }
...@@ -2482,7 +2483,7 @@ ...@@ -2482,7 +2483,7 @@
} }
} }
[(set (attr "type") [(set (attr "type")
(cond [(eq_attr "alternative" "4,5,6") (cond [(eq_attr "alternative" "4,5,6,7")
(const_string "mskmov") (const_string "mskmov")
(match_test "optimize_function_for_size_p (cfun)") (match_test "optimize_function_for_size_p (cfun)")
(const_string "imov") (const_string "imov")
...@@ -2499,7 +2500,7 @@ ...@@ -2499,7 +2500,7 @@
] ]
(const_string "imov"))) (const_string "imov")))
(set (attr "prefix") (set (attr "prefix")
(if_then_else (eq_attr "alternative" "4,5,6") (if_then_else (eq_attr "alternative" "4,5,6,7")
(const_string "vex") (const_string "vex")
(const_string "orig"))) (const_string "orig")))
(set (attr "mode") (set (attr "mode")
......
2016-03-02 Jakub Jelinek <jakub@redhat.com>
PR target/70028
* gcc.target/i386/pr70028.c: New test.
2016-03-02 Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org> 2016-03-02 Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
* c-c++-common/asan/swapcontext-test-1.c, * c-c++-common/asan/swapcontext-test-1.c,
......
/* PR target/70028 */
/* { dg-do assemble { target avx512bw } } */
/* { dg-require-effective-target int128 } */
/* { dg-require-effective-target masm_intel } */
/* { dg-options "-O2 -fno-forward-propagate -mavx512bw -masm=intel" } */
typedef unsigned short A;
typedef int B __attribute__ ((vector_size (32)));
typedef unsigned __int128 C;
typedef __int128 D __attribute__ ((vector_size (32)));
C
foo (A a, int b, unsigned c, C d, A e, unsigned f, B g, D h)
{
g[1] ^= (A) ~ a;
a ^= (unsigned) g[0];
h %= (D) h | 1;
return a + b + c + d + e + g[0] + g[1] + h[1];
}
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