platform/upstream/llvm.git
8 years ago[Perf-Training] Reworked workflow improvements for order-file generation
Chris Bieneman [Fri, 8 Apr 2016 22:48:18 +0000 (22:48 +0000)]
[Perf-Training] Reworked workflow improvements for order-file generation

This is re-landing r260742. I've reworked the conditionals so that it only hits when targeting Apple platforms with ld64.

Original Summary:
With this change generating clang order files using dtrace uses the following workflow:

cmake <whatever options you want>

ninja generate-order-file

ninja clang

This patch works by setting a default path to the order file (which can be overridden by the user). If the order file doesn't exist during configuration CMake will create an empty one.

CMake then ties up the dependencies between the clang link job and the order file, and generate-order-file overwrites CLANG_ORDER_FILE with the new order file.

llvm-svn: 265864

8 years ago[CMake] Make llvm_ExternalProject always call the build action
Chris Bieneman [Fri, 8 Apr 2016 22:46:04 +0000 (22:46 +0000)]
[CMake] Make llvm_ExternalProject always call the build action

This makes it so that when running 'ninja test-suite' from the top-level LLVM ninja build it *always* re-runs the ninja command in the test-suite directory.

This mechanism is required because the top-level ninja file doesn't have a view into the subdirectory dependency tree, so it can't know what, if anything, needs to be rebuilt.

llvm-svn: 265863

8 years agoUse NoDebug compile units to mark debug metadata used only for sample-based
Adrian Prantl [Fri, 8 Apr 2016 22:43:06 +0000 (22:43 +0000)]
Use NoDebug compile units to mark debug metadata used only for sample-based
profiling and optimization remarks and indicate that no debug info shall
be emitted for these compile units.

http://reviews.llvm.org/D18808
<rdar://problem/25427165>

llvm-svn: 265862

8 years agoSupport the Nodebug emission kind for DICompileUnits.
Adrian Prantl [Fri, 8 Apr 2016 22:43:03 +0000 (22:43 +0000)]
Support the Nodebug emission kind for DICompileUnits.

Sample-based profiling and optimization remarks currently remove
DICompileUnits from llvm.dbg.cu to suppress the emission of debug info
from them. This is somewhat of a hack and only borderline legal IR.

This patch uses the recently introduced NoDebug emission kind in
DICompileUnit to achieve the same result without breaking the Verifier.
A nice side-effect of this change is that it is now possible to combine
NoDebug and regular compile units under LTO.

http://reviews.llvm.org/D18808
<rdar://problem/25427165>

llvm-svn: 265861

8 years agobenchcomp: Add a mode for analyzing rule execution time in ninja log files.
Peter Collingbourne [Fri, 8 Apr 2016 22:42:22 +0000 (22:42 +0000)]
benchcomp: Add a mode for analyzing rule execution time in ninja log files.

llvm-svn: 265860

8 years agobenchcomp: Look at all sections whose names begin with .text, not just the .text...
Peter Collingbourne [Fri, 8 Apr 2016 22:42:14 +0000 (22:42 +0000)]
benchcomp: Look at all sections whose names begin with .text, not just the .text section.

llvm-svn: 265859

8 years ago-thread-info in lldbmi does not conform to protocol. Should end with current thread id
Chuck Ries [Fri, 8 Apr 2016 22:17:53 +0000 (22:17 +0000)]
-thread-info in lldbmi does not conform to protocol. Should end with current thread id

-thread-info in lldbmi does not conform to protocol. Should end with
current thread id as described here:
https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Thread-Commands.html#GDB_002fMI-Thread-Commands

When printing all threads, the current thread id should be printed
afterwards.

Example:
-thread-info
     ^done,threads=[
     {id="2",target-id="Thread 0xb7e14b90 (LWP 21257)",
        frame={level="0",addr="0xffffe410",func="__kernel_vsyscall",
                args=[]},state="running"},
     {id="1",target-id="Thread 0xb7e156b0 (LWP 21254)",
        frame={level="0",addr="0x0804891f",func="foo",
                args=[{name="i",value="10"}],
                file="/tmp/a.c",fullname="/tmp/a.c",line="158"},
                state="running"}],
     current-thread-id="1"
     (gdb)

Patch from jacdavis@microsoft.com

Reviewers: zturner, chuckr

Differential Revision: http://reviews.llvm.org/differential/revision/edit/18880/

llvm-svn: 265858

8 years agoRemove unused functions from ASTWriter interface.
Richard Smith [Fri, 8 Apr 2016 21:54:32 +0000 (21:54 +0000)]
Remove unused functions from ASTWriter interface.

llvm-svn: 265857

8 years agoUpdate filesystem status
Eric Fiselier [Fri, 8 Apr 2016 21:52:32 +0000 (21:52 +0000)]
Update filesystem status

llvm-svn: 265856

8 years agofix documentation comments; NFC
Sanjay Patel [Fri, 8 Apr 2016 21:42:43 +0000 (21:42 +0000)]
fix documentation comments; NFC

llvm-svn: 265855

8 years agoFix another crash bug in --start-lib.
Rui Ueyama [Fri, 8 Apr 2016 21:38:22 +0000 (21:38 +0000)]
Fix another crash bug in --start-lib.

The previous fix didn't work for bitcode files. This patch fixes
the remaining issue.

llvm-svn: 265854

8 years agoAdd an interesting test case we already pass.
Rafael Espindola [Fri, 8 Apr 2016 21:33:04 +0000 (21:33 +0000)]
Add an interesting test case we already pass.

We had no tests for the interaction of relocations pointing to tail
merged strings.

llvm-svn: 265853

8 years agoRefactor Threshold computation. NFC.
Easwaran Raman [Fri, 8 Apr 2016 21:28:02 +0000 (21:28 +0000)]
Refactor Threshold computation. NFC.

This is part of changes reviewed in http://reviews.llvm.org/D17584.

llvm-svn: 265852

8 years ago[SSP] Remove llvm.stackprotectorcheck.
Tim Shen [Fri, 8 Apr 2016 21:26:31 +0000 (21:26 +0000)]
[SSP] Remove llvm.stackprotectorcheck.

