Commit Graph

127368 Commits

Author SHA1 Message Date
Michael Zolotukhin
08d1cff7c6 Factor out UnrollAnalyzer to Analysis, and add unit tests for it.
Summary:
Unrolling Analyzer is already pretty complicated, and it becomes harder and harder to exercise it with usual IR tests, as with them we can only check the final decision: whether the loop is unrolled or not. This change factors this framework out from LoopUnrollPass to analyses, which allows to use unit tests.
The change itself is supposed to be NFC, except adding a couple of tests.

I plan to add more tests as I add new functionality and find/fix bugs.

Reviewers: chandlerc, hfinkel, sanjoy

Subscribers: zzheng, sanjoy, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260169 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 23:03:59 +00:00
Simon Pilgrim
8464bb8c41 [X86][SSE1] Add MOVLHPS/MOVHLPS lowering and memory folding support
As discussed on PR26491, this patch adds support for lowering v4f32 shuffles to the MOVLHPS/MOVHLPS instructions. It also adds support for memory folding with their MOVLPS/MOVHPS load equivalents.

This first patch only really helps SSE1 targets as SSE2+ targets will widen the shuffle mask and use v2f64 equivalents (although they still combine to MOVLHPS/MOVHLPS for v2f64 splats). This will have to be addressed in a future patch, most likely when we add support for binary target shuffle combines.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260168 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 23:03:46 +00:00
Davide Italiano
68c43d458e [llvm-nm] Yet another attempt of simplifying code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260166 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 22:58:26 +00:00
Andrew Kaylor
fb2b3b0bed [regalloc][WinEH] Do not mark intervals as not spillable if they contain a regmask
Differential Revision: http://reviews.llvm.org/D16831



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260164 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 22:52:51 +00:00
Justin Bogner
eb833bab8d llvm-cov: Fix reading gcov data that does not have function names
In order for recent gcov versions to read the coverage data, you have
to use UseCfgChecksum=true and FunctionNamesInData=false options for
coverage profiling pass. This is because gcov is expecting the
function section in .gcda to be exactly 3 words in size, containing
ident and two checksums.

While llvm-cov is compatible with UseCfgChecksum=true, it always
expects a function name in .gcda function sections (it's not
compatible with FunctionNamesInData=false). Thus it's currently
impossible to generate one set of coverage files that works with both
gcov and llvm-cov.

This change fixes the reading of coverage information to only read the
function name if it's present.

Patch by Arseny Kapoulkine. Thanks!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260162 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 22:49:40 +00:00
Justin Bogner
5835d8e044 cmake: Use "set" instead of "option" for LLVM_ENABLE_LTO
Apparently option is for bools and cmake-gui will display this
strangely with option.

Pointed out by edward-san - thanks!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260154 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 21:55:19 +00:00
Dan Gohman
cdcce2d758 [WebAssembly] Update the br_if instructions' operand orders to match the spec.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260152 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 21:50:13 +00:00
Sanjay Patel
6ac56c2864 rangify; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260151 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 21:32:43 +00:00
Rong Xu
c9a01773b0 [PGO] Differentiate Clang instrumentation and IR level instrumentation profiles
This patch uses one bit in profile version to differentiate Clang
instrumentation and IR level instrumentation profiles.

PGOInstrumenation generates a COMDAT variable __llvm_profile_raw_version so
that the compiler runtime can set the right profile kind.
PGOInstrumenation now checks this bit to make sure it's an IR level
instrumentation profile.

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260146 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 21:07:46 +00:00
Sanjay Patel
ab75a1751c [x86] convert masked store of one element to scalar store
Another opportunity to reduce masked stores: in D16691, we decided not to attempt the 'one mask element is set'
transform in InstCombine, but this should be a win for any AVX machine.

Code comments note that this transform could be extended for other targets / cases.

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260145 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 21:05:08 +00:00
Justin Bogner
1d15d57f1e cmake: Accept "thin" or "full" as arguments to -DLLVM_ENABLE_LTO
Mehdi suggested in a review of r259766 that it's also useful to easily
set the type of LTO. Augment the cmake variable to support that.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260143 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 21:01:24 +00:00
Xinliang David Li
307f4d07de Fix build bot failure
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260138 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 20:08:21 +00:00
Tom Stellard
58abe5f3d2 AMDGPU/SI: Implement a work-around for smrd corrupting vccz bit
Summary:
We will hit this once we have enabled uniform branches.  The
smrd-vccz-bug.ll test will be added with the uniform branch commit.

