On Thu, Feb 08, 2018 at 10:38:09AM -0600, Peter Bergner wrote: > On 2/6/18 10:36 AM, Peter Bergner wrote: > > On 2/6/18 10:20 AM, David Edelsohn wrote: > >> Do the gen_XXXdi3 calls work if you use SDI iterator instead of GPR > >> iterator, as Segher suggested? > > > > Well it works _if_ we use the first patch that changes the gen_* > > patterns. If we go this route, I agree we should use the SDI > > iterator instead of GPR. > > Actually, my bad. While bootstrapping this on a BE system, we get an > error when we attempt a 64-bit multiply in 32-bit mode. In this case, > the gen_muldi3() pattern calls expand_mult(DImode, ...) and the automatic > expand machinery notices the gen_muldi3() now allows DImode in the > !TARGET_POWERPC64 case and then calls gen_muldi3() to emit the multiply > and we go into infinite recursion. We don't have that problem in the > div/udiv case, because we call out to the lib routines, so no recursion. > Given this, I think we should probably go with the patch that modifies > vsx.md and guards the calls to gen_{div,udiv,mul}di3() with a TARGET_POWERPC64 > test.
Okay, let's go with this, at least for now. Thanks for investigating. > -/* { dg-final { scan-assembler-times "divd" 4 } } */ > +/* { dg-final { scan-assembler-times {\mdivd\M} 2 { target lp64 } } } */ > +/* { dg-final { scan-assembler-times {\mbl __divdi3\M} 2 { target ilp32 } } > } */ Why does divd change from 4 to 2 times? Is it changed to muls? Okay for trunk. Thanks! Segher