]> granicus.if.org Git - llvm/log
llvm
7 years ago[X86] Fix fast-isel-int-float-conversion test
Steven Wu [Thu, 2 Nov 2017 01:34:15 +0000 (01:34 +0000)]
[X86] Fix fast-isel-int-float-conversion test

Test is failing due to the revert in r317136. Fix the test to make all
the bots happy.

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

7 years agoFix for go bindings header to match previous commit.
Eric Christopher [Thu, 2 Nov 2017 01:25:00 +0000 (01:25 +0000)]
Fix for go bindings header to match previous commit.

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

7 years agoRemove some of the go specific C bindings for debug info now that they've been migrat...
Eric Christopher [Thu, 2 Nov 2017 01:24:12 +0000 (01:24 +0000)]
Remove some of the go specific C bindings for debug info now that they've been migrated into the main C API.

Fixes a go bindings breakage after r317135.

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

7 years ago[cmake] Switch FATAL_ERROR to SEND_ERROR
Shoaib Meenai [Thu, 2 Nov 2017 01:07:37 +0000 (01:07 +0000)]
[cmake] Switch FATAL_ERROR to SEND_ERROR

It's possible for multiple distribution components to have missing
targets, and it's a lot more convenient to get all those errors in one
shot rather than having to fix them individually.

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

7 years agoUpdate cl::opt<uint64_t> instances to cl::opt<unsigned long long>
Mitch Phillips [Wed, 1 Nov 2017 23:39:41 +0000 (23:39 +0000)]
Update cl::opt<uint64_t> instances to cl::opt<unsigned long long>

cl::opt<uint64_t> fails when parsing command line arguments.

See https://bugs.llvm.org/show_bug.cgi?id=19665.

Reviewers: pcc

Subscribers: mgorny, llvm-commits, kcc

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

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

7 years ago[yaml2obj][ELF] Add support for setting alignment in program headers
Jake Ehrlich [Wed, 1 Nov 2017 23:14:48 +0000 (23:14 +0000)]
[yaml2obj][ELF] Add support for setting alignment in program headers

Sometimes program headers have larger alignments than any of the
sections they contain. Currently yaml2obj can't produce such files. A
bug recently appeared in llvm-objcopy that failed in such a case. I'd
like to be able to add tests to llvm-objcopy for such cases.

This change adds an optional alignment parameter to program headers that
will be used instead of calculating the alignment.

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

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

7 years agoloop-unroll: teach remapInstruction to update dbg.value intrinsics.
Adrian Prantl [Wed, 1 Nov 2017 23:12:35 +0000 (23:12 +0000)]
loop-unroll: teach remapInstruction to update dbg.value intrinsics.

Fixes PR35112.

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

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

7 years agoRevert "Correct dwarf unwind information in function epilogue for X86"
Petar Jovanovic [Wed, 1 Nov 2017 23:05:52 +0000 (23:05 +0000)]
Revert "Correct dwarf unwind information in function epilogue for X86"

This reverts r317100 as it introduced sanitizer-x86_64-linux-autoconf
buildbot failure (build #15606).

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

7 years ago[LLVM-C] Expose functions to create debug locations via DIBuilder.
whitequark [Wed, 1 Nov 2017 22:18:52 +0000 (22:18 +0000)]
[LLVM-C] Expose functions to create debug locations via DIBuilder.

These include:
  * Several functions for creating an LLVMDIBuilder,
  * LLVMDIBuilderCreateCompileUnit,
  * LLVMDIBuilderCreateFile,
  * LLVMDIBuilderCreateDebugLocation.

Patch by Harlan Haskins.

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

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

7 years ago[X86] Use foreach in X86.td to combine some of the CPU names that are obviously alias...
Craig Topper [Wed, 1 Nov 2017 22:15:49 +0000 (22:15 +0000)]
[X86] Use foreach in X86.td to combine some of the CPU names that are obviously aliases. NFC

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

7 years ago[X86] Add CMOV feature to 'i686' processor, making it a proper alias of pentiumpro...
Craig Topper [Wed, 1 Nov 2017 22:15:40 +0000 (22:15 +0000)]
[X86] Add CMOV feature to 'i686' processor, making it a proper alias of pentiumpro which I believe it should be.

This is consistent with current gcc behavior.

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

7 years ago[globalisel][regbank] Warn about MIR ambiguities when register bank/class names clash.
Daniel Sanders [Wed, 1 Nov 2017 22:13:05 +0000 (22:13 +0000)]
[globalisel][regbank] Warn about MIR ambiguities when register bank/class names clash.

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

7 years ago[X86][SSE] Add PACKUS support to LowerTruncate
Simon Pilgrim [Wed, 1 Nov 2017 21:52:29 +0000 (21:52 +0000)]
[X86][SSE] Add PACKUS support to LowerTruncate

Similar to the existing code to lower to PACKSS, we can use PACKUS if the input vector's leading zero bits extend all the way to the packed/truncated value.

We have to account for pre-SSE41 targets not supporting PACKUSDW

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

7 years agoRewrite FileOutputBuffer as two separate classes.
Rui Ueyama [Wed, 1 Nov 2017 21:38:14 +0000 (21:38 +0000)]
Rewrite FileOutputBuffer as two separate classes.

This patch is to rewrite FileOutputBuffer as two separate classes;
one for file-backed output buffer and the other for memory-backed
output buffer. I think the new code is easier to follow because two
different implementations are now actually separated as different
classes.

Unlike the previous implementation, the class that does not replace the
final output file using rename(2) does not create a temporary file at
all. Instead, it allocates memory using mmap(2) and use it. I think
this is an improvement because it is now guaranteed that the temporary
memory region doesn't trigger any I/O and there's now zero chance to
leave a temporary file behind. Also, it shouldn't impose new restrictions
because were using mmap IO too.

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

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

7 years ago[dsymutil, llvm-objcopy] Fix some Clang-tidy modernize and Include What You Use warni...
Eugene Zelenko [Wed, 1 Nov 2017 21:16:06 +0000 (21:16 +0000)]
[dsymutil, llvm-objcopy] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC).

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

