OSDN Git Service

android-x86/external-llvm.git
5 years agogn build: Merge r352148
Nico Weber [Fri, 25 Jan 2019 14:50:14 +0000 (14:50 +0000)]
gn build: Merge r352148

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

5 years ago[RISCV] Add tests to demonstrate bitcasted fneg/fabs dagcombines
Alex Bradbury [Fri, 25 Jan 2019 14:33:08 +0000 (14:33 +0000)]
[RISCV] Add tests to demonstrate bitcasted fneg/fabs dagcombines

This target-independent code won't trigger for cases such as RV32FD where
custom SelectionDAG nodes are generated. These new tests demonstrate such
cases. Additionally, float-arith.ll was updated so that fneg.s, fsgnjn.s, and
fabs.s selection patterns are actually exercised.

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

5 years agoFix line endings and trim trailing whitespace. NFCI.
Simon Pilgrim [Fri, 25 Jan 2019 14:29:57 +0000 (14:29 +0000)]
Fix line endings and trim trailing whitespace. NFCI.

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

5 years agogitignore: ignore clangd index files.
Haojian Wu [Fri, 25 Jan 2019 14:05:18 +0000 (14:05 +0000)]
gitignore: ignore clangd index files.

Reviewers: kadircet

Subscribers: ilya-biryukov, ioeric, MaskRay, jkorous, arphaman, llvm-commits

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

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

5 years ago[X86] Add addcarry/subborrow combine tests
Simon Pilgrim [Fri, 25 Jan 2019 12:26:27 +0000 (12:26 +0000)]
[X86] Add addcarry/subborrow combine tests

Show failure to simplify cases with zero op/flags

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

5 years ago[llvm-symbolizer] Add switch to adjust addresses by fixed offset
James Henderson [Fri, 25 Jan 2019 11:49:21 +0000 (11:49 +0000)]
[llvm-symbolizer] Add switch to adjust addresses by fixed offset

If a stack trace or similar has a list of addresses from an executable
or DSO loaded at a variable address (e.g. due to ASLR), the addresses
will not directly correspond to the addresses stored in the object file.
If a user wishes to use llvm-symbolizer, they have to subtract the load
address from every address. This is somewhat inconvenient, especially as
the output of --print-address will result in the adjusted address being
listed, rather than the address coming from the stack trace, making it
harder to map results between the two.

This change adds a new switch to llvm-symbolizer --adjust-vma which
takes an offset, which is then used to automatically do this
calculation. The printed address remains the input address (allowing for
easy mapping), whilst the specified offset is applied to the addresses
when performing the lookup.

The switch is conceptually similar to llvm-objdump's new switch of the
same name (see D57051), which in turn mirrors a GNU switch. There is no
equivalent switch in addr2line.

Reviewed by: grimar

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

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

5 years ago[NFC] One more crashing test on LoopSimplifyCFG
Max Kazantsev [Fri, 25 Jan 2019 11:47:16 +0000 (11:47 +0000)]
[NFC] One more crashing test on LoopSimplifyCFG

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

5 years agoFix gcc -Wparentheses warning. NFCI.
Simon Pilgrim [Fri, 25 Jan 2019 11:38:40 +0000 (11:38 +0000)]
Fix gcc -Wparentheses warning. NFCI.

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

5 years agoFix gcc -Wparentheses warning. NFCI.
Simon Pilgrim [Fri, 25 Jan 2019 11:34:58 +0000 (11:34 +0000)]
Fix gcc -Wparentheses warning. NFCI.

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

5 years ago[NFC] Add failing test on LCSSA forming
Max Kazantsev [Fri, 25 Jan 2019 11:32:21 +0000 (11:32 +0000)]
[NFC] Add failing test on LCSSA forming

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

5 years ago[ARM GlobalISel] Support shifts for Thumb2
Diana Picus [Fri, 25 Jan 2019 10:48:42 +0000 (10:48 +0000)]
[ARM GlobalISel] Support shifts for Thumb2

Same as ARM.

On this occasion we split some of the instruction select tests for more
complicated instructions into their own files, so we can reuse them for
ARM and Thumb mode. Likewise for the legalizer tests.

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

5 years ago[ARM GlobalISel] Remove rebase artifact from r351882. NFC
Diana Picus [Fri, 25 Jan 2019 10:48:35 +0000 (10:48 +0000)]
[ARM GlobalISel] Remove rebase artifact from r351882. NFC

r351882 introduced some superfluous calls to mark G_INTTOPTR and
G_PTRTOINT as legal (looks like a rebase mishap). Remove them.

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

5 years ago[TblGen] Extend !if semantics through new feature !cond
Javed Absar [Fri, 25 Jan 2019 10:25:25 +0000 (10:25 +0000)]
[TblGen] Extend !if semantics through new feature !cond

This patch extends TableGen language with !cond operator.
Instead of embedding !if inside !if which can get cumbersome,
one can now use !cond.
Below is an example to convert an integer 'x' into a string:

    !cond(!lt(x,0) : "Negative",
          !eq(x,0) : "Zero",
          !eq(x,1) : "One,
          1        : "MoreThanOne")

Reviewed By: hfinkel, simon_tatham, greened
Differential Revision: https://reviews.llvm.org/D55758

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

5 years ago[llvm-objcopy] Add support for -g as an alias for --strip-debug
Douglas Yung [Fri, 25 Jan 2019 09:57:20 +0000 (09:57 +0000)]
[llvm-objcopy] Add support for -g as an alias for --strip-debug

This change adds an option -g to llvm-objcopy which is an alias for the existing option --strip-debug.

This fixes PR40003.

Reviewed by: alexshap

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

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

5 years ago[llvm-mca][X86] Add missing shuffle tests
Simon Pilgrim [Fri, 25 Jan 2019 09:17:30 +0000 (09:17 +0000)]
[llvm-mca][X86] Add missing shuffle tests

