+2018-07-11  Jan Beulich  <jbeulich@suse.com>
+
+       * config/tc-i386.c (md_assemble): Also replace an already
+       present REP prefix.
+       * testsuite/gas/i386/mpx-add-bnd-prefix.s,
+       testsuite/gas/i386/x86-64-mpx-add-bnd-prefix.s: Test RET with
+       all REP flavors.
+       * testsuite/gas/i386/mpx-add-bnd-prefix.d,
+       testsuite/gas/i386/x86-64-mpx-add-bnd-prefix.d: Adjust
+       expectations.
+       * testsuite/gas/i386/mpx-add-bnd-prefix.e,
+       testsuite/gas/i386/x86-64-mpx-add-bnd-prefix.e: New.
+
 2018-07-09  Jeff Law  <law@redhat.com>
 
        * testsuite/nds32/ji-jr.d: Fix name tag.
 
     }
 
   /* Insert BND prefix.  */
-  if (add_bnd_prefix
-      && i.tm.opcode_modifier.bndprefixok
-      && !i.prefix[BND_PREFIX])
-    add_prefix (BND_PREFIX_OPCODE);
+  if (add_bnd_prefix && i.tm.opcode_modifier.bndprefixok)
+    {
+      if (!i.prefix[BND_PREFIX])
+       add_prefix (BND_PREFIX_OPCODE);
+      else if (i.prefix[BND_PREFIX] != BND_PREFIX_OPCODE)
+       {
+         as_warn (_("replacing `rep'/`repe' prefix by `bnd'"));
+         i.prefix[BND_PREFIX] = BND_PREFIX_OPCODE;
+       }
+    }
 
   /* Check string instruction segment overrides.  */
   if (i.tm.opcode_modifier.isstring && i.mem_operands != 0)
 
 #as: -madd-bnd-prefix
+#stderr: mpx-add-bnd-prefix.e
 #objdump: -drw
 #name: Check -madd-bnd-prefix
 
 0+14 <foo>:
 [      ]*[a-f0-9]+:    f2 c3                   bnd ret 
 [      ]*[a-f0-9]+:    f2 c3                   bnd ret 
-[      ]*[a-f0-9]+:    f2 e8 f6 ff ff ff       bnd call 14 <foo>
+[      ]*[a-f0-9]+:    f2 c3                   bnd ret 
+[      ]*[a-f0-9]+:    f2 c3                   bnd ret 
+[      ]*[a-f0-9]+:    f2 e8 f2 ff ff ff       bnd call 14 <foo>
 [      ]*[a-f0-9]+:    01 c3                   add    %eax,%ebx
-[      ]*[a-f0-9]+:    e2 f2                   loop   14 <foo>
+[      ]*[a-f0-9]+:    e2 ee                   loop   14 <foo>
 #pass
 
--- /dev/null
+.*: Assembler messages:
+.*:12: Warning: .*rep.*bnd.*
+.*:13: Warning: .*rep.*bnd.*
 
        jmp     *(%ebx)
        ret
 foo:
+       # Use of REP/REPE prefix - converted to BND with warning
+       rep ret
+       repe ret
        # Use of REPNE prefix - we shouldn't get any error
        repne ret
        # BND prefix already exists - we shouldn't get any error here
 
 #as: -madd-bnd-prefix
+#stderr: x86-64-mpx-add-bnd-prefix.e
 #objdump: -drw
 #name: Check -madd-bnd-prefix (x86-64)
 
 0+14 <foo>:
 [      ]*[a-f0-9]+:    f2 c3                   bnd retq 
 [      ]*[a-f0-9]+:    f2 c3                   bnd retq 
-[      ]*[a-f0-9]+:    f2 e8 f6 ff ff ff       bnd callq 14 <foo>
+[      ]*[a-f0-9]+:    f2 c3                   bnd retq 
+[      ]*[a-f0-9]+:    f2 c3                   bnd retq 
+[      ]*[a-f0-9]+:    f2 e8 f2 ff ff ff       bnd callq 14 <foo>
 [      ]*[a-f0-9]+:    48 01 c3                add    %rax,%rbx
-[      ]*[a-f0-9]+:    e2 f1                   loop   14 <foo>
+[      ]*[a-f0-9]+:    e2 ed                   loop   14 <foo>
 #pass
 
--- /dev/null
+.*: Assembler messages:
+.*:12: Warning: .*rep.*bnd.*
+.*:13: Warning: .*rep.*bnd.*
 
        jmp     *(%rbx)
        ret
 foo:
+       # Use of REP/REPE prefix - converted to BND with warning
+       rep ret
+       repe ret
        # Use of REPNE prefix - we shouldn't get any error
        repne ret
        # BND prefix already exists - we shouldn't get any error here