Hello Jakub, On 29 Jun 18:51, Jakub Jelinek wrote: > Hi! > > This patch fixes various issues with the vec_extract_lo_* patterns. > There are splitters for these, but only for some cases (no mask, and > in one case also not xmm32+ reg) that change those into just a copy or load > of the low part subreg, but if those can't be used, the vextract* insns > don't accept memory input operand, but 3 of the 4 patterns have > nonimmediate_operand input, which is wrong for the masked case, and the > other one uses register_operand, even when the splitter can handle > nonimmediate_operand when not masked. > > Thus this patch makes sure that the input is nonimmediate_operand and v,vm > if not masked and register_operand and v,v if masked, returns "#" to ensure > splitting in cases the input is a memory, simplifies the conditions (for > masked we don't need to test at runtime if both arguments aren't MEMs, > because the predicate is now register_operand with v constraint), and > changes the single case that used register_operand to follow the rest. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? Your patch is OK for trunk.
> > 2017-06-29 Jakub Jelinek <ja...@redhat.com> > > PR target/81225 > * config/i386/sse.md (vec_extract_lo_<mode><mask_name>): For > V8FI, V16FI and VI8F_256 iterators, use <store_mask_predicate> instead > of nonimmediate_operand and <store_mask_constraint> instead of m for > the input operand. For V8FI iterator, always split if input is a MEM. > For V16FI and V8SF_256 iterators, don't test if both operands are MEM > if <mask_applied>. For VI4F_256 iterator, use <store_mask_predicate> > instead of register_operand and <store_mask_constraint> instead of v for > the input operand. Make sure both operands aren't MEMs for if not > <mask_applied>. > > * gcc.target/i386/pr81225.c: New test. -- Thanks, K