Match the coverage of test\CodeGen\X86\avx512-shuffle-schedule.ll so we can get rid of -print-schedule (and fix PR37160) without losing schedule tests

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

5 years ago[MSP430] Fix absolute addressing mode printing in AsmPrinter
Anton Korobeynikov [Fri, 25 Jan 2019 09:14:05 +0000 (09:14 +0000)]
[MSP430] Fix absolute addressing mode printing in AsmPrinter

Align checks for absolute addressing mode with its current
implementation (SR is used as a base register).

This fixes https://bugs.llvm.org/show_bug.cgi?id=39993

Patch by Kristina Bessonova!

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

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

5 years ago[NFC] Add test with multiple loops
Max Kazantsev [Fri, 25 Jan 2019 08:46:00 +0000 (08:46 +0000)]
[NFC] Add test with multiple loops

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

5 years ago[PowerPC] Enhance the fast selection of cmp instruction and clean up related asserts
Zi Xuan Wu [Fri, 25 Jan 2019 07:24:59 +0000 (07:24 +0000)]
[PowerPC] Enhance the fast selection of cmp instruction and clean up related asserts

Fast selection of llvm icmp and fcmp instructions is not handled well about VSX instruction support.

We'd use VSX float comparison instruction instead of non-vsx float comparison instruction
if the operand register class is VSSRC or VSFRC because i32 and i64 are mapped to VSSRC and
VSFRC correspondingly if VSX feature is opened.

If the target does not have corresponding VSX instruction comparison for some type,
just copy VSX-related register to common float register class and use non-vsx comparison instruction.

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

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

5 years ago[X86] Add non-masked versions of vpconflict intrinsics so we can use a select in...
Craig Topper [Fri, 25 Jan 2019 07:08:07 +0000 (07:08 +0000)]
[X86] Add non-masked versions of vpconflict intrinsics so we can use a select in the header file in clang.

I'll remove and autoupgrade the old intrinsics in a future commit.

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

5 years ago[RISCV] Custom-legalise i32 SDIV/UDIV/UREM on RV64M
Alex Bradbury [Fri, 25 Jan 2019 05:11:34 +0000 (05:11 +0000)]
[RISCV] Custom-legalise i32 SDIV/UDIV/UREM on RV64M

Follow the same custom legalisation strategy as used in D57085 for
variable-length shifts (see that patch summary for more discussion). Although
we may lose out on some late-stage DAG combines, I think this custom
legalisation strategy is ultimately easier to reason about.

There are some codegen changes in rv64m-exhaustive-w-insts.ll but they are all
neutral in terms of the number of instructions.

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

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

5 years ago[LoopSimplifyCFG] Fix inconsistency in blocks in loop markup
Max Kazantsev [Fri, 25 Jan 2019 05:05:02 +0000 (05:05 +0000)]
[LoopSimplifyCFG] Fix inconsistency in blocks in loop markup

2nd part of D57095 with the same reason, just in another place. We never
fold branches that are not immediately in the current loop, but this check
is missing in `IsEdgeLive` As result, it may think that the edge in subloop is
dead while it's live. It's a pessimization in the current stance.

Differential Revision: https://reviews.llvm.org/D57147
Reviewed By: rupprecht

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

5 years ago[RISCV] Custom-legalise 32-bit variable shifts on RV64
Alex Bradbury [Fri, 25 Jan 2019 05:04:00 +0000 (05:04 +0000)]
[RISCV] Custom-legalise 32-bit variable shifts on RV64

The previous DAG combiner-based approach had an issue with infinite loops
between the target-dependent and target-independent combiner logic (see
PR40333). Although this was worked around in rL351806, the combiner-based
approach is still potentially brittle and can fail to select the 32-bit shift
variant when profitable to do so, as demonstrated in the pr40333.ll test case.

This patch instead introduces target-specific SelectionDAG nodes for
SHLW/SRLW/SRAW and custom-lowers variable i32 shifts to them. pr40333.ll is a
good example of how this approach can improve codegen.

This adds DAG combine that does SimplifyDemandedBits on the operands (only
lower 32-bits of first operand and lower 5 bits of second operand are read).
This seems better than implementing SimplifyDemandedBitsForTargetNode as there
is no guarantee that would be called (and it's not for e.g. the anyext return
test cases). Also implements ComputeNumSignBitsForTargetNode.

There are codegen changes in atomic-rmw.ll and atomic-cmpxchg.ll but the new
instruction sequences are semantically equivalent.

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

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

5 years agoAMDGPU/GlobalISel: Remove leftover setAction
Matt Arsenault [Fri, 25 Jan 2019 04:54:00 +0000 (04:54 +0000)]
AMDGPU/GlobalISel: Remove leftover setAction

Also move G_GEP actions together.

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

5 years agoAMDGPU/GlobalISel: Scalarize add/sub
Matt Arsenault [Fri, 25 Jan 2019 04:53:57 +0000 (04:53 +0000)]
AMDGPU/GlobalISel: Scalarize add/sub

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

5 years agoGlobalISel: fewerElementsVector for more cast types
Matt Arsenault [Fri, 25 Jan 2019 04:37:33 +0000 (04:37 +0000)]
GlobalISel: fewerElementsVector for more cast types

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

5 years agoGlobalISel: fewerElementsVector for a few more trivial ops
Matt Arsenault [Fri, 25 Jan 2019 04:03:38 +0000 (04:03 +0000)]
GlobalISel: fewerElementsVector for a few more trivial ops

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

5 years agoAMDGPU/GlobalISel: Legalize smulh/umulh and scalarize mul
Matt Arsenault [Fri, 25 Jan 2019 03:23:04 +0000 (03:23 +0000)]
AMDGPU/GlobalISel: Legalize smulh/umulh and scalarize mul

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

