platform/upstream/llvm.git
3 years ago[VE] Clean check routines of branch types
Kazushi (Jam) Marukawa [Sat, 28 Nov 2020 02:26:52 +0000 (11:26 +0900)]
[VE] Clean check routines of branch types

Previously, these check routines accepted non-generatble instructions.
This time, I clean them and add assert for those non-generatable
instructions.

Reviewed By: simoll

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

3 years agoAdd -fintegrated-as to second invocation of clang in test case.
Zarko Todorovski [Mon, 30 Nov 2020 17:15:25 +0000 (12:15 -0500)]
Add -fintegrated-as to second invocation of clang in test case.

3 years ago[analyzer][StdLibraryFunctionsChecker] Fix typos in summaries of mmap and mmap64
Balazs Benics [Mon, 30 Nov 2020 17:06:28 +0000 (18:06 +0100)]
[analyzer][StdLibraryFunctionsChecker] Fix typos in summaries of mmap and mmap64

The fd parameter of
```
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
```
should be constrained to the range [0, IntMax] as that is of type int.
Constraining to the range [0, Off_tMax] would result in a crash as that is
of a signed type with the value of 0xff..f (-1).

The crash would happen when we try to apply the arg constraints.
At line 583: assert(Min <= Max), as 0 <= -1 is not satisfied

The mmap64 is fixed for the same reason.

Reviewed By: martong, vsavchenko

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

3 years ago[FPEnv] clang should get from the AST the metadata for constrained FP builtins
Kevin P. Neal [Mon, 30 Nov 2020 16:56:38 +0000 (11:56 -0500)]
[FPEnv] clang should get from the AST the metadata for constrained FP builtins

Currently clang is not correctly retrieving from the AST the metadata for
constrained FP builtins. This patch fixes that for the non-target specific
builtins.

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

3 years ago[ASTImporter] Support import of CXXDeductionGuideDecl
Gabor Marton [Wed, 25 Nov 2020 17:32:30 +0000 (18:32 +0100)]
[ASTImporter] Support import of CXXDeductionGuideDecl

CXXDeductionGuideDecl is a FunctionDecl, but its constructor should be called
appropriately, at least to set the kind variable properly.

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

3 years ago[Flang][OpenMP] Add semantic checks for OpenMP Private clause.
Praveen G [Mon, 30 Nov 2020 16:35:35 +0000 (11:35 -0500)]
[Flang][OpenMP] Add semantic checks for OpenMP Private clause.

Add the semantic checks for the OpenMP 4.5 - 2.15.3.3 Private clause.

1. Pointers with the INTENT(IN) attribute may not appear in a private clause.
2. Variables that appear in namelist statements may not appear in a private clause.
   A flag 'InNamelist' is added to the Symbol::Flag to identify the symbols
   in Namelist statemnts.

Test cases : omp-private01.f90, omp-private02.f90

Reviewed By: kiranchandramohan

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

3 years ago[sanitizer] Disable use_tls_dynamic on on-Android x86 Linux.
Vy Nguyen [Sun, 29 Nov 2020 02:09:21 +0000 (21:09 -0500)]
[sanitizer] Disable use_tls_dynamic on on-Android x86 Linux.

https://bugs.chromium.org/p/chromium/issues/detail?id=1153421

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

3 years ago[RISCV] Combine (GORCI (GORCI x, C2), C1) -> (GORCI x, C1|C2).
Craig Topper [Mon, 30 Nov 2020 16:33:10 +0000 (08:33 -0800)]
[RISCV] Combine (GORCI (GORCI x, C2), C1) -> (GORCI x, C1|C2).

Unlike GREVI, GORCI stages can't be undone, but they are
redundant if done more than once.

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

3 years ago[IR][LoopRotate] remove assertion that phi must have at least one operand
Sanjay Patel [Mon, 30 Nov 2020 16:25:07 +0000 (11:25 -0500)]
[IR][LoopRotate] remove assertion that phi must have at least one operand

This was suggested in D92247 - I initially committed an alternate
fix ( bfd2c216ea ) to avoid the crash/assert shown in
https://llvm.org/PR48296 ,
but that was reverted because it caused msan failures on other
tests. We can try to revive that patch using the test included
here, but I do not have an immediate plan to isolate that problem.

3 years ago[RISCV] Custom legalize bswap/bitreverse to GREVI with Zbp extension to enable them...
Craig Topper [Mon, 30 Nov 2020 16:14:30 +0000 (08:14 -0800)]
[RISCV] Custom legalize bswap/bitreverse to GREVI with Zbp extension to enable them to combine with other GREVI instructions

This enables bswap/bitreverse to combine with other GREVI patterns or each other without needing to add more special cases to the DAG combine or new DAG combines.

I've also enabled the existing GREVI combine for GREVIW so that it can pick up the i32 bswap/bitreverse on RV64 after they've been type legalized to GREVIW.

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

3 years ago[ELF] Don't relax R_X86_64_GOTPCRELX if addend != -4
Fangrui Song [Mon, 30 Nov 2020 16:30:19 +0000 (08:30 -0800)]
[ELF] Don't relax R_X86_64_GOTPCRELX if addend != -4

clang may produce `movl x@GOTPCREL+4(%rip), %eax` when loading the high 32 bits
of the address of a global variable in -fpic/-fpie mode.

If assembled by GNU as, the fixup emits an R_X86_64_GOTPCRELX with an
addend != -4. The instruction loads from the GOT entry with an offset
and thus it is incorrect to relax the instruction.

If assembled by the integrated assembler, we emit R_X86_64_GOTPCREL for
relocations that definitely cannot be relaxed (D92114), so this patch is not
needed.

This patch disables the relaxation, which is compatible with the implementation in GNU ld
("Add R_X86_64_[REX_]GOTPCRELX support to gas and ld").

Reviewed By: grimar, jhenderson

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

3 years ago[X86] Don't emit R_X86_64_[REX_]GOTPCRELX for a GOT load with an offset
Fangrui Song [Mon, 30 Nov 2020 16:27:30 +0000 (08:27 -0800)]
[X86] Don't emit R_X86_64_[REX_]GOTPCRELX for a GOT load with an offset

clang may produce `movl x@GOTPCREL+4(%rip), %eax` when loading the high
32 bits of the address of a global variable in -fpic/-fpie mode.

