oota-llvm.git
10 years ago[vectorizer] Add some flags which are useful for conducting experiments
Chandler Carruth [Mon, 27 Jan 2014 11:12:19 +0000 (11:12 +0000)]
[vectorizer] Add some flags which are useful for conducting experiments
with the unrolling behavior in the loop vectorizer. No functionality
changed at this point.

These are a bit hack-y, but talking with Hal, there doesn't seem to be
a cleaner way to easily experiment with different thresholds here and he
was also interested in them so I wanted to commit them. Suggestions for
improvement are very welcome here.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200212 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[vectorizer] Fix a trivial oversight where we always requested the
Chandler Carruth [Mon, 27 Jan 2014 11:12:14 +0000 (11:12 +0000)]
[vectorizer] Fix a trivial oversight where we always requested the
number of vector registers rather than toggling between vector and
scalar register number based on VF. I don't have a test case as
I spotted this by inspection and on X86 it only makes a difference if
your target is lacking SSE and thus has *no* vector registers.

If someone wants to add a test case for this for ARM or somewhere else
where this is more significant, that would be awesome.

Also made the variable name a bit more sensible while I'm here.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200211 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoFix crasher introduced in r200203 and caught by a libc++ buildbot. Don't assume that...
Nick Lewycky [Mon, 27 Jan 2014 10:47:44 +0000 (10:47 +0000)]
Fix crasher introduced in r200203 and caught by a libc++ buildbot. Don't assume that getMulExpr returns a SCEVMulExpr, it may have simplified it to something else!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200210 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoTeach SCEV to handle more cases of 'and X, CST', specifically where CST is any number...
Nick Lewycky [Mon, 27 Jan 2014 10:04:03 +0000 (10:04 +0000)]
Teach SCEV to handle more cases of 'and X, CST', specifically where CST is any number of contiguous 1 bits in a row, with any number of leading and trailing 0 bits.

Unfortunately, this in turn led to some lower quality SCEVs due to some different paths through expression simplification, so add getUDivExactExpr and use it. This fixes all instances of the problems that I found, but we can make that function smarter as necessary.

Merge test "xor-and.ll" into "and-xor.ll" since I needed to update it anyways. Test 'nsw-offset.ll' analyzes a little deeper, %n now gets a scev in terms of %no instead of a SCEVUnknown.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200203 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAdditional fix for 200201: due to dependence on bitwidth test was moved to X86 directory.
Stepan Dyatkovskiy [Mon, 27 Jan 2014 09:43:10 +0000 (09:43 +0000)]
Additional fix for 200201: due to dependence on bitwidth test was moved to X86 directory.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200202 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoFix for PR18102.
Stepan Dyatkovskiy [Mon, 27 Jan 2014 09:18:31 +0000 (09:18 +0000)]
Fix for PR18102.

Issue outcomes from DAGCombiner::MergeConsequtiveStores, more precisely from
mem-ops sequence sorting.

Consider, how MergeConsequtiveStores works for next example:

store i8 1, a[0]
store i8 2, a[1]
store i8 3, a[1]   ; a[1] again.
return   ; DAG starts here

1. Method will collect all the 3 stores.
2. It sorts them by distance from the base pointer (farthest with highest
index).
3. It takes first consecutive non-overlapping stores and (if possible) replaces
them with a single store instruction.

The point is, we can't determine here which 'store' instruction
would be the second after sorting ('store 2' or 'store 3').
It happens that 'store 3' would be the second, and 'store 2' would be the third.

So after merging we have the next result:

store i16 (1 | 3 << 8), base   ; is a[0] but bit-casted to i16
store i8 2, a[1]

So actually we swapped 'store 3' and 'store 2' and got wrong contents in a[1].

Fix: In sort routine just also take into account mem-op sequence number.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200201 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[vectorizer] Clean up the handling of unvectorized loop unrolling in the
Chandler Carruth [Mon, 27 Jan 2014 08:17:58 +0000 (08:17 +0000)]
[vectorizer] Clean up the handling of unvectorized loop unrolling in the
LoopVectorize pass.

The logic here doesn't make much sense. We *only* unrolled if the
unvectorized loop was a reduction loop with a single basic block *and*
small loop body. The reduction part in particular doesn't make much
sense. Instead, if we just fall through to the vectorized unroll logic
it makes more sense of unrolling if there is a vectorized reduction that
could be hacked on by the SLP vectorizer *or* if the loop is small.

This is mostly a cleanup and nothing in the test suite really exercises
this, but I did run benchmarks across this change and saw no really
significant changes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200198 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoR600/SI: Add intrinsic for BUFFER_LOAD_DWORD* instructions
Michel Danzer [Mon, 27 Jan 2014 07:20:51 +0000 (07:20 +0000)]
R600/SI: Add intrinsic for BUFFER_LOAD_DWORD* instructions

Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200196 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoR600/SI: Add intrinsic for S_SENDMSG instruction
Michel Danzer [Mon, 27 Jan 2014 07:20:44 +0000 (07:20 +0000)]
R600/SI: Add intrinsic for S_SENDMSG instruction

Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200195 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRoll back the ConstStringRef change for now
Alp Toker [Mon, 27 Jan 2014 05:24:39 +0000 (05:24 +0000)]
Roll back the ConstStringRef change for now

