| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
| |
it is only a partial fix. This change is noise for most programs, but
speeds up Shootout-C++/matrix by 20%, Ptrdist/ks by 24%, smg2000 by 8%,
hexxagon by 9%, bzip2 by 9% (not sure I trust this), ackerman by 13%, etc.
OTOH, it slows down Shootout/fib2 by 40% (I'll update PR1877 with this info).
llvm-svn: 45354
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
define void @f() {
...
call i32 @g()
...
}
define void @g() {
...
}
The hazards are:
- @f and @g have GC, but they differ GC. Inlining is invalid. This
may never occur.
- @f has no GC, but @g does. g's GC must be propagated to @f.
The other scenarios are safe:
- @f and @g have the same GC.
- @f and @g have no GC.
- @g has no GC.
This patch adds inliner checks for the former two scenarios.
llvm-svn: 45351
|
|
|
|
|
|
|
|
|
| |
function with GC.
This will catch the error when the inliner inlines a function with
GC into a caller with no GC.
llvm-svn: 45350
|
|
|
|
|
|
| |
LangRef.
llvm-svn: 45349
|
|
|
|
| |
llvm-svn: 45347
|
|
|
|
|
|
|
| |
When specified, don't split backedges of single-bb loops.
This helps address PR1877
llvm-svn: 45344
|
|
|
|
| |
llvm-svn: 45343
|
|
|
|
| |
llvm-svn: 45342
|
|
|
|
|
|
|
| |
providing a misleading facility. It's used once in the MIPS backend
and hardcoded as "\t.globl\t" everywhere else.
llvm-svn: 45338
|
|
|
|
| |
llvm-svn: 45335
|
|
|
|
| |
llvm-svn: 45334
|
|
|
|
| |
llvm-svn: 45325
|
|
|
|
| |
llvm-svn: 45324
|
|
|
|
|
|
| |
legalizer support goes in.
llvm-svn: 45323
|
|
|
|
| |
llvm-svn: 45322
|
|
|
|
|
|
| |
or after legalize.
llvm-svn: 45321
|
|
|
|
|
|
| |
targets.
llvm-svn: 45320
|
|
|
|
| |
llvm-svn: 45319
|
|
|
|
| |
llvm-svn: 45318
|
|
|
|
|
|
|
| |
fixes a bug with indirect calls. (Test case will be included with
ocaml collector patch.)
llvm-svn: 45316
|
|
|
|
| |
llvm-svn: 45314
|
|
|
|
| |
llvm-svn: 45313
|
|
|
|
| |
llvm-svn: 45312
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
us to compile:
#include <math.h>
int t1(double d) { return signbit(d); }
into:
_t1:
movd %xmm0, %rax
shrq $63, %rax
ret
instead of:
_t1:
movd %xmm0, %rax
shrq $32, %rax
shrl $31, %eax
ret
on x86-64.
llvm-svn: 45311
|
|
|
|
| |
llvm-svn: 45310
|
|
|
|
|
|
| |
careful when inserting copies.
llvm-svn: 45309
|
|
|
|
| |
llvm-svn: 45307
|
|
|
|
|
|
|
| |
not merge current bb and succ even if bb's terminator is
unconditional branch to succ.
llvm-svn: 45305
|
|
|
|
| |
llvm-svn: 45304
|
|
|
|
| |
llvm-svn: 45300
|
|
|
|
|
|
| |
of this patch is the last line).
llvm-svn: 45289
|
|
|
|
|
|
|
|
|
|
| |
as on functions. Make it verify invokes and not just
ordinary calls. As a (desired) side-effect, it is no
longer legal to have call attributes on arguments that
are being passed to the varargs part of a varargs
function (llvm-as drops them on the floor anyway).
llvm-svn: 45286
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
return attributes on the floor. In the case of a call
to a varargs function where the varargs arguments are
being removed, any call attributes on those arguments
need to be dropped. I didn't do this because I plan to
make it illegal to have such attributes (see next patch).
With this change, compiling the gcc filter2 eh test at -O0
and then running opt -std-compile-opts on it results in
a correctly working program (compiling at -O1 or higher
results in the test failing due to a problem with how we
output eh info into the IR).
llvm-svn: 45285
|
|
|
|
| |
llvm-svn: 45282
|
|
|
|
| |
llvm-svn: 45281
|
|
|
|
| |
llvm-svn: 45280
|
|
|
|
| |
llvm-svn: 45268
|
|
|
|
| |
llvm-svn: 45259
|
|
|
|
|
|
|
|
|
| |
(icmp slt (sub A B) 1) -> (icmp sle A B)
icmp sgt (sub A B) -1) -> (icmp sge A B)
and add testcase.
llvm-svn: 45256
|
|
|
|
|
|
| |
strict.
llvm-svn: 45253
|
|
|
|
| |
llvm-svn: 45252
|
|
|
|
|
|
| |
uses are addresses. This trades a constant multiply for one fewer iv.
llvm-svn: 45251
|
|
|
|
|
|
| |
has a single use, and generalize it to not require N to be a constant.
llvm-svn: 45250
|
|
|
|
| |
llvm-svn: 45245
|
|
|
|
|
|
|
| |
- vec_const.ll: Vector constant loads
- immed64.ll: i64, f64 constant loads
llvm-svn: 45242
|
|
|
|
| |
llvm-svn: 45230
|
|
|
|
|
|
| |
to exceptions rather than variants for error handling in Ocaml.
llvm-svn: 45226
|
|
|
|
|
|
|
|
|
|
|
|
| |
are a couple of issues that show up with the optimizer,
but I don't think they're really EH problems.
(llvm-gcc testsuite users note: By default the testsuite
uses the unwinding code that's built as part of your local
llvm-gcc, which does not work. You need to trick it into
using the installed system unwinding code to get useful
results.)
llvm-svn: 45221
|
|
|
|
| |
llvm-svn: 45219
|
|
|
|
|
|
|
|
|
| |
calls 'nounwind'. It is important for correct C++
exception handling that nounwind markings do not get
lost, so this transformation is actually needed for
correctness.
llvm-svn: 45218
|