platform/upstream/llvm.git
5 years ago[InstCombine] add tests for fabs() with unordered preds; NFC
Sanjay Patel [Mon, 10 Jun 2019 15:08:22 +0000 (15:08 +0000)]
[InstCombine] add tests for fabs() with unordered preds; NFC

llvm-svn: 362949

5 years agoAdd "REQUIRES: x86" to DWARF assembly tests
Pavel Labath [Mon, 10 Jun 2019 15:08:00 +0000 (15:08 +0000)]
Add "REQUIRES: x86" to DWARF assembly tests

These tests don't require an x86 host, but they do require that we build
the x86 llvm target.

llvm-svn: 362948

5 years ago[IRBuilder] Add CreateFNegFMF(...) to the IRBuilder
Cameron McInally [Mon, 10 Jun 2019 15:07:29 +0000 (15:07 +0000)]
[IRBuilder] Add CreateFNegFMF(...) to the IRBuilder

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

llvm-svn: 362947

5 years ago[lldb] [Process/NetBSD] Fix error handling in register operations
Michal Gorny [Mon, 10 Jun 2019 15:03:49 +0000 (15:03 +0000)]
[lldb] [Process/NetBSD] Fix error handling in register operations

Ensure that errors are passed through correctly when performing
register read/write operations.  Currently, any ptrace() errors are
silently discarded and LLDB behaves as if operation was successful.

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

llvm-svn: 362946

5 years ago[InstCombine] fix bug in canonicalization to fabs()
Sanjay Patel [Mon, 10 Jun 2019 14:57:45 +0000 (14:57 +0000)]
[InstCombine] fix bug in canonicalization to fabs()

Forgot to translate the predicate clauses in rL362943.

llvm-svn: 362945

5 years agoRevert "[CodeComplete] Improve overload handling for C++ qualified and ref-qualified...
Sam McCall [Mon, 10 Jun 2019 14:55:57 +0000 (14:55 +0000)]
Revert "[CodeComplete] Improve overload handling for C++ qualified and ref-qualified methods."

This reverts commit r362924, which causes a double-free of ShadowMapEntry.

llvm-svn: 362944

5 years ago[InstCombine] change canonicalization to fabs() to use FMF on fsub
Sanjay Patel [Mon, 10 Jun 2019 14:46:36 +0000 (14:46 +0000)]
[InstCombine] change canonicalization to fabs() to use FMF on fsub

Similar to rL362909:
This isn't the ideal fix (use FMF on the select), but it's still an
improvement until we have better FMF propagation to selects and other
FP math operators.

I don't think there's much risk of regression from this change by
not including the FMF on the fcmp any more. The nsz/nnan FMF
should be the same on the fcmp and the fsub because they have the
same operand.

llvm-svn: 362943

5 years ago[ARM] Disallow PC, and optionally SP, in VMOVRH and VMOVHR.
Simon Tatham [Mon, 10 Jun 2019 14:43:55 +0000 (14:43 +0000)]
[ARM] Disallow PC, and optionally SP, in VMOVRH and VMOVHR.

Arm v8.1-M supports the VMOV instructions that move a half-precision
value to and from a GPR, but not if the GPR is SP or PC.

To fix this, I've changed those instructions to use the rGPR register
class instead of GPR. rGPR always excludes PC, and it excludes SP
except in the presence of the HasV8Ops target feature (i.e. Arm v8-A).
So the effect is that VMOV.F16 to and from PC is now illegal
everywhere, but VMOV.F16 to and from SP is illegal only on non-v8-A
cores (which I believe is all as it should be).

Reviewers: dmgreen, samparker, SjoerdMeijer, ostannard

Reviewed By: ostannard

Subscribers: ostannard, javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 362942

5 years ago[ExecutionEngine] Add UnaryOperator visitor to the interpreter
Cameron McInally [Mon, 10 Jun 2019 14:38:48 +0000 (14:38 +0000)]
[ExecutionEngine] Add UnaryOperator visitor to the interpreter

This is to support the unary FNeg instruction.

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

llvm-svn: 362941

5 years ago[yaml2obj] - Remove TODOs from dynsymtab-implicit-sections-size-content.yaml. NFCI.
George Rimar [Mon, 10 Jun 2019 14:33:24 +0000 (14:33 +0000)]
[yaml2obj] - Remove TODOs from dynsymtab-implicit-sections-size-content.yaml. NFCI.

Now when https://bugs.llvm.org/show_bug.cgi?id=42215 is fixed,
we can remove these TODOs.

llvm-svn: 362940

5 years ago[clangd] Revamp textDocument/onTypeFormatting.
Sam McCall [Mon, 10 Jun 2019 14:26:21 +0000 (14:26 +0000)]
[clangd] Revamp textDocument/onTypeFormatting.

Summary:
The existing implementation (which triggers on }) is fairly simple and
has flaws:
 - doesn't trigger frequently/regularly enough (particularly in editors that type the }
 for you)
 - often reformats too much code around the edit
 - has jarring cases that I don't have clear ideas for fixing

This implementation is designed to trigger on newline, which feels to me more
intuitive than } or ;.
It does have allow for reformatting after other characters - it has a
basic behavior and a model for adding specialized behavior for
particular characters. But at least initially I'd stick to advertising
\n in the capabilities.

This also handles comment splitting: when you insert a line break inside
a line comment, it will make the new line into an aligned line comment.

Working on tests, but want people to patch it in and try it - it's hard to
see if "feel" is right purely by looking at a test.

Reviewers: ilya-biryukov, hokein

Subscribers: mgorny, ioeric, MaskRay, jkorous, arphaman, kadircet, cfe-commits

Tags: #clang

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

llvm-svn: 362939

5 years ago[llvm-readobj/llvm-readelf] - Don't fail to dump the object if .dynsym has broken...
George Rimar [Mon, 10 Jun 2019 14:23:46 +0000 (14:23 +0000)]
[llvm-readobj/llvm-readelf] - Don't fail to dump the object if .dynsym has broken sh_link field.

This is https://bugs.llvm.org/show_bug.cgi?id=42215.

GNU readelf allows to dump the objects in that case,
but llvm-readobj/llvm-readelf reports an error and stops.

The patch fixes that.

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

llvm-svn: 362938

5 years ago[InstCombine] allow unordered preds when canonicalizing to fabs()
Sanjay Patel [Mon, 10 Jun 2019 14:14:51 +0000 (14:14 +0000)]
[InstCombine] allow unordered preds when canonicalizing to fabs()

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

