OSDN Git Service
Eli Friedman [Fri, 17 Mar 2017 22:15:50 +0000 (22:15 +0000)]
[SelectionDAG] Remove redundant stores more aggressively.
Handle TokenFactors more aggressively in
SDValue::reachesChainWithoutSideEffects. This isn't really a
very effective change anymore because of other changes to
chain handling, but it's a cheap check, and the expanded
comments are still useful.
It might be possible to loosen the hasOneUse() requirement with a
deeper analysis, but a naive implementation of that check would be
expensive.
Differential Revision: https://reviews.llvm.org/D29845
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298156
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Fri, 17 Mar 2017 21:49:09 +0000 (21:49 +0000)]
LTO: Work around libstdc++ version mismatch bug, see D31063 review thread.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298127
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 17 Mar 2017 21:36:28 +0000 (21:36 +0000)]
AMDGPU: Fix broken condition in hazard recognizer
Fixes bug 32248.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298125
91177308-0d34-0410-b5e6-
96231b3b80d8
Vassil Vassilev [Fri, 17 Mar 2017 20:58:08 +0000 (20:58 +0000)]
[coverity] Fix uninit variable.
Patch by John Harvey!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298122
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 17 Mar 2017 20:52:21 +0000 (20:52 +0000)]
AMDGPU: Fix handling of constant phi input loop conditions
If the loop condition was an i1 phi with a constantexpr input, this
would add a loop intrinsic fed by a phi dependent on a call to
if.break in the same block. Insert the call in the loop header.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298121
91177308-0d34-0410-b5e6-
96231b3b80d8
Rong Xu [Fri, 17 Mar 2017 20:51:44 +0000 (20:51 +0000)]
[PGO] Change the internal options description. nfc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298120
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 17 Mar 2017 20:41:45 +0000 (20:41 +0000)]
AMDGPU: Cleanup control flow intrinsics
Move backend internal intrinsics along with the rest of the
normal intrinsics, and use the Intrinsic::getDeclaration
API instead of manually constructing the type list.
It's surprising this was working before. fdiv.fast had
the wrong number of parameters. The control flow intrinsic
declaration attributes were not being applied, and
their types were inconsistent. The actual IR use types
did not match the declaration, and were closer to the
types used for the patterns. The brcond lowering
was changing the types, so introduce new nodes for those.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298119
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 17 Mar 2017 20:29:40 +0000 (20:29 +0000)]
[x86] clean up setcc with negated operand transform and add missing test; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298118
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 17 Mar 2017 20:25:49 +0000 (20:25 +0000)]
[X86] Emit fewer instructions to allocate >16GB stack frames
Summary:
Use this code pattern when RAX is live, instead of emitting up to 2
billion adjustments:
pushq %rax
movabsq +-$Offset+-8, %rax
addq %rsp, %rax
xchg %rax, (%rsp)
movq (%rsp), %rsp
Try to clean this code up a bit while I'm here. In particular, hoist the
logic that handles the entire adjustment with `movabsq $imm, %rax` out
of the loop.
This negates the offset in the prologue and uses ADD because X86 only
has a two operand subtract which always subtracts from the destination
register, which can no longer be RSP.
Fixes PR31962
Reviewers: majnemer, sdardis
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D30052
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298116
91177308-0d34-0410-b5e6-
96231b3b80d8
Rong Xu [Fri, 17 Mar 2017 20:05:13 +0000 (20:05 +0000)]
[PGO] Add omitted test cases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298115
91177308-0d34-0410-b5e6-
96231b3b80d8
Jun Bum Lim [Fri, 17 Mar 2017 19:05:21 +0000 (19:05 +0000)]
[CodeGenPrep]Restructure promoting Ext to form ExtLoad
Summary:
Instead of just looking for a load which is mergable with Ext to form ExtLoad, trying to promote Exts as long as the cost is acceptable. This change is not a NFC as it continue promoting Exts even after finding a load during promotions; the change in arm64-codegen-prepare-extload.ll described in 2.b might show the case.
This change was motivated from D26524. Based on this change, I will move the transformation performed in aarch64-type-promotion into CGP.
Reviewers: jmolloy, qcolombet, mcrosier, javed.absar
Reviewed By: qcolombet
Subscribers: rengolin, llvm-commits, aemerson
Differential Revision: https://reviews.llvm.org/D27853
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298114
91177308-0d34-0410-b5e6-
96231b3b80d8
Rong Xu [Fri, 17 Mar 2017 18:07:26 +0000 (18:07 +0000)]
[PGO] Value profile for size of memory intrinsic calls
This patch annotates the valuesites profile to memory intrinsics.
Differential Revision: http://reviews.llvm.org/D31002
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298110
91177308-0d34-0410-b5e6-
96231b3b80d8
Vedant Kumar [Fri, 17 Mar 2017 17:53:26 +0000 (17:53 +0000)]
[Bitcode] Add compatibility test for the 4.0 release
Fork off compatibility.ll for the 4.0 release. The *.bc file in this
commit was produced using a Release build of the release_40 branch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298109
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 17 Mar 2017 17:45:36 +0000 (17:45 +0000)]
[SelectionDAG] Add SelectionDAG.computeKnownBits test support for ISD::ABS
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298108
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 17 Mar 2017 17:27:31 +0000 (17:27 +0000)]
[x86] avoid adc/sbb assert when both sides of add are zexted (PR32316)
As noted in the comment, we might want to account for this case,
but I didn't look at what that would mean for the asm.
I'm also not sure why this only reproduces with avx512, but I'm
putting a conservative fix in for now to avoid the crash.
Also, if both sides of an add are zexted, shouldn't we shrink that add?
https://bugs.llvm.org/show_bug.cgi?id=32316
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298107
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 17 Mar 2017 17:24:03 +0000 (17:24 +0000)]
Fix wasm build after arg_begin iterator type change
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298106
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 17 Mar 2017 17:16:39 +0000 (17:16 +0000)]
Store Arguments in a flat array instead of an iplist
This saves two pointers from Argument and eliminates some extra
allocations.
Arguments cannot be inserted or removed from a Function because that
would require changing its Type, which LLVM does not allow. Instead,
passes that change prototypes, like DeadArgElim, create a new Function
and copy over argument names and attributes. The primary benefit of
iplist is O(1) random insertion and removal. We just don't need that for
arguments, so don't use it.
Reviewed By: chandlerc
Subscribers: dlj, inglorion, llvm-commits
Differential Revision: https://reviews.llvm.org/D31058
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298105
91177308-0d34-0410-b5e6-
96231b3b80d8
Stanislav Mekhanoshin [Fri, 17 Mar 2017 17:13:41 +0000 (17:13 +0000)]
Only unswitch loops with uniform conditions
Loop unswitching can be extremely harmful for a SIMT target. In case
if hoisted condition is not uniform a SIMT machine will execute both
clones of a loop sequentially. Therefor LoopUnswitch checks if the
condition is non-divergent.
Since DivergenceAnalysis adds an expensive PostDominatorTree analysis
not needed for non-SIMT targets a new option is added to avoid unneded
analysis initialization. The method getAnalysisUsage is called when
TargetTransformInfo is not yet available and we cannot use it here.
For that reason a new field DivergentTarget is added to PassManagerBuilder
to control the behavior and set this field from a target.
Differential Revision: https://reviews.llvm.org/D30796
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298104
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 17 Mar 2017 16:58:15 +0000 (16:58 +0000)]
[X86] Add SelectionDAG.computeKnownBits test showing inability to handle ISD::ABS
We have to be careful as abs(INT_MIN) == INT_MIN.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298103
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Fri, 17 Mar 2017 14:19:55 +0000 (14:19 +0000)]
[AArch64] Use alias analysis in the load/store optimization pass.
This allows the optimization to rearrange loads and stores more aggressively.
Differential Revision: http://reviews.llvm.org/D30903
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298092
91177308-0d34-0410-b5e6-
96231b3b80d8
Oliver Stannard [Fri, 17 Mar 2017 11:10:17 +0000 (11:10 +0000)]
[Asm] Don't list '@<type>' in diag when '@' is a comment
This fixes https://bugs.llvm.org//show_bug.cgi?id=31280
Differential revision: https://reviews.llvm.org/D31026
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298067
91177308-0d34-0410-b5e6-
96231b3b80d8
Andre Vieira [Fri, 17 Mar 2017 09:37:10 +0000 (09:37 +0000)]
[ARM] Fix triple format in test branch disassemble test
Fixing triple format in the tests added for the branch label fix for Thumb
Targets. Also recommitting previously approved patch, see
https://reviews.llvm.org/D30943.
Reviewed by: samparker
Differential Revision: https://reviews.llvm.org/D30987
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298056
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 17 Mar 2017 07:37:31 +0000 (07:37 +0000)]
[AVX-512] Make VEX encoded FMA instructions available when AVX512 is enabled regardless of whether +fma was added on the command line.
We weren't able to handle isel of the 128/256-bit FMA instructions when AVX512F was enabled but VLX and FMA weren't.
I didn't mask FeatureAVX512 imply FeatureFMA as I wasn't sure I wanted disabling FMA to also disable AVX512. Instead we just can't prevent FMA instructions if AVX512 is enabled.
Another option would be to promote 128/256-bit to 512-bit, do the operation and extract it. But that requires a lot of extra isel patterns. Since no CPUs exist that support AVX512, but not FMA just using the VEX instructions seems better.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298051
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 17 Mar 2017 07:37:27 +0000 (07:37 +0000)]
[X86] Remove unused predicate. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298050
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Fri, 17 Mar 2017 07:11:46 +0000 (07:11 +0000)]
[SystemZ] New CodeGen tests for vector compare / select.
New SystemZ tests for the improved codegen of vector compare and select,
including cases with a logical combination of two compares.
Review: Ulrich Weigand.
https://reviews.llvm.org/D29489
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298049
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Fri, 17 Mar 2017 07:11:42 +0000 (07:11 +0000)]
Add SystemZ to utils/update_llc_test_checks.py.
Extend script for auto-generating CHECK lines so that it works for SystemZ.
This is a pre-commit for the new tests resulting from
https://reviews.llvm.org/D29489
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298048
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Fri, 17 Mar 2017 06:47:08 +0000 (06:47 +0000)]
[SystemZ] Add use of super-reg in splitMove()
If one of the subregs of the 128 bit reg is undefined when splitMove() splits
a store into two instructions, a use of an undefined physical register
results.
To remedy this, an implicit use of the super register is added onto both new
instructions, along with propagated kill and undef flags.
This was discovered with llvm-stress, and that test case is attached as
test/CodeGen/SystemZ/splitMove_undefReg_mverifier.ll
Thanks to Matthias Braun for helping with a nice explanation.
Review: Ulrich Weigand
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298047
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 17 Mar 2017 06:10:37 +0000 (06:10 +0000)]
[AVX-512] Give priority to EVEX encoded scalar FMA instructions when we have FMA, AVX512 and no VLX.
We were giving priority if VLX was enabled.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298046
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 17 Mar 2017 06:00:01 +0000 (06:00 +0000)]
[X86] Use update_llc_test_checks.py to regenerate a test and add command lines to demonstrate that we don't pick EVEX encoded instruction when AVX512 and FMA3 are both enabled.
This bug only exists on the scalar llvm.fma instrinsics. Looks like we don't test the llvm.fma intrinsics very thoroughly. In fact I don't see any tests for the vector versions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298045
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 17 Mar 2017 05:59:57 +0000 (05:59 +0000)]
[X86] Use update_llc_test_checks.py to regenerate a test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298044
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 17 Mar 2017 05:59:54 +0000 (05:59 +0000)]
[X86] Cleanup the AddedComplexity values on move immediate instructions. NFC
This makes the values a little more consistent between similar instruction and reduces the values some. This results in better grouping in the isel table saving a few bytes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298043
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Fri, 17 Mar 2017 01:45:15 +0000 (01:45 +0000)]
[libFuzzer] inline the code of __sanitizer_cov_trace_pc_guard into it
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298032
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Fri, 17 Mar 2017 01:40:09 +0000 (01:40 +0000)]
[libFuzzer] Experimenting with dictionary minimization.
Summary:
Tracking issue: https://github.com/google/oss-fuzz/issues/331
Reviewers: kcc
Reviewed By: kcc
Differential Revision: https://reviews.llvm.org/D30940
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298031
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Fri, 17 Mar 2017 01:33:16 +0000 (01:33 +0000)]
[libFuzzer] add a test with two different bugs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298030
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Fri, 17 Mar 2017 00:55:53 +0000 (00:55 +0000)]
[RSForGC] Handle vector GEPs
We were not handling getelemenptr instructions of vector type before.
Since getelemenptr instructions for vector types follow the same rule as
getelementptr instructions for non-vector types, we can just handle them
in the same way.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298028
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 17 Mar 2017 00:46:42 +0000 (00:46 +0000)]
Revert "Make NativeExeSymbol a concrete subclass of NativeRawSymbol [PDB]"
For some reason this is causing ANSI color codes to be printed
even when run through FileCheck.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298026
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 17 Mar 2017 00:41:39 +0000 (00:41 +0000)]
SplitKit: Correctly implement partial subregister copies
- This fixes a bug where subregister incompatible with the vregs register
class where used.
- Implement the case where multiple copies are necessary to cover a
given lanemask.
Differential Revision: https://reviews.llvm.org/D30438
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298025
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 17 Mar 2017 00:41:33 +0000 (00:41 +0000)]
VirtRegMap: Correctly deal with bundles when deleting identity copies.
This fixes two problems when VirtRegMap encounters bundles:
- When substituting a vreg subregister def with an actual register the
internal read flag must be cleared.
- Removing an identity COPY from a bundle needs to use
removeFromBundle() and a newly introduced function to update
SlotIndexes.
No testcase here, because none of the in-tree targets trigger this,
however an upcoming commit of mine will need this and the testcase there
will trigger this.
Differential Revision: https://reviews.llvm.org/D30925
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298024
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Fri, 17 Mar 2017 00:38:03 +0000 (00:38 +0000)]
Remove LessPreciseFPMADOption from TargetOptions along with all of the
associated command line options and functions - it's currently unused
in all of llvm and clang other than being set and reset.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298023
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Fri, 17 Mar 2017 00:34:26 +0000 (00:34 +0000)]
[ARM] Use alias analysis in ARMPreAllocLoadStoreOpt.
This allows the optimization to rearrange loads and stores more
aggressively. This doesn't really affect performance, but it helps
codesize.
Differential Revision: https://reviews.llvm.org/D30839
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298021
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Fri, 17 Mar 2017 00:34:07 +0000 (00:34 +0000)]
LTO: Fix a potential race condition in the caching API.
After the call to sys::fs::exists succeeds, indicating a cache hit, we call
AddFile and the client will open the file using the supplied path. If the
client is using cache pruning, there is a potential race between the pruner
and the client. To avoid this, change the caching API so that it provides
a MemoryBuffer to the client, and have clients use that MemoryBuffer where
possible.
This scheme won't work with the gold plugin because the plugin API expects a
file path. So we have the gold plugin use the buffer identifier as a path and
live with the race for now. (Note that the gold plugin isn't actually affected
by the problem at the moment because it doesn't support cache pruning.)
This effectively reverts r279883 modulo the change to use the existing path
in the gold plugin.
Differential Revision: https://reviews.llvm.org/D31063
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298020
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 17 Mar 2017 00:28:23 +0000 (00:28 +0000)]
SmallString doesn't have implicit conversion from const char*.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298019
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 17 Mar 2017 00:16:21 +0000 (00:16 +0000)]
Don't rely on an implicit std::tuple constructor.
Apparently it doesn't have one, so using an initializer list
doesn't work correctly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298018
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 17 Mar 2017 00:15:55 +0000 (00:15 +0000)]
[pdb] Fix an uninitialized read, and add a test for it.
This was originally reported in pr32249, uncovered by PTVS-Studio.
There was no code coverage for this path because it was
difficult to construct odd-case PDB files that were not generated
by cl.
Now that we can write construct minimal PDB files from YAML,
it's easy to construct fragments that generate whatever we want.
In this patch I add a test that creates 2 type records. One
with a unique name, and one without. I verify that we can go
from PDB to Yaml with no errors. In a future patch I'd like
to add something like llvm-pdbdump raw -lookup-type that will
just dump one record and nothing else, which should make it
a bit cleaner to find this kind of thing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298017
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 17 Mar 2017 00:15:27 +0000 (00:15 +0000)]
[PDB] It is not an error getting the "Invalid" Annotation opcode.
The linker can insert invalid opcodes to indicate padding
bytes, and we should not fail in this case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298016
91177308-0d34-0410-b5e6-
96231b3b80d8
Jacques Pienaar [Thu, 16 Mar 2017 23:22:10 +0000 (23:22 +0000)]
clean Lanai namespace
Summary: This patch cleans the namespace of the Lanai target.
Reviewers: jpienaar
Reviewed By: jpienaar
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D30955
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298015
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Thu, 16 Mar 2017 23:19:40 +0000 (23:19 +0000)]
Fix unit test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298014
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Thu, 16 Mar 2017 22:59:15 +0000 (22:59 +0000)]
Remove getArgumentList() in favor of arg_begin(), args(), etc
Users often call getArgumentList().size(), which is a linear way to get
the number of function arguments. arg_size(), on the other hand, is
constant time.
In general, the fact that arguments are stored in an iplist is an
implementation detail, so I've removed it from the Function interface
and moved all other users to the argument container APIs (arg_begin(),
arg_end(), args(), arg_size()).
Reviewed By: chandlerc
Differential Revision: https://reviews.llvm.org/D31052
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298010
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Thu, 16 Mar 2017 22:58:56 +0000 (22:58 +0000)]
Remove dead F parameter from Argument constructor
When Function creates its argument list, it does the ilist push_back
itself. No other caller passes in a parent function, so this is dead,
and it uses the soon-to-be-deleted getArgumentList accessor.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298009
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Thu, 16 Mar 2017 22:34:18 +0000 (22:34 +0000)]
Fix linux build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298007
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian McCarthy [Thu, 16 Mar 2017 22:28:39 +0000 (22:28 +0000)]
Make NativeExeSymbol a concrete subclass of NativeRawSymbol [PDB]
This moves exe symbol-specific method implementations out of NativeRawSymbol
into a concrete subclass. Also adds implementations for hasCTypes and
hasPrivateSymbols and a simple test to ensure the native reader can access
the summary information for the executable from the PDB.
Differential Revision: https://reviews.llvm.org/D31059
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298005
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Thu, 16 Mar 2017 22:28:04 +0000 (22:28 +0000)]
[Support] Support both Windows and Posix paths on both platforms.
Previously which path syntax we supported dependend on what
platform we were compiling LLVM on. While this is normally
desirable, there are situations where we need to be able to
handle a path that we know was generated on a remote host.
Remote debugging, for example, or parsing debug info.
99% of the code in LLVM for handling paths was platform
agnostic and literally just a few branches were gated behind
pre-processor checks, so this changes those sites to use
runtime checks instead, and adds a flag to every path
API that allows one to override the host native syntax.
Differential Revision: https://reviews.llvm.org/D30858
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298004
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Thu, 16 Mar 2017 22:25:45 +0000 (22:25 +0000)]
Make Argument::getArgNo() constant time, not O(#args)
getArgNo is actually hot in LLVM, because its how we check for
attributes on arguments:
bool Argument::hasNonNullAttr() const {
if (!getType()->isPointerTy()) return false;
if (getParent()->getAttributes().
hasAttribute(getArgNo()+1, Attribute::NonNull))
return true;
It actually shows up as the 23rd hottest leaf function in a 13s sample
of LTO of llc.
This grows Argument by four bytes, but I have another pending patch to
shrink it by removing its ilist_node base.
Reviewed By: chandlerc
Subscribers: inglorion, llvm-commits, mehdi_amini
Differential Revision: https://reviews.llvm.org/D31057
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298003
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Thu, 16 Mar 2017 22:24:19 +0000 (22:24 +0000)]
Remove eol-style:native from Path.h
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298002
91177308-0d34-0410-b5e6-
96231b3b80d8
Kyle Butt [Thu, 16 Mar 2017 21:33:29 +0000 (21:33 +0000)]
CodeGen: BlockPlacement: Adjust test case so it covers rL297925. NFC
I had ajusted the test case before when testing a chain of length 2, and then
reverted it with rL296845 when I switched to 3 triangles. After running
benchmarks and examining generated code at length 2 I forgot to put the test
back.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298000
91177308-0d34-0410-b5e6-
96231b3b80d8
Rong Xu [Thu, 16 Mar 2017 21:15:48 +0000 (21:15 +0000)]
Resubmit r297897: [PGO] Value profile for size of memory intrinsic calls
R297897 inadvertently enabled annotation for memop profiling. This new patch
fixed it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297996
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 16 Mar 2017 21:14:09 +0000 (21:14 +0000)]
Salvage debug info from instructions about to be deleted
[Reapplies r297971 and punting on finding a better API for findDbgValues()]
This patch improves debug info quality in InstCombine by looking at
values that are about to be deleted, checking whether there are any
dbg.value instrinsics referring to them, and potentially encoding the
semantics of the deleted instruction into the dbg.value's
DIExpression.
In the example in the testcase (which was extracted from XNU) there is a sequence of
%4 = load %struct.entry*, %struct.entry** %next2, align 8, !dbg !41
%5 = bitcast %struct.entry* %4 to i8*, !dbg !42
%add.ptr4 = getelementptr inbounds i8, i8* %5, i64 -8, !dbg !43
%6 = bitcast i8* %add.ptr4 to %struct.entry*, !dbg !44
call void @llvm.dbg.value(metadata %struct.entry* %6, i64 0, metadata !20, metadata !21), !dbg 34
When these instructions are eliminated by instcombine one after
another, we can still salvage the otherwise dead debug info:
- Bitcasts have no effect, so have the dbg.value point to operand(0)
- Loads can be expressed via a DW_OP_deref
- Constant gep instructions can be replaced by DWARF expression arithmetic
The API introduced by this patch is not specific to instcombine and
can be useful in other places, too.
rdar://problem/
30725338
Differential Revision: https://reviews.llvm.org/D30919
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297994
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Thu, 16 Mar 2017 21:07:48 +0000 (21:07 +0000)]
[LoopUnroll] Don't peel loops where the latch isn't the exiting block
Peeling assumed this doesn't happen, but didn't check it.
This fixes PR32178.
Differential Revision: https://reviews.llvm.org/D30757
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297993
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Zolotukhin [Thu, 16 Mar 2017 21:07:38 +0000 (21:07 +0000)]
[SCEV] Compute affine range in another way to avoid bitwidth extending.
Summary:
This approach has two major advantages over the existing one:
1. We don't need to extend bitwidth in our computations. Extending
bitwidth is a big issue for compile time as we often end up working with
APInts wider than 64bit, which is a slow case for APInt.
2. When we zero extend a wrapped range, we lose some information (we
replace the range with [0, 1 << src bit width)). Thus, avoiding such
extensions better preserves information.
Correctness testing:
I ran 'ninja check' with assertions that the new implementation of
getRangeForAffineAR gives the same results as the old one (this
functionality is not present in this patch). There were several failures
- I inspected them manually and found out that they all are caused by
the fact that we're returning more accurate results now (see bullet (2)
above).
Without such assertions 'ninja check' works just fine, as well as
SPEC2006.
Compile time testing:
CTMark/Os:
- mafft/pairlocalalign -16.98%
- tramp3d-v4/tramp3d-v4 -12.72%
- lencod/lencod -11.51%
- Bullet/bullet -4.36%
- ClamAV/clamscan -3.66%
- 7zip/7zip-benchmark -3.19%
- sqlite3/sqlite3 -2.95%
- SPASS/SPASS -2.74%
- Average -5.81%
Performance testing:
The changes are expected to be neutral for runtime performance.
Reviewers: sanjoy, atrick, pete
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D30477
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297992
91177308-0d34-0410-b5e6-
96231b3b80d8
Derek Schuff [Thu, 16 Mar 2017 20:49:48 +0000 (20:49 +0000)]
[WebAssembly] Fix some broken type encodings in wasm binary
A recent change switch the in-memory wasm value types
to be signed integers, but I missing a few cases where
these were being writing to the binary.
Differential Revision: https://reviews.llvm.org/D31014
Patch by Sam Clegg
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297991
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Thu, 16 Mar 2017 20:45:11 +0000 (20:45 +0000)]
Silence -Wcovered-switch-default warning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297990
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Thu, 16 Mar 2017 20:42:45 +0000 (20:42 +0000)]
[InstCombine] avoid breaking up bitcasted vector min/max patterns (PR32306)
As the related tests show, we're not canonicalizing to this form for scalars or vectors yet,
but this solves the immediate problem in:
https://bugs.llvm.org/show_bug.cgi?id=32306
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297989
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonathan Roelofs [Thu, 16 Mar 2017 20:37:59 +0000 (20:37 +0000)]
Clarify a comment about mapped_iterator. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297988
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Thu, 16 Mar 2017 20:35:07 +0000 (20:35 +0000)]
ArchiveWriter: Remove unused variables. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297987
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Thu, 16 Mar 2017 20:31:38 +0000 (20:31 +0000)]
[InstCombine] add tests for PR32306 and missed min/max canonicalization; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297986
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Thu, 16 Mar 2017 20:24:14 +0000 (20:24 +0000)]
Create msbuild only when using MSVC
Summary:
I could be wrong but it seems to have no use for MinGW.
Related diff: https://reviews.llvm.org/D29772
Reviewers: chandlerc, rnk
Reviewed By: rnk
Patch by: Mateusz Mikuła
Subscribers: rnk, llvm-commits, mgorny
Differential Revision: https://reviews.llvm.org/D29952
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297985
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Thu, 16 Mar 2017 20:19:11 +0000 (20:19 +0000)]
[PDB] Add support for parsing Flags from PDB Stream.
This was discovered when running `llvm-pdbdump diff` against
two files, the second of which was generated by running the
first one through pdb2yaml and then yaml2pdb.
The second one was missing some bytes from the PDB Stream, and
tracking this down showed that at the end of the PDB Stream were
some additional bytes that we were ignoring. Looking back
to the reference code, these seem to specify some additional
flags that indicate whether the PDB supports various optional
features.
This patch adds support for reading, writing, and round-tripping
these flags through YAML and the raw dumper, and updates the
tests accordingly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297984
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Thu, 16 Mar 2017 20:18:41 +0000 (20:18 +0000)]
[llvm-pdbdump] Add support for diffing the PDB Stream.
In doing so I discovered that we completely ignore some bytes
of the PDB Stream after we "finish" loading it. These bytes
seem to specify some additional information about what kind
of data is present in the PDB. A subsequent patch will add
code to read in those fields and store their values.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297983
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 16 Mar 2017 20:11:54 +0000 (20:11 +0000)]
Revert commit r297971 because of issues reported by msan.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297982
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Thu, 16 Mar 2017 20:02:30 +0000 (20:02 +0000)]
TargetInstrInfo: Provide default implementation of isTailCall().
In fact this default implementation should be the only implementation,
keep it virtual for now to accomodate targets that don't model flags
correctly.
Differential Revision: https://reviews.llvm.org/D30747
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297980
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Thu, 16 Mar 2017 19:59:19 +0000 (19:59 +0000)]
[globalisel] Correct one more simple immediate that should be a ConstantInt.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297979
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 16 Mar 2017 19:58:06 +0000 (19:58 +0000)]
[AVX-512] Add tests for kandn, kor, kxor, and kxnor intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297978
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Thu, 16 Mar 2017 19:52:15 +0000 (19:52 +0000)]
[llvm-pdbdump] clang-format Diff.cpp
Looks like this file did not have clang-format run on
it when its initial revision was committed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297977
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 16 Mar 2017 19:52:00 +0000 (19:52 +0000)]
Remove redundant conditions (PR31753). NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297976
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 16 Mar 2017 18:33:01 +0000 (18:33 +0000)]
Fix unused variable warnings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297973
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 16 Mar 2017 18:22:52 +0000 (18:22 +0000)]
Salvage debug info from instructions about to be deleted
This patch improves debug info quality in InstCombine by looking at
values that are about to be deleted, checking whether there are any
dbg.value instrinsics referring to them, and potentially encoding the
semantics of the deleted instruction into the dbg.value's
DIExpression.
In the example in the testcase (which was extracted from XNU) there is a sequence of
%4 = load %struct.entry*, %struct.entry** %next2, align 8, !dbg !41
%5 = bitcast %struct.entry* %4 to i8*, !dbg !42
%add.ptr4 = getelementptr inbounds i8, i8* %5, i64 -8, !dbg !43
%6 = bitcast i8* %add.ptr4 to %struct.entry*, !dbg !44
call void @llvm.dbg.value(metadata %struct.entry* %6, i64 0, metadata !20, metadata !21), !dbg 34
When these instructions are eliminated by instcombine one after
another, we can still salvage the otherwise dead debug info:
- Bitcasts have no effect, so have the dbg.value point to operand(0)
- Loads can be expressed via a DW_OP_deref
- Constant gep instructions can be replaced by DWARF expression arithmetic
The API introduced by this patch is not specific to instcombine and
can be useful in other places, too.
rdar://problem/
30725338
Differential Revision: https://reviews.llvm.org/D30919
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297971
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Thu, 16 Mar 2017 18:20:06 +0000 (18:20 +0000)]
LTO: Create temporary cache files in the cache directory instead of $TMPDIR.
This fixes a race condition where another linker process can observe a
partially written file if we copy it from another file system, and allows
the link to be independent of the amount of free disk space in $TMPDIR.
Differential Revision: https://reviews.llvm.org/D31045
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297970
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 16 Mar 2017 18:06:04 +0000 (18:06 +0000)]
Attempt to fix bot failure on Windows.
Looks like this expression was accidentally using 32-bit arithmetic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297969
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Thu, 16 Mar 2017 18:04:50 +0000 (18:04 +0000)]
[globalisel] Correct G_CONSTANT path of selectArithImmed()
Earlier stages of GlobalISel always use ConstantInt in G_CONSTANT so that's
what we should check for.
This fixes a crash introduced in r297782.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297968
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 16 Mar 2017 17:42:47 +0000 (17:42 +0000)]
Rearrange fields. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297967
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 16 Mar 2017 17:42:45 +0000 (17:42 +0000)]
Rename methods in DwarfExpression to adhere to the LLVM coding guidelines.
NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297966
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 16 Mar 2017 17:14:56 +0000 (17:14 +0000)]
PR32288: More efficient encoding for DWARF expr subregister access.
Citing http://bugs.llvm.org/show_bug.cgi?id=32288
The DWARF generated by LLVM includes this location:
0x55 0x93 0x04 DW_OP_reg5 DW_OP_piece(4) When GCC's DWARF is simply
0x55 (DW_OP_reg5) without the DW_OP_piece. I believe it's reasonable
to assume the DWARF consumer knows which part of a register
logically holds the value (low bytes, high bytes, how many bytes,
etc) for a primitive value like an integer.
This patch gets rid of the redundant DW_OP_piece when a subregister is
at offset 0. It also adds previously missing subregister masking when
a subregister is followed by another operation.
(This reapplies r297960 with two additional testcase updates).
rdar://problem/
31069390
https://reviews.llvm.org/D31010
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297965
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Thu, 16 Mar 2017 17:05:16 +0000 (17:05 +0000)]
[cmake] Refactor warning flag logic to use Unix warnings with clang-cl
Summary:
clang-cl understands the GCC-style -W[no-]foo flags, and for the most
part ignores MSVC -wd flags. So, let's pass the curated set of warning
flags we use on Unix on Windows. We can also stop passing /W4 -wd*,
which for the most part corresponds to -Wall -Wextra with a bunch of
flags that we mostly ignore.
I had to disable -Wnon-virtual-dtor on Windows, because it fires on
every COM class ever. I filed PR32286 to fix this.
So far I've only found two instances of -Wstring-conversion in the
WinASan code, which I'll fix. Other than that we seem clean.
Reviewers: hans
Subscribers: mgorny, llvm-commits
Differential Revision: https://reviews.llvm.org/D30992
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297964
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Thu, 16 Mar 2017 16:57:31 +0000 (16:57 +0000)]
[IR] Inline some Function accessors
I checked that all of these out-of-line methods previously compiled to
simple loads and bittests, so they are pretty good candidates for
inlining. In particular, arg_size() and arg_empty() are popular and are
just two loads, so they seem worth inlining.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297963
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 16 Mar 2017 16:38:22 +0000 (16:38 +0000)]
Revert "PR32288: More efficient encoding for DWARF expr subregister access."
This reverts commit
2bf453116889a576956892ea9683db4fcd96e30e while investigating buildbot breakage.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297962
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 16 Mar 2017 16:34:14 +0000 (16:34 +0000)]
PR32288: More efficient encoding for DWARF expr subregister access.
Citing http://bugs.llvm.org/show_bug.cgi?id=32288
The DWARF generated by LLVM includes this location:
0x55 0x93 0x04 DW_OP_reg5 DW_OP_piece(4) When GCC's DWARF is simply
0x55 (DW_OP_reg5) without the DW_OP_piece. I believe it's reasonable
to assume the DWARF consumer knows which part of a register
logically holds the value (low bytes, high bytes, how many bytes,
etc) for a primitive value like an integer.
This patch gets rid of the redundant DW_OP_piece when a subregister is
at offset 0. It also adds previously missing subregister masking when
a subregister is followed by another operation.
rdar://problem/
31069390
https://reviews.llvm.org/D31010
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297960
91177308-0d34-0410-b5e6-
96231b3b80d8
Hiroshi Inoue [Thu, 16 Mar 2017 16:30:06 +0000 (16:30 +0000)]
Test commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297959
91177308-0d34-0410-b5e6-
96231b3b80d8
Stanislav Mekhanoshin [Thu, 16 Mar 2017 16:11:46 +0000 (16:11 +0000)]
[AMDGPU] Run always inliner early in opt
We can mark functions to always inline early in the opt. Since we do not have
call support this early inlining creates opportunities for inter-procedural
optimizations which would not occur otherwise.
Differential Revision: https://reviews.llvm.org/D31016
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297958
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 16 Mar 2017 15:10:42 +0000 (15:10 +0000)]
[X86] Add PR22338 test case
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297957
91177308-0d34-0410-b5e6-
96231b3b80d8
Aditya Kumar [Thu, 16 Mar 2017 14:09:18 +0000 (14:09 +0000)]
Fix: Refactor SimplifyCFG:canSinkInstructions [NFC]
Differential Revision: https://reviews.llvm.org/D30116
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297955
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Thu, 16 Mar 2017 14:05:34 +0000 (14:05 +0000)]
[BasicTTIImpl] Bugfix in getIntrinsicInstrCost()
Don't call getScalarizationOverhead(RetTy, true, false) if RetTy is void type.
Review: Hal Finkel
https://reviews.llvm.org/D31024
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297954
91177308-0d34-0410-b5e6-
96231b3b80d8
Bjorn Pettersson [Thu, 16 Mar 2017 13:22:01 +0000 (13:22 +0000)]
[InstCombine] Liberate assert in InstCombiner::visitZExt
Summary:
The call to canEvaluateZExtd in InstCombiner::visitZExt may
return with BitsToClear == SrcTy->getScalarSizeInBits(), but
there is an assert that BitsToClear should be smaller than
SrcTy->getScalarSizeInBits().
I have a test case that triggers the assert, but it only happens
for my downstream target. I've not been able to trigger it for
any upstream target.
The assert triggered for a piece of code such as this
%shr1 = lshr i16 undef, 15
...
%shr2 = lshr i16 %shr1, 1
%conv = zext i16 %shr2 to i32
Normally the lshr instructions are constant folded before we
visit the zext (that is why it is so hard to reproduce).
The original pattern, before instcombine, is of course a lot more
complicated in my test case. The shift count in the second lshr
is for example determined by the outcome of a PHI instruction.
It seems like other rewrites by instcombine leads up to
the pattern above. And then the zext is pulled from the
worklist, and visited (hitting the assert), before we detect
that the lshr instrucions can be constant folded.
Anyway, since the canEvaluateZExtd may return with BitsToClear
equal to SrcTy->getScalarSizeInBits(), and since the rewrite
that converts the expression type to avoid a zero extend works
also for the case where SrcBitsKept ends up being zero, then
it should be OK to liberate the assert to
assert(BitsToClear <= SrcTy->getScalarSizeInBits() &&
"Unreasonable BitsToClear");
Reviewers: hfinkel
Reviewed By: hfinkel
Subscribers: hfinkel, llvm-commits
Differential Revision: https://reviews.llvm.org/D30993
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297952
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Liu [Thu, 16 Mar 2017 13:16:35 +0000 (13:16 +0000)]
Revert "[PGO] Value profile for size of memory intrinsic calls"
This commit reverts r297897 and r297909.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297951
91177308-0d34-0410-b5e6-
96231b3b80d8
James Henderson [Thu, 16 Mar 2017 11:22:09 +0000 (11:22 +0000)]
[Support] Add support for getting file system permissions on Windows and implement sys::fs::set/getPermissions to work with them
This change adds support for functions to set and get file permissions, in a similar manner to the C++17 permissions() function in <filesystem>. The setter uses chmod on Unix systems and SetFileAttributes on Windows, setting the permissions as passed in. The getter simply uses the existing status() function.
Prior to this change, status() would always return an unknown value for the permissions on a Windows file, making it impossible to test the new function on Windows. I have therefore added support for this as well. On Linux, prior to this change, the permissions included the file type, which should actually be accessed via a different member of the file_status class.
Note that on Windows, only the *_write permission bits have any affect - if any are set, the file is writable, and if not, the file is read-only. This is in common with what MSDN describes for their behaviour of std::filesystem::permissions(), and also what boost::filesystem does.
The motivation behind this change is so that we can easily test behaviour on read-only files in LLVM unit tests, but I am sure that others may find it useful in some situations.
Reviewers: zturner, amccarth, aaron.ballman
Differential Revision: https://reviews.llvm.org/D30736
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297945
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 16 Mar 2017 10:45:42 +0000 (10:45 +0000)]
[PM/Inliner] Fix a bug in r297374 where we would leave stale calls in
the work queue and crash when trying to visit them after deleting the
function containing those calls.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297940
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 16 Mar 2017 10:13:55 +0000 (10:13 +0000)]
[PM/Inliner] Add a test case that encapsulates the core issue addressed
in r297374.
I've extracted a small version of this from the C++ metaprogram Richard
came up with to exercise these kinds of issues and written comments to
describe both how to reproduce a fresh version of the test case and what
likely failure modes are.
The test case is still a bit brittle as it depends on the particular
inline cost modeling and SCC visitation order, but it definitely would
have caught the bug right away when developing things so it seems
a really valuable test case to have.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297935
91177308-0d34-0410-b5e6-
96231b3b80d8
Oren Ben Simhon [Thu, 16 Mar 2017 08:15:52 +0000 (08:15 +0000)]
Fixing typos.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297932
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Thu, 16 Mar 2017 07:17:12 +0000 (07:17 +0000)]
[SelectionDAG] Optimize VSELECT->SETCC of incompatible or illegal types.
Don't scalarize VSELECT->SETCC when operands/results needs to be widened,
or when the type of the SETCC operands are different from those of the VSELECT.
(VSELECT SETCC) and (VSELECT (AND/OR/XOR (SETCC,SETCC))) are handled.
The previous splitting of VSELECT->SETCC in DAGCombiner::visitVSELECT() is
no longer needed and has been removed.
Updated tests:
test/CodeGen/ARM/vuzp.ll
test/CodeGen/NVPTX/f16x2-instructions.ll
test/CodeGen/X86/2011-10-19-widen_vselect.ll
test/CodeGen/X86/2011-10-21-widen-cmp.ll
test/CodeGen/X86/psubus.ll
test/CodeGen/X86/vselect-pcmp.ll
Review: Eli Friedman, Simon Pilgrim
https://reviews.llvm.org/D29489
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297930
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Thu, 16 Mar 2017 03:59:23 +0000 (03:59 +0000)]
[ADCE] Remove redundent code [NFC]
Summary:
In commit r289548 ([ADCE] Add code to remove dead branches) a redundant loop
nest was accidentally introduced, which implements exactly the same
functionality as has already been available right after. This redundancy has
been found when inspecting the ADCE code in the context of our recent
discussions on post-dominator modeling. This redundant code was also eliminated
by r296535 (which sparked the discussion), but only as part of a larger semantic
change of the post-dominance modeling. As this redundency in [ADCE] is really
just an oversight completely independent of the post-dominance changes under
discussion, we remove this redundancy independently.
Reviewers: dberlin, david2050
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D31023
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297929
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Thu, 16 Mar 2017 03:54:38 +0000 (03:54 +0000)]
Fix pessimising moves.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297928
91177308-0d34-0410-b5e6-
96231b3b80d8