7 years ago[X86] Add custom code to EVEX to VEX pass to turn unmasked 128-bit VPALIGND/Q into...
Craig Topper [Wed, 1 Nov 2017 21:00:59 +0000 (21:00 +0000)]
[X86] Add custom code to EVEX to VEX pass to turn unmasked 128-bit VPALIGND/Q into VPALIGNR if the extended registers aren't being used.

This will enable us to prefer VALIGND/Q during shuffle lowering in order to get the extended register encoding space when BWI isn't available. But if we end up not using the extended registers we can switch VPALIGNR for the shorter VEX encoding.

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

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

7 years agoloop-rotate: avoid duplicating dbg.value intrinsics in the entry block.
Adrian Prantl [Wed, 1 Nov 2017 20:53:22 +0000 (20:53 +0000)]
loop-rotate: avoid duplicating dbg.value intrinsics in the entry block.

This fixes the second half of PR35113.

This reapplies r317106 without modifications.

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

7 years agoloop-rotate: eliminate duplicate debug intrinsics after splicing.
Adrian Prantl [Wed, 1 Nov 2017 20:43:30 +0000 (20:43 +0000)]
loop-rotate: eliminate duplicate debug intrinsics after splicing.

Fixes part of PR35113.

This reapplies r317105 with an additional check for isa<Instruction>
as found by the bots.

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

7 years agoInclude GUIDs from the same module when computing GUIDs that needs to be imported.
Dehao Chen [Wed, 1 Nov 2017 20:26:47 +0000 (20:26 +0000)]
Include GUIDs from the same module when computing GUIDs that needs to be imported.

Summary: In the compile phase of SamplePGO+ThinLTO, ICP is not invoked. Instead, indirect call targets will be included as function metadata for ThinIndex to buidl the call graph. This should not only include functions defined in other modules, but also functions defined in the same module, otherwise ThinIndex may find the callee dead and eliminate it, while ICP in backend will revive the symbol, which leads to undefined symbol.

Reviewers: tejohnson

Reviewed By: tejohnson

Subscribers: sanjoy, llvm-commits, mehdi_amini

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

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

7 years ago[globalisel][tablegen] Add support for multi-insn emission
Daniel Sanders [Wed, 1 Nov 2017 19:57:57 +0000 (19:57 +0000)]
[globalisel][tablegen] Add support for multi-insn emission

The importer will now accept nested instructions in the result pattern such as
(ADDWrr $a, (SUBWrr $b, $c)). This is only valid when the nested instruction
def's a single vreg and the parent instruction consumes a single vreg where a
nested instruction is specified. The importer will automatically create a vreg
to connect the two using the type information from the pattern. This vreg will
be constrained to the register classes given in the instruction definitions*.

* REG_SEQUENCE is explicitly rejected because of this. The definition doesn't
  constrain to a register class and it therefore needs special handling.

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

7 years agoRevert 317016 and 317048
Philip Reames [Wed, 1 Nov 2017 19:49:20 +0000 (19:49 +0000)]
Revert 317016 and 317048

The former appears to have introduced a miscompile in a stage2 clang build.  Revert so I can investigate offline.

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

7 years agoAMDGPU: Fix set but not used warnings related to AMDGPUAS
Konstantin Zhuravlyov [Wed, 1 Nov 2017 19:12:38 +0000 (19:12 +0000)]
AMDGPU: Fix set but not used warnings related to AMDGPUAS

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

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

7 years ago[X86] Prevent fast isel from folding loads into the instructions listed in hasPartial...
Craig Topper [Wed, 1 Nov 2017 18:10:06 +0000 (18:10 +0000)]
[X86] Prevent fast isel from folding loads into the instructions listed in hasPartialRegUpdate.

This patch moves the check for opt size and hasPartialRegUpdate into the lower level implementation of foldMemoryOperandImpl to catch the entry point that fast isel uses.

We're still folding undef register instructions in AVX that we should also probably disable, but that's a problem for another patch.

Unfortunately, this requires reordering a bunch of functions which is why the diff is so large. I can do the function reordering separately if we want.

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

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

7 years agoAdds code to PPC ISEL lowering to recognize half-word inserts from vector_shuffles...
Graham Yiu [Wed, 1 Nov 2017 18:06:56 +0000 (18:06 +0000)]
Adds code to PPC ISEL lowering to recognize half-word inserts from vector_shuffles, and use P9 shift and vector insert instructions instead of vperm.

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

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

7 years agoRevert r317105 to investigate bot breakage.
Adrian Prantl [Wed, 1 Nov 2017 18:06:38 +0000 (18:06 +0000)]
Revert r317105 to investigate bot breakage.

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

7 years agoRevert r317106 to facilitate reverting r317105.
Adrian Prantl [Wed, 1 Nov 2017 18:06:35 +0000 (18:06 +0000)]
Revert r317106 to facilitate reverting r317105.

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

7 years agoLTO: Apply global DCE to ThinLTO modules at LTO opt level 0.
Peter Collingbourne [Wed, 1 Nov 2017 17:58:39 +0000 (17:58 +0000)]
LTO: Apply global DCE to ThinLTO modules at LTO opt level 0.

This is necessary because DCE is applied to full LTO modules. Without
this change, a reference from a dead ThinLTO global to a dead full
LTO global will result in an undefined reference at link time.

This problem is only observable when --gc-sections is disabled, or
when targeting COFF, as the COFF port of lld requires all symbols to
have a definition even if all references are dead (this is consistent
with link.exe).