llvm-svn: 362937

5 years ago[InstCombine] add tests for fcmp unordered pred -> fabs (PR42179); NFC
Sanjay Patel [Mon, 10 Jun 2019 14:04:10 +0000 (14:04 +0000)]
[InstCombine] add tests for fcmp unordered pred -> fabs (PR42179); NFC

llvm-svn: 362936

5 years ago[MCA] Fix -Wunused-private-field warning after r362933. NFC
Andrea Di Biagio [Mon, 10 Jun 2019 13:33:54 +0000 (13:33 +0000)]
[MCA] Fix -Wunused-private-field warning after r362933. NFC

This should unbreak the buildbots.

llvm-svn: 362935

5 years ago[clangd] Stop marshalling/requiring FormattingOptions. We never did anything with...
Sam McCall [Mon, 10 Jun 2019 13:01:49 +0000 (13:01 +0000)]
[clangd] Stop marshalling/requiring FormattingOptions. We never did anything with them.

llvm-svn: 362934

5 years ago[MCA] Further refactor the bottleneck analysis view. NFCI.
Andrea Di Biagio [Mon, 10 Jun 2019 12:50:08 +0000 (12:50 +0000)]
[MCA] Further refactor the bottleneck analysis view. NFCI.

llvm-svn: 362933

5 years agogn build: Merge r362913
Nico Weber [Mon, 10 Jun 2019 12:49:02 +0000 (12:49 +0000)]
gn build: Merge r362913

llvm-svn: 362932

5 years ago[yaml2obj/obj2yaml] - Make RawContentSection::Content and RawContentSection::Size...
George Rimar [Mon, 10 Jun 2019 12:43:18 +0000 (12:43 +0000)]
[yaml2obj/obj2yaml] - Make RawContentSection::Content and RawContentSection::Size optional

This is a follow-up for D62809.

Content and Size fields should be optional as was discussed in comments
of the D62809's thread. With that, we can describe a specific string table and
symbol table sections in a more correct way and also show appropriate errors.

The patch adds lots of test cases where the behavior is described in details.

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

llvm-svn: 362931

5 years ago[LLD][COFF] Fix missing MergeChunk::Instances cleanup in COFF::link()
Rui Ueyama [Mon, 10 Jun 2019 12:16:41 +0000 (12:16 +0000)]
[LLD][COFF] Fix missing MergeChunk::Instances cleanup in COFF::link()

Patch by Erik McClure with a modification to rebase to HEAD.

When calling `COFF::link()` with `CanExitEarly` set to `false`, the
function needs to clean up several global variable caches to ensure that
the next invocation of the function starts from a clean slate. The
`MergeChunk::Instances` cache is missing from this cleanup code, and as
a result will create nondeterministic memory access errors and sometimes
infinite loops due to invalid memory being referenced on the next call
to `COFF::link()`.

This fix simply clears `MergeChunk::Instances` before exiting the function.

An additional review of the COFF library was made to try and find any
other missing global caches, but I was unable to find any other than
`MergeChunk`. Someone more familiar with the global variables might want
to do their own check.

This fix was made to support inNative
<https://github.com/innative-sdk/innative>'s `.wast` script compiler,
which must build multiple incremental builds. It relies on statically
linking LLD because the entire compiler must be a single statically
embeddable library, thus preventing it from being able to call LLD as a
new process.

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

llvm-svn: 362930

5 years ago[yaml2obj] - Do not assert when .dynsym is specified explicitly, but .dynstr is not...
George Rimar [Mon, 10 Jun 2019 11:38:06 +0000 (11:38 +0000)]
[yaml2obj] - Do not assert when .dynsym is specified explicitly, but .dynstr is not present.

We have a code in buildSectionIndex() that adds implicit sections:

// Add special sections after input sections, if necessary.
for (StringRef Name : implicitSectionNames())
  if (SN2I.addName(Name, SecNo)) {
    // Account for this section, since it wasn't in the Doc
    ++SecNo;
    DotShStrtab.add(Name);
  }

The problem arises when .dynsym is specified explicitly and no
DynamicSymbols is used. In that case, we do not add
.dynstr implicitly and will assert later when will try to set Link
for .dynsym.

Seems, in this case, reasonable behavior is to allow Link field to be zero.
This is what this patch does.

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

llvm-svn: 362929

5 years ago[ARM] Enable Unroll UpperBound
David Green [Mon, 10 Jun 2019 10:22:14 +0000 (10:22 +0000)]
[ARM] Enable Unroll UpperBound

This option allows loops with small max trip counts to be fully unrolled. This
can help with code like the remainder loops from manually unrolled loops like
those that appear in the cmsis dsp library. We would apparently previously
runtime unroll them with the default unroll count (4).

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

llvm-svn: 362928

5 years agoFix MSVC "32-bit shift implicitly converted to 64 bits" warning. NFCI.
Simon Pilgrim [Mon, 10 Jun 2019 10:13:32 +0000 (10:13 +0000)]
Fix MSVC "32-bit shift implicitly converted to 64 bits" warning. NFCI.

llvm-svn: 362927

5 years ago[COFF][X86] Add REQUIRES: x86 to a couple of tests
Peter Smith [Mon, 10 Jun 2019 10:09:36 +0000 (10:09 +0000)]
[COFF][X86] Add REQUIRES: x86 to a couple of tests

Fix buildbot failure on native AArch64 buildbot that does not have X86
backend compiled in.

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

llvm-svn: 362926

5 years ago[yaml2obj] - Remove helper methods that are probably excessive. NFC.
George Rimar [Mon, 10 Jun 2019 09:57:29 +0000 (09:57 +0000)]
[yaml2obj] - Remove helper methods that are probably excessive. NFC.

These methods are used only once. One of them is not used at all.

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

llvm-svn: 362925

5 years agoRevert "Revert "[CodeComplete] Improve overload handling for C++ qualified and ref...
Sam McCall [Mon, 10 Jun 2019 09:52:09 +0000 (09:52 +0000)]
Revert "Revert "[CodeComplete] Improve overload handling for C++ qualified and ref-qualified methods.""

This reverts commit r362830, and relands r362785 with the leak fixed.

llvm-svn: 362924

5 years ago[DebugInfo] More strict debug range for stack variables
Nikola Prica [Mon, 10 Jun 2019 08:41:06 +0000 (08:41 +0000)]
[DebugInfo] More strict debug range for stack variables