There are a couple of interesting things here that we want to check over
(particularly the expecting asserts in StringRef) and get right for general use
in ADT so hold back on this one. For clang we have a workable templated
solution to use in the meanwhile.

This reverts commit r200187.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200194 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoPrint .mask and .fmask with the target streamer.
Rafael Espindola [Mon, 27 Jan 2014 04:33:11 +0000 (04:33 +0000)]
Print .mask and .fmask with the target streamer.

Testing this also found the missing '\n' after .frame that this patch also
fixes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200192 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRename IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA.
Rui Ueyama [Mon, 27 Jan 2014 04:22:24 +0000 (04:22 +0000)]
Rename IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA.

editbin.exe and link.exe both accepts /highentropyva option to set this bit, so
doing s/VIRTUAL_ADDRESS/VA/ should make sense.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200191 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoMove true/false StringRef helper to StringExtras
Alp Toker [Mon, 27 Jan 2014 04:07:36 +0000 (04:07 +0000)]
Move true/false StringRef helper to StringExtras

StringRef is a low-level data wrapper that shouldn't know about language
strings like 'true' and 'false' whereas StringExtras is just the place for
higher-level utilities.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200188 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoStringRef: Extend constexpr capabilities and introduce ConstStringRef
Alp Toker [Mon, 27 Jan 2014 04:07:17 +0000 (04:07 +0000)]
StringRef: Extend constexpr capabilities and introduce ConstStringRef

(1) Add llvm_expect(), an asserting macro that can be evaluated as a constexpr
    expression as well as a runtime assert or compiler hint in release builds. This
    technique can be used to construct functions that are both unevaluated and
    compiled depending on usage.

(2) Update StringRef using llvm_expect() to preserve runtime assertions while
    extending the same checks to static asserts in C++11 builds that support the
    feature.

(3) Introduce ConstStringRef, a strong subclass of StringRef that references
    compile-time constant strings. It's convertible to, but not from, ordinary
    StringRef and thus can be used to add compile-time safety to various interfaces
    in LLVM and clang that only accept fixed inputs such as diagnostic format
    strings that tend to get misused.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200187 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoPrint .frame via the target streamer.
Rafael Espindola [Mon, 27 Jan 2014 03:53:56 +0000 (03:53 +0000)]
Print .frame via the target streamer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200186 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[AArch64 NEON] Try to generate CONCAT_VECTOR when lowering BUILD_VECTOR or SHUFFLE_VE...
Kevin Qin [Mon, 27 Jan 2014 02:53:54 +0000 (02:53 +0000)]
[AArch64 NEON] Try to generate CONCAT_VECTOR when lowering BUILD_VECTOR or SHUFFLE_VECTOR.

Replace r199791.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200180 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRevert r199791.
Kevin Qin [Mon, 27 Jan 2014 02:53:41 +0000 (02:53 +0000)]
Revert r199791.

It's old version which has some bugs. I'll commit lattest patch soon.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200179 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoUse SwitchSection in MipsAsmPrinter::EmitStartOfAsmFile.
Rafael Espindola [Mon, 27 Jan 2014 01:33:33 +0000 (01:33 +0000)]
Use SwitchSection in MipsAsmPrinter::EmitStartOfAsmFile.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200178 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRemove dead code.
Rafael Espindola [Mon, 27 Jan 2014 00:47:51 +0000 (00:47 +0000)]
Remove dead code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200174 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAdd back spaces I missed in the conversion to emitRawComments.
Rafael Espindola [Mon, 27 Jan 2014 00:19:41 +0000 (00:19 +0000)]
Add back spaces I missed in the conversion to emitRawComments.

Sorry about that.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200171 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoUse emitRawComment instead of EmitRawText.
Rafael Espindola [Mon, 27 Jan 2014 00:16:00 +0000 (00:16 +0000)]
Use emitRawComment instead of EmitRawText.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200170 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAdd missing file.
Rafael Espindola [Mon, 27 Jan 2014 00:08:17 +0000 (00:08 +0000)]
Add missing file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200169 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAdd a XCoreTargetStreamer and port over the simple uses of EmitRawText.
Rafael Espindola [Sun, 26 Jan 2014 23:57:05 +0000 (23:57 +0000)]
Add a XCoreTargetStreamer and port over the simple uses of EmitRawText.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200167 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoMC: fix test locations/name
Saleem Abdulrasool [Sun, 26 Jan 2014 22:55:02 +0000 (22:55 +0000)]
MC: fix test locations/name

Placed the MC variant diagnostics in the wrong directory accidentally.  Move
them into their respective architecture specific directories.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200161 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoARM: improve diagnostics for .word directive
Saleem Abdulrasool [Sun, 26 Jan 2014 22:29:50 +0000 (22:29 +0000)]
ARM: improve diagnostics for .word directive

If a complex expression was passed to the .word directive and the first part of
the directive failed to parse, a secondary diagnostic would be produced that
would clutter the error diagnostics.  Improve the diagnostics by consuming the
remainder of the statement.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200160 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAsmParser: improve diagnostics for invalid variants
Saleem Abdulrasool [Sun, 26 Jan 2014 22:29:43 +0000 (22:29 +0000)]
AsmParser: improve diagnostics for invalid variants

