summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@apple.com>2011-03-03 06:39:09 +0000
committerBob Wilson <bob.wilson@apple.com>2011-03-03 06:39:09 +0000
commitab8881accd147ff3a3d699df278664e90d467bb4 (patch)
treec7d3c95f7d4154fff05c7d50901816f682a4f7eb /llvm/lib
parentbfdbc1155473af599081880289036def7f92e32a (diff)
downloadbcm5719-llvm-ab8881accd147ff3a3d699df278664e90d467bb4.tar.gz
bcm5719-llvm-ab8881accd147ff3a3d699df278664e90d467bb4.zip
Add a readme entry for the redundant movw issue for pr9370.
llvm-svn: 126930
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/ARM/README.txt24
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/README.txt b/llvm/lib/Target/ARM/README.txt
index 9fc3fb92cb2..8ba9a27e95c 100644
--- a/llvm/lib/Target/ARM/README.txt
+++ b/llvm/lib/Target/ARM/README.txt
@@ -657,3 +657,27 @@ Note that both "tst" and "moveq" are redundant.
//===---------------------------------------------------------------------===//
+When loading immediate constants with movt/movw, if there are multiple
+constants needed with the same low 16 bits, and those values are not live at
+the same time, it would be possible to use a single movw instruction, followed
+by multiple movt instructions to rewrite the high bits to different values.
+For example:
+
+ volatile store i32 -1, i32* inttoptr (i32 1342210076 to i32*), align 4,
+ !tbaa
+!0
+ volatile store i32 -1, i32* inttoptr (i32 1342341148 to i32*), align 4,
+ !tbaa
+!0
+
+is compiled and optimized to:
+
+ movw r0, #32796
+ mov.w r1, #-1
+ movt r0, #20480
+ str r1, [r0]
+ movw r0, #32796 @ <= this MOVW is not needed, value is there already
+ movt r0, #20482
+ str r1, [r0]
+
+//===---------------------------------------------------------------------===//
OpenPOWER on IntegriCloud