platform/upstream/llvm.git
8 years agoAMDGPU: Remove leftover implicit operands when folding immediates
Matt Arsenault [Thu, 6 Oct 2016 17:54:30 +0000 (17:54 +0000)]
AMDGPU: Remove leftover implicit operands when folding immediates

When constant folding an operation to a copy or an immediate
mov, the implicit uses/defs of the old instruction were left behind,
e.g. replacing v_or_b32 left the implicit exec use on the new copy.

llvm-svn: 283471

8 years agoReapply "AMDGPU: Support using tablegened MC pseudo expansions"
Matt Arsenault [Thu, 6 Oct 2016 17:19:11 +0000 (17:19 +0000)]
Reapply "AMDGPU: Support using tablegened MC pseudo expansions"

Fix bad merge

llvm-svn: 283470

8 years agoRevert "AMDGPU: Support using tablegened MC pseudo expansions"
Matt Arsenault [Thu, 6 Oct 2016 17:08:01 +0000 (17:08 +0000)]
Revert "AMDGPU: Support using tablegened MC pseudo expansions"

llvm-svn: 283469

8 years agoThese test cases don't test different debug info formats.
Jim Ingham [Thu, 6 Oct 2016 17:01:00 +0000 (17:01 +0000)]
These test cases don't test different debug info formats.

llvm-svn: 283468

8 years agoAMDGPU: Support using tablegened MC pseudo expansions
Matt Arsenault [Thu, 6 Oct 2016 16:56:41 +0000 (16:56 +0000)]
AMDGPU: Support using tablegened MC pseudo expansions

Make the necessary refactorings to make use of PseudoInstExpansion

llvm-svn: 283467

8 years ago[ubsan] Turn on 'Has CXXABI' to enable support for -fsanitize=vptr on Darwin
Vedant Kumar [Thu, 6 Oct 2016 16:45:40 +0000 (16:45 +0000)]
[ubsan] Turn on 'Has CXXABI' to enable support for -fsanitize=vptr on Darwin

Differential Revision: https://reviews.llvm.org/D24990

llvm-svn: 283466

8 years ago[docs] Add PR to Lexicon
Brian Gesiak [Thu, 6 Oct 2016 16:39:22 +0000 (16:39 +0000)]
[docs] Add PR to Lexicon

Summary:
The acronym PR could be ambiguous to some users, especially those who
are used to interpreting it as GitHub's "pull request".

Reviewers: ddunbar, jordan_rose, void, beanz

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D25331

llvm-svn: 283465

8 years agoBranchRelaxation: Support expanding unconditional branches
Matt Arsenault [Thu, 6 Oct 2016 16:20:41 +0000 (16:20 +0000)]
BranchRelaxation: Support expanding unconditional branches

AMDGPU needs to expand unconditional branches in a new
block with an indirect branch.

llvm-svn: 283464

8 years ago[Hexagon] Avoid replacing full regs with subregisters in tied operands
Krzysztof Parzyszek [Thu, 6 Oct 2016 16:18:04 +0000 (16:18 +0000)]
[Hexagon] Avoid replacing full regs with subregisters in tied operands

Doing so will result in the two-address pass generating incorrect code.

llvm-svn: 283463

8 years agoBranchRelaxation: Account for function alignment
Matt Arsenault [Thu, 6 Oct 2016 16:00:58 +0000 (16:00 +0000)]
BranchRelaxation: Account for function alignment

llvm-svn: 283462

8 years agoImprove test for Intel(R) MPX registers.
Valentina Giusti [Thu, 6 Oct 2016 15:49:10 +0000 (15:49 +0000)]
Improve test for Intel(R) MPX registers.

Summary:
Let the inferior test code determine if CPU and kernel support Intel(R)
MPX and cleanup test script.

Differential Revision: https://reviews.llvm.org/D25328

llvm-svn: 283461

8 years ago[OpenMP] Check if the template specialization is mappable instead of specialized...
David Sheinkman [Thu, 6 Oct 2016 15:47:36 +0000 (15:47 +0000)]
[OpenMP] Check if the template specialization is mappable instead of specialized template Differential Revision: https://reviews.llvm.org/D25252

llvm-svn: 283460

8 years agoMove AArch64BranchRelaxation to generic code
Matt Arsenault [Thu, 6 Oct 2016 15:38:53 +0000 (15:38 +0000)]
Move AArch64BranchRelaxation to generic code

llvm-svn: 283459

8 years agoAArch64: Move remaining target specific BranchRelaxation bits to TII
Matt Arsenault [Thu, 6 Oct 2016 15:38:09 +0000 (15:38 +0000)]
AArch64: Move remaining target specific BranchRelaxation bits to TII

llvm-svn: 283458

8 years ago[X86] Fix intel syntax push parsing bug
Nirav Dave [Thu, 6 Oct 2016 15:28:08 +0000 (15:28 +0000)]
[X86] Fix intel syntax push parsing bug

Change erroneous parsing of push immediate instructions in intel syntax
to default to pointer size by rewriting into the ATT style for matching.

This fixes PR22028.

Reviewers: majnemer, rnk

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D25288

llvm-svn: 283457