Variable's stack location can stretch longer than it should. If a
variable is placed at the stack in a some nested basic block its range
can be calculated to be up to the next occurrence of the variable's
DBG_VALUE, or up to the end of the function, thus covering a basic
blocks that should not be included in the variable’s location range.
This happens because the DbgEntityHistoryCalculator ends register
locations at the end of a basic block only if the variable’s location
register has been changed throughout the function, which is not the
case for the register used to reference stack objects.

This patch also tries to produce a single value location if the location
list builder managed to merge all the locations into one.

Reviewers: aprantl, dstenb, jmorse

Reviewed By: aprantl, dstenb, jmorse

Subscribers: djtodoro, ivanbaev, asowda

Tags: #debug-info

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

llvm-svn: 362923

5 years ago[ELF][RISCV] Parse BFD names elf{32,64}-littleriscv
Fangrui Song [Mon, 10 Jun 2019 08:09:55 +0000 (08:09 +0000)]
[ELF][RISCV] Parse BFD names elf{32,64}-littleriscv

e.g. glibc libc.so on riscv64 uses `OUTPUT_FORMAT(elf64-littleriscv)`.

Reviewed By: ruiu

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

llvm-svn: 362922

5 years ago[DAGCombine] Match a pattern where a wide type scalar value is stored by several...
QingShan Zhang [Mon, 10 Jun 2019 05:40:21 +0000 (05:40 +0000)]
[DAGCombine] Match a pattern where a wide type scalar value is stored by several narrow stores
This opportunity is found from spec 2017 557.xz_r. And it is used by the sha encrypt/decrypt. See sha-2/sha512.c

static void store64(u64 x, unsigned char* y)
{
    for(int i = 0; i != 8; ++i)
        y[i] = (x >> ((7-i) * 8)) & 255;
}

static u64 load64(const unsigned char* y)
{
    u64 res = 0;
    for(int i = 0; i != 8; ++i)
        res |= (u64)(y[i]) << ((7-i) * 8);
    return res;
}
The load64 has been implemented by https://reviews.llvm.org/D26149
This patch is trying to implement the store pattern.

Match a pattern where a wide type scalar value is stored by several narrow
stores. Fold it into a single store or a BSWAP and a store if the targets
supports it.

Assuming little endian target:
i8 *p = ...
i32 val = ...
p[0] = (val >> 0) & 0xFF;
p[1] = (val >> 8) & 0xFF;
p[2] = (val >> 16) & 0xFF;
p[3] = (val >> 24) & 0xFF;

>
*((i32)p) = val;

i8 *p = ...
i32 val = ...
p[0] = (val >> 24) & 0xFF;
p[1] = (val >> 16) & 0xFF;
p[2] = (val >> 8) & 0xFF;
p[3] = (val >> 0) & 0xFF;

>
*((i32)p) = BSWAP(val);

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

llvm-svn: 362921

5 years ago[X86] When promoting i16 compare with immediate to i32, try to use sign_extend for...
Craig Topper [Mon, 10 Jun 2019 04:50:12 +0000 (04:50 +0000)]
[X86] When promoting i16 compare with immediate to i32, try to use sign_extend for eq/ne if the input is truncated from a type with enough sign its.

Summary:
Our default behavior is to use sign_extend for signed comparisons and zero_extend for everything else. But for equality we have the freedom to use either extension. If we can prove the input has been truncated from something with enough sign bits, we can use sign_extend instead and let DAG combine optimize it out. A similar rule is used by type legalization in LegalizeIntegerTypes.

This gets rid of the movzx in PR42189. The immediate will still take 4 bytes instead of the 2 bytes plus 0x66 prefix a cmp di, 32767 would get, but it avoids a length changing prefix.

Reviewers: RKSimon, spatel, xbolva00

Reviewed By: xbolva00

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 362920

5 years ago[X86] Disable f32->f64 extload when sse2 is enabled
Craig Topper [Mon, 10 Jun 2019 04:37:16 +0000 (04:37 +0000)]
[X86] Disable f32->f64 extload when sse2 is enabled

Summary:
We can only use the memory form of cvtss2sd under optsize due to a partial register update. So previously we were emitting 2 instructions for extload when optimizing for speed. Also due to a late optimization in preprocessiseldag we had to handle (fpextend (loadf32)) under optsize.

This patch forces extload to expand so that it will always be in the (fpextend (loadf32)) form during isel. And when optimizing for speed we can just let each of those pieces select an instruction independently.

Reviewers: spatel, RKSimon

Reviewed By: RKSimon

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 362919

5 years agoDo not derive no-recurse attribute if function does not have exact definition.
Vivek Pandya [Mon, 10 Jun 2019 04:16:04 +0000 (04:16 +0000)]
Do not derive no-recurse attribute if function does not have exact definition.
This is fix for https://bugs.llvm.org/show_bug.cgi?id=41336

Reviewers: jdoerfert
Reviewed by: jdoerfert

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

llvm-svn: 362918

5 years ago[NFC] Test if commit access granted.
Kai Luo [Mon, 10 Jun 2019 03:20:33 +0000 (03:20 +0000)]
[NFC] Test if commit access granted.

llvm-svn: 362917

5 years agoMake test not write to source directory
Nico Weber [Mon, 10 Jun 2019 01:47:04 +0000 (01:47 +0000)]
Make test not write to source directory

llvm-svn: 362916

5 years ago[X86] Use EVEX instructions for f128 FAND/FOR/FXOR when avx512vl is enabled.
Craig Topper [Mon, 10 Jun 2019 01:18:55 +0000 (01:18 +0000)]
[X86] Use EVEX instructions for f128 FAND/FOR/FXOR when avx512vl is enabled.

llvm-svn: 362915

5 years ago[X86] Convert f32/f64 FANDN/FAND/FOR/FXOR to vector logic ops and scalar_to_vector...
Craig Topper [Mon, 10 Jun 2019 00:41:07 +0000 (00:41 +0000)]
[X86] Convert f32/f64 FANDN/FAND/FOR/FXOR to vector logic ops and scalar_to_vector/extract_vector_elts to reduce isel patterns.

Previously we did the equivalent operation in isel patterns with
COPY_TO_REGCLASS operations to transition. By inserting
scalar_to_vetors and extract_vector_elts before isel we can
allow each piece to be selected individually and accomplish the
same final result.

I ideally we'd use vector operations earlier in lowering/combine,
but that looks to be more difficult.

