platform/upstream/llvm.git
5 years ago[clang-tidy] Recommit: Add the abseil-duration-comparison check
Jonas Toth [Mon, 3 Dec 2018 19:22:08 +0000 (19:22 +0000)]
[clang-tidy] Recommit: Add the abseil-duration-comparison check

Summary:
This check finds instances where Duration values are being converted to a numeric value in a comparison expression, and suggests that the conversion happen on the other side of the expression to a Duration.  See documentation for examples.

This also shuffles some code around so that the new check may perform in sone step simplifications also caught by other checks.
Compilation is unbroken, because the hash-function is now directly
specified for std::unordered_map, as 'enum class' does not compile as
key (seamingly only on some compilers).

Patch by hwright.

Reviewers: aaron.ballman, JonasToth, alexfh, hokein

Reviewed By: JonasToth

Subscribers: sammccall, Eugene.Zelenko, xazax.hun, cfe-commits, mgorny

Tags: #clang-tools-extra

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

llvm-svn: 348169

5 years ago[MachineOutliner] Drop candidates that require fixups if it's beneficial
Jessica Paquette [Mon, 3 Dec 2018 19:11:27 +0000 (19:11 +0000)]
[MachineOutliner] Drop candidates that require fixups if it's beneficial

If it's a bigger code size win to drop candidates that require stack fixups
than to demote every candidate to that variant, the outliner should do that.

This happens if the number of bytes taken by calls to functions that don't
require fixups, plus the number of bytes that'd be left is less than the
number of bytes that it'd take to emit a save + restore for all candidates.

Also add tests for each possible new behaviour.

- machine-outliner-compatible-candidates shows that when we have candidates
that don't use the stack, we can use the default call variant along with the
no save/regsave variant.

- machine-outliner-all-stack shows that when it's better to fix up the stack,
we still will demote all candidates to that case

- machine-outliner-drop-stack shows that we can discard candidates that
require stack fixups when it would be beneficial to do so.

llvm-svn: 348168

5 years ago[Hexagon] Add HasV5 predicate for compatibility with auto-generated files
Krzysztof Parzyszek [Mon, 3 Dec 2018 19:05:42 +0000 (19:05 +0000)]
[Hexagon] Add HasV5 predicate for compatibility with auto-generated files

llvm-svn: 348167

5 years agoFix issue with Tpi Stream hash map.
Zachary Turner [Mon, 3 Dec 2018 19:05:12 +0000 (19:05 +0000)]
Fix issue with Tpi Stream hash map.

Part of the patch to not build the hash map eagerly was omitted
due to a merge conflict.  Add it back, which should fix the failing
tests.

llvm-svn: 348166

5 years agoRevert "[clang-tidy] Add the abseil-duration-comparison check"
Jonas Toth [Mon, 3 Dec 2018 18:59:27 +0000 (18:59 +0000)]
Revert "[clang-tidy] Add the abseil-duration-comparison check"

This commit broke buildbots and needs adjustments.

llvm-svn: 348165

5 years ago[X86] Fix bad formatting. NFC
Craig Topper [Mon, 3 Dec 2018 18:58:57 +0000 (18:58 +0000)]
[X86] Fix bad formatting. NFC

llvm-svn: 348164

5 years ago[Hexagon] Remove unused operand definitions, NFC
Krzysztof Parzyszek [Mon, 3 Dec 2018 18:54:24 +0000 (18:54 +0000)]
[Hexagon] Remove unused operand definitions, NFC

llvm-svn: 348163

5 years ago[Hexagon] Some formatting changes, NFC
Krzysztof Parzyszek [Mon, 3 Dec 2018 18:40:15 +0000 (18:40 +0000)]
[Hexagon] Some formatting changes, NFC

llvm-svn: 348162

5 years ago[clang-tidy] Add the abseil-duration-comparison check
Jonas Toth [Mon, 3 Dec 2018 18:35:56 +0000 (18:35 +0000)]
[clang-tidy] Add the abseil-duration-comparison check

Summary:
This check finds instances where Duration values are being converted to a numeric value in a comparison expression, and suggests that the conversion happen on the other side of the expression to a Duration.  See documentation for examples.

This also shuffles some code around so that the new check may perform in sone step simplifications also caught by other checks.

Patch by hwright.

Reviewers: aaron.ballman, JonasToth, alexfh, hokein

Reviewed By: JonasToth

Subscribers: sammccall, Eugene.Zelenko, xazax.hun, cfe-commits, mgorny

Tags: #clang-tools-extra

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

llvm-svn: 348161

5 years agoDon't build the Tpi Hash map by default.
Zachary Turner [Mon, 3 Dec 2018 18:32:05 +0000 (18:32 +0000)]
Don't build the Tpi Hash map by default.

This is very slow and should be done for specific cases where
lookups will need to happen.

llvm-svn: 348160

5 years ago[X86] Teach LowerMUL/LowerMULH for vXi8 to unpack constant RHS.
Craig Topper [Mon, 3 Dec 2018 18:26:27 +0000 (18:26 +0000)]
[X86] Teach LowerMUL/LowerMULH for vXi8 to unpack constant RHS.

Summary:
We need to unpackl and unpackh the operands to use two vXi16 multiplies. Previously it looks like the low unpack would get constant folded at least in the 128-bit case after shuffle lowering turned the unpackl into ZERO_EXTEND_VECTOR_INREG and X86 custom DAG combined it. The same doesn't happen for the high half. So we'd load a constant and then shuffle it. But the low half would just be loaded and used by the multiply directly.

After this patch we now end up with a constant pool entry for the low and high unpacks separately with no shuffle operations.

This is a step towards removing custom constant folding for ZERO_EXTEND_VECTOR_INREG/SIGN_EXTEND_VECTOR_INREG in the X86 backend.

Reviewers: RKSimon, spatel

Reviewed By: RKSimon

Subscribers: llvm-commits

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

llvm-svn: 348159

5 years ago[X86] Add DAG combine to combine a v8i32->v8i16 truncate with a packuswb that truncat...
Craig Topper [Mon, 3 Dec 2018 18:26:24 +0000 (18:26 +0000)]
[X86] Add DAG combine to combine a v8i32->v8i16 truncate with a packuswb that truncates v8i16->v8i8.

Summary:
Under -x86-experimental-vector-widening-legalization, fp_to_uint/fp_to_sint with a smaller than 128 bit vector type results are custom type legalized by promoting the result to a 128 bit vector by promoting the elements, inserting an assertzext/assertsext, then truncating back to original type. The truncate will be further legalizdd to a pack shuffle. In the case of a v8i8 result type, we'll end up with a v8i16 fp_to_sint. This will need to be further legalized during vector op legalization by promoting to v8i32 and then truncating again. Under avx2 this produces good code with two pack instructions, but Under avx512 this will result in a truncate instruction and a packuswb instruction. But we should be able to get away with a single truncate instruction.

The other option is to promote all the way to vXi32 result type during the first type legalization. But in some experimentation that seemed to require more work to produce good code for other configurations.

Reviewers: RKSimon, spatel

Reviewed By: RKSimon

Subscribers: llvm-commits

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

llvm-svn: 348158

