platform/upstream/llvm.git
3 years ago[AArch64][SME] Add SVE2 instructions added in SME
Cullen Rhodes [Mon, 19 Jul 2021 07:40:04 +0000 (07:40 +0000)]
[AArch64][SME] Add SVE2 instructions added in SME

This patch adds support for the following instructions:

    SCLAMP, UCLAMP, REV, DUP (predicate)

The reference can be found here:
https://developer.arm.com/documentation/ddi0602/2021-06

Reviewed By: kmclaughlin

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

3 years ago[ARM] Extend more reductions during lowering
David Green [Mon, 19 Jul 2021 07:58:03 +0000 (08:58 +0100)]
[ARM] Extend more reductions during lowering

This relaxes the VMLAV and VADDV reduction recognition code to handle
smaller than legal types, extending them as needed. That was already
handled for some reductions, this extends it to more types in a more
generic way. If a smaller than legal value is found it is extended to
the legal type as needed.

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

3 years ago[AArch64][SVE] Optimize bitcasts between unpacked half/i16 vectors.
Sander de Smalen [Mon, 19 Jul 2021 06:13:14 +0000 (07:13 +0100)]
[AArch64][SVE] Optimize bitcasts between unpacked half/i16 vectors.

The case for nxv2f32/nxv2i32 was already covered by D104573.
This patch builds on top of that by making the mechanism work for
nxv2[b]f16/nxv2i16, nxv4[b]f16/nxv4i16 as well.

Reviewed By: efriedma

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

3 years ago[llvm-objdump][WebAssembly] Fix llvm-objdump on files without symbols
Andy Wingo [Wed, 7 Jul 2021 09:13:13 +0000 (11:13 +0200)]
[llvm-objdump][WebAssembly] Fix llvm-objdump on files without symbols

If a file has no symbols, perhaps because it is a linked executable,
synthesize some symbols by walking the code section.  Otherwise the
disassembler will try to treat the whole code section as a function,
which won't parse.  Fixes https://bugs.llvm.org/show_bug.cgi?id=50957.

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

3 years ago[OpenMP][CMake] Fix an issue when there is space in the argument LIBOMPTARGET_LIT_ARGS
Shilei Tian [Mon, 19 Jul 2021 01:54:05 +0000 (21:54 -0400)]
[OpenMP][CMake] Fix an issue when there is space in the argument LIBOMPTARGET_LIT_ARGS

D106236 added a new CMake argument for `libomptarget` test, but when user's
input contains white spaces, CMake will add escape char to the final lit command,
which leads to an error. This patch converts the user's input `LIBOMPTARGET_LIT_ARGS`
into a local array, and then passes the array to the function.

Reviewed By: JonChesterfield

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

3 years ago[polly] Fix uses of deprecated overload of IRBuilder::CreateGEP.
Eli Friedman [Mon, 19 Jul 2021 01:41:48 +0000 (18:41 -0700)]
[polly] Fix uses of deprecated overload of IRBuilder::CreateGEP.

3 years ago[polly] Fix regression tests with POLLY_ENABLE_GPGPU_CODEGEN
Eli Friedman [Mon, 19 Jul 2021 01:37:05 +0000 (18:37 -0700)]
[polly] Fix regression tests with POLLY_ENABLE_GPGPU_CODEGEN

Apparently there was a latent bug here.

3 years agoOpaque pointer GEP fixes for BrainF example
David Blaikie [Mon, 19 Jul 2021 01:24:42 +0000 (18:24 -0700)]
Opaque pointer GEP fixes for BrainF example

3 years ago[mlir-tblgen] Slightly improve the diagnostic message in pattern match
Chia-hung Duan [Mon, 19 Jul 2021 01:00:40 +0000 (09:00 +0800)]
[mlir-tblgen] Slightly improve the diagnostic message in pattern match

Reviewed By: jpienaar

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

3 years ago[X86] Remove incorrect use of known bits in shuffle simplification.
Eli Friedman [Sat, 17 Jul 2021 18:11:41 +0000 (11:11 -0700)]
[X86] Remove incorrect use of known bits in shuffle simplification.

This reverts commit 2a419a0b9957ebac9e11e4b43bc9fbe42a9207df.

The result of a shufflevector must not propagate poison from any element
other than the one noted in the shuffle mask.

The regressions outside of fptoui-may-overflow.ll can probably be
recovered some other way; for example, using isGuaranteedNotToBePoison.

See discussion on https://reviews.llvm.org/D106053 for more background.

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

3 years ago[openmp][nfc] Simplify macros guarding math complex headers
Jon Chesterfield [Sun, 18 Jul 2021 22:30:33 +0000 (23:30 +0100)]
[openmp][nfc] Simplify macros guarding math complex headers

The `__CUDA__` macro is already defined for openmp/nvptx and is not used by
`__clang_cuda_complex_builtins.h`, so dropping that macro slightly simplifies
nvptx and avoids defining it on amdgcn (where it is likely to be harmful).

Also dropped a cplusplus test from a C++ header as compilation will have
failed on cmath earlier if it was included from C.

Reviewed By: jdoerfert, fodinabor

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

3 years ago[InstCombine] Fold IntToPtr/PtrToInt to bitcast
Krishna Kariya [Sun, 18 Jul 2021 21:13:25 +0000 (23:13 +0200)]
[InstCombine] Fold IntToPtr/PtrToInt to bitcast

The inttoptr/ptrtoint roundtrip optimization is not always correct.
We are working towards removing this optimization and adding support
to specific cases where this optimization works. This patch is the
first one on this line.

Consider the example:

    %i = ptrtoint i8* %X to i64
    %p = inttoptr i64 %i to i16*
    %cmp = icmp eq i8* %load, %p

In this specific case, the inttoptr/ptrtoint optimization is correct
as it only compares the pointer values. In this patch, we fold
inttoptr/ptrtoint to a bitcast (if src and dest types are different).

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

3 years ago[SCEV] Fix unused variable warning (NFC)
Nikita Popov [Sun, 18 Jul 2021 21:12:22 +0000 (23:12 +0200)]
[SCEV] Fix unused variable warning (NFC)

3 years ago[polly] Get rid of a couple uses of PointerType::getElementType().
Eli Friedman [Sun, 18 Jul 2021 20:50:07 +0000 (13:50 -0700)]
[polly] Get rid of a couple uses of PointerType::getElementType().

3 years ago[CSSPGO][NFC] Allow cl::ZeroOrMore for use-iterative-bfi-inference
Wenlei He [Sun, 18 Jul 2021 19:13:30 +0000 (12:13 -0700)]
[CSSPGO][NFC] Allow cl::ZeroOrMore for use-iterative-bfi-inference

