Add a note
authorAnton Korobeynikov <asl@math.spbu.ru>
Mon, 26 Jul 2010 21:48:35 +0000 (21:48 +0000)
committerAnton Korobeynikov <asl@math.spbu.ru>
Mon, 26 Jul 2010 21:48:35 +0000 (21:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109448 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/README.txt

index ba4e5da5a05f881c023d928c7ece1801cd72015a..c31f22766af85908c639ac20888c6fc3470556fd 100644 (file)
@@ -636,3 +636,24 @@ A custom Thumb version would also be a slight improvement over the generic
 version.
 
 //===---------------------------------------------------------------------===//
+
+Consider the following simple C code:
+
+void foo(unsigned char *a, unsigned char *b, int *c) {
+ if ((*a | *b) == 0) *c = 0;
+}
+
+currently llvm-gcc generates something like this (nice branchless code I'd say):
+
+       ldrb    r0, [r0]
+       ldrb    r1, [r1]
+       orr     r0, r1, r0
+       tst     r0, #255
+       moveq   r0, #0
+       streq   r0, [r2]
+       bx      lr
+
+Note that both "tst" and "moveq" are redundant.
+
+//===---------------------------------------------------------------------===//
+