5 years agoFix non-modular build.
Adrian Prantl [Mon, 3 Dec 2018 18:07:03 +0000 (18:07 +0000)]
Fix non-modular build.

llvm-svn: 348157

5 years agoAdding tests for -ast-dump; NFC.
Aaron Ballman [Mon, 3 Dec 2018 18:00:31 +0000 (18:00 +0000)]
Adding tests for -ast-dump; NFC.

This adds tests for struct and union declarations in C++.

llvm-svn: 348156

5 years agoUpdate Diagnostic handling for changes in CFE.
Adrian Prantl [Mon, 3 Dec 2018 17:55:29 +0000 (17:55 +0000)]
Update Diagnostic handling for changes in CFE.

The clang frontend no longer emits the current working directory for
DIFiles containing an absolute path in the filename: and will move the
common prefix between current working directory and the file into the
directory: component.

https://reviews.llvm.org/D55085

llvm-svn: 348155

5 years agoAvoid emitting redundant or unusable directories in DIFile metadata entries.
Adrian Prantl [Mon, 3 Dec 2018 17:55:27 +0000 (17:55 +0000)]
Avoid emitting redundant or unusable directories in DIFile metadata entries.

As discussed on llvm-dev recently, Clang currently emits redundant
directories in DIFile entries, such as

  .file      1 "/Volumes/Data/llvm" "/Volumes/Data/llvm/tools/clang/test/CodeGen/debug-info-abspath.c"

This patch looks at any common prefix between the compilation
directory and the (absolute) file path and strips the redundant
part. More importantly it leaves the compilation directory empty if
the two paths have no common prefix.

After this patch the above entry is (assuming a compilation dir of "/Volumes/Data/llvm/_build"):

  .file 1 "/Volumes/Data/llvm" "tools/clang/test/CodeGen/debug-info-abspath.c"

When building the FileCheck binary with debug info, this patch makes
the build artifacts ~1kb smaller.

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

llvm-svn: 348154

5 years agoShow a proper error message if output file is too large.
Rui Ueyama [Mon, 3 Dec 2018 17:42:57 +0000 (17:42 +0000)]
Show a proper error message if output file is too large.

At least on Linux, if a file size given to FileOutputBuffer is greater
than 2^63, it fails with "Invalid argument" error, which is not a
user-friendly error message. With this patch, lld prints out "output
file too large" instead.

llvm-svn: 348153

5 years ago[Reproducers] Change how reproducers are initialized.
Jonas Devlieghere [Mon, 3 Dec 2018 17:28:29 +0000 (17:28 +0000)]
[Reproducers] Change how reproducers are initialized.

This patch changes the way the reproducer is initialized. Rather than
making changes at run time we now do everything at initialization time.
To make this happen we had to introduce initializer options and their SB
variant. This allows us to tell the initializer that we're running in
reproducer capture/replay mode.

Because of this change we also had to alter our testing strategy. We
cannot reinitialize LLDB when using the dotest infrastructure. Instead
we use lit and invoke two instances of the driver.

Another consequence is that we can no longer enable capture or replay
through commands. This was bound to go away form the beginning, but I
had something in mind where you could enable/disable specific providers.
However this seems like it adds very little value right now so the
corresponding commands were removed.

Finally this change also means you now have to control this through the
driver, for which I replaced --reproducer with --capture and --replay to
differentiate between the two modes.

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

llvm-svn: 348152

5 years ago[SimplifyCFG] add tests for cross block compare folding; NFC
Sanjay Patel [Mon, 3 Dec 2018 16:55:29 +0000 (16:55 +0000)]
[SimplifyCFG] add tests for cross block compare folding; NFC

These are the baseline tests for D54827.
Patch based on code originally written by: @yinyuefengyi (luo xionghu)

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

llvm-svn: 348151

5 years ago[Serialization][NFC] Remove pointless "+ 0" in ASTReader
Bruno Ricci [Mon, 3 Dec 2018 16:17:45 +0000 (16:17 +0000)]
[Serialization][NFC] Remove pointless "+ 0" in ASTReader

Remove the pointless "+ 0" which I added for some reason when
modifying these statement/expression classes since it looks
like this is a typo. Following the suggestion of aaron.ballman
in D54902. NFC.

llvm-svn: 348150

5 years ago[CmpInstAnalysis] fix formatting; NFC
Sanjay Patel [Mon, 3 Dec 2018 15:48:30 +0000 (15:48 +0000)]
[CmpInstAnalysis] fix formatting; NFC

There are potential improvements to the structure of this API
raised by D54994, but remove some cosmetic blemishes before
making any functional changes.

llvm-svn: 348149

5 years ago[OpenMP][libomptarget] Flush intermediate values during team reduction
Gheorghe-Teodor Bercea [Mon, 3 Dec 2018 15:21:49 +0000 (15:21 +0000)]
[OpenMP][libomptarget] Flush intermediate values during team reduction

Summary: Ensure intermediate values of a team reduction are flushed to memory.

Reviewers: ABataev, caomhin

Reviewed By: ABataev

Subscribers: guansong, jfb, openmp-commits

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

llvm-svn: 348148

5 years ago[clangd] Avoid memory-mapping files on Windows
Ilya Biryukov [Mon, 3 Dec 2018 15:21:49 +0000 (15:21 +0000)]
[clangd] Avoid memory-mapping files on Windows

Summary:
Memory-mapping files on Windows leads to them being locked and prevents
editors from saving changes to those files on disk. This is fine for the
compiler, but not acceptable for an interactive tool like clangd.
Therefore, we choose to avoid using memory-mapped files on Windows.

Reviewers: hokein, kadircet

Reviewed By: kadircet

Subscribers: yvvan, zturner, nik, malaperle, mgorny, ioeric, MaskRay, jkorous, arphaman, cfe-commits

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

llvm-svn: 348147

5 years agoFix line endings. NFCI.
Simon Pilgrim [Mon, 3 Dec 2018 14:55:09 +0000 (14:55 +0000)]
Fix line endings. NFCI.

llvm-svn: 348146

5 years ago[AST][Sema] Remove CallExpr::setNumArgs
Bruno Ricci [Mon, 3 Dec 2018 14:54:03 +0000 (14:54 +0000)]
[AST][Sema] Remove CallExpr::setNumArgs

CallExpr::setNumArgs is the only thing that prevents storing the arguments
in a trailing array. There is only 3 places in Sema where setNumArgs is called.
D54900 dealt with one of them.

This patch remove the other two calls to setNumArgs in ConvertArgumentsForCall.
To do this we do the following changes:

1.) Replace the first call to setNumArgs by an assertion since we are moving the
responsability to allocate enough space for the arguments from
Sema::ConvertArgumentsForCall to its callers
(which are Sema::BuildCallToMemberFunction, and Sema::BuildResolvedCallExpr).

2.) Add a new member function CallExpr::shrinkNumArgs, which can only be used
to drop arguments and then replace the second call to setNumArgs by
shrinkNumArgs.

3.) Add a new defaulted parameter MinNumArgs to CallExpr and its derived
classes which specifies a minimum number of argument slots to allocate.
The actual number of arguments slots allocated will be
max(number of args, MinNumArgs) with the extra args nulled. Note that
after the creation of the call expression all of the arguments will be
non-null. It is just during the creation of the call expression that some of
the last arguments can be temporarily null, until filled by default arguments.

