Kugan, I don't have the source code to hand but how are the sin()/cos()->sincos() optimizations handled?
Thanks, Matt On 5 June 2013 11:44, Kugan <kugan.vivekanandara...@linaro.org> wrote: > Hi, > > I am looking at best approach for > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43721 - Failure to optimise > (a/b) and (a%b) into single __aeabi_idivmod call in ARM architecture > > In sumary, the following c code results in __aeabi_idivmod() call and one > __aeabi_idiv() call even though the former already calculates the quotient. > int q = a / b; > int r = a % b; > return q + r; > > My question is what would be the best way to handle it. As I see there are > few options with some issues. > > 1. Handling in gimple level, try to reduce the operations to equivalent of > this. We should do this for the targets without integer divide. > {q, r} = a % b; > Gimple assign stmts have only one lhs operation (?). Therefore, lhs has to > be made 64bit to signify return values of R0 and R1 returned together. I am > not too sure of any implications on other architectures here. > > 2. Handling in expand_divmod. Here, when we see a div or mod operation, we > will have to do a linear search to see if there is a valid equivalent > operation to combine. If we find one, we can generate __aeabi_idivmod() and > cache the result for the equivalent operation. As I see, this can get messy > and might not be acceptable. > > 3. An RTL pass to process and combine these library calls. Possibly using > cse. I am still looking at this. > > 4. Ramana tried a prototype to do the same using target pattens. He has > ruled this out. (if you want more info, please refer to at > https://code.launchpad.net/~ramana/gcc-linaro/divmodsi4-experiments) > > Any suggestion for best way to handle this? > > Thanks, > Kugan -- Matthew Gretton-Dann Linaro Toolchain Working Group matthew.gretton-d...@linaro.org _______________________________________________ linaro-toolchain mailing list linaro-toolchain@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-toolchain