This is a cleanup patch for SSP support in LLVM. There is no functional change.
llvm.stackprotectorcheck is not needed, because SelectionDAG isn't
actually lowering it in SelectBasicBlock; rather, it adds check code in
FinishBasicBlock, ignoring the position where the intrinsic is inserted
(See FindSplitPointForStackProtector()).

llvm-svn: 265851

8 years ago[x86] show missed opportunities to use andn
Sanjay Patel [Fri, 8 Apr 2016 21:26:11 +0000 (21:26 +0000)]
[x86] show missed opportunities to use andn

llvm-svn: 265850

8 years agoRemove even more of the data formatters that silently run code
Enrico Granata [Fri, 8 Apr 2016 21:24:24 +0000 (21:24 +0000)]
Remove even more of the data formatters that silently run code

Fixes <rdar://problem/25629755>

llvm-svn: 265849

8 years agoPR25501: Delay loading visible updates for a declaration until after we've
Richard Smith [Fri, 8 Apr 2016 20:53:26 +0000 (20:53 +0000)]
PR25501: Delay loading visible updates for a declaration until after we've
processed update records. If an update record adds a definition, we need to
merge that with any pre-existing definition to determine which the canonical
definition is before we apply the visible update, otherwise we wouldn't know
where to apply it.

Thanks to Vassil Vassilev for help reducing this and tracking down the problem.

llvm-svn: 265848

8 years agoFix a crash bug in --start-lib.
Rui Ueyama [Fri, 8 Apr 2016 20:49:31 +0000 (20:49 +0000)]
Fix a crash bug in --start-lib.

Previously, Lazy symbols were created for undefined symbols even though
such symbols cannot be resolved by loading object files. This patch
fixes that bug.

llvm-svn: 265847

8 years agoRangeify a loop. NFC.
Hans Wennborg [Fri, 8 Apr 2016 20:46:09 +0000 (20:46 +0000)]
Rangeify a loop. NFC.

llvm-svn: 265846

8 years agoRemove some redundant variables from X86TargetLowering::LowerDYNAMIC_STACKALLOC
Hans Wennborg [Fri, 8 Apr 2016 20:46:00 +0000 (20:46 +0000)]
Remove some redundant variables from X86TargetLowering::LowerDYNAMIC_STACKALLOC

These are already defined, with the same values, a few lines up. NFC.

llvm-svn: 265845

8 years agoAdd doxygen comments to emmintrin.h's intrinsics. Only around 25% of the intrinsics...
Ekaterina Romanova [Fri, 8 Apr 2016 20:45:48 +0000 (20:45 +0000)]
Add doxygen comments to emmintrin.h's intrinsics. Only around 25% of the intrinsics in this file are documented now. The patches for the rest of the intrisics in this file will be send out later.

The doxygen comments are automatically generated based on Sony's intrinsics document.

I got an OK from Eric Christopher to commit doxygen comments without prior code review upstream. This patch was internally reviewed by Paul Robinson.

llvm-svn: 265844

8 years agoReset continue_after_async only if neither SIGINIT nor SIGSTOP received.
Oleksiy Vyalov [Fri, 8 Apr 2016 20:44:28 +0000 (20:44 +0000)]
Reset continue_after_async only if neither SIGINIT nor SIGSTOP received.

http://reviews.llvm.org/D18886

llvm-svn: 265843

8 years agoCodegen: Factor tail duplication into a utility class. NFC
Kyle Butt [Fri, 8 Apr 2016 20:35:01 +0000 (20:35 +0000)]
Codegen: Factor tail duplication into a utility class. NFC

This is in preparation for tail duplication during block placement. See D18226.
This needs to be a utility class for 2 reasons. No passes may run after block
placement, and also, tail-duplication affects subsequent layout decisions, so
it must be interleaved with placement, and can't be separated out into its own
pass. The original pass is still useful, and now runs by delegating to the
utility class.

llvm-svn: 265842

8 years ago[x86] regenerate checks for BMI tests
Sanjay Patel [Fri, 8 Apr 2016 20:29:39 +0000 (20:29 +0000)]
[x86] regenerate checks for BMI tests

llvm-svn: 265841

8 years agotest commit
Evgeny Stupachenko [Fri, 8 Apr 2016 20:20:38 +0000 (20:20 +0000)]
test commit

llvm-svn: 265840

8 years ago[analyzer] Teach trackNullOrUndefValue about calls to property accessors.
Devin Coughlin [Fri, 8 Apr 2016 19:59:16 +0000 (19:59 +0000)]
[analyzer] Teach trackNullOrUndefValue about calls to property accessors.

Teach trackNullOrUndefValue() how to look through PseudoObjectExprs to find
the underlying method call for property getters. This makes over-suppression
of 'return nil' in getters consistent with the similar over-suppression for
method and function calls.

rdar://problem/24437252

llvm-svn: 265839

8 years ago[modules] Handle merged fields in designated initializers.
Richard Smith [Fri, 8 Apr 2016 19:57:40 +0000 (19:57 +0000)]
[modules] Handle merged fields in designated initializers.

llvm-svn: 265838

8 years agoAdd trailing colons to labels in a test.
James Y Knight [Fri, 8 Apr 2016 19:49:03 +0000 (19:49 +0000)]
Add trailing colons to labels in a test.

This will avoid matching on the FILENAME if it happened to contain, say,
"f4" anywhere in the file path.

llvm-svn: 265837

8 years agoFix Load Control Dependence in MemCpy Generation
Nirav Dave [Fri, 8 Apr 2016 19:44:40 +0000 (19:44 +0000)]
Fix Load Control Dependence in MemCpy Generation

In Memcpy lowering we had missed a dependence from the load of the
operation to successor operations. This causes us to potentially
construct an in initial DAG with a memory dependence not fully
represented in the chain sub-DAG but rather require looking at the
entire DAG breaking alias analysis by allowing incorrect repositioning
of memory operations.

To work around this, r200033 changed DAGCombiner::GatherAllAliases to be
conservative if any possible issues to happen. Unfortunately this check
forbade many non-problematic situations as well. For example, it's
common for incoming argument lowering to add a non-aliasing load hanging
off of EntryNode. Then, if GatherAllAliases visited EntryNode, it would
find that other (unvisited) use of the EntryNode chain, and just give up
entirely. Furthermore, the check was incomplete: it would not actually
detect all such potentially problematic DAG constructions, because
GatherAllAliases did not guarantee to visit all chain nodes going up to
the root EntryNode. This is in general fine -- giving up early will just
miss a potential optimization, not generate incorrect results. But, for
this non-chain dependency detection code, it's possible that you could
have a load attached to a higher-up chain node than any which were
visited. If that load aliases your store, but the only dependency is
through the value operand of a non-aliasing store, it would've been
missed by this code, and potentially reordered.

With the dependence added, this check can be removed and Alias Analysis
can be much more aggressive. This fixes code quality regression in the
Consecutive Store Merge cleanup (D14834).

Test Change:

ppc64-align-long-double.ll now may see multiple serializations
of its stores

Differential Revision: http://reviews.llvm.org/D18062

llvm-svn: 265836

8 years agoValueMapper: Extract llvm::RemapFunction from IRMover.cpp, NFC
Duncan P. N. Exon Smith [Fri, 8 Apr 2016 19:26:32 +0000 (19:26 +0000)]
ValueMapper: Extract llvm::RemapFunction from IRMover.cpp, NFC

Strip out the remapping parts of IRLinker::linkFunctionBody and put them
in ValueMapper.cpp under the name Mapper::remapFunction (with a
top-level entry-point llvm::RemapFunction).

This is a nice cleanup on its own since it puts the remapping code
together and shares a single Mapper context for the entire
IRLinker::linkFunctionBody Call.  Besides that, this will make it easier
to break the co-recursion between IRMover.cpp and ValueMapper.cpp in
follow ups.

llvm-svn: 265835

8 years ago[FIX] Do not crash on opaque (unsized) types.
Johannes Doerfert [Fri, 8 Apr 2016 19:20:03 +0000 (19:20 +0000)]
[FIX] Do not crash on opaque (unsized) types.

llvm-svn: 265834

8 years agoValueMapper: Always use Mapper::mapValue from remapInstruction, NFCI
Duncan P. N. Exon Smith [Fri, 8 Apr 2016 19:17:13 +0000 (19:17 +0000)]
ValueMapper: Always use Mapper::mapValue from remapInstruction, NFCI

Use Mapper::mapValue instead of llvm::MapValue from
Mapper::remapInstruction when mapping an incoming block for a PHINode
(follow-up to r265832).  This will implicitly pass along the
Materializer argument, but when this code was added in r133513 there was
no Materializer argument.  I suspect this call to MapValue was just
missed in r182776 since it's not observable (basic blocks can't be
materialized, and they don't reference other values).

llvm-svn: 265833

8 years agoValueMapper: Roll RemapInstruction into Mapper, NFC
Duncan P. N. Exon Smith [Fri, 8 Apr 2016 19:09:34 +0000 (19:09 +0000)]
ValueMapper: Roll RemapInstruction into Mapper, NFC

Add Mapper::remapInstruction, move the guts of llvm::RemapInstruction
into it, and use the same Mapper for most of the calls to MapValue and
MapMetadata.  There should be no functionality change here.

I left off the call to MapValue that wasn't passing in a Materializer
argument (for basic blocks of PHINodes).  It shouldn't change
functionality either, but I'm suspicious enough to commit separately.

llvm-svn: 265832

8 years agoLinker: Always pass RF_IgnoreMissingLocals; NFC
Duncan P. N. Exon Smith [Fri, 8 Apr 2016 19:01:38 +0000 (19:01 +0000)]
Linker: Always pass RF_IgnoreMissingLocals; NFC

This is a cleanup after clarifying the meaning of RF_IgnoreMissingLocals
in r265628 and truly limiting it to locals in r265768.

This should have no functionality change, since the only context that
the flag has an effect is when we could hit function-local Value and
Metadata, and we were already passing it in those contexts.

llvm-svn: 265831

8 years ago[X86] Fix PR23155 by turning on X86FixupBWInsts by default.
Kevin B. Smith [Fri, 8 Apr 2016 18:58:29 +0000 (18:58 +0000)]
[X86] Fix PR23155 by turning on X86FixupBWInsts by default.
Differential Revision: http://reviews.llvm.org/D18866

llvm-svn: 265830

8 years agoFix #ifdef __APPLE__ code is the swig Python bindings
Todd Fiala [Fri, 8 Apr 2016 18:58:07 +0000 (18:58 +0000)]
Fix #ifdef __APPLE__ code is the swig Python bindings

This code was getting evaluated unintentionally at binding
generation time instead of binding file compilation time.

Addresses:
https://bugs.swift.org/browse/SR-1192

llvm-svn: 265829

8 years agoValueMapper: Don't memoize metadata when RF_NoModuleLevelChanges
Duncan P. N. Exon Smith [Fri, 8 Apr 2016 18:49:36 +0000 (18:49 +0000)]
ValueMapper: Don't memoize metadata when RF_NoModuleLevelChanges

Prevent the Metadata side-table in ValueMap from growing unnecessarily
when RF_NoModuleLevelChanges.  As a drive-by, make ValueMap::hasMD,
which apparently had no users until I used it here for testing, actually
compile.

llvm-svn: 265828

8 years agoValueMapper: Stop memoizing MDStrings
Duncan P. N. Exon Smith [Fri, 8 Apr 2016 18:47:02 +0000 (18:47 +0000)]
ValueMapper: Stop memoizing MDStrings

Stop adding MDString to the Metadata section of the ValueMap in
MapMetadata.  It blows up the size of the map for no benefit, since we
can always return quickly anyway.

There is a potential follow-up that I don't think I'll push on right
away, but maybe someone else is interested:  stop checking for a
pre-mapped MDString, and move the `isa<MDString>()` checks in
Mapper::mapSimpleMetadata and MDNodeMapper::getMappedOp in front of the
`VM.getMappedMD()` calls.  While this would preclude explicitly
remapping MDStrings it would probably be a little faster.

llvm-svn: 265827

8 years agoCleanup the handling of MustBeInDynSym and IsUsedInRegularObj.
Rafael Espindola [Fri, 8 Apr 2016 18:39:03 +0000 (18:39 +0000)]
Cleanup the handling of MustBeInDynSym and IsUsedInRegularObj.

Now MustBeInDynSym is only true if the symbol really must be in the
dynamic symbol table.

IsUsedInRegularObj is only true if the symbol is used in a .o or -u. Not
a .so or a .bc.

A benefit is that this is now done almost entirilly during symbol
resolution. The only exception is copy relocations because of aliases.

This includes a small fix in that protected symbols in .so don't force
executable symbols to be exported.

This also opens the way for implementing internalize for -shared.

llvm-svn: 265826

8 years agoPropagate Undef in llvm.cos Intrinsic
Sanjoy Das [Fri, 8 Apr 2016 18:21:11 +0000 (18:21 +0000)]
Propagate Undef in llvm.cos Intrinsic

Summary:
The llvm cos intrinsic currently does not propagate undef's. This change
transforms cos(undef) to null value or 0.

There are 2 test cases added as well.

Patch by Anna Thomas!

Reviewers: sanjoy

Subscribers: majnemer, llvm-commits

Differential Revision: http://reviews.llvm.org/D18863

llvm-svn: 265825

8 years ago[FIX] Teach the ScopExpander about parallel subfunctions
Johannes Doerfert [Fri, 8 Apr 2016 18:16:58 +0000 (18:16 +0000)]
[FIX] Teach the ScopExpander about parallel subfunctions

llvm-svn: 265824

8 years agoCollect and verify generated parallel subfunctions
Johannes Doerfert [Fri, 8 Apr 2016 18:16:02 +0000 (18:16 +0000)]
Collect and verify generated parallel subfunctions

  We verify the optimized function now for a long time and it helped to track
  down bugs early. This will now also happen for all parallel subfunctions we
  generate.

llvm-svn: 265823

8 years agoRevert r265817
Colin LeMahieu [Fri, 8 Apr 2016 18:15:37 +0000 (18:15 +0000)]
Revert r265817

lld tests need to be addressed.

llvm-svn: 265822

8 years agofix missing import of 'time' in lldbutil.wait_for_file_on_target
Todd Fiala [Fri, 8 Apr 2016 18:06:11 +0000 (18:06 +0000)]
fix missing import of 'time' in lldbutil.wait_for_file_on_target

This triggers in some timeout scenarios in the LLDB test suite.

Fixes:
https://bugs.swift.org/browse/SR-1193

llvm-svn: 265821

8 years agoCleanups to command alias to refer to itself as 'command alias' and not allow to...
Enrico Granata [Fri, 8 Apr 2016 17:56:57 +0000 (17:56 +0000)]
Cleanups to command alias to refer to itself as 'command alias' and not allow to make aliases starting with a - as that isn't really supported, and is most often a mistake (trying to pass options)

llvm-svn: 265820

8 years agoAdd help for our regular expression commands when aliased
Enrico Granata [Fri, 8 Apr 2016 17:56:26 +0000 (17:56 +0000)]
Add help for our regular expression commands when aliased

llvm-svn: 265819

8 years agoAppend a missing \n
Enrico Granata [Fri, 8 Apr 2016 17:55:59 +0000 (17:55 +0000)]
Append a missing \n

llvm-svn: 265818

8 years ago[llvm-objdump] Printing hex instead of dec by default
Colin LeMahieu [Fri, 8 Apr 2016 17:55:03 +0000 (17:55 +0000)]
[llvm-objdump] Printing hex instead of dec by default

Differential Revision: http://reviews.llvm.org/D18770

llvm-svn: 265817

8 years agoAlways have clang pass -pie-level and -pic-level values to the code generator.
Wei Mi [Fri, 8 Apr 2016 17:42:32 +0000 (17:42 +0000)]
Always have clang pass -pie-level and -pic-level values to the code generator.

Patch by tmsriram!

Differential Revision: http://reviews.llvm.org/D18843

llvm-svn: 265816

8 years ago[Object] Report an error if .alt_entry is used with ELF or COFF.
Lang Hames [Fri, 8 Apr 2016 17:38:51 +0000 (17:38 +0000)]
[Object] Report an error if .alt_entry is used with ELF or COFF.

I'm looking into a better way to do this long-term, but for now at least don't
crash.

llvm-svn: 265815

8 years ago[SystemZ] Support conditional sibling calls via BRCL
Ulrich Weigand [Fri, 8 Apr 2016 17:22:19 +0000 (17:22 +0000)]
[SystemZ] Support conditional sibling calls via BRCL

This adds a conditional variant of CallJG instruction, CallBRCL.
It can be used for conditional sibling calls. Unfortunately, due
to IfCvt limitations, it only really works well for functions without
arguments.

Author: koriakin
Differential Revision: http://reviews.llvm.org/D18864

llvm-svn: 265814

8 years ago[Release Notes] Sort checks alphabetically.
Eugene Zelenko [Fri, 8 Apr 2016 17:21:27 +0000 (17:21 +0000)]
[Release Notes] Sort checks alphabetically.

llvm-svn: 265813

8 years ago[RegBankSelect] Use reverse post order traversal.
Quentin Colombet [Fri, 8 Apr 2016 17:19:10 +0000 (17:19 +0000)]
[RegBankSelect] Use reverse post order traversal.

When assigning the register banks of an instruction, it is best to know
all the constraints of the input to have a good idea of how this will
impact the cost of the whole function.

llvm-svn: 265812

8 years ago[AArch64] Add a test case for the default mapping of RegBankSelect.
Quentin Colombet [Fri, 8 Apr 2016 17:11:51 +0000 (17:11 +0000)]
[AArch64] Add a test case for the default mapping of RegBankSelect.

llvm-svn: 265811

8 years ago[RegisterBankInfo] Change the implementation for the default mapping.
Quentin Colombet [Fri, 8 Apr 2016 16:59:50 +0000 (16:59 +0000)]
[RegisterBankInfo] Change the implementation for the default mapping.

Do not give that much importance to the current register bank of an
operand. This is likely just a side effect of the current execution and
it is properly wise to prefer a register bank that can be extracted from
the information available statically (like encoding constraints and
type).

llvm-svn: 265810

8 years agoAdd testcase from PR27218. NFC.
Michael Kruse [Fri, 8 Apr 2016 16:54:53 +0000 (16:54 +0000)]
Add testcase from PR27218. NFC.

The the bug has already been fixed r265795, but this second testcase
still useful.

llvm-svn: 265809

8 years agoRemove bad indentation introduced in 263859
Luke Drummond [Fri, 8 Apr 2016 16:52:40 +0000 (16:52 +0000)]
Remove bad indentation introduced in 263859

This commit touches whitespace only.
This commit was the original intention of the botched 265797

llvm-svn: 265808

8 years agoMove EABIVersion from CodeGenOptions to TargetOptions
Saleem Abdulrasool [Fri, 8 Apr 2016 16:52:05 +0000 (16:52 +0000)]
Move EABIVersion from CodeGenOptions to TargetOptions

It is possible to argue that the EABIVersion field is similar in spirit to the
ABI field in TargetOptions.  It represents the embedded ABI that the target
follows.  This will allow us to thread this information into the target
information construction.

llvm-svn: 265807

8 years agorevert SVN r265702, r265640
Saleem Abdulrasool [Fri, 8 Apr 2016 16:52:00 +0000 (16:52 +0000)]
revert SVN r265702, r265640

Revert the two changes to thread CodeGenOptions into the TargetInfo allocation
and to fix the layering violation by moving CodeGenOptions into Basic.
Code Generation is arguably not particularly "basic".  This addresses Richard's
post-commit review comments.  This change purely does the mechanical revert and
will be followed up with an alternate approach to thread the desired information
into TargetInfo.

llvm-svn: 265806

8 years ago[InstCombine] Fix miscompile in FoldSPFofSPF
David Majnemer [Fri, 8 Apr 2016 16:51:49 +0000 (16:51 +0000)]
[InstCombine] Fix miscompile in FoldSPFofSPF

We had a select of a cast of a select but attempted to replace the outer
select with the inner select dispite their incompatible types.

Patch by Anton Korobeynikov!

This fixes PR27236.

llvm-svn: 265805

8 years ago[RegBankSelect] Improve debug output.
Quentin Colombet [Fri, 8 Apr 2016 16:48:16 +0000 (16:48 +0000)]
[RegBankSelect] Improve debug output.

Add verbose information when checking if the current and the desired
register banks match.
Detail what happens when we assign a register bank.

llvm-svn: 265804

8 years agoFix missing include on OpenBSD
Mehdi Amini [Fri, 8 Apr 2016 16:45:05 +0000 (16:45 +0000)]
Fix missing include on OpenBSD

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 265803

8 years ago[MIR] Teach the parser how to deal with register banks.
Quentin Colombet [Fri, 8 Apr 2016 16:40:43 +0000 (16:40 +0000)]
[MIR] Teach the parser how to deal with register banks.

llvm-svn: 265802

8 years ago[InstCombine] Add a peephole for redundant assumes
David Majnemer [Fri, 8 Apr 2016 16:37:12 +0000 (16:37 +0000)]
[InstCombine] Add a peephole for redundant assumes

Two or more identical assumes are occasionally next to each other in a
basic block.
While our generic machinery will turn a redundant assume into a no-op,
it is not super cheap.
We can perform a simpler check to achieve the same result for this case.

llvm-svn: 265801

8 years ago[LoopVectorize] Register cloned assumptions
David Majnemer [Fri, 8 Apr 2016 16:37:10 +0000 (16:37 +0000)]
[LoopVectorize] Register cloned assumptions

InstCombine cannot effectively remove redundant assumptions without them
registered in the assumption cache.  The vectorizer can create identical
assumptions but doesn't register them with the cache, resulting in
slower compile times because InstCombine tries to reason about a lot
more assumptions.

Fix this by registering the cloned assumptions.

llvm-svn: 265800

8 years agoRevert bad commit 265797.
Luke Drummond [Fri, 8 Apr 2016 16:35:58 +0000 (16:35 +0000)]
Revert bad commit 265797.

llvm-svn: 265799

8 years ago[MachineVerifier] Teach how to check some of the properties of generic
Quentin Colombet [Fri, 8 Apr 2016 16:35:22 +0000 (16:35 +0000)]
[MachineVerifier] Teach how to check some of the properties of generic
virtual registers.

Generic virtual registers:
- May not have a register class
- May not have a register bank
- If they do not have a register class they must have a size
- If they have a register bank, the size of the register bank must be
  greater or equal to the size of the virtual register (basically check
  that the virtual register will fit into that register class)

llvm-svn: 265798

8 years agoFix indentation for commit 263859.
Luke Drummond [Fri, 8 Apr 2016 16:30:55 +0000 (16:30 +0000)]
Fix indentation for commit 263859.

llvm-svn: 265797

8 years ago[MIR] Teach the mir printer how to print the register bank.
Quentin Colombet [Fri, 8 Apr 2016 16:26:22 +0000 (16:26 +0000)]
[MIR] Teach the mir printer how to print the register bank.

For now, we put the register bank in the Class field since a register
may only have one of those at a given time. The downside of that
representation is that if a register class and a register bank have the
same name, we will not be able to distinguish them.

llvm-svn: 265796

8 years ago[ScopInfo] Fix check for element size mismatch.
Michael Kruse [Fri, 8 Apr 2016 16:20:08 +0000 (16:20 +0000)]
[ScopInfo] Fix check for element size mismatch.

The way to get the elements size with getPrimitiveSizeInBits() is not
the same as used in other parts of Polly which should use
DataLayout::getTypeAllocSize(). Its use only queries the size of the
pointer and getPrimitiveSizeInBits returns 0 for types that require a
DataLayout object such as pointers.

Together with r265379, this should fix PR27195.

llvm-svn: 265795

8 years agoDon't lower the visibility because of shared symbols.
Rafael Espindola [Fri, 8 Apr 2016 16:11:42 +0000 (16:11 +0000)]
Don't lower the visibility because of shared symbols.

If a shared library has a protected symbol 'foo', that doesn't imply
that the symbol 'foo' in the output should be protected or not.

llvm-svn: 265794

8 years ago[ARM] Enable SMLAW[B|T] and SMLUW[B|T] instruction selection
Sam Parker [Fri, 8 Apr 2016 16:02:53 +0000 (16:02 +0000)]
[ARM] Enable SMLAW[B|T] and SMLUW[B|T] instruction selection

Added ISelDAGToDAG functions to enable selection of the smlawb, smlawt,
smulwb and smulwt instructions for the ARM backend. Also updated the smul
CodeGen test and removed the smulw one.

Differential Revision: http://reviews.llvm.org/D18892