4.) Update Sema::BuildCallToMemberFunction by passing the number of parameters
in the function prototype to the constructor of CXXMemberCallExpr. Here the
change is pretty straightforward.

5.) Update Sema::BuildResolvedCallExpr. Here the change is more complicated
since the type-checking for the function type was done after the creation of
the call expression. We need to move this before the creation of the call
expression, and then pass the number of parameters in the function prototype
(if any) to the constructor of the call expression.

6.) Update the deserialization of CallExpr and its derived classes.

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

Reviewed By: aaron.ballman

llvm-svn: 348145

5 years agoFixing -print-module-scope for legacy SCC passes
Fedor Sergeev [Mon, 3 Dec 2018 14:48:15 +0000 (14:48 +0000)]
Fixing -print-module-scope for legacy SCC passes

It appears that print-module-scope was not implemented for legacy SCC passes.
Fixed to print a whole module instead of just current SCC.

Reviewed By: mkazantsev
Differential Revision: https://reviews.llvm.org/D54793

llvm-svn: 348144

5 years ago[LLD][ELF] - Remove the excessive condition. NFC.
George Rimar [Mon, 3 Dec 2018 14:44:02 +0000 (14:44 +0000)]
[LLD][ELF] - Remove the excessive condition. NFC.

There is no need to check that In.DynSymTab != nullptr,
because `includeInDynsym` already checks for `!Config->HasDynSymTab`
and `HasDynSymTab` is the pre-condition for In.DynSymTab creation.

llvm-svn: 348143

5 years ago[AArch64] Add command-line option for SSBS
Pablo Barrio [Mon, 3 Dec 2018 14:40:37 +0000 (14:40 +0000)]
[AArch64] Add command-line option for SSBS

Summary:
SSBS (Speculative Store Bypass Safe) is only mandatory from 8.5
onwards but is optional from Armv8.0-A. This patch adds testing for
the ssbs command line option, added to allow enabling the feature
in previous Armv8-A architectures to 8.5.

Reviewers: olista01, samparker, aemerson

Reviewed By: samparker

Subscribers: javed.absar, kristof.beyls, cfe-commits

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

llvm-svn: 348142

5 years ago[SystemZ::TTI] Return zero cost for ICmp that becomes Load And Test.
Jonas Paulsson [Mon, 3 Dec 2018 14:30:18 +0000 (14:30 +0000)]
[SystemZ::TTI]  Return zero cost for ICmp that becomes Load And Test.

A loaded value with multiple users compared with 0 will become a load and
test single instruction. The load is not folded in this case (multiple
users), but the compare instruction is eliminated.

This patch returns 0 cost for the icmp in these cases.

Review: Ulrich Weigand
https://reviews.llvm.org/D55111

llvm-svn: 348141

5 years ago[SanitizerCommon] Remove RenameFile
Eugene Leviant [Mon, 3 Dec 2018 14:03:51 +0000 (14:03 +0000)]
[SanitizerCommon] Remove RenameFile

This function seems to be no longer used by compiler-rt
libraries

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

llvm-svn: 348140

5 years ago[OpenCL][Sema] Improving formatting
Marco Antognini [Mon, 3 Dec 2018 14:03:49 +0000 (14:03 +0000)]
[OpenCL][Sema] Improving formatting

Reformat comment added in r348120 following
review https://reviews.llvm.org/D55136.

llvm-svn: 348139

5 years ago[libcxx] Implement P0318: unwrap_ref_decay and unwrap_reference
Louis Dionne [Mon, 3 Dec 2018 14:03:27 +0000 (14:03 +0000)]
[libcxx] Implement P0318: unwrap_ref_decay and unwrap_reference

Summary:
This was voted into C++20 in San Diego. Note that there was a revision
D0318R2 which did include unwrap_reference_t, but we mistakingly voted
P0318R1 into the C++20 Working Draft (which does not include
unwrap_reference_t). This patch implements D0318R2, which is what
we'll end up with in the Working Draft once this mistake has been
fixed.

Reviewers: EricWF, mclow.lists

Subscribers: christof, dexonsmith, libcxx-commits

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

llvm-svn: 348138

5 years ago[AArch64] Add command-line option for SSBS
Pablo Barrio [Mon, 3 Dec 2018 14:00:47 +0000 (14:00 +0000)]
[AArch64] Add command-line option for SSBS

Summary:
SSBS (Speculative Store Bypass Safe) is only mandatory from 8.5
onwards but is optional from Armv8.0-A. This patch adds a command
line option to enable SSBS, as it was previously only possible to
enable by selecting -march=armv8.5-a.

Similar patch upstream in GNU binutils:
https://sourceware.org/ml/binutils/2018-09/msg00274.html

Reviewers: olista01, samparker, aemerson

Reviewed By: samparker

Subscribers: javed.absar, kristof.beyls, kristina, llvm-commits

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

llvm-svn: 348137

5 years ago[PDB] Support PDB-backed expressions evaluation (+ fix stuck test)
Aleksandr Urakov [Mon, 3 Dec 2018 13:31:13 +0000 (13:31 +0000)]
[PDB] Support PDB-backed expressions evaluation (+ fix stuck test)

Summary:
This patch contains several small fixes, which makes it possible to evaluate
expressions on Windows using information from PDB. The changes are:
- several sanitize checks;
- make IRExecutionUnit::MemoryManager::getSymbolAddress to not return a magic
  value on a failure, because callers wait 0 in this case;
- entry point required to be a file address, not RVA, in the ObjectFilePECOFF;
- do not crash on a debuggee second chance exception - it may be an expression
  evaluation crash. Also fix detection of "crushed" threads in tests;
- create parameter declarations for functions in AST to make it possible to call
  debugee functions from expressions;
- relax name searching rules for variables, functions, namespaces and types. Now
  it works just like in the DWARF plugin;
- fix endless recursion in SymbolFilePDB::ParseCompileUnitFunctionForPDBFunc.

Reviewers: zturner, asmith, stella.stamenova

Reviewed By: stella.stamenova, asmith

Tags: #lldb

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

llvm-svn: 348136

5 years ago[CodeComplete] Cleanup access checking in code completion
Ilya Biryukov [Mon, 3 Dec 2018 13:29:17 +0000 (13:29 +0000)]
[CodeComplete] Cleanup access checking in code completion

Summary: Also fixes a crash (see the added 'accessibility-crash.cpp' test).

Reviewers: ioeric, kadircet

Reviewed By: kadircet

Subscribers: cfe-commits

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

llvm-svn: 348135

5 years ago[Sema] Avoid CallExpr::setNumArgs in Sema::BuildCallToObjectOfClassType
Bruno Ricci [Mon, 3 Dec 2018 13:23:56 +0000 (13:23 +0000)]
[Sema] Avoid CallExpr::setNumArgs in Sema::BuildCallToObjectOfClassType

CallExpr::setNumArgs is the only thing that prevents storing the arguments
of a call expression in a trailing array since it might resize the argument
array. setNumArgs is only called in 3 places in Sema, and for all of them it
is possible to avoid it.