If assembled by GNU as, the fixup emits R_X86_64_GOTPCRELX with an addend != -4.
The instruction loads from the GOT entry with an offset and thus it is incorrect
to relax the instruction.

This patch does not emit a relaxable relocation for a GOT load with an offset
because R_X86_64_[REX_]GOTPCRELX do not make sense for instructions which cannot
be relaxed.  The result is good enough for LLD to work. GNU ld relaxes
mov+GOTPCREL as well, but it suppresses the relaxation if addend != -4.

Reviewed By: jhenderson

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

3 years ago[RISCV] Only combine (or (GREVI x, shamt), x) -> GORCI if shamt is a power of 2.
Craig Topper [Mon, 30 Nov 2020 15:06:32 +0000 (07:06 -0800)]
[RISCV] Only combine (or (GREVI x, shamt), x) -> GORCI if shamt is a power of 2.

GORCI performs an OR between each stage. So we need to ensure only
one stage is active before doing this combine.

Initial attempts at finding a test case for this failed due to
the order things get combined. It's most likely that we'll form
one stage of GREVI then combine to GORCI before the two stages of
GREVI are able to be formed and combined with each other to form
a multi stage GREVI.

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

3 years ago[ConstraintElimination] Add additional GEP decomposition tests.
Florian Hahn [Mon, 30 Nov 2020 15:47:43 +0000 (15:47 +0000)]
[ConstraintElimination] Add additional GEP decomposition tests.

3 years ago[X86] Add vbmi2 test coverage for vector rotations
Simon Pilgrim [Mon, 30 Nov 2020 15:59:46 +0000 (15:59 +0000)]
[X86] Add vbmi2 test coverage for vector rotations

We should be using the funnel shift instructions for vXi16 types.

3 years ago[IR] improve code comment/logic in removePredecessor(); NFC
Sanjay Patel [Mon, 30 Nov 2020 15:49:40 +0000 (10:49 -0500)]
[IR] improve code comment/logic in removePredecessor(); NFC

This was suggested in the post-commit review of ce134da4b1.

3 years ago[lldb] Always include template arguments that have their default value in the interna...
Raphael Isemann [Mon, 30 Nov 2020 15:14:30 +0000 (16:14 +0100)]
[lldb] Always include template arguments that have their default value in the internal type name

Our type formatters/summaries match on the internal type name we generate in LLDB for Clang types.

These names were generated using Clang's default printing policy. However Clang's
default printing policy got tweaked over the last month to make the generated type
names more readable (by for example excluding inline/anonymous namespaces and
removing template arguments that have their default value). This broke the formatter
system where LLDB's matching logic now no longer can format certain types as
the new type names generated by Clang's default printing policy no longer match
the type names that LLDB/the user specified.

I already introduced LLDB's own type printing policy and fixed the inline/anonymous
namespaces in da121fff1184267a405f81a87f7314df2d474e1c (just to get the
test suite passing again).

This patch is restoring the old type printing behaviour where always include the template
arguments in the internal type name (even if they match the default args). This should get
template type formatters/summaries working again in the rare situation where we do
know template default arguments within LLDB. This can only happen when either having
a template that was parsed in the expression parser or when we get type information from a C++ module.

The Clang change that removed defaulted template arguments from Clang's printing policy was
e7f3e2103cdb567dda4fd52f81bf4bc07179f5a8

Reviewed By: labath

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

3 years agoRevert "[IR][LoopRotate] avoid leaving phi with no operands (PR48296)"
Sanjay Patel [Mon, 30 Nov 2020 15:13:38 +0000 (10:13 -0500)]
Revert "[IR][LoopRotate] avoid leaving phi with no operands (PR48296)"

This reverts commit bfd2c216ea8ef09f8fb1f755ca2b89f86f74acbb.
This appears to be causing stage2 msan failures on buildbots:
  FAIL: LLVM :: Transforms/SimplifyCFG/X86/bug-25299.ll (65872 of 71835)
  ******************** TEST 'LLVM :: Transforms/SimplifyCFG/X86/bug-25299.ll' FAILED ********************
  Script:
  --
  : 'RUN: at line 1';   /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/opt < /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/test/Transforms/SimplifyCFG/X86/bug-25299.ll -simplifycfg -S | /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/FileCheck /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/test/Transforms/SimplifyCFG/X86/bug-25299.ll
  --
  Exit Code: 2
  Command Output (stderr):
  --
  ==87374==WARNING: MemorySanitizer: use-of-uninitialized-value
      #0 0x9de47b6 in getBasicBlockIndex /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/IR/Instructions.h:2749:5
      #1 0x9de47b6 in simplifyCommonResume /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:4112:23
      #2 0x9de47b6 in simplifyResume /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:4039:12
      #3 0x9de47b6 in (anonymous namespace)::SimplifyCFGOpt::simplifyOnce(llvm::BasicBlock*) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:6330:16
      #4 0x9dcca13 in run /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:6358:16
      #5 0x9dcca13 in llvm::simplifyCFG(llvm::BasicBlock*, llvm::TargetTransformInfo const&, llvm::SimplifyCFGOptions const&, llvm::SmallPtrSetImpl<llvm::BasicBlock*>*) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:6369:8
      #6 0x974643d in iterativelySimplifyCFG(

3 years ago[mlir] Make mlir-cpu-runner depend on native instead of X86
Nicolas Vasilache [Mon, 30 Nov 2020 15:11:34 +0000 (15:11 +0000)]
[mlir] Make mlir-cpu-runner depend on native instead of X86

3 years ago[windows-itanium] handle dllimport/export code paths separately and share with PS4
Ben Dunbobbin [Mon, 30 Nov 2020 11:50:45 +0000 (11:50 +0000)]
[windows-itanium] handle dllimport/export code paths separately and share with PS4

Similar to Windows Itanium, PS4 is also an Itanium C++ ABI variant
which shares the goal of semantic compatibility with Microsoft C++
code that uses dllimport/export.

This change introduces a new function to determine from the triple
if an environment aims for compatibility with MS C++ code w.r.t to
these attributes and guards the relevant code paths using that
function.

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

3 years ago[lld-macho] Implement -fatal_warnings
Nico Weber [Fri, 20 Nov 2020 21:44:55 +0000 (16:44 -0500)]
[lld-macho] Implement -fatal_warnings

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