llvm-svn: 265793

8 years agoProduce STV_DEFAULT for symbols in shared libraries.
Rafael Espindola [Fri, 8 Apr 2016 15:43:43 +0000 (15:43 +0000)]
Produce STV_DEFAULT for symbols in shared libraries.

The spec says:
If a symbol definition with STV_PROTECTED visibility from a shared
object is taken as resolving a reference from an executable or another
shared object, the SHN_UNDEF symbol table entry created has STV_DEFAULT
visibility.

llvm-svn: 265792

8 years agoMake getSymbolBinding a local static. NFC.
Rafael Espindola [Fri, 8 Apr 2016 15:30:56 +0000 (15:30 +0000)]
Make getSymbolBinding a local static. NFC.

llvm-svn: 265791

8 years agoRevert r265547 "Recommit r265309 after fixed an invalid memory reference bug happened"
Hans Wennborg [Fri, 8 Apr 2016 15:17:43 +0000 (15:17 +0000)]
Revert r265547 "Recommit r265309 after fixed an invalid memory reference bug happened"

It caused PR27275: "ARM: Bad machine code: Using an undefined physical register"

Also reverting the following commits that were landed on top:
r265610 "Fix the compare-clang diff error introduced by r265547."
r265639 "Fix the sanitizer bootstrap error in r265547."
r265657 "InlineSpiller.cpp: Escap \@ in r265547. [-Wdocumentation]"

llvm-svn: 265790

8 years ago[X86][SSE] Added 32-bit tests for vector lzcnt/tzcnt tests
Simon Pilgrim [Fri, 8 Apr 2016 15:01:31 +0000 (15:01 +0000)]
[X86][SSE] Added 32-bit tests for vector lzcnt/tzcnt tests

v2i64 tests are particularly bad on 32-bit targets.

llvm-svn: 265789

8 years ago[ScopInfo] Rename variable to AccType. NFC.
Michael Kruse [Fri, 8 Apr 2016 14:35:59 +0000 (14:35 +0000)]
[ScopInfo] Rename variable to AccType. NFC.

This avoids a name clash with the type llvm::Type.

llvm-svn: 265788

8 years agoFix-up LLDB build after rL13179
Tamas Berghammer [Fri, 8 Apr 2016 14:31:13 +0000 (14:31 +0000)]
Fix-up LLDB build after rL13179

llvm-svn: 265787

8 years agoRe-commit [SCEV] Introduce a guarded backedge taken count and use it in LAA and LV
Silviu Baranga [Fri, 8 Apr 2016 14:29:09 +0000 (14:29 +0000)]
Re-commit [SCEV] Introduce a guarded backedge taken count and use it in LAA and LV

This re-commits r265535 which was reverted in r265541 because it
broke the windows bots. The problem was that we had a PointerIntPair
which took a pointer to a struct allocated with new. The problem
was that new doesn't provide sufficient alignment guarantees.
This pattern was already present before r265535 and it just happened
to work. To fix this, we now separate the PointerToIntPair from the
ExitNotTakenInfo struct into a pointer and a bool.

Original commit message:

Summary:
When the backedge taken codition is computed from an icmp, SCEV can
deduce the backedge taken count only if one of the sides of the icmp
is an AddRecExpr. However, due to sign/zero extensions, we sometimes
end up with something that is not an AddRecExpr.

However, we can use SCEV predicates to produce a 'guarded' expression.
This change adds a method to SCEV to get this expression, and the
SCEV predicate associated with it.

In HowManyGreaterThans and HowManyLessThans we will now add a SCEV
predicate associated with the guarded backedge taken count when the
analyzed SCEV expression is not an AddRecExpr. Note that we only do
this as an alternative to returning a 'CouldNotCompute'.

We use new feature in Loop Access Analysis and LoopVectorize to analyze
and transform more loops.

Reviewers: anemet, mzolotukhin, hfinkel, sanjoy

Subscribers: flyingforyou, mcrosier, atrick, mssimpso, sanjoy, mzolotukhin, llvm-commits

Differential Revision: http://reviews.llvm.org/D17201

llvm-svn: 265786

8 years ago[X86] Tidied up shuffle decode function doxygen descriptions
Simon Pilgrim [Fri, 8 Apr 2016 14:17:07 +0000 (14:17 +0000)]
[X86] Tidied up shuffle decode function doxygen descriptions

As discussed on D18441 - auto brief is used so we don't need /brief, we don't need to include the function name and added some missing descriptions.

llvm-svn: 265785

8 years ago[lld] [ELF/AARCH64] Fix dynamic relocation from PIC GOT access
Adhemerval Zanella [Fri, 8 Apr 2016 14:10:41 +0000 (14:10 +0000)]
[lld] [ELF/AARCH64] Fix dynamic relocation from PIC GOT access

This patch fixes dynamic relocation creation from GOT access in dynamic
objects on aarch64. Current code creates a plt relative one
(R_AARCH64_JUMP_SLOT) instead of a got relative (R_AARCH64_GLOB_DAT).

It leads the programs fails with:

$ cat t.cc

std::string test = "hello...\n";

int main ()
{
  printf ("%s\n", test.c_str());
  return 0;
}
$ clang++ t.cc -fpic -o t
$ ./t
hello...

Segmentation fault (core dumped)

Due the fact it will try to access the plt instead of the got for
__cxa_atexit registration for the std::string destruction.  It will
lead in a bogus function address in atexit.

llvm-svn: 265784

8 years ago[OpenCL] Complete image types support.
Alexey Bader [Fri, 8 Apr 2016 13:40:33 +0000 (13:40 +0000)]
[OpenCL] Complete image types support.

I. Current implementation of images is not conformant to spec in the following points:
  1. It makes no distinction with respect to access qualifiers and therefore allows to use images with different access type interchangeably. The following code would compile just fine:

        void write_image(write_only image2d_t img);
        kernel void foo(read_only image2d_t img) { write_image(img); } // Accepted code

     which is disallowed according to s6.13.14.

  2. It discards access qualifier on generated code, which leads to generated code for the above example:

        call void @write_image(%opencl.image2d_t* %img);

     In OpenCL2.0 however we can have different calls into write_image with read_only and wite_only images.
     Also generally following compiler steps have no easy way to take different path depending on the image access: linking to the right implementation of image types, performing IR opts and backend codegen differently.

  3. Image types are language keywords and can't be redeclared s6.1.9, which can happen currently as they are just typedef names.
  4. Default access qualifier read_only is to be added if not provided explicitly.

