| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 73394
|
| |
|
|
| |
llvm-svn: 73393
|
| |
|
|
|
|
| |
- p13 and p14 are important failures.
llvm-svn: 73392
|
| |
|
|
| |
llvm-svn: 73391
|
| |
|
|
|
|
| |
its (possibly-remapped) diagnostics. Thanks, Chris!
llvm-svn: 73390
|
| |
|
|
| |
llvm-svn: 73389
|
| |
|
|
|
|
|
| |
- Failing, at least in part, because lookup in parser is finding a friend
function where it shouldn't.
llvm-svn: 73388
|
| |
|
|
|
|
|
|
|
| |
incomming chain of the RETURN node. The incomming chain must
be the outgoing chain of the CALL node. This causes the
backend to identify tail calls that are not tail calls. This
patch fixes this.
llvm-svn: 73387
|
| |
|
|
| |
llvm-svn: 73386
|
| |
|
|
|
|
| |
generator!
llvm-svn: 73385
|
| |
|
|
|
|
|
|
| |
Look for as in the path. Doing it here instead
of llvm-gcc because llvm-gcc has nothing as
convenient as sys::Program::FindProgramByName.
llvm-svn: 73383
|
| |
|
|
|
|
|
| |
unnecessary, this was causing issues for assembler-with-cpp mode, which
doesn't process the directive.
llvm-svn: 73382
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Change register allocation hint to a pair of unsigned integers. The hint type is zero (which means prefer the register specified as second part of the pair) or entirely target dependent.
- Allow targets to specify alternative register allocation orders based on allocation hint.
Part 2.
- Use the register allocation hint system to implement more aggressive load / store multiple formation.
- Aggressively form LDRD / STRD. These are formed *before* register allocation. It has to be done this way to shorten live interval of base and offset registers. e.g.
v1025 = LDR v1024, 0
v1026 = LDR v1024, 0
=>
v1025,v1026 = LDRD v1024, 0
If this transformation isn't done before allocation, v1024 will overlap v1025 which means it more difficult to allocate a register pair.
- Even with the register allocation hint, it may not be possible to get the desired allocation. In that case, the post-allocation load / store multiple pass must fix the ldrd / strd instructions. They can either become ldm / stm instructions or back to a pair of ldr / str instructions.
This is work in progress, not yet enabled.
llvm-svn: 73381
|
| |
|
|
| |
llvm-svn: 73380
|
| |
|
|
|
|
|
|
| |
windows."
Patch by Benjamin Kramer!
llvm-svn: 73379
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ranges more similar to the console output. Consider:
#define FOO(X, Y) X/ Y
void foo(int *P, int *Q) {
FOO(P, Q);
}
Before we emitted:
t.c:4:3:{4:3-4:6}{4:3-4:6}: error: invalid operands to binary expression ('int *' and 'int *')
FOO(P, Q);
^~~~~~~~~
...
Note that while we underline the macro args that the range info just includes FOO
without its macros. This change teaches the printed ranges to include macro args
also so that we get:
t.c:4:3:{4:3-4:12}{4:3-4:12}: error: invalid operands to binary expression ('int *' and 'int *')
FOO(P, Q);
^~~~~~~~~
...
This fixes rdar://6939599
llvm-svn: 73378
|
| |
|
|
|
|
|
| |
the file at the point of the pragma. This allows clang to know that all
sourcelocations after the pragma are in a system header.
llvm-svn: 73376
|
| |
|
|
| |
llvm-svn: 73375
|
| |
|
|
| |
llvm-svn: 73374
|
| |
|
|
| |
llvm-svn: 73373
|
| |
|
|
| |
llvm-svn: 73372
|
| |
|
|
|
|
|
|
| |
like:
fatal error: could not find file '1.h' referenced by PCH file
instead of aborting with an assertion failure, PR4219
llvm-svn: 73371
|
| |
|
|
|
|
| |
Curfman!
llvm-svn: 73370
|
| |
|
|
| |
llvm-svn: 73369
|
| |
|
|
|
|
| |
absolute or not, based on a patch by Gregory Curfman!
llvm-svn: 73368
|
| |
|
|
| |
llvm-svn: 73367
|
| |
|
|
| |
llvm-svn: 73366
|
| |
|
|
|
|
| |
can occur in the middle of comment tokens.
llvm-svn: 73365
|
| |
|
|
|
|
|
|
| |
corresponding reference to this symbol for every compilation unit that references the class. This causes linker errors when you try linking a program which references some classes but doesn't define them. The attached patch implements this support in clang, so you can compile a class with clang, reference it in a file compiled with GCC, and have it all work correctly."
Patch by David Chisnall!
llvm-svn: 73364
|
| |
|
|
| |
llvm-svn: 73362
|
| |
|
|
|
|
|
|
|
|
| |
they contain multiplications of constants with add operations.
This helps simplify several kinds of things; in particular it
helps simplify expressions like ((-1 * (%a + %b)) + %a) to %b,
as expressions like this often come up in loop trip count
computations.
llvm-svn: 73361
|
| |
|
|
|
|
| |
used as keys in DenseMaps.
llvm-svn: 73360
|
| |
|
|
|
|
| |
the potentially expensive erase.
llvm-svn: 73359
|
| |
|
|
|
|
|
|
| |
even though the order doesn't matter at the top level of an expression,
it does matter when the constant is a subexpression of an n-ary
expression, because n-ary expressions are sorted lexicographically.
llvm-svn: 73358
|
| |
|
|
|
|
| |
SmallVector instead of std::vector.
llvm-svn: 73357
|
| |
|
|
|
|
| |
like "int x = + +3;".
llvm-svn: 73356
|
| |
|
|
| |
llvm-svn: 73355
|
| |
|
|
| |
llvm-svn: 73353
|
| |
|
|
|
|
| |
static intializers for structs.
llvm-svn: 73349
|
| |
|
|
|
|
| |
MachineRegisterInfo. This allows more passes to set them.
llvm-svn: 73346
|
| |
|
|
|
|
| |
Patch by Jean-Daniel Dupas
llvm-svn: 73343
|
| |
|
|
| |
llvm-svn: 73342
|
| |
|
|
| |
llvm-svn: 73341
|
| |
|
|
|
|
|
|
|
|
| |
is that, for functions whose bodies are entirely guarded by an if-statement, it
can be profitable to pull the test out of the callee and into the caller.
This code has had some cursory testing, but still has a number of known issues
on the LLVM test suite.
llvm-svn: 73338
|
| |
|
|
|
|
|
|
|
|
| |
that were suppressed due to SFINAE. By checking whether any errors
occur at the end of template argument deduction, we avoid the
possibility of suppressing an error (due to SFINAE) and then
recovering so well that template argument deduction never detects that
there was a problem. Thanks to Eli for the push in this direction.
llvm-svn: 73336
|
| |
|
|
|
|
| |
BinaryObject.h by Aaron Gray
llvm-svn: 73333
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Implement support for C++ Substitution Failure Is Not An Error
(SFINAE), which says that errors that occur during template argument
deduction do *not* produce diagnostics and do not necessarily make a
program ill-formed. Instead, template argument deduction silently
fails. This is currently implemented for template argument deduction
during matching of class template partial specializations, although
the mechanism will also apply to template argument deduction for
function templates. The scheme is simple:
- If we are in a template argument deduction context, any diagnostic
that is considered a SFINAE error (or warning) will be
suppressed. The error will be propagated up the call stack via the
normal means.
- By default, all warnings and errors are SFINAE errors. Add the
NoSFINAE class to a diagnostic in the .td file to make it a hard
error (e.g., for access-control violations).
Note that, to make this fully work, every place in Sema that emits an
error *and then immediately recovers* will need to check
Sema::isSFINAEContext() to determine whether it must immediately
return an error rather than recovering.
llvm-svn: 73332
|
| |
|
|
| |
llvm-svn: 73331
|
| |
|
|
| |
llvm-svn: 73323
|
| |
|
|
|
|
| |
foo has a constant address.
llvm-svn: 73321
|