example nate pointed out
authorChris Lattner <sabre@nondot.org>
Tue, 31 Jan 2006 07:16:34 +0000 (07:16 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 31 Jan 2006 07:16:34 +0000 (07:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25841 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/README.txt

index b23b9a4cc4be3cc6b2f2ad00759fda4955ae71d4..e5cf75d3beccfefaf53444a5872fffc7c547455f 100644 (file)
@@ -427,3 +427,36 @@ _test:
 
 without the lwz/stw's.
 
+===-------------------------------------------------------------------------===
+
+Compile this:
+
+int foo(int a) {
+  int b = (a < 8);
+  if (b) {
+    return b * 3;     // ignore the fact that this is always 3.
+  } else {
+    return 2;
+  }
+}
+
+into something not this:
+
+_foo:
+1)      cmpwi cr7, r3, 8
+        mfcr r2, 1
+        rlwinm r2, r2, 29, 31, 31
+1)      cmpwi cr0, r3, 7
+        bgt cr0, LBB1_2 ; UnifiedReturnBlock
+LBB1_1: ; then
+        rlwinm r2, r2, 0, 31, 31
+        mulli r3, r2, 3
+        blr
+LBB1_2: ; UnifiedReturnBlock
+        li r3, 2
+        blr
+
+In particular, the two compares (marked 1) could be shared by reversing one.
+This could be done in the dag combiner, by swapping a BR_CC when a SETCC of the
+same operands (but backwards) exists.  In this case, this wouldn't save us 
+anything though, because the compares still wouldn't be shared.