An emitted diagnostic for an invalid relocation variant would place the caret on
the token following the relocation variant indicator or at the end of the line
if there was no following token.  This change corrects the placement of the
caret to point to the token.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200159 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoMC: whitespace
Saleem Abdulrasool [Sun, 26 Jan 2014 22:29:36 +0000 (22:29 +0000)]
MC: whitespace

Fix indentation, remove unnecessary line.  NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200158 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAvoid C++ comment in C sources
Alp Toker [Sun, 26 Jan 2014 18:44:34 +0000 (18:44 +0000)]
Avoid C++ comment in C sources

lib/Target/X86/Disassembler/X86DisassemblerDecoder.c:1361:7: error: C++ style comments are not allowed in ISO C90

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200153 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoFollow up of r200095. Code clean up.
Evan Cheng [Sun, 26 Jan 2014 18:30:13 +0000 (18:30 +0000)]
Follow up of r200095. Code clean up.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200152 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[CMake] tablegen(): Use -I <dir> according to the list by include_directories().
NAKAMURA Takumi [Sun, 26 Jan 2014 12:41:38 +0000 (12:41 +0000)]
[CMake] tablegen(): Use -I <dir> according to the list by include_directories().

For now, local_tds and global_tds are integrated to dependent_tds.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200150 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[CMake] Functionalize tblgen().
NAKAMURA Takumi [Sun, 26 Jan 2014 12:41:33 +0000 (12:41 +0000)]
[CMake] Functionalize tblgen().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200149 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoClean up the Legal/Expand logic for SPARC popc.
Jakob Stoklund Olesen [Sun, 26 Jan 2014 08:12:34 +0000 (08:12 +0000)]
Clean up the Legal/Expand logic for SPARC popc.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200141 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoImplement the missing bits corresponding to .mips_hack_elf_flags.
Rafael Espindola [Sun, 26 Jan 2014 06:57:13 +0000 (06:57 +0000)]
Implement the missing bits corresponding to .mips_hack_elf_flags.

These were:
* noreorder handling on the target object streamer and asm parser.
* setting the initial flag bits based on the enabled features.
* setting the elf header flag for micromips

It is *really* depressing I am the one doing this instead of someone at
mips actually taking the time to understand the infrastructure.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200138 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoPass a MCSubtargetInfo down to the TargetStreamer creation.
Rafael Espindola [Sun, 26 Jan 2014 06:38:58 +0000 (06:38 +0000)]
Pass a MCSubtargetInfo down to the TargetStreamer creation.

With this the target streamers will be able to know the target features that
are in use.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200135 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[CMake] configure_lit_site_cfg: ${SHLIBDIR} should point the build tree.
NAKAMURA Takumi [Sun, 26 Jan 2014 06:18:56 +0000 (06:18 +0000)]
[CMake] configure_lit_site_cfg: ${SHLIBDIR} should point the build tree.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200134 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoOnly generate the popc instruction for SPARC CPUs that implement it.
Jakob Stoklund Olesen [Sun, 26 Jan 2014 06:09:59 +0000 (06:09 +0000)]
Only generate the popc instruction for SPARC CPUs that implement it.

The popc instruction is defined in the SPARCv9 instruction set
architecture, but it was emulated on CPUs older than Niagara 2.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200131 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoFix swapped CASA operands.
Jakob Stoklund Olesen [Sun, 26 Jan 2014 06:09:54 +0000 (06:09 +0000)]
Fix swapped CASA operands.

Found by SingleSource/UnitTests/AtomicOps.c

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200130 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoConstruct the MCStreamer before constructing the MCTargetStreamer.
Rafael Espindola [Sun, 26 Jan 2014 06:06:37 +0000 (06:06 +0000)]
Construct the MCStreamer before constructing the MCTargetStreamer.

This has a few advantages:
* Only targets that use a MCTargetStreamer have to worry about it.
* There is never a MCTargetStreamer without a MCStreamer, so we can use a
  reference.
* A MCTargetStreamer can talk to the MCStreamer in its constructor.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200129 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[Sparc] Add support for parsing DW_CFA_GNU_window_save.
Venkatraman Govindaraju [Sun, 26 Jan 2014 05:13:44 +0000 (05:13 +0000)]
[Sparc] Add support for parsing DW_CFA_GNU_window_save.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200127 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoConvert some easy uses of EmitRawText to TargetStreamer methods.
Rafael Espindola [Sun, 26 Jan 2014 05:06:48 +0000 (05:06 +0000)]
Convert some easy uses of EmitRawText to TargetStreamer methods.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200122 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoCOFF: Add a missing enum value for high entropy ASLR.
Rui Ueyama [Sun, 26 Jan 2014 05:05:23 +0000 (05:05 +0000)]
COFF: Add a missing enum value for high entropy ASLR.