3 years ago[IR][LoopRotate] avoid leaving phi with no operands (PR48296)
Sanjay Patel [Mon, 30 Nov 2020 13:59:40 +0000 (08:59 -0500)]
[IR][LoopRotate] avoid leaving phi with no operands (PR48296)

https://llvm.org/PR48296 shows an example where we delete all of the operands
of a phi without actually deleting the phi, and that is currently considered
invalid IR. The reduced test included here would crash for that reason.

A suggested follow-up is to loosen the assert to allow 0-operand phis
in unreachable blocks.

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

3 years agoAdd 'asserts' requiremnt to test/CodeGen/ARM/cortex-a57-misched-mla.mir
Dmitri Gribenko [Mon, 30 Nov 2020 14:19:27 +0000 (15:19 +0100)]
Add 'asserts' requiremnt to test/CodeGen/ARM/cortex-a57-misched-mla.mir

'-debug-only=machine-scheduler' only works when asserts are enabled.

3 years ago[LLDB/Lua] add support for one-liner breakpoint callback
Pedro Tammela [Sun, 15 Nov 2020 19:39:16 +0000 (19:39 +0000)]
[LLDB/Lua] add support for one-liner breakpoint callback

These callbacks are set using the following:
   breakpoint command add -s lua -o "print('hello world!')"

The user supplied script is executed as:
   function (frame, bp_loc, ...)
      <body>
   end

So the local variables 'frame', 'bp_loc' and vararg are all accessible.
Any global variables declared will persist in the Lua interpreter.
A user should never hold 'frame' and 'bp_loc' in a global variable as
these userdatas are context dependent.

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

3 years ago[LangRef] missing link, minor fix
Juneyoung Lee [Mon, 30 Nov 2020 14:09:36 +0000 (23:09 +0900)]
[LangRef] missing link, minor fix

3 years ago[ConstantFold] Don't fold and/or i1 poison to poison (NFC)
Juneyoung Lee [Mon, 30 Nov 2020 13:48:43 +0000 (22:48 +0900)]
[ConstantFold] Don't fold and/or i1 poison to poison (NFC)

.. because it causes miscompilation when combined with select i1 -> and/or.

It is the select fold which is incorrect; but it is costly to disable the fold, so hack this one.

D92270

3 years ago[llvm-objdump] Require x86 target for mcpu/attr test
David Spickett [Mon, 30 Nov 2020 13:46:16 +0000 (13:46 +0000)]
[llvm-objdump] Require x86 target for mcpu/attr test

This fixes test failure on clang-cmake-armv7-quick bot
with change c2ead57ccf74900901fdda1cd0fbe9a7a0d1297a.

This bot only builds Arm/AArch64 targets.

3 years ago[InstCombine][X86] Add addsub tests showing failure to simplify demandedelts (PR46277)
Simon Pilgrim [Mon, 30 Nov 2020 13:37:04 +0000 (13:37 +0000)]
[InstCombine][X86] Add addsub tests showing failure to simplify demandedelts (PR46277)

3 years ago[lld/mac] Add --reproduce option
Nico Weber [Sun, 29 Nov 2020 03:38:27 +0000 (22:38 -0500)]
[lld/mac] Add --reproduce option

This adds support for ld.lld's --reproduce / lld-link's /reproduce:
flag to the MachO port. This flag can be added to a link command
to make the link write a tar file containing all inputs to the link
and a response file containing the link command. This can be used
to reproduce the link on another machine, which is useful for sharing
bug report inputs or performance test loads.

Since the linker is usually called through the clang driver and
adding linker flags can be a bit cumbersome, setting the env var
`LLD_REPRODUCE=foo.tar` triggers the feature as well.

The file response.txt in the archive can be used with
`ld64.lld.darwinnew $(cat response.txt)` as long as the contents are
smaller than the command-line limit, or with `ld64.lld.darwinnew
@response.txt` once D92149 is in.

The support in this patch is sufficient to create a tar file for
Chromium's base_unittests that can link after unpacking on a different
machine.

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

3 years agoTry harder to get rid off cortex-a57-misched-mla.s
Hans Wennborg [Mon, 30 Nov 2020 13:30:44 +0000 (14:30 +0100)]
Try harder to get rid off cortex-a57-misched-mla.s

3 years ago[mac/lld] Add support for response files
Nico Weber [Thu, 26 Nov 2020 02:48:27 +0000 (21:48 -0500)]
[mac/lld] Add support for response files

ld64 learned about them in Xcode 12, so we should too.

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

3 years ago[VE] Optimize prologue/epilogue instructions
Kazushi (Jam) Marukawa [Thu, 26 Nov 2020 13:37:34 +0000 (22:37 +0900)]
[VE] Optimize prologue/epilogue instructions

Optimize eliminate FP mechanism.  This time optimize a function which has
no call but fixed stack objects.  LLVM eliminates FP on such functions now.
Also, optimize GOT/PLT registers save/restore instructions if a given
function doesn't uses them.  In addition, remove generating mechanism of
`.cfi` instructions since those are taken from other architectures and not
inspected yet.  Update regression tests, also.

Reviewed By: simoll

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

3 years agoTry to fix bots after 112b3cb by removing cortex-a57-misched-mla.s
Hans Wennborg [Mon, 30 Nov 2020 13:15:41 +0000 (14:15 +0100)]
Try to fix bots after 112b3cb by removing cortex-a57-misched-mla.s

3 years ago[VE] Change the behaviour of truncate
Kazushi (Jam) Marukawa [Fri, 27 Nov 2020 14:02:29 +0000 (23:02 +0900)]
[VE] Change the behaviour of truncate

Change the way to truncate i64 to i32 in I64 registers.  VE assumed
sext values previously.  Change it to zext values this time to make
it match to the LLVM behaviour.

Reviewed By: simoll

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

3 years ago[VPlan] Use VPUser to manage VPPredInstPHIRecipe operand (NFC).
Florian Hahn [Sat, 28 Nov 2020 13:33:38 +0000 (13:33 +0000)]
[VPlan] Use VPUser to manage VPPredInstPHIRecipe operand (NFC).

VPPredInstPHIRecipe is one of the recipes that was missed during the
initial conversion. This patch adjusts the recipe to also manage its
operand using VPUser.

