| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 184933
|
|
|
|
|
|
| |
shift/xor/sub when it is possible. Fixed a bug in SDIV, where the const operand is not a splat constant vector.
llvm-svn: 184931
|
|
|
|
| |
llvm-svn: 184642
|
|
|
|
|
|
|
|
|
|
|
|
| |
A FastISel optimization was causing us to emit no information for such
parameters & when they go missing we end up emitting a different
function type. By avoiding that shortcut we not only get types correct
(very important) but also location information (handy) - even if it's
only live at the start of a function & may be clobbered later.
Reviewed/discussion by Evan Cheng & Dan Gohman.
llvm-svn: 184604
|
|
|
|
|
|
|
| |
When (srl (anyextend x), c) is folded into (anyextend (srl x, c)), the
high bits are not cleared. Add 'and' to clear off them.
llvm-svn: 184575
|
|
|
|
|
|
| |
caching it. The TLI may change between functions. No functionality change.
llvm-svn: 184360
|
|
|
|
|
|
| |
already.
llvm-svn: 184346
|
|
|
|
|
|
|
|
|
|
|
|
| |
value is zero.
This allows optmizations to kick in more easily.
Fix some test cases so that they remain meaningful (i.e., not completely dead
coded) when optimizations apply.
<rdar://problem/14096009> superfluous multiply by high part of zero-extended
value.
llvm-svn: 184222
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Rather than using the full power of target-specific addressing modes in
DBG_VALUEs with Frame Indicies, simply use Frame Index + Offset. This
reduces the complexity of debug info handling down to two
representations of values (reg+offset and frame index+offset) rather
than three or four.
Ideally we could ensure that frame indicies had been eliminated by the
time we reached an assembly or dwarf generation, but I haven't spent the
time to figure out where the FIs are leaking through into that & whether
there's a good place to convert them. Some FI+offset=>reg+offset
conversion is done (see PrologEpilogInserter, for example) which is
necessary for some SelectionDAG assumptions about registers, I believe,
but it might be possible to make this a more thorough conversion &
ensure there are no remaining FIs no matter how instruction selection
is performed.
llvm-svn: 184066
|
|
|
|
|
|
|
|
| |
redudant checks...
This doesn't really effect performance due to all the relevant calls being transparent but is clearer.
llvm-svn: 184027
|
|
|
|
| |
llvm-svn: 184012
|
|
|
|
| |
llvm-svn: 184008
|
|
|
|
|
|
| |
FADD/FMUL combinations; also improve accuracy of comments
llvm-svn: 183993
|
|
|
|
| |
llvm-svn: 183623
|
|
|
|
|
|
|
| |
Caching it as a pointer allows us to reset it if the TargetMachine object
changes.
llvm-svn: 183361
|
|
|
|
|
|
|
|
| |
The TargetLoweringInfo object is owned by the TargetMachine. In the future, the
TargetMachine object may change, which may also change the TargetLoweringInfo
object.
llvm-svn: 183356
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fixes PR16146: gdb.base__call-ar-st.exp fails after
pre-RA-sched=source fixes.
Patch by Xiaoyi Guo!
This also fixes an unsupported dbg.value test case. Codegen was
previously incorrect but the test was passing by luck.
llvm-svn: 182885
|
|
|
|
| |
llvm-svn: 182779
|
|
|
|
| |
llvm-svn: 182778
|
|
|
|
|
|
|
|
|
|
|
|
| |
When -ffast-math is in effect (on Linux, at least), clang defines
__FINITE_MATH_ONLY__ > 0 when including <math.h>. This causes the
preprocessor to include <bits/math-finite.h>, which renames the sqrt functions.
For instance, "sqrt" is renamed as "__sqrt_finite".
This patch adds the 3 new names in such a way that they will be treated
as equivalent to their respective original names.
llvm-svn: 182739
|
|
|
|
| |
llvm-svn: 182717
|
|
|
|
|
|
|
| |
Remove the old IR ordering mechanism and switch to new one. Fix unit
test failures.
llvm-svn: 182704
|
|
|
|
|
|
|
| |
Change SelectionDAG::getXXXNode() interfaces as well as call sites of
these functions to pass in SDLoc instead of DebugLoc.
llvm-svn: 182703
|
|
|
|
|
|
|
|
| |
Use a field in the SelectionDAGNode object to track its IR ordering.
This adds fields and utility classes without changing existing
interfaces or functionality.
llvm-svn: 182701
|
|
|
|
| |
llvm-svn: 182680
|
|
|
|
| |
llvm-svn: 182495
|
|
|
|
|
|
|
|
|
|
| |
The intrinsic calls are dropped, but the annotated value is propagated.
Fixes PR 15253
Original patch by Zeng Bin!
llvm-svn: 182387
|
|
|
|
|
|
|
|
| |
0) == 0.
Fixes PR16083.
llvm-svn: 182357
|
|
|
|
| |
llvm-svn: 182180
|
|
|
|
|
|
|
| |
Use EVT::changeExtendedVectorElementTypeToInteger instead of doing the
same thing that it does
llvm-svn: 182165
|
|
|
|
| |
llvm-svn: 182164
|
|
|
|
|
|
| |
radar://problem/13865940
llvm-svn: 182062
|
|
|
|
|
|
|
|
|
|
|
|
| |
as the smaller type.
if ((x & 255) == 255)
before: movzbl %al, %eax
cmpl $255, %eax
after: cmpb $-1, %al
llvm-svn: 182038
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If the input operands to SETCC are promoted, we need to make sure that we
either use the promoted form of both operands (or neither); a mixture is not
allowed. This can happen, for example, if a target has a custom promoted
i1-returning intrinsic (where i1 is not a legal type). In this case, we need to
use the promoted form of both operands.
This change only augments the behavior of the existing logic in the case where
the input types (which may or may not have already been legalized) disagree,
and should not affect existing target code because this case would otherwise
cause an assert in the SETCC operand promotion code.
This will be covered by (essentially all of the) tests for the new PPCCTRLoops
infrastructure.
llvm-svn: 181926
|
|
|
|
| |
llvm-svn: 181721
|
|
|
|
| |
llvm-svn: 181682
|
|
|
|
|
|
|
|
| |
(and)) into (and (not)).
PR15948.
llvm-svn: 181597
|
|
|
|
|
|
| |
it constant folds FADD, FMUL, etc.
llvm-svn: 181555
|
|
|
|
|
|
|
|
| |
Fold (xor (and x, y), y) -> (and (not x), y)
This removes an opportunity for a constant to appear twice.
llvm-svn: 181395
|
|
|
|
| |
llvm-svn: 181348
|
|
|
|
|
|
| |
(Would sometimes optimize away conacts used to extend a vector with undef values)
llvm-svn: 181186
|
|
|
|
|
|
|
|
| |
constructor enables
Patch by Robert Wilhelm.
llvm-svn: 181138
|
|
|
|
|
|
|
|
|
| |
report a fatal error. This allows us to continue processing the translation
unit. Test case to come on the clang side because we need an inline asm
diagnostics handler in place.
rdar://13446483
llvm-svn: 180873
|
|
|
|
|
|
|
|
|
| |
Optimize CONCAT_VECTOR nodes that merge EXTRACT_SUBVECTOR values that extract from the same vector.
rdar://13402653
PR15866
llvm-svn: 180871
|
|
|
|
|
|
| |
entire register is guaranteed to be preserved.
llvm-svn: 180825
|
|
|
|
|
|
|
|
|
|
| |
can express a"
because it breaks some buildbots.
This reverts commit 180816.
llvm-svn: 180819
|
|
|
|
|
|
|
|
|
|
|
|
| |
register-indirect address with an offset of 0.
It used to be that a DBG_VALUE is a register-indirect value if the offset
(operand 1) is nonzero. The new convention is that a DBG_VALUE is
register-indirect if the first operand is a register and the second
operand is an immediate. For plain registers use the combination reg, reg.
rdar://problem/13658587
llvm-svn: 180816
|
|
|
|
|
|
| |
into account some previously misssed cases (PRE_DEC addressing mode, the offset and base address are swapped, etc). This should fix PR15581.
llvm-svn: 180609
|
|
|
|
|
|
|
|
|
|
| |
scalars.
This already helps SSE2 x86 a lot because it lacks an efficient way to
represent a vector select. The long term goal is to enable the backend to match
a canonicalized pattern into a single instruction (e.g. vabs or pabs).
llvm-svn: 180597
|
|
|
|
|
|
| |
vector types not returns a vector instead of a scalar.
llvm-svn: 180254
|