5 years ago[HotColdSplit] Describe the pass in more detail, NFC
Vedant Kumar [Fri, 25 Jan 2019 03:22:38 +0000 (03:22 +0000)]
[HotColdSplit] Describe the pass in more detail, NFC

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

5 years ago[HotColdSplit] Split more aggressively before/after cold invokes
Vedant Kumar [Fri, 25 Jan 2019 03:22:23 +0000 (03:22 +0000)]
[HotColdSplit] Split more aggressively before/after cold invokes

While a cold invoke itself and its unwind destination can't be
extracted, code which unconditionally executes before/after the invoke
may still be profitable to extract.

With cost model changes from D57125 applied, this gives a 3.5% increase
in split text across LNT+externals on arm64 at -Os.

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

5 years agoGlobalISel: Support fewerElementsVector for icmp/fcmp
Matt Arsenault [Fri, 25 Jan 2019 02:59:34 +0000 (02:59 +0000)]
GlobalISel: Support fewerElementsVector for icmp/fcmp

Also legalize 64-bit compares for AMDGPU

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

5 years agoGlobalISel: Implement fewerElementsVector for extensions
Matt Arsenault [Fri, 25 Jan 2019 02:36:32 +0000 (02:36 +0000)]
GlobalISel: Implement fewerElementsVector for extensions

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

5 years agohwasan: If we split the entry block, move static allocas back into the entry block.
Peter Collingbourne [Fri, 25 Jan 2019 02:08:46 +0000 (02:08 +0000)]
hwasan: If we split the entry block, move static allocas back into the entry block.

Otherwise they are treated as dynamic allocas, which ends up increasing
code size significantly. This reduces size of Chromium base_unittests
by 2MB (6.7%).

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

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

5 years agogn build: Set is_clang to true in stage2 toolchains.
Peter Collingbourne [Fri, 25 Jan 2019 01:18:55 +0000 (01:18 +0000)]
gn build: Set is_clang to true in stage2 toolchains.

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

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

5 years agoGlobalISel: Add convenience mutatations to scalarize
Matt Arsenault [Fri, 25 Jan 2019 00:51:00 +0000 (00:51 +0000)]
GlobalISel: Add convenience mutatations to scalarize

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

5 years agosimplify COFF module assembly test and move it to Object
Bob Haarman [Fri, 25 Jan 2019 00:33:05 +0000 (00:33 +0000)]
simplify COFF module assembly test and move it to Object

Reviewers: pcc, rnk

Subscribers: llvm-commits

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

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

5 years agogn build: Build clang with -fno-strict-aliasing, make building with gcc much quieter
Nico Weber [Fri, 25 Jan 2019 00:29:17 +0000 (00:29 +0000)]
gn build: Build clang with -fno-strict-aliasing, make building with gcc much quieter

- gcc doesn't understand -Wstring-conversion, so pass that only to clang
- disable a few gcc warnings that are noisy and also disabled in the cmake build
- -Wstrict-aliasing pointed out that the cmake build builds clang with
  -fno-strict-aliasing, so do that too

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

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

5 years agoTry to address Windows bot failure after r352080
Vedant Kumar [Fri, 25 Jan 2019 00:15:16 +0000 (00:15 +0000)]
Try to address Windows bot failure after r352080

See the bot error message reported in https://reviews.llvm.org/D57082.

Avoid trying to match full class names in -debug-pass-manager output,
because they aren't portable.

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

5 years agoGlobalISel: Add helper to LLT to get a scalar or vector
Matt Arsenault [Fri, 25 Jan 2019 00:10:49 +0000 (00:10 +0000)]
GlobalISel: Add helper to LLT to get a scalar or vector

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

5 years ago[GlobalISel][AArch64] Avoid unused variable warning for variable only used in assert
Benjamin Kramer [Thu, 24 Jan 2019 23:45:07 +0000 (23:45 +0000)]
[GlobalISel][AArch64] Avoid unused variable warning for variable only used in assert

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

5 years ago[PowerPC] Exploit store instructions that store a single vector element
Nemanja Ivanovic [Thu, 24 Jan 2019 23:44:28 +0000 (23:44 +0000)]
[PowerPC] Exploit store instructions that store a single vector element

This patch exploits the instructions that store a single element from a vector
to preform a (store (extract_elt)). We already have code that does this with
ISA 3.0 instructions that were added to handle i8/i16 types. However, we had
never exploited the existing ones that handle f32/f64/i32/i64 types.

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

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

5 years agoRegBankSelect: Fix use after free in r352123
Matt Arsenault [Thu, 24 Jan 2019 23:42:01 +0000 (23:42 +0000)]
RegBankSelect: Fix use after free in r352123

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

5 years ago[GlobalISel][AArch64] Avoid unused function warnings in Release builds
Benjamin Kramer [Thu, 24 Jan 2019 23:39:47 +0000 (23:39 +0000)]
[GlobalISel][AArch64] Avoid unused function warnings in Release builds

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

5 years agopdbutil: Remove unused variables
David Blaikie [Thu, 24 Jan 2019 23:13:20 +0000 (23:13 +0000)]
pdbutil: Remove unused variables

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

5 years ago[x86] move half-size shuffle mask creation to helper; NFC
Sanjay Patel [Thu, 24 Jan 2019 23:12:36 +0000 (23:12 +0000)]
[x86] move half-size shuffle mask creation to helper; NFC

As noted in D57156, we want to check at least part of
this pattern earlier (in combining), so this will allow
the code to be shared instead of duplicated.

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

5 years ago[GISel]: Change how CSE is enabled by default for each pass
Aditya Nandakumar [Thu, 24 Jan 2019 23:11:25 +0000 (23:11 +0000)]
[GISel]: Change how CSE is enabled by default for each pass

https://reviews.llvm.org/D57178

Now add a hook in TargetPassConfig to query if CSE needs to be
enabled. By default this hook returns false only for O0 opt level but
this can be overridden by the target.
As a consequence of the default of enabled for non O0, a few tests
needed to be updated to not use CSE (by passing in -O0) to the run
line.