8 years agoRevert "Use StringRef in LTOModule implementation (NFC)"
Mehdi Amini [Thu, 6 Oct 2016 15:12:22 +0000 (15:12 +0000)]
Revert "Use StringRef in LTOModule implementation (NFC)"

This reverts commit r282997, a windows bot is asserting in
one test apparently.

llvm-svn: 283456

8 years agoCentralize sh_entsize checking.
Rafael Espindola [Thu, 6 Oct 2016 15:08:10 +0000 (15:08 +0000)]
Centralize sh_entsize checking.

llvm-svn: 283455

8 years agoRefactor to use getSectionContentsAsArray.
Rafael Espindola [Thu, 6 Oct 2016 14:47:04 +0000 (14:47 +0000)]
Refactor to use getSectionContentsAsArray.

This centralizes quite a bit of error checking.

llvm-svn: 283454

8 years agoRefactor duplicated typedefs. NFC.
Rafael Espindola [Thu, 6 Oct 2016 14:07:26 +0000 (14:07 +0000)]
Refactor duplicated typedefs. NFC.

llvm-svn: 283453

8 years agoMark issues 2514, 2519, 2536 and 2475 as done
Marshall Clow [Thu, 6 Oct 2016 13:59:18 +0000 (13:59 +0000)]
Mark issues 2514, 2519, 2536 and 2475 as done

llvm-svn: 283452

8 years agoGlobalISel: fix misuse of using declaration in test.
Tim Northover [Thu, 6 Oct 2016 13:57:31 +0000 (13:57 +0000)]
GlobalISel: fix misuse of using declaration in test.

Clang didn't diagnose it before. Oops.

llvm-svn: 283451

8 years ago[AMDGPU] Disassembler: print label names in branch instructions
Sam Kolton [Thu, 6 Oct 2016 13:46:08 +0000 (13:46 +0000)]
[AMDGPU] Disassembler: print label names in branch instructions

Summary: Add AMDGPUSymbolizer for finding names for labels from ELF symbol table.
Initialize MCObjectFileInfo with some default values.

Reviewers: vpykhtin, artem.tamazov, tstellarAMD

Subscribers: arsenm, kzhuravl, wdng, nhaehnle, yaxunl, tony-tye

Differential Revision: https://reviews.llvm.org/D24802

llvm-svn: 283450

8 years ago[RS4GC] Fix comment to show TODO. NFC
Anna Thomas [Thu, 6 Oct 2016 13:24:20 +0000 (13:24 +0000)]
[RS4GC] Fix comment to show TODO. NFC

llvm-svn: 283449

8 years agoAllocate after the early exit checks. NFC.
Vassil Vassilev [Thu, 6 Oct 2016 13:18:06 +0000 (13:18 +0000)]
Allocate after the early exit checks. NFC.

llvm-svn: 283448

8 years agoUse range loop. NFC.
Rafael Espindola [Thu, 6 Oct 2016 13:11:12 +0000 (13:11 +0000)]
Use range loop. NFC.

llvm-svn: 283447

8 years ago[RDF] Replace some expensive copies with references in range-based loops
Krzysztof Parzyszek [Thu, 6 Oct 2016 13:05:46 +0000 (13:05 +0000)]
[RDF] Replace some expensive copies with references in range-based loops

llvm-svn: 283446

8 years ago[RDF] Replace potentially unclear autos with real types
Krzysztof Parzyszek [Thu, 6 Oct 2016 13:05:13 +0000 (13:05 +0000)]
[RDF] Replace potentially unclear autos with real types

llvm-svn: 283445

8 years ago[modules] Allow VarDecls with initializers to use special var abbrev.
Vassil Vassilev [Thu, 6 Oct 2016 13:04:54 +0000 (13:04 +0000)]
[modules] Allow VarDecls with initializers to use special var abbrev.

Update storage sizes to fit the (past) changes in the VarDecl's data model.
Update some comments.

Patch partially reviewed by Richard Smith as part of https://reviews.llvm.org/D24508

llvm-svn: 283444

8 years ago[llvm-opt-report] Record VF, etc. correctly for multiple opts on one line
Hal Finkel [Thu, 6 Oct 2016 11:58:52 +0000 (11:58 +0000)]
[llvm-opt-report] Record VF, etc. correctly for multiple opts on one line

When there are multiple optimizations on one line, record the vectorization
factors, etc. correctly (instead of incorrectly substituting default values).

llvm-svn: 283443

8 years agoRevert "[ARM] Use __rt_div functions for divrem on Windows"
Diana Picus [Thu, 6 Oct 2016 11:24:29 +0000 (11:24 +0000)]
Revert "[ARM] Use __rt_div functions for divrem on Windows"