This deals with the call to setNumArgs in BuildCallToObjectOfClassType.
Instead of constructing the CXXOperatorCallExpr first and later calling
setNumArgs if we have default arguments, we first construct a large
enough SmallVector, do the promotion/check of the arguments, and
then construct the CXXOperatorCallExpr.

Incidentally this also avoid reallocating the arguments when the
call operator has default arguments but this is not the primary goal.

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

Reviewed By: aaron.ballman

llvm-svn: 348134

5 years ago[clangd] Fix a stale comment, NFC.
Haojian Wu [Mon, 3 Dec 2018 13:16:04 +0000 (13:16 +0000)]
[clangd] Fix a stale comment, NFC.

llvm-svn: 348133

5 years ago[AMDGPU] Add sdwa support for ADD|SUB U64 decomposed Pseudos
Ron Lieberman [Mon, 3 Dec 2018 13:04:54 +0000 (13:04 +0000)]
[AMDGPU] Add sdwa support for ADD|SUB U64 decomposed Pseudos

The introduction of S_{ADD|SUB}_U64_PSEUDO instructions which are decomposed
into VOP3 instruction pairs for S_ADD_U64_PSEUDO:
  V_ADD_I32_e64
  V_ADDC_U32_e64
and for S_SUB_U64_PSEUDO
  V_SUB_I32_e64
  V_SUBB_U32_e64
preclude the use of SDWA to encode a constant.
SDWA: Sub-Dword addressing is supported on VOP1 and VOP2 instructions,
but not on VOP3 instructions.

We desire to fold the bit-and operand into the instruction encoding
for the V_ADD_I32 instruction. This requires that we transform the
VOP3 into a VOP2 form of the instruction (_e32).
  %19:vgpr_32 = V_AND_B32_e32 255,
      killed %16:vgpr_32, implicit $exec
  %47:vgpr_32, %49:sreg_64_xexec = V_ADD_I32_e64
      %26.sub0:vreg_64, %19:vgpr_32, implicit $exec
 %48:vgpr_32, dead %50:sreg_64_xexec = V_ADDC_U32_e64
      %26.sub1:vreg_64, %54:vgpr_32, killed %49:sreg_64_xexec, implicit $exec

which then allows the SDWA encoding and becomes
  %47:vgpr_32 = V_ADD_I32_sdwa
      0, %26.sub0:vreg_64, 0, killed %16:vgpr_32, 0, 6, 0, 6, 0,
      implicit-def $vcc, implicit $exec
  %48:vgpr_32 = V_ADDC_U32_e32
      0, %26.sub1:vreg_64, implicit-def $vcc, implicit $vcc, implicit $exec

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

llvm-svn: 348132

5 years ago[AST] Fix an uninitialized bug in the bits of FunctionDecl
Bruno Ricci [Mon, 3 Dec 2018 13:04:10 +0000 (13:04 +0000)]
[AST] Fix an uninitialized bug in the bits of FunctionDecl

FunctionDeclBits.IsCopyDeductionCandidate was not initialized.
This caused a warning with valgrind.

llvm-svn: 348131

5 years ago[clangd] Get rid of AST matchers in CodeComplete, NFC
Haojian Wu [Mon, 3 Dec 2018 12:53:19 +0000 (12:53 +0000)]
[clangd] Get rid of AST matchers in CodeComplete, NFC

Summary:
The isIndexedForCodeCompletion is called in the code patch of
SymbolCollector.

Reviewers: kadircet

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

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

llvm-svn: 348130

5 years agoPortable Python script across Python version
Serge Guelton [Mon, 3 Dec 2018 12:41:35 +0000 (12:41 +0000)]
Portable Python script across Python version

Python3 does not support type destructuring in function parameters.

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

llvm-svn: 348129

5 years ago[AST][NFC] Pack CXXDeleteExpr
Bruno Ricci [Mon, 3 Dec 2018 12:32:32 +0000 (12:32 +0000)]
[AST][NFC] Pack CXXDeleteExpr

Use the newly available space in the bit-fields of Stmt.
This saves 8 bytes per CXXDeleteExpr. NFC.

llvm-svn: 348128

5 years agoPortable Python script across version
Serge Guelton [Mon, 3 Dec 2018 12:12:48 +0000 (12:12 +0000)]
Portable Python script across version

Have all classes derive from object: that's implicitly the default in Python3,
it needs to be done explicilty in Python2.

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

llvm-svn: 348127

5 years agoPortable Python script across Python version
Serge Guelton [Mon, 3 Dec 2018 12:11:21 +0000 (12:11 +0000)]
Portable Python script across Python version

Python2 supports the two following equivalent construct

raise ExceptionType, exception_value
and
raise ExceptionType(exception_value)

Only the later is supported by Python3.

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

llvm-svn: 348126

5 years ago[Analyzer] Actually check for -model-path being a directory
Ilya Biryukov [Mon, 3 Dec 2018 11:34:08 +0000 (11:34 +0000)]
[Analyzer] Actually check for -model-path being a directory

The original patch (r348038) clearly contained a typo and checked
for '-ctu-dir' twice.

llvm-svn: 348125

5 years ago[Analysis] Properly prepare test env in test/Analysis/undef-call.c
Ilya Biryukov [Mon, 3 Dec 2018 11:28:17 +0000 (11:28 +0000)]
[Analysis] Properly prepare test env in test/Analysis/undef-call.c

The test expectes the '%T/ctudir' to be present, but does not create it.

llvm-svn: 348124

5 years ago[clang] Do not read from 'test/SemaCXX/Inputs' inside 'test/AST'
Ilya Biryukov [Mon, 3 Dec 2018 11:26:35 +0000 (11:26 +0000)]
[clang] Do not read from 'test/SemaCXX/Inputs' inside 'test/AST'

Our integrate relies on test inputs being taken from the same diretory as the
test itself.

llvm-svn: 348123

5 years agoARM: use target-specific SUBS node when combining cmp with cmov.
Tim Northover [Mon, 3 Dec 2018 11:16:21 +0000 (11:16 +0000)]
ARM: use target-specific SUBS node when combining cmp with cmov.

This has two positive effects. First, using a custom node prevents
recombination leading to an infinite loop since the output DAG is notionally a
little more complex than the input one. Using a flag-setting instruction also
allows the subtraction to be folded with the related comparison more easily.

https://reviews.llvm.org/D53190

llvm-svn: 348122

5 years ago[NFC][AArch64] Split out backend features
Diogo N. Sampaio [Mon, 3 Dec 2018 11:08:13 +0000 (11:08 +0000)]
[NFC][AArch64] Split out backend features

This patch splits backend features currently
hidden behind architecture versions.

For example, currently the only way to activate
complex numbers extension is targeting an v8.3
architecture, where after the patch this extension
can be added separately.

This refactoring is required by the new command lines proposal:
http://lists.llvm.org/pipermail/llvm-dev/2018-September/126346.html

Reviewers: DavidSpickett, olista01, t.p.northover

Subscribers: kristof.beyls, bryanpkc, javed.absar, pbarrio

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

llvm-svn: 348121

