summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-09-20 03:59:25 +0000
committerChris Lattner <sabre@nondot.org>2006-09-20 03:59:25 +0000
commitab33d350a7924561c019f18d6724270e7dd7b1e7 (patch)
tree156e23259ad12572a8001889a2a34ebddcfb47b3 /llvm/lib
parent601b86513d2c4a488e9063986afb0f698dab42e3 (diff)
downloadbcm5719-llvm-ab33d350a7924561c019f18d6724270e7dd7b1e7.tar.gz
bcm5719-llvm-ab33d350a7924561c019f18d6724270e7dd7b1e7.zip
Add a note that we should match rlwnm better
llvm-svn: 30508
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/PowerPC/README.txt34
1 files changed, 34 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/README.txt b/llvm/lib/Target/PowerPC/README.txt
index b0840a5e501..cfc7eb38b28 100644
--- a/llvm/lib/Target/PowerPC/README.txt
+++ b/llvm/lib/Target/PowerPC/README.txt
@@ -6,6 +6,40 @@ TODO:
===-------------------------------------------------------------------------===
+We only produce the rlwnm instruction for rotate instructions. We should
+at least match stuff like:
+
+unsigned rot_and(unsigned X, int Y) {
+ unsigned T = (X << Y) | (X >> (32-Y));
+ T &= 127;
+ return T;
+}
+
+_foo3:
+ rlwnm r2, r3, r4, 0, 31
+ rlwinm r3, r2, 0, 25, 31
+ blr
+
+... which is the basic pattern that should be written in the instr. It may
+also be useful for stuff like:
+
+long long foo2(long long X, int C) {
+ return X << (C&~32);
+}
+
+which currently produces:
+
+_foo2:
+ rlwinm r2, r5, 0, 27, 25
+ subfic r5, r2, 32
+ slw r3, r3, r2
+ srw r5, r4, r5
+ or r3, r3, r5
+ slw r4, r4, r2
+ blr
+
+===-------------------------------------------------------------------------===
+
Support 'update' load/store instructions. These are cracked on the G5, but are
still a codesize win.
OpenPOWER on IntegriCloud