| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add patterns for h-register extract, which avoids a shift and mask,
and in some cases a temporary register.
- Add address-mode matching for turning (X>>(8-n))&(255<<n), where
n is a valid address-mode scale value, into an h-register extract
and a scaled-offset address.
- Replace X86's MOV32to32_ and related instructions with the new
target-independent COPY_TO_SUBREG instruction.
On x86-64 there are complicated constraints on h registers, and
CodeGen doesn't currently provide a high-level way to express all of them,
so they are handled with a bunch of special code. This code currently only
supports extracts where the result is used by a zero-extend or a store,
though these are fairly common.
These transformations are not always beneficial; since there are only
4 h registers, they sometimes require extra move instructions, and
this sometimes increases register pressure because it can force out
values that would otherwise be in one of those registers. However,
this appears to be relatively uncommon.
llvm-svn: 68962
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This will be used to replace things like X86's MOV32to32_.
Enhance ScheduleDAGSDNodesEmit to be more flexible and robust
in the presense of subregister superclasses and subclasses. It
can now cope with the definition of a virtual register being in
a subclass of a use.
Re-introduce the code for recording register superreg classes and
subreg classes. This is needed because when subreg extracts and
inserts get coalesced away, the virtual registers are left in
the correct subclass.
llvm-svn: 68961
|
| |
|
|
|
|
| |
separate Internals header. No functionality change
llvm-svn: 68960
|
| |
|
|
|
|
|
|
| |
ISD::SIGN_EXTEND_INREG. Tablegen-generated code can handle
these cases, and the scheduling issues observed earlier
appear to be resolved now.
llvm-svn: 68959
|
| |
|
|
| |
llvm-svn: 68958
|
| |
|
|
|
|
|
|
| |
in multiple classes in the case that the classes are all
in subset/superset relations. This function is used by the
fast-isel emitter, which always wants the super-most set.
llvm-svn: 68957
|
| |
|
|
|
|
| |
a live interval. This is needed for some upcoming subreg changes.
llvm-svn: 68956
|
| |
|
|
|
|
|
|
|
| |
the subreg field to 0, since the subreg field is only used
for virtual register subregs. This doesn't change
current functionality; it just eliminates bogus noise from
debug output.
llvm-svn: 68955
|
| |
|
|
| |
llvm-svn: 68954
|
| |
|
|
| |
llvm-svn: 68953
|
| |
|
|
|
|
|
| |
deterministic when faced with an ambiguity. This eliminates the
annoying test/SemaCXX/using-directive.cpp failure.
llvm-svn: 68952
|
| |
|
|
| |
llvm-svn: 68951
|
| |
|
|
| |
llvm-svn: 68950
|
| |
|
|
|
|
| |
and IMPLICIT_DEF.
llvm-svn: 68949
|
| |
|
|
|
|
| |
This unbreaks the JIT on x86-64.
llvm-svn: 68948
|
| |
|
|
| |
llvm-svn: 68947
|
| |
|
|
|
|
| |
getting passed. We couldn't catch this as we did not have tests that were passing an int value larger than 256.
llvm-svn: 68946
|
| |
|
|
| |
llvm-svn: 68945
|
| |
|
|
|
|
| |
declarations.
llvm-svn: 68944
|
| |
|
|
| |
llvm-svn: 68943
|
| |
|
|
| |
llvm-svn: 68942
|
| |
|
|
|
|
| |
in different address spaces.
llvm-svn: 68941
|
| |
|
|
|
|
|
|
| |
to support C99 inline, GNU extern inline, etc. Related bugzilla's
include PR3517, PR3100, & PR2933. Nothing uses this yet, but it
appears to work.
llvm-svn: 68940
|
| |
|
|
| |
llvm-svn: 68939
|
| |
|
|
| |
llvm-svn: 68938
|
| |
|
|
|
|
| |
interpreter mode" when it's not.
llvm-svn: 68937
|
| |
|
|
| |
llvm-svn: 68936
|
| |
|
|
| |
llvm-svn: 68935
|
| |
|
|
| |
llvm-svn: 68934
|
| |
|
|
| |
llvm-svn: 68933
|
| |
|
|
|
|
| |
PR3972: Poor diagnostic with missing ')'
llvm-svn: 68932
|
| |
|
|
|
|
| |
by making ASTContext::isObjCObjectPointerType accept typedefs of id.
llvm-svn: 68931
|
| |
|
|
| |
llvm-svn: 68930
|
| |
|
|
|
|
| |
patch by Alexei Svitkine!
llvm-svn: 68929
|
| |
|
|
| |
llvm-svn: 68928
|
| |
|
|
| |
llvm-svn: 68927
|
| |
|
|
| |
llvm-svn: 68926
|
| |
|
|
| |
llvm-svn: 68925
|
| |
|
|
|
|
| |
only if symbolic addresses are RIP relatives.
llvm-svn: 68924
|
| |
|
|
| |
llvm-svn: 68923
|
| |
|
|
| |
llvm-svn: 68922
|
| |
|
|
| |
llvm-svn: 68921
|
| |
|
|
|
|
| |
to isValidAfterIdentifierInDeclarator, as suggested by Sebastian.
llvm-svn: 68920
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
that I noticed working on other things.
Instead of emitting:
t2.cc:1:8: error: use of undeclared identifier 'g'
int x(*g);
^
t2.cc:1:10: error: expected ')'
int x(*g);
^
t2.cc:1:6: note: to match this '('
int x(*g);
^
We now only emit:
t2.cc:1:7: warning: type specifier missing, defaults to 'int'
int x(*g);
^
Note that the example in SemaCXX/nested-name-spec.cpp:f4 is still
not great, we now produce both of:
void f4(undef::C); // expected-error {{use of undeclared identifier 'undef'}} \
expected-error {{variable has incomplete type 'void'}}
The second diagnostic should be silenced by something getting marked invalid.
I don't plan to fix this though.
llvm-svn: 68919
|
| |
|
|
| |
llvm-svn: 68918
|
| |
|
|
|
|
| |
this allows downstream diags to be properly silenced.
llvm-svn: 68917
|
| |
|
|
|
|
| |
return null.
llvm-svn: 68916
|
| |
|
|
| |
llvm-svn: 68915
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
struct xyz { int y; };
enum abc { ZZZ };
static xyz b;
abc c;
we used to produce:
t2.c:4:8: error: unknown type name 'xyz'
static xyz b;
^
t2.c:5:1: error: unknown type name 'abc'
abc c;
^
we now produce:
t2.c:4:8: error: use of tagged type 'xyz' without 'struct' tag
static xyz b;
^
struct
t2.c:5:1: error: use of tagged type 'abc' without 'enum' tag
abc c;
^
enum
GCC produces the normal:
t2.c:4: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘b’
t2.c:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘c’
rdar://6783347
llvm-svn: 68914
|
| |
|
|
|
|
|
| |
if a decl is invalid, it isn't added to the Decls array, so we
need to pass in Decls.size() to avoid reading uninit memory.
llvm-svn: 68913
|