This change also adds an EliminateAvailableExternally pass at -O0. This
is necessary to handle the situation on Windows where a non-prevailing
copy of a linkonce_odr function has an SEH filter function; any
such filters must be DCE'd because they will contain a call to the
llvm.localrecover intrinsic, passing as an argument the address of the
function that the filter belongs to, and llvm.localrecover requires
this function to be defined locally.

Fixes PR35142.

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

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

7 years ago[X86] Regnerate test to attempt to fix build bot failure.
Craig Topper [Wed, 1 Nov 2017 17:44:12 +0000 (17:44 +0000)]
[X86] Regnerate test to attempt to fix build bot failure.

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

7 years agoloop-rotate: avoid duplicating dbg.value intrinsics in the entry block.
Adrian Prantl [Wed, 1 Nov 2017 17:28:50 +0000 (17:28 +0000)]
loop-rotate: avoid duplicating dbg.value intrinsics in the entry block.

This fixes the second half of PR35113.

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

7 years agoloop-rotate: eliminate duplicate debug intrinsics after splicing.
Adrian Prantl [Wed, 1 Nov 2017 17:28:47 +0000 (17:28 +0000)]
loop-rotate: eliminate duplicate debug intrinsics after splicing.

Fixes part of PR35113.

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

7 years ago[dsymutil][NFC} Rename thread related command line options
Jonas Devlieghere [Wed, 1 Nov 2017 17:15:29 +0000 (17:15 +0000)]
[dsymutil][NFC} Rename thread related command line options

This makes the command line options consistent with llvm-cov and
llvm-profdata, which both use `-num-threads` and `-j`.

This also addresses the conflict reported after landing D39355.

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

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

7 years ago[X86] Add 64-bit int to float/double conversion with AVX to X86FastISel::X86SelectSIToFP
Craig Topper [Wed, 1 Nov 2017 16:23:06 +0000 (16:23 +0000)]
[X86] Add 64-bit int to float/double conversion with AVX  to X86FastISel::X86SelectSIToFP

Summary:
[X86] Teach fast isel to handle i64 sitofp with AVX.

For some reason we only handled i32 sitofp with AVX. But with SSE only we support i64 so we should do the same with AVX.

Also add i686 command lines for the 32-bit tests. 64-bit tests are in a separate file to avoid a fast-isel abort failure in 32-bit mode.

Reviewers: RKSimon, zvi

Reviewed By: RKSimon

Subscribers: llvm-commits

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

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

7 years agoUpdate VCVTx, VMOVNTPx and VROUNDYPx instructions scheduling on btver2.
Andrew V. Tischenko [Wed, 1 Nov 2017 16:10:20 +0000 (16:10 +0000)]
Update VCVTx, VMOVNTPx and VROUNDYPx instructions scheduling on btver2.
Differential Revision: https://reviews.llvm.org/D39059

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

7 years agoCorrect dwarf unwind information in function epilogue for X86
Petar Jovanovic [Wed, 1 Nov 2017 16:04:11 +0000 (16:04 +0000)]
Correct dwarf unwind information in function epilogue for X86

This patch aims to provide correct dwarf unwind information in function
epilogue for X86.

It consists of two parts. The first part inserts CFI instructions that set
appropriate cfa offset and cfa register in emitEpilogue() in
X86FrameLowering. This part is X86 specific.

The second part is platform independent and ensures that:

- CFI instructions do not affect code generation
- Unwind information remains correct when a function is modified by
  different passes. This is done in a late pass by analyzing information
  about cfa offset and cfa register in BBs and inserting additional CFI
  directives where necessary.

Changed CFI instructions so that they:

- are duplicable
- are not counted as instructions when tail duplicating or tail merging
- can be compared as equal

Added CFIInstrInserter pass:

- analyzes each basic block to determine cfa offset and register valid at
  its entry and exit
- verifies that outgoing cfa offset and register of predecessor blocks match
  incoming values of their successors
- inserts additional CFI directives at basic block beginning to correct the
  rule for calculating CFA

Having CFI instructions in function epilogue can cause incorrect CFA
calculation rule for some basic blocks. This can happen if, due to basic
block reordering, or the existence of multiple epilogue blocks, some of the
blocks have wrong cfa offset and register values set by the epilogue block
above them.

CFIInstrInserter is currently run only on X86, but can be used by any target
that implements support for adding CFI instructions in epilogue.

Patch by Violeta Vukobrat.

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

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

7 years ago[X86][SSE] Begun generalizing truncateVectorWithPACKSS to work with PACKSS/PACKUS...
Simon Pilgrim [Wed, 1 Nov 2017 15:31:51 +0000 (15:31 +0000)]
[X86][SSE] Begun generalizing truncateVectorWithPACKSS to work with PACKSS/PACKUS functions

Renamed to truncateVectorWithPACK

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

7 years agoRegenerate PACKUS/TRUNCS test (PR31773)
Simon Pilgrim [Wed, 1 Nov 2017 15:27:23 +0000 (15:27 +0000)]
Regenerate PACKUS/TRUNCS test (PR31773)

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

7 years ago[BranchProbabilityInfo] Handle irreducible loops.
Geoff Berry [Wed, 1 Nov 2017 15:16:50 +0000 (15:16 +0000)]
[BranchProbabilityInfo] Handle irreducible loops.

Summary:
Compute the strongly connected components of the CFG and fall back to
use these for blocks that are in loops that are not detected by
LoopInfo when computing loop back-edge and exit branch probabilities.

Reviewers: dexonsmith, davidxl

Subscribers: mcrosier, llvm-commits

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

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

7 years agoRevert r313618 "[ARM] Use ADDCARRY / SUBCARRY"
Roger Ferrer Ibanez [Wed, 1 Nov 2017 14:06:57 +0000 (14:06 +0000)]
Revert r313618 "[ARM] Use ADDCARRY / SUBCARRY"

That change causes PR35103, so reverting until I figure it out.

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