reviewed by: arsenm

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

5 years agoSuppress unused capture warning in CheckCopy
Jessica Paquette [Thu, 24 Jan 2019 22:51:31 +0000 (22:51 +0000)]
Suppress unused capture warning in CheckCopy

Werror bots didn't like the lambda + assert thing in my previous commit.

Capture everything to suppress the error.

Example failure here:
http://lab.llvm.org:8011/builders/lld-x86_64-darwin13/builds/29393

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

5 years agoRegBankSelect: Support some more complex part mappings
Matt Arsenault [Thu, 24 Jan 2019 22:47:04 +0000 (22:47 +0000)]
RegBankSelect: Support some more complex part mappings

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

5 years ago[elfabi] Add support for reading dynamic symbols from binaries
Armando Montanez [Thu, 24 Jan 2019 22:39:21 +0000 (22:39 +0000)]
[elfabi] Add support for reading dynamic symbols from binaries

This patch adds initial support for reading dynamic symbols from ELF binaries. Currently, STT_NOTYPE, STT_OBJECT, STT_FUNC, and STT_TLS are explicitly supported. Other symbol types are mapped to ELFSymbolType::Unknown to improve signal/noise ratio.

Symbols must meet two criteria to be read into in an ELFStub:

 - The symbol's binding must be STB_GLOBAL or STB_WEAK.
 - The symbol's visibility must be STV_DEFAULT or STV_PROTECTED.

This filters out symbols that aren't of interest during compile-time linking against a shared object.

This change uses DT_HASH and DT_GNU_HASH to determine the size of .dynsym. Using hash tables to determine the number of symbols in .dynsym allows llvm-elfabi to work on binaries without relying on section headers.

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

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

5 years ago[PDB] Increase TPI hash bucket count.
Zachary Turner [Thu, 24 Jan 2019 22:25:55 +0000 (22:25 +0000)]
[PDB] Increase TPI hash bucket count.

PDBs contain several serialized hash tables. In the microsoft-pdb
repo published to support LLVM implementing PDB support, the
provided initializes the bucket count for the TPI and IPI streams
to the maximum size. This occurs in tpi.cpp L33 and tpi.cpp L398.
In the LLVM code for generating PDBs, these streams are created with
minimum number of buckets. This difference makes LLVM generated
PDBs slower for when used for debugging.

Patch by C.J. Hebert
Differential Revision: https://reviews.llvm.org/D56942

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

5 years ago[GlobalISel][AArch64] Add isel support for FP16 vector @llvm.ceil
Jessica Paquette [Thu, 24 Jan 2019 22:00:41 +0000 (22:00 +0000)]
[GlobalISel][AArch64] Add isel support for FP16 vector @llvm.ceil

This patch adds support for vector @llvm.ceil intrinsics when full 16 bit
floating point support isn't available.

To do this, this patch...

- Implements basic isel for G_UNMERGE_VALUES
- Teaches the legalizer about 16 bit floats
- Teaches AArch64RegisterBankInfo to respect floating point registers on
  G_BUILD_VECTOR and G_UNMERGE_VALUES
- Teaches selectCopy about 16-bit floating point vectors

It also adds

- A legalizer test for the 16-bit vector ceil which verifies that we create a
  G_UNMERGE_VALUES and G_BUILD_VECTOR when full fp16 isn't supported
- An instruction selection test which makes sure we lower to G_FCEIL when
  full fp16 is supported
- A test for selecting G_UNMERGE_VALUES

And also updates arm64-vfloatintrinsics.ll to show that the new ceiling types
work as expected.

https://reviews.llvm.org/D56682

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

5 years agoallow COFF .def directive in module assembly when using ThinLTO
Bob Haarman [Thu, 24 Jan 2019 21:41:03 +0000 (21:41 +0000)]
allow COFF .def directive in module assembly when using ThinLTO

Summary:
Using COFF's .def directive in module assembly used to crash ThinLTO
with "this directive only supported on COFF targets" when getting
symbol information in ModuleSymbolTable.  This change allows
ModuleSymbolTable to process such code and adds a test to verify that
the .def directive has the desired effect on the native object file,
with and without ThinLTO.

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

Reviewers: rnk, pcc, vlad.tsyrklevich

Subscribers: mehdi_amini, eraman, hiraditya, dexonsmith, llvm-commits

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

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

5 years ago[Analysis] Fix isSafeToLoadUnconditionally handling of volatile.
Eli Friedman [Thu, 24 Jan 2019 21:31:13 +0000 (21:31 +0000)]
[Analysis] Fix isSafeToLoadUnconditionally handling of volatile.

A volatile operation cannot be used to prove an address points to normal
memory.  (LangRef was recently updated to state it explicitly.)

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

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

5 years agoLimit dyld image suffixes guessed by guessLibraryShortName()
Michael Trent [Thu, 24 Jan 2019 20:59:44 +0000 (20:59 +0000)]
Limit dyld image suffixes guessed by guessLibraryShortName()

Summary:
guessLibraryShortName() separates a full Mach-O dylib install name path
into a short name and a dyld image suffix. The short name is the name
of the dylib without its path or extension. The dyld image suffix is a
string used by dyld to load variants of dylibs if available at runtime;
for example, "when binding this process, load 'debug' variants of all
required dylibs." dyld knows exactly what the image suffix is, but
by convention diagnostic tools such as llvm-nm attempt to guess suffix
names by looking at the install name path.

These dyld image suffixes are separated from the short name by a '_'
character. Because the '_' character is commonly used to separate words
in filenames guessLibraryShortName() cannot reliably separate a dylib's
short name from an arbitrary image suffix; imagine if both the short
name and the suffix contains an '_' character! To better deal with this
ambiguity, guessLibraryShortName() will recognize only "_debug" and
"_profile" as valid Suffix values. Calling code needs to be tolerant of
guessLibraryShortName() guessing incorrectly.