3 years ago[ScalarEvolution] Remove uses of PointerType::getElementType.
Eli Friedman [Sun, 18 Jul 2021 20:12:25 +0000 (13:12 -0700)]
[ScalarEvolution] Remove uses of PointerType::getElementType.

3 years agoReland [Orc] Add verylazy example for C-bindings
Valentin Churavy [Sun, 18 Jul 2021 14:22:34 +0000 (16:22 +0200)]
Reland [Orc] Add verylazy example for C-bindings

This patch relands https://reviews.llvm.org/D104799, but fixes the
memory handling causing leak sanitizer failures.

This reverts commit a56fe117e04f7d4b953a4226af412dad59425fb5.

3 years ago[SimplifyCFG] add test to show miscompile from FoldBranchToCommonDest (PR51125); NFC
Sanjay Patel [Sun, 18 Jul 2021 17:34:43 +0000 (13:34 -0400)]
[SimplifyCFG] add test to show miscompile from FoldBranchToCommonDest (PR51125); NFC

3 years ago[SimplifyCFG] remove unnecessary state variable; NFC
Sanjay Patel [Sun, 18 Jul 2021 15:49:02 +0000 (11:49 -0400)]
[SimplifyCFG] remove unnecessary state variable; NFC

Keeping a marker for Changed might have made sense before
this code was refactored, but we never touch that variable
after initialization now.

3 years ago[DAG] DAGCombiner::foldSelectOfBinops - propagate the common flags to the merged...
Simon Pilgrim [Sun, 18 Jul 2021 17:38:48 +0000 (18:38 +0100)]
[DAG] DAGCombiner::foldSelectOfBinops - propagate the common flags to the merged binop

As discussed on D106058 - we were failing to keep the common flags. This matches the behaviour in InstCombinerImpl::foldSelectOpOp.

3 years ago[DAG] Enable foldSelectOfBinops on select(setcc(),binop(),binop()) calls
Simon Pilgrim [Sun, 18 Jul 2021 16:59:56 +0000 (17:59 +0100)]
[DAG] Enable foldSelectOfBinops on select(setcc(),binop(),binop()) calls

3 years ago[OpenMP][Offloading] Add a CMake argument LIBOMPTARGET_LIT_ARGS to control behavior...
Shilei Tian [Sun, 18 Jul 2021 17:16:03 +0000 (13:16 -0400)]
[OpenMP][Offloading] Add a CMake argument LIBOMPTARGET_LIT_ARGS to control behavior of libomptarget lit test

By default, `lit` uses all threads to invoke tests, which  can easily cause out
of memory on GPUs because most of OpenMP offloading test usually take about 1GB
GPU memory, but a typical GPU only has 4-8GB memory. This patch introduce a
CMake argument `LIBOMPTARGET_LIT_ARGS` to allow users to control the behavior of
`libomptarget` tests, similar to `LLVM_LIT_ARGS`.

Reviewed By: JonChesterfield

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

3 years ago[Inline] Add test for PR50589 (NFC)
Nikita Popov [Sun, 18 Jul 2021 16:37:40 +0000 (18:37 +0200)]
[Inline] Add test for PR50589 (NFC)

3 years ago[Cloning] Remove unused parameter from CloneAndPruneFunctionInto() (NFC)
Nikita Popov [Sun, 18 Jul 2021 15:45:00 +0000 (17:45 +0200)]
[Cloning] Remove unused parameter from CloneAndPruneFunctionInto() (NFC)

3 years ago[X86] Add i32 (shl (sr[la] exact sel(X,Y), C1), C2) test
Simon Pilgrim [Sun, 18 Jul 2021 15:48:40 +0000 (16:48 +0100)]
[X86] Add i32 (shl (sr[la] exact sel(X,Y),  C1), C2) test

Shows failure to fold sel(sra(X,C1),sra(Y,C1)) -> sra(sel(X,Y),C1) (and to retain the flags)

3 years ago[Analysis] Remove getLoopPackage (NFC)
Kazu Hirata [Sun, 18 Jul 2021 15:16:29 +0000 (08:16 -0700)]
[Analysis] Remove getLoopPackage (NFC)

The last use was removed on Apr 28, 2014 in commit
c5a3139ebd0d60617629da83c6c66261b66c75e5.

3 years ago[NVPTX] Add select(cc,binop(),binop()) fast-math tests
Simon Pilgrim [Sun, 18 Jul 2021 14:30:11 +0000 (15:30 +0100)]
[NVPTX] Add select(cc,binop(),binop()) fast-math tests

As discussed on D106058 - we're not propagating the common flags to the merged binop

3 years ago[analyzer] Handle std::make_unique
Deep Majumder [Sun, 18 Jul 2021 14:24:41 +0000 (19:54 +0530)]
[analyzer] Handle std::make_unique

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

3 years agoRevert "[Orc] Add verylazy example for C-bindings"
Valentin Churavy [Sun, 18 Jul 2021 14:21:37 +0000 (16:21 +0200)]
Revert "[Orc] Add verylazy example for C-bindings"

Broke ASAN buildbot, will reland with fixes

This reverts commit b5a6ad8c893a642bcb08ab81b251952c545405d9.

3 years ago[DAG] Move select(cc, binop(), binop()) folds into DAGCombiner::foldSelectOfBinops...
Simon Pilgrim [Sun, 18 Jul 2021 13:54:25 +0000 (14:54 +0100)]
[DAG] Move select(cc, binop(), binop()) folds into DAGCombiner::foldSelectOfBinops. NFCI.

I'm going to extend the functionality started in D106058 so move the folds into their own method to reduce the amount of code in DAGCombiner::visitSELECT

3 years ago[OpenMP][Offloading] Add -g when compiling deviceRTLs in debug mode
Shilei Tian [Sun, 18 Jul 2021 13:34:35 +0000 (09:34 -0400)]
[OpenMP][Offloading] Add -g when compiling deviceRTLs in debug mode

Currently when we compile the project in debug mode, `-g` will not be added to
compilation flag. The bc files generated in different mode are of different size.
When using GPU debuggers like `cuda-gdb`, it is expected to provide more info
with a debug version of bc lib.

Reviewed By: JonChesterfield

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

3 years ago[X86][SSE] matchShuffleWithPACK - avoid poison pollution from bitcasting multiple...
Simon Pilgrim [Sun, 18 Jul 2021 13:25:28 +0000 (14:25 +0100)]
[X86][SSE] matchShuffleWithPACK - avoid poison pollution from bitcasting multiple elements together.

D106053 exposed that we've not been taking into account that by bitcasting smaller elements together and then performing a ComputeKnownBits on the result we'd be allowing a poison element to influence other neighbouring elements being used in the pack. Instead we now peek through any existing bitcast to ensure that the source type already matches the width source of the pack node we're trying to match.

