Changes

Summary

  1. [MemoryLocation] Use getForArgument in getForSource/getForDest. (NFC) (details)
  2. [X86][FP16] Replace vXi16 to vXf16 instead of v8f16 (details)
  3. Reland [DwarfDebug] Move emission of global vars, types and imports to endModule() (details)
  4. Reland [DwarfDebug] Support emitting function-local declaration for a lexical block (details)
  5. [VPlan] Separate ctors for VPWidenIntOrFpInduction. (NFC) (details)
  6. [libc++][ci] Disable generating debug information. (details)
  7. Microsoft's floating-point to_chars powered by Ryu and Ryu Printf (details)
  8. [gn build] (semiautomaticallly) port a8025e06fc0f (libc++ ryu) (details)
  9. Remove duplicate comment (details)
  10. Follow-up for D113741: fix DebugInfo/Generic/lexical_block_static.ll on MachO (details)
  11. [InstCombine] add tests for icmp with mul op with known bits; NFC (details)
  12. [InstSimplify] add/adjust tests for 'or' logic fold; NFC (details)
  13. [InstSimplify] fix logic fold of 'or' for vectors (details)
Commit 203f29b40ca3a248307ab75af04577f10173591f by flo
[MemoryLocation] Use getForArgument in getForSource/getForDest. (NFC)

getForArgument already knows how to extract a memory location for all
memory intrinsics. Use it instead of duplicating the logic.
The file was modifiedllvm/lib/Analysis/MemoryLocation.cpp
Commit f37d9b41122292d6758eef489af677ea1afa9436 by phoebe.wang
[X86][FP16] Replace vXi16 to vXf16 instead of v8f16

Fixes pr52561

Reviewed By: LuoYuanke

Differential Revision: https://reviews.llvm.org/D114304
The file was modifiedllvm/lib/Target/X86/X86ISelLowering.cpp
The file was modifiedllvm/test/CodeGen/X86/avx512fp16-mov.ll
Commit 0ac75e82fff93a80ca401d3db3541e8d1d9098f9 by kbessonova
Reland [DwarfDebug] Move emission of global vars, types and imports to endModule()

This patch proposes to move emission of global variables, types,
imported entities, etc from DwarfDebug::beginModule() to DwarfDebug::endModule().
Effectively, this changes nothing but the order of debug entities which
will be as follows:
* subprograms (including related context, local variables/labels,
  local imported entities; related types can be created as a part of
  the emission of local entities of an abstract subprogram);
* global variables (including related context and types);
* retained types and enums;
* non-local-scoped imported entities;
* basic types;
* other types left (as a part of local variables attributes emission).

Note that the order of emitted compile units may also be changed as now we emit
units that contain subprograms first and then all other non-empty units.

The motivation behind this change is the following:
(1) DwarfDebug::beginModule() is run at the very beginning of backend's pipeline,
    from this time IR can be significantly changed by target-specific passes.
    If it happens for debug metadata of global entities, those changes will not
    be reflected in the emitted DWARF.
(2) imported subprogram names should refer to an abstract subprogram if it exists,
    but it isn't known in DwarfDebug::beginModule() (it's possible to make some
    guesses based on location info, but it's not quite reliable);
