Hello, I don't know if this has ever been discussed or mentioned, it's something simple so it could have been talked before, forgive me in that case. The idea is to basically commute/swap function arguments just like in instructions if it's beneficial, mainly for libcalls. Consider this example: typedef float t; t foo(t a, t b) { return a*b; } this gets compiled into (msp430 asm, arm does the same): call #__mulsf3 ret but if we instead do "return b*a;" we get: push.w r11 push.w r10 mov.w r14, r11 mov.w r15, r10 mov.w r13, r15 mov.w r12, r14 mov.w r10, r13 mov.w r11, r12 call #__mulsf3 pop.w r10 pop.w r11 ret Notice the arguments are getting swapped for a commutable operation were there order shouldn't matter. Just an idea to push the optimizations further. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110330/b17fafe9/attachment.html>