That bit is not documented in the PE/COFF spec published by Microsoft, so we
don't know the official name of it. I named this bit
IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VIRTUAL_ADDRESS because the bit is
reported as "high entropy virtual address" by dumpbin.exe,

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200121 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoImprove some x86 type constraints.
Craig Topper [Sun, 26 Jan 2014 04:59:39 +0000 (04:59 +0000)]
Improve some x86 type constraints.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200120 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoImprove pattern match from v1i8 to v1i32 for AArch64 Neon.
Jiangning Liu [Sun, 26 Jan 2014 04:55:53 +0000 (04:55 +0000)]
Improve pattern match from v1i8 to v1i32 for AArch64 Neon.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200119 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRemove unused typedef.
Rui Ueyama [Sun, 26 Jan 2014 04:50:15 +0000 (04:50 +0000)]
Remove unused typedef.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200118 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agollvm-readobj: add support for PE32+ (Windows 64 bit executable).
Rui Ueyama [Sun, 26 Jan 2014 04:15:52 +0000 (04:15 +0000)]
llvm-readobj: add support for PE32+ (Windows 64 bit executable).

PE32+ supports 64 bit address space, but the file format remains 32 bit.
So its file format is pretty similar to PE32 (32 bit executable). The
differences compared to PE32 are (1) the lack of "BaseOfData" field and
(2) some of its data members are 64 bit.

In this patch, I added a new member function to get a PE32+ Header object to
COFFObjectFile class and made llvm-readobj to use it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200117 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRemove -print-hack-directives from a test where we already do the right thing.
Rafael Espindola [Sun, 26 Jan 2014 04:14:50 +0000 (04:14 +0000)]
Remove -print-hack-directives from a test where we already do the right thing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200116 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoMove tests that just use llc from test/MC/Mips to test/MC/Codegen.
Rafael Espindola [Sun, 26 Jan 2014 04:08:47 +0000 (04:08 +0000)]
Move tests that just use llc from test/MC/Mips to test/MC/Codegen.

This is an expanded version of r200064.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200115 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoImplement pattern match from v1xx to v1xx for AArch64 Neon.
Jiangning Liu [Sun, 26 Jan 2014 03:27:40 +0000 (03:27 +0000)]
Implement pattern match from v1xx to v1xx for AArch64 Neon.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200113 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[Sparc] Add support for sparc relocation types in ELF object file.
Venkatraman Govindaraju [Sun, 26 Jan 2014 03:21:28 +0000 (03:21 +0000)]
[Sparc] Add support for sparc relocation types in ELF object file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200112 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[AArch64 NEON] Add patterns for concat_vector on v2i32.
Kevin Qin [Sun, 26 Jan 2014 02:46:15 +0000 (02:46 +0000)]
[AArch64 NEON] Add patterns for concat_vector on v2i32.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200111 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[AArch64 NEON] Add test case for vector FP_ROUND.
Kevin Qin [Sun, 26 Jan 2014 02:23:33 +0000 (02:23 +0000)]
[AArch64 NEON] Add test case for vector FP_ROUND.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200110 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[AArch64 NEON] Fix pattern match failed on FP_ROUND from v1f128 to v1f64.
Kevin Qin [Sun, 26 Jan 2014 02:19:35 +0000 (02:19 +0000)]
[AArch64 NEON] Fix pattern match failed on FP_ROUND from v1f128 to v1f64.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200109 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoremoving duplicate enum value
Venkatraman Govindaraju [Sat, 25 Jan 2014 23:50:21 +0000 (23:50 +0000)]
removing duplicate enum value

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200104 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoMissing ELF relocations for Sparc.
Venkatraman Govindaraju [Sat, 25 Jan 2014 23:40:07 +0000 (23:40 +0000)]
Missing ELF relocations for Sparc.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200103 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRe-enabling MCJIT tests on ARM
Renato Golin [Sat, 25 Jan 2014 23:38:08 +0000 (23:38 +0000)]
Re-enabling MCJIT tests on ARM

After several refactorings on the MCJIT remote communication, things are
finally looking good on Clang-compiled LLVM regarding MCJIT remote tests,
so I'm re-enabling them to see how the self-hosting buildbot behaves over
a longer period.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200102 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[Sparc] Add sparc to the list of XFAIL architecture. It seems that the llvm-cov test...
Venkatraman Govindaraju [Sat, 25 Jan 2014 22:54:47 +0000 (22:54 +0000)]
[Sparc] Add sparc to the list of XFAIL architecture. It seems that the llvm-cov test is not supported in big-endian architectures.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200101 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoSet displacementSize to 1 for instrucitons with mod==0x1. Fixes PR17310. Modified...
Craig Topper [Sat, 25 Jan 2014 22:48:43 +0000 (22:48 +0000)]
Set displacementSize to 1 for instrucitons with mod==0x1. Fixes PR17310. Modified from patch by James Courtier-Dutton.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200100 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAdd a TBAA CodeGen failure test case
Hal Finkel [Sat, 25 Jan 2014 20:16:36 +0000 (20:16 +0000)]
Add a TBAA CodeGen failure test case

