On 4/16/19 10:29 AM, Steve Ellcey wrote: > Re-ping. I know there are discussions about bigger changes to fix the > various failures listed in PR rtl-optimization/87763 but this patch > at least fixes one of them (gcc.target/aarch64/lsl_asr_sbfiz.c). So I think we can address this by making the extv/extzv expander handle both modes just like we do for insv. That's cleaner than addding new patterns to match the subreg nonsense IMHO.
Something like this: > (define_expand "<optab><mode>" > [(set (match_operand:GPI 0 "register_operand" "=r") > (ANY_EXTRACT:GPI (match_operand:GPI 1 "register_operand") > (match_operand 2 > "aarch64_simd_shift_imm_offset_<mode>") > (match_operand 3 "aarch64_simd_shift_imm_<mode>")))] > "" > { > if (!IN_RANGE (INTVAL (operands[2]) + INTVAL (operands[3]), > 1, GET_MODE_BITSIZE (<MODE>mode) - 1)) > FAIL; > } > ) Note how we're using <mode>, <MODE> and the GPI iterator. With that updated expander I get: sbfiz32: sbfiz w0, w0, 19, 3 // 12 [c=8 l=4] *ashiftsi_extv_bfiz ret // 21 [c=0 l=4] *do_return and sbfiz64: sbfiz x0, x0, 38, 6 // 12 [c=8 l=4] *ashiftdi_extv_bfiz ret // 21 [c=0 l=4] *do_return I'm going to throw that into the tester and see what we get... jeff