The scalar-fp-to-i64.ll changes are because we have a pattern for
using movlpd for store+extract_vector_elt. While an f64 store
uses movsd. The encoding sizes are the same.

llvm-svn: 362914

5 years agoRevert r361953 "[SVE][IR] Scalable Vector IR Type"
Nico Weber [Sun, 9 Jun 2019 19:27:50 +0000 (19:27 +0000)]
Revert r361953 "[SVE][IR] Scalable Vector IR Type"

This reverts commit f4fc01f8dd3a5dfd2060d1ad0df6b90e8351ddf7.
It caused a 3-4x slowdown when doing thinlto links, PR42210.

llvm-svn: 362913

5 years ago[TargetLowering] Simplify (ctpop x) == 1
David Bolvansky [Sun, 9 Jun 2019 18:18:57 +0000 (18:18 +0000)]
[TargetLowering] Simplify (ctpop x) == 1

Reviewers: craig.topper, spatel, RKSimon, bkramer

Reviewed By: spatel

Subscribers: javed.absar, lebedev.ri, llvm-commits

Tags: #llvm

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

llvm-svn: 362912

5 years ago[InstCombine] foldICmpWithLowBitMaskedVal(): 'icmp sgt/sle': avoid miscompiles
Roman Lebedev [Sun, 9 Jun 2019 16:30:42 +0000 (16:30 +0000)]
[InstCombine] foldICmpWithLowBitMaskedVal(): 'icmp sgt/sle': avoid miscompiles

A precondition 'x != 0' was forgotten by me:
https://rise4fun.com/Alive/JFNP
https://rise4fun.com/Alive/jHvL

These 4 folds with non-constants could be re-enabled,
but for now let's go for the simplest solution.

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

llvm-svn: 362911

5 years ago[NFC][InstCombine] Revisit canonicalize-constant-low-bit-mask-and-icmp-s* tests in...
Roman Lebedev [Sun, 9 Jun 2019 16:30:14 +0000 (16:30 +0000)]
[NFC][InstCombine] Revisit canonicalize-constant-low-bit-mask-and-icmp-s* tests in preparatio for PR42198.

The `icmp sgt`/`icmp sle` variants are, too, miscompiles:
https://rise4fun.com/Alive/JFNP
https://rise4fun.com/Alive/jHvL
A precondition 'x != 0' was forgotten by me.

While ensuring test coverage for `-1`, also add test coverage
for `0` mask. Mask `0` is allowed for all the folds,
mask `-1` is allowed for all the folds with unsigned `icmp` pred.
Constant mask `0` is missed though.

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

llvm-svn: 362910

5 years ago[InstCombine] change canonicalization to fabs() to use FMF on fneg
Sanjay Patel [Sun, 9 Jun 2019 16:22:01 +0000 (16:22 +0000)]
[InstCombine] change canonicalization to fabs() to use FMF on fneg

This isn't the ideal fix (use FMF on the select), but it's still an
improvement until we have better FMF propagation to selects and other
FP math operators.

I don't think there's much risk of regression from this change by
not including the FMF on the fcmp any more. The nsz/nnan FMF
should be the same on the fcmp and the fneg (fsub) because they
have the same operand.

This works around the most glaring FMF logical inconsistency cited
in PR38086:
https://bugs.llvm.org/show_bug.cgi?id=38086

llvm-svn: 362909

5 years ago[NFC] Adjust test for D63004
David Bolvansky [Sun, 9 Jun 2019 16:15:08 +0000 (16:15 +0000)]
[NFC] Adjust test for D63004

llvm-svn: 362908

5 years ago[NFC] Added test from PR19758
David Bolvansky [Sun, 9 Jun 2019 15:12:46 +0000 (15:12 +0000)]
[NFC] Added test from PR19758

llvm-svn: 362907

5 years ago[NFC] Added test from PR42084 for D63058
David Bolvansky [Sun, 9 Jun 2019 14:56:46 +0000 (14:56 +0000)]
[NFC] Added test from PR42084 for D63058

llvm-svn: 362906

5 years ago[InstCombine] Add tests for usub.sat(x,y)+y etc; NFC
Nikita Popov [Sun, 9 Jun 2019 14:39:47 +0000 (14:39 +0000)]
[InstCombine] Add tests for usub.sat(x,y)+y etc; NFC

For PR42178.

llvm-svn: 362905

5 years ago[InstSimplify] reduce code duplication for fcmp folds; NFC
Sanjay Patel [Sun, 9 Jun 2019 13:58:46 +0000 (13:58 +0000)]
[InstSimplify] reduce code duplication for fcmp folds; NFC

llvm-svn: 362904

5 years ago[InstSimplify] enhance fcmp fold with never-nan operand
Sanjay Patel [Sun, 9 Jun 2019 13:48:59 +0000 (13:48 +0000)]
[InstSimplify] enhance fcmp fold with never-nan operand

This is another step towards correcting our usage of fast-math-flags when applied on an fcmp.
In this case, we are checking for 'nnan' on the fcmp itself rather than the operand of
the fcmp. But I'm leaving that clause in until we're more confident that we can stop
relying on fcmp's FMF.

By using the more general "isKnownNeverNaN()", we gain a simplification shown on the
tests with 'uitofp' regardless of the FMF on the fcmp (uitofp never produces a NaN).
On the tests with 'fabs', we are now relying on the FMF for the call fabs instruction
in addition to the FMF on the fcmp.

This is a continuation of D62979 / rL362879.

llvm-svn: 362903

5 years ago[InstSimplify] add tests for fcmp with known-never-nan operands; NFC
Sanjay Patel [Sun, 9 Jun 2019 13:30:14 +0000 (13:30 +0000)]
[InstSimplify] add tests for fcmp with known-never-nan operands; NFC

Opposite predicate for rL362742 / rL362879 / D62979

llvm-svn: 362902

5 years ago[MIR] Add simple PRE pass to MachineCSE
Anton Afanasyev [Sun, 9 Jun 2019 12:15:47 +0000 (12:15 +0000)]
[MIR] Add simple PRE pass to MachineCSE

This is the second part of the commit fixing PR38917 (hoisting
partitially redundant machine instruction). Most of PRE (partitial
redundancy elimination) and CSE work is done on LLVM IR, but some of
redundancy arises during DAG legalization. Machine CSE is not enough
to deal with it. This simple PRE implementation works a little bit
intricately: it passes before CSE, looking for partitial redundancy
and transforming it to fully redundancy, anticipating that the next
CSE step will eliminate this created redundancy. If CSE doesn't
eliminate this, than created instruction will remain dead and eliminated
later by Remove Dead Machine Instructions pass.