I disabled the use of TBAA in CodeGen in r200093. This adds a test case that
demonstrates the problems with inttoptr and TBAA in CodeGen (and, specifically,
the problem that causes LLVM to miscompile itself in Release mode). This test
will currently fail if -use-tbaa-in-sched-mi is enabled.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200097 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoClean up hack which is no longer needed after r198617. No functionality change.
Evan Cheng [Sat, 25 Jan 2014 19:51:19 +0000 (19:51 +0000)]
Clean up hack which is no longer needed after r198617. No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200095 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoXFAIL test/CodeGen/SystemZ/alias-01.ll which requires CodeGen TBAA
Hal Finkel [Sat, 25 Jan 2014 19:31:44 +0000 (19:31 +0000)]
XFAIL test/CodeGen/SystemZ/alias-01.ll which requires CodeGen TBAA

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200094 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoDisable the use of TBAA when using AA in CodeGen
Hal Finkel [Sat, 25 Jan 2014 19:24:54 +0000 (19:24 +0000)]
Disable the use of TBAA when using AA in CodeGen

There are currently two issues, of which I currently know, that prevent TBAA
from being correctly usable in CodeGen:

  1. Stack coloring does not update TBAA when merging allocas. This is easy
     enough to fix, but is not the largest problem.

  2. CGP inserts ptrtoint/inttoptr pairs when sinking address computations.
     Because BasicAA does not handle inttoptr, we'll often miss basic type punning
     idioms that we need to catch so we don't miscompile real-world code (like LLVM).

I don't yet have a small test case for this, but this fixes self hosting a
non-asserts build of LLVM on PPC64 when using -enable-aa-sched-mi and -misched=shuffle.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200093 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoDon't use EnforceSmallerThan for EnforceVectorSubVectorTypeIs. EnforceSmallerThan...
Craig Topper [Sat, 25 Jan 2014 17:40:33 +0000 (17:40 +0000)]
Don't use EnforceSmallerThan for EnforceVectorSubVectorTypeIs. EnforceSmallerThan doesn't handle vectors quite right and should really enforce that vectors have the same number of elements. Add explicit checks for vector element count differing in EnforceVectorSubVectorTypeIs instead. This removes some unnecessary type checks in X86GenDAGISel.inc.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200091 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoFix "llvm-objdump -d -r" to show relocations inline for ELF files
Mark Seaborn [Sat, 25 Jan 2014 17:38:19 +0000 (17:38 +0000)]
Fix "llvm-objdump -d -r" to show relocations inline for ELF files

This fixes a regression introduced by r182908, which broke
llvm-objdump's ability to display relocations inline in a disassembly
dump for ELF object files.

That change removed a SectionRelocMap from Object/ELF.h, which we
recreate in llvm-objdump.cpp.

I discovered this regression via an out-of-tree test
(test/NaCl/X86/pnacl-hides-sandbox-x86-64.ll) which used llvm-objdump.

Note that the "Unknown" string in the test output on i386 isn't quite
right, but this appears to be a pre-existing bug.

Differential Revision: http://llvm-reviews.chandlerc.com/D2559

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200090 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoFix typo in commment tyep->type.
Craig Topper [Sat, 25 Jan 2014 17:34:23 +0000 (17:34 +0000)]
Fix typo in commment tyep->type.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200089 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAdd combiner-aa-only-func (debug only)
Hal Finkel [Sat, 25 Jan 2014 17:32:39 +0000 (17:32 +0000)]
Add combiner-aa-only-func (debug only)

This option (which is !NDEBUG only) allows restricting the use of alias
analysis in DAGCombiner to a specific function. This has proved extremely
valuable to isolating bugs related to this feature, and mirrors the
misched-only-func option provided by the new instruction scheduler.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200088 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoImprove descriptions of combiner-alias-analysis and combiner-global-alias-analysis
Hal Finkel [Sat, 25 Jan 2014 17:32:37 +0000 (17:32 +0000)]
Improve descriptions of combiner-alias-analysis and combiner-global-alias-analysis

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200087 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoReverting r199886 (Prevent repetitive warnings for unrecognized processors and features)
Artyom Skrobov [Sat, 25 Jan 2014 16:56:18 +0000 (16:56 +0000)]
Reverting r199886 (Prevent repetitive warnings for unrecognized processors and features)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200083 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAdded .DS_Store entry in .gitignore for ignoring .DS_Store files in the source
Rafael Espindola [Sat, 25 Jan 2014 15:15:16 +0000 (15:15 +0000)]
Added .DS_Store entry in .gitignore for ignoring .DS_Store files in the source
tree generated by OS X.

Patch by Abhay Kadam!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200079 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoThis reverts commit r200064 and r200051.
Rafael Espindola [Sat, 25 Jan 2014 15:06:56 +0000 (15:06 +0000)]
This reverts commit r200064 and r200051.

r200064 depends on r200051.

r200051 is broken: I tries to replace .mips_hack_elf_flags, which is a good
thing, but what it replaces it with is even worse.

The new emitMipsELFFlags it adds corresponds to no assembly directive, is not
marked as a hack and is not even printed to the .s file.

The patch also introduces more uses of hasRawTextSupport.

The correct way to remove .mips_hack_elf_flags is to have the mips target
streamer handle the default flags (and command line options). That way the
same code path is used for asm and obj. The streamer interface should *really*
correspond to what is printed in the .s file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200078 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[LPM] Conclude my immediate work by making the LoopVectorizer
Chandler Carruth [Sat, 25 Jan 2014 10:01:55 +0000 (10:01 +0000)]
[LPM] Conclude my immediate work by making the LoopVectorizer
a FunctionPass. With this change the loop vectorizer no longer is a loop
pass and can readily depend on function analyses. In particular, with
this change we no longer have to form a loop pass manager to run the
loop vectorizer which simplifies the entire pass management of LLVM.