7 years agoFix warnings discovered by rL317076. [-Wunused-private-field]
NAKAMURA Takumi [Wed, 1 Nov 2017 13:47:55 +0000 (13:47 +0000)]
Fix warnings discovered by rL317076. [-Wunused-private-field]

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

7 years agoSuppress a warning discovered by rL317076. [-Wunused-private-field]
NAKAMURA Takumi [Wed, 1 Nov 2017 13:47:51 +0000 (13:47 +0000)]
Suppress a warning discovered by rL317076. [-Wunused-private-field]

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

7 years agoRevert rL311205 "[IRCE] Fix buggy behavior in Clamp"
Max Kazantsev [Wed, 1 Nov 2017 13:21:56 +0000 (13:21 +0000)]
Revert rL311205 "[IRCE] Fix buggy behavior in Clamp"

This patch reverts rL311205 that was initially a wrong fix. The real problem
was in intersection of signed and unsigned ranges (see rL316552), and the
patch being reverted masked the problem instead of fixing it.

By now, the test against which rL311205 was made works OK even without this
code. This revert patch also contains a test case that demonstrates incorrect
behavior caused by rL311205: it is caused by incorrect choise of signed max
instead of unsigned.

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

7 years ago[SelectionDAG] computeKnownBits - use ashrInPlace on known bits of ISD::SRA input...
Simon Pilgrim [Wed, 1 Nov 2017 13:16:48 +0000 (13:16 +0000)]
[SelectionDAG] computeKnownBits - use ashrInPlace on known bits of ISD::SRA input. NFCI.

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

7 years ago[X86][SSE] Truncate with PACKSS any input with sufficient sign-bits
Simon Pilgrim [Wed, 1 Nov 2017 11:47:44 +0000 (11:47 +0000)]
[X86][SSE] Truncate with PACKSS any input with sufficient sign-bits

So far we've only been using PACKSS truncations with 'all-bits or zero-bits' patterns (vector comparison results etc.). When really we can safely use it for any case as long as the number of sign bits reach down to the last 16-bits (or 8-bits if we're truncating to bytes).

The next steps after this is add the equivalent support for PACKUS and to support packing to sub-128 bit vectors for truncating stores etc.

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

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

7 years ago[CodeExtractor] Fix iterator invalidation in findOrCreateBlockForHoisting.
Florian Hahn [Wed, 1 Nov 2017 09:48:12 +0000 (09:48 +0000)]
[CodeExtractor] Fix iterator invalidation in findOrCreateBlockForHoisting.

Summary:
By replacing branches to CommonExitBlock, we remove the node from
CommonExitBlock's predecessors, invalidating the iterator. The problem
is exposed when the common exit block has multiple predecessors and
needs to sink lifetime info. The modification in the test case trigger
the issue.

Reviewers: davidxl, davide, wmi

Reviewed By: davidxl

Subscribers: llvm-commits

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

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

7 years agoFix APFloat mod sign
Serguei Katkov [Wed, 1 Nov 2017 07:56:55 +0000 (07:56 +0000)]
Fix APFloat mod sign

fmod specification requires the sign of the remainder is
the same as numerator in case remainder is zero.

Reviewers: gottesmm, scanon, arsenm, davide, craig.topper
Reviewed By: scanon
Subscribers: wdng, llvm-commits
Differential Revision: https://reviews.llvm.org/D39225

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

7 years ago[X86] Add more type qualifiers to INSERT_SUBREG operations in rotate patterns so...
Craig Topper [Wed, 1 Nov 2017 07:11:32 +0000 (07:11 +0000)]
[X86] Add more type qualifiers to INSERT_SUBREG operations in rotate patterns so they don't get created with a v64i8 type.

Not sure why tablegen didn't error on this.

Fixes PR35158.

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

7 years agoReformat.
NAKAMURA Takumi [Wed, 1 Nov 2017 05:14:35 +0000 (05:14 +0000)]
Reformat.

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

7 years agoRevert rL317019, "[ADT] Split optional to only include copy mechanics and dtor for...
NAKAMURA Takumi [Wed, 1 Nov 2017 05:14:31 +0000 (05:14 +0000)]
Revert rL317019, "[ADT] Split optional to only include copy mechanics and dtor for non-trivial types."

Seems g++-4.8 (eg. Ubuntu 14.04) doesn't like this.

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

7 years ago[DAGCombiner] Fix typos in comments. NFC
Craig Topper [Wed, 1 Nov 2017 03:30:52 +0000 (03:30 +0000)]
[DAGCombiner] Fix typos in comments. NFC

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

7 years agoAdd test dependency on llvm-cfi-verify to fix up the build breakages on sanitizers.
Mitch Phillips [Wed, 1 Nov 2017 00:49:45 +0000 (00:49 +0000)]
Add test dependency on llvm-cfi-verify to fix up the build breakages on sanitizers.

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

7 years ago[X86] Add AVX512 support to X86FastISel::fastMaterializeFloatZero.
Craig Topper [Wed, 1 Nov 2017 00:47:45 +0000 (00:47 +0000)]
[X86] Add AVX512 support to X86FastISel::fastMaterializeFloatZero.

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

7 years ago[globalisel][tablegen] Stop hard-coding the emitted instruction ID to 0. NFC
Daniel Sanders [Wed, 1 Nov 2017 00:29:47 +0000 (00:29 +0000)]
[globalisel][tablegen] Stop hard-coding the emitted instruction ID to 0. NFC

The next commit will add support for multi-instruction emission so we need to
start allocating instruction ID's instead of hard-coding them to 0.

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

7 years agoAdd system-linux to allow tests run with llvm-lit to restrict themselves to linux
Jake Ehrlich [Wed, 1 Nov 2017 00:18:51 +0000 (00:18 +0000)]
Add system-linux to allow tests run with llvm-lit to restrict themselves to linux

I need a test that only runs in a reasonable amount of time on systems
that have sparse files. The broadest class of systems that support
sparse files are linux systems. So restricting my test to linux systems
should suffice. This change adds the system-linux feature to llvm-lit so
that it can be required.

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

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

