| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 169624
|
| |
|
|
|
|
|
| |
check if loads that happen in between stores alias with the first store in the
chain, only with the second store onwards.
llvm-svn: 169516
|
| |
|
|
|
|
| |
to the normal instructions.
llvm-svn: 169482
|
| |
|
|
| |
llvm-svn: 169427
|
| |
|
|
|
|
|
|
| |
This is much simpler to reason about, more efficient, and
fixes some corner cases involving implicit super-register defs.
Fixed rdar://12797931.
llvm-svn: 169425
|
| |
|
|
|
|
| |
Generate VPBLENDD for AVX2 and VPBLENDW for v16i16 type on AVX2.
llvm-svn: 169366
|
| |
|
|
|
|
|
|
|
| |
x ^ -1.
Patch by David Majnemer.
rdar://12755626
llvm-svn: 169339
|
| |
|
|
|
|
|
|
|
| |
The count attribute is more accurate with regards to the size of an array. It
also obviates the upper bound attribute in the subrange. We can also better
handle an unbound array by setting the count to -1 instead of the lower bound to
1 and upper bound to 0.
llvm-svn: 169312
|
| |
|
|
|
|
|
|
|
| |
The count field is necessary because there isn't a difference between the 'lo'
and 'hi' attributes for a one-element array and a zero-element array. When the
count is '0', we know that this is a zero-element array. When it's >=1, then
it's a normal constant sized array. When it's -1, then the array is unbounded.
llvm-svn: 169218
|
| |
|
|
| |
llvm-svn: 169111
|
| |
|
|
| |
llvm-svn: 169108
|
| |
|
|
|
|
|
| |
Assertion failed: (TopRPTracker.getPos() == RegionBegin && "bad initial Top tracker").
rdar://12790302.
llvm-svn: 169072
|
| |
|
|
|
|
|
| |
Assertion failed: (VNI && "No value to read by operand")
rdar://12790267.
llvm-svn: 169071
|
| |
|
|
|
|
|
| |
Assertion failed: (itr != mi2iMap.end() && "Instruction not found in maps.")
rdar://12777252.
llvm-svn: 169070
|
| |
|
|
|
|
|
|
| |
assert (RemainingInstrs == 0 && "Instruction count mismatch!")
rdar://12776937.
llvm-svn: 169069
|
| |
|
|
|
|
| |
loads do not alias.
llvm-svn: 168832
|
| |
|
|
|
|
|
|
|
|
|
| |
This is a simple, cheap infrastructure for analyzing the shape of a
DAG. It recognizes uniform DAGs that take the shape of bottom-up
subtrees, such as the included matrix multiplication example. This is
useful for heuristics that balance register pressure with ILP. Two
canonical expressions of the heuristic are implemented in scheduling
modes: -misched-ilpmin and -misched-ilpmax.
llvm-svn: 168773
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes a hole in the "cheap" alias analysis logic implemented within
the DAG builder itself, regardless of whether proper alias analysis is
enabled. It now handles this pattern produced by LSR+CodeGenPrepare.
%sunkaddr1 = ptrtoint * %obj to i64
%sunkaddr2 = add i64 %sunkaddr1, %lsr.iv
%sunkaddr3 = inttoptr i64 %sunkaddr2 to i32*
store i32 %v, i32* %sunkaddr3
llvm-svn: 168768
|
| |
|
|
|
|
|
|
|
|
|
| |
when the destination register is wider than the memory load.
These load instructions load from m32 or m64 and set the upper bits to zero,
while the folded instructions may accept m128.
rdar://12721174
llvm-svn: 168710
|
| |
|
|
| |
llvm-svn: 168687
|
| |
|
|
|
|
| |
from accidentally being triggered.
llvm-svn: 168686
|
| |
|
|
| |
llvm-svn: 168681
|
| |
|
|
|
|
| |
corresponding to r168627. Win32 and *bsd were affected.
llvm-svn: 168651
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This pass was conservative in that it always reserved the FP to enable dynamic
stack realignment, which allowed the RA to use aligned spills for vector
registers. This happens even when spills were not necessary. The RA has
since been improved to use unaligned spills when necessary.
The new behavior is to realign the stack if the frame pointer was already
reserved for some other reason, but don't reserve the frame pointer just
because a function contains vector virtual registers.
Part of rdar://12719844
llvm-svn: 168627
|
| |
|
|
| |
llvm-svn: 168600
|
| |
|
|
| |
llvm-svn: 168359
|
| |
|
|
|
|
| |
PR14376.
llvm-svn: 168320
|
| |
|
|
|
|
| |
to pass on Atom.
llvm-svn: 168171
|
| |
|
|
| |
llvm-svn: 168166
|
| |
|
|
|
|
| |
vector types.
llvm-svn: 168141
|
| |
|
|
| |
llvm-svn: 167989
|
| |
|
|
| |
llvm-svn: 167975
|
| |
|
|
| |
llvm-svn: 167973
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
bytes.
The stack realignment code was fixed to work when there is stack realignment and
a dynamic alloca is present so this shouldn't cause correctness issues anymore.
Note that this also enables generation of AVX instructions for memset
under the assumptions:
- Unaligned loads/stores are always fast on CPUs supporting AVX
- AVX is not slower than SSE
We may need some tweaked heuristics if one of those assumptions turns out not to
be true.
Effectively reverts r58317. Part of PR2962.
llvm-svn: 167967
|
| |
|
|
| |
llvm-svn: 167912
|
| |
|
|
|
|
|
|
| |
temporarily as it is breaking the gdb bots.
This reverts commit r167806/e7ff4c14b157746b3e0228d2dce9f70712d1c126.
llvm-svn: 167886
|
| |
|
|
|
|
|
|
|
|
|
| |
chain is correctly setup.
As an example, if the original load must happen before later stores, we need
to make sure the constructed VZEXT_LOAD is constrained to be before the stores.
rdar://12684358
llvm-svn: 167859
|
| |
|
|
|
|
|
|
|
| |
If we have a type 'int a[1]' and a type 'int b[0]', the generated DWARF is the
same for both of them because we use the 'upper_bound' attribute. Instead use
the 'count' attrbute, which gives the correct number of elements in the array.
<rdar://problem/12566646>
llvm-svn: 167806
|
| |
|
|
| |
llvm-svn: 167769
|
| |
|
|
|
|
|
| |
- Fix operand order for atomic sub, where the minuend is the value
loaded from memory and the subtrahend is the parameter specified.
llvm-svn: 167718
|
| |
|
|
| |
llvm-svn: 167652
|
| |
|
|
|
|
|
|
| |
- Add RTM code generation support throught 3 X86 intrinsics:
xbegin()/xend() to start/end a transaction region, and xabort() to abort a
tranaction region
llvm-svn: 167573
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
misched is disabled by default. With -enable-misched, these heuristics
balance the schedule to simultaneously avoid saturating processor
resources, expose ILP, and minimize register pressure. I've been
analyzing the performance of these heuristics on everything in the
llvm test suite in addition to a few other benchmarks. I would like
each heuristic check to be verified by a unit test, but I'm still
trying to figure out the best way to do that. The heuristics are still
in considerable flux, but as they are refined we should be rigorous
about unit testing the improvements.
llvm-svn: 167527
|
| |
|
|
| |
llvm-svn: 167207
|
| |
|
|
| |
llvm-svn: 167200
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The adc/sbb optimization is to able to convert following expression
into a single adc/sbb instruction:
(ult) ... = x + 1 // where the ult is unsigned-less-than comparison
(ult) ... = x - 1
This change is to flip the "x >u y" (i.e. ugt comparison) in order
to expose the adc/sbb opportunity.
llvm-svn: 167180
|
| |
|
|
|
|
|
|
|
|
|
|
| |
the first source operand is tied to the destination operand.
This is to accurately model the corresponding instructions where the upper
bits are unmodified.
rdar://12558838
PR14221
llvm-svn: 167064
|
| |
|
|
|
|
|
|
|
| |
We used to generate a store (movq) + a load.
Now we use movd.
rdar://9946746
llvm-svn: 167056
|
| |
|
|
|
|
| |
to test it with chapni's fix (-mattr=+avx).
llvm-svn: 166985
|
| |
|
|
| |
llvm-svn: 166979
|