Reviewers: mareko, arsenm

Subscribers: arsenm, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260137 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 19:49:20 +00:00
Hans Wennborg
da65ee3830 Add triple to h-registers-3.ll to make bots happy after r260133
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260136 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 19:45:24 +00:00
Hans Wennborg
7dfc3433f3 [X86] Don't zero/sign-extend i1, i8, or i16 return values to 32 bits (PR22532)
This matches GCC and MSVC's behaviour, and saves on code size.

We were already not extending i1 return values on x86_64 after r127766. This
takes that patch further by applying it to x86 target as well, and also for i8
and i16.

The ABI docs have been unclear about the required behaviour here. The new i386
psABI [1] clearly states (Table 2.4, page 14) that i1, i8, and i16 return
vales do not need to be extended beyond 8 bits. The x86_64 ABI doc is being
updated to say the same [2].

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

 [1]. https://01.org/sites/default/files/file_attach/intel386-psabi-1.0.pdf
 [2]. https://groups.google.com/d/msg/x86-64-abi/E8O33onbnGQ/_RFWw_ixDQAJ

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260133 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 19:34:30 +00:00
Tim Northover
bff2e82786 AArch64: match correct order in subtraction pattern.
The accumulator in multiply-and-subtract instructions is actually subtracted
*from* so these patterns were computing the wrong value.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260131 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 19:33:18 +00:00
Sanjay Patel
c5e1c3732f fix typos; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260130 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 19:27:33 +00:00
Adrian Prantl
4ebe0588be Simplify this unittest.
Thanks to dblaikie for the suggestion!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260125 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 19:13:15 +00:00
Matt Arsenault
60a32b5936 AMDGPU: Remove bfi and bfm intrinsics
Nothing is using them.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260123 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 19:06:01 +00:00
Teresa Johnson
ce0afe6f7f [ThinLTO] Remove imported available externally defs from comdats.
Summary:
Available externally definitions are considered declarations for the
linker and eventually dropped. As such they are not allowed to be
in comdats. Remove any such imported functions from comdats.

Reviewers: rafael

Subscribers: davidxl, llvm-commits, joker.eph

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260122 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 18:47:20 +00:00
Xinliang David Li
04638a608b [PGO] Enable compression in pgo instrumentation
This reduces sizes of instrumented object files, final binaries,
process images, and raw profile data.

The format of the indexed profile data remain the same.

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





git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260117 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 18:13:49 +00:00
Silviu Baranga
e942cf87e8 [SCEV][LAA] Re-commit r260085 and r260086, this time with a fix for the memory
sanitizer issue. The PredicatedScalarEvolution's copy constructor
wasn't copying the Generation value, and was leaving it un-initialized.

Original commit message:

[SCEV][LAA] Add no wrap SCEV predicates and use use them to improve strided pointer detection