7 years ago[AMDGPU] Clean up symbols in the global namespace.
Benjamin Kramer [Tue, 31 Oct 2017 23:21:30 +0000 (23:21 +0000)]
[AMDGPU] Clean up symbols in the global namespace.

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

7 years agoParse DWARF information to reduce false positives.
Mitch Phillips [Tue, 31 Oct 2017 23:20:05 +0000 (23:20 +0000)]
Parse DWARF information to reduce false positives.

Summary: Help differentiate code and data by parsing DWARF information. This will reduce false positive rates where data is placed in executable sections and is mistakenly parsed as code, resulting in an inflation in the number of indirect CF instructions (and hence an inflation of the number of unprotected).

Also prints the DWARF line data around the region of each indirect CF instruction.

Reviewers: pcc

Subscribers: probinson, llvm-commits, vlad.tsyrklevich, mgorny, aprantl, kcc

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

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

7 years agoRe-commit: [globalisel][tablegen] Keep track of the insertion point while adding...
Daniel Sanders [Tue, 31 Oct 2017 23:03:18 +0000 (23:03 +0000)]
Re-commit: [globalisel][tablegen] Keep track of the insertion point while adding BuildMIAction's. NFC

Multi-instruction emission needs to ensure the the instructions are generated
a depth-first fashion. For example:
(ADDWrr (SUBWrr a, b), c)
needs to emit the SUBWrr before the ADDWrr. However, our walk over
TreePatternNode's is highly context sensitive which makes it difficult to append
BuildMIActions in the order we want. To fix this, we now keep track of the
insertion point as we add actions. This will allow multi-insn emission to insert
BuildMI's in the correct place.

The previous commit failed on the Ubuntu bots using GCC 4.8. These bots lack the
const_iterator forms of insert() and emplace() that were added in C++11. As a
result I've switched the const_iterators to iterators.

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

7 years ago[SimplifyIndVar] Inline makIVComparisonInvariant to eleminate code duplication [NFC]
Philip Reames [Tue, 31 Oct 2017 22:56:16 +0000 (22:56 +0000)]
[SimplifyIndVar] Inline makIVComparisonInvariant to eleminate code duplication [NFC]

This formulation might be slightly slower since I eagerly compute the cheap replacements.  If anyone sees this having a compile time impact, let me know and I'll use lazy population instead.

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

7 years agoObject: Move some code from ELF.h into ELF.cpp.
Peter Collingbourne [Tue, 31 Oct 2017 22:49:23 +0000 (22:49 +0000)]
Object: Move some code from ELF.h into ELF.cpp.

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

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

7 years agoInline compareAddr function into its only caller. NFCI.
Peter Collingbourne [Tue, 31 Oct 2017 22:49:09 +0000 (22:49 +0000)]
Inline compareAddr function into its only caller. NFCI.

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

7 years agoRevert r317040: [globalisel][tablegen] Keep track of the insertion point while adding...
Daniel Sanders [Tue, 31 Oct 2017 21:54:52 +0000 (21:54 +0000)]
Revert r317040: [globalisel][tablegen] Keep track of the insertion point while adding BuildMIAction's. NFC

The same bots fail but I believe I know what the issue is now. These bots are
missing the const_iterator versions of insert/emplace/etc. that were introduced
in C++11.

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

7 years ago[codeview] Merge file checksum entries for DIFiles with the same absolute path
Reid Kleckner [Tue, 31 Oct 2017 21:52:15 +0000 (21:52 +0000)]
[codeview] Merge file checksum entries for DIFiles with the same absolute path

Change the map key from DIFile* to the absolute path string. Computing
the absolute path isn't expensive because we already have a map that
caches the full path keyed on DIFile*.

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

7 years agoRe-commit: [globalisel][tablegen] Keep track of the insertion point while adding...
Daniel Sanders [Tue, 31 Oct 2017 21:34:53 +0000 (21:34 +0000)]
Re-commit: [globalisel][tablegen] Keep track of the insertion point while adding BuildMIAction's. NFC

Multi-instruction emission needs to ensure the the instructions are generated
a depth-first fashion. For example:
 (ADDWrr (SUBWrr a, b), c)
needs to emit the SUBWrr before the ADDWrr. However, our walk over
TreePatternNode's is highly context sensitive which makes it difficult to append
BuildMIActions in the order we want. To fix this, we now keep track of the
insertion point as we add actions. This will allow multi-insn emission to insert
BuildMI's in the correct place.

The previous commit failed on the Ubuntu bots using GCC 4.8. These bots didn't
like a call to emplace(). I've replaced it with insert() to see if it's a quirk
of the C++11 support.

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

7 years agoAMDGPU: Select s_buffer_load_dword with a non-constant SGPR offset
Marek Olsak [Tue, 31 Oct 2017 21:06:42 +0000 (21:06 +0000)]
AMDGPU: Select s_buffer_load_dword with a non-constant SGPR offset

Summary:
Apps that benefit:
- alien isolation
- bioshock infinite
- civilization: beyond earth
- company of heroes 2
- dirt showdown
- dota 2
- F1 2015
- grid autosport
- hitman
- legend of grimrock
- serious sam 3: bfe
- shadow warrior
- talos principle
- total war: warhammer
- UE4 demos: effects cave, elemental, sun temple

Reviewers: arsenm, nhaehnle

Subscribers: kzhuravl, wdng, yaxunl, dstuttard, tpr, llvm-commits, t-tye

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

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

7 years agoloop-rotate: simplify code by using llvm::findDbgValues(). (NFC)
Adrian Prantl [Tue, 31 Oct 2017 21:03:22 +0000 (21:03 +0000)]
loop-rotate: simplify code by using llvm::findDbgValues(). (NFC)

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