This has also been a chance to stop matchShuffleWithPACK creating unused nodes on the fly which could affect oneuse tests during shuffle lowering/combining.

The only regression we're seeing is due to being unable to peek through a bitcast as its on the other side of a extract_subvector - which should go away once we finally allow shuffle combining across different vector widths (by making matchShuffleWithPACK using const SelectionDAG& we've gotten closer to this - see PR45974).

3 years ago[Orc] Remove unnecessary <string> include dependency from Orc headers. NFC.
Simon Pilgrim [Sat, 17 Jul 2021 19:27:57 +0000 (20:27 +0100)]
[Orc] Remove unnecessary <string> include dependency from Orc headers. NFC.

At most these use the StringRef/Twine wrappers and don't have any implicit uses of std::string.

Move the include down to any cpp implementation where std::string is actually used.

3 years ago[InstCombine] fold reassociative FP add into start value of fadd reduction
Sanjay Patel [Sat, 17 Jul 2021 22:36:36 +0000 (18:36 -0400)]
[InstCombine] fold reassociative FP add into start value of fadd reduction

This pattern is visible in unrolled and vectorized loops.
Although the backend seems to be able to reassociate to
ideal form in the examples I looked at, we might as well
do that in IR for efficiency.

3 years ago[InstCombine][test] add tests for fadd reductions; NFC
Sanjay Patel [Fri, 16 Jul 2021 20:29:56 +0000 (16:29 -0400)]
[InstCombine][test] add tests for fadd reductions; NFC

3 years ago[Orc] Add verylazy example for C-bindings
Valentin Churavy [Sun, 18 Jul 2021 10:07:05 +0000 (12:07 +0200)]
[Orc] Add verylazy example for C-bindings

Still WIP, based on the Kaleidoscope/BuildingAJIT/Chapter4.

Reviewed By: lhames

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

3 years ago[MLIR][CAPI] On MINGW don't link against libMLIR
Valentin Churavy [Sun, 18 Jul 2021 10:05:46 +0000 (12:05 +0200)]
[MLIR][CAPI] On MINGW don't link against libMLIR

Cross-compiling MLIR with MINGW failed because adding libMLIR to the libraries to link against would lead to duplicated symbols.

```
[09:28:14] ninja: job failed: : && /opt/bin/i686-w64-mingw32-libgfortran4-cxx03/i686-w64-mingw32-g++ --sysroot=/opt/i686-w64-mingw32/i686-w64-mingw32/sys-root/  -remap -D__USING_SJLJ_EXCEPTIONS__ -D__CRT__NO_INLINE -fno-gnu-unique -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wno-comment  -O2 -DNDEBUG   -shared -o bin/libMLIRPublicAPI.dll -Wl,--out-implib,lib/libMLIRPublicAPI.dll.a -Wl,--major-image-version,0,--minor-image-version,0 tools/mlir/lib/CAPI/IR/CMakeFiles/obj.MLIRCAPIIR.dir/AffineExpr.cpp.obj tools/mlir/lib/CAPI/IR/CMakeFiles/obj.MLIRCAPIIR.dir/AffineMap.cpp.obj tools/mlir/lib/CAPI/IR/CMakeFiles/obj.MLIRCAPIIR.dir/BuiltinAttributes.cpp.obj tools/mlir/lib/CAPI/IR/CMakeFiles/obj.MLIRCAPIIR.dir/BuiltinTypes.cpp.obj tools/mlir/lib/CAPI/IR/CMakeFiles/obj.MLIRCAPIIR.dir/Diagnostics.cpp.obj tools/mlir/lib/CAPI/IR/CMakeFiles/obj.MLIRCAPIIR.dir/IntegerSet.cpp.obj tools/mlir/lib/CAPI/IR/CMakeFiles/obj.MLIRCAPIIR.dir/IR.cpp.obj tools/mlir/lib/CAPI/IR/CMakeFiles/obj.MLIRCAPIIR.dir/Pass.cpp.obj tools/mlir/lib/CAPI/IR/CMakeFiles/obj.MLIRCAPIIR.dir/Support.cpp.obj tools/mlir/lib/CAPI/Registration/CMakeFiles/obj.MLIRCAPIRegistration.dir/Registration.cpp.obj tools/mlir/lib/CAPI/Dialect/CMakeFiles/obj.MLIRCAPILinalg.dir/Linalg.cpp.obj tools/mlir/lib/CAPI/Dialect/CMakeFiles/obj.MLIRCAPISCF.dir/SCF.cpp.obj tools/mlir/lib/CAPI/Dialect/CMakeFiles/obj.MLIRCAPIShape.dir/Shape.cpp.obj tools/mlir/lib/CAPI/Dialect/CMakeFiles/obj.MLIRCAPIStandard.dir/Standard.cpp.obj tools/mlir/lib/CAPI/Dialect/CMakeFiles/obj.MLIRCAPITensor.dir/Tensor.cpp.obj tools/mlir/lib/CAPI/Transforms/CMakeFiles/obj.MLIRCAPITransforms.dir/Passes.cpp.obj  lib/libMLIR.dll.a  lib/libMLIRIR.a  lib/libMLIRParser.a  lib/libMLIRSupport.a  lib/libMLIRPass.a  lib/libMLIRCAPIIR.a  lib/libMLIRAffine.a  lib/libMLIRAffineEDSC.a  lib/libMLIRAffineTransforms.a  lib/libMLIRAffineUtils.a  lib/libMLIRArmNeon.a  lib/libMLIRArmSVE.a  lib/libMLIRAsync.a  lib/libMLIRAsyncTransforms.a  lib/libMLIRAVX512.a  lib/libMLIRComplex.a  lib/libMLIRGPU.a  lib/libMLIRLinalgAnalysis.a  lib/libMLIRLinalgEDSC.a  lib/libMLIRLinalg.a  lib/libMLIRLinalgTransforms.a  lib/libMLIRLinalgUtils.a  lib/libMLIRLLVMIRTransforms.a  lib/libMLIRLLVMIR.a  lib/libMLIRLLVMAVX512.a  lib/libMLIRLLVMArmNeon.a  lib/libMLIRLLVMArmSVE.a  lib/libMLIRNVVMIR.a  lib/libMLIRROCDLIR.a  lib/libMLIROpenACC.a  lib/libMLIROpenMP.a  lib/libMLIRPDL.a  lib/libMLIRPDLInterp.a  lib/libMLIRQuant.a  lib/libMLIRSCF.a  lib/libMLIRSCFTransforms.a  lib/libMLIRSDBM.a  lib/libMLIRShape.a  lib/libMLIRShapeOpsTransforms.a  lib/libMLIRSPIRV.a  lib/libMLIRSPIRVModuleCombiner.a  lib/libMLIRSPIRVConversion.a  lib/libMLIRSPIRVTransforms.a  lib/libMLIRSPIRVUtils.a  lib/libMLIRStandard.a  lib/libMLIRStandardOpsTransforms.a  lib/libMLIRTensor.a  lib/libMLIRTensorTransforms.a  lib/libMLIRTosa.a  lib/libMLIRTosaTransforms.a  lib/libMLIRVector.a  lib/libMLIRCAPIIR.a  lib/libMLIRLinalg.a  lib/libMLIRCAPIIR.a  lib/libMLIRSCF.a  lib/libMLIRCAPIIR.a  lib/libMLIRShape.a  lib/libMLIRCAPIIR.a  lib/libMLIRStandard.a  lib/libMLIRCAPIIR.a  lib/libMLIRTensor.a  lib/libMLIRTransforms.a  lib/libMLIRAsync.a  lib/libMLIRAffineUtils.a  lib/libMLIRLinalgAnalysis.a  lib/libMLIRLinalgEDSC.a  lib/libMLIRVectorToSCF.a  lib/libMLIRVectorToLLVM.a  lib/libMLIRArmNeonToLLVM.a  lib/libMLIRArmNeon.a  lib/libMLIRLLVMArmNeon.a  lib/libMLIRAVX512ToLLVM.a  lib/libMLIRAVX512.a  lib/libMLIRLLVMAVX512.a  lib/libMLIRArmSVEToLLVM.a  lib/libMLIRArmSVE.a  lib/libMLIRLLVMArmSVE.a  lib/libMLIRStandardToLLVM.a  lib/libMLIRTargetLLVMIRModuleTranslation.a  lib/libMLIRLLVMIRTransforms.a  lib/libMLIRLLVMIR.a  lib/libMLIROpenMP.a  lib/libMLIRTranslation.a  lib/libMLIRSPIRVConversion.a  lib/libMLIRSPIRV.a  lib/libMLIRParser.a  lib/libMLIRTransforms.a  lib/libMLIRVector.a  lib/libMLIRAffineEDSC.a  lib/libMLIRLinalg.a  lib/libMLIRCopyOpInterface.a  lib/libMLIRTosa.a  lib/libMLIRQuant.a  lib/libMLIRTransformUtils.a  lib/libMLIRLoopAnalysis.a  lib/libMLIRPresburger.a  lib/libMLIRRewrite.a  lib/libMLIRPDLToPDLInterp.a  lib/libMLIRPass.a  lib/libMLIRAnalysis.a  lib/libMLIRAffine.a  lib/libMLIRSCF.a  lib/libMLIRLoopLikeInterface.a  lib/libMLIRPDLInterp.a  lib/libMLIRPDL.a  lib/libMLIRInferTypeOpInterface.a  lib/libMLIRStandard.a  lib/libMLIRTensor.a  lib/libMLIREDSC.a  lib/libMLIRCastInterfaces.a  lib/libMLIRVectorInterfaces.a  lib/libMLIRSideEffectInterfaces.a  lib/libMLIRDialect.a  lib/libMLIRViewLikeInterface.a  lib/libMLIRCallInterfaces.a  lib/libMLIRControlFlowInterfaces.a  lib/libMLIRIR.a  lib/libMLIRSupport.a  lib/libLLVM.dll.a  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && :
[09:28:14] lib/libMLIRAffine.a(AffineOps.cpp.obj):AffineOps.cpp:(.text+0x1d600): multiple definition of `mlir::AffineDialect::initialize()'
[09:28:14] lib/libMLIR.dll.a(d008729.o):(.text+0x0): first defined here
[09:28:14] lib/libMLIRArmSVE.a(ArmSVEDialect.cpp.obj):ArmSVEDialect.cpp:(.text+0x5be0): multiple definition of `mlir::arm_sve::ArmSVEDialect::initialize()'
[09:28:14] lib/libMLIR.dll.a(d039020.o):(.text+0x0): first defined here
[09:28:14] lib/libMLIRAsync.a(Async.cpp.obj):Async.cpp:(.text+0xc0d0): multiple definition of `mlir::async::AsyncDialect::initialize()'
[09:28:14] lib/libMLIR.dll.a(d023173.o):(.text+0x0): first defined here
...
```

Reviewed By: stellaraccident

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

3 years ago[analyzer] Handle std::swap for std::unique_ptr
Deep Majumder [Sun, 18 Jul 2021 09:10:31 +0000 (14:40 +0530)]
[analyzer] Handle std::swap for std::unique_ptr

This patch handles the `std::swap` function specialization
for `std::unique_ptr`. Implemented to be very similar to
how `swap` method is handled

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

3 years ago[RISCV] Add more i32 srem/sdiv with power of 2 constant tests. NFC
Craig Topper [Sun, 18 Jul 2021 06:48:35 +0000 (23:48 -0700)]
[RISCV] Add more i32 srem/sdiv with power of 2 constant tests. NFC

Add a small power 2 srem test to match existing sdiv test. Add
larger power of 2 test to both.

The larger constant test shows materialization of a constant
for an AND in the RV64 code. We should be using W shift instructions
to match the RV32 code.

3 years agoDebugInfo: Name class templates with default arguments consistently (both direct...
David Blaikie [Sun, 18 Jul 2021 06:38:33 +0000 (23:38 -0700)]
DebugInfo: Name class templates with default arguments consistently (both direct naming, and as a template argument for a function template)

It's noteworthy that GCC has the same bug here, which is a bit
surprising. Both Clang and GCC's bug is only for function template
arguments that are themselves templates with default template arguments
(f1<t1<int[, missing_default_here]>>). Probably because function name
matching isn't generally necessary - whereas type matching is necessary
for DWARF consumers to associate declarations and definitions across
translation units, so the bug's been addressed there already - but
continued to exist for function templates since it's fairly benign
there.

I came across this while working on a change that could reconstitute
these pretty printed names based on the rest of the DWARF, reducing the
size of the DWARF by not having to encode all the template parameters in
the name string. That reconstitution code can't tell the difference
between a defaulted argument or not, so couldn't create the current
buggy-ish output.

Making the names more consistent between direct and indirect references,
and between function and class templates seems all to the good.

(I fixed the function template version of this a few years back in
9fdd09a4ccd01feb8e00be22b17e944e46807746 - clearly I should've looked
more closely and generalized the code better so it only had to be fixed
once - well, doing that here now)

3 years ago[GlobalISel] Fix known bits for G_BSWAP and B_BITREVERSE not doing anything.
Amara Emerson [Sun, 18 Jul 2021 06:03:52 +0000 (23:03 -0700)]
[GlobalISel] Fix known bits for G_BSWAP and B_BITREVERSE not doing anything.

llvm::KnownBits::byteSwap() and reverse() don't modify in-place, so
we weren't actually computing anything. This was causing a miscompile on an
arm64 stage2 bootstrap clang build.

3 years ago[Sanitizers] FutexWake fix typo for FreeBSD code path.
David Carlier [Sun, 18 Jul 2021 06:02:21 +0000 (07:02 +0100)]
[Sanitizers] FutexWake fix typo for FreeBSD code path.

3 years ago[AArch64][GlobalISel] Legalize bswap <2 x i16>
Jon Roelofs [Fri, 9 Jul 2021 16:46:57 +0000 (09:46 -0700)]
[AArch64][GlobalISel] Legalize bswap <2 x i16>

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

3 years ago[ExecutionEngine] Fix GEP type
Nikita Popov [Sat, 17 Jul 2021 21:43:36 +0000 (23:43 +0200)]
[ExecutionEngine] Fix GEP type

Fix bug introduced in 2c68ecccc9ee1fb37eca318a9b3572813a137cd5,
the GEP type was off-by-ptr. Apparently I didn't run the MLIR
tests.

3 years ago[ARM] Lower non-extended small gathers via truncated gathers.
David Green [Sat, 17 Jul 2021 21:38:31 +0000 (22:38 +0100)]
[ARM] Lower non-extended small gathers via truncated gathers.

Corollary to 1113e06821e6baffc84b8caf96a28bf62e6d28dc this allows us to
match gather that dont produce a full vector width results. They use an
extended gather which is truncated back to the original type.

3 years ago[AArch64] Prepare for changes to STEP_VECTOR.
Eli Friedman [Mon, 12 Jul 2021 21:39:45 +0000 (14:39 -0700)]
[AArch64] Prepare for changes to STEP_VECTOR.

Rewrite patterns to assume that the operand of STEP_VECTOR is a
constant. The old patterns will stop working when the operand is changed
from a Constant to a TargetConstant. (See D105673.)

Add test coverage for certain patterns that weren't exercised by
existing regression tests.

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

3 years ago[IRBuilder] Deprecate CreateGEP() without element type
Nikita Popov [Sat, 17 Jul 2021 19:29:05 +0000 (21:29 +0200)]
[IRBuilder] Deprecate CreateGEP() without element type

This API is incompatible with opaque pointers and deprecated in
favor of the version that accepts an explicit element type.

Also remove the separate overload for a single index, as this is
already covered by the ArrayRef overload.

3 years ago[OpaquePtr] Remove uses of CreateGEP() without element type
Nikita Popov [Sat, 17 Jul 2021 20:03:11 +0000 (22:03 +0200)]
[OpaquePtr] Remove uses of CreateGEP() without element type

Remove uses of to-be-deprecated API. In cases where the correct
element type was not immediately obvious to me, fall back to
explicit getPointerElementType().

3 years ago[IRBuilder] Deprecate CreateInBoundsGEP() without element type
Nikita Popov [Sat, 17 Jul 2021 16:50:34 +0000 (18:50 +0200)]
[IRBuilder] Deprecate CreateInBoundsGEP() without element type

This API is incompatible with opaque pointers and deprecated in
favor of the version that accepts an explicit element type.

3 years ago[OpaquePtr] Remove uses of CreateInBoundsGEP() without element type
Nikita Popov [Sat, 17 Jul 2021 16:59:11 +0000 (18:59 +0200)]
[OpaquePtr] Remove uses of CreateInBoundsGEP() without element type

Remove uses of to-be-deprecated API.

Unfortunately this one mostly just makes the use of
getPointerElementType() explicit, as the correct type to use
wasn't immediately available (deriving it from QualType is left
as an excercise to the reader).

3 years ago[RISCV] Teach computeKnownBitsForTargetNode that VLENB will never be more than 65536/8.
Craig Topper [Sat, 17 Jul 2021 18:24:20 +0000 (11:24 -0700)]
[RISCV] Teach computeKnownBitsForTargetNode that VLENB will never be more than 65536/8.

3 years ago[libcxx] Updated test and seemingly incorrect comment from it.
Vy Nguyen [Thu, 15 Jul 2021 19:51:34 +0000 (15:51 -0400)]
[libcxx] Updated test and seemingly incorrect comment from it.

Background: https://reviews.llvm.org/D82490#inline-1007741

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

3 years ago[lld-macho] Have ICF operate on all sections at once
Jez Ng [Sat, 17 Jul 2021 17:42:26 +0000 (13:42 -0400)]
[lld-macho] Have ICF operate on all sections at once

ICF previously operated only within a given OutputSection. We would
merge all CFStrings first, then merge all regular code sections in a
second phase. This worked fine since CFStrings would never reference
regular `__text` sections. However, I would like to expand ICF to merge
functions that reference unwind info. Unwind info references the LSDA
section, which can in turn reference the `__text` section, so we cannot
perform ICF in phases.

In order to have ICF operate on InputSections spanning multiple
OutputSections, we need a way to distinguish InputSections that are
destined for different OutputSections, so that we don't fold across
section boundaries. We achieve this by creating OutputSections early,
and setting `InputSection::parent` to point to them. This is what
LLD-ELF does. (This change should also make it easier to implement the
`section$start$` symbols.)

This diff also folds InputSections w/o checking their flags, which I
think is the right behavior -- if they are destined for the same
OutputSection, they will have the same flags in the output (even if
their input flags differ). I.e. the `parent` pointer check subsumes the
`flags` check. In practice this has nearly no effect (ICF did not become
any more effective on chromium_framework).

I've also updated ICF.cpp's block comment to better reflect its current
status.

Reviewed By: #lld-macho, smeenai

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

3 years ago[libcxx][ranges] makes `ranges::subrange` a borrowed range
Christopher Di Bella [Sat, 17 Jul 2021 01:35:42 +0000 (01:35 +0000)]
[libcxx][ranges] makes `ranges::subrange` a borrowed range

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

3 years ago[AbstractAttributor] Fix two issues in folding __kmpc_is_spmd_exec_mode
Shilei Tian [Sat, 17 Jul 2021 17:13:30 +0000 (13:13 -0400)]
[AbstractAttributor] Fix two issues in folding __kmpc_is_spmd_exec_mode

This patch fixed two issues found when folding `__kmpc_is_spmd_exec_mode`:
1. When the reaching kernels are empty, it should not fold to generic mode.
2. When creating AA for the caller when updating information, the dependency
   should be required.

Reviewed By: ye-luo

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

3 years ago[IRBuilder] Deprecate CreateStructGEP() without element type
Nikita Popov [Sat, 17 Jul 2021 16:33:19 +0000 (18:33 +0200)]
[IRBuilder] Deprecate CreateStructGEP() without element type

This API is incompatible with opaque pointers and deprecated in
favor of the version that accepts an explicit element type.

3 years ago[OpaquePtr] Remove uses of CreateStructGEP() without element type
Nikita Popov [Sat, 17 Jul 2021 16:44:56 +0000 (18:44 +0200)]
[OpaquePtr] Remove uses of CreateStructGEP() without element type

Remove uses of to-be-deprecated API.

3 years ago[RISCV][RVV] Precommit a test case for D105684
ShihPo Hung [Fri, 9 Jul 2021 08:44:15 +0000 (16:44 +0800)]
[RISCV][RVV] Precommit a test case for D105684

Reviewed By: frasercrmck

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

3 years ago[IRBuilder] Deprecate CreateConstGEP1_32() without element type
Nikita Popov [Sat, 17 Jul 2021 15:09:43 +0000 (17:09 +0200)]
[IRBuilder] Deprecate CreateConstGEP1_32() without element type

This API is incompatible with opaque pointers and deprecated in
favor of the version that accepts an explicit element type.

3 years ago[OpaquePtr] Remove uses of CreateConstGEP1_32() without element type
Nikita Popov [Sat, 17 Jul 2021 16:25:31 +0000 (18:25 +0200)]
[OpaquePtr] Remove uses of CreateConstGEP1_32() without element type

Remove uses of to-be-deprecated API. I've fallen back to calling
getPointerElementType() in some cases where the correct type wasn't
immediately obvious to me.

3 years ago[DebugInfo] Remove unnecessary <string> include dependency from DebugInfo headers...
Simon Pilgrim [Sat, 17 Jul 2021 15:55:51 +0000 (16:55 +0100)]
[DebugInfo] Remove unnecessary <string> include dependency from DebugInfo headers. NFC.

At most these use the StringRef/Twine wrappers and don't have any implicit uses of std::string.

Move the include down to any cpp implementation where std::string is actually used.

3 years ago[IRBuilder] Deprecate CreateConstInBoundsGEP1_64() without element type
Nikita Popov [Sat, 17 Jul 2021 14:46:29 +0000 (16:46 +0200)]
[IRBuilder] Deprecate CreateConstInBoundsGEP1_64() without element type

This API is incompatible with opaque pointers and deprecated in
favor of the version that accepts an explicit element type.

3 years ago[OpaquePtr] Remove uses of CGF.Builder.CreateConstInBoundsGEP1_64() without type
Nikita Popov [Sat, 17 Jul 2021 15:00:00 +0000 (17:00 +0200)]
[OpaquePtr] Remove uses of CGF.Builder.CreateConstInBoundsGEP1_64() without type

Remove uses of to-be-deprecated API.

3 years ago[IRBuilder] Deprecate CreateConstGEP1_64() without element type
Nikita Popov [Sat, 17 Jul 2021 14:25:55 +0000 (16:25 +0200)]
[IRBuilder] Deprecate CreateConstGEP1_64() without element type

This API is incompatible with opaque pointers and deprecated in
favor of the version that accepts an explicit element type.

3 years ago[OpaquePtr] Remove uses of CreateConstGEP1_64() without element type
Nikita Popov [Sat, 17 Jul 2021 14:38:43 +0000 (16:38 +0200)]
[OpaquePtr] Remove uses of CreateConstGEP1_64() without element type

Remove uses of to-be-deprecated API.

3 years ago[IRBuilder] Deprecate CreateConstInBoundsGEP2_64() without element type
Nikita Popov [Sat, 17 Jul 2021 14:06:10 +0000 (16:06 +0200)]
[IRBuilder] Deprecate CreateConstInBoundsGEP2_64() without element type

This API is incompatible with opaque pointers and deprecated in
favor of the version that accepts an explicit element type.

3 years ago[OpaquePtr] Remove uses of CreateConstInBoundsGEP2_64() without type
Nikita Popov [Sat, 17 Jul 2021 14:17:39 +0000 (16:17 +0200)]
[OpaquePtr] Remove uses of CreateConstInBoundsGEP2_64() without type

Remove uses of to-be-deprecated API.

3 years ago[IRBuilder] Deprecate CreateConstGEP2_64() without element type
Nikita Popov [Sat, 17 Jul 2021 14:03:14 +0000 (16:03 +0200)]
[IRBuilder] Deprecate CreateConstGEP2_64() without element type

This API is incompatible with opaque pointers and deprecated in
favor of the version that accepts an explicit element type.

3 years ago[Analaysis, CodeGen] Remove getHotSucc (NFC)
Kazu Hirata [Sat, 17 Jul 2021 14:31:36 +0000 (07:31 -0700)]
[Analaysis, CodeGen] Remove getHotSucc (NFC)

These functions seem to be unused for at least 5 years.

3 years ago[IR] Don't accept null type in ConstantExpr::getGetElementPtr()
Nikita Popov [Sat, 17 Jul 2021 13:30:55 +0000 (15:30 +0200)]
[IR] Don't accept null type in ConstantExpr::getGetElementPtr()

This is the same change as D105653, but for the constant expression
version of the API.

3 years ago[BPF] Use elementtype attribute for preserve.array/struct.index intrinsics
Nikita Popov [Fri, 16 Jul 2021 18:26:40 +0000 (20:26 +0200)]
[BPF] Use elementtype attribute for preserve.array/struct.index intrinsics

Use the elementtype attribute introduced in D105407 for the
llvm.preserve.array/struct.index intrinsics. It carries the
element type of the GEP these intrinsics effectively encode.

This patch:

 * Adds a verifier check that the attribute is required.
 * Adds it in the IRBuilder methods for these intrinsics.
 * Autoupgrades old bitcode without the attribute.
 * Updates the lowering code to use the attribute rather than
   the pointer element type.
 * Updates lots of tests to specify the attribute.
 * Adds -force-opaque-pointers to the intrinsic-array.ll test
   to demonstrate they work now.

https://reviews.llvm.org/D106184

3 years ago[RISCV] Manually emit the best shift for VSCALE lowering to improve codegen.
Craig Topper [Sat, 17 Jul 2021 07:24:48 +0000 (00:24 -0700)]
[RISCV] Manually emit the best shift for VSCALE lowering to improve codegen.

We assume VLENB is a multiple of 8 and previously relied on shift
pairs being optimized to an AND+SHL/SHR and computeKnownBits
removing the AND. This doesn't happen if (vlenb >> 3) gets CSEd
to have multiple uses. This patch manually emits the best shift
to workaround this.

3 years ago[sanitizers] Fix building on case sensitive mingw platforms
Martin Storsjö [Sat, 17 Jul 2021 06:31:54 +0000 (09:31 +0300)]
[sanitizers] Fix building on case sensitive mingw platforms

Make synchronization.lib all lowercase name for mingw, where casing matters.

This fixes building after 6d160abd7eba73031a2af500981f8ef44bd75ee4.

3 years ago[OpenMP] Codegen aggregate for outlined function captures
Giorgis Georgakoudis [Tue, 15 Jun 2021 17:30:12 +0000 (10:30 -0700)]
[OpenMP] Codegen aggregate for outlined function captures

Parallel regions are outlined as functions with capture variables explicitly generated as distinct parameters in the function's argument list. That complicates the fork_call interface in the OpenMP runtime: (1) the fork_call is variadic since there is a variable number of arguments to forward to the outlined function, (2) wrapping/unwrapping arguments happens in the OpenMP runtime, which is sub-optimal, has been a source of ABI bugs, and has a hardcoded limit (16) in the number of arguments, (3)  forwarded arguments must cast to pointer types, which complicates debugging. This patch avoids those issues by aggregating captured arguments in a struct to pass to the fork_call.

Reviewed By: jdoerfert

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

3 years ago[ORC] Fix typo in declaration
Lang Hames [Sun, 11 Jul 2021 02:21:04 +0000 (12:21 +1000)]
[ORC] Fix typo in declaration

3 years ago[mlir][vector] Remove vector.transfer_read/write to LLVM lowering
Matthias Springer [Sat, 17 Jul 2021 05:01:48 +0000 (14:01 +0900)]
[mlir][vector] Remove vector.transfer_read/write to LLVM lowering

This simplifies the vector to LLVM lowering. Previously, both vector.load/store and vector.transfer_read/write lowered directly to LLVM. With this commit, there is a single path to LLVM vector load/store instructions and vector.transfer_read/write ops must first be lowered to vector.load/store ops.

* Remove vector.transfer_read/write to LLVM lowering.
* Allow non-unit memref strides on all but the most minor dimension for vector.load/store ops.
* Add maxTransferRank option to populateVectorTransferLoweringPatterns.
* vector.transfer_reads with changing element type can no longer be lowered to LLVM. (This functionality is needed only for SPIRV.)

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

3 years ago[mlir][vector] Refactor TransferReadToVectorLoadLowering
Matthias Springer [Sat, 17 Jul 2021 04:52:20 +0000 (13:52 +0900)]
[mlir][vector] Refactor TransferReadToVectorLoadLowering

* TransferReadToVectorLoadLowering no longer generates memref.load ops.
* Add new pattern VectorLoadToMemrefLoadLowering that lowers scalar vector.loads to memref.loads.
* Add vector::BroadcastOp canonicalization pattern that folds broadcast chains.

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

3 years ago[RISCV] Make VLEN no greater than 65536
jacquesguan [Sat, 17 Jul 2021 04:45:34 +0000 (12:45 +0800)]
[RISCV] Make VLEN no greater than 65536

Reviewed By: craig.topper

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

3 years ago[ORC] Remove LLVM-side MachO Platform runtime support.
Lang Hames [Sun, 11 Jul 2021 01:35:55 +0000 (11:35 +1000)]
[ORC] Remove LLVM-side MachO Platform runtime support.

Support for this functionality is moving to the ORC runtime.

3 years ago[AMDGPU] Tidy SReg/SGPR definitions using template class
Carl Ritson [Sat, 17 Jul 2021 02:26:04 +0000 (11:26 +0900)]
[AMDGPU] Tidy SReg/SGPR definitions using template class

Use a multiclass to consistently define SReg/SGPR/TTMP register classes.
Add missing TTMP registers for 96b, 160b, 192b, 224b.

Reviewed By: foad

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

3 years ago[Analysis] Remove isJoinDivergent (NFC)
Kazu Hirata [Sat, 17 Jul 2021 01:23:17 +0000 (18:23 -0700)]
[Analysis] Remove isJoinDivergent (NFC)

The last use was removed on Sep 30, 2020 in commit
05ae04c396519cca9ef50d3b9cafb0cd9c87d1d7.

3 years ago[CSSPGO] Turn on iterative-BFI for CSSPGO
Wenlei He [Sat, 17 Jul 2021 00:04:48 +0000 (17:04 -0700)]
[CSSPGO] Turn on iterative-BFI for CSSPGO

Iterative-BFI produces better count quality and performance when evaluated on internal benchmarks. Turning it on by default now for CSSPGO. We can consider turn it on by default for AutoFDO as well in the future.

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

3 years agoMips/GlobalISel: Remove leftover dead code
Matt Arsenault [Fri, 16 Jul 2021 23:33:49 +0000 (19:33 -0400)]
Mips/GlobalISel: Remove leftover dead code

3 years agoAMDGPU/GlobalISel: Add a few tests for struct arguments
Matt Arsenault [Fri, 16 Jul 2021 22:35:26 +0000 (18:35 -0400)]
AMDGPU/GlobalISel: Add a few tests for struct arguments

Test structs with pointers and vectors of pointers since this stresses
a future patch.

3 years agoAMDGPU/GlobalISel: Fix some incorrect memory types in tests
Matt Arsenault [Fri, 16 Jul 2021 17:15:24 +0000 (13:15 -0400)]
AMDGPU/GlobalISel: Fix some incorrect memory types in tests

3 years ago[NFC][compiler-rt][test] when using ptrauth, strip before checking if poisoned
Emily Shi [Sat, 17 Jul 2021 00:03:47 +0000 (17:03 -0700)]
[NFC][compiler-rt][test] when using ptrauth, strip before checking if poisoned

ptrauth stores info in the address of functions, so it's not the right address we should check if poisoned

rdar://75246928

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

3 years ago[trace][intel pt] Implement the Intel PT cursor
Walter Erquinigo [Tue, 29 Jun 2021 21:03:30 +0000 (14:03 -0700)]
[trace][intel pt] Implement the Intel PT cursor

D104422 added the interface for TraceCursor, which is the main way to traverse instructions in a trace. This diff implements the corresponding cursor class for Intel PT and deletes the now obsolete code.

Besides that, the logic for the "thread trace dump instructions" was adapted to use this cursor (pretty much I ended up moving code from Trace.cpp to TraceCursor.cpp). The command by default traverses the instructions backwards, and if the user passes --forwards, then it's not forwards. More information about that is in the Options.td file.

Regarding the Intel PT cursor. All Intel PT cursors for the same thread share the same DecodedThread instance. I'm not yet implementing lazy decoding because we don't need it. That'll be for later. For the time being, the entire thread trace is decoded when the first cursor for that thread is requested.

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

3 years ago[CSSPGO] Turn on unique linkage name by default for pseudo probe.
Hongtao Yu [Fri, 16 Jul 2021 21:26:03 +0000 (14:26 -0700)]
[CSSPGO] Turn on unique linkage name by default for pseudo probe.

Turning on -funique-internal-linkage-names when -fpseudo-probe-for-profiling is on, unless -fno-unique-internal-linkage-names is specified.

Reviewed By: wenlei

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

3 years ago[ScalarEvolution] Fix overflow in computeBECount.
Eli Friedman [Fri, 9 Jul 2021 21:10:44 +0000 (14:10 -0700)]
[ScalarEvolution] Fix overflow in computeBECount.

The current implementation of computeBECount doesn't account for the
possibility that adding "Stride - 1" to Delta might overflow. For almost
all loops, it doesn't, but it's not actually proven anywhere.

To deal with this, use a variety of tricks to try to prove that the
addition doesn't overflow.  If the proof is impossible, use an alternate
sequence which never overflows.

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

3 years ago[lit] Add --xfail-not/LIT_XFAIL_NOT
Joel E. Denny [Fri, 16 Jul 2021 23:13:34 +0000 (19:13 -0400)]
[lit] Add --xfail-not/LIT_XFAIL_NOT

For example, I need this lately in my CI config:

LIT_XFAIL_NOT='libomptarget :: nvptx64-nvidia-cuda :: unified_shared_memory/api.c'

That test specifies an XFAIL directive, but I get an XPASS result.

Reviewed By: jhenderson

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

3 years agoRevert "Build libSupport with -Werror=global-constructors (NFC)"
Mehdi Amini [Fri, 16 Jul 2021 22:46:17 +0000 (22:46 +0000)]
Revert "Build libSupport with -Werror=global-constructors (NFC)"

This reverts commit 1f71bcabb77df482cc0dc7bab90a73e15f3e347b.

Some platform have global destructors for std::mutex that still
needs to be fixed.

3 years agoAdd a mutex to guard access to the ThreadPlanStack class
Jim Ingham [Fri, 16 Jul 2021 03:39:15 +0000 (20:39 -0700)]
Add a mutex to guard access to the ThreadPlanStack class

We've seen reports of crashes (none we've been able to reproduce
locally) that look like they are caused by concurrent access to a
thread plan stack.  It looks like there are error paths when an
interrupt request to debugserver times out that cause this problem.

The thread plan stack access is never in a hot loop, and there
aren't enough of them for the extra data member to matter, so
there's really no good reason not to protect the access.

Adding the mutex revealed a couple of places where we were
using "auto" in an iteration when we should have been using
"auto &" - we didn't intend to copy the stack - and I fixed
those as well.

Except for preventing crashes this should be NFC.

Differential Revision: https\://reviews.llvm.org/D106122

3 years ago[libcxx][modules] protects users from relying on libc++ detail headers (1/n)
Christopher Di Bella [Tue, 13 Jul 2021 19:44:07 +0000 (19:44 +0000)]
[libcxx][modules] protects users from relying on libc++ detail headers (1/n)

libc++ has started splicing standard library headers into much more
fine-grained content for maintainability. It's very likely that outdated
and naive tooling (some of which is outside of LLVM's scope) will
suggest users include things such as `<__algorithm/find.h>` instead of
`<algorithm>`, and Hyrum's law suggests that users will eventually begin
to rely on this without the help of tooling. As such, this commit
intends to protect users from themselves, by making it a hard error for
anyone outside of the standard library to include libc++ detail headers.

This is the first of four patches. Patch #2 will solve the problem for
pre-processor `#include`s; patches #3 and #4 will solve the problem for
`<__tree>` and `<__hash_table>` (since I've never touched the test cases
that are failing for these two, I want to split them out into their own
commits to be extra careful). Patch #5 will concern itself with
`<__threading_support>`, which intersects with libcxxabi (which I know
even less about).

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