The next step here is to teach the loop vectorizer to leverage profile
information through the profile information providing analysis passes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200074 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoUse isConcrete and getConcrete instead of using TypeVec directly.
Craig Topper [Sat, 25 Jan 2014 05:33:48 +0000 (05:33 +0000)]
Use isConcrete and getConcrete instead of using TypeVec directly.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200071 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoFix EnforceSmallerThan to check !hasVectorTypes on the other type instead of this...
Craig Topper [Sat, 25 Jan 2014 05:17:38 +0000 (05:17 +0000)]
Fix EnforceSmallerThan to check !hasVectorTypes on the other type instead of this type to force this type to be scalar.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200070 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[LPM] Make LCSSA a utility with a FunctionPass that applies it to all
Chandler Carruth [Sat, 25 Jan 2014 04:07:24 +0000 (04:07 +0000)]
[LPM] Make LCSSA a utility with a FunctionPass that applies it to all
the loops in a function, and teach LICM to work in the presance of
LCSSA.

Previously, LCSSA was a loop pass. That made passes requiring it also be
loop passes and unable to depend on function analysis passes easily. It
also caused outer loops to have a different "canonical" form from inner
loops during analysis. Instead, we go into LCSSA form and preserve it
through the loop pass manager run.

Note that this has the same problem as LoopSimplify that prevents
enabling its verification -- loop passes which run at the end of the loop
pass manager and don't preserve these are valid, but the subsequent loop
pass runs of outer loops that do preserve this pass trigger too much
verification and fail because the inner loop no longer verifies.

The other problem this exposed is that LICM was completely unable to
handle LCSSA form. It didn't preserve it and it actually would give up
on moving instructions in many cases when they were used by an LCSSA phi
node. I've taught LICM to support detecting LCSSA-form PHI nodes and to
hoist and sink around them. This may actually let LICM fire
significantly more because we put everything into LCSSA form to rotate
the loop before running LICM. =/ Now LICM should handle that fine and
preserve it correctly. The down side is that LICM has to require LCSSA
in order to preserve it. This is just a fact of life for LCSSA. It's
entirely possible we should completely remove LCSSA from the optimizer.

The test updates are essentially accomodating LCSSA phi nodes in the
output of LICM, and the fact that we now completely sink every
instruction in ashr-crash below the loop bodies prior to unrolling.

With this change, LCSSA is computed only three times in the pass
pipeline. One of them could be removed (and potentially a SCEV run and
a separate LoopPassManager entirely!) if we had a LoopPass variant of
InstCombine that ran InstCombine on the loop body but refused to combine
away LCSSA PHI nodes. Currently, this also prevents loop unrolling from
being in the same loop pass manager is rotate, LICM, and unswitch.

There is one thing that I *really* don't like -- preserving LCSSA in
LICM is quite expensive. We end up having to re-run LCSSA twice for some
loops after LICM runs because LICM can undo LCSSA both in the current
loop and the parent loop. I don't really see good solutions to this
other than to completely move away from LCSSA and using tools like
SSAUpdater instead.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200067 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRemove an easy use of EmitRawText from PPC.
Rafael Espindola [Sat, 25 Jan 2014 02:35:56 +0000 (02:35 +0000)]
Remove an easy use of EmitRawText from PPC.

This makes lib/Target/PowerPC EmitRawText free.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200065 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[Mips] Move 2 test cases from MC to CodeGen.
Jack Carter [Sat, 25 Jan 2014 02:14:14 +0000 (02:14 +0000)]
[Mips] Move 2 test cases from MC to CodeGen.

No code changes. Just reassignment of test case files.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200064 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRevert "Revert "Add Constant Hoisting Pass" (r200034)"
Juergen Ributzka [Sat, 25 Jan 2014 02:02:55 +0000 (02:02 +0000)]
Revert "Revert "Add Constant Hoisting Pass" (r200034)"

This reverts commit r200058 and adds the using directive for
ARMTargetTransformInfo to silence two g++ overload warnings.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200062 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoFix llvm-dis to print the inalloca bit on allocas.
Reid Kleckner [Sat, 25 Jan 2014 01:24:06 +0000 (01:24 +0000)]
Fix llvm-dis to print the inalloca bit on allocas.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200059 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRevert "Add Constant Hoisting Pass" (r200034)
Hans Wennborg [Sat, 25 Jan 2014 01:18:18 +0000 (01:18 +0000)]
Revert "Add Constant Hoisting Pass" (r200034)

This commit caused -Woverloaded-virtual warnings. The two new
TargetTransformInfo::getIntImmCost functions were only added to the superclass,
and to the X86 subclass. The other targets were not updated, and the
warning highlighted this by pointing out that e.g. ARMTTI::getIntImmCost was
hiding the two new getIntImmCost variants.

We could pacify the warning by adding "using TargetTransformInfo::getIntImmCost"
to the various subclasses, or turning it off, but I suspect that it's wrong to
leave the functions unimplemnted in those targets. The default implementations
return TCC_Free, which I don't think is right e.g. for ARM.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200058 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agollvm-objdump: Some style cleanups to follow LLVM coding style
Mark Seaborn [Sat, 25 Jan 2014 00:32:01 +0000 (00:32 +0000)]
llvm-objdump: Some style cleanups to follow LLVM coding style

Rename "ec" to "EC", and rename some iterators.

Then fix whitespace using clang-format-diff.

(As requested in http://llvm-reviews.chandlerc.com/D2559)

Differential Revision: http://llvm-reviews.chandlerc.com/D2594

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200053 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[Mips] TargetStreamer ELF flag Support for default and commandline options.
Jack Carter [Sat, 25 Jan 2014 00:24:07 +0000 (00:24 +0000)]
[Mips] TargetStreamer ELF flag Support for default and commandline options.

This patch uses a common MipsTargetSteamer interface for both
MipsAsmPrinter and MipsAsmParser for recording default and commandline
driven directives that affect ELF header flags.

It has been noted that the .ll tests affected by this patch belong in
test/Codegen/Mips. I will move them in a separate patch.

Also, a number of directives do not get expressed by AsmPrinter in the
resultant .s assembly such as setting the correct ASI. I have noted this
in the tests and they will be addressed in later patches.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200051 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoTypo fix.
Aaron Ballman [Fri, 24 Jan 2014 23:40:08 +0000 (23:40 +0000)]
Typo fix.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200050 91177308-0d34-0410-b5e6-96231b3b80d8

10 years ago[AArch64] Removed unused i8 type from FPR8 register class.
Ana Pazos [Fri, 24 Jan 2014 22:36:53 +0000 (22:36 +0000)]
[AArch64] Removed unused i8 type from FPR8 register class.

The i8 type is not registered with any register class.
This causes a segmentation fault in MachineLICM::getRegisterClassIDAndCost.

The code selects the first type associated with register class FPR8,
which happens to be i8.
It uses this type (i8) to get the representative class pointer, which is 0.
It then uses this pointer to access a field, resulting in segmentation fault.

Since i8 type is not being used for printing any neon instruction
we can safely remove it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200046 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoFix c++03 build.
Rafael Espindola [Fri, 24 Jan 2014 21:52:44 +0000 (21:52 +0000)]
Fix c++03 build.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200042 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoMake ObjectFile ownership of the MemoryBuffer optional.
Rafael Espindola [Fri, 24 Jan 2014 21:32:21 +0000 (21:32 +0000)]
Make ObjectFile ownership of the MemoryBuffer optional.

This allows llvm-ar to mmap the input files only once.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200040 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoSupport/COFF: Fix PEHeader struct, and define PE32Header as its alias.
Rui Ueyama [Fri, 24 Jan 2014 20:54:10 +0000 (20:54 +0000)]
Support/COFF: Fix PEHeader struct, and define PE32Header as its alias.

This change does not affect anything because everybody seems to be using
Object/COFF.h instead. But the definition is not for PE32 but for PE32+,
so fix it anyway.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200038 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRemove TGValueTypes.cpp from CMakeLists.txt which I forgot to do in r200036.
Craig Topper [Fri, 24 Jan 2014 20:51:32 +0000 (20:51 +0000)]
Remove TGValueTypes.cpp from CMakeLists.txt which I forgot to do in r200036.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200037 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoReplace tablegen uses of EVT with MVT. Add isOverloaded() to MVT to facilitate. Remov...
Craig Topper [Fri, 24 Jan 2014 20:50:47 +0000 (20:50 +0000)]
Replace tablegen uses of EVT with MVT. Add isOverloaded() to MVT to facilitate. Remove TGValueTypes.cpp since its unused now (and may have been before).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200036 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAdd Constant Hoisting Pass
Juergen Ributzka [Fri, 24 Jan 2014 20:18:00 +0000 (20:18 +0000)]
Add Constant Hoisting Pass

Retry commit r200022 with a fix for the build bot errors. Constant expressions
have (unlike instructions) module scope use lists and therefore may have users
in different functions. The fix is to simply ignore these out-of-function uses.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200034 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoFix DAGCombiner::GatherAllAliases to account for non-chain dependencies
Hal Finkel [Fri, 24 Jan 2014 20:12:02 +0000 (20:12 +0000)]
Fix DAGCombiner::GatherAllAliases to account for non-chain dependencies

DAGCombiner::GatherAllAliases, which is only used when AA used is enabled
during DAGCombine, had a fundamentally incorrect assumption for which this
change compensates. GatherAllAliases, which is used to find aliasing
predecessor chain nodes (so that a better chain can be selected for a load or
store to enable subsequent optimizations) assumed that walking up the chain
would always catch all possibly-aliasing loads and stores. This is not true: To
really find all aliases, we also need to search for aliases through the value
operand of a store, etc.  Consider the following situation:

  Token1 = ...
  L1 = load Token1, %52
  S1 = store Token1, L1, %51
  L2 = load Token1, %52+8
  S2 = store Token1, L2, %51+8
  Token2 = Token(S1, S2)
  L3 = load Token2, %53
  S3 = store Token2, L3, %52
  L4 = load Token2, %53+8
  S4 = store Token2, L4, %52+8

If we search for aliases of S3 (which loads address %52), and we look only
through the chain, then we'll miss the trivial dependence on L1 (which loads
from %52). We then might change all loads and stores to use Token1 as their
chain operand, which could result in copying %53 into %52 before copying
%52 into %51 (which should happen first).

