For some reason middle-end does not enforce operand
predicates for vcond patterns.

2021-05-10  Uroš Bizjak  <ubiz...@gmail.com>

gcc/
    * config/i386/i386-expand.c (ix86_expand_sse_movcc)
    <case E_V2SImode>: Force op_true to register.

Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

Pushed to master.

Uros.
diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c
index e9f11bca78a..5cfde5b3d30 100644
--- a/gcc/config/i386/i386-expand.c
+++ b/gcc/config/i386/i386-expand.c
@@ -3707,6 +3707,8 @@ ix86_expand_sse_movcc (rtx dest, rtx cmp, rtx op_true, 
rtx op_false)
     case E_V2SImode:
       if (TARGET_SSE4_1)
        {
+         op_true = force_reg (mode, op_true);
+
          gen = gen_mmx_pblendvb;
          if (mode != V8QImode)
            d = gen_reg_rtx (V8QImode);

Reply via email to