7 years agoRevert r317029: [globalisel][tablegen] Keep track of the insertion point while adding...
Daniel Sanders [Tue, 31 Oct 2017 20:29:28 +0000 (20:29 +0000)]
Revert r317029: [globalisel][tablegen] Keep track of the insertion point while adding BuildMIAction's. NFC

The Linux bots don't seem to like this usage of emplace(). Reverting while I look into it.

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

7 years agoRevert "[DWARF] Now that Optional is standard layout, put it into an union instead...
Benjamin Kramer [Tue, 31 Oct 2017 19:55:08 +0000 (19:55 +0000)]
Revert "[DWARF] Now that Optional is standard layout, put it into an union instead of splatting it."

GCC doesn't like it. This reverts commit r317028.

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

7 years ago[globalisel][tablegen] Keep track of the insertion point while adding BuildMIAction...
Daniel Sanders [Tue, 31 Oct 2017 19:54:05 +0000 (19:54 +0000)]
[globalisel][tablegen] Keep track of the insertion point while adding BuildMIAction's. NFC

Multi-instruction emission needs to ensure the the instructions are generated
a depth-first fashion. For example:
  (ADDWrr (SUBWrr a, b), c)
needs to emit the SUBWrr before the ADDWrr. However, our walk over
TreePatternNode's is highly context sensitive which makes it difficult to append
BuildMIActions in the order we want. To fix this, we now keep track of the
insertion point as we add actions. This will allow multi-insn emission to insert
BuildMI's in the correct place.

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

7 years ago[DWARF] Now that Optional is standard layout, put it into an union instead of splatti...
Benjamin Kramer [Tue, 31 Oct 2017 19:40:03 +0000 (19:40 +0000)]
[DWARF] Now that Optional is standard layout, put it into an union instead of splatting it.

No functionality change intended.

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

7 years ago[coro] Make Spill a proper struct instead of deriving from pair.
Benjamin Kramer [Tue, 31 Oct 2017 19:22:55 +0000 (19:22 +0000)]
[coro] Make Spill a proper struct instead of deriving from pair.

No functionality change.

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

7 years ago[globalisel][tablegen] Factor out implicit def/use renderers from createAndImportInst...
Daniel Sanders [Tue, 31 Oct 2017 19:09:29 +0000 (19:09 +0000)]
[globalisel][tablegen] Factor out implicit def/use renderers from createAndImportInstructionRenderer(). NFC

Multi-instruction emission will require that we have separate handling for
the defs between the implicitly created temporaries and the rule outputs.
The former require new temporary vregs while the latter should copy existing
operands. Factor out the implicit def/use renderers to minimize the code
duplication when we implement that.

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

7 years ago[SimplifyCFG] Use a more generic name for the selects created by SpeculativelyExecute...
Craig Topper [Tue, 31 Oct 2017 19:03:51 +0000 (19:03 +0000)]
[SimplifyCFG] Use a more generic name for the selects created by SpeculativelyExecuteBB to prevent long names from being created

Currently the selects are created with the names of their inputs concatenated together. It's possible to get cases that chain these selects together resulting in long names due to multiple levels of concatenation. Our internal branch of llvm managed to generate names over 100000 characters in length on a particular test due to an extreme compounding of the names.

This patch changes the name to a generic name that is not dependent on its inputs.

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

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

7 years ago[SimplifyCFG] Regenerate some test cases using update_test_checks.py to prepare for...
Craig Topper [Tue, 31 Oct 2017 19:03:49 +0000 (19:03 +0000)]
[SimplifyCFG] Regenerate some test cases using update_test_checks.py to prepare for an upcoming commit. NFC

A future commit will change how some of the value names in the IR are generated which causes these tests to break in their current form. The script generates checks with regular expressions so it should be immune.

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

7 years ago[globalisel][tablegen] Add infrastructure to potentially allow BuildMIAction to choos...
Daniel Sanders [Tue, 31 Oct 2017 18:50:24 +0000 (18:50 +0000)]
[globalisel][tablegen] Add infrastructure to potentially allow BuildMIAction to choose a mutatable instruction. NFC

Prepare for multiple instruction emission by allowing BuildMIAction to
search for a suitable matcher that will support mutation.

This patch deliberately neglects to add matchers aside from the root to
preserve NFC. That said, it should be noted that until we support mutations
other than just the opcode the chances of finding a non-root instruction
for which canMutate() is true, is essentially zero. Furthermore in the
presence of multi-instruction emission the chances of finding any
instruction for which canMutate() is true is also zero. Nevertheless, we
can't continue to require that all BuildMIAction's consider the root of the match
to be recyclable due to the risk of recycling it twice in the same rule.

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

7 years ago[X86][AVX512] Regenerate tests to remove retl/retq regex
Simon Pilgrim [Tue, 31 Oct 2017 18:43:24 +0000 (18:43 +0000)]
[X86][AVX512] Regenerate tests to remove retl/retq regex

These are only testing 64-bit targets so we don't need the regex

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

7 years ago[X86][AVX512] Split AVX512F and AVX512BW bool-vector bitcast tests
Simon Pilgrim [Tue, 31 Oct 2017 18:41:48 +0000 (18:41 +0000)]
[X86][AVX512] Split AVX512F and AVX512BW bool-vector bitcast tests

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

7 years ago[ADT] Split optional to only include copy mechanics and dtor for non-trivial types.
Benjamin Kramer [Tue, 31 Oct 2017 18:35:54 +0000 (18:35 +0000)]
[ADT] Split optional to only include copy mechanics and dtor for non-trivial types.

This makes uses of Optional more transparent to the compiler (and
clang-tidy) and generates slightly smaller code.

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

7 years ago[Metadata][NFC] Make MDNode::resolve() public in preparation for the fix to PR33930.
Wolfgang Pieb [Tue, 31 Oct 2017 18:25:28 +0000 (18:25 +0000)]
[Metadata][NFC] Make MDNode::resolve() public in preparation for the fix to PR33930.