5 years ago[OpenCL][Sema] Improve BuildResolvedCallExpr handling of builtins
Marco Antognini [Mon, 3 Dec 2018 10:58:56 +0000 (10:58 +0000)]
[OpenCL][Sema] Improve BuildResolvedCallExpr handling of builtins

Summary:
This is a follow-up on https://reviews.llvm.org/D52879, addressing a few issues.

This:
 - adds a FIXME for later improvement for specific builtins: I previously have only checked OpenCL ones and ensured tests cover those.
 - fixed the CallExpr type.

Reviewers: riccibruno

Reviewed By: riccibruno

Subscribers: yaxunl, Anastasia, kristina, svenvh, cfe-commits

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

llvm-svn: 348120

5 years ago[LLD][ELF] - Improve the DWARF v5 suport for building .gdb_index.
George Rimar [Mon, 3 Dec 2018 10:48:57 +0000 (10:48 +0000)]
[LLD][ELF] - Improve the DWARF v5 suport for building .gdb_index.

Now LLD might build the broken/incomplete .gdb_index when some DWARF v5
sections (like .debug_rnglists and .debug_addr) are used.

Particularly, for the case above, we emit an empty address area.
A test case is provided and patch fixes the issue.

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

llvm-svn: 348119

5 years ago[CMake] Add LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR for custom dSYM target directory...
Stefan Granitz [Mon, 3 Dec 2018 10:42:32 +0000 (10:42 +0000)]
[CMake] Add LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR for custom dSYM target directory on Darwin

Summary: When using `LLVM_EXTERNALIZE_DEBUGINFO` in LLDB, the default dSYM location for the shared library in LLDB.framework is inside the framework bundle. With `LLVM_EXTERNALIZE_DEBUGINFO_OUTPUT_DIR` we can easily fix that. I consider it a useful feature to be able to set a global output directory for external debug info (rather then having a target-specific one). Only implemented for Darwin so far.

Reviewers: beanz, aprantl

Reviewed By: aprantl

Subscribers: mgorny, aprantl, #lldb, lldb-commits, llvm-commits

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

llvm-svn: 348118

5 years ago[RISCV] Fix test/MC/Disassembler/RISCV/invalid-instruction.txt after rL347988
Alex Bradbury [Mon, 3 Dec 2018 10:35:46 +0000 (10:35 +0000)]
[RISCV] Fix test/MC/Disassembler/RISCV/invalid-instruction.txt after rL347988

The test for [0x00 0x00] failed due to the introduction of c.unimp.

This particular test is unnecessary now that c.unimp was defined (and is
tested in test/MC/RISCV/rv32c-valid.s).

llvm-svn: 348117

5 years ago[CMake] Store path to vendor-specific headers in clang-headers target property
Stefan Granitz [Mon, 3 Dec 2018 10:34:25 +0000 (10:34 +0000)]
[CMake] Store path to vendor-specific headers in clang-headers target property

Summary:
LLDB.framework wants a copy these headers. With this change LLDB can easily glob for the list of files:
```
get_target_property(clang_include_dir clang-headers RUNTIME_OUTPUT_DIRECTORY)
file(GLOB_RECURSE clang_vendor_headers RELATIVE ${clang_include_dir} "${clang_include_dir}/*")
```

By default `RUNTIME_OUTPUT_DIRECTORY` is unset for custom targets like `clang-headers`.

Reviewers: aprantl, JDevlieghere, davide, friss, dexonsmith

Reviewed By: JDevlieghere

Subscribers: mgorny, #lldb, cfe-commits, llvm-commits

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

llvm-svn: 348116

5 years ago[llvm-dwarfdump] - Stop printing the bogus empty section name on invalid dwarf.
George Rimar [Mon, 3 Dec 2018 10:33:40 +0000 (10:33 +0000)]
[llvm-dwarfdump] - Stop printing the bogus empty section name on invalid dwarf.

When there is no .debug_addr section for some reason,
llvm-dwarfdump would print the bogus empty section name when dumping ranges
in .debug_info:

DW_AT_ranges [DW_FORM_rnglistx]   (indexed (0x0) rangelist = 0x00000004
    [0x0000000000000000, 0x0000000000000001) ""
    [0x0000000000000000, 0x0000000000000002) "")

That happens because of the code which uses 0 (zero) as a section index as a default value.
The code should use -1ULL instead because technically 0 is a valid zero section index
in ELF and -1ULL is a special constant used that means "no section available".

This is mostly a fix for the overall correctness/safety of the code,
but a test case is provided too.

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

llvm-svn: 348115

5 years ago[ARM][MC] Move information about variadic register defs into tablegen
Oliver Stannard [Mon, 3 Dec 2018 10:32:42 +0000 (10:32 +0000)]
[ARM][MC] Move information about variadic register defs into tablegen

Currently, variadic operands on an MCInst are assumed to be uses,
because they come after the defs. However, this is not always the case,
for example the Arm/Thumb LDM instructions write to a variable number of
registers.

This adds a property of instruction definitions which can be used to
mark variadic operands as defs. This only affects MCInst, because
MachineInstruction already tracks use/def per operand in each instance
of the instruction, so can already represent this.

This property can then be checked in MCInstrDesc, allowing us to remove
some special cases in ARMAsmParser::isITBlockTerminator.

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

llvm-svn: 348114

5 years ago[ARM][Asm] Debug trace for the processInstruction loop
Oliver Stannard [Mon, 3 Dec 2018 10:21:28 +0000 (10:21 +0000)]
[ARM][Asm] Debug trace for the processInstruction loop

In the Arm assembly parser, we first match an instruction, then call
processInstruction to possibly change it to a different encoding, to
match rules in the architecture manual which can't be expressed by the
table-generated matcher.

This adds debug printing so that this process is visible when using the
-debug option.

To support this, I've added a new overload of MCInst::dump_pretty which
takes the opcode name as a StringRef, since we don't have an InstPrinter
instance in the assembly parser. Instead, we can get the same
information directly from the MCInstrInfo.

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

llvm-svn: 348113

5 years ago[KMSAN] Enable -msan-handle-asm-conservative by default
Alexander Potapenko [Mon, 3 Dec 2018 10:15:43 +0000 (10:15 +0000)]
[KMSAN] Enable -msan-handle-asm-conservative by default

This change enables conservative assembly instrumentation in KMSAN builds
by default.
It's still possible to disable it with -msan-handle-asm-conservative=0
if something breaks. It's now impossible to enable conservative
instrumentation for userspace builds, but it's not used anyway.

llvm-svn: 348112

5 years ago[GlobalISel] Fix test irtranslator-stackprotect-check.ll
Petr Pavlu [Mon, 3 Dec 2018 09:28:28 +0000 (09:28 +0000)]
[GlobalISel] Fix test irtranslator-stackprotect-check.ll

Fix for commit r347862. Use correct AArch64 triple in test
CodeGen/AArch64/GlobalISel/irtranslator-stackprotect-check.ll.

llvm-svn: 348111

5 years ago[ARM] FP16: support vld1.16 for vector loads with post-increment
Sjoerd Meijer [Mon, 3 Dec 2018 08:26:34 +0000 (08:26 +0000)]
[ARM] FP16: support vld1.16 for vector loads with post-increment

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

llvm-svn: 348110

