Changes in directory llvm/lib/Target/PowerPC:
README.txt updated: 1.89 -> 1.90 --- Log message: New note about something bad happening in target independent optimizers --- Diffs of the changes: (+18 -2) README.txt | 20 ++++++++++++++++++-- 1 files changed, 18 insertions(+), 2 deletions(-) Index: llvm/lib/Target/PowerPC/README.txt diff -u llvm/lib/Target/PowerPC/README.txt:1.89 llvm/lib/Target/PowerPC/README.txt:1.90 --- llvm/lib/Target/PowerPC/README.txt:1.89 Mon May 8 14:09:24 2006 +++ llvm/lib/Target/PowerPC/README.txt Mon May 8 15:08:28 2006 @@ -492,8 +492,6 @@ ===-------------------------------------------------------------------------=== -Another missed rlwimi case: - void %foo(uint *%tmp) { %tmp = load uint* %tmp ; <uint> [#uses=3] %tmp1 = shr uint %tmp, ubyte 31 ; <uint> [#uses=1] @@ -529,3 +527,21 @@ or r2, r2, r4 stw r2, 0(r3) blr + +===-------------------------------------------------------------------------=== + +Distilled from the code above, something wacky is going in the optimizers before +code generation time... + +unsigned foo(unsigned x) { + return (unsigned)((unsigned char)(x >> 30) | (unsigned char)(x >> 31)) << 31; +} + +unsigned bar(unsigned x) { + return ((x >> 30) | (x >> 31)) << 31; +} + +generate different code when -O is passed to llvm-gcc. However, when no +optimization is specified and the output is passed into opt with just -mem2reg +and -instcombine, the good code comes out of both. Something is happening before +instcombine to confuse it, and not delete the no-op casts. _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits