52983 Commits

Author SHA1 Message Date
Dominik Adamski
eee8dd9088
[CodeExtractor] Allow to use 0 addr space for aggregate arg (#66998)
The user of CodeExtractor should be able to specify that
the aggregate argument should be passed as a pointer in zero address
space.

CodeExtractor is used to generate outlined functions required by OpenMP
runtime. The arguments of the outlined functions for OpenMP GPU code
are in 0 address space. 0 address space does not need to be the default
address space for GPU device. That's why there is a need to allow
the user of CodeExtractor to specify, that the allocated aggregate parameter
is passed as pointer in zero address space.
2023-10-18 20:12:31 +02:00
Adrian Prantl
410f41300a Add missing include breaking the modules build 2023-10-18 09:30:33 -07:00
Alex Langford
814a79aea6
[DebugInfo] Separate error generation from reporting in DWARFHeaderUnit::extract (#68242)
Instead of reporting the error directly through the DWARFContext passed
in as an argument, it would be more flexible to have extract return the
error and allow the caller to react appropriately.

This will be useful for using llvm's DWARFHeaderUnit from lldb which may
report header extraction errors through a different mechanism.
2023-10-18 09:06:39 -07:00
Stephen Tozer
df3478e480
[LLVM] Add new attribute optdebug to optimize for debugging (#66632)
This patch adds a new fn attribute, `optdebug`, that specifies that
optimizations should make decisions that prioritize debug info quality,
potentially at the cost of runtime performance.

This patch does not add any functional changes triggered by this
attribute, only the attribute itself. A subsequent patch will use this
flag to disable the post-RA scheduler.
2023-10-18 16:32:06 +01:00
Christian Kissig
730df5a437
[Support] Add KnownBits::computeForSubBorrow (#67788)
- [Support] Add KnownBits::computeForSubBorrow
- [CodeGen] Implement USUBC, USUBO_CARRY, and SSUBO_CARRY with
KnownBits::computeForSubBorrow
- [CodeGen] Compute unknown bits for Carry/Borrow for ADD/SUB
- [CodeGen] Compute known bits of Carry/Borrow for UADDO, SADDO, USUBO,
and SSUBO

Fixes #65893

---------

Co-authored-by: Shafik Yaghmour <shafik@users.noreply.github.com>
2023-10-18 13:48:47 +01:00
Chen Zheng
8c369eb496 nfc, address post commit comments related to code format for 581c64a 2023-10-18 04:45:24 -04:00
Noah Goldstein
112e49b381 [DAGCombiner] Transform (icmp eq/ne (and X,C0),(shift X,C1)) to use rotate or to getter constants.
If `C0` is a mask and `C1` shifts out all the masked bits (to
essentially compare two subsets of `X`), we can arbitrarily re-order
shift as `srl` or `shl`.

If `C1` (shift amount) is a power of 2, we can replace the and+shift
with a rotate.

Otherwise, based on target preference we can arbitrarily swap `shl`
and `shl` in/out to get better constants.

On x86 we can use this re-ordering to:
    1) get better `and` constants for `C0` (zero extended moves or
       avoid imm64).
    2) covert `srl` to `shl` if `shl` will be implementable with `lea`
       or `add` (both of which can be preferable).

Proofs: https://alive2.llvm.org/ce/z/qzGM_w

Reviewed By: RKSimon

Differential Revision: https://reviews.llvm.org/D152116
2023-10-18 01:16:55 -05:00
Kazu Hirata
279c155fb2
[CodeGen] Remove unused function isMSInlineAsm (#69132)
The last use was removed by:

  commit ee08897fb8d4b59b4609f6e837205e7a089b6fb7
  Author: Reid Kleckner <reid@kleckner.net>
  Date:   Tue Dec 10 18:27:32 2013 +0000
2023-10-17 23:01:59 -07:00
Valentin Clement (バレンタイン クレメン)
cf670d5e56
[flang][openacc] Accept scalar integer expression in the if clause (#69381)
Relax the parser to accept scalar integer expression in addition to
scalar logical expression. The parser now accepts scalar expression and
the semantic checks its type.
2023-10-17 14:41:03 -07:00
William Junda Huang
ef0e0adccd
[llvm-profdata] Do not create numerical strings for MD5 function names read from a Sample Profile. (#66164)
This is phase 2 of the MD5 refactoring on Sample Profile following
https://reviews.llvm.org/D147740
    
In previous implementation, when a MD5 Sample Profile is read, the
reader first converts the MD5 values to strings, and then create a
StringRef as if the numerical strings are regular function names, and
later on IPO transformation passes perform string comparison over these
numerical strings for profile matching. This is inefficient since it
causes many small heap allocations.
In this patch I created a class `ProfileFuncRef` that is similar to
`StringRef` but it can represent a hash value directly without any
conversion, and it will be more efficient (I will attach some benchmark
results later) when being used in associative containers.

ProfileFuncRef guarantees the same function name in string form or in
MD5 form has the same hash value, which also fix a few issue in IPO
passes where function matching/lookup only check for function name
string, while returns a no-match if the profile is MD5.

When testing on an internal large profile (> 1 GB, with more than 10
million functions), the full profile load time is reduced from 28 sec to
25 sec in average, and reading function offset table from 0.78s to 0.7s
2023-10-17 21:09:39 +00:00
Shraiysh
9922aadf9e
[OpenMPIRBuilder] Added if clause for teams (#69139)
This patch adds support for the `if` clause on `teams` construct. The
value of the argument must be an integer value. If the value evaluates
to true (non-zero) integer, then the number of threads is determined by
`num_threads` clause (or default and ICV if `num_threads` is absent).
When the condition evaluates to false (zero), then the bounds are set to
1. ([OpenMP 5.2 Section
10.2](https://www.openmp.org/spec-html/5.2/openmpse58.html))

This essentially means that
```
upperbound = ifexpr ? upperbound : 1
lowerbound = ifexpr ? lowerbound : 1
```
2023-10-17 15:00:39 -05:00
Bill Wendling
7dc644fc46 [CodeGen] Temporary disable the unreachable
It should be there, but we need all platforms that use stack protectors
to implement it first.
2023-10-17 12:32:41 -07:00
Bill Wendling
fbf0a77e80
[CodeGen] Avoid potential sideeffects from XOR (#67193)
XOR may change flag values (e.g. for X86 gprs). In the case where that's
not desirable, specify that buildClearRegister() should use MOV instead.
2023-10-17 12:03:26 -07:00
Dhruv Chawla
be57381a4a
[InstCombine] Create a class to lazily track computed known bits (#66611)
This patch adds a new class "WithCache" which stores a pointer to
any type passable to computeKnownBits along with KnownBits
information which is computed on-demand when getKnownBits()
is called. This allows reusing the known bits information when it is
passed as an argument to multiple functions.

It also changes a few functions to accept WithCache(s) so that
known bits information computed in some callees can be propagated to
others from the top level visitAddSub caller.

This gives a speedup of 0.14%:
https://llvm-compile-time-tracker.com/compare.php?from=499d41cef2e7bbb65804f6a815b9fa8b27efce0f&to=fbea87f1f1e6d5552e2bc309f8e201a3af6d28ec&stat=instructions:u
2023-10-17 21:40:18 +05:30
Simon Pilgrim
2f329d88bc [DAG] foldConstantFPMath - accept ArrayRef<SDValue> Ops instead of explicit N1/N2 ops
First step towards adding unary/ternary fp ops handling, and not just binops
2023-10-17 16:31:46 +01:00
Jeremy Morse
088d272e83 [ADT][DebugInfo][RemoveDIs] Add extra bits to ilist_iterator for debug-info
...behind an experimental CMAKE option that's off by default.

This patch adds a new ilist-iterator-like class that can carry two extra bits
as well as the usual node pointer. This is part of the project to remove
debug-intrinsics from LLVM: see the rationale here [0], they're needed to
signal whether a "position" in a BasicBlock includes any debug-info before or
after the iterator.

This entirely duplicates ilist_iterator, attempting re-use showed it to be a
false economy. It's enable-able through the existing ilist_node options
interface, hence a few sites where the instruction-list type needs to be
updated. The actual main feature, the extra bits in the class, aren't part of
the class unless the cmake flag is given: this is because there's a
compile-time cost associated with it, and I'd like to get everything in-tree
but off-by-default so that we can do proper comparisons.

Nothing actually makes use of this yet, but will do soon, see the Phab patch
stack.

[0] https://discourse.llvm.org/t/rfc-instruction-api-changes-needed-to-eliminate-debug-intrinsics-from-ir/68939

Differential Revision: https://reviews.llvm.org/D153777
2023-10-17 15:24:44 +01:00
Jay Foad
bff17f9f23
[AMDGPU] Remove support for no-return buffer atomic intrinsics. NFC. (#69326)
Thsi removes some of the machinery added by D85268, which was unused
since D87719 changed all buffer atomic intrinsics to return a value.
2023-10-17 14:47:32 +01:00
Pierre van Houtryve
0841955bf3
[TableGen] Use buildConstant to emit apply pattern immediates (#66077)
Use `MachineIRBuilder::buildConstant` to emit typed immediates in
'apply' MIR patterns.
This adds flexibility, e.g. it allows us to seamlessly handle vector
cases, where a `G_BUILD_VECTOR` is needed to create a splat.
2023-10-17 10:39:59 +02:00
Arthur Eubanks
5fab20bc7e
[NFC] Move StableHashing.h from CodeGen to ADT (#67704) 2023-10-16 10:42:22 -07:00
Kazu Hirata
9cc6f492f2
[GlobalISel] Remove unused function narrowToSmallerAndWidenToSmallest (#69130)
The last use was removed by:

  commit b163efae3312abe1227cff1d7704325138b4e538
  Author: Simon Pilgrim <llvm-dev@redking.me.uk>
  Date:   Thu Jun 15 13:56:53 2023 +0100
2023-10-16 09:33:26 -07:00
Kazu Hirata
0b570ad969
[CodeGen] Remove LiveVariables::{isPHIJoin,setPHIJoin} (#69128)
The last use of isPHIJoin was removed by:

  commit fac770b865f59cbe615241dad153ad20d5138b9e
  Author: Jakob Stoklund Olesen <stoklund@2pi.dk>
  Date:   Sat Feb 9 00:04:07 2013 +0000

so there is no reason to maintain PHIJoins.
2023-10-16 09:31:09 -07:00
Nikita Popov
d4300154b6 Revert "[ValueTracking] Remove by-ref computeKnownBits() overloads (NFC)"
This reverts commit b5743d4798b250506965e07ebab806a3c2d767cc.

This causes some minor compile-time impact. Revert for now, better
to do the change more gradually.
2023-10-16 14:04:09 +02:00
Nikita Popov
b5743d4798 [ValueTracking] Remove by-ref computeKnownBits() overloads (NFC)
Remove the old overloads that accept KnownBits by reference, in
favor of those that return it by value.
2023-10-16 13:00:31 +02:00
Pierre van Houtryve
96e473a6be
[RFC][GlobalISel] Use Builders in MatchTable (#65955)
The MatchTableExecutor did not use the MachineIRBuilder but instead
created instructions ad-hoc.
Making it use a Builder has the benefit that any observer added by a
combine is now notified when instructions are created by MIR patterns.

Another benefit is that it allows me to improve how constants are
created in apply MIR patterns.
`MachineIRBuilder::buildConstant` automatically handles splats for us,
this means that we may change `addCImm` to use that and handle vector
cases automatically.
2023-10-16 07:41:18 +02:00
Kazu Hirata
7fb2b4d7f5 [CodeGen] Remove unused declaration createJumpInstrTablesPass
The corresponding function definition was removed by:

  commit 3b94e33277beebd8ec3e654702d4fa912803115d
  Author: Eric Christopher <echristo@gmail.com>
  Date:   Fri Feb 27 19:03:38 2015 +0000
2023-10-15 20:40:47 -07:00
Freddy Ye
819ac45d1c
[X86] Add USER_MSR instructions. (#68944)
For more details about this instruction, please refer to the latest ISE
document:
https://www.intel.com/content/www/us/en/develop/download/intel-architecture-instruction-set-extensions-programming-reference.html
2023-10-16 10:12:53 +08:00
Min-Yih Hsu
42b707e5b4 [DWARF][M68k] Add new DW_CC for the new M68kRTD calling convention
Add `DW_CC_M68kRTD` to model the new `llvm::CallingConv::M68kRTD`.

Differential Revision: https://reviews.llvm.org/D152587
2023-10-15 16:13:05 -07:00
Min-Yih Hsu
fd84b1a99d [M68k] Add new calling convention M68k_RTD
`M68k_RTD` is really similar to X86's stdcall, in which callee pops the
arguments from stack. In LLVM IR it can be written as `m68k_rtdcc`.
This patch also improves how ExpandPseudo Pass handles popping stack at
function returns in the absent of the RTD instruction.

Differential Revision: https://reviews.llvm.org/D149864
2023-10-15 16:12:31 -07:00
Kazu Hirata
96196e25fd [GlobalISel] Remove unused declaration tryCombineIndexedLoadStore
The corresponding function definition was removed by:

  commit 7e5c2672cb4ef5a607414023805b8040b8e1fa99
  Author: Amara Emerson <amara@apple.com>
  Date:   Mon Sep 25 03:22:25 2023 +0800
2023-10-15 13:20:48 -07:00
Kazu Hirata
196108857d [GlobalISel] Remove unused declaration applyCombineAnyExtTrunc
The corresponding function definition was removed by:

  commit a6be26710bbdf8de39a16ad64526ec955dda6c59
  Author: Jay Foad <jay.foad@amd.com>
  Date:   Tue Feb 23 16:10:19 2021 +0000
2023-10-15 13:20:46 -07:00
Kazu Hirata
017b9c03d6 [CodeGen] Remove unused declaration RegisterDefIsDead
The corresponding function definition was removed by:

  commit 6325446666b4c76f399b3974f8ef1b5092624e2a
  Author: Evan Cheng <evan.cheng@apple.com>
  Date:   Wed Mar 5 00:59:57 2008 +0000
2023-10-15 13:20:45 -07:00
Yingwei Zheng
9451004987
[InstCombine][TLI] Fix function prototype of labs (#69077)
`i64 @labs(i32)` is incorrectly recognized as `LibFunc_labs` because
type ID `Long` matches both `i32` and `i64`. This PR requires the type
of argument to match the return value.

Fixes #69059.
2023-10-15 17:00:50 +08:00
Kazu Hirata
8dd3bc1808 [Support] Remove the migration helpers to llvm::endianness
I've migrated all known uses of llvm::support::endianness to
llvm::endianness.  This patch removes the migration helpers.
2023-10-14 10:51:15 -07:00
Markus Böck
0ad92c0cbb
[StatepointLowering] Take return attributes of gc.result into account (#68439)
The current lowering of statepoints does not take into account return
attributes present on the `gc.result` leading to different code being
generated than if one were to not use statepoints. These return
attributes can affect the ABI which is why it is important that they are
applied in the lowering.
2023-10-14 18:38:18 +02:00
Kazu Hirata
02f67c097d Use llvm::endianness::{big,little,native} (NFC)
Note that llvm::support::endianness has been renamed to
llvm::endianness while becoming an enum class. This patch replaces
{big,little,native} with llvm::endianness::{big,little,native}.

This patch completes the migration to llvm::endianness and
llvm::endianness::{big,little,native}.  I'll post a separate patch to
remove the migration helpers in llvm/Support/Endian.h:

  using endianness = llvm::endianness;
  constexpr llvm::endianness big = llvm::endianness::big;
  constexpr llvm::endianness little = llvm::endianness::little;
  constexpr llvm::endianness native = llvm::endianness::native;
2023-10-13 23:16:25 -07:00
Kazu Hirata
18d199116f Stop including llvm/ADT/STLFunctionalExtras.h (NFC)
These source files do not use function_ref.
2023-10-13 20:50:58 -07:00
Kai Luo
18dc8dcd76
[PowerPC][JITLink] Support R_PPC64_GOT_TLSGD_PCREL34 (#68660)
`R_PPC64_GOT_TLSGD_PCREL34` is generated for pwr10+.
2023-10-14 10:57:03 +08:00
Kazu Hirata
69b6b48670 [ADT] Stop including identity.h (NFC)
The last use of identity was removed by:

  commit 388b8c16c5610a54c639bb74e3c8de161e8ca1c6
  Author: Benjamin Kramer <benny.kra@googlemail.com>
  Date:   Wed Jan 25 01:38:28 2023 +0100

While I am at it, this patch teaches IndexedMap.h to include
identity.h as it is relying on transitive includes via
llvm/ADT/STLExtras.h.
2023-10-13 01:00:02 -07:00
Kazu Hirata
37a5304976 [Support] Stop including cstddef (NFC)
SwapByteOrder.h doesn't use anything from <cstddef>.
2023-10-12 22:20:14 -07:00
Kazu Hirata
4a0ccfa865 Use llvm::endianness::{big,little,native} (NFC)
Note that llvm::support::endianness has been renamed to
llvm::endianness while becoming an enum class as opposed to an
enum. This patch replaces support::{big,little,native} with
llvm::endianness::{big,little,native}.
2023-10-12 21:21:45 -07:00
Kazu Hirata
797b76791d [IR] Move isConvergenceControlIntrinsic under "namespace llvm" (NFC)
While I am at it, this patch removes "using namespace llvm;".
2023-10-12 20:43:03 -07:00
Kazu Hirata
b29fb9c9f4 [llvm] Remove "using namespace llvm;" from header files (NFC) 2023-10-12 20:25:43 -07:00
Kai Luo
a712244f3b
[PowerPC][JITLink] Support R_PPC64_GOT_PCREL34 (#68658)
`R_PPC64_GOT_PCREL34` is generated for pwr10+.
2023-10-13 08:51:11 +08:00
Leonard Chan
ef388334ee Revert "Reapply "InstCombine: Introduce SimplifyDemandedUseFPClass""
This reverts commit 5a36904c515b.

Reverted because this breaks some floating point operations. See the
comment on https://github.com/llvm/llvm-project/commit/5a36904c515b.
2023-10-12 20:23:39 +00:00
Yusra Syeda
1c9035d1b5
[SystemZ][z/OS] Add UtcClock extension to chrono.h/.cpp (#67846)
This PR adds handling for UtcClock to chrono.h/.cpp.

---------

Co-authored-by: Yusra Syeda <yusra.syeda@ibm.com>
2023-10-12 15:42:56 -04:00
Zain Jaffal
31c2cf1136
[Remarks] Introduce count subcommand for llvm-remarkutil. (#66214)
This tool is a generic remark counter reporting count based on specified
properties. The counter can be used to count remarks individually and
filter them based on name, type and pass or count using remark
arguments.
2023-10-12 16:03:39 +01:00
Sebastian Neubauer
7603c77f23
[IR][NFC] Assert that FunctionType::getParamType is in-bounds (#68887)
Like for Function::getArg, assert that the fetched argument is in-range
and not out-of-bounds.
2023-10-12 16:26:48 +02:00
Jacek Caban
bf0534e870
[llvm-lib] [Object] Use ECSYMBOLS section for ARM64EC importlib symbols. (#68328) 2023-10-12 12:49:16 +02:00
Alex Voicu
0ce6255a50 [HIP][LLVM][Opt] Add LLVM support for hipstdpar
This patch adds the LLVM changes needed for enabling HIP parallel algorithm offload on AMDGPU targets. What we do here is add two passes, one mandatory and one optional:

1. HipStdParAcceleratorCodeSelectionPass is mandatory, depends on CallGraphAnalysis, and implements the following transform:

    - Traverse the call-graph, and check for functions that are roots for accelerator execution (at the moment, these are GPU kernels exclusively, and would originate in the accelerator specific algorithm library the toolchain uses as an implementation detail);
    - Starting from a root, do a BFS to find all functions that are reachable (called directly or indirectly via a call- chain) and record them;
    - After having done the above for all roots in the Module, we have the computed the set of reachable functions, which is the union of roots and functions reachable from roots;
    - All functions that are not in the reachable set are removed; for the special case where the reachable set is empty we completely clear the module;

2. HipStdParAllocationInterpositionPass is optional, is meant as a fallback with restricted functionality for cases where on-demand paging is unavailable on a platform, and implements the following transform:
    - Iterate all functions in a Module;
    - If a function's name is in a predefined set of allocation / deallocation that the runtime implementation is allowed and expected to interpose, replace all its uses with the equivalent accelerator aware function, iff the latter is available;
        - If the accelerator aware equivalent is unavailable we warn, but compilation will go ahead, which means that it is possible to get issues around the accelerator trying to access inaccessible memory at run time;
    - We rely on direct name matching as opposed to using the new alloc-kind family of attributes and / or the LibCall analysis pass because some of the legacy functions that need replacing would not carry the former or be identified by the latter.

Reviewed by: JonChesterfield, yaxunl

Differential Revision: https://reviews.llvm.org/D155856
2023-10-12 11:26:48 +01:00
Fangrui Song
af74f06322 ArgList: Simplify 3-opt overload of AddAllArgs. NFC 2023-10-12 01:15:28 -07:00