This reverts commit r283383 because it broke some of the bots:
undefined reference to ` __aeabi_uldivmod'

It affected (at least) clang-cmake-armv7-a15-selfhost,
clang-cmake-armv7-a15-selfhost and clang-native-arm-lnt.

llvm-svn: 283442

8 years ago[libcxx] Recover no-exceptions XFAILs - I
Asiri Rathnayake [Thu, 6 Oct 2016 11:15:41 +0000 (11:15 +0000)]
[libcxx] Recover no-exceptions XFAILs - I

First batch of changes to get some of these XFAILs working in the
no-exceptions libc++ variant.

Changed some XFAILs to UNSUPPORTED where the test is all about exception
handling. In other cases, used the test macros TEST_THROW and
TEST_HAS_NO_EXCEPTIONS to conditionally exclude those parts of the test
that concerns exception handling behaviour.

Reviewers: EricWF, mclow.lists

Differential revision: https://reviews.llvm.org/D24562

llvm-svn: 283441

8 years ago[llvm-opt-report] Print line numbers starting from 1
Hal Finkel [Thu, 6 Oct 2016 11:11:11 +0000 (11:11 +0000)]
[llvm-opt-report] Print line numbers starting from 1

Line numbers should start from 1, not 2.

llvm-svn: 283440

8 years agoTest commit access (NFC)
Henric Karlsson [Thu, 6 Oct 2016 10:58:41 +0000 (10:58 +0000)]
Test commit access (NFC)

llvm-svn: 283439

8 years ago[ESan] [MIPS] Fix workingset-signal-posix.cpp on MIPS
Sagar Thakur [Thu, 6 Oct 2016 10:21:42 +0000 (10:21 +0000)]
[ESan] [MIPS] Fix workingset-signal-posix.cpp on MIPS

Used uptr for __sanitizer_kernel_sigset_t.sig to avoid byte order issues on big endian systems

Reviewd by bruening.
Differential: D24332

llvm-svn: 283438

8 years agoAMDGPU: Partially fix reported code size for some instructions
Matt Arsenault [Thu, 6 Oct 2016 10:13:23 +0000 (10:13 +0000)]
AMDGPU: Partially fix reported code size for some instructions

These ones need to have the size on the pseudo instruction set for
getInstSizeInBytes to work correctly. These also have a statically
known size.

llvm-svn: 283437

8 years agoAdd test-cases which demontrate pr30561
Zvi Rackover [Thu, 6 Oct 2016 10:04:00 +0000 (10:04 +0000)]
Add test-cases which demontrate pr30561

llvm-svn: 283436

8 years ago[ESan][MIPS] Adds support for MIPS64
Sagar Thakur [Thu, 6 Oct 2016 09:58:11 +0000 (09:58 +0000)]
[ESan][MIPS] Adds support for MIPS64

With this patch 12 out of 13 tests are passing.

Reviewed by zhaoqin.
Differential: D23799

llvm-svn: 283435

8 years ago[ValueTracking] Teach computeKnownBits and ComputeNumSignBits to look through Extract...
Bjorn Pettersson [Thu, 6 Oct 2016 09:56:21 +0000 (09:56 +0000)]
[ValueTracking] Teach computeKnownBits and ComputeNumSignBits to look through ExtractElement.

Summary:
The computeKnownBits and ComputeNumSignBits functions in ValueTracking can now do a simple look-through of ExtractElement.

Reviewers: majnemer, spatel

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D24955

llvm-svn: 283434

8 years ago[EfficiencySanitizer] Adds shadow memory parameters for 40-bit virtual memory address.
Sagar Thakur [Thu, 6 Oct 2016 09:52:06 +0000 (09:52 +0000)]
[EfficiencySanitizer] Adds shadow memory parameters for 40-bit virtual memory address.

Adding 40-bit shadow memory parameters because MIPS64 uses 40-bit virtual memory addresses.

Reviewed by rengolin.
Differential: https://reviews.llvm.org/D23801

llvm-svn: 283433

8 years ago[Sema] Fix PR30520: Handle incomplete field types in transparent_union unions
Alex Lorenz [Thu, 6 Oct 2016 09:47:29 +0000 (09:47 +0000)]
[Sema] Fix PR30520: Handle incomplete field types in transparent_union unions

This commit fixes a crash that happens when clang is analyzing a
transparent_union attribute on a union which has a field with incomplete type.

rdar://28630028

Differential Revision: https://reviews.llvm.org/D25273

llvm-svn: 283432

8 years ago[ELF] Don't fail if undefined symbol is not used
Eugene Leviant [Thu, 6 Oct 2016 09:45:04 +0000 (09:45 +0000)]
[ELF] Don't fail if undefined symbol is not used

Differential revision: https://reviews.llvm.org/D25240

llvm-svn: 283431

8 years agoAdd missing -no-canonical-prefixes.
Benjamin Kramer [Thu, 6 Oct 2016 09:40:37 +0000 (09:40 +0000)]
Add missing -no-canonical-prefixes.

llvm-svn: 283430

8 years ago[ELF] Linker script: implement LOADADDR
Eugene Leviant [Thu, 6 Oct 2016 09:39:28 +0000 (09:39 +0000)]
[ELF] Linker script: implement LOADADDR

Differential revision: https://reviews.llvm.org/D24298

llvm-svn: 283429

8 years agoFix PR30440: Initialize FunctionTypeDepth in CXXNameMangler
Alex Lorenz [Thu, 6 Oct 2016 09:37:15 +0000 (09:37 +0000)]
Fix PR30440: Initialize FunctionTypeDepth in CXXNameMangler

This commit fixes PR 30440 by initializing CXXNameMangler's FunctionTypeDepth
in the two constructors added in r274222 (The commit that caused this
regression).

rdar://28455269

Differential Revision: https://reviews.llvm.org/D24932

llvm-svn: 283428

8 years agofix build on cygwin
Nuno Lopes [Thu, 6 Oct 2016 09:32:16 +0000 (09:32 +0000)]
fix build on cygwin
Cygwin has dlfcn.h, but no Dl_info

llvm-svn: 283427

8 years ago[ELF] - Make checks in ObjectFile<ELFT>::getSection() stricter.
George Rimar [Thu, 6 Oct 2016 09:17:55 +0000 (09:17 +0000)]
[ELF] - Make checks in ObjectFile<ELFT>::getSection() stricter.

This patch makes the check for null section stricter,
so it is only allowed for STT_SECTION symbols now.

Differential revision: https://reviews.llvm.org/D25231

llvm-svn: 283426

8 years ago[clang-move] Move comments which are associated with the moved class.
Haojian Wu [Thu, 6 Oct 2016 08:59:24 +0000 (08:59 +0000)]
[clang-move] Move comments which are associated with the moved class.

Reviewers: ioeric

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D25227

llvm-svn: 283425

8 years ago[clang-move] Cleanup around replacements.
Haojian Wu [Thu, 6 Oct 2016 08:29:32 +0000 (08:29 +0000)]
[clang-move] Cleanup around replacements.

Summary:
cleanup the remaining empty namespace after moving out the
class defintitions.

Reviewers: ioeric

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D25282

llvm-svn: 283424

8 years ago[ARM] Constant pool promotion - fix alignment calculation
James Molloy [Thu, 6 Oct 2016 07:56:00 +0000 (07:56 +0000)]
[ARM] Constant pool promotion - fix alignment calculation

Global variables are GlobalValues, so they have explicit alignment. Querying
DataLayout for the alignment was incorrect.

Testcase added.

llvm-svn: 283423

8 years ago[ARM] Improve testcase for r283323
James Molloy [Thu, 6 Oct 2016 07:44:05 +0000 (07:44 +0000)]
[ARM] Improve testcase for r283323

We can work around a shortcoming of FileCheck by using {{\[}} to match a square
bracket before a [[ sequence.

Thanks to Eli Friedman for the heads up!

llvm-svn: 283422

8 years ago[compiler-rt][XRay][NFC] clang-format XRay sources
Dean Michael Berris [Thu, 6 Oct 2016 07:09:40 +0000 (07:09 +0000)]
[compiler-rt][XRay][NFC] clang-format XRay sources

llvm-svn: 283421

8 years ago[Driver] Add driver support for Fuchsia
Petr Hosek [Thu, 6 Oct 2016 06:08:09 +0000 (06:08 +0000)]
[Driver] Add driver support for Fuchsia

Provide toolchain and tool support for Fuchsia operating system.
Fuchsia uses compiler-rt as the runtime library and libc++, libc++abi
and libunwind as the C++ standard library. lld is used as a default
linker.

Differential Revision: https://reviews.llvm.org/D25117

llvm-svn: 283420

8 years ago[Triple] Add triple for Fuchsia
Petr Hosek [Thu, 6 Oct 2016 05:17:26 +0000 (05:17 +0000)]
[Triple] Add triple for Fuchsia

Fuchsia is a new operating system.

Differential Revision: https://reviews.llvm.org/D25116

llvm-svn: 283419

8 years ago[libFuzzer] be more careful with memory usage, print peak rss in status lines
Kostya Serebryany [Thu, 6 Oct 2016 05:14:00 +0000 (05:14 +0000)]
[libFuzzer] be more careful with memory usage, print peak rss in status lines

llvm-svn: 283418

8 years agoTaking StringRef in Driver.h APIs instead of raw pointers (NFC)
Mehdi Amini [Thu, 6 Oct 2016 05:11:48 +0000 (05:11 +0000)]
Taking StringRef in Driver.h APIs instead of raw pointers (NFC)

llvm-svn: 283417

8 years agoUse llvm::raw_string_ostream instead of std::stringstream (NFC)
Mehdi Amini [Thu, 6 Oct 2016 04:26:16 +0000 (04:26 +0000)]
Use llvm::raw_string_ostream instead of std::stringstream (NFC)

As a side effect, this avoid having to call .data() on the StringRef.

llvm-svn: 283416

8 years ago[AMDGPU] Promote uniform i16 bitreverse intrinsic to i32
Konstantin Zhuravlyov [Thu, 6 Oct 2016 02:20:46 +0000 (02:20 +0000)]
[AMDGPU] Promote uniform i16 bitreverse intrinsic to i32

Differential Revision: https://reviews.llvm.org/D25121

llvm-svn: 283415

8 years agoFix build error on Android again.
Zachary Turner [Wed, 5 Oct 2016 23:51:13 +0000 (23:51 +0000)]
Fix build error on Android again.

This one was my fault since I can't compile Android.

llvm-svn: 283414

8 years agoConvert some Args index-based iteration to range-style iteration.
Zachary Turner [Wed, 5 Oct 2016 23:40:23 +0000 (23:40 +0000)]
Convert some Args index-based iteration to range-style iteration.

This is better for a number of reasons.  Mostly style, but also:

1) Signed-unsigned comparison warnings disappear since there is
   no loop index.
2) Iterating with the range-for style gives you back an entry
   that has more than just a const char*, so it's more efficient
   and more useful.
3) Makes code safter since the type system enforces that it's
   impossible to index out of bounds.

llvm-svn: 283413

8 years ago[libFuzzer] when re-running for lsan, don't look at the coverage
Kostya Serebryany [Wed, 5 Oct 2016 23:31:01 +0000 (23:31 +0000)]
[libFuzzer] when re-running for lsan, don't look at the coverage

llvm-svn: 283411

8 years ago[DAG] add tests to show missing checks for SDNode FMF
Sanjay Patel [Wed, 5 Oct 2016 23:20:32 +0000 (23:20 +0000)]
[DAG] add tests to show missing checks for SDNode FMF

The AVX attribute is added to remove noise caused by SSE's destructive insts.

llvm-svn: 283410

8 years ago[libFuzzer] refactoring to make -shrink=1 work for value profile, added a test.
Kostya Serebryany [Wed, 5 Oct 2016 22:56:21 +0000 (22:56 +0000)]
[libFuzzer] refactoring to make -shrink=1 work for value profile, added a test.

llvm-svn: 283409

8 years agoFix strict-aliasing violation in typeinfo::hash_code()
Eric Fiselier [Wed, 5 Oct 2016 22:55:10 +0000 (22:55 +0000)]
Fix strict-aliasing violation in typeinfo::hash_code()

Summary:
The current implementation of `hash_code()` for uniqued RTTI strings violates strict aliasing by dereferencing a type-punned pointer. Specifically it generates a `const char**` pointer from the address of the `__name` member before casting it to `const size_t*` and dereferencing it to get the hash. This is really just a complex and incorrect way of writing `reinterpret_cast<size_t>(__name)`.

This patch changes the conversion sequence so that it no longer contains UB.

Reviewers: howard.hinnant, mclow.lists

Subscribers: rjmccall, cfe-commits

Differential Revision: https://reviews.llvm.org/D24012

llvm-svn: 283408

8 years agoFix tests for Windows
Hal Finkel [Wed, 5 Oct 2016 22:48:13 +0000 (22:48 +0000)]
Fix tests for Windows

We need to match file names with both forward and backward slashes.

llvm-svn: 283407

8 years agoPR22924, PR22845, some of CWG1464: When checking the initializer for an array
Richard Smith [Wed, 5 Oct 2016 22:41:02 +0000 (22:41 +0000)]
PR22924, PR22845, some of CWG1464: When checking the initializer for an array
new expression, distinguish between the case of a constant and non-constant
initializer. In the former case, if the bound is erroneous (too many
initializer elements, bound is negative, or allocated size overflows), reject,
and take the bound into account when determining whether we need to
default-construct any elements. In the remanining cases, move the logic to
check for default-constructibility of trailing elements into the initialization
code rather than inventing a bogus array bound, to cope with cases where the
number of initialized elements is not the same as the number of initializer
list elements (this can happen due to string literal initialization or brace
elision).

This also fixes rejects-valid and crash-on-valid errors when initializing a
new'd array of character type from a braced string literal.

llvm-svn: 283406

8 years agoAdd missing #include from r283039. Found by modules build.
Richard Smith [Wed, 5 Oct 2016 22:40:54 +0000 (22:40 +0000)]
Add missing #include from r283039. Found by modules build.

llvm-svn: 283405

8 years agoAdd i386/x86_64 tests of the eh_frame augmentation code in the x86
Jason Molenda [Wed, 5 Oct 2016 22:37:01 +0000 (22:37 +0000)]
Add i386/x86_64 tests of the eh_frame augmentation code in the x86
insturction profiling.  Add a test that verifies that we reject a
32-bit only instruction in 64-bit (long) mode.

This wraps up all the testing I want to add for
x86AssemblyInspectionEngine.

llvm-svn: 283404

8 years ago[codeview] Truncate records to maximum record size near 64KB
Reid Kleckner [Wed, 5 Oct 2016 22:36:07 +0000 (22:36 +0000)]
[codeview] Truncate records to maximum record size near 64KB

If we don't truncate, LLVM asserts when the label difference doesn't fit
in a 16 bit field. This patch truncates two kinds of data: trailing null
terminated names in symbol records, and inline line tables. The inline
line table test that I have is too large (many MB), so I'm not checking
it in.

Hopefully fixes PR28264.

llvm-svn: 283403

8 years ago[llvm-opt-report] Distinguish inlined contexts when optimizations differ
Hal Finkel [Wed, 5 Oct 2016 22:25:33 +0000 (22:25 +0000)]
[llvm-opt-report] Distinguish inlined contexts when optimizations differ

How code is optimized sometimes, perhaps often, depends on the context into
which it was inlined. This change allows llvm-opt-report to track the
differences between the optimizations performed, or not, in different contexts,
and when these differ, display those differences.

For example, this code:

  $ cat /tmp/q.cpp
  void bar();
  void foo(int n) {
    for (int i = 0; i < n; ++i)
      bar();
  }

  void quack() {
    foo(4);
  }

  void quack2() {
    foo(4);
  }

will now produce this report:

  < /home/hfinkel/src/llvm/test/tools/llvm-opt-report/Inputs/q.cpp
   2         | void bar();
   3         | void foo(int n) {
   [[
    > foo(int):
   4         |   for (int i = 0; i < n; ++i)
    > quack(), quack2():
   4  U4     |   for (int i = 0; i < n; ++i)
   ]]
   5         |     bar();
   6         | }
   7         |
   8         | void quack() {
   9 I       |   foo(4);
  10         | }
  11         |
  12         | void quack2() {
  13 I       |   foo(4);
  14         | }
  15         |

Note that the tool has demangled the function names, and grouped the reports
associated with line 4. This shows that the loop on line 4 was unrolled by a
factor of 4 when inlined into the functions quack() and quack2(), but not in
the function foo(int) itself.

llvm-svn: 283402

8 years agoVerifier: Reject any unknown named MD nodes in the llvm.dbg namespace.
Adrian Prantl [Wed, 5 Oct 2016 22:15:37 +0000 (22:15 +0000)]
Verifier: Reject any unknown named MD nodes in the llvm.dbg namespace.

This came out of a discussion in https://reviews.llvm.org/D25285.

There used to be various other llvm.dbg.* nodes, but we don't support
upgrading them and we want to reserve the namespace for future uses.

This also removes an entirely obsolete and bitrotted testcase for PR7662.

Reapplies 283390 with a forgotten testcase.

llvm-svn: 283400

8 years agoRevert "Verifier: Reject any unknown named MD nodes in the llvm.dbg namespace."
Adrian Prantl [Wed, 5 Oct 2016 22:15:34 +0000 (22:15 +0000)]
Revert "Verifier: Reject any unknown named MD nodes in the llvm.dbg namespace."

Forgot to add a testcase in r283390.

llvm-svn: 283399

8 years agoAdd an llvm-opt-report tool to generate basic source-annotated optimization summaries
Hal Finkel [Wed, 5 Oct 2016 22:10:35 +0000 (22:10 +0000)]
Add an llvm-opt-report tool to generate basic source-annotated optimization summaries

LLVM now has the ability to record information from optimization remarks in a
machine-consumable YAML file for later analysis. This can be enabled in opt
(see r282539), and D25225 adds a Clang flag to do the same. This patch adds
llvm-opt-report, a tool to generate basic optimization "listing" files
(annotated sources with information about what optimizations were performed)
from one of these YAML inputs.

D19678 proposed to add this capability directly to Clang, but this more-general
YAML-based infrastructure was the direction we decided upon in that review
thread.

For this optimization report, I focused on making the output as succinct as
possible while providing information on inlining and loop transformations. The
goal here is that the source code should still be easily readable in the
report. My primary inspiration here is the reports generated by Cray's tools
(http://docs.cray.com/books/S-2496-4101/html-S-2496-4101/z1112823641oswald.html).
These reports are highly regarded within the HPC community. Intel's compiler,
for example, also has an optimization-report capability
(https://software.intel.com/sites/default/files/managed/55/b1/new-compiler-optimization-reports.pdf).

  $ cat /tmp/v.c
  void bar();
  void foo() { bar(); }

  void Test(int *res, int *c, int *d, int *p, int n) {
    int i;

  #pragma clang loop vectorize(assume_safety)
    for (i = 0; i < 1600; i++) {
      res[i] = (p[i] == 0) ? res[i] : res[i] + d[i];
    }

    for (i = 0; i < 16; i++) {
      res[i] = (p[i] == 0) ? res[i] : res[i] + d[i];
    }

    foo();

    foo(); bar(); foo();
  }

D25225 adds -fsave-optimization-record (and
-fsave-optimization-record=filename), and this would be used as follows:

  $ clang -O3 -o /tmp/v.o -c /tmp/v.c -fsave-optimization-record
  $ llvm-opt-report /tmp/v.yaml > /tmp/v.lst
  $ cat /tmp/v.lst

  < /tmp/v.c
   2          | void bar();
   3          | void foo() { bar(); }
   4          |
   5          | void Test(int *res, int *c, int *d, int *p, int n) {
   6          |   int i;
   7          |
   8          | #pragma clang loop vectorize(assume_safety)
   9     V4,2 |   for (i = 0; i < 1600; i++) {
  10          |     res[i] = (p[i] == 0) ? res[i] : res[i] + d[i];
  11          |   }
  12          |
  13  U16     |   for (i = 0; i < 16; i++) {
  14          |     res[i] = (p[i] == 0) ? res[i] : res[i] + d[i];
  15          |   }
  16          |
  17 I        |   foo();
  18          |
  19          |   foo(); bar(); foo();
     I        |   ^
     I        |                 ^
  20          | }

Each source line gets a prefix giving the line number, and a few columns for
important optimizations: inlining, loop unrolling and loop vectorization. An
'I' is printed next to a line where a function was inlined, a 'U' next to an
unrolled loop, and 'V' next to a vectorized loop. These are printed on the
relevant code line when that seems unambiguous, or on subsequent lines when
multiple potential options exist (messages, both positive and negative, from
the same optimization with different column numbers are taken to indicate
potential ambiguity). When on subsequent lines, a '^' is output in the relevant
column.

Annotated source for all relevant input files are put into the listing file
(each starting with '<' and then the file name).

You can disable having the unrolling/vectorization factors appear by using the
-s flag.

Differential Revision: https://reviews.llvm.org/D25262

llvm-svn: 283398

8 years agoAdd exact number of streams for reserved stream #s.
Rui Ueyama [Wed, 5 Oct 2016 22:08:58 +0000 (22:08 +0000)]
Add exact number of streams for reserved stream #s.

llvm-svn: 283397

8 years agoFixes for libc++ std::unordered_map data formatter against trunk
Enrico Granata [Wed, 5 Oct 2016 22:04:43 +0000 (22:04 +0000)]
Fixes for libc++ std::unordered_map data formatter against trunk

Fixes rdar://28237467

llvm-svn: 283396

8 years agoRemove extra semicolon
Reid Kleckner [Wed, 5 Oct 2016 21:46:56 +0000 (21:46 +0000)]
Remove extra semicolon

llvm-svn: 283395

8 years agoFix the build with MSVC 2013, still cannot default move ctors yet
Reid Kleckner [Wed, 5 Oct 2016 21:44:46 +0000 (21:44 +0000)]
Fix the build with MSVC 2013, still cannot default move ctors yet

Ten days.

llvm-svn: 283394

8 years ago[DAG] change test to use 'unsafe' function attribute instead of global setting
Sanjay Patel [Wed, 5 Oct 2016 21:43:50 +0000 (21:43 +0000)]
[DAG] change test to use 'unsafe' function attribute instead of global setting

But we have node-level FMF, so the next step is to fix this at the instruction/node-level.

llvm-svn: 283393

8 years agoAdd an empty IPI stream.
Rui Ueyama [Wed, 5 Oct 2016 21:37:25 +0000 (21:37 +0000)]
Add an empty IPI stream.

With this, "llvm-pdbdump yaml -ipi-stream" prints out an IPI stream.
Previously it crashed because it can't handle the case where IPI
stream doesn't exist.

llvm-svn: 283392

8 years agoModify df_iterator to support post-order actions
David Callahan [Wed, 5 Oct 2016 21:36:16 +0000 (21:36 +0000)]
Modify df_iterator to support post-order actions

Summary: This makes a change to the state used to maintain visited information for depth first iterator. We know assume a method "completed(...)" which is called after all children of a node have been visited. In all existing cases, this method does nothing so this patch has no functional changes.  It will however allow a client to distinguish back from cross edges in a DFS tree.

Reviewers: nadav, mehdi_amini, dberlin

Subscribers: MatzeB, mzolotukhin, twoh, freik, llvm-commits

Differential Revision: https://reviews.llvm.org/D25191

llvm-svn: 283391

8 years agoVerifier: Reject any unknown named MD nodes in the llvm.dbg namespace.
Adrian Prantl [Wed, 5 Oct 2016 21:31:19 +0000 (21:31 +0000)]
Verifier: Reject any unknown named MD nodes in the llvm.dbg namespace.

This came out of a discussion in https://reviews.llvm.org/D25285.

There used to be various other llvm.dbg.* nodes, but we don't support
upgrading them and we want to reserve the namespace for future uses.

This also removes an entirely obsolete and bitrotted testcase for PR7662.

llvm-svn: 283390

8 years ago[WebAssembly] Add binary-encoding opcode values to instruction descriptions.
Dan Gohman [Wed, 5 Oct 2016 21:24:08 +0000 (21:24 +0000)]
[WebAssembly] Add binary-encoding opcode values to instruction descriptions.

llvm-svn: 283389

8 years ago[codeview] Translate bitpiece metadata to DEFRANGE_SUBFIELD* records
Reid Kleckner [Wed, 5 Oct 2016 21:21:33 +0000 (21:21 +0000)]
[codeview] Translate bitpiece metadata to DEFRANGE_SUBFIELD* records

This allows LLVM to describe locations of aggregate variables that have
been split by SROA.

Fixes PR29141

Reviewers: amccarth, majnemer

Differential Revision: https://reviews.llvm.org/D25253

llvm-svn: 283388

8 years ago[Object] Fix a crash in Archive::child_iterator's default constructor.
Lang Hames [Wed, 5 Oct 2016 21:20:00 +0000 (21:20 +0000)]
[Object] Fix a crash in Archive::child_iterator's default constructor.

To be default constructible, Archive::child_iterator needs to be able to
construct an Archive::Child with a null parent, however Archive::Child's
constructor always dereferenced its Parent argument to compute the remaining
archive size. This commit fixes Archive::Child's constructor to only do the
size calculation when the parent is non-null.

llvm-svn: 283387

8 years agoConvert some more aliasing and CI functions to StringRef.
Zachary Turner [Wed, 5 Oct 2016 21:14:56 +0000 (21:14 +0000)]
Convert some more aliasing and CI functions to StringRef.

llvm-svn: 283386

8 years agoUpdate some command aliasing functions to use StringRef.
Zachary Turner [Wed, 5 Oct 2016 21:14:49 +0000 (21:14 +0000)]
Update some command aliasing functions to use StringRef.

llvm-svn: 283385

8 years agoConvert CommandObject constructors to StringRef.
Zachary Turner [Wed, 5 Oct 2016 21:14:38 +0000 (21:14 +0000)]
Convert CommandObject constructors to StringRef.

llvm-svn: 283384

8 years ago[ARM] Use __rt_div functions for divrem on Windows
Martin Storsjo [Wed, 5 Oct 2016 21:08:02 +0000 (21:08 +0000)]
[ARM] Use __rt_div functions for divrem on Windows

This avoids falling back to calling out to the GCC rem functions
(__moddi3, __umoddi3) when targeting Windows.

The __rt_div functions have flipped the two arguments compared
to the __aeabi_divmod functions. To match MSVC, we emit a
check for division by zero before actually calling the library
function (even if the library function itself also might do
the same check).

Not all calls to __rt_div functions for division are currently
merged with calls to the same function with the same parameters
for the remainder. This is more wasteful than a div + mls as before,
but avoids calls to __moddi3.

Differential Revision: https://reviews.llvm.org/D24076

llvm-svn: 283383

8 years agoEarly continue. NFC.
Rui Ueyama [Wed, 5 Oct 2016 21:06:32 +0000 (21:06 +0000)]
Early continue. NFC.

llvm-svn: 283382

8 years ago[Sparc] Implement UMUL_LOHI and SMUL_LOHI instead of MULHS/MULHU/MUL.
James Y Knight [Wed, 5 Oct 2016 20:54:17 +0000 (20:54 +0000)]
[Sparc] Implement UMUL_LOHI and SMUL_LOHI instead of MULHS/MULHU/MUL.

This is what the instruction-set actually provides, and the default
expansions of the others into the lohi opcodes are good.

llvm-svn: 283381

8 years agoFixup the xfail situation on Windows.
Zachary Turner [Wed, 5 Oct 2016 20:47:17 +0000 (20:47 +0000)]
Fixup the xfail situation on Windows.

Xfails added and/or removed to reflect the current state of Windows.

llvm-svn: 283380

8 years ago[compiler-rt] Enable building iOS by default.
Anna Zaks [Wed, 5 Oct 2016 20:45:36 +0000 (20:45 +0000)]
[compiler-rt] Enable building iOS by default.

llvm-svn: 283379

8 years ago[asan] Fixup: Switch to using dynamic shadow offset on iOS
Anna Zaks [Wed, 5 Oct 2016 20:45:34 +0000 (20:45 +0000)]
[asan] Fixup: Switch to using dynamic shadow offset on iOS

Address lint comments.

llvm-svn: 283378

8 years ago[ADT] Add missing const_iterator DenseSet::find() const
Vitaly Buka [Wed, 5 Oct 2016 20:36:39 +0000 (20:36 +0000)]
[ADT] Add missing const_iterator DenseSet::find() const

Summary: Probably overlooked.

Reviewers: eugenis, dblaikie

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D24689

llvm-svn: 283377

8 years ago[asan] Reapply: Switch to using dynamic shadow offset on iOS
Anna Zaks [Wed, 5 Oct 2016 20:34:13 +0000 (20:34 +0000)]
[asan] Reapply: Switch to using dynamic shadow offset on iOS

The VM layout is not stable between iOS version releases, so switch to dynamic shadow offset.

This is the LLVM counterpart of https://reviews.llvm.org/D25218

Differential Revision: https://reviews.llvm.org/D25219

llvm-svn: 283376

8 years ago[asan] Reapply: Switch to using dynamic shadow offset on iOS
Anna Zaks [Wed, 5 Oct 2016 20:33:59 +0000 (20:33 +0000)]
[asan] Reapply: Switch to using dynamic shadow offset on iOS

The VM layout is not stable between iOS version releases, so switch to dynamic shadow offset.

Differential Revision: https://reviews.llvm.org/D25218

llvm-svn: 283375

8 years agoImprove the debug-info test created in r274263.
Yunzhong Gao [Wed, 5 Oct 2016 20:26:29 +0000 (20:26 +0000)]
Improve the debug-info test created in r274263.

This patch is related to r274263 or Phabricator/D21818.
This patch aims to improve the test case added in the previous commit to verify
specifically that the stack protector pass is adding the debug line info as
intended. Before, the test only verified that the verifier pass does not crash.
The current approach is to generate the assembly output and then look for the
.loc directive.

Differential Revision: https://reviews.llvm.org/D25290

llvm-svn: 283374

8 years ago[LV] Pass profitability analysis in vectorizer constructor (NFC)
Matthew Simpson [Wed, 5 Oct 2016 20:23:46 +0000 (20:23 +0000)]
[LV] Pass profitability analysis in vectorizer constructor (NFC)

The vectorizer already holds a pointer to one cost model artifact in a member
variable (i.e., MinBWs). As we add more, it will be easier to communicate these
artifacts to the vectorizer if we simply pass a pointer to the cost model
instead.

llvm-svn: 283373

8 years agoRemove trailing whitespace.
Rui Ueyama [Wed, 5 Oct 2016 20:09:50 +0000 (20:09 +0000)]
Remove trailing whitespace.

llvm-svn: 283372

8 years ago[RDF] Fix live def propagation through basic block
Krzysztof Parzyszek [Wed, 5 Oct 2016 20:08:09 +0000 (20:08 +0000)]
[RDF] Fix live def propagation through basic block

llvm-svn: 283371

8 years agoConvert various CommandInterpreter functions to StringRef.
Zachary Turner [Wed, 5 Oct 2016 20:03:37 +0000 (20:03 +0000)]
Convert various CommandInterpreter functions to StringRef.

llvm-svn: 283370