[PATCH] Fix up predicates for commutative vector comparison (PR target/82855)

Jakub Jelinek jakub@redhat.com
Mon Nov 6 21:23:00 GMT 2017


Hi!

The issues fixed by the previous patch together with this one result
in the testcase from the PR with -mtune=intel (for some reason with
generic tuning we decide to perform the 256-bit load as 2 128-bit loads and
don't merge that into 256-bit comparison operand, shall we change that?)
to use memory operand directly in vcmpeq* instead of loading it into a
register first.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2017-11-06  Jakub Jelinek  <jakub@redhat.com>

	PR target/82855
	* config/i386/sse.md (<avx512>_eq<mode>3<mask_scalar_merge_name>_1):
	Use nonimmediate_operand predicate for operand 1 instead of
	register_operand.

--- gcc/config/i386/sse.md.jj	2017-11-06 11:47:55.103076500 +0100
+++ gcc/config/i386/sse.md	2017-11-06 11:50:16.832266795 +0100
@@ -11168,7 +11168,7 @@ (define_expand "<avx512>_eq<mode>3<mask_
 (define_insn "<avx512>_eq<mode>3<mask_scalar_merge_name>_1"
   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=Yk")
 	(unspec:<avx512fmaskmode>
-	  [(match_operand:VI12_AVX512VL 1 "register_operand" "%v")
+	  [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "%v")
 	   (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")]
 	  UNSPEC_MASKED_EQ))]
   "TARGET_AVX512F
@@ -11182,7 +11182,7 @@ (define_insn "<avx512>_eq<mode>3<mask_sc
 (define_insn "<avx512>_eq<mode>3<mask_scalar_merge_name>_1"
   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=Yk")
 	(unspec:<avx512fmaskmode>
-	  [(match_operand:VI48_AVX512VL 1 "register_operand" "%v")
+	  [(match_operand:VI48_AVX512VL 1 "nonimmediate_operand" "%v")
 	   (match_operand:VI48_AVX512VL 2 "nonimmediate_operand" "vm")]
 	  UNSPEC_MASKED_EQ))]
   "TARGET_AVX512F

	Jakub



More information about the Gcc-patches mailing list