Summary:
This change adds no wrap SCEV predicates with:
  - support for runtime checking
  - support for expression rewriting:
      (sext ({x,+,y}) -> {sext(x),+,sext(y)}
      (zext ({x,+,y}) -> {zext(x),+,sext(y)}

Note that we are sign extending the increment of the SCEV, even for
the zext case. This is needed to cover the fairly common case where y would
be a (small) negative integer. In order to do this, this change adds two new
flags: nusw and nssw that are applicable to AddRecExprs and permit the
transformations above.

We also change isStridedPtr in LAA to be able to make use of
these predicates. With this feature we should now always be able to
work around overflow issues in the dependence analysis.

Reviewers: mzolotukhin, sanjoy, anemet

Subscribers: mzolotukhin, sanjoy, llvm-commits, rengolin, jmolloy, hfinkel

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260112 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 17:02:45 +00:00
Adrian Prantl
c44fb84ad0 Add a unit test for r259973.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260111 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 17:02:34 +00:00
Haicheng Wu
b21e2903ef [JumpThreading] Change a return of ComputeValueKnownInPredecessors()
Change a return statement of ComputeValueKnownInPredecessors() to be the same as
the rest return statements of the function. Otherwise, it might return true with
an empty Result when the current basic block has no predecessors and trigger the
first assert of JumpThreading::ProcessThreadableEdges().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260110 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 17:00:39 +00:00
Matt Arsenault
98d69cc318 SelectionDAG: Lower some range metadata to AssertZext
If a range has a lower bound of 0, add an AssertZext from the
nearest floor power of two.

This allows operations with some workitem intrinsics with known
maximum ranges to use fast 24-bit multiplies.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260109 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 16:28:19 +00:00
Michael Zuckerman
76a73b5b30 [AVX512][PROLQ][PROLD] Change imm8 to int
Differential Revision: http://reviews.llvm.org/D16983



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260101 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 15:13:32 +00:00
Igor Breger
a2a4a6e1dc [SLP] Fix placement of debug statement (NFC)
By Ayal Zaks (ayal.zaks@intel.com)

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260094 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 14:11:39 +00:00
Igor Breger
d23febf42f AVX512: Change builtin function name for scalar intrinsics. Add "mask" to function name to reflect the function behavior.
Differential Revision: http://reviews.llvm.org/D16958

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260089 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 12:38:03 +00:00
Silviu Baranga
bbaff75d11 Revert r260086 and r260085. They have broken the memory
sanitizer bots.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260087 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 11:56:15 +00:00
Silviu Baranga
147a2681b1 [LoopVersioning] Don't assert when there are no memchecks
We shouldn't assert when there are no memchecks, since we
can have SCEV checks. There is already an assert covering
the case where there are no SCEV checks or memchecks.

This also changes the LAA pointer wrapping versioning test
to use the loop versioning pass (this was how I managed to
trigger the assert in the loop versioning pass).



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260086 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 11:15:29 +00:00
Silviu Baranga
41fcf12691 [SCEV][LAA] Add no wrap SCEV predicates and use use them to improve strided pointer detection
Summary:
This change adds no wrap SCEV predicates with:
  - support for runtime checking
  - support for expression rewriting:
      (sext ({x,+,y}) -> {sext(x),+,sext(y)}
      (zext ({x,+,y}) -> {zext(x),+,sext(y)}

Note that we are sign extending the increment of the SCEV, even for
the zext case. This is needed to cover the fairly common case where y would
be a (small) negative integer. In order to do this, this change adds two new
flags: nusw and nssw that are applicable to AddRecExprs and permit the
transformations above.

We also change isStridedPtr in LAA to be able to make use of
these predicates. With this feature we should now always be able to
work around overflow issues in the dependence analysis.

Reviewers: mzolotukhin, sanjoy, anemet

Subscribers: mzolotukhin, sanjoy, llvm-commits, rengolin, jmolloy, hfinkel

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260085 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 10:45:50 +00:00
Maxim Ostapenko
428ffed300 [asan] Introduce new hidden -asan-use-private-alias option.
As discussed in https://github.com/google/sanitizers/issues/398, with current
implementation of poisoning globals we can have some CHECK failures or false
positives in case of mixing instrumented and non-instrumented code due to ASan
poisons innocent globals from non-sanitized binary/library. We can use private
aliases to avoid such errors. In addition, to preserve ODR violation detection,
we introduce new __odr_asan_gen_XXX symbol for each instrumented global that
indicates if this global was already registered. To detect ODR violation in
runtime, we should only check the value of indicator and report an error if it
isn't equal to zero.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260075 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 08:30:57 +00:00
Dan Gohman
f80c9dda08 [WebAssembly] Add another optimization idea to README.txt.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260070 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 03:42:36 +00:00
Craig Topper
0fe9ca1cf2 [X86] Change FeatureIFMA string to 'avx512ifma'. Matches gcc and fixes PR26461.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260069 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 01:23:15 +00:00
Craig Topper
86ed0da10d [Support] Use hexdigit. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260068 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 01:03:01 +00:00
Craig Topper
69a0c7cce3 [Support] Fix the examples and assertion for format_hex_no_prefix to take into account that there are no prefix characters to include in Width.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260067 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 01:02:55 +00:00
NAKAMURA Takumi
5b9f36bf1a Disable llvm/test/tools/llvm-profdata/value-prof.proftext on win32 for now. Investigating.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260064 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 23:03:38 +00:00
Simon Pilgrim
392b9d21fc [X86][SSE] Resolve target shuffle inputs to sentinels to permit more combines
The combineX86ShufflesRecursively only supports unary shuffles, but was missing the opportunity to combine binary shuffles with a zero / undef second input.

This patch resolves target shuffle inputs, converting the shuffle mask elements to SM_SentinelUndef/SM_SentinelZero where possible. It then resolves the updated mask to check if we have created a faux unary shuffle.

Additionally, we now attempt to recursively call combineX86ShufflesRecursively for all input operands (we used to just recurse for unary integer shuffles and unary unpacks) - it safely returns early if its not a target shuffle.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260063 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 22:51:06 +00:00
Simon Pilgrim
fb040e04aa [X86][SSE] Regenerate PSHUFB shuffle mask comments tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260061 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 22:22:09 +00:00
Daniel Berlin
d4797742f9 Make check line consistent
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260055 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 20:57:46 +00:00
Nico Weber
732c5d90b7 Revert 259942, r259943, r259948.
The Windows bots have been failing for the last two days, with:

FAILED: C:\PROGRA~2\MICROS~1.0\VC\bin\amd64\cl.exe -c LLVMContextImpl.cpp
D:\buildslave\clang-x64-ninja-win7\llvm\lib\IR\LLVMContextImpl.cpp(137) :
    error C2248: 'llvm::TrailingObjects<llvm::AttributeSetImpl,
                                        llvm::IndexAttrPair>::operator delete' :
        cannot access private member declared in class 'llvm::AttributeSetImpl'
    TrailingObjects.h(298) : see declaration of
        'llvm::TrailingObjects<llvm::AttributeSetImpl,
                               llvm::IndexAttrPair>::operator delete'
    AttributeImpl.h(213) : see declaration of 'llvm::AttributeSetImpl'


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260053 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 20:09:18 +00:00
Keno Fischer
3440864413 [docs] Add a note that the Visual Studio C++ tools are required
Watching new contributors trying to build LLVM on Windows, one of the
very common failure modes was getting a version of Visual Studio
that did not have a C++ compiler for CMake to put up. Trying to create
a C++ project in Visual Studio will cause Visual Studio to go and
download the C++ tools.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260049 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 19:36:54 +00:00
Philip Reames
e51c15a4f4 [docs] Remove now confusing references to cofigure/autoconf
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260042 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 16:35:04 +00:00
Philip Reames
a22f43f7dc [docs] Wordsmithing to program layout descriptio in GettingStarted
This just incrementally improves what was already there; it's questionable whether this content belongs in the getting started guide at all.

Patch by Ben Nathanson w/permission w/minor edtis by me.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260040 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 16:23:32 +00:00
Philip Reames
56df681177 [docs] Clarify disk space usage of debug builds
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260039 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 15:58:35 +00:00
Roman Divacky
60973707ae Fix a typo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260038 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 15:50:55 +00:00
Philip Reames
55cdcca8e2 [docs] Remove a stale and confusing section from GettingStarted
The mentioned environment variable doesn't appear to have any use in the LLVM repository.  If it is still relevant for clang, we can consider adding it to the clang getting started page.

Patch inspired by documentation work by Ben Nathanson at the LLVM Bloomberg sprint.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260037 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 15:49:57 +00:00
Philip Reames
06f0086461 [docs] Update the docs to describe how to build the docs with cmake
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260035 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 15:42:12 +00:00
Simon Pilgrim
fe2d3ebbd3 [X86][SSE] Added support for MOVHPD/MOVLPD + MOVHPS/MOVLPS shuffle decoding.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260034 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 15:39:22 +00:00
Asaf Badouh
a79a41855d [X86][AVX512] add intrinsics of Scalar FP to integer conversion with rounding mode
Differential Revision: http://reviews.llvm.org/D16629

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260033 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-07 14:59:13 +00:00