The previous implementation of guessLibraryShortName() did not allow
'_' characters to appear in short names. When present, the short name
would be  truncated, e.g., "libcompiler_rt" => "libcompiler". This
change allows "libcompiler_rt" and "libcompiler_rt_debug" to both be
recognized as "libcompiler_rt".

rdar://47412244

Reviewers: kledzik, lhames, pete

Reviewed By: pete

Subscribers: llvm-commits

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

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

5 years agoFix a compiler error introduced in r352093.
Haojian Wu [Thu, 24 Jan 2019 20:30:48 +0000 (20:30 +0000)]
Fix a compiler error introduced in r352093.

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

5 years agogn build: Merge r351990
Nico Weber [Thu, 24 Jan 2019 20:19:18 +0000 (20:19 +0000)]
gn build: Merge r351990

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

5 years ago[LICM] Cleanup duplicated code. [NFCI]
Alina Sbirlea [Thu, 24 Jan 2019 19:57:30 +0000 (19:57 +0000)]
[LICM] Cleanup duplicated code. [NFCI]

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

5 years ago[MemorySSA +LICM CFHoist] Solve PR40317.
Alina Sbirlea [Thu, 24 Jan 2019 19:48:35 +0000 (19:48 +0000)]
[MemorySSA +LICM CFHoist] Solve PR40317.

Summary:
MemorySSA needs updating each time an instruction is moved.
LICM and control flow hoisting re-hoists instructions, thus needing another update when re-moving those instructions.
Pending cleanup: the MSSA update is duplicated, should be moved inside moveInstructionBefore.

Reviewers: jnspaulsson

Subscribers: sanjoy, jlebar, Prazek, george.burgess.iv, llvm-commits

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

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

5 years agoTest cases for demanded elements on vector GEPs
Philip Reames [Thu, 24 Jan 2019 19:35:28 +0000 (19:35 +0000)]
Test cases for demanded elements on vector GEPs

This is the first part of splitting apart https://reviews.llvm.org/D57140 into usuable pieces.  Landing the tests in advance of posting a review specifically for the demanded elements part.

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

5 years ago[IRBuilder] Remove positivity check from CreateAlignmentAssumption()
Roman Lebedev [Thu, 24 Jan 2019 19:32:48 +0000 (19:32 +0000)]
[IRBuilder] Remove positivity check from CreateAlignmentAssumption()

Summary:
An alignment should be non-zero positive power-of-two, anything and everything else is UB.
We should not have that check for all these prerequisites here, it's just UB.
Also, that was likely confusing middle-end passes.

While there, `CreateIntCast()` should be called with `/*isSigned*/ false`.
Think about it, there are two explanations: "An alignment should be positive",
therefore the sign bit is unset, so `zext` and `sext` is equivalent.
Or a second one: you have `i2 0b10` - a valid alignment,
now you `sext` it: `i2 0b110` - no longer valid alignment.

Reviewers: craig.topper, jyknight, hfinkel, erichkeane, rjmccall

Reviewed By: hfinkel, rjmccall

Subscribers: hfinkel, llvm-commits

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

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

5 years ago[X86] Regenerate SBB test to fix buildbots.
Simon Pilgrim [Thu, 24 Jan 2019 18:57:48 +0000 (18:57 +0000)]
[X86] Regenerate SBB test to fix buildbots.

Some local WIP code unexpectedly managed to get in the way.

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

5 years ago[HotColdSplit] Move splitting earlier in the pipeline
Vedant Kumar [Thu, 24 Jan 2019 18:55:49 +0000 (18:55 +0000)]
[HotColdSplit] Move splitting earlier in the pipeline

Performing splitting early has several advantages:

  - Inhibiting inlining of cold code early improves code size. Compared
    to scheduling splitting at the end of the pipeline, this cuts code
    size growth in half within the iOS shared cache (0.69% to 0.34%).

  - Inhibiting inlining of cold code improves compile time. There's no
    need to inline split cold functions, or to inline as much *within*
    those split functions as they are marked `minsize`.

  - During LTO, extra work is only done in the pre-link step. Less code
    must be inlined during cross-module inlining.

An additional motivation here is that the most common cold regions
identified by the static/conservative splitting heuristic can (a) be
found before inlining and (b) do not grow after inlining. E.g.
__assert_fail, os_log_error.

The disadvantages are:

  - Some opportunities for splitting out cold code may be missed. This
    gap can potentially be narrowed by adding a worklist algorithm to the
    splitting pass.

  - Some opportunities to reduce code size may be lost (e.g. store
    sinking, when one side of the CFG diamond is split). This does not
    outweigh the code size benefits of splitting earlier.

On net, splitting early in the pipeline has substantial code size
benefits, and no major effects on memory locality or performance. We
measured memory locality using ktrace data, and consistently found that
10% fewer pages were needed to capture 95% of text page faults in key
iOS benchmarks. We measured performance on frequency-stabilized iOS
devices using LNT+externals.

This reverses course on the decision made to schedule splitting late in
r344869 (D53437).

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

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

5 years ago[x86] rename VectorShuffle -> Shuffle; NFC
Sanjay Patel [Thu, 24 Jan 2019 18:52:12 +0000 (18:52 +0000)]
[x86] rename VectorShuffle -> Shuffle; NFC

This wasn't consistent within the file, so made it harder to search.
Standardize on the shorter name to save some typing.

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

5 years agoFix emission of _fltused for MSVC.
James Y Knight [Thu, 24 Jan 2019 18:34:00 +0000 (18:34 +0000)]
Fix emission of _fltused for MSVC.

It should be emitted when any floating-point operations (including
calls) are present in the object, not just when calls to printf/scanf
with floating point args are made.

The difference caused by this is very subtle: in static (/MT) builds,
on x86-32, in a program that uses floating point but doesn't print it,
the default x87 rounding mode may not be set properly upon
initialization.