3 years ago[VE] Specify vector alignments
Kazushi (Jam) Marukawa [Sat, 28 Nov 2020 02:58:44 +0000 (11:58 +0900)]
[VE] Specify vector alignments

Specify alignments for all vector types.  Update a regression test also.

Reviewed By: simoll

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

3 years ago[llvm-objdump] Document --mattr=help in --help output
David Spickett [Mon, 30 Nov 2020 10:39:07 +0000 (10:39 +0000)]
[llvm-objdump] Document --mattr=help in --help output

This does the same as `--mcpu=help` but was only
documented in the user guide.

* Added a test for both options.
* Corrected the single dash in `-mcpu=help` text.

Reviewed By: jhenderson

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

3 years ago[gn build] Manually sync 8da7efb and cac5be4
Hans Wennborg [Mon, 30 Nov 2020 12:36:36 +0000 (13:36 +0100)]
[gn build] Manually sync 8da7efb and cac5be4

This adds the clang-tidy concurrency module to the gn build.

3 years agoSend SVE vg register in custom expedited registerset
Muhammad Omair Javaid [Thu, 26 Nov 2020 07:55:29 +0000 (12:55 +0500)]
Send SVE vg register in custom expedited registerset

This patch ovverides GetExpeditedRegisterSet for
NativeRegisterContextLinux_arm64 to send vector granule register in
expedited register set if SVE mode is selected.

Reviewed By: labath

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

3 years agoSupport custom expedited register set in gdb-remote
Muhammad Omair Javaid [Thu, 26 Nov 2020 07:55:28 +0000 (12:55 +0500)]
Support custom expedited register set in gdb-remote

This patch adds capability to introduce a custom expedited register set
in gdb remote. Currently we send register set 0 as expedited register set
but for the case of AArch64 SVE we intend to send additional information
about SVE registers size/offset configuration which can be calculated
from vg register. Therefore we will expedited Vg register in case of
AArch64 is in SVE mode to speedup register configuration calculations.

Reviewed By: labath

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

3 years ago[AArch64][CostModel] Fix cost for mul <2 x i64>
Sjoerd Meijer [Mon, 30 Nov 2020 11:16:10 +0000 (11:16 +0000)]
[AArch64][CostModel] Fix cost for mul <2 x i64>

This was modeled to have a cost of 1, but since we do not have a MUL.2d this is
scalarized into vector inserts/extracts and scalar muls.

Motivating precommitted test is test/Transforms/SLPVectorizer/AArch64/mul.ll,
which we don't want to SLP vectorize.

Test Transforms/LoopVectorize/AArch64/extractvalue-no-scalarization-required.ll
unfortunately needed changing, but the reason is documented in
LoopVectorize.cpp:6855:

  // The cost of executing VF copies of the scalar instruction. This opcode
  // is unknown. Assume that it is the same as 'mul'.

which I will address next as a follow up of this.

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

3 years ago[lldb] Use llvm::Optional for port in LaunchGDBServer
David Spickett [Tue, 24 Nov 2020 14:01:29 +0000 (14:01 +0000)]
[lldb] Use llvm::Optional for port in LaunchGDBServer

Previously we used UINT16_MAX to mean no port/no specifc
port. This leads to confusion because 65535 is a valid
port number.

Instead use an optional. If you want a specific port call
LaunchGDBServer as normal, otherwise pass an empty optional
and it will be set to the port that gets chosen.
(or left empty in the case where we fail to find a port)

Reviewed By: labath

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

3 years ago[X86][AVX512] Only lower to VPALIGNR if we have BWI (PR48322)
Simon Pilgrim [Mon, 30 Nov 2020 10:38:25 +0000 (10:38 +0000)]
[X86][AVX512] Only lower to VPALIGNR if we have BWI (PR48322)

3 years agoAdd `using ConvertToLLVMPattern::match/matchAndRewrite` to avoid 'hiding overload...
Christian Sigg [Mon, 30 Nov 2020 10:32:53 +0000 (11:32 +0100)]
Add `using ConvertToLLVMPattern::match/matchAndRewrite` to avoid 'hiding overload' warning.

Reviewed By: ftynse

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

3 years ago[LegacyPM] Simplify PMTopLevelManager::collectLastUses. NFC.
Jay Foad [Fri, 27 Nov 2020 17:34:35 +0000 (17:34 +0000)]
[LegacyPM] Simplify PMTopLevelManager::collectLastUses. NFC.

3 years ago[NFC][clang-tidy] Do link FrontendOpenMP into concurrency module after all
Roman Lebedev [Mon, 30 Nov 2020 10:33:42 +0000 (13:33 +0300)]
[NFC][clang-tidy] Do link FrontendOpenMP into concurrency module after all

It seems that while clangASTMatchers does add FrontendOpenMP into
it's LLVM_LINK_COMPONENTS, it's still not being propagated transitively.

3 years ago[lldb] Error when there are no ports to launch a gdbserver on
David Spickett [Tue, 17 Nov 2020 15:41:04 +0000 (15:41 +0000)]
[lldb] Error when there are no ports to launch a gdbserver on

Previously if you did:
$ lldb-server platform --server <...> --min-gdbserver-port 12346
--max-gdbserver-port 12347
(meaning only use port 12346 for gdbservers)

Then tried to launch two gdbservers on the same connection,
the second one would return port 65535. Which is a real port
number but it actually means lldb-server didn't find one it was
allowed to use.

send packet: $qLaunchGDBServer;<...>
read packet: $pid:1919;port:12346;#c0
<...>
send packet: $qLaunchGDBServer;<...>
read packet: $pid:1927;port:65535;#c7

This situation should be an error even if port 65535 does happen
to be available on the current machine.

To fix this make PortMap it's own class within
GDBRemoteCommunicationServerPlatform.

This almost the same as the old typedef but for
GetNextAvailablePort() returning an llvm::Expected.
This means we have to handle not finding a port,
by returning an error packet.

Also add unit tests for this new PortMap class.

Reviewed By: labath

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

3 years ago[clang-format] State where clang-format-diff.py should be run from
David Spickett [Thu, 19 Nov 2020 16:06:02 +0000 (16:06 +0000)]
[clang-format] State where clang-format-diff.py should be run from

