From 25a6ab0144f5e206729cb38da654c256d1672aac Mon Sep 17 00:00:00 2001 From: Anton Korobeynikov Date: Mon, 26 Jul 2010 21:48:35 +0000 Subject: [PATCH] Add a note git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109448 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/README.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/Target/ARM/README.txt b/lib/Target/ARM/README.txt index ba4e5da5a05..c31f22766af 100644 --- a/lib/Target/ARM/README.txt +++ b/lib/Target/ARM/README.txt @@ -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. + +//===---------------------------------------------------------------------===// +