1. May 07, 2024
    • Matt Arsenault's avatar
      AMDGPU: Add mode register use to s_getreg_b32 · f548c4d8
      Matt Arsenault authored
      This should fix reading the wrong mode after setting the mode.
      Ideally we would have separate pseudos for the case that we know
      does not read mode.
      f548c4d8
    • Benjamin Kramer's avatar
    • Benjamin Kramer's avatar
      a775455c
    • Alexey Bataev's avatar
    • Jonathan Peyton's avatar
      [OpenMP] Fix task state and taskteams for serial teams (#86859) · 41ca9104
      Jonathan Peyton authored
      * Serial teams now use a stack (similar to dispatch buffers)
      * Serial teams always use `t_task_team[0]` as the task team and the
      second pointer is a next pointer for the stack
      
      `t_task_team[1]` is interpreted as a stack of task teams where each
      level is a nested level
      
      ```
       inner serial team                   outer serial team
      [ t_task_team[0] ] -> (task_team)    [ t_task_team[0] ] -> (task_team)
      [ next           ] ----------------> [ next           ] -> ...
      ```
      
      * Remove the task state memo stack from thread structure.
      * Instead of a thread-private stack, use team structure to store
      th_task_state of the primary thread. When coming out of a parallel,
      restore the primary thread's task state. The new field in the team
      structure doesn't cause sizeof(team) to change and is in the cache line
      which is only read/written by the primary thread.
      
      Fixes: #50602
      Fixes: #69368
      Fixes: #69733
      Fixes: #79416
      41ca9104
    • Benjamin Kramer's avatar
      [libc][math] fmod: clear exceptions before the test instead of after · 1d87465a
      Benjamin Kramer authored
      The test has no control over the CPU state before the test runs.
      
      This test checks whether no exception flags are set, which may not be
      true at the start of the test. This used to be not a problem because the
      check was broken but that was fixed in ecfb5d99
      1d87465a
    • David Truby's avatar
      [flang] Remove C++ runtime dependency from Sleep extension (#84911) · 227fe1c1
      David Truby authored
      The Sleep extension currently has a potential dependency on the C++
      runtime. I run into this dependency using libc++ on Linux. This patch 
      uses the POSIX `sleep` function or the Windows `Sleep` function 
      instead to avoid this dependency.
      227fe1c1
    • Haojian Wu's avatar
      [clang] CTAD: fix the aggregate deduction guide for alias templates. (#90894) · 27becf0c
      Haojian Wu authored
      For alias templates, our current way of constructing their aggregate
      deduction guides deviates from the standard approach. We should align it
      with how we handle implicit deduction guides.
      
      This patch has a refactoring change which pulls the construction logic
      out from `DeclareImplicitDeductionGuidesForTypeAlia` and reusing it for
      building aggregate deduction guides.
      27becf0c
    • Louis Dionne's avatar
      [libc++] Rename _LIBCPP_INTRODUCED_foo_MARKUP to _LIBCPP_INTRODUCED_foo_ATTRIBUTE (#91269) · fff2db2e
      Louis Dionne authored
      This was discussed in #87563 and overlooked when I landed the patch.
      fff2db2e
    • martinboehme's avatar
      [clang][dataflow] Add `reachedLimit()` to the `Solver` interface. (#91320) · 66364e65
      martinboehme authored
      We may want code to call this that doesn't know which specific solver
      implementation it is dealing with.
      66364e65
    • Vincent Belliard's avatar
      [lldb] fix step in AArch64 trampoline (#90783) · b22a6f1e
      Vincent Belliard authored
      
      
      Detects AArch64 trampolines in order to be able to step in a function
      through a trampoline on AArch64.
      
      ---------
      
      Co-authored-by: default avatarVincent Belliard <v-bulle@github.com>
      b22a6f1e
    • Nikolas Klauser's avatar
    • Peter Waller's avatar
      [llvm-mca] Make bad-input.s even more CPU specific · 458d7067
      Peter Waller authored
      Note: This patch is distinct from the previous one titled
        "[llvm-mca] Move bad-input.s test to be target specific"
      
      This is a followup to #90474 and commit
      afc10fc9
      
      Context: Builders failing because they're unable to run the failure
      test.
      
      This still doesn't work in various circumstances, it seems MCA doesn't
      want to run on a wide variety of hosts in various configurations, so
      stick to the tried and tested method and pass -mtriple and -mcpu.
      458d7067
    • Peter Waller's avatar
      [llvm-mca] Move bad-input.s test to be target specific · afc10fc9
      Peter Waller authored
      ... for now.
      
      This is a follow up to #90474 in response to build bot failures.
      
      This test is intended to check a case where invalid assembly is passed
      to llvm-mca.
      
      Unfortunately it appears that a cross-toolchain built with
      -DTOOLCHAIN_TARGET_TRIPLE does not have an llvm-mca which works out of
      the box if the host target is not enabled.
      
      As a quick fix to make the build bots green, move the test into AArch64
      and X86 so that there is reasonable coverage for this test; later I hope
      mca can be fixed to work out of the box in this configuration.
      afc10fc9
    • Donát Nagy's avatar
      [analyzer] Use explicit call description mode in more checkers (#90974) · 6d64f8e1
      Donát Nagy authored
      This commit explicitly specifies the matching mode (C library function,
      any non-method function, or C++ method) for the `CallDescription`s
      constructed in various checkers.
      
      Some code was simplified to use `CallDescriptionSet`s instead of
      individual `CallDescription`s.
      
      This change won't cause major functional changes, but isn't NFC because
      it ensures that e.g. call descriptions for a non-method function won't
      accidentally match a method that has the same name.
      
      Separate commits have already performed this change in other checkers:
      - easy cases: e2f1cbae
      - MallocChecker: d6d84b5d
      - iterator checkers: 06eedffe
      - InvalidPtr checker: 024281d4
      
      ... and follow-up commits will handle the remaining checkers.
      
      My goal is to ensure that the call description mode is always explicitly
      specified and eliminate (or strongly restrict) the vague "may be either
      a method or a simple function" mode that's the current default.
      6d64f8e1
    • Emma Pilkington's avatar
      [AMDGPU][MC] Disable sendmsg SYSMSG_OP_HOST_TRAP_ACK on gfx9+ (#90203) · dcc7ef3c
      Emma Pilkington authored
      This is no longer supported as of gfx9. Fixes #52903
      
      This commit also includes some refactoring of sendmsg operand parsing:
        - Use CustomOperand for sendmsg operations, this allows them to be
          conditionally available based on a STI check (and automatically in
          sync with SIDefines.h).
        - Move CustomOperand table lookups from AMDGPUBaseInfo to
          AMDGPUAsmUtils. This cleans up an awkward interface where
          AMDGPUAsmUtils defined a table/size as globals that AMDGPUBaseInfo
          had to loop over.
        - Clean up a few of the operand lookup functions while moving them.
      dcc7ef3c
    • Donát Nagy's avatar
      [analyzer] Clean up apiModeling.llvm.ReturnValue (#91231) · 97dd8e3c
      Donát Nagy authored
      This commit heavily refactors and simplifies the small and trivial
      checker `apiModeling.llvm.ReturnValue`, which is responsible for
      modeling the peculiar coding convention that in the LLVM/Clang codebase
      certain Error() methods always return true.
      
      Changes included in this commit:
      - The call description mode is now specified explicitly (this is not the
      most significant change, but it was the original reason for touching
      this checker).
      - Previously the code provided support for modeling functions that
      always return `false`; but there was no need for that, so this commit
      hardcodes that the return value is `true`.
      - The overcomplicated constraint/state handling logic was simplified.
      - The separate `checkEndFunction` callback was removed to simplify the
      code. Admittedly this means that the note tag for the "<method> returns
      false, breaking the convention" case is placed on the method call
      instead of the `return` statement; but that case will _never_ appear in
      practice, so this difference is mostly academical.
      - The text of the note tags was clarified.
      - The descriptions in the header comment and Checkers.td were clarified.
      - Some minor cleanup was applied in the associated test file.
      
      This change is very close to NFC because it only affects a hidden
      `apiModeling.llvm` checker that's only relevant during the analysis of
      the LLVM/Clang codebase, and even there it doesn't affect the normal
      behavior of the checker.
      97dd8e3c
    • Chris Copeland's avatar
      [ARM] Armv8-R does not require fp64 or neon. (#88287) · 651bdb96
      Chris Copeland authored
      This was [addressed for AArch64
      here](https://github.com/llvm/llvm-project/pull/79004), but the same
      applies to ARM.
      
      Move the enablement of neon+fp64 to `-mcpu=cortex-r52`, which optionally
      supports these features.
      651bdb96
    • Paul Walker's avatar
      [NFC][LLVM] Refactor rounding mode detection of constrained fp intrinsic IDs (#90854) · 235cea72
      Paul Walker authored
      I've refactored the code to genericise the implementation to better
      allow for target specific constrained fp intrinsics.
      235cea72
    • Kristof Beyls's avatar
    • Simon Pilgrim's avatar
      [X86] Use GFNI for vXi8 shifts/rotates (#89115) · abd31493
      Simon Pilgrim authored
      As detailed here: https://github.com/InstLatx64/InstLatX64_Demo/blob/master/GFNI_Demo.h
      
      We can use the gf2p8affine instruction to lower byte shifts/rotates as well as the existing bitreverse case.
      
      Based off the original patch here: https://reviews.llvm.org/D137026
      abd31493
    • Quentin Colombet's avatar
      [SDISel] Teach the type legalizer about ADDRSPACECAST (#90969) · 6ce04747
      Quentin Colombet authored
      Vectorized ADDRSPACECASTs were not supported by the type legalizer.
      
      This patch adds the support for:
      - splitting the vector result: <2 x ptr> => 2 x <1 x ptr>
      - scalarization: <1 x ptr> => ptr
      - widening: <3 x ptr> => <4 x ptr>
      
      This is all exercised by the added NVPTX tests.
      6ce04747
    • Simon Pilgrim's avatar
      [X86] Add FastImm16 tuning flag to Intel Atom + AMD Bobcat/Ryzen Families (#90635) · d838e5b3
      Simon Pilgrim authored
      This patch limits the icmp_i16(x,c) -> icmp_i32(ext(x),ext(c)) fold to CPUs that aren't known to have fast handling for length-changing prefixes for imm16 operands.
      
      We are always assuming that 66/67h length-changing prefixes cause severe stalls and we should always extend imm16 operands and use a i32 icmp instead, the only exception being Intel Bonnell CPUs.
      
      Agner makes this clear (see microarchitecture.pdf) that there are no stalls for any of the Intel Atom family (at least as far as Tremont - not sure about Gracemont or later). This is also true for AMD Bobcat/Jaguar and Ryzen families.
      
      Recent performance Intel CPUs are trickier - Core2/Nehalem and earlier could have a 6-11cy stall, while SandyBridge onwards this is reduced to 3cy or less. I'm not sure if we should accept this as fast or not, we only use this flag for the icmp_i16 case, so that might be acceptable? If so, we should add this to x86-64-v3/v4 tuning as well.
      
      Part of #90355 + #62952
      d838e5b3
    • Anthony Ha's avatar
      [lldb] Have lldb-server assign ports to children in platform mode (#88845) · 6aed0ab6
      Anthony Ha authored
      Fixes #47549
      
      `lldb-server`'s platform mode seems to have an issue with its
      `--min-gdbserver-port` `--max-gdbserver-port` flags (and probably the
      `--gdbserver-port` flag, but I didn't test it).
      
      How the platform code seems to work is that it listens on a port, and
      whenever there's an incoming connection, it forks the process to handle
      the connection. To handle the port flags, the main process uses an
      instance of the helper class
      `GDBRemoteCommunicationServerPlatform::PortMap`, that can be configured
      and track usages of ports. The child process handling the platform
      connection, can then use the port map to allocate a port for the
      gdb-server connection it will make (this is another process it spawns).
      
      However, in the current code, this works only once. After the first
      connection is handled by forking a child process, the main platform
      listener code loops around, and then 'forgets' about the port map. This
      is becaus...
      6aed0ab6
    • Ben Shi's avatar
      50da7680
    • ostannard's avatar
      [AArch64] Diagnose more functions when FP not enabled (#90832) · 1fd196c8
      ostannard authored
      When using a hard-float ABI for a target without FP registers, it's not
      possible to correctly generate code for functions with arguments which
      must be passed in floating-point registers. This is diagnosed in CodeGen
      instead of Sema, to more closely match GCC's behaviour around inline
      functions, which is relied on by the Linux kernel.
      
      Previously, this only checked function signatures as they were
      code-generated, but this missed some cases:
      * Calls to functions not defined in this translation unit.
      * Calls through function pointers.
      * Calls to variadic functions, where the variadic arguments have a
      floating-point type.
      
      This adds checks to function calls, as well as definitions, so that
      these cases are correctly diagnosed.
      1fd196c8
    • Orlando Cazalet-Hyams's avatar
      [RemoveDIs] Update some unittests to the new format (#90476) · 1530f319
      Orlando Cazalet-Hyams authored
      This patch updates the unittests that can be changed to the new format
      after #89799 (which changes the default format everywhere) to avoid a
      loss in coverage for the (new) default debug info format.
      1530f319
    • Peter Waller's avatar
      [llvm-mca] Abort on parse error without -skip-unsupported-instructions (#90474) · 1de0535e
      Peter Waller authored
      [llvm-mca] Abort on parse error without -skip-unsupported-instructions
      
      Prior to this patch, llvm-mca would continue executing after parse
      errors. These errors can lead to some confusion since some analysis
      results are printed on the standard output, and they're printed after
      the errors, which could otherwise be easy to miss.
      
      However it is still useful to be able to continue analysis after errors;
      so extend the recently added -skip-unsupported-instructions to support
      this.
      
      Two tests which have parse errors for some of the 'RUN' branches are
      updated to use -skip-unsupported-instructions so they can remain as-is.
      
      Add a description of -skip-unsupported-instructions to the llvm-mca
      command guide, and add it to the llvm-mca --help output:
      
      ```
        --skip-unsupported-instructions=<value> - Force analysis to continue in the presence of unsupported instructions
          =none                                 -   Exit with an error when an instruction is unsupported for any reason (default)
          =lack-sched                           -   Skip instructions on input which lack scheduling information
          =parse-failure                        -   Skip lines on the input which fail to parse for any reason
          =any                                  -   Skip instructions or lines on input which are unsupported for any reason
      ```
      
      Tests within this patch are intended to cover each of the cases.
      
      Reason        | Flag | Comment
      --------------|------|-------
      none          | none | Usual case, existing test suite
      lack-sched    | none | Advises user to use -skip-unsupported-instructions=lack-sched, tested in llvm/test/tools/llvm-mca/X86/BtVer2/unsupported-instruction.s
      parse-failure | none | Advises user to use -skip-unsupported-instructions=parse-failure, tested in llvm/test/tools/llvm-mca/bad-input.s
      any           | none | (N/A, covered above)
      lack-sched    | any  | Continues, prints warnings, tested in llvm/test/tools/llvm-mca/X86/BtVer2/unsupported-instruction.s
      parse-failure | any  | Continues, prints errors, tested in llvm/test/tools/llvm-mca/bad-input.s
      lack-sched    | parse-failure | Advises user to use -skip-unsupported-instructions=lack-sched, tested in llvm/test/tools/llvm-mca/X86/BtVer2/unsupported-instruction.s
      parse-failure | lack-sched    | Advises user to use -skip-unsupported-instructions=parse-failure, tested in llvm/test/tools/llvm-mca/bad-input.s
      none          | * | This would be any test case with skip-unsupported-instructions, coverage added in llvm/test/tools/llvm-mca/X86/BtVer2/simple-test.s
      any           | * | (Logically covered by the other cases)
      1de0535e
    • martinboehme's avatar
      [clang][dataflow] Strengthen pointer comparison. (#75170) · f3fbd21f
      martinboehme authored
      -  Instead of comparing the identity of the `PointerValue`s, compare the
         underlying `StorageLocation`s.
      
      - If the `StorageLocation`s are the same, return a definite "true" as
      the
      result of the comparison. Before, if the `PointerValue`s were different,
      we
      would return an atom, even if the storage locations themselves were the
      same.
      
      - If the `StorageLocation`s are different, return an atom (as before).
      Pointers
      that have different storage locations may still alias, so we can't
      return a
         definite "false" in this case.
      
      The application-level gains from this are relatively modest. For the
      Crubit
      nullability check running on an internal codebase, this change reduces
      the
      number of functions on which the SAT solver times out from 223 to 221;
      the
      number of "pointer expression not modeled" errors reduces from 3815 to
      3778.
      
      Still, it seems that the gain in precision is generally worthwhile.
      
      @Xazax-hun inspired me to think about this with his
      
      [comments](https://github.com/llvm/llvm-project/pull/73860#pullrequestreview-1761484615)
      on a different PR.
      f3fbd21f
    • Luke Lau's avatar
    • hev's avatar
      ad599673
    • Luke Lau's avatar
      [RISCV] Use IMPLICIT_DEF for undef GPR reg in vsetvli test. NFC · ebde770c
      Luke Lau authored
      Only VRs should use $noreg, this GPR was accidentally changed in d392520c
      ebde770c
    • jinchen's avatar
    • Kiran Chandramohan's avatar
      [Flang][OpenMP] NFC: Trivial changes in OmpCycleChecker (#91024) · 6ad37a41
      Kiran Chandramohan authored
      Cycle is associated with construct-names and not labels. Change name of
      a few variables to reflect this. Also add appropriate comment to
      describe the else case of error checking.
      6ad37a41
    • Haojian Wu's avatar
      [clang] Don't preserve the typo expr in the recovery expr for invalid VarDecls (#90948) · fc866fd2
      Haojian Wu authored
      With the commit d5308949, we now
      preserve the initializer for invalid decls with the recovery-expr.
      
      However there is a chance that the original init expr is a typo-expr, we
      should not preserve it in the final AST, as typo-expr is an internal AST
      node. We should use the one after the typo correction.
      
      This is spotted by a clangd hover crash on the testcase.
      fc866fd2
    • Abhishek Varma's avatar
      [MLIR][SCF] Add canonicalization pattern to fold away iter args of scf.forall (#90189) · 2b9210d1
      Abhishek Varma authored
      
      
      -- This commit adds a canonicalization pattern to fold away iter args of
      scf.forall if :-
         a. The corresponding tied result has no use.
         b. It is not being modified within the loop.
      
      Signed-off-by: default avatarAbhishek Varma <avarma094@gmail.com>
      2b9210d1
    • Timm Bäder's avatar
      [clang][Interp][NFC] Allow Pointer assignment if both are zero · 5f2f3900
      Timm Bäder authored
      ... even if the storage types are different.
      5f2f3900
    • Timm Bäder's avatar
      [clang][Interp][NFC] Add eval-order test · 05f4448d
      Timm Bäder authored
      Demonstrate that this isn't yet working right.
      05f4448d
    • Chuanqi Xu's avatar
      [NFC] Fix Modules/no-transitive-source-location-change.cppm after dfa7ff97 · ad9f38d0
      Chuanqi Xu authored
      The test fails after dfa7ff97. I didn't find this locally due to
      cache.
      ad9f38d0
    • Thorsten Schütt's avatar
      [GlobalIsel] Combine extract vector element (#90339) · b42f553a
      Thorsten Schütt authored
      look through shuffle vectors
      b42f553a