platform/upstream/llvm.git
8 years agoReapply "CodeGen: Use references in MachineTraceMetrics::Trace, NFC"
Duncan P. N. Exon Smith [Mon, 22 Feb 2016 03:33:28 +0000 (03:33 +0000)]
Reapply "CodeGen: Use references in MachineTraceMetrics::Trace, NFC"

This reverts commit r261510, effectively reapplying r261509.  The
original commit missed a caller in AArch64ConditionalCompares.

Original commit message:

Pass non-null arguments by reference in MachineTraceMetrics::Trace,
simplifying future work to remove implicit iterator => pointer
conversions.

llvm-svn: 261511

8 years agoRevert "CodeGen: Use references in MachineTraceMetrics::Trace, NFC"
Duncan P. N. Exon Smith [Mon, 22 Feb 2016 03:12:42 +0000 (03:12 +0000)]
Revert "CodeGen: Use references in MachineTraceMetrics::Trace, NFC"

This reverts commit r261509.  I'm not sure how this compiled locally,
but something was out of whack.

llvm-svn: 261510

8 years agoCodeGen: Use references in MachineTraceMetrics::Trace, NFC
Duncan P. N. Exon Smith [Mon, 22 Feb 2016 03:07:49 +0000 (03:07 +0000)]
CodeGen: Use references in MachineTraceMetrics::Trace, NFC

Pass non-null arguments by reference in MachineTraceMetrics::Trace,
simplifying future work to remove implicit iterator => pointer
conversions.

llvm-svn: 261509

8 years agoCodeGen: Explicitly convert from iterator to pointer, NFC
Duncan P. N. Exon Smith [Mon, 22 Feb 2016 02:53:42 +0000 (02:53 +0000)]
CodeGen: Explicitly convert from iterator to pointer, NFC

llvm-svn: 261508

8 years agoDocument assumption in X86FrameLowering::inlineStackProbe()
Duncan P. N. Exon Smith [Mon, 22 Feb 2016 02:32:35 +0000 (02:32 +0000)]
Document assumption in X86FrameLowering::inlineStackProbe()

Resolve FIXME from r261504.  Apparently bundled instructions are illegal
here:
http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20160215/334146.html

llvm-svn: 261507

8 years agoFix PR24473 : Teach clang to remember to substitute into member variable templates...
Faisal Vali [Mon, 22 Feb 2016 02:24:29 +0000 (02:24 +0000)]
Fix PR24473 : Teach clang to remember to substitute into member variable templates referred to within dependent qualified ids.

In passing also fix a semi-related bug that allows access to variable templates through member access notation.

llvm-svn: 261506

8 years ago[X86] More test updates to support fixup-byte-word-insts optimization
Kevin B. Smith [Mon, 22 Feb 2016 01:27:56 +0000 (01:27 +0000)]
[X86] More test updates to support fixup-byte-word-insts optimization
either on or off.
Differential Revisions: http://reviews.llvm.org/D17458

llvm-svn: 261505

8 years agoCodeGen: MachineInstr::getIterator() => getInstrIterator(), NFC
Duncan P. N. Exon Smith [Sun, 21 Feb 2016 22:58:35 +0000 (22:58 +0000)]
CodeGen: MachineInstr::getIterator() => getInstrIterator(), NFC

Delete MachineInstr::getIterator(), since the term "iterator" is
overloaded when talking about MachineInstr.

- Downcast to ilist_node in iplist::getNextNode() and getPrevNode() so
  that ilist_node::getIterator() is still available.
- Add it back as MachineInstr::getInstrIterator().  This matches the
  naming in MachineBasicBlock.
- Add MachineInstr::getBundleIterator().  This is explicitly called
  "bundle" (not matching MachineBasicBlock) to disintinguish it clearly
  from ilist_node::getIterator().
- Update all calls.  Some of these I switched to `auto` to remove
  boiler-plate, since the new name is clear about the type.

There was one call I updated that looked fishy, but it wasn't clear what
the right answer was.  This was in X86FrameLowering::inlineStackProbe(),
added in r252578 in lib/Target/X86/X86FrameLowering.cpp.  I opted to
leave the behaviour unchanged, but I'll reply to the original commit on
the list in a moment.

llvm-svn: 261504

8 years ago[Orc] Add stack-realignment code to the i386 resolver function.
Lang Hames [Sun, 21 Feb 2016 22:50:26 +0000 (22:50 +0000)]
[Orc] Add stack-realignment code to the i386 resolver function.

The resolver uses the fxsave/fxrstor instructions, which require 16-byte
alignment, to save SSE state to the stack. Since 16-byte alignment can't be
assumed on all OSes (and all i386 OSes share this function) - add code to
automatically bump the alignment to 16-bytes on entry to the function.

llvm-svn: 261503

8 years agoCodeGen: Split bundle_iterator into a separate file, NFC
Duncan P. N. Exon Smith [Sun, 21 Feb 2016 22:05:50 +0000 (22:05 +0000)]
CodeGen: Split bundle_iterator into a separate file, NFC

Split MachineBasicBlock::bundle_iterator into a separate file, and
rename the class to MachineBundleIterator.

This is a precursor to adding a `MachineInstr::getBundleIterator()`
accessor, which will eventually let us delete the final call to
getNodePtrUnchecked(), and then remove the UB from ilist_iterator.

As a drive-by, I removed an unnecessary second template parameter.

llvm-svn: 261502

8 years agoAdd test case for [FIX] commit r261474
Johannes Doerfert [Sun, 21 Feb 2016 21:53:39 +0000 (21:53 +0000)]
Add test case for [FIX] commit r261474

llvm-svn: 261501

8 years agoCodeGen: Add constructor for MIBuilder from a bundle_iterator, NFC
Duncan P. N. Exon Smith [Sun, 21 Feb 2016 21:15:37 +0000 (21:15 +0000)]
CodeGen: Add constructor for MIBuilder from a bundle_iterator, NFC

Don't require explicit conversions for creating a MachineInstrBuilder
from a bundle_iterator.

llvm-svn: 261500

8 years agoADT: Disallow == and != between pointers and ilist iterators
Duncan P. N. Exon Smith [Sun, 21 Feb 2016 20:46:37 +0000 (20:46 +0000)]
ADT: Disallow == and != between pointers and ilist iterators

I completely missed these non-class operators when I removed the
implicit conversions in r252380.  Remove them now.  r261498 should have
already removed all uses.

Note (repeated from r252380): if you have out-of-tree code, it should be
fairly easy to revert this patch downstream while you update your
out-of-tree call sites.  Note that these conversions are occasionally
latent bugs (that may happen to "work" now, but only because of getting
lucky with UB; follow-ups will change your luck).  When they are valid,
I suggest using `->getIterator()` to go from pointer to iterator, and
`&*` to go from iterator to pointer.

llvm-svn: 261499

8 years agoADT: Remove == and != comparisons between ilist iterators and pointers
Duncan P. N. Exon Smith [Sun, 21 Feb 2016 20:39:50 +0000 (20:39 +0000)]
ADT: Remove == and != comparisons between ilist iterators and pointers

I missed == and != when I removed implicit conversions between iterators
and pointers in r252380 since they were defined outside ilist_iterator.

Since they depend on getNodePtrUnchecked(), they indirectly rely on UB.
This commit removes all uses of these operators.  (I'll delete the
operators themselves in a separate commit so that it can be easily
reverted if necessary.)

There should be NFC here.

llvm-svn: 261498

8 years agoTransformUtils: Avoid getNodePtrUnchecked() in integer division, NFC
Duncan P. N. Exon Smith [Sun, 21 Feb 2016 20:14:29 +0000 (20:14 +0000)]
TransformUtils: Avoid getNodePtrUnchecked() in integer division, NFC

Stop relying on `getNodePtrUnchecked()` being useful on invalid
iterators.  This function is documented to be for internal use only, and
the pointer type will eventually have to change to remove UB from
ilist_iterator.  Instead, check the iterator before it has been
invalidated.

llvm-svn: 261497

8 years agoIslAst: Expose IslAst class in header file [NFC]
Tobias Grosser [Sun, 21 Feb 2016 20:01:28 +0000 (20:01 +0000)]
IslAst: Expose IslAst class in header file [NFC]

This allows other passes and transformations to use some of the existing AST
building infrastructure. This is not yet used in Polly itself.

llvm-svn: 261496

8 years agoADT: Stop using getNodePtrUnchecked on end() iterators
Duncan P. N. Exon Smith [Sun, 21 Feb 2016 19:52:15 +0000 (19:52 +0000)]
ADT: Stop using getNodePtrUnchecked on end() iterators

Stop using `getNodePtrUnchecked()` when building IR.  Eventually a
dereference will be required to get at the downcast node, since the
iterator will only store an `ilist_node_base` of some sort.

This should have no functionality change for now, but is a path towards
removing some more UB from ilist.

llvm-svn: 261495

8 years ago[X86] Remove unused encoding types from disassembler. NFC
Craig Topper [Sun, 21 Feb 2016 19:49:16 +0000 (19:49 +0000)]
[X86] Remove unused encoding types from disassembler. NFC

llvm-svn: 261494

8 years agoCodeGen: Avoid getNodePtrUnchecked() where we need a Value, NFC
Duncan P. N. Exon Smith [Sun, 21 Feb 2016 19:37:45 +0000 (19:37 +0000)]
CodeGen: Avoid getNodePtrUnchecked() where we need a Value, NFC

`ilist_iterator<NodeTy>::getNodePtrUnchecked()` is documented as being
for internal use only, but CodeGenPrepare was using it anyway.  This
code relies on pulling out the `Value*` pointer even after the lifetime
of the iterator is over.  But having this pointer available in
ilist_iterator depends on UB in the first place.

Instead, safely pull out the `Value*` when the iterator is alive and
stop using the internal-only API.

There should be no functionality change here.

llvm-svn: 261493

8 years agoADT: clang-format ilist_iterator, NFC
Duncan P. N. Exon Smith [Sun, 21 Feb 2016 19:26:08 +0000 (19:26 +0000)]
ADT: clang-format ilist_iterator, NFC

Also removed a couple of noisy (no-value-added) comments.

llvm-svn: 261492

8 years agoADT: Remove ilist_iterator random access API, NFC
Duncan P. N. Exon Smith [Sun, 21 Feb 2016 19:23:18 +0000 (19:23 +0000)]
ADT: Remove ilist_iterator random access API, NFC

Remove explicitly deleted random access API from ilist_iterator.
Since it no longer has implicit conversions to a pointer type, we
no longer need this protection.

llvm-svn: 261491

8 years ago[X86][AVX] Add shuffle masking support for EltsFromConsecutiveLoads
Simon Pilgrim [Sun, 21 Feb 2016 19:15:48 +0000 (19:15 +0000)]
[X86][AVX] Add shuffle masking support for EltsFromConsecutiveLoads

Add support for the case where we have a consecutive load (which must include the first + last elements) with a mixture of undef/zero elements. We load the vector and then apply a shuffle to clear the zero'd elements.

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

llvm-svn: 261490

8 years agoSupport memory intrinsics
Johannes Doerfert [Sun, 21 Feb 2016 19:13:19 +0000 (19:13 +0000)]
Support memory intrinsics

  This patch adds support for memcpy, memset and memmove intrinsics. They are
  represented as one (memset) or two (memcpy, memmove) memory accesses in the
  polyhedral model. These accesses have an access range that describes the
  summarized effect of the intrinsic, i.e.,
    memset(&A[i], '$', N);
  is represented as a write access from A[i] to A[i+N].

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

llvm-svn: 261489

8 years agoUse regular expressions instead of temporary names for IR test [NFC]
Johannes Doerfert [Sun, 21 Feb 2016 18:59:35 +0000 (18:59 +0000)]
Use regular expressions instead of temporary names for IR test [NFC]

llvm-svn: 261488

8 years agoScalerEvolution: Only erase temporary values if they actually have been added
Tobias Grosser [Sun, 21 Feb 2016 18:50:09 +0000 (18:50 +0000)]
ScalerEvolution: Only erase temporary values if they actually have been added

This addresses post-review comments from Sanjoy Das for r261485.

llvm-svn: 261486

8 years agoScalarEvolution: Do not keep temporary PHI values in ValueExprMap
Tobias Grosser [Sun, 21 Feb 2016 17:42:10 +0000 (17:42 +0000)]
ScalarEvolution: Do not keep temporary PHI values in ValueExprMap

Before this patch simplified SCEV expressions for PHI nodes were only returned
the very first time getSCEV() was called, but later calls to getSCEV always
returned the non-simplified value, which had "temporarily" been stored in the
ValueExprMap, but was never removed and consequently blocked the caching of the
simplified PHI expression.

llvm-svn: 261485

8 years agofix inaccurate comment; NFC
Sanjay Patel [Sun, 21 Feb 2016 17:33:31 +0000 (17:33 +0000)]
fix inaccurate comment; NFC

llvm-svn: 261484

8 years ago[InstCombine] add getNegativeIsTrueBoolVec() helper function; NFC
Sanjay Patel [Sun, 21 Feb 2016 17:29:33 +0000 (17:29 +0000)]
[InstCombine] add getNegativeIsTrueBoolVec() helper function; NFC

Originally part of:
http://reviews.llvm.org/D17485

We need this when simplifying masked memory ops too.

llvm-svn: 261483

8 years agoFix LLVM's handling and detection of skylake and cannonlake CPUs
Sanjoy Das [Sun, 21 Feb 2016 17:12:03 +0000 (17:12 +0000)]
Fix LLVM's handling and detection of skylake and cannonlake CPUs

Summary:
 - Rename `"skylake"` == SkylakeServerProc to `"skylake-avx512"`
 - Change `"skylake"` to denote SkylakeClientProc
 - Fix the detection of cpu family 6 and model 94 to be
   SkylakeClientProc instead of SkylakeServerProc
 - Remove the `"cnl"` for CannonLake

Reviewers: craig.topper, delena

Subscribers: zansari, echristo, qcolombet, RKSimon, spatel, DavidKreitzer, mcrosier, llvm-commits

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

llvm-svn: 261482

8 years ago[LoopDeletion] Add an assert that verifies LCSSA
Sanjoy Das [Sun, 21 Feb 2016 17:11:59 +0000 (17:11 +0000)]
[LoopDeletion] Add an assert that verifies LCSSA

This is inspired by PR24804 -- had this assert been there before,
isolating the root cause for PR24804 would have been far easier.

llvm-svn: 261481

8 years ago[analyzer][scan-build] Non-existing directory for scan-build output.
Anton Yartsev [Sun, 21 Feb 2016 17:04:26 +0000 (17:04 +0000)]
[analyzer][scan-build] Non-existing directory for scan-build output.

Makes scan-build successfully accept non-existing output directories provided via "-o" option. The directory is created in this case. This behavior is conforming to the old perl scan-build implementation.
(http://reviews.llvm.org/D17091)

llvm-svn: 261480

8 years agoWebAssembly: update expected torture test failures
JF Bastien [Sun, 21 Feb 2016 16:52:00 +0000 (16:52 +0000)]
WebAssembly: update expected torture test failures

r261457 handles CopyToReg nodes with flag results in LowerCopyToReg, which was causing the SelectionDAGNodes assert.

llvm-svn: 261479

8 years ago[Refactor] Add missing newline after functions
Johannes Doerfert [Sun, 21 Feb 2016 16:37:58 +0000 (16:37 +0000)]
[Refactor] Add missing newline after functions

llvm-svn: 261478

8 years ago[Refactor] Indicate pointer and reference types when auto is used
Johannes Doerfert [Sun, 21 Feb 2016 16:37:25 +0000 (16:37 +0000)]
[Refactor] Indicate pointer and reference types when auto is used

  See also:
    http://llvm.org/docs/CodingStandards.html#use-auto-type-deduction-to-make-code-more-readable

llvm-svn: 261477

8 years ago[Refactor] Add newlines to separate doxygen fields
Johannes Doerfert [Sun, 21 Feb 2016 16:36:54 +0000 (16:36 +0000)]
[Refactor] Add newlines to separate doxygen fields

llvm-svn: 261476

8 years ago[Refactor] Avoid variables with name of types
Johannes Doerfert [Sun, 21 Feb 2016 16:36:21 +0000 (16:36 +0000)]
[Refactor] Avoid variables with name of types

llvm-svn: 261475

8 years ago[FIX] Compare SCEVs not values during SCEV expansion
Johannes Doerfert [Sun, 21 Feb 2016 16:36:00 +0000 (16:36 +0000)]
[FIX] Compare SCEVs not values during SCEV expansion

  This fixes a compile time bug in SPEC2006 403.gcc, namely an endless
  recursion in the ScopExpander::visitUnknown function.

llvm-svn: 261474

8 years agoBlockGenerator: Drop unnecessary return value
Tobias Grosser [Sun, 21 Feb 2016 15:44:34 +0000 (15:44 +0000)]
BlockGenerator: Drop unnecessary return value

llvm-svn: 261473

8 years ago[InstCombine] Added SSE41 roundss/roundsd demanded vector elements invec tests
Simon Pilgrim [Sun, 21 Feb 2016 14:50:27 +0000 (14:50 +0000)]
[InstCombine] Added SSE41 roundss/roundsd demanded vector elements invec tests

llvm-svn: 261472

8 years ago[CLANG] [AVX512] [BUILTIN] Adding pmovzx{b|d|w}{w|d|q}{128|256|512} builtin to clang
Michael Zuckerman [Sun, 21 Feb 2016 14:00:11 +0000 (14:00 +0000)]
[CLANG] [AVX512] [BUILTIN] Adding pmovzx{b|d|w}{w|d|q}{128|256|512} builtin to clang

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

llvm-svn: 261471

8 years ago[InstCombine] Added XOP frczss/vfrczsd demanded vector elements tests
Simon Pilgrim [Sun, 21 Feb 2016 12:45:36 +0000 (12:45 +0000)]
[InstCombine] Added XOP frczss/vfrczsd demanded vector elements tests

llvm-svn: 261469

8 years ago[InstCombine] Added SSE41 roundss/roundsd demanded vector elements tests
Simon Pilgrim [Sun, 21 Feb 2016 12:40:39 +0000 (12:40 +0000)]
[InstCombine] Added SSE41 roundss/roundsd demanded vector elements tests

llvm-svn: 261468

8 years agoAdded SKL and CNL processors and features to Clang
Elena Demikhovsky [Sun, 21 Feb 2016 07:41:23 +0000 (07:41 +0000)]
Added SKL and CNL processors and features to Clang

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

llvm-svn: 261467

8 years agoClass Property: Fix a crash with old ABI when generating metadata in classes.
Manman Ren [Sun, 21 Feb 2016 05:31:05 +0000 (05:31 +0000)]
Class Property: Fix a crash with old ABI when generating metadata in classes.

rdar://23891898

llvm-svn: 261466

8 years ago[WebAssembly] Support physical registers in the rewrite-to-discard optimization.
Dan Gohman [Sun, 21 Feb 2016 03:27:22 +0000 (03:27 +0000)]
[WebAssembly] Support physical registers in the rewrite-to-discard optimization.

llvm-svn: 261465

8 years agoIR: Add ConstantData, for operand-less Constants
Duncan P. N. Exon Smith [Sun, 21 Feb 2016 02:39:49 +0000 (02:39 +0000)]
IR: Add ConstantData, for operand-less Constants

Add a common parent `ConstantData` to the constants that have no
operands.  These are guaranteed to represent abstract data that is in no
way tied to a specific Module.

This is a good cleanup on its own.  It also makes it simpler to disallow
RAUW (and factor away use-lists) on these constants in the future.  (I
have some experimental patches that make RAUW illegal on ConstantData,
and they seem to catch a bunch of bugs...)

llvm-svn: 261464

8 years agoUnbreak non-X86 targets from fallout caused by r261462
David Majnemer [Sun, 21 Feb 2016 01:40:04 +0000 (01:40 +0000)]
Unbreak non-X86 targets from fallout caused by r261462

llvm-svn: 261463

8 years ago[X86] Use the correct alignment for COMDAT constant pool entries
David Majnemer [Sun, 21 Feb 2016 01:30:30 +0000 (01:30 +0000)]
[X86] Use the correct alignment for COMDAT constant pool entries

COFF doesn't have sections with mergeable contents.  Instead, each
constant pool entry ends up in a COMDAT section.  The linker, when
choosing between COMDAT sections, doesn't choose the max alignment of
the two sections.  You just get whatever alignment was on the section.

If one constant needed a higher alignment in one object file from
another one, then we will get into trouble if the linker chooses the
lower alignment one.

Instead, lets promote the alignment of the constant pool entry to make
sure we don't use an under aligned constant with an instruction which
assumed otherwise.

This fixes PR26680.

llvm-svn: 261462

8 years agoLex: Never overflow the file in HeaderMap::lookupFilename()
Duncan P. N. Exon Smith [Sun, 21 Feb 2016 00:14:36 +0000 (00:14 +0000)]
Lex: Never overflow the file in HeaderMap::lookupFilename()

If a header map file is corrupt, the strings in the string table may not
be null-terminated.  The logic here previously relied on `MemoryBuffer`
always being null-terminated, but this isn't actually guaranteed by the
class AFAICT.  Moreover, we're seeing a lot of crash traces at calls to
`strlen()` inside of `lookupFilename()`, so something is going wrong
there.

Instead, use `strnlen()` to get the length, and check for corruption.

Also remove code paths that could call `StringRef(nullptr)`.  r261459
made these rather obvious (although they'd been there all along).

llvm-svn: 261461

8 years ago[InstCombine] SSE/SSE2 (u)comiss/(u)comisd comparison intrinsics only use the lowest...
Simon Pilgrim [Sat, 20 Feb 2016 23:17:35 +0000 (23:17 +0000)]
[InstCombine] SSE/SSE2 (u)comiss/(u)comisd comparison intrinsics only use the lowest vector element

llvm-svn: 261460

8 years agoLex: Change HeaderMapImpl::getString() to return StringRef, NFC
Duncan P. N. Exon Smith [Sat, 20 Feb 2016 23:12:51 +0000 (23:12 +0000)]
Lex: Change HeaderMapImpl::getString() to return StringRef, NFC

llvm-svn: 261459

8 years ago[WebAssembly] Refine a README.txt entry.
Dan Gohman [Sat, 20 Feb 2016 23:11:14 +0000 (23:11 +0000)]
[WebAssembly] Refine a README.txt entry.

The register coloring pass may also need to be involved in order to
optimally sort registers.

llvm-svn: 261458

8 years ago[WebAssembly] Handle CopyToReg nodes with flag results in LowerCopyToReg.
Dan Gohman [Sat, 20 Feb 2016 23:09:44 +0000 (23:09 +0000)]
[WebAssembly] Handle CopyToReg nodes with flag results in LowerCopyToReg.

llvm-svn: 261457

8 years agoLex: Use dbgs() instead of fprintf() in HeaderMap::dump()
Duncan P. N. Exon Smith [Sat, 20 Feb 2016 23:09:14 +0000 (23:09 +0000)]
Lex: Use dbgs() instead of fprintf() in HeaderMap::dump()

This way it's easy to change HeaderMapImpl::getString() to return a
StringRef.

There's a slight change here, because I used `errs()` instead of
`dbgs()`.  But `dbgs()` is more appropriate for a dump method.

llvm-svn: 261456

8 years agoLex: Add a test for HeaderMap::lookupFileName()
Duncan P. N. Exon Smith [Sat, 20 Feb 2016 22:53:22 +0000 (22:53 +0000)]
Lex: Add a test for HeaderMap::lookupFileName()

Add a simple test for `HeaderMap::lookupFileName()`.  I'm planning to
add better error checking in a moment, and I'll add more tests like this
then.

llvm-svn: 261455

8 years ago[InstCombine] Added SSE/SSE2 comparison intrinsics demanded vector elements tests
Simon Pilgrim [Sat, 20 Feb 2016 22:41:31 +0000 (22:41 +0000)]
[InstCombine] Added SSE/SSE2 comparison intrinsics demanded vector elements tests

llvm-svn: 261454

8 years ago[WebAssembly] Write stack pointer back to memory when FP is used
Derek Schuff [Sat, 20 Feb 2016 22:18:47 +0000 (22:18 +0000)]
[WebAssembly] Write stack pointer back to memory when FP is used

The stack pointer is bumped when there is a frame pointer or when there
are static-size objects, but was only getting written back when there
were static-size objects.

llvm-svn: 261453

8 years ago[WebAssembly] Stackify function prologs and epilogs
Derek Schuff [Sat, 20 Feb 2016 21:46:50 +0000 (21:46 +0000)]
[WebAssembly] Stackify function prologs and epilogs

The instructions are the same, but fewer locals are used.

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

llvm-svn: 261452

8 years ago[InstCombine] Added some SSE/SSE2 demanded vector elements tests
Simon Pilgrim [Sat, 20 Feb 2016 21:44:48 +0000 (21:44 +0000)]
[InstCombine] Added some SSE/SSE2 demanded vector elements tests

llvm-svn: 261451

8 years agoDon't scan for SSA register operands to update when not in SSA form.
Dan Gohman [Sat, 20 Feb 2016 21:28:18 +0000 (21:28 +0000)]
Don't scan for SSA register operands to update when not in SSA form.

TailDuplicate can run on either on SSA code or non-SSA code, as indicated to
it by MRI->isSSA() ("PreRegAlloc" here). TailDuplicate does extra work to
preserve SSA invariants when it duplicates code. This patch makes it skip
some of this extra work in the case where the code is not in SSA form.

llvm-svn: 261450

8 years agoLex: Check whether the header map buffer has space for the buckets
Duncan P. N. Exon Smith [Sat, 20 Feb 2016 21:24:31 +0000 (21:24 +0000)]
Lex: Check whether the header map buffer has space for the buckets

Check up front whether the header map buffer has space for all of its
declared buckets.

There was already a check in `getBucket()`, but it had UB (comparing
pointers that were outside of objects in the error path) and was
insufficient (only checking for a single byte of the relevant bucket).
I fixed the check, moved it to `checkHeader()`, and left a fixed version
behind as an assertion.

llvm-svn: 261449

8 years agoLex: Check buckets on header map construction
Duncan P. N. Exon Smith [Sat, 20 Feb 2016 21:00:58 +0000 (21:00 +0000)]
Lex: Check buckets on header map construction

If the number of buckets is not a power of two, immediately recognize
the header map as corrupt, rather than waiting for the first lookup.  I
converted the later check to an assert.

llvm-svn: 261448

8 years agoFix the build bot break caused by rL261441.
Nemanja Ivanovic [Sat, 20 Feb 2016 20:45:37 +0000 (20:45 +0000)]
Fix the build bot break caused by rL261441.

The patch has a necessary call to a function inside an assert. Which is fine
when you have asserts turned on. Not so much when they're off. Sorry about
the regression.

llvm-svn: 261447

8 years agoLex: Add some unit tests for corrupt header maps
Duncan P. N. Exon Smith [Sat, 20 Feb 2016 20:39:51 +0000 (20:39 +0000)]
Lex: Add some unit tests for corrupt header maps

Split the implementation of `HeaderMap` into `HeaderMapImpl` so that we
can write unit tests that don't depend on the `FileManager`, and then
write a few tests that cover the types of corrupt header maps already
detected.

This also moves type and constant definitions from HeaderMap.cpp to
HeaderMapTypes.h so that the test can access them.

llvm-svn: 261446

8 years ago[c-index-test] CMake: When installing c-index-test to a different prefix directory...
Argyrios Kyrtzidis [Sat, 20 Feb 2016 20:34:55 +0000 (20:34 +0000)]
[c-index-test] CMake: When installing c-index-test to a different prefix directory, add an rpath so that
it can find libclang.

llvm-svn: 261445

8 years ago[X86][AVX] Added test case for PR22359
Simon Pilgrim [Sat, 20 Feb 2016 19:21:20 +0000 (19:21 +0000)]
[X86][AVX] Added test case for PR22359

llvm-svn: 261444

8 years agoLex: clang-format HeaderMap.h, NFC
Duncan P. N. Exon Smith [Sat, 20 Feb 2016 18:55:08 +0000 (18:55 +0000)]
Lex: clang-format HeaderMap.h, NFC

llvm-svn: 261443

8 years agoLex: Remove explicitly deleted copy constructor, NFC
Duncan P. N. Exon Smith [Sat, 20 Feb 2016 18:53:45 +0000 (18:53 +0000)]
Lex: Remove explicitly deleted copy constructor, NFC

`std::unique_ptr<MemoryBuffer>` already deletes these, so there's no
reason for the boiler-plate in HeaderMap.

llvm-svn: 261442

8 years agoFix for PR 26500
Nemanja Ivanovic [Sat, 20 Feb 2016 18:16:25 +0000 (18:16 +0000)]
Fix for PR 26500

This patch corresponds to review:
http://reviews.llvm.org/D17294

It ensures that whatever block we are emitting the prologue/epilogue into, we
have the necessary scratch registers. It takes away the hard-coded register
numbers for use as scratch registers as registers that are guaranteed to be
available in the function prologue/epilogue are not guaranteed to be available
within the function body. Since we shrink-wrap, the prologue/epilogue may end
up in the function body.

llvm-svn: 261441

8 years ago[X86] Regenerated pr16360.ll
Simon Pilgrim [Sat, 20 Feb 2016 17:56:45 +0000 (17:56 +0000)]
[X86] Regenerated pr16360.ll

llvm-svn: 261440

8 years ago[X86][SSE41] More fast-isel intrinsics tests
Simon Pilgrim [Sat, 20 Feb 2016 17:30:37 +0000 (17:30 +0000)]
[X86][SSE41] More fast-isel intrinsics tests

llvm-svn: 261439

8 years ago[X86][SSE41] Added fast-isel intrinsics tests
Simon Pilgrim [Sat, 20 Feb 2016 17:11:32 +0000 (17:11 +0000)]
[X86][SSE41] Added fast-isel intrinsics tests

As discussed on PR24580, this patch adds some (more to come) initial fast-isel codegen tests to match the IR generated in clang/test/CodeGen/sse41-builtins.c

llvm-svn: 261438

8 years ago[DAGCombiner] Use getBitcast helper when possible. NFCI.
Simon Pilgrim [Sat, 20 Feb 2016 15:05:29 +0000 (15:05 +0000)]
[DAGCombiner] Use getBitcast helper when possible. NFCI.

llvm-svn: 261437

8 years agoIntroduce helper function to build isl_flow, NFC.
Hongbin Zheng [Sat, 20 Feb 2016 14:45:48 +0000 (14:45 +0000)]
Introduce helper function to build isl_flow, NFC.

llvm-svn: 261436

8 years agoAdd the missing modifier 'static' for addZeroPaddingToSchedule, NFC
Hongbin Zheng [Sat, 20 Feb 2016 14:45:46 +0000 (14:45 +0000)]
Add the missing modifier 'static' for addZeroPaddingToSchedule, NFC

llvm-svn: 261435

8 years ago[X86][SSE] Fixed issue with commutation of 'faux unary' target shuffles (PR26667)
Simon Pilgrim [Sat, 20 Feb 2016 14:39:45 +0000 (14:39 +0000)]
[X86][SSE] Fixed issue with commutation of 'faux unary' target shuffles (PR26667)

Fixed a bug introduced by D16683 when a binary shuffle is simplified to a unary shuffle (with undef/zero sentinel mask indices) - if this resulted in only the second input being used combineX86ShuffleChain failed to take this into account and still referenced the first input.

llvm-svn: 261434

8 years ago[X86][SSE] Move all undef/zero cases before target shuffle combining.
Simon Pilgrim [Sat, 20 Feb 2016 12:57:32 +0000 (12:57 +0000)]
[X86][SSE] Move all undef/zero cases before target shuffle combining.

First small step towards fixing PR26667 - we need to ensure that combineX86ShuffleChain only gets called with a valid shuffle input node (a similar issue was found in D17041).

llvm-svn: 261433

8 years ago[CMake] Add partial support for MSVC in compiler-rt builtins, by Roman Shirokiy.
Andrey Turetskiy [Sat, 20 Feb 2016 12:56:04 +0000 (12:56 +0000)]
[CMake] Add partial support for MSVC in compiler-rt builtins, by Roman Shirokiy.

This enables MSVC build of complex number arithmetic compiler-rt builtins.

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

llvm-svn: 261432

8 years ago[clang-tidy] Describe modules, link to LLVM development docs, other minor updates
Alexander Kornienko [Sat, 20 Feb 2016 11:42:13 +0000 (11:42 +0000)]
[clang-tidy] Describe modules, link to LLVM development docs, other minor updates

llvm-svn: 261431

8 years agoWhen MemoryDependenceAnalysis hits a CFG with many transparent blocks,
Joerg Sonnenberger [Sat, 20 Feb 2016 11:24:44 +0000 (11:24 +0000)]
When MemoryDependenceAnalysis hits a CFG with many transparent blocks,
the algorithm easily degrades into quadratic memory and time complexity.
The easiest example is a long chain of BBs that don't otherwise use a
location. The caching will add an entry for every intermediate block and
limiting the number of results doesn't help as no results are produced
until a definition is found.

Introduce a limit similar to the existing instructions-per-block limit.
This limit counts the total number of blocks checked. If the limit is
reached, entries are considered unknown. The initial value is 1000,
which avoids regressions for normal sized functions while still
limiting edge cases to reasnable memory consumption and execution time.

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

llvm-svn: 261430

8 years ago[X86] Enable the LEA optimization pass by default.
Andrey Turetskiy [Sat, 20 Feb 2016 11:11:55 +0000 (11:11 +0000)]
[X86] Enable the LEA optimization pass by default.

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

llvm-svn: 261429

8 years ago[X86] PR26575: Fix LEA optimization pass (Part 2).
Andrey Turetskiy [Sat, 20 Feb 2016 10:58:28 +0000 (10:58 +0000)]
[X86] PR26575: Fix LEA optimization pass (Part 2).

Handle address displacement operands of a type other than Immediate or Global in LEAs and load/stores.

Ref: https://llvm.org/bugs/show_bug.cgi?id=26575

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

llvm-svn: 261428

8 years ago[SimplifyCFG] Use pointer identity to simplify predicate.
Benjamin Kramer [Sat, 20 Feb 2016 10:40:42 +0000 (10:40 +0000)]
[SimplifyCFG] Use pointer identity to simplify predicate.

No functional change intended.

llvm-svn: 261427

8 years ago[LVI] Move ConstantRanges instead of copying.
Benjamin Kramer [Sat, 20 Feb 2016 10:40:34 +0000 (10:40 +0000)]
[LVI] Move ConstantRanges instead of copying.

No functional change intended. Copying small (<= 64 bits) APInts isn't
expensive but bloats code by generating the slow path everywhere. Moving
doesn't care about the size of the value.

llvm-svn: 261426

8 years ago[MSVC Compat] Implement -EHc semantics
David Majnemer [Sat, 20 Feb 2016 09:23:47 +0000 (09:23 +0000)]
[MSVC Compat] Implement -EHc semantics

The -EHc flag implicitly adds a nothrow attribute to any extern "C"
function when exceptions are enabled.

llvm-svn: 261425

8 years ago[MSVC Compat] Add support for /GX, /GX-
David Majnemer [Sat, 20 Feb 2016 09:23:44 +0000 (09:23 +0000)]
[MSVC Compat] Add support for /GX, /GX-

These are legacy flags which map to /EHsc and /EHs-c- respectively.

llvm-svn: 261424

8 years agoRemove -fnew-ms-eh
David Majnemer [Sat, 20 Feb 2016 09:23:41 +0000 (09:23 +0000)]
Remove -fnew-ms-eh

This flag no longer controls any behavior inside of clang.

llvm-svn: 261423

8 years agoFix handling of vaargs on PPC32 when going from regsave to overflow.
Roman Divacky [Sat, 20 Feb 2016 08:31:24 +0000 (08:31 +0000)]
Fix handling of vaargs on PPC32 when going from regsave to overflow.

It can happen that when we only have 1 more register left in the regsave
area we need to store a value bigger than 1 register and therefore we
go to the overflow area. In this case we have to leave the last slot
in the regsave area unused and keep using overflow area. Do this
by storing a limit value to the used register counter in the overflow block.

Issue diagnosed by and solution tested by Mark Millard!

llvm-svn: 261422

8 years agoRename <__hash_table> traits so they don't conflict with similar traits.
Eric Fiselier [Sat, 20 Feb 2016 07:59:16 +0000 (07:59 +0000)]
Rename <__hash_table> traits so they don't conflict with similar traits.

In particular <__tree> defines many of the same types of traits classes.

llvm-svn: 261421

8 years agoMove some code from doInitialization to runOnFunction
David Majnemer [Sat, 20 Feb 2016 07:34:21 +0000 (07:34 +0000)]
Move some code from doInitialization to runOnFunction

This has no observable behavior change, it just makes the state
insertion pass look a little more like normal passes.

llvm-svn: 261420

8 years agoRemove all usages of "const" node pointer typedefs in the assoc containers.
Eric Fiselier [Sat, 20 Feb 2016 07:12:17 +0000 (07:12 +0000)]
Remove all usages of "const" node pointer typedefs in the assoc containers.

The "const" pointer typedefs such as "__node_const_pointer" and
"__node_base_const_pointer" are identical to their non-const pointer types.
This patch changes all usages of "const" pointer type names to their respective
non-const typedef.

Since "fancy pointers to const" cannot be converted back to a non-const pointer
type according to the allocator requirements it is important that we never
actually use "const" pointers.

Furthermore since "__node_const_pointer" and "__node_pointer" already
name the same type, it's very confusing to use both names. Especially
when defining const/non-const overloads for member functions.

llvm-svn: 261419

8 years ago[X86] Remove some unused encoding checks from the disassembler table building.
Craig Topper [Sat, 20 Feb 2016 06:20:21 +0000 (06:20 +0000)]
[X86] Remove some unused encoding checks from the disassembler table building.

llvm-svn: 261418

8 years ago[X86] Add some missing reversed forms of XOP instructions.
Craig Topper [Sat, 20 Feb 2016 06:20:17 +0000 (06:20 +0000)]
[X86] Add some missing reversed forms of XOP instructions.

llvm-svn: 261417

8 years agoCleanup node-type handling in the associative containers.
Eric Fiselier [Sat, 20 Feb 2016 05:28:30 +0000 (05:28 +0000)]
Cleanup node-type handling in the associative containers.

This patch is very similar to r260431.

This patch is the first in a series of patches that's meant to better
support map. map has a special "value_type" that
differs from pair<const Key, Value>. In order to meet the EmplaceConstructible
and CopyInsertable requirements we need to teach __tree about this
special value_type.

This patch creates a "__tree_node_types" traits class that contains
all of the typedefs needed by the associative containers and their iterators.
These typedefs include ones for each node type and  node pointer type,
as well as special typedefs for "map"'s value type.

Although the associative containers already supported incomplete types, this
patch makes it official by adding tests.

This patch will be followed up shortly with various cleanups within __tree and
fixes for various map bugs and problems.

llvm-svn: 261416

8 years ago[OPENMP 4.5] Initial support for data members in 'lastprivate' clause.
Alexey Bataev [Sat, 20 Feb 2016 04:09:36 +0000 (04:09 +0000)]
[OPENMP 4.5] Initial support for data members in 'lastprivate' clause.

OpenMP 4.5 allows to privatize non-static data members of current class
in non-static member functions. Patch adds initial support for data
members.

llvm-svn: 261412

8 years ago[PM/AA] Wire up TBAA to the new pass manager's registry and test it.
Chandler Carruth [Sat, 20 Feb 2016 04:04:52 +0000 (04:04 +0000)]
[PM/AA] Wire up TBAA to the new pass manager's registry and test it.

llvm-svn: 261411

8 years ago[PM/AA] Wire up the scoped-no-alias AA to the new pass manager's
Chandler Carruth [Sat, 20 Feb 2016 04:03:06 +0000 (04:03 +0000)]
[PM/AA] Wire up the scoped-no-alias AA to the new pass manager's
registry and test it.

llvm-svn: 261410

8 years ago[PM/AA] Wire up SCEVAA to the new pass manager's registry and test it.
Chandler Carruth [Sat, 20 Feb 2016 04:01:45 +0000 (04:01 +0000)]
[PM/AA] Wire up SCEVAA to the new pass manager's registry and test it.

llvm-svn: 261409

8 years agoMachineCopyPropagation: Introduce Reg2MIMap typedef; NFC
Matthias Braun [Sat, 20 Feb 2016 03:56:41 +0000 (03:56 +0000)]
MachineCopyPropagation: Introduce Reg2MIMap typedef; NFC

llvm-svn: 261408

8 years agoMachineCopyPropagation: Move variables from function to pass
Matthias Braun [Sat, 20 Feb 2016 03:56:39 +0000 (03:56 +0000)]
MachineCopyPropagation: Move variables from function to pass

This avoids unnecessarily passing them around when calling helper
functions. It may also be slightly faster to call clear() on the
datastructures instead of freshly initializing them for each block.

llvm-svn: 261407