summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-03-08 00:25:47 +0000
committerChris Lattner <sabre@nondot.org>2006-03-08 00:25:47 +0000
commita8dd6361926cb3544f7a59556ec0c54b541ef79e (patch)
tree60aa75c22a369384fb035589ce1aa816745d82ce /llvm/lib/Target/PowerPC
parent70b25efa57adcd90593da4f7b0370a31425aab65 (diff)
downloadbcm5719-llvm-a8dd6361926cb3544f7a59556ec0c54b541ef79e.tar.gz
bcm5719-llvm-a8dd6361926cb3544f7a59556ec0c54b541ef79e.zip
add a note
llvm-svn: 26605
Diffstat (limited to 'llvm/lib/Target/PowerPC')
-rw-r--r--llvm/lib/Target/PowerPC/README.txt41
1 files changed, 41 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/README.txt b/llvm/lib/Target/PowerPC/README.txt
index 8fad506f5cc..898af148e0a 100644
--- a/llvm/lib/Target/PowerPC/README.txt
+++ b/llvm/lib/Target/PowerPC/README.txt
@@ -466,3 +466,44 @@ we can convert to the "three address" instruction, to save code space.
This only matters when we start generating cr logical ops.
+===-------------------------------------------------------------------------===
+
+We should compile these two functions to the same thing:
+
+#include <stdlib.h>
+void f(int a, int b, int *P) {
+ *P = (a-b)>=0?(a-b):(b-a);
+}
+void g(int a, int b, int *P) {
+ *P = abs(a-b);
+}
+
+Further, they should compile to something better than:
+
+_g:
+ subf r2, r4, r3
+ subfic r3, r2, 0
+ cmpwi cr0, r2, -1
+ bgt cr0, LBB2_2 ; entry
+LBB2_1: ; entry
+ mr r2, r3
+LBB2_2: ; entry
+ stw r2, 0(r5)
+ blr
+
+GCC produces:
+
+_g:
+ subf r4,r4,r3
+ srawi r2,r4,31
+ xor r0,r2,r4
+ subf r0,r2,r0
+ stw r0,0(r5)
+ blr
+
+... which is much nicer.
+
+This theoretically may help improve twolf slightly (used in dimbox.c:142?).
+
+===-------------------------------------------------------------------------===
+
OpenPOWER on IntegriCloud