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);