This commit also removes the walk of the types pointed to by pointer
arguments in calls. (To assist in opaque pointer types migration --
eventually the pointee type won't be available.)

That latter implies that it will no longer consider a call like
`scanf("%f", &floatvar)` as sufficient to emit _fltused on its
own. And without _fltused, `scanf("%f")` will abort with error R6002. This
new behavior is unlikely to bite anyone in practice (you'd have to
read a float, and do nothing with it!), and also, is consistent with
MSVC.

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

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

5 years ago[X86] Add PR25858 test cases
Simon Pilgrim [Thu, 24 Jan 2019 18:30:45 +0000 (18:30 +0000)]
[X86] Add PR25858 test cases

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

5 years agoRevert "[Sanitizers] UBSan unreachable incompatible with ASan in the presence of...
Julian Lettner [Thu, 24 Jan 2019 18:04:21 +0000 (18:04 +0000)]
Revert "[Sanitizers] UBSan unreachable incompatible with ASan in the presence of `noreturn` calls"

This reverts commit cea84ab93aeb079a358ab1c8aeba6d9140ef8b47.

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

5 years ago[SelectionDAGBuilder] Simplify HasSideEffect calculation. NFC.
Nirav Dave [Thu, 24 Jan 2019 17:56:03 +0000 (17:56 +0000)]
[SelectionDAGBuilder] Simplify HasSideEffect calculation. NFC.

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

5 years ago[InlineAsm] Don't calculate registers for inline asm memory operands. NFCI.
Nirav Dave [Thu, 24 Jan 2019 17:47:18 +0000 (17:47 +0000)]
[InlineAsm] Don't calculate registers for inline asm memory operands. NFCI.

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

5 years ago[x86] add low/high undef half shuffle mask helpers; NFC
Sanjay Patel [Thu, 24 Jan 2019 17:05:02 +0000 (17:05 +0000)]
[x86] add low/high undef half shuffle mask helpers; NFC

This is the most common usage for isUndefInRange,
so make the code slightly less duplicated and more
readable.

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

5 years ago[RS4GC] Expand/standardize tests introduced in rL352059
Philip Reames [Thu, 24 Jan 2019 16:45:23 +0000 (16:45 +0000)]
[RS4GC] Expand/standardize tests introduced in rL352059

Write a couple of variations on vector geps w/both scalars and vectors live over safepoints.  Use update_test_checks to show all the IR.

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

5 years ago[RS4GC] Be slightly less conservative for gep vector_base, scalar_idx
Philip Reames [Thu, 24 Jan 2019 16:34:00 +0000 (16:34 +0000)]
[RS4GC] Be slightly less conservative for gep vector_base, scalar_idx

After submitting https://reviews.llvm.org/D57138, I realized it was slightly more conservative than needed. The scalar indices don't appear to be a problem on a vector gep, we even had a test for that.

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

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

5 years ago[RS4GC] Avoid crashing on gep scalar_base, vector_idx
Philip Reames [Thu, 24 Jan 2019 16:08:18 +0000 (16:08 +0000)]
[RS4GC] Avoid crashing on gep scalar_base, vector_idx

This is an alternative to https://reviews.llvm.org/D57103.  After discussion, we dedicided to check this in as a temporary workaround, and pursue a true fix under the original thread.

The issue at hand is that the base rewriting algorithm doesn't consider the fact that GEPs can turn a scalar input into a vector of outputs. We had handling for scalar GEPs and fully vector GEPs (i.e. all vector operands), but not the scalar-base + vector-index forms. A true fix here requires treating GEP analogously to extractelement or shufflevector.

This patch is merely a workaround. It simply hides the crash at the cost of some ugly code gen for this presumable very rare pattern.

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

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

5 years ago[TargetLowering] Rename getExpandedFixedPointMultiplication to expandFixedPointMul...
Simon Pilgrim [Thu, 24 Jan 2019 15:46:54 +0000 (15:46 +0000)]
[TargetLowering] Rename getExpandedFixedPointMultiplication to expandFixedPointMul. NFCI.

Match the (much shorter) name used in various legalization methods.

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

5 years ago[SelectionDAGBuilder] Fuse inline asm input operand loops passes. NFCI.
Nirav Dave [Thu, 24 Jan 2019 15:15:32 +0000 (15:15 +0000)]
[SelectionDAGBuilder] Fuse inline asm input operand loops passes. NFCI.

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

5 years ago[Docs] Add information about unit tests to the testing guide
Michael Platings [Thu, 24 Jan 2019 15:11:26 +0000 (15:11 +0000)]
[Docs] Add information about unit tests to the testing guide

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

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

5 years ago[X86] Add missing isReg() guards in FixupSetCCs pass.
Nirav Dave [Thu, 24 Jan 2019 15:04:17 +0000 (15:04 +0000)]
[X86] Add missing isReg() guards in FixupSetCCs pass.

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

5 years ago[x86] add tests for unpack shuffle lowering; NFC
Sanjay Patel [Thu, 24 Jan 2019 14:12:34 +0000 (14:12 +0000)]
[x86] add tests for unpack shuffle lowering; NFC

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

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

5 years ago[CostModel][X86] Add SMUL fixed point cost tests
Simon Pilgrim [Thu, 24 Jan 2019 13:48:20 +0000 (13:48 +0000)]
[CostModel][X86] Add SMUL fixed point cost tests

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

5 years ago[TTI] Add generic SADDO/SSUBO costs
Simon Pilgrim [Thu, 24 Jan 2019 13:36:45 +0000 (13:36 +0000)]
[TTI] Add generic SADDO/SSUBO costs

Added x86 scalar sadd_with_overflow/ssub_with_overflow costs.

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

5 years ago[TTI] Add generic UADDSAT/USUBSAT costs
Simon Pilgrim [Thu, 24 Jan 2019 12:27:10 +0000 (12:27 +0000)]
[TTI] Add generic UADDSAT/USUBSAT costs

Add generic costs calculation for UADDSAT/USUBSAT intrinsics, this fallbacks to using generic costs for uadd_with_overflow/usub_with_overflow + a select.

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

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

5 years ago[TTI] Add generic UADDO/USUBO costs
Simon Pilgrim [Thu, 24 Jan 2019 12:10:20 +0000 (12:10 +0000)]
[TTI] Add generic UADDO/USUBO costs

Added x86 scalar uadd_with_overflow/usub_with_overflow costs.

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

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

5 years agoRevert "[HotColdSplitting] Get DT and PDT from the pass manager."
Florian Hahn [Thu, 24 Jan 2019 11:22:08 +0000 (11:22 +0000)]
Revert "[HotColdSplitting] Get DT and PDT from the pass manager."

This reverts commit a6982414edf315c39ae93f3c3322476217119e99 (llvm-svn: 352036),
because it causes a memory leak in the pass manager. Failing bot

http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/10351/steps/check-llvm%20asan/logs/stdio

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

5 years ago[MIPS GlobalISel] Select zero extending and sign extending load
Petar Avramovic [Thu, 24 Jan 2019 10:27:21 +0000 (10:27 +0000)]
[MIPS GlobalISel] Select zero extending and sign extending load

Select zero extending and sign extending load for MIPS32.
Use size from MachineMemOperand to determine number of bytes to load.

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

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

5 years ago[MIPS GlobalISel] Combine extending loads
Petar Avramovic [Thu, 24 Jan 2019 10:09:52 +0000 (10:09 +0000)]
[MIPS GlobalISel] Combine extending loads

Use CombinerHelper to combine extending load instructions.
G_LOAD combined with G_ZEXT, G_SEXT or G_ANYEXT gives G_ZEXTLOAD,
G_SEXTLOAD or G_LOAD with same type as def of extending instruction
respectively.
Similarly G_ZEXTLOAD combined with G_ZEXT gives G_ZEXTLOAD and
G_SEXTLOAD combined with G_SEXT gives G_SEXTLOAD with same type
as def of extending instruction.

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

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

5 years ago[HotColdSplitting] Get DT and PDT from the pass manager.
Florian Hahn [Thu, 24 Jan 2019 09:44:52 +0000 (09:44 +0000)]
[HotColdSplitting] Get DT and PDT from the pass manager.

Instead of manually computing DT and PDT, we can get the from the pass
manager, which ideally has them already cached. With the new pass
manager, we could even preserve DT/PDT on a per function basis in a
module pass.

I think this also addresses the TODO about re-using the computed DTs for
BFI. IIUC, GetBFI will fetch the DT from the pass manager and when we
will fetch the cached version later.

Reviewers: vsk, hiraditya, tejohnson, thegameg, sebpop

Reviewed By: vsk

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

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

5 years agoReapply: [mips] Handle MipsMCExpr sub-expression for the MEK_DTPREL tag
Simon Atanasyan [Thu, 24 Jan 2019 09:13:14 +0000 (09:13 +0000)]
Reapply: [mips] Handle MipsMCExpr sub-expression for the MEK_DTPREL tag

This reapplies commit r351987 with a failed test fix. Now the test
accepts both DW_OP_GNU_push_tls_address and DW_OP_form_tls_address
opcode.

Original commit message:
```
  This is a fix for a regression introduced by the rL348194 commit. In
  that change new type (MEK_DTPREL) of MipsMCExpr expression was added,
  but in some places of the code this type of expression considered as
  unexpected.

  This change fixes the bug. The MEK_DTPREL type of expression is used for
  marking TLS DIEExpr only and contains a regular sub-expression. Where we
  need to handle the expression, we retrieve the sub-expression and
  handle it in a common way.
```

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

5 years ago[SystemZ] Remember to reset the NoPHIs property on MF in createPHIsForSelects()
Jonas Paulsson [Thu, 24 Jan 2019 07:54:41 +0000 (07:54 +0000)]
[SystemZ]  Remember to reset the NoPHIs property on MF in createPHIsForSelects()

After creating new PHI instructions during isel pseudo expansion, the NoPHIs
property of MF should be reset in case it was previously set.

Review: Ulrich Weigand

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

5 years ago[X86] Update SelectionDAGDumper to print the extension type and expanding flag for...
Craig Topper [Thu, 24 Jan 2019 07:51:34 +0000 (07:51 +0000)]
[X86] Update SelectionDAGDumper to print the extension type and expanding flag for masked loads. Add truncating and compressing for masked stores.

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

5 years ago[X86] Add test cases for opportunities to fold a truncate and a masked store into...
Craig Topper [Thu, 24 Jan 2019 06:15:03 +0000 (06:15 +0000)]
[X86] Add test cases for opportunities to fold a truncate and a masked store into a truncating masked store.

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

5 years ago[NFC] Add another failing test on LoopSimplifyCFG
Max Kazantsev [Thu, 24 Jan 2019 05:43:19 +0000 (05:43 +0000)]
[NFC] Add another failing test on LoopSimplifyCFG

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

5 years ago[LoopSimplifyCFG] Fix inconsistency in live blocks markup
Max Kazantsev [Thu, 24 Jan 2019 05:20:29 +0000 (05:20 +0000)]
[LoopSimplifyCFG] Fix inconsistency in live blocks markup

When we choose whether or not we should mark block as dead, we have an
inconsistent logic in markup of live blocks.
- We take candidate IF its terminator branches on constant AND it is immediately
  in current loop;
- We mark successor live IF its terminator doesn't branch by constant OR it branches
  by constant and the successor is its always taken block.

What we are missing here is that when the terminator branches on a constant but is
not taken as a candidate because is it not immediately in the current loop, we will
mark only one (always taken) successor as live. Therefore, we do NOT do the actual
folding but may NOT mark one of the successors as live. So the result of markup is
wrong in this case, and we may then hit various asserts.

Thanks Jordan Rupprech for reporting this!

Differential Revision: https://reviews.llvm.org/D57095
Reviewed By: rupprecht

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

5 years ago[NFC] Add a failing test on live block markup in term folding
Max Kazantsev [Thu, 24 Jan 2019 05:05:55 +0000 (05:05 +0000)]
[NFC] Add a failing test on live block markup in term folding

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

5 years agoDebugInfo: Use assembly label arithmetic for address pool size for easier reading...
David Blaikie [Thu, 24 Jan 2019 03:27:57 +0000 (03:27 +0000)]
DebugInfo: Use assembly label arithmetic for address pool size for easier reading/editing

Recommits 350048, 350050 That broke buildbots because of some typos in
the test case.

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

5 years agoRevert "[RISCV] Set isAsCheapAsAMove for ADDI, ORI, XORI, LUI"
Ana Pazos [Thu, 24 Jan 2019 03:00:26 +0000 (03:00 +0000)]
Revert "[RISCV] Set isAsCheapAsAMove for ADDI, ORI, XORI, LUI"

This reverts commit ccfb060ecb5d7e18ea729455660484d576bde2cc.

Some tests need to to fixed before reapplying this commit.

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

5 years ago[RISCV] Set isAsCheapAsAMove for ADDI, ORI, XORI, LUI
Ana Pazos [Thu, 24 Jan 2019 02:41:40 +0000 (02:41 +0000)]
[RISCV] Set isAsCheapAsAMove for ADDI, ORI, XORI, LUI

Summary:
Affected instructions:
PseudoLI simplest form (ADDI with X0)
ALU operations with immediate (they do not set status flag - ADDI, ORI, XORI)

Reviewers: asb

Reviewed By: asb

Subscribers: shiva0217, rkruppe, kito-cheng, asb, rbar, johnrusso, simoncook, sabuasal, niosHD, zzheng, edward-jones, mgrang, rogfer01, MartinMosbeck, brucehoult, the_o, PkmX, jocewei

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

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

5 years ago[RISCV] Set isReMaterializable for ORI, XORI
Ana Pazos [Thu, 24 Jan 2019 02:31:23 +0000 (02:31 +0000)]
[RISCV] Set isReMaterializable for ORI, XORI

Reviewers: asb

Reviewed By: asb

Subscribers: asb, rbar, johnrusso, simoncook, sabuasal, niosHD, kito-cheng, shiva0217, zzheng, edward-jones, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, PkmX, jocewei

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

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

5 years ago[docs] Remove extra character from git URL in Getting Started guide.
Douglas Yung [Thu, 24 Jan 2019 01:22:32 +0000 (01:22 +0000)]
[docs] Remove extra character from git URL in Getting Started guide.

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

5 years agollvm-symbolizer: Extract individual test cases now that it's easier to use directly...
David Blaikie [Thu, 24 Jan 2019 01:19:17 +0000 (01:19 +0000)]
llvm-symbolizer: Extract individual test cases now that it's easier to use directly (without a piped input file)

Pulling out the split-dwarf tests by way of example of how I think
llvm-symbolizer should be tested going forward. Open to
debate/discussion, though.

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

5 years ago[Sanitizers] UBSan unreachable incompatible with ASan in the presence of `noreturn...
Julian Lettner [Thu, 24 Jan 2019 01:06:19 +0000 (01:06 +0000)]
[Sanitizers] UBSan unreachable incompatible with ASan in the presence of `noreturn` calls

Summary:
UBSan wants to detect when unreachable code is actually reached, so it
adds instrumentation before every `unreachable` instruction. However,
the optimizer will remove code after calls to functions marked with
`noreturn`. To avoid this UBSan removes `noreturn` from both the call
instruction as well as from the function itself. Unfortunately, ASan
relies on this annotation to unpoison the stack by inserting calls to
`_asan_handle_no_return` before `noreturn` functions. This is important
for functions that do not return but access the the stack memory, e.g.,
unwinder functions *like* `longjmp` (`longjmp` itself is actually
"double-proofed" via its interceptor). The result is that when ASan and
UBSan are combined, the `noreturn` attributes are missing and ASan
cannot unpoison the stack, so it has false positives when stack
unwinding is used.

Changes:
  # UBSan now adds the `expect_noreturn` attribute whenever it removes
    the `noreturn` attribute from a function
  # ASan additionally checks for the presence of this attribute

Generated code:
```
call void @__asan_handle_no_return    // Additionally inserted to avoid false positives
call void @longjmp
call void @__asan_handle_no_return
call void @__ubsan_handle_builtin_unreachable
unreachable
```

The second call to `__asan_handle_no_return` is redundant. This will be
cleaned up in a follow-up patch.

rdar://problem/40723397

Reviewers: delcypher, eugenis

Tags: #sanitizers

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

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

5 years agogn build: Merge r351320 (the 9.0.0 version bump)
Nico Weber [Thu, 24 Jan 2019 01:00:52 +0000 (01:00 +0000)]
gn build: Merge r351320 (the 9.0.0 version bump)

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

5 years agoUpdate entry count for cold calls
David Callahan [Thu, 24 Jan 2019 00:55:23 +0000 (00:55 +0000)]
Update entry count for cold calls

Summary:
Profile sample files include the number of times each entry or inlined
call site is sampled. This is translated into the entry count metadta
on functions.

When sample data is being read, if a call site that was inlined
in the sample program is considered cold and not inlined, then
the entry count of the out-of-line functions does not reflect
the current compilation.

In this patch, we note call sites where the function was not inlined
and as a last action of the sample profile loading, we update the
called function's entry count to reflect the calls from these
call sites which are not included in the profile file.

Reviewers: danielcdh, wmi, Kader, modocache

Reviewed By: wmi

Subscribers: davidxl, eraman, llvm-commits

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

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