Reviewers: aprantl

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

7 years ago[globalisel][tablegen] Allow any comment in DebugCommentAction. NFC
Daniel Sanders [Tue, 31 Oct 2017 18:07:03 +0000 (18:07 +0000)]
[globalisel][tablegen] Allow any comment in DebugCommentAction. NFC

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

7 years ago[IndVarSimplify] Extract wrapper around SE-.isLoopInvariantPredicate [NFC]
Philip Reames [Tue, 31 Oct 2017 18:04:57 +0000 (18:04 +0000)]
[IndVarSimplify] Extract wrapper around SE-.isLoopInvariantPredicate [NFC]

This an intermediate state, the next patch will re-inline the markLoopInvariantPredicate function to reduce code duplication.

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

7 years ago[Support] Make the default chunk size of raw_fd_ostream to 1 GiB.
Rui Ueyama [Tue, 31 Oct 2017 17:37:20 +0000 (17:37 +0000)]
[Support] Make the default chunk size of raw_fd_ostream to 1 GiB.

Previously, we call write(2) for each 32767 byte chunk. That is not
efficient because Linux can handle much larger write requests.
This patch changes the chunk size on Linux to 1 GiB.

This patch also changes the default chunks size to SSIZE_MAX. I think
that doesn't in practice change this function's behavior on any operating
system because SSIZE_MAX on 64-bit machine is unrealistically large,
and writing 2 GiB (SSIZE_MAX on 32-bit) on a 32-bit machine by a single
call of write(2) is also unrealistic, as the userspace is usually
limited to 2 GiB. That said, it is in general a good thing to do because
a write larger than SSIZE_MAX is implementation-defined in POSIX.

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

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

7 years ago[IndVarSimplify] Simplify code using a dictionary
Philip Reames [Tue, 31 Oct 2017 17:06:32 +0000 (17:06 +0000)]
[IndVarSimplify] Simplify code using a dictionary

Possibly very slightly slower, but this code is not performance critical and the readability benefit alone is huge.

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

7 years ago[X86][AsmParser] Treat '%' as the modulo operator under Intel syntax
Reid Kleckner [Tue, 31 Oct 2017 16:47:38 +0000 (16:47 +0000)]
[X86][AsmParser] Treat '%' as the modulo operator under Intel syntax

It can't be a register prefix, anyway. This is consistent with the masm
docs on MSDN: https://msdn.microsoft.com/en-us/library/t4ax90d2.aspx

This is a straight-forward extension of our support for "MOD"
implemented in https://reviews.llvm.org/D33876 / r306425

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

7 years agoLTOModule::isBitcodeFile() shouldn't assert when returning false.
Nico Weber [Tue, 31 Oct 2017 16:39:47 +0000 (16:39 +0000)]
LTOModule::isBitcodeFile() shouldn't assert when returning false.

Fixes a bunch of assert-on-invalid-bitcode regressions after 315483.
Expected<> calls assertIsChecked() in its dtor, and operator bool() only calls
setChecked() if there's no error. So for functions that don't return an error
itself, the Expected<> version needs explicit code to disarm the error that the
ErrorOr<> code didn't need.

https://reviews.llvm.org/D39437

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

7 years ago[asan] Upgrade private linkage globals to internal linkage on COFF
Reid Kleckner [Tue, 31 Oct 2017 16:16:08 +0000 (16:16 +0000)]
[asan] Upgrade private linkage globals to internal linkage on COFF

COFF comdats require symbol table entries, which means the comdat leader
cannot have private linkage.

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

7 years ago[X86][SSE] Add VSRLI/VSRAI/VSLLI demanded elts support to computeKnownBits/ComputeNum...
Simon Pilgrim [Tue, 31 Oct 2017 16:06:21 +0000 (16:06 +0000)]
[X86][SSE] Add VSRLI/VSRAI/VSLLI demanded elts support to computeKnownBits/ComputeNumSignBits

Mainly a perf improvements as most combines will have occurred before we lower to these instructions

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

7 years ago[LoopVectorize] Replace manual VPlan memory management with unique_ptr.
Benjamin Kramer [Tue, 31 Oct 2017 14:58:22 +0000 (14:58 +0000)]
[LoopVectorize] Replace manual VPlan memory management with unique_ptr.

No functionality change intended.

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

7 years ago[test] Fix dsymutil/cmdline.test
Jonas Devlieghere [Tue, 31 Oct 2017 14:19:02 +0000 (14:19 +0000)]
[test] Fix dsymutil/cmdline.test

This fixes dsymutil/cmdline.test on platforms where the dsymutil binary
has an extension.

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

7 years ago[Reassociate] Remove FIXME from looptest.ll (NFC)
Florian Hahn [Tue, 31 Oct 2017 14:06:31 +0000 (14:06 +0000)]
[Reassociate] Remove FIXME from looptest.ll (NFC)

Summary: The loop invariant add (i+j) is reassoicated, I think the FIXME can be removed, because this is what the test case tries to check (AFAIK). I also changed the test to use FileCheck.

Reviewers: mcrosier, davide

Reviewed By: mcrosier, davide

Subscribers: davide, llvm-commits

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

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

7 years ago[dsymutil] Implement the --threads option
Jonas Devlieghere [Tue, 31 Oct 2017 13:54:15 +0000 (13:54 +0000)]
[dsymutil] Implement the --threads option

This patch adds the --threads option to dsymutil to process
architectures in parallel. The feature is already present in the version
distributed with Xcode, but was not yet upstreamed.

This is NFC as far as the linking behavior is concerned. As threads are
used automatically, the current tests cover the change in
implementation.

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

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

7 years ago[ThinLTO] Double bits of module hash used for renaming
Teresa Johnson [Tue, 31 Oct 2017 12:56:09 +0000 (12:56 +0000)]
[ThinLTO] Double bits of module hash used for renaming