5 years ago[PowerPC] Fix inconsistent ImmMustBeMultipleOf for same instruction
Kang Zhang [Mon, 3 Dec 2018 03:32:57 +0000 (03:32 +0000)]
[PowerPC] Fix inconsistent ImmMustBeMultipleOf for same instruction

Summary:
There are 4 instructions which have Inconsistent ImmMustBeMultipleOf in the
function PPCInstrInfo::instrHasImmForm, they are LFS, LFD, STFS, STFD.
These four instructions should set the ImmMustBeMultipleOf to 1 instead of 4.

Reviewed By: steven.zhang

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

llvm-svn: 348109

5 years ago[NFC] [PowerPC] add an routine in PPCTargetLowering to determine if a global is acces...
QingShan Zhang [Mon, 3 Dec 2018 03:32:16 +0000 (03:32 +0000)]
[NFC] [PowerPC] add an routine in PPCTargetLowering to determine if a global is accessed as got-indirect or not.

In theory, we should let the PPC target to determine how to lower the TOC Entry for globals.
And the PPCTargetLowering requires this query to do some optimization for TOC_Entry.

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

llvm-svn: 348108

5 years ago[gn build] Fix cosmetic bug in write_cmake_config.py
Nico Weber [Sun, 2 Dec 2018 22:26:18 +0000 (22:26 +0000)]
[gn build] Fix cosmetic bug in write_cmake_config.py

Before, #cmakedefine FOO resulted in #define FOO  with a trailing space if FOO
was set to something truthy. Make it so that it's just #define FOO without a
trailing space.

No functional difference.

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

llvm-svn: 348107

5 years ago[gn build] Slightly simplify write_cmake_config.
Nico Weber [Sun, 2 Dec 2018 22:25:25 +0000 (22:25 +0000)]
[gn build] Slightly simplify write_cmake_config.

Before, the script had a bunch of special cases for #cmakedefine and
#cmakedefine01 and then did general variable substitution. Now, the script
always does general variable substitution for all lines and handles the special
cases afterwards.

This has no observable effect for the inputs we use, but is easier to explain
and slightly easier to implement.

Also mention to link to CMake's configure_file() in the docstring.

(The new behavior doesn't quite match CMake on lines like #cmakedefine ${FOO},
but nobody does that.)

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

llvm-svn: 348106

5 years ago[gn build] Add build files for llvm/lib/Analysis and llvm/lib/ProfileData
Nico Weber [Sun, 2 Dec 2018 21:43:15 +0000 (21:43 +0000)]
[gn build] Add build files for llvm/lib/Analysis and llvm/lib/ProfileData

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

llvm-svn: 348105

5 years ago[X86] Add a DAG combine to turn stores of vXi1 on pre-avx512 targets into a bitcast...
Craig Topper [Sun, 2 Dec 2018 19:47:14 +0000 (19:47 +0000)]
[X86] Add a DAG combine to turn stores of vXi1 on pre-avx512 targets into a bitcast and a store of a iX scalar.

llvm-svn: 348104

5 years ago[X86] Fix bad comment. NFC
Craig Topper [Sun, 2 Dec 2018 19:47:13 +0000 (19:47 +0000)]
[X86] Fix bad comment. NFC

llvm-svn: 348103

5 years agoReplace FullComment member being visited with parameter
Stephen Kelly [Sun, 2 Dec 2018 17:30:40 +0000 (17:30 +0000)]
Replace FullComment member being visited with parameter

Reviewers: aaron.ballman

Subscribers: cfe-commits

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

llvm-svn: 348101

5 years agoExtend the CommentVisitor with parameter types
Stephen Kelly [Sun, 2 Dec 2018 17:30:34 +0000 (17:30 +0000)]
Extend the CommentVisitor with parameter types

Summary:
This has precedent in the StmtVisitor.  This change will make it
possible to clean up the comment handling in ASTDumper.

Reviewers: aaron.ballman

Subscribers: cfe-commits

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

llvm-svn: 348100

5 years agoRemove unecessary methods
Stephen Kelly [Sun, 2 Dec 2018 17:30:26 +0000 (17:30 +0000)]
Remove unecessary methods

The base class calls VisitExpr

llvm-svn: 348099

5 years ago[test] Fix use of 'sort -b' in SimpleLoopUnswitch on NetBSD
Michal Gorny [Sun, 2 Dec 2018 16:49:33 +0000 (16:49 +0000)]
[test] Fix use of 'sort -b' in SimpleLoopUnswitch on NetBSD

Add '-k 1' to 'sort -b' calls in SimpleLoopUnswitch tests, as required
for sort implementation on NetBSD.  The '-b' modifier is ineffective
if specified without any key.  Per the manpage:

  Note that the -b option has no effect unless key fields are specified.

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

llvm-svn: 348097

5 years ago[test] Fix ScalarEvolution test to allow __func__ with prototype
Michal Gorny [Sun, 2 Dec 2018 16:49:28 +0000 (16:49 +0000)]
[test] Fix ScalarEvolution test to allow __func__ with prototype

Fix ScalarEvolution/solve-quadratic.ll test to account for __func__
output listing the complete function prototype rather than just its
name, as it does on NetBSD.

Example Linux output:

  GetQuadraticEquation: addrec coeff bw: 4
  GetQuadraticEquation: equation -2x^2 + -2x + -4, coeff bw: 5, multiplied by 2

Example NetBSD output:

  llvm::Optional<std::tuple<llvm::APInt, llvm::APInt, llvm::APInt, llvm::APInt, unsigned int> > GetQuadraticEquation(const llvm::SCEVAddRecExpr*): addrec coeff bw: 4
  llvm::Optional<std::tuple<llvm::APInt, llvm::APInt, llvm::APInt, llvm::APInt, unsigned int> > GetQuadraticEquation(const llvm::SCEVAddRecExpr*): equation -2x^2 + -2x + -4, coeff bw: 5, multiplied by 2

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

llvm-svn: 348096

5 years ago[test] Fix BugPoint/compile-custom.ll to use detected python exec
Michal Gorny [Sun, 2 Dec 2018 16:49:23 +0000 (16:49 +0000)]
[test] Fix BugPoint/compile-custom.ll to use detected python exec

Spawn the custom compile command in BugPoint/compile-custom.ll via
%python rather than relying on implicit 'env python' shebang, in order
to fix it on systems that don't have 'python' executable such as NetBSD.

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

llvm-svn: 348095

5 years agoFix whitespace
Stephen Kelly [Sun, 2 Dec 2018 16:42:34 +0000 (16:42 +0000)]
Fix whitespace

llvm-svn: 348094

5 years agoAdd dump tests for ArrayInitLoopExpr and ArrayInitIndexExpr
Stephen Kelly [Sun, 2 Dec 2018 16:36:23 +0000 (16:36 +0000)]
Add dump tests for ArrayInitLoopExpr and ArrayInitIndexExpr

llvm-svn: 348093

5 years ago[ValueTracking] Support funnel shifts in computeKnownBits()
Nikita Popov [Sun, 2 Dec 2018 14:14:11 +0000 (14:14 +0000)]
[ValueTracking] Support funnel shifts in computeKnownBits()

If the shift amount is known, we can determine the known bits of the
output based on the known bits of two inputs.

