| Commit message (Collapse) | Author | Age | Files | Lines | 
| ... |  | 
| | 
| 
| 
|  | 
llvm-svn: 139067
 | 
| | 
| 
| 
| 
| 
| 
|  | 
that the AVX versions (even the 128-bit ones) all clear the upper part
of the destination register.
llvm-svn: 139066
 | 
| | 
| 
| 
| 
| 
|  | 
pattern should be matched
llvm-svn: 139065
 | 
| | 
| 
| 
|  | 
llvm-svn: 139064
 | 
| | 
| 
| 
| 
| 
|  | 
it!
llvm-svn: 139063
 | 
| | 
| 
| 
|  | 
llvm-svn: 139062
 | 
| | 
| 
| 
|  | 
llvm-svn: 139061
 | 
| | 
| 
| 
| 
| 
|  | 
OptForSize pattern
llvm-svn: 139060
 | 
| | 
| 
| 
| 
| 
| 
|  | 
If we have a chain of zext -> assert_zext -> zext -> use, the first zext would get simplified away because of the later zext, and then the later zext would get simplified away because of the assert.  The solution is to teach SimplifyDemandedBits that assert_zext demands all of the high bits of its input, rather than only those demanded by its users.  No testcase because the only example I have manifests as llvm-gcc miscompiling LLVM, and I haven't found a smaller case that reproduces this problem.
Fixes <rdar://problem/10063365>.
llvm-svn: 139059
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
The explanation about a 0 argument being materialized as xor is no
longer valid.  Rematerialization will check if EFLAGS is live before
clobbering it.
The code produced by X86TargetLowering::EmitLoweredSelect does not
clobber EFLAGS.
This causes one less testb instruction to be generated in the cmov.ll
test case.
llvm-svn: 139057
 | 
| | 
| 
| 
| 
| 
| 
|  | 
It is only allowed to clobber EFLAGS at the end of a block if it isn't
live-in to any successor.
llvm-svn: 139056
 | 
| | 
| 
| 
|  | 
llvm-svn: 139055
 | 
| | 
| 
| 
|  | 
llvm-svn: 139053
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Tweak handling of IT blocks a bit to enable this. The differentiation between
B and Bcc needs special sauce.
llvm-svn: 139049
 | 
| | 
| 
| 
|  | 
llvm-svn: 139047
 | 
| | 
| 
| 
| 
| 
|  | 
missing from fast-isel.
llvm-svn: 139044
 | 
| | 
| 
| 
| 
| 
| 
|  | 
For other shift and rotate instructions, too. Tests for those forthcoming
as I work my way through the ISA.
llvm-svn: 139040
 | 
| | 
| 
| 
|  | 
llvm-svn: 139036
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
slots. This fixes a bug where the number of nodes coming into the PHI node may
not equal the number of predecessors. E.g., two or more landingpad instructions
may require a PHI before reaching the eh.exception and eh.selector instructions.
llvm-svn: 139035
 | 
| | 
| 
| 
| 
| 
|  | 
case those instructions that the immediate is not sign-extend.  radr://8795217
llvm-svn: 139028
 | 
| | 
| 
| 
|  | 
llvm-svn: 139024
 | 
| | 
| 
| 
|  | 
llvm-svn: 139023
 | 
| | 
| 
| 
|  | 
llvm-svn: 139022
 | 
| | 
| 
| 
|  | 
llvm-svn: 139021
 | 
| | 
| 
| 
|  | 
llvm-svn: 139019
 | 
| | 
| 
| 
|  | 
llvm-svn: 139018
 | 
| | 
| 
| 
|  | 
llvm-svn: 139017
 | 
