[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