| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
| |
Patch by Jacques-Pascal Deplaix
llvm-svn: 210480
|
| |
|
|
|
|
| |
from the x86 target machine. Should be no functional change.
llvm-svn: 210479
|
| |
|
|
|
|
| |
It has other uses besides shift instructions.
llvm-svn: 210478
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch adds new target specific combine rules to identify horizontal
add/sub idioms from BUILD_VECTOR dag nodes.
This patch also teaches the DAGCombiner how to canonicalize sequences of
insert_vector_elt dag nodes according to the following rule:
(insert_vector_elt (insert_vector_elt A, I0), I1) ->
(insert_vecto_elt (insert_vector_elt A, I1), I0)
This new canonicalization rule only triggers if the inner insert_vector
dag node has exactly one use; also, both indices must be known constants,
and I1 < I0.
This last rule made it possible to write a simpler algorithm to identify
horizontal add/sub patterns because now we don't have to worry about the
ordering of insert_vector_elt dag nodes.
llvm-svn: 210477
|
| |
|
|
| |
llvm-svn: 210476
|
| |
|
|
| |
llvm-svn: 210475
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The existing code in PPCTargetLowering::LowerMUL() for multiplying two
v16i8 values assumes that vector elements are numbered in big-endian
order. For little-endian targets, the vector element numbering is
reversed, but the vmuleub, vmuloub, and vperm instructions still
assume big-endian numbering. To account for this, we must adjust the
permute control vector and reverse the order of the input registers on
the vperm instruction.
The existing test/CodeGen/PowerPC/vec_mul.ll is updated to be executed
on powerpc64 and powerpc64le targets as well as the original powerpc
(32-bit) target.
llvm-svn: 210474
|
| |
|
|
| |
llvm-svn: 210473
|
| |
|
|
|
|
|
|
|
| |
Makes origin propagation ignore literal undef operands, and,
in general, any operand we don't have origin for.
https://code.google.com/p/memory-sanitizer/issues/detail?id=56
llvm-svn: 210472
|
| |
|
|
|
|
| |
Win32 x64.
llvm-svn: 210471
|
| |
|
|
|
|
|
|
| |
load/store is in branch delay slot.
Differential Revision: http://llvm-reviews.chandlerc.com/D4048
llvm-svn: 210470
|
| |
|
|
| |
llvm-svn: 210469
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This patch teaches the backend how to check for the 'NoSignedWrap' flag on
binary operations to improve the emission of 'test' instructions.
If the result of a binary operation is known not to overflow we know that
resetting the Overflow flag is unnecessary and so we can avoid emitting
the test instruction.
Patch by Marcello Maggioni.
llvm-svn: 210468
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This patch modifies SelectionDAGBuilder to construct SDNodes with associated
NoSignedWrap, NoUnsignedWrap and Exact flags coming from IR BinaryOperator
instructions.
Added a new SDNode type called 'BinaryWithFlagsSDNode' to allow accessing
nsw/nuw/exact flags during codegen.
Patch by Marcello Maggioni.
llvm-svn: 210467
|
| |
|
|
|
|
|
|
|
|
|
|
| |
According to Intel Software Optimization Manual
on Silvermont INC or DEC instructions require
an additional uop to merge the flags.
As a result, a branch instruction depending
on an INC or a DEC instruction incurs a 1 cycle penalty.
Differential Revision: http://reviews.llvm.org/D3990
llvm-svn: 210466
|
| |
|
|
| |
llvm-svn: 210465
|
| |
|
|
| |
llvm-svn: 210464
|
| |
|
|
|
|
|
| |
This should fix strtoimax/strtoumax on newer glibc.
https://code.google.com/p/memory-sanitizer/issues/detail?id=36
llvm-svn: 210463
|
| |
|
|
| |
llvm-svn: 210462
|
| |
|
|
| |
llvm-svn: 210461
|
| |
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D3822
llvm-svn: 210460
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instructions from __nodebug__ functions don't have file:line
information even when inlined into no-nodebug functions. As a result,
intrinsics (SSE and other) from <*intrin.h> clang headers _never_
have file:line information.
With this change, an instruction without !dbg metadata gets one from
the call instruction when inlined.
Fixes PR19001.
llvm-svn: 210459
|
| |
|
|
| |
llvm-svn: 210458
|
| |
|
|
| |
llvm-svn: 210457
|
| |
|
|
| |
llvm-svn: 210456
|
| |
|
|
| |
llvm-svn: 210455
|
| |
|
|
|
|
|
|
|
| |
This fixes a crash on MMX intrinsics, as well as a corner case in handling of
all unsigned pack intrinsics.
PR19953.
llvm-svn: 210454
|
| |
|
|
| |
llvm-svn: 210453
|
| |
|
|
| |
llvm-svn: 210452
|
| |
|
|
|
|
|
| |
This reverts commit r210425 because the test added in the commit
is broken.
llvm-svn: 210451
|
| |
|
|
| |
llvm-svn: 210450
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The PowerPC vsumsws instruction, accessed via vec_sums, is defined
architecturally with a big-endian bias, in that the second input vector
and the result always reference big-endian element 3 (little-endian
element 0). For ease of porting, the programmer wants elements 3 in
both cases.
To provide this semantics, for little endian we generate a permute for
the second input vector prior to the vsumsws instruction, and generate
a permute for the result vector following the vsumsws instruction.
The correctness of this code is tested by the new sums.c test added in
a previous patch, as well as the modifications to
builtins-ppc-altivec.c in the present patch.
llvm-svn: 210449
|
| |
|
|
| |
llvm-svn: 210448
|
| |
|
|
| |
llvm-svn: 210447
|
| |
|
|
|
|
|
| |
Patch by Dave Estes <cestes@codeaurora.org>
http://reviews.llvm.org/D4037
llvm-svn: 210446
|
| |
|
|
|
|
|
| |
plus add. The shift can be folded into the add. This only effects codegen
when the constant is 3.
llvm-svn: 210445
|
| |
|
|
|
|
|
|
|
|
| |
For each array index that is in the form of zext(a), convert it to sext(a)
if we can prove zext(a) <= max signed value of typeof(a). The conversion
helps to split zext(x + y) into sext(x) + sext(y).
Reviewed in http://reviews.llvm.org/D4060
llvm-svn: 210444
|
| |
|
|
| |
llvm-svn: 210443
|
| |
|
|
| |
llvm-svn: 210442
|
| |
|
|
|
|
|
| |
This uncovered something strange. Diagnostics for InlineAsm have source locations
that don't really map to where they are within the .c source file.
llvm-svn: 210440
|
| |
|
|
|
|
|
|
|
|
| |
zext(a + b) != zext(a) + zext(b) even if a + b >= 0 && b >= 0.
e.g., a = i4 0b1111, b = i4 0b0001
zext a + b to i8 = zext 0b0000 to i8 = 0b00000000
(zext a to i8) + (zext b to i8) = 0b00001111 + 0b00000001 = 0b00010000
llvm-svn: 210439
|
| |
|
|
|
|
| |
No functionality changes.
llvm-svn: 210438
|
| |
|
|
|
|
|
| |
inbounds are not necessary in these two tests. zext(a +nuw b) = zext(a) +
zext(b) should hold with or without inbounds.
llvm-svn: 210437
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
To test cases that involve actual repetition (> 1 elements), at least
one element before the insertion point, and some elements of the
original range that still fit in that range space after insertion.
Actually we need coverage for the inverse case too (where no elements
after the insertion point fit into the previously allocated space), but
this'll do for now, and I might end up rewriting bits of SmallVector to
avoid that special case anyway.
llvm-svn: 210436
|
| |
|
|
|
|
|
|
|
|
| |
Before, we where looking at the size of the pointer type that specifies the
location from which to load the element. This did not make any sense at all.
This change fixes a bug in the delinearization where we failed to delinerize
certain load instructions.
llvm-svn: 210435
|
| |
|
|
|
|
|
|
| |
when inserting repeated elements.
Also split and improve tests a bit.
llvm-svn: 210433
|
| |
|
|
| |
llvm-svn: 210432
|
| |
|
|
|
|
|
|
| |
X86Subtarget::isTargetCygMing || X86Subtarget::isTargetKnownWindowsMSVC is
equivalent to all Windows environments. Simplify the check to isOSWindows.
NFC.
llvm-svn: 210431
|
| |
|
|
|
|
|
|
|
|
|
| |
caught some bugs I haven't fixed yet.
Specifically this caused inserting an element from a SmallVector into
itself when such an insertion would cause a reallocation. We have code
to handle this for non-reallocating cases, but it's not robust against
reallocation.
llvm-svn: 210430
|
| |
|
|
|
|
|
|
| |
(& because it makes it easier to test, this also improves
correctness/performance slightly by moving the last element in an insert
operation, rather than copying it)
llvm-svn: 210429
|