II. This patch corrects the above points as follows:
  1. All images are encapsulated into a separate .def file that is inserted in different points where image handling is required. This avoid a lot of code repetition as all images are handled the same way in the code with no distinction of their exact type.
  2. The Cartesian product of image types and image access qualifiers is added to the builtin types. This simplifies a lot handling of access type mismatch as no operations are allowed by default on distinct Builtin types. Also spec intended access qualifier as special type qualifier that are combined with an image type to form a distinct type (see statement above - images can't be created w/o access qualifiers).
  3. Improves testing of images in Clang.

Author: Anastasia Stulova
Reviewers: bader, mgrang.
Subscribers: pxli168, pekka.jaaskelainen, yaxunl.
Differential Revision: http://reviews.llvm.org/D17821

llvm-svn: 265783

8 years agoSilencing a 32-bit shift implicit conversion warning from MSVC; NFC.
Aaron Ballman [Fri, 8 Apr 2016 12:21:58 +0000 (12:21 +0000)]
Silencing a 32-bit shift implicit conversion warning from MSVC; NFC.

llvm-svn: 265782

8 years agoCXX_FAST_TLS calling convention: performance improvement for PPC64
Chuang-Yu Cheng [Fri, 8 Apr 2016 12:04:32 +0000 (12:04 +0000)]
CXX_FAST_TLS calling convention: performance improvement for PPC64

This is the same change on PPC64 as r255821 on AArch64. I have even borrowed
his commit message.

The access function has a short entry and a short exit, the initialization
block is only run the first time. To improve the performance, we want to
have a short frame at the entry and exit.

We explicitly handle most of the CSRs via copies. Only the CSRs that are not
handled via copies will be in CSR_SaveList.

Frame lowering and prologue/epilogue insertion will generate a short frame
in the entry and exit according to CSR_SaveList. The majority of the CSRs will
be handled by register allcoator. Register allocator will try to spill and
reload them in the initialization block.

We add CSRsViaCopy, it will be explicitly handled during lowering.

1> we first set FunctionLoweringInfo->SplitCSR if conditions are met (the target
   supports it for the given machine function and the function has only return
   exits). We also call TLI->initializeSplitCSR to perform initialization.
2> we call TLI->insertCopiesSplitCSR to insert copies from CSRsViaCopy to
   virtual registers at beginning of the entry block and copies from virtual
   registers to CSRsViaCopy at beginning of the exit blocks.
3> we also need to make sure the explicit copies will not be eliminated.

Author: Tom Jablin (tjablin)
Reviewers: hfinkel kbarton cycheng

http://reviews.llvm.org/D17533

llvm-svn: 265781

8 years ago[mips] Use range-based for loops. NFC.
Vasileios Kalintiris [Fri, 8 Apr 2016 10:33:00 +0000 (10:33 +0000)]
[mips] Use range-based for loops. NFC.

llvm-svn: 265780

8 years ago[FIX] Allow to lookup domains for non-affine subregion blocks
Johannes Doerfert [Fri, 8 Apr 2016 10:32:26 +0000 (10:32 +0000)]
[FIX] Allow to lookup domains for non-affine subregion blocks

llvm-svn: 265779

8 years ago[FIX] Adjust execution context of hoisted loads wrt. error domains
Johannes Doerfert [Fri, 8 Apr 2016 10:30:09 +0000 (10:30 +0000)]
[FIX] Adjust execution context of hoisted loads wrt. error domains

  If we build the domains for error blocks and later remove them we lose
  the information that they are not executed. Thus, in the SCoP it looks
  like the control will always reach the statement S:

            for (i = 0 ... N)
                if (*valid == 0)
                  doSth(&ptr);
          S:    A[i] = *ptr;

  Consequently, we would have assumed "ptr" to be always accessed and
  preloaded it unconditionally. However, only if "*valid != 0" we would
  execute the optimized version of the SCoP. Nevertheless, we would have
  hoisted and accessed "ptr"regardless of "*valid". This changes the
  semantic of the program as the value of "*valid" can cause a change of
  "ptr" and control if it is executed or not.

  To fix this problem we adjust the execution context of hoisted loads
  wrt. error domains. To this end we introduce an ErrorDomainCtxMap that
  maps each basic block to the error context under which it might be
  executed. Thus, to the context under which it is executed but an error
  block would have been executed to. To fill this map one traversal of
  the blocks in the SCoP suffices. During this traversal we do also
  "remove" error statements and those that are only reachable via error
  statements. This was previously done by the removeErrorBlockDomains
  function which is therefor not needed anymore.

  This fixes bug PR26683 and thereby several SPEC miscompiles.

Differential Revision: http://reviews.llvm.org/D18822

llvm-svn: 265778

8 years ago[FIX] Handle multiplications in the SCEVAffinator again
Johannes Doerfert [Fri, 8 Apr 2016 10:27:40 +0000 (10:27 +0000)]
[FIX] Handle multiplications in the SCEVAffinator again

  If ScalarEvolution cannot look through some expression but we do, it
  might happen that a multiplication will arrive at the
  SCEVAffinator::visitMulExpr. While we could always try to improve the
  extractConstantFactor function we might still miss something, thus we
  reintroduce the code to generate multiplicative piecewise-affine
  functions as a fall-back.

llvm-svn: 265777

8 years agoAdd test cases for the removal of error blocks
Johannes Doerfert [Fri, 8 Apr 2016 10:26:39 +0000 (10:26 +0000)]
Add test cases for the removal of error blocks

llvm-svn: 265776

8 years ago[FIX] Look through div & srem instructions in SCEVs
Johannes Doerfert [Fri, 8 Apr 2016 10:25:58 +0000 (10:25 +0000)]
[FIX] Look through div & srem instructions in SCEVs

  The findValues() function did not look through div & srem instructions
  that were part of the argument SCEV. However, in different other
  places we already look through it. This mismatch caused us to preload
  values in the wrong order.

llvm-svn: 265775

8 years ago[clang-tidy] cppcoreguidelines-interfaces-global-init
Alexander Kornienko [Fri, 8 Apr 2016 09:51:06 +0000 (09:51 +0000)]
[clang-tidy] cppcoreguidelines-interfaces-global-init

Summary:
This check flags initializers of globals that access extern objects, and therefore can lead to order-of-initialization problems (this recommandation is part of CPP core guidelines).
Note that this only checks half of the guideline for now (it does not enforce using constexpr functions).

Reviewers: aaron.ballman, alexfh

Subscribers: aaron.ballman, etienneb, Eugene.Zelenko, cfe-commits

Patch by Clement Courbet!

Differential Revision: http://reviews.llvm.org/D18649

llvm-svn: 265774

8 years ago[llvm-c] Expose LLVMContextGetDiagnostic{Handler,Context}
Jeroen Ketema [Fri, 8 Apr 2016 09:19:02 +0000 (09:19 +0000)]
[llvm-c] Expose LLVMContextGetDiagnostic{Handler,Context}

Differential Revision: http://reviews.llvm.org/D18820

llvm-svn: 265773

8 years ago[mips][microMIPS] Add CodeGen support for ADD, ADDIU*, ADDU* and DADD* instructions
Zlatko Buljan [Fri, 8 Apr 2016 07:27:26 +0000 (07:27 +0000)]
[mips][microMIPS] Add CodeGen support for ADD, ADDIU*, ADDU* and DADD* instructions
Differential Revision: http://reviews.llvm.org/D16454

llvm-svn: 265772

8 years agoUse std::fill to simplify some code. NFC
Craig Topper [Fri, 8 Apr 2016 07:10:46 +0000 (07:10 +0000)]
Use std::fill to simplify some code. NFC

llvm-svn: 265771

8 years ago[IFUNC] Fix ifunc-asm.ll test
Dmitry Polukhin [Fri, 8 Apr 2016 06:45:19 +0000 (06:45 +0000)]
[IFUNC] Fix ifunc-asm.ll test

It seems that llc cannot be called used in assembler tests so test that
checks asm for particular target needs to be moved to codegen.

llvm-svn: 265770

8 years ago[AMDGPU] Add some VI disassembler tests missing from previous autogeneration due...
Valery Pykhtin [Fri, 8 Apr 2016 05:42:20 +0000 (05:42 +0000)]
[AMDGPU] Add some VI disassembler tests missing from previous autogeneration due to different filecheck prefix. NFC.

llvm-svn: 265769

8 years agoReapply "ValueMapper: Treat LocalAsMetadata more like function-local Values"
Duncan P. N. Exon Smith [Fri, 8 Apr 2016 03:13:22 +0000 (03:13 +0000)]
Reapply "ValueMapper: Treat LocalAsMetadata more like function-local Values"

This reverts commit r265765, reapplying r265759 after changing a call from
LocalAsMetadata::get to ValueAsMetadata::get (and adding a unit test).  When a
local value is mapped to a constant (like "i32 %a" => "i32 7"), the new debug
intrinsic operand may no longer be pointing at a local.

    http://lab.llvm.org:8080/green/job/clang-stage1-configure-RA_build/19020/

The previous coommit message follows:

--

This is a partial re-commit -- maybe more of a re-implementation -- of
r265631 (reverted in r265637).

This makes RF_IgnoreMissingLocals behave (almost) consistently between
the Value and the Metadata hierarchy.  In particular:

  - MapValue returns nullptr or "metadata !{}" for missing locals in
    MetadataAsValue/LocalAsMetadata bridging paris, depending on
    the RF_IgnoreMissingLocals flag.

  - MapValue doesn't memoize LocalAsMetadata-related results.

  - MapMetadata no longer deals with LocalAsMetadata or
    RF_IgnoreMissingLocals at all.  (This wasn't in r265631 at all, but
    I realized during testing it would make the patch simpler with no
    loss of generality.)

r265631 went too far, making both functions universally ignore
RF_IgnoreMissingLocals.  This broke building (e.g.) compiler-rt.
Reassociate (and possibly other passes) don't currently maintain
dominates-use invariants for metadata operands, resulting in IR like
this:

    define void @foo(i32 %arg) {
      call void @llvm.some.intrinsic(metadata i32 %x)
      %x = add i32 1, i32 %arg
    }

If the inliner chooses to inline @foo into another function, then
RemapInstruction will call `MapValue(metadata i32 %x)` and assert that
the return is not nullptr.

I've filed PR27273 to add a Verifier check and fix the underlying
problem in the optimization passes.

As a workaround, return `!{}` instead of nullptr for unmapped
LocalAsMetadata when RF_IgnoreMissingLocals is unset.  Otherwise, match
the behaviour of r265631.

Original commit message:

    ValueMapper: Make LocalAsMetadata match function-local Values

    Start treating LocalAsMetadata similarly to function-local members of
    the Value hierarchy in MapValue and MapMetadata.

      - Don't memoize them.
      - Return nullptr if they are missing.

    This also cleans up ConstantAsMetadata to stop listening to the
    RF_IgnoreMissingLocals flag.

llvm-svn: 265768

8 years agoAdapt to LLVM API change
Sanjoy Das [Fri, 8 Apr 2016 01:31:02 +0000 (01:31 +0000)]
Adapt to LLVM API change

Replace mayBeOverridden with isInterposable

llvm-svn: 265767

8 years ago[modules] Add a comment to explain why -E leaves some #includes in the preprocessed...
Richard Smith [Fri, 8 Apr 2016 01:23:59 +0000 (01:23 +0000)]
[modules] Add a comment to explain why -E leaves some #includes in the preprocessed output.

llvm-svn: 265766

8 years agoRevert "ValueMapper: Treat LocalAsMetadata more like function-local Values"
Duncan P. N. Exon Smith [Fri, 8 Apr 2016 00:56:21 +0000 (00:56 +0000)]
Revert "ValueMapper: Treat LocalAsMetadata more like function-local Values"

This reverts commit r265759, since even this limited version breaks some
bots:
  http://lab.llvm.org:8011/builders/clang-ppc64be-linux/builds/3311
  http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/17696

This also reverts r265761 "ValueMapper: Unduplicate
RF_NoModuleLevelChanges check, NFC", since I had trouble separating it
from r265759.

llvm-svn: 265765