At least with git, file paths in a diff will be relative
to the repo root. So if you are in "llvm-project/lldb"
and the diff shows "clang/foo" modified you get:
No such file or directory

From clang-format-diff.py, since clang-format was
asked to read:
llvm-project/lldb/clang/foo

Add a note to the docs to explain this.

(there is `git diff --relative` but that excludes
changes outside of the current dir)

Reviewed By: sylvestre.ledru

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

3 years agoFix test case
Evgeny Leviant [Mon, 30 Nov 2020 09:35:28 +0000 (12:35 +0300)]
Fix test case

3 years ago[clang-tidy] implement concurrency-mt-unsafe
Vasily Kulikov [Mon, 30 Nov 2020 09:20:08 +0000 (12:20 +0300)]
[clang-tidy] implement concurrency-mt-unsafe

Checks for some thread-unsafe functions against a black list
of known-to-be-unsafe functions. Usually they access static variables
without synchronization (e.g. gmtime(3)) or utilize signals
in a racy way (e.g. sleep(3)).

The patch adds a check instead of auto-fix as thread-safe alternatives
usually have API with an additional argument
(e.g. gmtime(3) v.s. gmtime_r(3)) or have a different semantics
(e.g. exit(3) v.s. __exit(3)), so it is a rather tricky
or non-expected fix.

An option specifies which functions in libc should be considered
thread-safe, possible values are `posix`, `glibc`,
or `any` (the most strict check). It defaults to 'any' as it is
unknown what target libc type is - clang-tidy may be run
on linux but check sources compiled for other *NIX.

The check is used in Yandex Taxi backend and has caught
many unpleasant bugs. A similar patch for coroutine-unsafe API
is coming next.

Reviewed By: lebedev.ri

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

3 years ago[clang-tidy] add concurrency module
Vasily Kulikov [Mon, 30 Nov 2020 09:15:01 +0000 (12:15 +0300)]
[clang-tidy] add concurrency module

The module will contain checks related to concurrent programming (including threads, fibers, coroutines, etc.).

Reviewed By: lebedev.ri

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

3 years ago[NFC][SimplifyCFG] Add STATISTIC() to the FoldValueComparisonIntoPredecessors() fold
Roman Lebedev [Fri, 27 Nov 2020 13:59:46 +0000 (16:59 +0300)]
[NFC][SimplifyCFG] Add STATISTIC() to the FoldValueComparisonIntoPredecessors() fold

3 years ago[ARM] Constant predicate tests. NFC
David Green [Mon, 30 Nov 2020 09:18:25 +0000 (09:18 +0000)]
[ARM] Constant predicate tests. NFC

3 years ago[TableGen][SchedModels] Fix read/write variant substitution
Evgeny Leviant [Mon, 30 Nov 2020 08:55:55 +0000 (11:55 +0300)]
[TableGen][SchedModels] Fix read/write variant substitution

Patch fixes multiple issues related to expansion of variant sched reads and
writes.

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

3 years ago[mlir][LLVMIR] Add support for InlineAsmOp
Nicolas Vasilache [Fri, 27 Nov 2020 22:02:23 +0000 (22:02 +0000)]
[mlir][LLVMIR] Add support for InlineAsmOp

The InlineAsmOp mirrors the underlying LLVM semantics with a notable
exception: the embedded `asm_string` is not allowed to define or reference
any symbol or any global variable: only the operands of the op may be read,
written, or referenced.
Attempting to define or reference any symbol or any global behavior is
considered undefined behavior at this time.

The asm dialect syntax is currently specified with an integer (0 [default] for the "att dialect", 1 for the intel dialect) to circumvent the ODS limitation on string enums.

Translation to LLVM is provided and raises the fact that the asm constraints string must be well-formed with respect to in/out operands. No check is performed on the asm_string.

An InlineAsm instruction in LLVM is a special call operation to a function that is constructed on the fly.
It does not fit the current model of MLIR calls with symbols.
As a consequence, the current implementation constructs the function type in ModuleTranslation.cpp.
This should be refactored in the future.

The mlir-cpu-runner is augmented with the global initialization of the X86 asm parser to allow proper execution in JIT mode. Previously, only the X86 asm printer was initialized.

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

3 years ago[AST][RecoveryAST] Preseve more invalid return stmt.
Haojian Wu [Mon, 30 Nov 2020 08:25:51 +0000 (09:25 +0100)]
[AST][RecoveryAST] Preseve more invalid return stmt.

suppress the diagnostics for missing return stmt in constexpr func.

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

3 years ago[libc] Improve memcpy copy loop
Guillaume Chatelet [Mon, 23 Nov 2020 17:30:39 +0000 (17:30 +0000)]
[libc] Improve memcpy copy loop

Rewriting loop so the terminating condition does not depend on the loop body

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

3 years ago[clang] Improve diagnostics for auto-return-type function if the return expr had...
Haojian Wu [Mon, 30 Nov 2020 08:18:42 +0000 (09:18 +0100)]
[clang] Improve diagnostics for auto-return-type function if the return expr had an error.

Given the following case:

```
auto k() {
  return undef();
  return 1;
}
```

Prior to the patch, clang emits an `cannot initialize return object of type
'auto' with an rvalue of type 'int'` diagnostic on the second return
(because the return type of the function cannot be deduced from the first contain-errors return).

This patch suppresses this error.

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

3 years ago[lldb/test] Avoid the socket "pump" thread
Pavel Labath [Mon, 30 Nov 2020 08:05:54 +0000 (09:05 +0100)]
[lldb/test] Avoid the socket "pump" thread