3 years ago[Bazel] Delete blank line to make buildifier happy
Fangrui Song [Fri, 16 Jul 2021 22:33:42 +0000 (15:33 -0700)]
[Bazel] Delete blank line to make buildifier happy

3 years ago[sanitizer] Fix test build on Windows
Vitaly Buka [Fri, 16 Jul 2021 22:28:26 +0000 (15:28 -0700)]
[sanitizer] Fix test build on Windows

3 years agoBuild libSupport with -Werror=global-constructors (NFC)
Mehdi Amini [Fri, 16 Jul 2021 03:32:59 +0000 (03:32 +0000)]
Build libSupport with -Werror=global-constructors (NFC)

Ensure that libSupport does not carry any static global initializer.
libSupport can be embedded in use cases where we don't want to load all
cl::opt unless we want to parse the command line.
ManagedStatic can be used to enable lazy-initialization of globals.

3 years ago[ARM] Fix for matching reductions that are both sext and zext.
David Green [Fri, 16 Jul 2021 22:11:42 +0000 (23:11 +0100)]
[ARM] Fix for matching reductions that are both sext and zext.

Fix a silly mistake that was not making sure that _both_ operands were
the correct extend code.

3 years agoRevert "ThinLTO: Fix inline assembly references to static functions with CFI"
Sami Tolvanen [Fri, 16 Jul 2021 21:47:19 +0000 (14:47 -0700)]
Revert "ThinLTO: Fix inline assembly references to static functions with CFI"

This reverts commit 8e3b5cb39eef462943ed7556469604ce25c07a1d.

Reverting to investigate test failures.

3 years agoThinLTO: Fix inline assembly references to static functions with CFI
Sami Tolvanen [Fri, 16 Jul 2021 20:56:54 +0000 (13:56 -0700)]
ThinLTO: Fix inline assembly references to static functions with CFI

Create an internal alias with the original name for static functions
that are renamed in promoteInternals to avoid breaking inline
assembly references to them. This version uses module inline assembly
to avoid issues with LowerTypeTestsModule.

Link: https://github.com/ClangBuiltLinux/linux/issues/1354
Reviewed By: nickdesaulniers, pcc

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

3 years ago[PowerPC] Implement intrinsics for mtfsf[i]
Nemanja Ivanovic [Fri, 16 Jul 2021 18:54:21 +0000 (13:54 -0500)]
[PowerPC] Implement intrinsics for mtfsf[i]

This provides intrinsics for emitting instructions that set the FPSCR (`mtfsf/mtfsfi`).

The patch also conservatively marks the rounding mode as an implicit def for both since they both may set the rounding mode depending on the operands.

Reviewed By: #powerpc, qiucf

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