[llvm-commits] CVS: llvm/lib/Target/PowerPC/README.txt

Nate Begeman natebegeman at mac.com
Mon May 8 13:08:41 PDT 2006



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.






More information about the llvm-commits mailing list