(3) aforementioned entities if they are scoped within a bracketed block
    (subject of D113741) couldn't be emitted in DwarfDebug::beginModule()
    (they need parent emitted first). Another problem is if to try to gather
    some information about local entities and defer their emission
    (till subprogram's processing or DwarfDebug::endModule()) all the gathered
    details might be irrelevant / invalid by the time the entities are being
    emitted (because of (1)).

Reviewed By: dblaikie

Differential Revision: https://reviews.llvm.org/D114705
The file was modifiedllvm/test/DebugInfo/NVPTX/debug-addr-class.ll
The file was modifiedllvm/test/DebugInfo/X86/linkage-name.ll
The file was modifiedllvm/test/DebugInfo/Generic/namespace.ll
The file was modifiedllvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
The file was modifiedllvm/test/MC/WebAssembly/debug-info.ll
The file was modifiedllvm/test/DebugInfo/X86/dwarfdump-DIImportedEntity_elements.ll
The file was modifiedllvm/test/DebugInfo/NVPTX/debug-loc-offset.ll
The file was modifiedllvm/test/DebugInfo/X86/align_cpp11.ll
The file was modifiedllvm/test/DebugInfo/BPF/extern-void.ll
The file was modifiedlld/test/wasm/debuginfo.test
The file was modifiedllvm/test/DebugInfo/X86/dwarf-linkage-names.ll
The file was modifiedllvm/test/MC/WebAssembly/dwarfdump.ll
The file was modifiedllvm/test/DebugInfo/X86/align_objc.ll
The file was modifiedllvm/test/MC/WebAssembly/debug-info64.ll
The file was modifiedllvm/test/DebugInfo/X86/debug-info-access.ll
The file was modifiedllvm/test/DebugInfo/attr-btf_tag.ll
The file was modifiedllvm/test/DebugInfo/X86/namelist1.ll
The file was modifiedllvm/test/DebugInfo/X86/generate-odr-hash.ll
The file was modifiedllvm/test/CodeGen/ARM/2011-01-19-MergedGlobalDbg.ll
The file was modifiedllvm/test/DebugInfo/X86/containing-type-extension-rust.ll
The file was modifiedllvm/test/DebugInfo/X86/dwarf-aranges.ll
The file was modifiedllvm/test/DebugInfo/X86/2011-09-26-GlobalVarContext.ll
The file was modifiedllvm/test/DebugInfo/X86/lexical-block-file-inline.ll
The file was modifiedllvm/test/DebugInfo/NVPTX/debug-info.ll
The file was modifiedllvm/test/DebugInfo/X86/template.ll
The file was modifiedllvm/test/DebugInfo/X86/debug-info-static-member.ll
The file was modifiedllvm/test/DebugInfo/Generic/debug-info-qualifiers.ll
The file was modifiedllvm/test/DebugInfo/X86/subprogram-across-cus.ll
The file was modifiedllvm/test/DebugInfo/PowerPC/strict-dwarf.ll
The file was modifiedllvm/test/DebugInfo/X86/debug-loc-offset.mir
The file was modifiedllvm/test/DebugInfo/X86/vla-global.ll
The file was modifiedllvm/test/DebugInfo/Generic/varargs.ll
The file was modifiedllvm/test/DebugInfo/X86/tls.ll
The file was modifiedllvm/test/DebugInfo/X86/arange-and-stub.ll
The file was modifiedllvm/test/DebugInfo/AMDGPU/variable-locations.ll
The file was modifiedllvm/test/DebugInfo/X86/DW_AT_calling-convention.ll
The file was modifiedllvm/test/DebugInfo/Generic/enum-types.ll
The file was modifiedllvm/test/DebugInfo/X86/sret.ll
The file was modifiedllvm/test/DebugInfo/Generic/incorrect-variable-debugloc.ll
The file was modifiedllvm/test/CodeGen/ARM/2011-08-02-MergedGlobalDbg.ll
The file was modifiedllvm/test/DebugInfo/Generic/debug-names-linkage-name.ll
The file was modifiedllvm/test/MC/WebAssembly/dwarfdump64.ll
The file was modifiedllvm/test/DebugInfo/X86/gnu-public-names.ll
The file was modifiedllvm/test/DebugInfo/X86/debug-info-blocks.ll
The file was modifiedllvm/test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll
The file was modifiedllvm/test/DebugInfo/MIR/AArch64/implicit-def-dead-scope.mir
Commit 75b622a7959479ccdb758ebe0973061b7b4fcacd by kbessonova
Reland [DwarfDebug] Support emitting function-local declaration for a lexical block

This is another attempt to make function-local declarations
(like static variables, structs/classes and other) be correctly
emitted within a lexical (bracketed) block.

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

Reviewed By: dblaikie

Differential Revision: https://reviews.llvm.org/D113741
The file was modifiedllvm/test/DebugInfo/Generic/namespace.ll
The file was modifiedllvm/lib/CodeGen/AsmPrinter/DwarfUnit.h
The file was modifiedllvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
The file was modifiedllvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
The file was modifiedllvm/lib/CodeGen/AsmPrinter/DwarfDebug.h
The file was addedllvm/test/DebugInfo/Generic/inlined-local-type.ll
The file was modifiedllvm/lib/CodeGen/AsmPrinter/DwarfFile.h
The file was modifiedllvm/test/DebugInfo/Generic/imported-name-inlined.ll
The file was modifiedllvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h
The file was addedllvm/test/DebugInfo/Generic/import-inlined-declaration.ll
The file was modifiedllvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
The file was addedllvm/test/DebugInfo/Generic/lexical_block_types.ll
The file was addedllvm/test/DebugInfo/Generic/lexical_block_static.ll
The file was addedllvm/test/DebugInfo/Generic/inlined-static-var.ll
Commit 7c3c352d82131b960726560869945201410f9eb7 by flo
[VPlan] Separate ctors for VPWidenIntOrFpInduction. (NFC)

VPWidenIntOrFpInductionRecipes can either be constructed with a PHI and
an optional cast or a PHI and a trunc instruction. Reflect this in 2
separate constructors. This also simplifies a follow-up change.
The file was modifiedllvm/lib/Transforms/Vectorize/VPlan.h
The file was modifiedllvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
The file was modifiedllvm/lib/Transforms/Vectorize/LoopVectorize.cpp
Commit 15495be014032339600cda7770d7bf45dfb10d54 by koraq
[libc++][ci] Disable generating debug information.

In the bootstrap build generating debug information causes an ICE.
This is a work-around for llvm.org/PR52584
The file was modifiedlibcxx/utils/ci/run-buildbot
Commit a8025e06fc0f2fe1bbee9e1a6f15c336bfbdcb05 by koraq
Microsoft's floating-point to_chars powered by Ryu and Ryu Printf

Microsoft would like to contribute its implementation of floating-point to_chars to libc++. This uses the impossibly fast Ryu and Ryu Printf algorithms invented by Ulf Adams at Google. Upstream repos: https://github.com/microsoft/STL and https://github.com/ulfjack/ryu .

Licensing notes: MSVC's STL is available under the Apache License v2.0 with LLVM Exception, intentionally chosen to match libc++. We've used Ryu under the Boost Software License.

This patch contains minor changes from Jorg Brown at Google, to adapt the code to libc++. He verified that it works in Google's Linux-based environment, but then I applied more changes on top of his, so any compiler errors are my fault. (I haven't tried to build and test libc++ yet.) Please tell me if we need to do anything else in order to follow https://llvm.org/docs/DeveloperPolicy.html#attribution-of-changes .

