On 11/24/20 12:59 PM, Carl Love via Gcc-patches wrote: > + > +(define_insn "dives_<mode>" > + [(set (match_operand:VIlong 0 "vsx_register_operand" "=v") > + (unspec:VIlong [(match_operand:VIlong 1 "vsx_register_operand" "v") > + (match_operand:VIlong 2 "vsx_register_operand" "v")] > + UNSPEC_VDIVES))] > + "TARGET_POWER10" > + "vdives<wd> %0,%1,%2" > + [(set_attr "type" "vecdiv") > + (set_attr "size" "128")]) > + > +(define_insn "diveu_<mode>" > + [(set (match_operand:VIlong 0 "vsx_register_operand" "=v") > + (unspec: VIlong [(match_operand:VIlong 1 "vsx_register_operand" "v") > + (match_operand:VIlong 2 "vsx_register_operand" "v")] > + UNSPEC_VDIVEU))] > + "TARGET_POWER10" > + "vdiveu<wd> %0,%1,%2" > + [(set_attr "type" "vecdiv") > + (set_attr "size" "128")]) > + > +(define_insn "div<mode>3" > + [(set (match_operand:VIlong 0 "vsx_register_operand" "=v") > + (div:VIlong (match_operand:VIlong 1 "vsx_register_operand" "v") > + (match_operand:VIlong 2 "vsx_register_operand" "v")))] > + "TARGET_POWER10" > + "vdivs<wd> %0,%1,%2" > + [(set_attr "type" "vecdiv") > + (set_attr "size" "128")]) > + > +(define_insn "udiv<mode>3" > + [(set (match_operand:VIlong 0 "vsx_register_operand" "=v") > + (udiv:VIlong (match_operand:VIlong 1 "vsx_register_operand" "v") > + (match_operand:VIlong 2 "vsx_register_operand" "v")))] > + "TARGET_POWER10" > + "vdivu<wd> %0,%1,%2" > + [(set_attr "type" "vecdiv") > + (set_attr "size" "128")]) > + > +(define_insn "mods_<mode>" > + [(set (match_operand:VIlong 0 "vsx_register_operand" "=v") > + (mod:VIlong (match_operand:VIlong 1 "vsx_register_operand" "v") > + (match_operand:VIlong 2 "vsx_register_operand" "v")))] > + "TARGET_POWER10" > + "vmods<wd> %0,%1,%2" > + [(set_attr "type" "vecdiv") > + (set_attr "size" "128")]) > + > +(define_insn "modu_<mode>" > + [(set (match_operand:VIlong 0 "vsx_register_operand" "=v") > + (umod:VIlong (match_operand:VIlong 1 "vsx_register_operand" "v") > + (match_operand:VIlong 2 "vsx_register_operand" "v")))] > + "TARGET_POWER10" > + "vmodu<wd> %0,%1,%2" > + [(set_attr "type" "vecdiv") > + (set_attr "size" "128")])
We should only be setting "size" "128" for instructions that operate on scalar 128-bit data items (i.e. 'vdivesq' etc). Since the above insns are either V2DI/V4SI (ala VIlong mode_iterator), they shouldn't be marked as size 128. If you want to set the size based on mode, (set_attr "size" "<bits>") should do the trick I believe. -Pat