| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
| |
Fixes a 35% degradation compared to unvectorized code in
MiBench/automotive-susan and an equally serious regression on a private
image processing benchmark.
radar://14351991
llvm-svn: 186188
|
| |
|
|
|
|
|
|
|
|
|
| |
Address calculation for gather/scather in vectorized code can incur a
significant cost making vectorization unbeneficial. Add infrastructure to add
cost.
Tests and cost model for targets will be in follow-up commits.
radar://14351991
llvm-svn: 186187
|
| |
|
|
| |
llvm-svn: 186186
|
| |
|
|
| |
llvm-svn: 186184
|
| |
|
|
| |
llvm-svn: 186183
|
| |
|
|
|
|
|
| |
Patch by: Niels Ole Salscheider
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
llvm-svn: 186182
|
| |
|
|
|
|
|
| |
Patch by: Niels Ole Salscheider
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
llvm-svn: 186181
|
| |
|
|
|
|
|
| |
Patch by: Niels Ole Salscheider
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
llvm-svn: 186180
|
| |
|
|
|
|
|
| |
Patch by: Niels Ole Salscheider
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
llvm-svn: 186179
|
| |
|
|
|
|
|
| |
Patch by: Niels Ole Salscheider
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
llvm-svn: 186178
|
| |
|
|
|
|
|
| |
Patch by: Niels Ole Salscheider
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
llvm-svn: 186177
|
| |
|
|
| |
llvm-svn: 186176
|
| |
|
|
|
|
|
| |
This is a generic block implementation that works on more than machine blocks.
The C++ mode addition is a bonus due to the extra space provided.
llvm-svn: 186175
|
| |
|
|
|
|
|
|
|
|
|
|
| |
In particular:
movsbw %al, %ax --> cbtw
movswl %ax, %eax --> cwtl
movslq %eax, %rax --> cltq
According to Intel's manual those have the same performance characteristics but
come with a smaller encoding.
llvm-svn: 186174
|
| |
|
|
| |
llvm-svn: 186170
|
| |
|
|
|
|
|
|
| |
possible
Patch by Andrea Di Biagio
llvm-svn: 186165
|
| |
|
|
| |
llvm-svn: 186163
|
| |
|
|
|
|
|
|
| |
CHECK-LABEL is meant to be used in place on CHECK on lines containing identifiers or other unique labels (they need not actually be labels in the source or output language, though.) This is used to break up the input stream into separate blocks delineated by CHECK-LABEL lines, each of which is checked independently. This greatly improves the accuracy of errors and fix-it hints in many cases, and allows for FileCheck to recover from errors in one block by continuing to subsequent blocks.
Some tests will be converted to use this new directive in forthcoming patches.
llvm-svn: 186162
|
| |
|
|
| |
llvm-svn: 186159
|
| |
|
|
|
|
| |
We can't inline it but we can still CSE calls to it.
llvm-svn: 186156
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
against a constant."
This reverts commit r186107. It didn't handle wrapping arithmetic in the
loop correctly and thus caused the following C program to count from
0 to UINT64_MAX instead of from 0 to 255 as intended:
#include <stdio.h>
int main() {
unsigned char first = 0, last = 255;
do { printf("%d\n", first); } while (first++ != last);
}
Full test case and instructions to reproduce with just the -indvars pass
sent to the original review thread rather than to r186107's commit.
llvm-svn: 186152
|
| |
|
|
|
|
| |
cases are added.
llvm-svn: 186151
|
| |
|
|
|
|
| |
Sigh, twice in two days sorry. One day I'll remember...
llvm-svn: 186150
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Normal (sext (setcc ...)) sequences are optimised into
(select_cc ..., -1, 0) by DAGCombiner::visitSIGN_EXTEND.
However, this is deliberately not done for vectors, and after
vector type legalization we have (sext_inreg (setcc ...)) instead.
I wondered about trying to extend DAGCombiner to handle this case too,
but it seemed to be a loss on some other targets I tried, even those for
which SETCC isn't "legal" and SELECT_CC is.
llvm-svn: 186149
|
| |
|
|
|
|
|
|
|
|
|
|
| |
GPR and FPR constraints like "{r2}" and "{f2}" weren't handled correctly
because the name-to-regno mapping depends on the value type and
(because of that) the internal names in RegStrings are not the
same as the AsmName.
CC constraints like "{cc}" didn't work either because there was no
associated register class.
llvm-svn: 186148
|
| |
|
|
|
|
|
| |
If the source of these instructions is spilled we should load the destination.
If the destination is spilled we should store the source.
llvm-svn: 186147
|
| |
|
|
|
|
| |
Thank Nick for figuring out these problems.
llvm-svn: 186146
|
| |
|
|
| |
llvm-svn: 186145
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This patch adds explicit calling convention types for the Win64 and
System V/x86-64 ABIs. This allows code to override the default, and use
the Win64 convention on a target that wants to use SysV (and
vice-versa). This is needed to implement the `ms_abi` and `sysv_abi` GNU
attributes.
Reviewers:
CC:
llvm-svn: 186144
|
| |
|
|
| |
llvm-svn: 186143
|
| |
|
|
|
|
| |
It fixes compatibility in llvm/test/Object/archive-toc.test.
llvm-svn: 186142
|
| |
|
|
|
|
|
| |
replaceFrameIndices(MF) will iterate over the BBs and call
replaceFrameIndices(BB). No functionality change.
llvm-svn: 186141
|
| |
|
|
|
|
|
|
| |
successor blocks with code that scans PHINodes.
Before we could vectorize PHINodes scanning successors was a good way of finding candidates. Now we can vectorize the phinodes which is simpler.
llvm-svn: 186139
|
| |
|
|
| |
llvm-svn: 186134
|
| |
|
|
| |
llvm-svn: 186131
|
| |
|
|
| |
llvm-svn: 186123
|
| |
|
|
| |
llvm-svn: 186121
|
| |
|
|
|
|
|
|
| |
(reduced LLVM IR) + (full source in comment)
with the
(full LLVM IR) + (reduced src in comment)
llvm-svn: 186119
|
| |
|
|
| |
llvm-svn: 186118
|
| |
|
|
| |
llvm-svn: 186116
|
| |
|
|
| |
llvm-svn: 186113
|
| |
|
|
| |
llvm-svn: 186110
|
| |
|
|
|
|
|
|
|
|
| |
We had patterns to match v4i32 immAllZerosV -> V_SET0, but not patterns for
v8i16 (which occurs in the test case) or v16i8. The same was true for
V_SETALLONES (so I added the associated patterns for those as well).
Another bug found by llvm-stress.
llvm-svn: 186108
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
constant.
Patch by Michele Scandale!
Adds a special handling of the case where, during the loop exit
condition rewriting, the exit value is a constant of bitwidth lower
than the type of the induction variable: instead of introducing a
trunc operation in order to match correctly the operand types, it
allows to convert the constant value to an equivalent constant,
depending on the initial value of the induction variable and the trip
count, in order have an equivalent comparison between the induction
variable and the new constant.
llvm-svn: 186107
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This fixes a bug (found by csmith) at -O0 where we attempt to create a RLWIMI
with an out-of-range operand. Most uses of the isRunOfOnes function are guarded
by a condition that the value is not zero. This was not true in two places, and
in both places a zero input would result in an out-of-rage MB value (= 32).
To fix this, isRunOfOnes returns false on a zero input (and I've remove one
now-redundant guard).
llvm-svn: 186101
|
| |
|
|
|
|
| |
size.
llvm-svn: 186098
|
| |
|
|
| |
llvm-svn: 186096
|
| |
|
|
|
|
| |
No functionality change.
llvm-svn: 186095
|
| |
|
|
| |
llvm-svn: 186094
|
| |
|
|
| |
llvm-svn: 186092
|