| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
and create separate decl nodes for forward declarations and the
definition," which appears to be causing significant Objective-C
breakage.
llvm-svn: 110803
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
float t1(int argc) {
return (argc == 1123) ? 1.234f : 2.38213f;
}
We would generate truly awful code on ARM (those with a weak stomach should look
away):
_t1:
movw r1, #1123
movs r2, #1
movs r3, #0
cmp r0, r1
mov.w r0, #0
it eq
moveq r0, r2
movs r1, #4
cmp r0, #0
it ne
movne r3, r1
adr r0, #LCPI1_0
ldr r0, [r0, r3]
bx lr
The problem was that legalization was creating a cascade of SELECT_CC nodes, for
for the comparison of "argc == 1123" which was fed into a SELECT node for the ?:
statement which was itself converted to a SELECT_CC node. This is because the
ARM back-end doesn't have custom lowering for SELECT nodes, so it used the
default "Expand".
I added a fairly simple "LowerSELECT" to the ARM back-end. It takes care of this
testcase, but can obviously be expanded to include more cases.
Now we generate this, which looks optimal to me:
_t1:
movw r1, #1123
movs r2, #0
cmp r0, r1
adr r0, #LCPI0_0
it eq
moveq r2, #4
ldr r0, [r0, r2]
bx lr
.align 2
LCPI0_0:
.long 1075344593 @ float 2.382130e+00
.long 1067316150 @ float 1.234000e+00
llvm-svn: 110799
|
| |
|
|
|
|
| |
support it. e.g. cortex-m* processors.
llvm-svn: 110798
|
| |
|
|
| |
llvm-svn: 110797
|
| |
|
|
| |
llvm-svn: 110796
|
| |
|
|
| |
llvm-svn: 110795
|
| |
|
|
|
|
| |
mnemonic into a separate operand form.
llvm-svn: 110794
|
| |
|
|
| |
llvm-svn: 110793
|
| |
|
|
| |
llvm-svn: 110792
|
| |
|
|
|
|
| |
representation before matching.
llvm-svn: 110791
|
| |
|
|
| |
llvm-svn: 110790
|
| |
|
|
| |
llvm-svn: 110789
|
| |
|
|
| |
llvm-svn: 110788
|
| |
|
|
| |
llvm-svn: 110787
|
| |
|
|
|
|
| |
instructions: dmb, dsb, isb, msr, and mrs.
llvm-svn: 110786
|
| |
|
|
|
|
|
|
|
| |
memory and synchronization barrier dmb and dsb instructions.
- Change instruction names to something more sensible (matching name of actual
instructions).
- Added tests for memory barrier codegen.
llvm-svn: 110785
|
| |
|
|
| |
llvm-svn: 110784
|
| |
|
|
|
|
| |
implementations.
llvm-svn: 110783
|
| |
|
|
| |
llvm-svn: 110782
|
| |
|
|
|
|
|
| |
for some reason they have a very odd MCInst form where the operands overlap, but
I haven't dug in to find out why yet.
llvm-svn: 110781
|
| |
|
|
| |
llvm-svn: 110780
|
| |
|
|
|
|
| |
warning, for now.
llvm-svn: 110779
|
| |
|
|
| |
llvm-svn: 110778
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
expression parser. It is now possible to type:
(lldb) expr int $i = 5; $i + 1
(int) 6
(lldb) expr $i + 2
(int) 7
The skeleton for automatic result variables is
also implemented. The changes affect:
- the process, which now contains a
ClangPersistentVariables object that holds
persistent variables associated with it
- the expression parser, which now uses
the persistent variables during variable
lookup
- TaggedASTType, where I loaded some commonly
used tags into a header so that they are
interchangeable between different clients of
the class
llvm-svn: 110777
|
| |
|
|
| |
llvm-svn: 110776
|
| |
|
|
|
|
|
| |
- We don't recognize double or NEON register names yet -- we don't have the
infrastructure to generate the right clobbers for them.
llvm-svn: 110775
|
| |
|
|
| |
llvm-svn: 110774
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
implicit conversion sequences. In particular, model the "standard
conversion" from a class to its own type (or a base type) directly as
a standard conversion in the normal path *without* trying to determine
if there is a valid copy constructor. This appears to match the intent
of C++ [over.best.ics]p6 and more closely matches GCC and EDG.
As part of this, model non-lvalue reference initialization via
user-defined conversion in overloading the same way we handle it in
InitializationSequence, separating the "general user-defined
conversion" and "conversion to compatible class type" cases.
The churn in the overload-call-copycon.cpp test case is because the
test case was originally wrong; it assumed that we should do more
checking for copy constructors that we actually should, which affected
overload resolution.
Fixes PR7055. Bootstrapped okay.
llvm-svn: 110773
|
| |
|
|
|
|
| |
__builtin_shufflevector for those
llvm-svn: 110772
|
| |
|
|
|
|
| |
__builtin_shufflevector with the appropriate arguments
llvm-svn: 110771
|
| |
|
|
| |
llvm-svn: 110770
|
| |
|
|
|
|
| |
__builtin_shufflevector for those
llvm-svn: 110769
|
| |
|
|
|
|
| |
__builtin_shufflevector with the appropriate arguments
llvm-svn: 110768
|
| |
|
|
|
|
| |
__builtin_shufflevector for those
llvm-svn: 110767
|
| |
|
|
|
|
| |
__builtin_shufflevector with the appropriate arguments
llvm-svn: 110766
|
| |
|
|
| |
llvm-svn: 110765
|
| |
|
|
| |
llvm-svn: 110764
|
| |
|
|
| |
llvm-svn: 110763
|
| |
|
|
| |
llvm-svn: 110762
|
| |
|
|
| |
llvm-svn: 110761
|
| |
|
|
|
|
|
|
|
| |
where we weren't accounting for the possibility that a @finally block might
have internal cleanups and therefore might write to the cleanup destination slot.
Fixes <rdar://problem/8293901>.
llvm-svn: 110760
|
| |
|
|
| |
llvm-svn: 110759
|
| |
|
|
|
|
|
| |
make any assumptions about when the two conditions will agree on when
to permit the loop to exit. This fixes PR7845.
llvm-svn: 110758
|
| |
|
|
|
|
|
|
| |
from inline assembly, except in cases where they had already been seen (in which
case they would get added twice).
- I can't see how this ever worked...
llvm-svn: 110757
|
| |
|
|
| |
llvm-svn: 110756
|
| |
|
|
|
|
| |
visited a block too many times along a given path. This is to support the unreachable code analysis.
llvm-svn: 110755
|
| |
|
|
|
|
|
|
|
| |
(I discovered 2 more copies of the ARM instruction format list, bringing the
total to 4!! Two of them were already out of sync. I haven't yet gotten into
the disassembler enough to know the best way to fix this, but something needs
to be done.) Add support for encoding these instructions.
llvm-svn: 110754
|
| |
|
|
|
|
|
|
| |
llvm-config.h are included.
This is the cmake counterpart of r110547. See bug #7809.
llvm-svn: 110753
|
| |
|
|
| |
llvm-svn: 110752
|
| |
|
|
| |
llvm-svn: 110751
|