The third part of the commit is supposed to refactor MachineCSE,
to make it more clear and to merge MachinePRE with MachineCSE,
so one need no rely on further Remove Dead pass to clear instrs
not eliminated by CSE.

First step: https://reviews.llvm.org/D54839

Fixes llvm.org/PR38917

This is fixed recommit of r361356 after PowerPC64 multistage build failure.

llvm-svn: 362901

5 years ago[CaptureTracking] Don't let comparisons against null escape inbounds pointers
Ayke van Laethem [Sun, 9 Jun 2019 10:20:33 +0000 (10:20 +0000)]
[CaptureTracking] Don't let comparisons against null escape inbounds pointers

Pointers that are in-bounds (either through dereferenceable_or_null or
thorough a getelementptr inbounds) cannot be captured with a comparison
against null. There is no way to construct a pointer that is still in
bounds but also NULL.

This helps safe languages that insert null checks before load/store
instructions. Without this patch, almost all pointers would be
considered captured even for simple loads. With this patch, an icmp with
null will not be seen as escaping as long as certain conditions are met.

There was a lot of discussion about this patch. See the Phabricator
thread for detals.

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

llvm-svn: 362900

5 years ago[bindings/go] Add wrappers for atomic operations.
Ayke van Laethem [Sun, 9 Jun 2019 10:06:35 +0000 (10:06 +0000)]
[bindings/go] Add wrappers for atomic operations.

This patch adds Go bindings for atomic operations in LLVM.

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

llvm-svn: 362899

5 years ago[X86] NFCI : Comment updation for EVEX to VEX translation.
Jatin Bhateja [Sun, 9 Jun 2019 09:59:26 +0000 (09:59 +0000)]
[X86] NFCI : Comment updation for EVEX to VEX translation.

Reviewers: llvm-commits, jbhateja

Reviewed By: jbhateja

Subscribers: llvm-commits

Tags: #llvm

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

llvm-svn: 362898

5 years agoUse for-range loop. NFCI.
Simon Pilgrim [Sun, 9 Jun 2019 09:07:30 +0000 (09:07 +0000)]
Use for-range loop. NFCI.

llvm-svn: 362897

5 years ago[AArch64][GlobalISel] Select immediate forms of cmp instructions.
Amara Emerson [Sun, 9 Jun 2019 07:31:25 +0000 (07:31 +0000)]
[AArch64][GlobalISel] Select immediate forms of cmp instructions.

A simple re-use of the immediate operand matcher and renderer functions.

rdar://43795178

llvm-svn: 362896