This is essentially the same functionality as implemented in D54869,
but for ValueTracking rather than InstCombine SimplifyDemandedBits.

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

llvm-svn: 348091

5 years ago[SelectionDAG] fold constant with undef vector per element
Sanjay Patel [Sun, 2 Dec 2018 13:48:42 +0000 (13:48 +0000)]
[SelectionDAG] fold constant with undef vector per element

This makes the SDAG behavior consistent with the way we do this in IR.
It's possible that we were getting the wrong answer before. For example,
'xor undef, undef --> 0' but 'xor undef, C' --> undef.

But the most practical improvement is likely as shown in the tests here -
for FP, we were overconstraining undef lanes to NaN, and that can prevent
vector simplifications/narrowing (see D51553).

llvm-svn: 348090

5 years ago[DAGCombiner] guard against an oversized shift crash
Sanjay Patel [Sun, 2 Dec 2018 13:33:56 +0000 (13:33 +0000)]
[DAGCombiner] guard against an oversized shift crash

This change prevents the crash noted in the post-commit comments
for rL347478 :
http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20181119/605166.html

We can't guarantee that an oversized shift amount is folded away,
so we have to check for it.

Note that I committed an incomplete fix for that crash with:
rL347502

But as discussed here:
http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20181126/605679.html
...we have to try harder.

So I'm not sure how to expose the bug now (and apparently no fuzzers have found
a way yet either).

On the plus side, we have discovered that we're missing real optimizations by
not simplifying nodes sooner, so the earlier fix still has value, and there's
likely more value in extending that so we can simplify more opcodes and simplify
when doing RAUW and/or putting nodes on the combiner worklist.

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

llvm-svn: 348089

5 years ago[ValueTracking] add helper function for testing implied condition; NFCI
Sanjay Patel [Sun, 2 Dec 2018 13:26:03 +0000 (13:26 +0000)]
[ValueTracking] add helper function for testing implied condition; NFCI

We were duplicating code around the existing isImpliedCondition() that
checks for a predecessor block/dominating condition, so make that a
wrapper call.

llvm-svn: 348088

5 years ago[X86] Simplify LowerBITCAST code for v2i32/v4i16/v8i8/i64->mmx/i64/f64 bitcast.
Craig Topper [Sun, 2 Dec 2018 07:52:39 +0000 (07:52 +0000)]
[X86] Simplify LowerBITCAST code for v2i32/v4i16/v8i8/i64->mmx/i64/f64 bitcast.

Previously this code generated its own extracts and build_vector. But we can use a simpler concat_vectors or scalar_to_vector operation and let type legalization do additional legalization of those operations.

llvm-svn: 348087

5 years ago[X86] Add custom type legalization for v2i32/v4i16/v8i8->mmx bitcasts to avoid a...
Craig Topper [Sun, 2 Dec 2018 05:46:50 +0000 (05:46 +0000)]
[X86] Add custom type legalization for v2i32/v4i16/v8i8->mmx bitcasts to avoid a store/load to/from the stack.

Widen the input to a 128 bit vector by padding with undef elements. Then use a movdq2q to convert from xmm register to mmx register.

llvm-svn: 348086

5 years ago[X86] Custom type legalize v2i32/v4i16/v8i8->i64 bitcasts in 64-bit mode similar...
Craig Topper [Sun, 2 Dec 2018 05:46:48 +0000 (05:46 +0000)]
[X86] Custom type legalize v2i32/v4i16/v8i8->i64 bitcasts in 64-bit mode similar to what's done when the destination is f64.

The generic legalizer will fall back to a stack spill that uses a truncating store. That store will get expanded into a shuffle and non-truncating store on pre-avx512 targets. Once that happens the stack store/load pair will be combined away leaving behind the shuffle and bitcasts. On avx512 targets the truncating store is legal so doesn't get folded away.

By custom legalizing it we can avoid this churn and maybe produce better code.

llvm-svn: 348085

5 years agoOpenCL: Improve vector printf warnings
Matt Arsenault [Sat, 1 Dec 2018 22:16:27 +0000 (22:16 +0000)]
OpenCL: Improve vector printf warnings

The vector modifier is considered separate, so
don't treat it as a conversion specifier.

This is still not warning on some cases, like
using a type that isn't a valid vector element.

Fixes bug 39652

llvm-svn: 348084

5 years agoOpenCL: Extend argument promotion rules to vector types
Matt Arsenault [Sat, 1 Dec 2018 21:56:10 +0000 (21:56 +0000)]
OpenCL: Extend argument promotion rules to vector types

The spec is ambiguous on whether vector types are allowed to be
implicitly converted. The only legal context I think this can
be used for OpenCL is printf, where it seems necessary.

llvm-svn: 348083

5 years ago[X86] Add vXi8 division/remainder by non-splat constant test cases to prepare for...
Craig Topper [Sat, 1 Dec 2018 21:53:08 +0000 (21:53 +0000)]
[X86] Add vXi8 division/remainder by non-splat constant test cases to prepare for an upcoming patch.

llvm-svn: 348082

5 years ago[MachineOutliner][AArch64] Improve checks for stack instructions
Jessica Paquette [Sat, 1 Dec 2018 21:24:06 +0000 (21:24 +0000)]
[MachineOutliner][AArch64] Improve checks for stack instructions

If we know that we'll definitely save LR to a register, there's no reason to
pre-check whether or not a stack instruction is unsafe to fix up.

This makes it so that we check for that condition before mapping instructions.

This allows us to outline more, since we don't pessimise as many instructions.

Also update some tests, since we outline more.

llvm-svn: 348081

5 years agoReplace w16/w17 in machine-outliner.mir with w11/w12
Jessica Paquette [Sat, 1 Dec 2018 21:23:58 +0000 (21:23 +0000)]
Replace w16/w17 in machine-outliner.mir with w11/w12

These registers should not be used here, since they are interprocedural
scratch registers in AArch64.

llvm-svn: 348080

5 years ago[X86] Don't use zero_extend_vector_inreg for mulhu lowering with sse 4.1
Craig Topper [Sat, 1 Dec 2018 19:26:31 +0000 (19:26 +0000)]
[X86] Don't use zero_extend_vector_inreg for mulhu lowering with sse 4.1

Summary: With sse4.1 we use two zero_extend_vector_inreg and a pshufd to expand the v16i8 input into two v8i16 vectors for the multiply. That's 3 shuffles to extend one operand. The other operand is usually constant as this is mostly used by division by constant optimization. Pre sse4.1 we use a punpckhbw and a punpcklbw with a zero vector. That's two shuffles and an xor and a copy due to tied register constraints. That seems maybe better than the 3 shuffles. With AVX we avoid the copy so that's obviously better.

Reviewers: spatel, RKSimon

Reviewed By: RKSimon

Subscribers: llvm-commits

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

llvm-svn: 348079

5 years agoIntroduce a way to allow the ASan dylib on Darwin platforms to be loaded via `dlopen()`.
Dan Liew [Sat, 1 Dec 2018 15:45:42 +0000 (15:45 +0000)]
Introduce a way to allow the ASan dylib on Darwin platforms to be loaded via `dlopen()`.

Summary:

