| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 184446
|
| |
|
|
|
|
|
| |
We collect gather sequences when we vectorize basic blocks. Gather sequences are excellent
hints for vectorization of other basic blocks.
llvm-svn: 184444
|
| |
|
|
|
|
| |
This change makes it easier to filter debug messages.
llvm-svn: 184440
|
| |
|
|
|
|
|
|
| |
APFloat::isFiniteNonZero.
Turns out all the references were in llvm and not in clang.
llvm-svn: 184356
|
| |
|
|
|
|
| |
caching it. The TLI may change between functions. No functionality change.
llvm-svn: 184352
|
| |
|
|
|
|
| |
Register it with PassManager
llvm-svn: 184343
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Prior to this change, the considered addressing modes may be invalid since the
maximum and minimum offsets were not taking into account.
This was causing an assertion failure.
The added test case exercices that behavior.
<rdar://problem/14199725> Assertion failed: (CurScaleCost >= 0 && "Legal
addressing mode has an illegal cost!")
llvm-svn: 184341
|
| |
|
|
|
|
| |
ExtractElementInst).
llvm-svn: 184325
|
| |
|
|
|
|
|
|
| |
The type <3 x i8> is a common in graphics and we want to be able to vectorize it.
This changes accelerates bullet by 12% and 471_omnetpp by 5%.
llvm-svn: 184317
|
| |
|
|
| |
llvm-svn: 184282
|
| |
|
|
| |
llvm-svn: 184281
|
| |
|
|
|
|
| |
roots.
llvm-svn: 184201
|
| |
|
|
| |
llvm-svn: 184200
|
| |
|
|
| |
llvm-svn: 184174
|
| |
|
|
|
|
|
| |
vectorizing loops with memory accesses to non-zero address spaces. It
simply dropped the AS info. Fixes PR16306.
llvm-svn: 184103
|
| |
|
|
| |
llvm-svn: 184089
|
| |
|
|
| |
llvm-svn: 184084
|
| |
|
|
| |
llvm-svn: 184044
|
| |
|
|
| |
llvm-svn: 184041
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This pass was assuming that if hasAddressTaken() returns false for a
function, the function's only uses are call sites. That's not true
because there can be references by BlockAddresses too.
Fix the pass to handle this case. Fix
BlockAddress::replaceUsesOfWithOnConstant() to allow a function's type
to be changed by RAUW'ing the function with a bitcast of the recreated
function.
Patch by Mark Seaborn.
llvm-svn: 183933
|
| |
|
|
|
|
| |
Should fix the dragonegg build bots.
llvm-svn: 183845
|
| |
|
|
|
|
|
| |
Most clients have already been moved from Path V1 to V2. The ones using V1
now include PathV1.h explicitly.
llvm-svn: 183801
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instead of a custom implementation of replaceAllUsesWith, we just call
replaceAllUsesWith and recreate llvm.used and llvm.compiler-used.
This change is particularity interesting because it makes llvm see
through what clang is doing with static used functions in extern "C"
contexts. With this change, running clang -O2 in
extern "C" {
__attribute__((used)) static void foo() {}
}
produces
@llvm.used = appending global [1 x i8*] [i8* bitcast (void ()* @foo to
i8*)], section "llvm.metadata"
define internal void @foo() #0 {
entry:
ret void
}
llvm-svn: 183756
|
| |
|
|
|
|
|
| |
Variadic functions are particularly fragile in the face of ABI changes, so this
limits how much the pass changes them
llvm-svn: 183625
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
r183584 tries to derive some info from the code *AFTER* a call and apply
these derived info to the code *BEFORE* the call, which is not always safe
as the call in question may never return, and in this case, the derived
info is invalid.
Thank Duncan for pointing out this potential bug.
rdar://14073661
llvm-svn: 183606
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The MemCpyOpt pass is capable of optimizing:
callee(&S); copy N bytes from S to D.
into:
callee(&D);
subject to some legality constraints.
Assertion is triggered when the compiler tries to evalute "sizeof(typeof(D))",
while D is an opaque-typed, 'sret' formal argument of function being compiled.
i.e. the signature of the func being compiled is something like this:
T caller(...,%opaque* noalias nocapture sret %D, ...)
The fix is that when come across such situation, instead of calling some
utility functions to get the size of D's type (which will crash), we simply
assume D has at least N bytes as implified by the copy-instruction.
rdar://14073661
llvm-svn: 183584
|
| |
|
|
|
|
|
|
| |
TopDownPathCount/BottomUpPathCount.
rdar://12480535
llvm-svn: 183489
|
| |
|
|
| |
llvm-svn: 183461
|
| |
|
|
|
|
| |
compiling chrome. This patch adds a new flag to enable vectorization on all levels and not only on -O3. It should go away once we make a decision.
llvm-svn: 183456
|
| |
|
|
| |
llvm-svn: 183439
|
| |
|
|
|
|
|
|
| |
little bit."
This reverts commit 183328. It caused pr16244 and broke the bots.
llvm-svn: 183422
|
| |
|
|
| |
llvm-svn: 183363
|
| |
|
|
| |
llvm-svn: 183360
|
| |
|
|
| |
llvm-svn: 183328
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
IndVarSimplify is willing to move divide instructions outside of their
loop bodies if they are invariant of the loop. However, it may not be
safe to expand them if we do not know if they can trap.
Instead, check to see if it is not safe to expand the instruction and
skip the expansion.
This fixes PR16041.
Testcase by Rafael Ávila de Espíndola.
llvm-svn: 183239
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The problem this time seems to be a thinko. We were assuming that in the CFG
A
| \
| B
| /
C
speculating the basic block B would cause only the phi value for the B->C edge
to be speculated. That is not true, the phi's are semantically in the edges, so
if the A->B->C path is taken, any code needed for A->C is not executed and we
have to consider it too when deciding to speculate B.
llvm-svn: 183226
|
| |
|
|
| |
llvm-svn: 183219
|
| |
|
|
| |
llvm-svn: 183167
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
PR16069 is an interesting case where an incoming value to a PHI is a
trap value while also being a 'ConstantExpr'.
We do not consider this case when performing the 'HoistThenElseCodeToIf'
optimization.
Instead, make our modifications more conservative if we detect that we
cannot transform the PHI to a select.
llvm-svn: 183152
|
| |
|
|
| |
llvm-svn: 183151
|
| |
|
|
| |
llvm-svn: 183104
|
| |
|
|
|
|
|
|
|
|
| |
index greater than the size of the vector is invalid. The shuffle may be
shrinking the size of the vector. Fixes a crash!
Also drop the maximum recursion depth of the safety check for this
optimization to five.
llvm-svn: 183080
|
| |
|
|
| |
llvm-svn: 183078
|
| |
|
|
|
|
| |
Also simplify code a bit while there. No functionality change.
llvm-svn: 183076
|
| |
|
|
|
|
|
|
|
|
| |
Use ScalarEvolution's getBackedgeTakenCount API instead of getExitCount since
that is really what we want to know. Using the more specific getExitCount was
safe because we made sure that there is only one exiting block.
No functionality change.
llvm-svn: 183047
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Account for the cost of scaling factor in Loop Strength Reduce when rating the
formulae. This uses a target hook.
The default implementation of the hook is: if the addressing mode is legal, the
scaling factor is free.
<rdar://problem/13806271>
llvm-svn: 183045
|
| |
|
|
|
|
|
|
|
|
| |
We check that instructions in the loop don't have outside users (except if
they are reduction values). Unfortunately, we skipped this check for
if-convertable PHIs.
Fixes PR16184.
llvm-svn: 183035
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Namely, check if the target allows to fold more that one register in the
addressing mode and if yes, adjust the cost accordingly.
Prior to this commit, reg1 + scale * reg2 accesses were artificially preferred
to reg1 + reg2 accesses. Indeed, the cost model wrongly assumed that reg1 + reg2
needs a temporary register for the computation, whereas it was correctly
estimated for reg1 + scale * reg2.
<rdar://problem/13973908>
llvm-svn: 183021
|
| |
|
|
|
|
| |
Patch by Andrea Di Biagio.
llvm-svn: 183005
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Before this change, each module defined a weak_odr global __msan_track_origins
with a value of 1 if origin tracking is enabled, 0 if disabled. If there are
modules with different values, any of them may win. If 0 wins, and there is at
least one module with 1, the program will most likely crash.
With this change, __msan_track_origins is only emitted if origin tracking is
on. Then runtime library detects if there is at least one module with origin
tracking, and enables runtime support for it.
llvm-svn: 182997
|