Summary:
Use 64 instead of 32 bits of the module hash as the suffix when renaming
after promotion to reduce the likelihood of a collision (which we
observed in a binary when using 32 bits).

Reviewers: pcc

Subscribers: llvm-commits, inglorion

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

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

7 years ago[InstCombine] Simplify selects that test cmpxchg instructions
Matthew Simpson [Tue, 31 Oct 2017 12:34:02 +0000 (12:34 +0000)]
[InstCombine] Simplify selects that test cmpxchg instructions

If a select instruction tests the returned flag of a cmpxchg instruction and
selects between the returned value of the cmpxchg instruction and its compare
operand, the result of the select will always be equal to its false value.

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

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

7 years agoAdding a shufflevector and select LLVM IR instructions fuzz tool
Ayman Musa [Tue, 31 Oct 2017 11:39:31 +0000 (11:39 +0000)]
Adding a shufflevector and select LLVM IR instructions fuzz tool

Based on similar python tool - utils/shuffle-fuzz.py - this tool extends the ability of it's previous by optionally attaching select instruction to the generated shufflevector instructions.
This was mainly developed to perform exhaustive testing of the X86 AVX512 masked shuffle instructions. But yet it can be used for various other targets.
The general design of the implementation is much modular than the original shuffle_fuzz.py tool, which makes it easier for anyone to extend it further.

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

Change-Id: I0efc2aaa091b61a8a9552311c21cc77916a97111

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

7 years ago[LoopUnroll] Clean up remarks for unroll remainder
David Green [Tue, 31 Oct 2017 10:47:46 +0000 (10:47 +0000)]
[LoopUnroll] Clean up remarks for unroll remainder

The optimisation remarks for loop unrolling with an unrolled remainder looks something like:

test.c:7:18: remark: completely unrolled loop with 3 iterations [-Rpass=loop-unroll]
            C[i] += A[i*N+j];
                 ^
test.c:6:9: remark: unrolled loop by a factor of 4 with run-time trip count [-Rpass=loop-unroll]
        for(int j = 0; j < N; j++)
        ^
This removes the first of the two messages.

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

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

7 years ago[AVX512] Adding new patterns for extract_subvector of vXi1
Michael Zuckerman [Tue, 31 Oct 2017 10:00:19 +0000 (10:00 +0000)]
[AVX512] Adding new patterns for extract_subvector of vXi1

extract subvector of vXi1 from vYi1 is poorly supported by LLVM and most of the time end with an assertion.
This patch fixes this issue by adding new patterns to the TD file.

Reviewers:
1. guyblank
2. igorb
3. zvi
4. ayman
5. craig.topper

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

Change-Id: Ideb4d7e946c8d40cfce2920891f2d89fe64c58f8

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

7 years ago[CGP] Fix the detection of trivial case for addressing mode
Serguei Katkov [Tue, 31 Oct 2017 07:01:35 +0000 (07:01 +0000)]
[CGP] Fix the detection of trivial case for addressing mode

The address can be presented as a bitcast of baseReg.
In this case it is still trivial but OriginalValue != baseReg.

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

7 years ago[IRCE][NFC] Rename fields of InductiveRangeCheck
Max Kazantsev [Tue, 31 Oct 2017 06:19:05 +0000 (06:19 +0000)]
[IRCE][NFC] Rename fields of InductiveRangeCheck

Rename `Offset`, `Scale`, `Length` into `Begin`, `Step`, `End` respectively
to make naming of similar entities for Ranges and Range Checks more
consistent.

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

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

7 years ago[X86] Make AVX512_512_SET0 XMM16-31 lower to 128-bit XOR when AVX512VL is enabled...
Craig Topper [Tue, 31 Oct 2017 06:01:04 +0000 (06:01 +0000)]
[X86] Make AVX512_512_SET0 XMM16-31 lower to 128-bit XOR when AVX512VL is enabled. Use 128-bit VLX instruction when VLX is enabled.

Unfortunately, this weakens our ability to do domain fixing when AVX512DQ is not enabled, but it is consistent with our 256-bit behavior.

Maybe we should add custom handling to domain fixing to allow EVEX integer XOR/AND/OR/ANDN to switch to VEX encoded fp instructions if the high registers aren't being used?

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

7 years ago[NFC] Get rid of variables used in assert only
Max Kazantsev [Tue, 31 Oct 2017 05:33:58 +0000 (05:33 +0000)]
[NFC] Get rid of variables used in assert only

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

7 years ago[IndVarSimplify] Simplify code using preheader assumption
Philip Reames [Tue, 31 Oct 2017 05:16:46 +0000 (05:16 +0000)]
[IndVarSimplify] Simplify code using preheader assumption

As noted in the nice block comment, the previous code didn't actually handle multi-entry loops correctly, it just assumed SCEV didn't analyze such loops.  Given SCEV has comments to the contrary, that seems a bit suspect.  More importantly, the pass actually requires loopsimplify form which ensures a loop-preheader is available.  Remove the excessive generaility and shorten the code greatly.

Note that we do successfully analyze many multi-entry loops, but we do so by converting them to single entry loops.  See the added test case.

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

7 years agoReapply "[GVN] Prevent LoadPRE from hoisting across instructions that don't pass...
Max Kazantsev [Tue, 31 Oct 2017 05:07:56 +0000 (05:07 +0000)]
Reapply "[GVN] Prevent LoadPRE from hoisting across instructions that don't pass control flow to successors"

This patch fixes the miscompile that happens when PRE hoists loads across guards and
other instructions that don't always pass control flow to their successors. PRE is now prohibited
to hoist across such instructions because there is no guarantee that the load standing after such
instruction is still valid before such instruction. For example, a load from under a guard may be
invalid before the guard in the following case:
  int array[LEN];
  ...
  guard(0 <= index && index < LEN);
  use(array[index]);

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

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