A separate thread is not necessary, as we can do its work on the main
thread, while waiting for the packet to arrive. This makes the code
easier to understand and debug (other simplifications are possible too,
but I'll leave that for separate patches). The new implementation also
avoids busy waiting.

3 years ago[mlir][CAPI] Convert the rest of the API int -> bool.
Stella Laurenzo [Mon, 30 Nov 2020 02:31:11 +0000 (18:31 -0800)]
[mlir][CAPI] Convert the rest of the API int -> bool.

* Follows on https://reviews.llvm.org/D92193
* I had a mid-air collision with some additional occurrences and then noticed that there were a lot more. Think I got them all.

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

3 years ago[IndVars] ICmpInst should not prevent IV widening
Max Kazantsev [Mon, 30 Nov 2020 03:51:31 +0000 (10:51 +0700)]
[IndVars] ICmpInst should not prevent IV widening

If we decided to widen IV with zext, then unsigned comparisons
should not prevent widening (same for sext/sign comparisons).
The result of comparison in wider type does not change in this case.

Differential Revision: https://reviews.llvm.org/D92207
Reviewed By: nikic

3 years agoRemove redundant check for access in the conversion from the naming
Richard Smith [Mon, 30 Nov 2020 03:17:49 +0000 (19:17 -0800)]
Remove redundant check for access in the conversion from the naming
class to the declaring class in a class member access.

This check does not appear to be backed by any rule in the standard (the
rule in question was likely removed over the years), and only ever
produces duplicate diagnostics. (It's also not meaningful because there
isn't a unique declaring class after the resolution of core issue 39.)

3 years ago[RISCV] Remove unused Addend parameter from classifySymbolRef. NFC
Fangrui Song [Mon, 30 Nov 2020 03:17:59 +0000 (19:17 -0800)]
[RISCV] Remove unused Addend parameter from classifySymbolRef. NFC

It is confusing as well since in the case of A - B + Cst, the returned Addend is not Cst.

3 years ago[mlir][Python] Add an Operation.result property.
Stella Laurenzo [Sun, 29 Nov 2020 21:52:11 +0000 (13:52 -0800)]
[mlir][Python] Add an Operation.result property.

* If ODS redefines this, it is fine, but I have found this accessor to be universally useful in the old npcomp bindings and I'm closing gaps that will let me switch.

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

3 years ago[mlir][Python] Python API cleanups and additions found during code audit.
Stella Laurenzo [Sun, 29 Nov 2020 21:30:23 +0000 (13:30 -0800)]
[mlir][Python] Python API cleanups and additions found during code audit.

* Add capsule get/create for Attribute and Type, which already had capsule interop defined.
* Add capsule interop and get/create for Location.
* Add Location __eq__.
* Use get() and implicit cast to go from PyAttribute, PyType, PyLocation to MlirAttribute, MlirType, MlirLocation (bundled with this change because I didn't want to continue the pattern one more time).

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

3 years ago[MC] Copy visibility for .symver created symbols
Fangrui Song [Mon, 30 Nov 2020 00:51:48 +0000 (16:51 -0800)]
[MC] Copy visibility for .symver created symbols

3 years agoUse bool in place of int for boolean things in the C API
George [Mon, 30 Nov 2020 00:40:03 +0000 (16:40 -0800)]
Use bool in place of int for boolean things in the C API

`bool` is pretty well supported by now in C, and using it in place of `int` is not only more semantically accurate, but also improves automatic bindings for languages like Swift.

There is more discussion here: https://llvm.discourse.group/t/adding-mlirbool-to-c-bindings/2280/5

Reviewed By: ftynse, mehdi_amini

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

3 years ago[clang-tidy] [clangd] Avoid multi-line diagnostic range for else-after-return diagnostic
Nathan Ridge [Sun, 29 Nov 2020 00:53:23 +0000 (19:53 -0500)]
[clang-tidy] [clangd] Avoid multi-line diagnostic range for else-after-return diagnostic

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

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

3 years ago[ELF] Improve 2 SmallVector<*, N> usage
Fangrui Song [Sun, 29 Nov 2020 22:01:32 +0000 (14:01 -0800)]
[ELF] Improve 2 SmallVector<*, N> usage

For --gc-sections, SmallVector<InputSection *, 256> -> SmallVector<InputSection *, 0> because the code bloat (1296 bytes) is not worthwhile (the saved reallocation is negligible).
For OutputSection::compressedData, N=1 is useless (for a compressed .debug_*, the size is always larger than 1).

3 years ago[DL] Optimize address space zero lookup (NFC)
Nikita Popov [Sun, 29 Nov 2020 20:21:37 +0000 (21:21 +0100)]
[DL] Optimize address space zero lookup (NFC)

Information for pointer size/alignment/etc is queried a lot, but
the binary search based implementation makes this fairly slow.

Add an explicit check for address space zero and skip the search
in that case -- we need to specially handle the zero address space
anyway, as it serves as the fallback for all address spaces that
were not explicitly defined.

I initially wanted to simply replace the binary search with a
linear search, which would handle both address space zero and the
general case efficiently, but I was not sure whether there are
any degenerate targets that use more than a handful of declared
address spaces (in-tree, even AMDGPU only declares six).

3 years ago[ELF] Check --orphan-handling=place (default value) early
Fangrui Song [Sun, 29 Nov 2020 20:36:26 +0000 (12:36 -0800)]
[ELF] Check --orphan-handling=place (default value) early

The function took 1% (161MiB clang) to 1.7% (an 4.9GiB executable) time.

3 years ago[RISCV] Change predicate on InstAliases for GORCI/GREVI/SHFLI/UNSHFLI to HasStdExtZbp...
Craig Topper [Sun, 29 Nov 2020 19:20:46 +0000 (11:20 -0800)]
[RISCV] Change predicate on InstAliases for GORCI/GREVI/SHFLI/UNSHFLI to HasStdExtZbp instead of HasStdExtZbbOrZbp.

This matches the predicate on the instructions. Though I think
some specific encodings are valid in Zbb, but not all of them.

3 years ago[mlir] Add a shape function library op
Jacques Pienaar [Sun, 29 Nov 2020 19:15:30 +0000 (11:15 -0800)]
[mlir] Add a shape function library op

Op with mapping from ops to corresponding shape functions for those op
in the library and mechanism to associate shape functions to functions.
The mapping of operand to shape function is kept separate from the shape
functions themselves as the operation is associated to the shape
function and not vice versa, and one could have a common library of
shape functions that can be used in different contexts.

Use fully qualified names and require a name for shape fn lib ops for
now and an explicit print/parse (based around the generated one & GPU
module op ones).

This commit reverts d9da4c3e73720badfcac5c0dc63c0285bb690770. Fixes
missing headers (don't know how that was working locally).

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

3 years ago[VPlan] Fix -Wunused-variable after a813090072c0527eb6ed51dd2ea4f54cb6bc72a0
Fangrui Song [Sun, 29 Nov 2020 18:38:01 +0000 (10:38 -0800)]
[VPlan] Fix -Wunused-variable after a813090072c0527eb6ed51dd2ea4f54cb6bc72a0

3 years ago[VPlan] Use VPValue and VPUser ops to print VPReplicateRecipe.
Florian Hahn [Sat, 28 Nov 2020 13:56:53 +0000 (13:56 +0000)]
[VPlan] Use VPValue and VPUser ops to print VPReplicateRecipe.

3 years agoUse `const` for array pointers in `StandardTypes.h`
George [Sun, 29 Nov 2020 18:12:11 +0000 (10:12 -0800)]
Use `const` for array pointers in `StandardTypes.h`

This mirrors the underlying C++ api.

Reviewed By: mehdi_amini

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

3 years ago[OpenMP][OMPT][NFC] Fix failing test
Joachim Protze [Sun, 29 Nov 2020 18:05:25 +0000 (19:05 +0100)]
[OpenMP][OMPT][NFC] Fix failing test

The test would fail for gcc, when built with debug flag.

3 years ago[OpenMP][OMPT][NFC] Fix flaky test
Joachim Protze [Sun, 29 Nov 2020 18:03:29 +0000 (19:03 +0100)]
[OpenMP][OMPT][NFC] Fix flaky test

The test had a chance to finish the first task before the second task is
created. In this case, the dependences-pair event would not trigger.

3 years ago[VPlan] Manage stored values of interleave groups using VPUser (NFC)
Florian Hahn [Sun, 29 Nov 2020 15:05:50 +0000 (15:05 +0000)]
[VPlan] Manage stored values of interleave groups using VPUser (NFC)

Interleave groups also depend on the values they store. Manage the
stored values as VPUser operands. This is currently a NFC, but is
required to allow VPlan transforms and to manage generated vector values
exclusively in VPTransformState.

3 years ago[IR] simplify code in removePredecessor(); NFCI
Sanjay Patel [Sun, 29 Nov 2020 14:55:04 +0000 (09:55 -0500)]
[IR] simplify code in removePredecessor(); NFCI

As suggested in D92247 (and independent of whatever we decide to do there),
this code is confusing as-is. Hopefully, this is at least mildly better.

We might be able to do better still, but we have a function called
"removePredecessor" with this behavior:
"Note that this function does not actually remove the predecessor." (!)

3 years ago[IR] remove redundant code comments; NFC
Sanjay Patel [Sun, 29 Nov 2020 13:56:20 +0000 (08:56 -0500)]
[IR] remove redundant code comments; NFC

As noted in D92247 (and independent of that patch):

http://llvm.org/docs/CodingStandards.html#doxygen-use-in-documentation-comments

"Don’t duplicate the documentation comment in the header file and in the
implementation file. Put the documentation comments for public APIs into
the header file."

3 years ago[libc++] hash<long double>: adjust for x86-64 ILP32
Harald van Dijk [Sun, 29 Nov 2020 13:52:28 +0000 (13:52 +0000)]
[libc++] hash<long double>: adjust for x86-64 ILP32

x86-64 ILP32 mode (x32) uses 32-bit size_t, so share the code with ix86 to zero out padding bits, not with x86-64 LP64 mode.

Reviewed By: #libc, ldionne

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

3 years ago[clangd] Fix path edge-case condition.
Sam McCall [Sun, 29 Nov 2020 12:40:29 +0000 (13:40 +0100)]
[clangd] Fix path edge-case condition.

3 years ago[clangd] Cache .clang-tidy files again.
Sam McCall [Wed, 25 Nov 2020 21:22:40 +0000 (22:22 +0100)]
[clangd] Cache .clang-tidy files again.

This cache went away in 73fdd998701cce3aa6c4d8d2a73ab97351a0313b

This time, the cache is periodically validated against disk, so config
is still mostly "live".

The per-file cache reuses FileCache, but the tree-of-file-caches is
duplicated from ConfigProvider. .clangd, .clang-tidy, .clang-format, and
compile_commands.json all have this pattern, we should extract it at some point.
TODO for now though.

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

3 years ago[ConstantFold] Fold more operations to poison
Juneyoung Lee [Sat, 28 Nov 2020 19:26:44 +0000 (04:26 +0900)]
[ConstantFold] Fold more operations to poison

This patch folds more operations to poison.

Alive2 proof: https://alive2.llvm.org/ce/z/mxcb9G (it does not contain tests about div/rem because they fold to poison when raising UB)

Reviewed By: nikic

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

3 years ago[LangRef] minor fixes to poison examples and well-defined values section (NFC)
Juneyoung Lee [Sun, 29 Nov 2020 11:51:25 +0000 (20:51 +0900)]
[LangRef] minor fixes to poison examples and well-defined values section (NFC)

3 years ago[BasicAA] Generalize recursive phi alias analysis
Nikita Popov [Sat, 21 Nov 2020 16:29:13 +0000 (17:29 +0100)]
[BasicAA] Generalize recursive phi alias analysis

For recursive phis, we skip the recursive operands and check that
the remaining operands are NoAlias with an unknown size. Currently,
this is limited to inbounds GEPs with positive offsets, to
guarantee that the recursion only ever increases the pointer.

Make this more general by only requiring that the underlying object
of the phi operand is the phi itself, i.e. it it based on itself in
some way. To compensate, we need to use a beforeOrAfterPointer()
location size, as we no longer have the guarantee that the pointer
is strictly increasing.

This allows us to handle some additional cases like negative geps,
geps with dynamic offsets or geps that aren't inbounds.

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

3 years agoRevert "[mlir] Add a shape function library op"
Mehdi Amini [Sun, 29 Nov 2020 05:28:42 +0000 (05:28 +0000)]
Revert "[mlir] Add a shape function library op"

This reverts commit 6dd9596b19d7679c562f8e866be6d0c3d7c21994.

Build is broken.

3 years ago[mlir] Add a shape function library op
Jacques Pienaar [Sat, 28 Nov 2020 23:53:58 +0000 (15:53 -0800)]
[mlir] Add a shape function library op

Op with mapping from ops to corresponding shape functions for those op
in the library and mechanism to associate shape functions to functions.
The mapping of operand to shape function is kept separate from the shape
functions themselves as the operation is associated to the shape
function and not vice versa, and one could have a common library of
shape functions that can be used in different contexts.

Use fully qualified names and require a name for shape fn lib ops for
now and an explicit print/parse (based around the generated one & GPU
module op ones).

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

3 years agoImplement computeHostNumHardwareThreads() for FreeBSD
Dimitry Andric [Sat, 28 Nov 2020 20:42:52 +0000 (21:42 +0100)]
Implement computeHostNumHardwareThreads() for FreeBSD

This retrieves CPU affinity via FreeBSD's cpuset(2) API, and makes LLVM
respect affinity settings configured by the user via the cpuset(1)
command.

In particular, this allows to reduce the number of threads used on
machines with high core counts, which can interact badly with
parallelized build systems. This is particularly noticable with lld,
which spawns lots of threads even for linking e.g. hello_world!

This fix is related to PR48193, but does not adress the more fundamental
problem, which is that LLVM by default grabs as many CPUs and/or threads
as possible.

Reviewed By: MaskRay

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

3 years ago[ARMAttributeParser] Correctly parse and print Tag_THUMB_ISA_use=3
LemonBoy [Sat, 28 Nov 2020 20:28:22 +0000 (12:28 -0800)]
[ARMAttributeParser] Correctly parse and print Tag_THUMB_ISA_use=3

I took the "Permitted"/"Not Permitted" combo from the `Tag_ARM_ISA_use` case (GNU tools print "Yes").

Reviewed By: compnerd, MaskRay, simon_tatham

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

3 years ago[libc++] Disable some tests using gcc 9.
Mark de Wever [Sat, 28 Nov 2020 19:08:09 +0000 (20:08 +0100)]
[libc++] Disable some tests using gcc 9.

This should fix running the libc++ unit tests.
They failed due to the changes introduced in 67c88e.

3 years ago[BasicAA] Add tests for suboptimal speculation results (NFC)
Nikita Popov [Sat, 28 Nov 2020 18:14:04 +0000 (19:14 +0100)]
[BasicAA] Add tests for suboptimal speculation results (NFC)

While we determine that (phi1, phi2) is noalias, we don't
determine that (gep phi1 + 1, gep phi2 + 1) are also noalias.

3 years ago[X86] Add -verify-machineinstrs to pic.ll
Harald van Dijk [Sat, 28 Nov 2020 17:54:44 +0000 (17:54 +0000)]
[X86] Add -verify-machineinstrs to pic.ll

This ensures that failures show up in regular builds, rather than only
when expensive checks are enabled.

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

3 years ago[X86] Do not allow FixupSetCC to relax constraints
Harald van Dijk [Sat, 28 Nov 2020 17:46:56 +0000 (17:46 +0000)]
[X86] Do not allow FixupSetCC to relax constraints

The build bots caught two additional pre-existing problems exposed by the test change part of my change https://reviews.llvm.org/D91339, when expensive checks are enabled. https://reviews.llvm.org/D91924 fixes one of them, this fixes the other.

FixupSetCC will change code in the form of

  %setcc = SETCCr ...
  %ext1 = MOVZX32rr8 %setcc

to

  %zero = MOV32r0
  %setcc = SETCCr ...
  %ext2 = INSERT_SUBREG %zero, %setcc, %subreg.sub_8bit

and replace uses of %ext1 with %ext2.

The register class for %ext2 did not take into account any constraints on %ext1, which may have been required by its uses. This change ensures that the original constraints are honoured, by instead of creating a new %ext2 register, reusing %ext1 and further constraining it as needed. This requires a slight reorganisation to account for the fact that it is possible for the constraining to fail, in which case no changes should be made.

Reviewed By: RKSimon

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

3 years ago[ConstantFold] Fold operations to poison if possible
Juneyoung Lee [Fri, 27 Nov 2020 02:04:04 +0000 (11:04 +0900)]
[ConstantFold] Fold operations to poison if possible

This patch updates ConstantFold, so operations are folded into poison if possible.

<alive2 proofs>
casts: https://alive2.llvm.org/ce/z/WSj7rw
binary operations (arithmetic): https://alive2.llvm.org/ce/z/_7dEyJ
binary operations (bitwise): https://alive2.llvm.org/ce/z/cezjVN
vector/aggregate operations: https://alive2.llvm.org/ce/z/BQ7hWz
unary ops: https://alive2.llvm.org/ce/z/yBRs4q
other ops: https://alive2.llvm.org/ce/z/iXbcFD

Reviewed By: nikic

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

3 years ago[X86] Have indirect calls take 64-bit operands in 64-bit modes
Harald van Dijk [Sat, 28 Nov 2020 16:46:30 +0000 (16:46 +0000)]
[X86] Have indirect calls take 64-bit operands in 64-bit modes

The build bots caught two additional pre-existing problems exposed by the test change part of my change https://reviews.llvm.org/D91339, when expensive checks are enabled. This fixes one of them.

X86 has CALL64r and CALL32r opcodes, where CALL64r takes a 64-bit register, and CALL32r takes a 32-bit register. CALL64r can only be used in 64-bit mode, CALL32r can only be used in 32-bit mode. LLVM would assume that after picking the appropriate CALLr opcode, a pointer-sized register would be a valid operand, but in x32 mode, a 64-bit mode, pointers are 32 bits. In this mode, it is invalid to directly pass a pointer to CALL64r, it needs to be extended to 64 bits first.

Reviewed By: RKSimon

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

3 years ago[Timer] Add a command option to enable/disable timer sorting.
Paul C. Anagnostopoulos [Thu, 26 Nov 2020 02:00:28 +0000 (21:00 -0500)]
[Timer] Add a command option to enable/disable timer sorting.

Add one more timer to DAGISelEmitter to test the option.

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

3 years ago[libc++] P1645 constexpr for <numeric>
Mark de Wever [Sat, 28 Nov 2020 13:50:53 +0000 (14:50 +0100)]
[libc++] P1645 constexpr for <numeric>

Implements P1645: constexpr for <numeric> algorithms

Reviewed By: ldionne, #libc

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

3 years ago[clangd] Add symbol origin for remote index
Kirill Bobyrev [Sat, 28 Nov 2020 14:38:04 +0000 (15:38 +0100)]
[clangd] Add symbol origin for remote index

Makes it easier to diagnose remote index issues with --debug-origins flag.

Reviewed By: sammccall

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