Notes:

* libc++'s integer charconv is unchanged (except for a small refactoring). MSVC's integer charconv hasn't been tuned for performance yet, so you're not missing anything.
* Floating-point from_chars isn't part of this patch because Jorg found that MSVC's implementation (derived from our CRT's strtod) was slower than Abseil's. If you're unable to use Abseil or another implementation due to licensing or technical considerations, Microsoft would be delighted if you used MSVC's from_chars (and you can just take it, or ask us to provide a patch like this). Ulf is also working on a novel algorithm for from_chars.
* This assumes that float is IEEE 32-bit, double is IEEE 64-bit, and long double is also IEEE 64-bit.
* I have added MSVC's charconv tests (the whole thing: integer/floating from_chars/to_chars), but haven't adapted them to libcxx's harness at all. (These tests will be available in the microsoft/STL repo soon.)
* Jorg added int128 codepaths. These were originally present in upstream Ryu, and I removed them from microsoft/STL purely for performance reasons (MSVC doesn't support int128; Clang on Windows does, but I found that x64 intrinsics were slightly faster).
* The implementation is split into 3 headers. In MSVC's STL, charconv contains only Microsoft-written code. xcharconv_ryu.h contains code derived from Ryu (with significant modifications and additions). xcharconv_ryu_tables.h contains Ryu's large lookup tables (they were sufficiently large to make editing inconvenient, hence the separate file). The xmeow.h convention is MSVC's for internal headers; you may wish to rename them.
* You should consider separately compiling the lookup tables (see https://github.com/microsoft/STL/issues/172 ) for compiler throughput and reduced object file size.
* See https://github.com/StephanTLavavej/llvm-project/commits/charconv for fine-grained history. (If necessary, I can perform some rebase surgery to show you what Jorg changed relative to the microsoft/STL repo; currently that's all fused into the first commit.)

Differential Revision: https://reviews.llvm.org/D70631
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/float_hex_precision_to_chars_test_cases.hpp
The file was addedlibcxx/src/include/to_chars_floating_point.h
The file was modifiedlibcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.no_new_in_libcxx.abilist
The file was modifiedlibcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.no_new_in_libcxx.abilist
The file was addedlibcxx/src/ryu/f2s.cpp
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/double_hex_precision_to_chars_test_cases.hpp
The file was modifiedlibcxx/src/CMakeLists.txt
The file was addedlibcxx/src/include/ryu/d2fixed_full_table.h
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/double_scientific_precision_to_chars_test_cases_2.hpp
The file was modifiedlibcxx/lib/abi/CHANGELOG.TXT
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/test.cpp
The file was modifiedlibcxx/docs/Status/Cxx17.rst
The file was addedlibcxx/src/ryu/d2fixed.cpp
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_1.hpp
The file was addedlibcxx/src/include/ryu/d2s.h
The file was addedlibcxx/src/include/ryu/ryu.h
The file was addedlibcxx/src/include/ryu/common.h
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/test.hpp
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/float_from_chars_test_cases.hpp
The file was addedlibcxx/src/ryu/README.txt
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_3.hpp
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/double_scientific_precision_to_chars_test_cases_3.hpp
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/double_scientific_precision_to_chars_test_cases_1.hpp
The file was addedlibcxx/src/include/ryu/d2s_full_table.h
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_2.hpp
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/double_from_chars_test_cases.hpp
The file was addedlibcxx/src/include/ryu/d2fixed.h
The file was modifiedlibcxx/docs/Status/Cxx17Papers.csv
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/double_scientific_precision_to_chars_test_cases_4.hpp
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/double_to_chars_test_cases.hpp
The file was addedlibcxx/src/ryu/d2s.cpp
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/float_general_precision_to_chars_test_cases.hpp
The file was modifiedlibcxx/src/charconv.cpp
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/floating_point_test_cases.hpp
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/double_fixed_precision_to_chars_test_cases_4.hpp
The file was addedlibcxx/src/include/ryu/d2s_intrinsics.h
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/test.pass.cpp
The file was modifiedlibcxx/include/charconv
The file was modifiedlibcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.no_new_in_libcxx.abilist
The file was modifiedlibcxx/docs/ReleaseNotes.rst
The file was modifiedlibcxx/CREDITS.TXT
The file was modifiedlibcxx/include/__availability
The file was addedlibcxx/src/include/ryu/digit_table.h
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/double_general_precision_to_chars_test_cases.hpp
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/float_fixed_precision_to_chars_test_cases.hpp
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/float_to_chars_test_cases.hpp
The file was addedlibcxx/src/include/ryu/f2s.h
The file was addedlibcxx/test/std/utilities/charconv/charconv.msvc/float_scientific_precision_to_chars_test_cases.hpp
Commit dfb68e49aa1a9a358cda3ad902acaf5e3f1c0241 by thakis
[gn build] (semiautomaticallly) port a8025e06fc0f (libc++ ryu)
The file was modifiedllvm/utils/gn/secondary/libcxx/src/BUILD.gn
Commit 3536e18a6c834e5d683792859ea97696c1205405 by koraq
Remove duplicate comment

The same comment appears in the very next line.

Reviewed By: #libc, ldionne

Differential Revision: https://reviews.llvm.org/D115018
The file was modifiedlibcxx/include/__string
Commit 514d37441918dd04a2cd4f35c08959d7c3ff096d by kbessonova
Follow-up for D113741: fix DebugInfo/Generic/lexical_block_static.ll on MachO
The file was modifiedllvm/test/DebugInfo/Generic/lexical_block_static.ll
Commit dccddb268be8363b91157684be743807af746fce by spatel
[InstCombine] add tests for icmp with mul op with known bits; NFC

D114962
The file was modifiedllvm/test/Transforms/InstCombine/icmp-mul.ll
Commit 0bb8a97b41498860d60a06ad1df2758a36a580ca by spatel
[InstSimplify] add/adjust tests for 'or' logic fold; NFC

The last test shows a miscompile:
https://alive2.llvm.org/ce/z/s5xy55
The file was modifiedllvm/test/Transforms/InstSimplify/or.ll
Commit c65e651e6025dd04b69ea144a94962a5b4716681 by spatel
[InstSimplify] fix logic fold of 'or' for vectors

Reduce code duplication for commutative pattern matching
and fix a miscompile.

We can't safely propagate an undef element in this transform:
https://alive2.llvm.org/ce/z/s5xy55
The file was modifiedllvm/lib/Analysis/InstructionSimplify.cpp
The file was modifiedllvm/test/Transforms/InstSimplify/or.ll