http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50788

Eric Botcazou <ebotcazou at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |NEW
                 CC|                            |ebotcazou at gcc dot
                   |                            |gnu.org, uros at gcc dot
                   |                            |gnu.org
          Component|rtl-optimization            |target
         AssignedTo|ebotcazou at gcc dot        |unassigned at gcc dot
                   |gnu.org                     |gnu.org

--- Comment #3 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2011-10-22 
20:41:53 UTC ---
This appears to be a problem in the AVX maskmov patterns: operand 0 is seen as
a double output operand.  The solution is either to use a match_operand for the
input with constraint 0 or to use '+' instead of '=' in the constraint.  The
former is the preferred approach in this case though:

Index: config/i386/sse.md
===================================================================
--- config/i386/sse.md  (revision 180235)
+++ config/i386/sse.md  (working copy)
@@ -12298,7 +12298,7 @@ (define_insn "*avx2_maskmov<ssemodesuffi
        (unspec:VI48_AVX2
          [(match_operand:<sseintvecmode> 1 "register_operand" "x,x")
           (match_operand:VI48_AVX2 2 "nonimmediate_operand" "m,x")
-          (match_dup 0)]
+          (match_operand:VI48_AVX2 3 "nonimmediate_operand" "0,0")]
          UNSPEC_MASKMOV))]
   "TARGET_AVX2
    && (REG_P (operands[0]) == MEM_P (operands[2]))"
@@ -12313,7 +12313,7 @@ (define_insn "*avx_maskmov<ssemodesuffix
        (unspec:VF
          [(match_operand:<sseintvecmode> 1 "register_operand" "x,x")
           (match_operand:VF 2 "nonimmediate_operand" "m,x")
-          (match_dup 0)]
+          (match_operand:VF 3 "nonimmediate_operand" "0,0")]
          UNSPEC_MASKMOV))]
   "TARGET_AVX
    && (REG_P (operands[0]) == MEM_P (operands[2]))"

but the expanders have match_dup.  Uros, would you mind taking it over?  TIA.

Reply via email to