The purpose of this option is provide a way for the ASan dylib
to be loaded via `dlopen()` without triggering most initialization
steps (e.g. shadow memory set up) that normally occur when the
ASan dylib is loaded.

This new functionality is exposed by

- A `SANITIZER_SUPPORTS_INIT_FOR_DLOPEN` macro which indicates if the
  feature is supported. This only true for Darwin currently.
- A `HandleDlopenInit()` function which should return true if the library
  is being loaded via `dlopen()` and
  `SANITIZER_SUPPORTS_INIT_FOR_DLOPEN` is supported. Platforms that
  support this may perform any initialization they wish inside this
  function.

Although disabling initialization is something that could potentially
apply to other sanitizers it appears to be unnecessary for other
sanitizers so this patch only makes the change for ASan.

rdar://problem/45284065

Reviewers: kubamracek, george.karpenkov, kcc, eugenis, krytarowski

Subscribers: #sanitizers, llvm-commits

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

llvm-svn: 348078

5 years ago[TTI] Reduction costs only need to include a single extract element cost (REAPPLIED)
Simon Pilgrim [Sat, 1 Dec 2018 14:18:31 +0000 (14:18 +0000)]
[TTI] Reduction costs only need to include a single extract element cost (REAPPLIED)

We were adding the entire scalarization extraction cost for reductions, which returns the total cost of extracting every element of a vector type.

For reductions we don't need to do this - we just need to extract the 0'th element after the reduction pattern has completed.

Fixes PR37731

Rebased and reapplied after being reverted in rL347541 due to PR39774 - which was fixed by D54955/rL347759 and D55017/rL347997

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

llvm-svn: 348076

5 years ago[AMDGPU] Split 64-Bit XNOR to 64-Bit NOT/XOR
Graham Sellers [Sat, 1 Dec 2018 12:27:53 +0000 (12:27 +0000)]
[AMDGPU] Split 64-Bit XNOR to 64-Bit NOT/XOR

The identity ~(x ^ y) == (~x ^ y) == (x ^ ~y) allows XNOR (XOR/NOT) to turn into NOT/XOR. Handling this case with its own split means we can make the NOT remain in the scalar unit. Previously, we split 64-bit XNOR into two 32-bit XNOR, then lowered. Now, we get three instructions (s_not, v_xor, v_xor) rather than four in the case where either of the sources is a scalar 64-bit.

Add test cases to xnor.ll to attempt XNOR Vx, Sy and XNOR Sx, Vy. Also adding test that uses the opposite identity such that (~x ^ y) on the scalar unit (or vector for gfx906) can generate XNOR. This already worked, but I didn't see a test for it.

Differential: https://reviews.llvm.org/D55071
llvm-svn: 348075

5 years ago[llvm-readobj] Improve dynamic section iteration NFC.
Xing GUO [Sat, 1 Dec 2018 12:27:24 +0000 (12:27 +0000)]
[llvm-readobj] Improve dynamic section iteration NFC.

llvm-svn: 348074

5 years ago[SelectionDAG] Improve SimplifyDemandedBits to SimplifyDemandedVectorElts simplification
Simon Pilgrim [Sat, 1 Dec 2018 12:08:55 +0000 (12:08 +0000)]
[SelectionDAG] Improve SimplifyDemandedBits to SimplifyDemandedVectorElts simplification

D52935 introduced the ability for SimplifyDemandedBits to call SimplifyDemandedVectorElts through BITCASTs if the demanded bit mask entirely covered the sub element.

This patch relaxes this to demanding an element if we need any bit from it.

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

llvm-svn: 348073

5 years ago[InstCombine] Support ssub.sat canonicalization for non-splats
Nikita Popov [Sat, 1 Dec 2018 10:58:34 +0000 (10:58 +0000)]
[InstCombine] Support ssub.sat canonicalization for non-splats

Extend ssub.sat(X, C) -> sadd.sat(X, -C) canonicalization to also
support non-splat vector constants. This is done by generalizing
the implementation of the isNotMinSignedValue() helper to return
true for constants that are non-splat, but don't contain any
signed min elements.

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

llvm-svn: 348072

5 years agoCorrect indentation.
Bill Wendling [Sat, 1 Dec 2018 09:06:26 +0000 (09:06 +0000)]
Correct indentation.

llvm-svn: 348071

5 years agoSpecify constant context in constant emitter
Bill Wendling [Sat, 1 Dec 2018 08:29:36 +0000 (08:29 +0000)]
Specify constant context in constant emitter

The constant emitter may need to evaluate the expression in a constant context.
For exasmple, global initializer lists.

llvm-svn: 348070

5 years ago[X86] Remove stale FIXME from test case. NFC
Craig Topper [Sat, 1 Dec 2018 07:45:36 +0000 (07:45 +0000)]
[X86] Remove stale FIXME from test case. NFC

This was fixed in r346581. I just forgot to remove it.

llvm-svn: 348069

5 years ago[ThinLTO] Allow importing of functions with var args
Teresa Johnson [Sat, 1 Dec 2018 05:11:46 +0000 (05:11 +0000)]
[ThinLTO] Allow importing of functions with var args

Summary:
Follow up to D54270, which allowed importing of var args functions
unless they called va_start. As pointed out in the post-commit comments
on that patch, the inliner can handle functions that call va_start in
certain situations as well. Go ahead and enable importing of all var
args functions. Measurements on a large binary show that this increases
imports and binary size by an insignificant amount.

Reviewers: davidxl

Subscribers: mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, llvm-commits

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

llvm-svn: 348068

5 years ago[RISCV] Remove RV64I SLLW/SRLW/SRAW patterns and add new test cases
Alex Bradbury [Sat, 1 Dec 2018 05:00:00 +0000 (05:00 +0000)]
[RISCV] Remove RV64I SLLW/SRLW/SRAW patterns and add new test cases

As noted by Eli Friedman <https://reviews.llvm.org/D52977?id=168629#1315291>,
the RV64I shift patterns for SLLW/SRLW/SRAW make some incorrect assumptions.
SRAW assumed that (sext_inreg foo, i32) could only be produced when
sign-extended an i32. However, it can be produced by input such as:

define i64 @tricky_ashr(i64 %a, i64 %b) {
  %1 = shl i64 %a, 32
  %2 = ashr i64 %1, 32
  %3 = ashr i64 %2, %b
  ret i64 %3
}

It's important not to select sraw in the above case, because sraw only uses
bits lower 5 bits from the shift, while a shift of 32-63 would be valid.

Similarly, the patterns for srlw assumed (and foo, 0xffffffff) would only be
produced when zero-extending a value that was originally i32 in LLVM IR. This
is obviously incorrect.

This patch removes the SLLW/SRLW/SRAW shift patterns for the time being and
adds test cases that would demonstrate a miscompile if the incorrect patterns
were re-added.

llvm-svn: 348067

5 years ago[clangd] Recommit the "AnyScope" changes in requests.json by rCTE347753 (reverted...
Fangrui Song [Sat, 1 Dec 2018 01:57:15 +0000 (01:57 +0000)]
[clangd] Recommit the "AnyScope" changes in requests.json by rCTE347753 (reverted by rCTE347792)

This fixes IndexBenchmark tests.

llvm-svn: 348066