The problem is, however, that searching for such data dependencies can become
expensive, and the cost is not directly related to the chain depth. Instead,
we'll rule out such configurations by insisting that we've visited all chain
users (except for users of the original chain, which is not necessary).  When
doing this, we need to look through nodes we don't care about (otherwise,
things like register copies will interfere with trivial use cases).

Unfortunately, I don't have a small test case for this problem. Creating the
underlying situation is not hard (a pair of memcpys will do it), but arranging
for the default instruction schedule to be incorrect is very fragile.

This unbreaks self hosting on PPC64 when using
-mllvm -combiner-global-alias-analysis -mllvm -combiner-alias-analysis.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200033 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoVerify that attributes are not lost during linking.
Bill Wendling [Fri, 24 Jan 2014 19:20:15 +0000 (19:20 +0000)]
Verify that attributes are not lost during linking.

We don't want to lose attributes when a function decl without them is merged
with a function decl that has them.
PR2382

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200030 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoInstCombine: Don't try to use aggregate elements of ConstantExprs.
Benjamin Kramer [Fri, 24 Jan 2014 19:02:37 +0000 (19:02 +0000)]
InstCombine: Don't try to use aggregate elements of ConstantExprs.

PR18600.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200028 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAdd a testcase for the changes in r199938.
Lang Hames [Fri, 24 Jan 2014 19:00:19 +0000 (19:00 +0000)]
Add a testcase for the changes in r199938.

<rdar://problem/15611947>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200027 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRevert "Add Constant Hoisting Pass"
Juergen Ributzka [Fri, 24 Jan 2014 18:40:30 +0000 (18:40 +0000)]
Revert "Add Constant Hoisting Pass"

This reverts commit r200022 to unbreak the build bots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200024 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoRestrict FindBetterChain DAG combines to unindexed nodes
Hal Finkel [Fri, 24 Jan 2014 18:25:26 +0000 (18:25 +0000)]
Restrict FindBetterChain DAG combines to unindexed nodes

These transformations obviously won't work for indexed (pre/post-inc) loads and
stores. In practice, I'm not sure there is any benefit to enabling them for
indexed nodes because other transformations that these might enable likely also
won't handle indexed nodes.

I don't have an in-tree test case that hits this problem, but an upcoming bug
fix will make it much more likely.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200023 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAdd Constant Hoisting Pass
Juergen Ributzka [Fri, 24 Jan 2014 18:23:08 +0000 (18:23 +0000)]
Add Constant Hoisting Pass

This pass identifies expensive constants to hoist and coalesces them to
better prepare it for SelectionDAG-based code generation. This works around the
limitations of the basic-block-at-a-time approach.

First it scans all instructions for integer constants and calculates its
cost. If the constant can be folded into the instruction (the cost is
TCC_Free) or the cost is just a simple operation (TCC_BASIC), then we don't
consider it expensive and leave it alone. This is the default behavior and
the default implementation of getIntImmCost will always return TCC_Free.

If the cost is more than TCC_BASIC, then the integer constant can't be folded
into the instruction and it might be beneficial to hoist the constant.
Similar constants are coalesced to reduce register pressure and
materialization code.

When a constant is hoisted, it is also hidden behind a bitcast to force it to
be live-out of the basic block. Otherwise the constant would be just
duplicated and each basic block would have its own copy in the SelectionDAG.
The SelectionDAG recognizes such constants as opaque and doesn't perform
certain transformations on them, which would create a new expensive constant.

This optimization is only applied to integer constants in instructions and
simple (this means not nested) constant cast experessions. For example:
%0 = load i64* inttoptr (i64 big_constant to i64*)

Reviewed by Eric

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200022 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoAdd final and owerride keywords to TargetTransformInfo's subclasses.
Juergen Ributzka [Fri, 24 Jan 2014 18:22:59 +0000 (18:22 +0000)]
Add final and owerride keywords to TargetTransformInfo's subclasses.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200021 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoDoxify comments
Juergen Ributzka [Fri, 24 Jan 2014 18:22:55 +0000 (18:22 +0000)]
Doxify comments

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200020 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoFix known typos
Alp Toker [Fri, 24 Jan 2014 17:20:08 +0000 (17:20 +0000)]
Fix known typos

Sweep the codebase for common typos. Includes some changes to visible function
names that were misspelt.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200018 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoReport lli remote IO errors consistently
Alp Toker [Fri, 24 Jan 2014 17:18:52 +0000 (17:18 +0000)]
Report lli remote IO errors consistently

This enables IO error reports in both the child and server processes.

The scheme still isn't entirely satisfactory and output is jumbled but it beats
having no output at all. This will hopefully unblock ARM support (PR18057).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200017 91177308-0d34-0410-b5e6-96231b3b80d8

10 years agoInstSimplify: Make shift, select and GEP simplifications vector-aware.
Benjamin Kramer [Fri, 24 Jan 2014 17:09:53 +0000 (17:09 +0000)]
InstSimplify: Make shift, select and GEP simplifications vector-aware.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200016 91177308-0d34-0410-b5e6-96231b3b80d8