aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-12-05 23:05:06 +0000
committerChris Lattner <sabre@nondot.org>2007-12-05 23:05:06 +0000
commit81f2d71d52f522ae29010aecdfc435162f1da8a4 (patch)
tree3a1d9618674eb0f8786e14d8a5e95abdf8d8601d
parent7d13015e3254a78dfc972b5722855fa8ac9062d7 (diff)
downloadexternal_llvm-81f2d71d52f522ae29010aecdfc435162f1da8a4.zip
external_llvm-81f2d71d52f522ae29010aecdfc435162f1da8a4.tar.gz
external_llvm-81f2d71d52f522ae29010aecdfc435162f1da8a4.tar.bz2
add a note
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44638 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/README.txt37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/Target/README.txt b/lib/Target/README.txt
index 2db7e64..008271e 100644
--- a/lib/Target/README.txt
+++ b/lib/Target/README.txt
@@ -463,5 +463,42 @@ entry:
ret int %tmp3
}
+//===---------------------------------------------------------------------===//
+on this code:
+
+unsigned array[4];
+unsigned foo(unsigned long x) {
+ return array[(x>>2)&3ul];
+}
+
+we should dag combine the left+right shift together. We currently get:
+
+_foo:
+ movl 4(%esp), %eax
+ shrl $2, %eax
+ andl $3, %eax
+ movl _array(,%eax,4), %eax
+ ret
+similar on ppc:
+_foo:
+ lis r2, ha16(_array)
+ srwi r3, r3, 2
+ la r2, lo16(_array)(r2)
+ rlwinm r3, r3, 2, 28, 29
+ lwzx r3, r2, r3
+ blr
+
+similar on arm:
+
+_foo:
+ mov r3, #3
+ and r3, r3, r0, lsr #2
+ ldr r2, LCPI1_0
+ ldr r0, [r2, +r3, lsl #2]
+ bx lr
+
+this is a trivial dag combine xform.
+
+//===---------------------------------------------------------------------===//