| | 
| 
| 
|  | 
llvm-svn: 139015
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
This changes loop unrolling to use the same mechanism for trip count
computation as indvars. This is a stronger check that tends to unroll
more loops. A very common side-effect is that many single iteration
loops will be removed sooner. The real goal was simply to remove
dependence on canonical IVs.
x86 is break even.
ARM performance changes to expect (+ is good):
External/SPEC/CFP2000/183.equake/183.equake +13%
SingleSource/Benchmarks/Dhrystone/fldry     +21%
MultiSource/Applications/spiff/spiff         +3%
SingleSource/Benchmarks/Stanford/Puzzle     -14%
The Puzzle regression is actually an improvement in loop optimization
that defeats GVN: rdar://problem/10065079.
llvm-svn: 139009
 | 
| | 
| 
| 
| 
| 
|  | 
ConstantVector.
llvm-svn: 139007
 | 
| | 
| 
| 
| 
| 
|  | 
This fixes PR10813.
llvm-svn: 139006
 | 
| | 
| 
| 
| 
| 
|  | 
will be valid. This fixes PR10820.
llvm-svn: 139005
 | 
| | 
| 
| 
|  | 
llvm-svn: 139004
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Perform the upgrading in steps.
* First, create a map of the invokes to the EH intrinsics.
* Next, take that mapping and determine if the invoke's unwind destination has a
  single predecessor. If not, then create a new empty block to hold the new
  landingpad instruction.
* Create a landingpad instruction into the uwnind destination. Fill it with the
  values from the old selector. Map the old intrinsic calls to the new
  landingpad values (there may be multiple landingpad instructions per instrinic
  call pairs).
* Go through the old intrinsic calls, create a PHI node when necessary, and then
  replace their values with the new values from the landingpad instructions.
* Delete all dead instructions.
* ???
* Profit!
llvm-svn: 138990
 | 
| | 
| 
| 
| 
| 
|  | 
not externally exposed.
llvm-svn: 138982
 | 
| | 
| 
| 
|  | 
llvm-svn: 138980
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
to be unreliable on platforms which require memcpy calls, and it is
complicating broader legalize cleanups. It is hoped that these cleanups
will make memcpy byval easier to implement in the future.
llvm-svn: 138977
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
- On COFF the .lcomm directive has an alignment argument.
- On ELF we fall back to .local + .comm
Based on a patch by NAKAMURA Takumi.
Fixes PR9337, PR9483 and PR10128.
llvm-svn: 138976
 | 
| | 
| 
| 
|  | 
llvm-svn: 138974
 | 
| | 
| 
| 
| 
| 
|  | 
-Werror. Sorry for the inconvenience.
llvm-svn: 138973
 | 
| | 
| 
| 
|  | 
llvm-svn: 138968
 | 
| | 
| 
| 
| 
| 
|  | 
Duncan noticed this!
llvm-svn: 138967
 | 
| | 
| 
| 
| 
| 
|  | 
anyone is actually using this, but might as well fix it since I found the issue.)
llvm-svn: 138965
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Remove broken emacs mode major notation marking a C++ file as C.
No functionality change.
llvm-svn: 138963
 | 
| | 
| 
| 
| 
| 
|  | 
instructions.  Found by inspection; not sure what practical impact, if any, this has.
llvm-svn: 138962
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
An instruction may define part of a register where the other bits are
undefined. In that case, it is safe to rematerialize the instruction.
For example:
  %vreg2:ssub_0<def> = VLDRS <cp#0>, 0, pred:14, pred:%noreg, %vreg2<imp-def>
The extra <imp-def> operand indicates that the instruction does not read
the other parts of the virtual register, so a remat is safe.
This patch simply allows multiple def operands for the virtual register.
It is MI->readsVirtualRegister() that determines if we depend on a
previous value so remat is impossible.
llvm-svn: 138953
 | 
| | 
| 
| 
|  | 
llvm-svn: 138952
 | 
| | 
| 
| 
| 
| 
|  | 
only one use. Fix PR10825.
llvm-svn: 138951
 | 
| | 
| 
| 
|  | 
llvm-svn: 138948
 | 
| | 
| 
| 
|  | 
llvm-svn: 138946
 |