5 years ago[X86] Remove (store (f32 (extractelt (v4f32))) isel patterns which is redundant.
Craig Topper [Sun, 9 Jun 2019 03:21:33 +0000 (03:21 +0000)]
[X86] Remove (store (f32 (extractelt (v4f32))) isel patterns which is redundant.

We emit a MOVSSmr and a COPY_TO_REGCLASS, but that's what we would get from
selecting the store and extractelt independently.

llvm-svn: 362895

5 years ago[X86] Mutate scalar fceil/ffloor/ftrunc/fnearbyint/frint into X86ISD::RNDSCALE during...
Craig Topper [Sat, 8 Jun 2019 23:53:31 +0000 (23:53 +0000)]
[X86] Mutate scalar fceil/ffloor/ftrunc/fnearbyint/frint into X86ISD::RNDSCALE during PreProcessIselDAG to cut down on number of isel patterns.

Similar was done for vectors in r362535. Removes about 1200 bytes from the isel table.

llvm-svn: 362894

5 years ago[bindings/go] Add bindings to LLVMGet?CmpPredicate
Ayke van Laethem [Sat, 8 Jun 2019 22:21:37 +0000 (22:21 +0000)]
[bindings/go] Add bindings to LLVMGet?CmpPredicate

Add bindings so that predicates on comparisons (icmp/fcmp) can be
inspected from IR.

Note: I considered adding Value.ICmpPredicate() etc. instead but
Value.IntPredicate() seemed easier to read and matches the name of the
returned type.

(This change was also pushed two commits ago but accidentally had the
wrong title and description.)

Revision: https://reviews.llvm.org/D53884
llvm-svn: 362893

5 years agoRevert "[bindings/go] Add Go bindings for CalledValue"
Ayke van Laethem [Sat, 8 Jun 2019 22:17:51 +0000 (22:17 +0000)]
Revert "[bindings/go] Add Go bindings for CalledValue"

This reverts commit f675a60ca7a93f22e22dd4209504a9846dd04630.
The commit had the wrong title/description. Sorry about the mess!

llvm-svn: 362892

5 years ago[bindings/go] Add Go bindings for CalledValue
Ayke van Laethem [Sat, 8 Jun 2019 22:15:38 +0000 (22:15 +0000)]
[bindings/go] Add Go bindings for CalledValue

This is very useful for inspecting generated IR, there appears to be no
other way to get the called function from a CallInst.

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

llvm-svn: 362891

5 years ago[bindings/go] Add Go bindings for CalledValue
Ayke van Laethem [Sat, 8 Jun 2019 22:08:52 +0000 (22:08 +0000)]
[bindings/go] Add Go bindings for CalledValue

This is very useful for inspecting generated IR, there appears to be no
other way to get the called function from a CallInst.

Revision: https://reviews.llvm.org/D52972
llvm-svn: 362890

5 years ago[bindings/go] Add EraseFromParent
Ayke van Laethem [Sat, 8 Jun 2019 22:00:19 +0000 (22:00 +0000)]
[bindings/go] Add EraseFromParent

After using ReplaceAllUsesWith on an instruction, it may be necessary to
erase it even though it is dead.

llvm-svn: 362889

5 years ago[NFC] Test commit
Ayke van Laethem [Sat, 8 Jun 2019 21:42:00 +0000 (21:42 +0000)]
[NFC] Test commit

Add a newline, which is missing according to go fmt.

llvm-svn: 362888

5 years ago[analyzer][NFC] Add dividers to BugReporterVisitors.cpp
Kristof Umann [Sat, 8 Jun 2019 20:25:39 +0000 (20:25 +0000)]
[analyzer][NFC] Add dividers to BugReporterVisitors.cpp

Some minor formatting to make the file more readable.
Added //===----------===// around the implementation of class methods
and divided anonymous namespaces as per
https://llvm.org/docs/CodingStandards.html#anonymous-namespaces

llvm-svn: 362887

5 years ago[X86][Codegen] Add missed pattern that may be a lea+neg
Roman Lebedev [Sat, 8 Jun 2019 19:38:14 +0000 (19:38 +0000)]
[X86][Codegen] Add missed pattern that may be a lea+neg

llvm-svn: 362886

5 years ago[Target] Remove unused header from Process
Alex Langford [Sat, 8 Jun 2019 19:07:05 +0000 (19:07 +0000)]
[Target] Remove unused header from Process

I forgot to remove this when I removed GetCPPLanguageRuntime from
Process

llvm-svn: 362885

5 years ago[LanguageRuntime] Introduce LLVM-style casts
Alex Langford [Sat, 8 Jun 2019 18:45:00 +0000 (18:45 +0000)]
[LanguageRuntime] Introduce LLVM-style casts

Summary:
Using llvm-style rtti gives us stronger guarantees around casting
LanguageRuntimes.

As discussed in D62755

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

llvm-svn: 362884

5 years ago[ELF] [PPC] Fix a typo from SVN r362721
Martin Storsjo [Sat, 8 Jun 2019 18:26:27 +0000 (18:26 +0000)]
[ELF] [PPC] Fix a typo from SVN r362721

Apparently no test covers this exact codepath, but GCC produced a
warning about it.

llvm-svn: 362883

5 years ago[MinGW] Support the -u/--undefined option.
Martin Storsjo [Sat, 8 Jun 2019 18:26:24 +0000 (18:26 +0000)]
[MinGW] Support the -u/--undefined option.

This is implemented by the lld-link option -include:, just like
--require-defined. Contrary to --require-defined, the -u/--undefined
option allows the symbol to remain undefined in the end.

This should fix PR42121.

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

llvm-svn: 362882

5 years ago[COFF] Add an lld specific option /includeoptional
Martin Storsjo [Sat, 8 Jun 2019 18:26:18 +0000 (18:26 +0000)]
[COFF] Add an lld specific option /includeoptional

This works like /include, but is not fatal if the requested symbol
wasn't found. This allows implementing the GNU ld option -u.

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

llvm-svn: 362881

5 years ago[DAGCombine] visitAND - merge (zext_inreg ((s)extload x)) -> (zextload x) combines...
Simon Pilgrim [Sat, 8 Jun 2019 17:02:00 +0000 (17:02 +0000)]
[DAGCombine] visitAND - merge (zext_inreg ((s)extload x)) -> (zextload x) combines. NFCI.

Same codegen, only differ by the oneuse limit for the sextload case.

llvm-svn: 362880

5 years ago[InstSimplify] enhance fcmp fold with never-nan operand
Sanjay Patel [Sat, 8 Jun 2019 15:12:33 +0000 (15:12 +0000)]
[InstSimplify] enhance fcmp fold with never-nan operand

This is 1 step towards correcting our usage of fast-math-flags when applied on an fcmp.
In this case, we are checking for 'nnan' on the fcmp itself rather than the operand of
the fcmp. But I'm leaving that clause in until we're more confident that we can stop
relying on fcmp's FMF.

By using the more general "isKnownNeverNaN()", we gain a simplification shown on the
tests with 'uitofp' regardless of the FMF on the fcmp (uitofp never produces a NaN).
On the tests with 'fabs', we are now relying on the FMF for the call fabs instruction
in addition to the FMF on the fcmp.

I'll update the 'ult' case below here as a follow-up assuming no problems here.

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

llvm-svn: 362879

5 years agofix a typo unavaliable=>unavailable
Sylvestre Ledru [Sat, 8 Jun 2019 15:07:55 +0000 (15:07 +0000)]
fix a typo unavaliable=>unavailable

llvm-svn: 362878

5 years ago[analyzer][NFC][tests] Pre-normalize expected-plists
Hubert Tong [Sat, 8 Jun 2019 13:51:37 +0000 (13:51 +0000)]
[analyzer][NFC][tests] Pre-normalize expected-plists

As suggested in the review for D62949, this patch pre-normalizes the
reference expected output plist files by removing lines containing
fields for which we expect differences that should be ignored.

llvm-svn: 362877

5 years ago[analyzer][NFC][tests] Remove unused expected-plist files
Hubert Tong [Sat, 8 Jun 2019 13:48:25 +0000 (13:48 +0000)]
[analyzer][NFC][tests] Remove unused expected-plist files

llvm-svn: 362876

5 years ago[NFC] Added tests for D63038
David Bolvansky [Sat, 8 Jun 2019 12:07:59 +0000 (12:07 +0000)]
[NFC] Added tests for D63038

llvm-svn: 362875

5 years ago[ARM] Adjust isLegalT1AddressImmediate for non-legal types
David Green [Sat, 8 Jun 2019 10:32:53 +0000 (10:32 +0000)]
[ARM] Adjust isLegalT1AddressImmediate for non-legal types

Types such as float and i64's do not have legal loads in Thumb1, but will still
be loaded with a LDR (or potentially multiple LDR's). As such we can treat the
cost of addressing mode calculations the same as an i32 and get some optimisation
benefits.

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

llvm-svn: 362874

5 years ago[ARM] Add MVE addressing to isLegalT2AddressImmediate
David Green [Sat, 8 Jun 2019 10:18:23 +0000 (10:18 +0000)]
[ARM] Add MVE addressing to isLegalT2AddressImmediate

Now with MVE being added, we can add the vector addressing mode costs for it.
These are generally imm7 multiplied by the size of the type being loaded /
stored.

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

llvm-svn: 362873

5 years ago[ARM] Add fp16 addressing to isLegalT2AddressImmediate
David Green [Sat, 8 Jun 2019 10:09:02 +0000 (10:09 +0000)]
[ARM] Add fp16 addressing to isLegalT2AddressImmediate

The fp16 version of VLDR takes a imm8 multiplied by 2. This updates the costs
to account for those, and adds extra testing. It is dependant upon hasFPRegs16
as this is what the load/store instructions require.

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

llvm-svn: 362872

5 years ago[ARM] Add extra gep costmodel tests for MVE and half float. NFC
David Green [Sat, 8 Jun 2019 09:58:05 +0000 (09:58 +0000)]
[ARM] Add extra gep costmodel tests for MVE and half float. NFC

llvm-svn: 362871

5 years ago[ARM] Add HasNEON for all Neon patterns in ARMInstrNEON.td. NFCI
David Green [Sat, 8 Jun 2019 09:36:49 +0000 (09:36 +0000)]
[ARM] Add HasNEON for all Neon patterns in ARMInstrNEON.td. NFCI

We are starting to add an entirely separate vector architecture to the ARM
backend. To do that we need at least some separation between the existing NEON
and the new MVE code. This patch just goes through the Neon patterns and
ensures that they are predicated on HasNEON, giving MVE a stable place to start
from.

No tests yet as this is largely an NFC, and we don't have the other target that
will treat any of these intructions as legal.

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

llvm-svn: 362870

5 years ago[SystemZ] Fix CMakeLists.txt for alphabetical order (NFC).
Jonas Paulsson [Sat, 8 Jun 2019 06:42:02 +0000 (06:42 +0000)]
[SystemZ]  Fix CMakeLists.txt for alphabetical order (NFC).

llvm-svn: 362869

5 years ago[SystemZ, RegAlloc] Favor 3-address instructions during instruction selection.
Jonas Paulsson [Sat, 8 Jun 2019 06:19:15 +0000 (06:19 +0000)]
[SystemZ, RegAlloc]  Favor 3-address instructions during instruction selection.

This patch aims to reduce spilling and register moves by using the 3-address
versions of instructions per default instead of the 2-address equivalent
ones. It seems that both spilling and register moves are improved noticeably
generally.

Regalloc hints are passed to increase conversions to 2-address instructions
which are done in SystemZShortenInst.cpp (after regalloc).

Since the SystemZ reg/mem instructions are 2-address (dst and lhs regs are
the same), foldMemoryOperandImpl() can no longer trivially fold a spilled
source register since the reg/reg instruction is now 3-address. In order to
remedy this, new 3-address pseudo memory instructions are used to perform the
folding only when the dst and lhs virtual registers are known to be allocated
to the same physreg. In order to not let MachineCopyPropagation run and
change registers on these transformed instructions (making it 3-address), a
new target pass called SystemZPostRewrite.cpp is run just after
VirtRegRewriter, that immediately lowers the pseudo to a target instruction.

If it would have been possibe to insert a COPY instruction and change a
register operand (convert to 2-address) in foldMemoryOperandImpl() while
trusting that the caller (e.g. InlineSpiller) would update/repair the
involved LiveIntervals, the solution involving pseudo instructions would not
have been needed. This is perhaps a potential improvement (see Phabricator
post).

Common code changes:

* A new hook TargetPassConfig::addPostRewrite() is utilized to be able to run a
target pass immediately before MachineCopyPropagation.

* VirtRegMap is passed as an argument to foldMemoryOperand().

Review: Ulrich Weigand, Quentin Colombet
https://reviews.llvm.org/D60888

llvm-svn: 362868

5 years ago[ELF][PPC] Simplify {read,write}FromHalf16
Fangrui Song [Sat, 8 Jun 2019 05:19:05 +0000 (05:19 +0000)]
[ELF][PPC] Simplify {read,write}FromHalf16

I've change the variable names used in PPC64.cpp from "Instr" to "Insn"
because "Insn" is a more common abbreviation for "instruction".

While changing PPC64.cpp relocateOne(), make R_PPC64_ADDR16_LO{_DS}
slightly more efficient by saving a read and a write for the TocOptimize
case.

Reviewed By: ruiu

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

llvm-svn: 362867

5 years agoupdate debugging docs to be less out of date
Eric Fiselier [Sat, 8 Jun 2019 04:59:41 +0000 (04:59 +0000)]
update debugging docs to be less out of date

llvm-svn: 362866

5 years agoSubstantially reduce instantiations and debug size of std::function
Eric Fiselier [Sat, 8 Jun 2019 01:31:19 +0000 (01:31 +0000)]
Substantially reduce instantiations and debug size of std::function

std::function uses a standard allocator to manage its memory, however
standard allocators are templates and using them correctly requires
a stupid amount of instantiations. This leads to a substantial increase
in debug info and object sizes.

This patch addresses the issue by dropping the allocator when possible
and using raw new and delete to get memory.

This change decreases the object file size for the test func.wrap.func.con/F.pass.cpp by 33% and the final binary by 29% (when compiled with -g -ggnu-pubnames -gpubnames).

It also roughly halfs the number of entries in the pubnames and pubtype
sections.

llvm-svn: 362865

5 years agogn build: Merge r362857
Nico Weber [Sat, 8 Jun 2019 01:27:47 +0000 (01:27 +0000)]
gn build: Merge r362857

llvm-svn: 362864

5 years ago[llvm-objcopy][MachO] Recompute and update offset/size fields in the writer
Seiya Nuta [Sat, 8 Jun 2019 01:22:54 +0000 (01:22 +0000)]
[llvm-objcopy][MachO] Recompute and update offset/size fields in the writer

Summary:
Recompute and update offset/size fields so that we can implement llvm-objcopy options like --only-section.

This patch is the first step and focuses on supporting load commands that covered by existing tests: executable files and
dynamic libraries are not supported.

Reviewers: alexshap, rupprecht, jhenderson

Reviewed By: alexshap, rupprecht

Subscribers: compnerd, jakehehrlich, llvm-commits

Tags: #llvm

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

llvm-svn: 362863

5 years agoRevert "DWARF: Simplify SymbolFileDWARF::GetDWARFCompileUnit"
Alex Langford [Sat, 8 Jun 2019 00:55:03 +0000 (00:55 +0000)]
Revert "DWARF: Simplify SymbolFileDWARF::GetDWARFCompileUnit"

This reverts commit 58afc1bdebf9fa8b178d6c9d89af94c5cc091760.
This commit caused the test suite on macOS to fail many tests. It
appears that setting breakpoints is the issue. One example that fails
is the lit test Breakpoint/case-sensitive.test.

llvm-svn: 362862

5 years agoFix some incorrect std::function tests
Eric Fiselier [Sat, 8 Jun 2019 00:45:45 +0000 (00:45 +0000)]
Fix some incorrect std::function tests

llvm-svn: 362861

5 years agoVisualizer for APInt and remove obsolete visualizer
Mike Spertus [Sat, 8 Jun 2019 00:23:08 +0000 (00:23 +0000)]
Visualizer for APInt and remove obsolete visualizer

Visualizer for the simple case of APInt (uints < 2^64)
as will be required  for Clang ConstantArrayType visualizer.
Also, removed obsolete VS2013 SmallVectorVisualizer as VS2013
is no longer supported.

llvm-svn: 362860

5 years agoExperimantal dfsan mode "fast16labels=1"
Kostya Serebryany [Sat, 8 Jun 2019 00:22:23 +0000 (00:22 +0000)]
Experimantal dfsan mode "fast16labels=1"

Summary:
dfsan mode "fast16labels=1".
In this mode the labels are treated as 16-bit bit masks.

Reviewers: pcc

Reviewed By: pcc

Subscribers: delcypher, #sanitizers, llvm-commits

Tags: #llvm, #sanitizers

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

llvm-svn: 362859

5 years agoFactor out SelectionDAG's switch analysis and lowering into a separate component.
Amara Emerson [Sat, 8 Jun 2019 00:05:17 +0000 (00:05 +0000)]
Factor out SelectionDAG's switch analysis and lowering into a separate component.

In order for GlobalISel to re-use the significant amount of analysis and
optimization code in SDAG's switch lowering, we first have to extract it and
create an interface to be used by both frameworks.

No test changes as it's NFC.

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

llvm-svn: 362857

5 years agoDebugInfo: Add support for 'nodebug' attribute on typedefs and alias templates
David Blaikie [Sat, 8 Jun 2019 00:01:21 +0000 (00:01 +0000)]
DebugInfo: Add support for 'nodebug' attribute on typedefs and alias templates

Seems like a logical extension to me - and of interest because it might
help reduce the debug info size of libc++ by applying this attribute to
type traits that have a disproportionate debug info cost compared to the
benefit (& possibly harm/confusion) they cause users.

llvm-svn: 362856

5 years ago[analyzer] Add werror flag for analyzer warnings
Keno Fischer [Fri, 7 Jun 2019 23:34:00 +0000 (23:34 +0000)]
[analyzer] Add werror flag for analyzer warnings

Summary:
We're using the clang static analyzer together with a number of
custom analyses in our CI system to ensure that certain invariants
are statiesfied for by the code every commit. Unfortunately, there
currently doesn't seem to be a good way to determine whether any
analyzer warnings were emitted, other than parsing clang's output
(or using scan-build, which then in turn parses clang's output).
As a simpler mechanism, simply add a `-analyzer-werror` flag to CC1
that causes the analyzer to emit its warnings as errors instead.
I briefly tried to have this be `Werror=analyzer` and make it go
through that machinery instead, but that seemed more trouble than
it was worth in terms of conflicting with options to the actual build
and special cases that would be required to circumvent the analyzers
usual attempts to quiet non-analyzer warnings. This is simple and it
works well.

Reviewed-By: NoQ, Szelethusw
Differential Revision: https://reviews.llvm.org/D62885

llvm-svn: 362855

5 years agoLoopDistribute: Add testcase where SCEV wants to insert a runtime
Matt Arsenault [Fri, 7 Jun 2019 23:17:38 +0000 (23:17 +0000)]
LoopDistribute: Add testcase where SCEV wants to insert a runtime
check.

Only the memory based checks were being tested. Prepare for fix in
convergent handling.

llvm-svn: 362854

5 years ago[GVN] non-functional code movement
Keno Fischer [Fri, 7 Jun 2019 23:08:38 +0000 (23:08 +0000)]
[GVN] non-functional code movement

Summary: Move some code around, in preparation for later fixes
to the non-integral addrspace handling (D59661)

Patch By Jameson Nash <jameson@juliacomputing.com>

Reviewed By: reames, loladiro
Differential Revision: https://reviews.llvm.org/D59729

llvm-svn: 362853

5 years agoAMDGPU: Force skips around traps
Matt Arsenault [Fri, 7 Jun 2019 23:02:52 +0000 (23:02 +0000)]
AMDGPU: Force skips around traps

llvm-svn: 362852

5 years ago[COFF] Fix /export:foo=bar when bar is a weak alias
Reid Kleckner [Fri, 7 Jun 2019 22:05:12 +0000 (22:05 +0000)]
[COFF] Fix /export:foo=bar when bar is a weak alias

Summary:
When handling exports from the command line or from .def files, the
linker does a "fuzzy" string lookup to allow finding mangled symbols.
However, when the symbol is re-exported under a new name, the linker has
to transfer the decorations from the exported symbol over to the new
name. This is implemented by taking the mangled symbol that was found in
the object and replacing the original symbol name with the export name.

Before this patch, LLD implemented the fuzzy search by adding an
undefined symbol with the unmangled name, and then during symbol
resolution, checking if similar mangled symbols had been added after the
last round of symbol resolution. If so, LLD makes the original symbol a
weak alias of the mangled symbol. Later, to get the original symbol
name, LLD would look through the weak alias and forward it on to the
import library writer, which copies the symbol decorations. This
approach doesn't work when bar is itself a weak alias, as is the case in
asan. It's especially bad when the aliasee of bar contains the string
"bar", consider "bar_default". In this case, we would end up exporting
the symbol "foo_default" when we should've exported just "foo".

To fix this, don't look through weak aliases to find the mangled name.
Save the mangled name earlier during fuzzy symbol lookup.

Fixes PR42074

Reviewers: mstorsjo, ruiu

Subscribers: thakis, llvm-commits

Tags: #llvm

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

llvm-svn: 362849

5 years ago[llvm-lipo] Add docs for llvm-lipo
Alexander Shaposhnikov [Fri, 7 Jun 2019 22:03:02 +0000 (22:03 +0000)]
[llvm-lipo] Add docs for llvm-lipo

Add docs (llvm-lipo.rst) for llvm-lipo.

Test plan:
make -j8 sphinx
check that ./docs/html/CommandGuide/llvm-lipo.html is built correctly and looks okay.

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

llvm-svn: 362848

5 years ago[llvm-objdump] Fix Bugzilla ID 41862 to support checking addresses of disassembled...
Jordan Rupprecht [Fri, 7 Jun 2019 21:49:26 +0000 (21:49 +0000)]
[llvm-objdump] Fix Bugzilla ID 41862 to support checking addresses of disassembled object

Summary:
This fixes the bugzilla id,41862 to support dealing with checking
stop address against start address to support this not being a
proper object to check the disasembly against like gnu objdump
currently does.

Reviewers: jakehehrlich, rupprecht, echristo, jhenderson, grimar

Reviewed By: jhenderson

Subscribers: MaskRay, smeenai, rupprecht, llvm-commits

Tags: #llvm

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

Patch by Nicholas Krause!

llvm-svn: 362847