- Feb 09, 2021
-
-
Martin Storsjö authored
As the actual MSVC toolset doesn't use the GAS-style assembly that Clang/LLVM produces and consumes, there's no reference for what string to use for e.g. comments when building with a MSVC triple. This frees up the use of semicolon as separator string, just like was done for GNU targets in 23413195. (Previously, both the separator and comment strings were set to the same, a semicolon.) Compiler-rt extensively uses separator chars in its assembly, and that assembly should be buildable with clang-cl for MSVC too. Differential Revision: https://reviews.llvm.org/D96259
-
Fangrui Song authored
In assembly files, omitting `.type foo,@function` is common. Such functions have type `STT_NOTYPE` and llvm-symbolizer reports `??` for them. An ifunc symbol usually has an associated resolver symbol which is defined at the same address. Returning either one is fine for symbolization. The resolver symbol may not end up in the symbol table if (object file) `.L` is used (linked image) .symtab is stripped while .dynsym is retained. This patch allows ELF STT_NOTYPE/STT_GNU_IFUNC symbols for .symtab symbolization. I have left TODO in the test files for an unimplemented STT_FILE heuristic. Differential Revision: https://reviews.llvm.org/D95916
-
Roland McGrath authored
GNU binutils accepts only `.arch_extension memtag` while Clang accepts either that or `.arch_extension mte` to mean the same thing. Reviewed By: pcc Differential Revision: https://reviews.llvm.org/D95996
-
Eric Schweitz authored
-
Jon Chesterfield authored
-
Jianzhou Zhao authored
To simplify the review of https://reviews.llvm.org/D95835. Reviewed-by: morehouse Differential Revision: https://reviews.llvm.org/D96177
-
Jez Ng authored
Summary: We should avoid passing a null pointer to memcpy.
-
Craig Topper authored
This matches what we do in the VLMAX SDNode patterns.
-
Mitch Phillips authored
Adds a new allocation API to GWP-ASan that handles size+alignment restrictions. Reviewed By: cryptoad, eugenis Differential Revision: https://reviews.llvm.org/D94830
-
Mircea Trofin authored
This reverts commit 87f8a08c.
-
Craig Topper authored
Building on the fixed vector support from D95705 I've added ISD nodes for vmv.v.x and vfmv.v.f and switched to lowering the intrinsics to it. This allows us to share the same isel patterns for both. This doesn't handle splats of i64 on RV32 yet. The build_vector gets converted to a vXi32 build_vector+bitcast during type legalization. Not sure the best way to handle this at the moment. Differential Revision: https://reviews.llvm.org/D96108
-
Craig Topper authored
Follow up to D95705. Does not include the commuting support from D95800. Differential Revision: https://reviews.llvm.org/D96103
-
Nicolas Vasilache authored
This revision fixes the fact that the padding transformation did not have enough information to set the proper type for the padding value. Additionally, the verifier for Yield in the presence of PadTensorOp is fixed to properly report incorrect number of results or operands. Previously, the error would be silently ignored which made the core issue difficult to debug. Differential Revision: https://reviews.llvm.org/D96264
-
Jez Ng authored
The LSDA pointers are encoded as offsets from the image base, and arranged in one big contiguous array. Each second-level page records the offset within that LSDA array which corresponds to the LSDA for its first CU entry. Reviewed By: clayborg Differential Revision: https://reviews.llvm.org/D95810
-
Jez Ng authored
Note that there is a triple indirection involved with personalities and compact unwind: 1. Two bits of each CU encoding are used as an offset into the personality array. 2. Each entry of the personality array is an offset from the image base. The resulting address (after adding the image base) should point within the GOT. 3. The corresponding GOT entry contains the actual pointer to the personality function. To further complicate things, when the personality function is in the object file (as opposed to a dylib), its references in `__compact_unwind` may refer to it via a section + offset relocation instead of a symbol relocation. Since our GOT implementation can only create entries for symbols, we have to create a synthetic symbol at the given section offset. Reviewed By: clayborg Differential Revision: https://reviews.llvm.org/D95809
-
Craig Topper authored
[RISCV] Add initial support for converting fixed vectors to scalable vectors during lowering to use RVV instructions. This is an alternative to D95563. This is modeled after a similar feature for AArch64's SVE that uses predicated scalable vector instructions.a Rather than use predication, this patch uses an explicit VL operand. I've limited it to always use LMUL=1 for now, but we can improve this in the future. This requires a bunch of new ISD opcodes to carry the VL operand. I think we can probably lower intrinsics to these ISD opcodes to cut down on the size of the isel table. Which is why I've added patterns for all integer/float types and not just LMUL=1. I'm only testing one vector width right now, but the width is programmable via the command line. Reviewed By: frasercrmck Differential Revision: https://reviews.llvm.org/D95705
-
Fangrui Song authored
Choose big if -EB is specified, little if -EL is specified, or default if neither is specified. The new behavior matches GNU ld. Fixes: https://github.com/ClangBuiltLinux/linux/issues/1025 Differential Revision: https://reviews.llvm.org/D96214
-
Alex Zinenko authored
After the LLVM dialect types were ported to use built-in types, the parser kept supporting the old syntax for LLVM dialect types to produce built-in types for compatibility. Drop this support. Reviewed By: mehdi_amini Differential Revision: https://reviews.llvm.org/D96275
-
Florian Hahn authored
This patch adds handling for zero-extended GEP indices.
-
Craig Topper authored
This adds support for commuting operands and converting between vfmadd and vfmacc to avoid register copies. To avoid messing up intrinsic behavior, I've added new pseudo instructions that have the isCommutable flag set. These pseudos also force a tail agnostic policy. The intrinsic version still use the tail undisturbed policy. For best results it looks like we need to start with fmadd and only pick fmacc if its beneficial. MachineCSE commutes without contraining the operands and then commutes back if it didn't help with CSE. So I've made sure that when the operand choice isn't constrained, we will keep fmadd for MachineCSE and when it does the second commute, we get back the original instruction. Reviewed By: frasercrmck Differential Revision: https://reviews.llvm.org/D95800
-
Julian Lettner authored
The new pass manager was enabled by default [1]. The commit message states the following relevant differences: * The inliner works slightly differently * -O1 does some amount of inlining These tests are affected because they specify `-O1` and then check the reported stack trace. [1] https://reviews.llvm.org/D95380 Differential Revision: https://reviews.llvm.org/D96198
-
Craig Topper authored
This ensures that we'll match immediates consistently regardless of whether we match them as a standalone splat or as part of another operation. While I was there I added complexities to the simm5/uimm5 patterns so we didn't have to assume that the 1 on the non-immediate was lower than what tablegen inferred. I had to make a minor tweak to tablegen to fix one place that didn't expect to see a ComplexPattern that wasn't a "leaf". Reviewed By: frasercrmck Differential Revision: https://reviews.llvm.org/D96199
-
Jay Foad authored
-
Michał Górny authored
Introduce mips64 support to match the legacy FreeBSD plugin. Similarly to the legacy plugin, the code does not support FPU registers at the moment. The support for them will be submitted separately as it requires changes to the register context shared by both plugins. This also includes software single-stepping support that is moved from the Linux plugin into a common Utility class. The FreeBSD code also starts explicitly ignoring EINVAL from PT_CLEARSTEP since this is easier to implement than checking whether hardware single-stepping were used. Differential Revision: https://reviews.llvm.org/D95802
-
Frederik Gossen authored
-
Fangrui Song authored
This patch adds * Big-endian values for `R_AARCH64_{ABS,PREL}{16,32,64}` and `R_AARCH64_PLT32` * aarch64elfb & aarch64linuxb BFD emulations * elf64-bigaarch64 output format (bfdname) Link: https://github.com/ClangBuiltLinux/linux/issues/1288 Differential Revision: https://reviews.llvm.org/D96188 -
Fangrui Song authored
Reviewed By: jhenderson Differential Revision: https://reviews.llvm.org/D96211
-
Eric Schweitz authored
Upstream the changes made to the !fir.char type. https://github.com/flang-compiler/f18-llvm-project/pull/269 https://github.com/flang-compiler/f18-llvm-project/pull/557 Author: Eric Schweitz, Jean Perier Differention Revision: https://reviews.llvm.org/D96183
-
Xiangling Liao authored
As Itanium ABI[http://itanium-cxx-abi.github.io/cxx-abi/abi.html#once-ctor] points out: "The size of the guard variable is 64 bits. The first byte (i.e. the byte at the address of the full variable) shall contain the value 0 prior to initialization of the associated variable, and 1 after initialization is complete." Differential Revision: https://reviews.llvm.org/D95822
-
Anastasia Stulova authored
Pipe element type spelling for arg info metadata should follow the same behavior as normal type spelling. We should only use the canonical type spelling in the base type field. This patch also removed duplication in type handling. Tags: #clang Differential Revision: https://reviews.llvm.org/D96151
-
- Feb 08, 2021
-
-
Sander de Smalen authored
Making VectorIndex an `int` instead of `unsigned`, silences the warning: comparison of unsigned expression in ‘>= 0’ is always true in: template <int Min, int Max> DiagnosticPredicate isVectorIndex() const { ... if (VectorIndex.Val >= Min && VectorIndex.Val <= Max) return DiagnosticPredicateTy::Match; ... } when Min is 0. -
Louis Dionne authored
We don't have many of those and they are rather slow, so we'd rather not run those jobs if we know other jobs in the pipeline failed anyway.
-
Tim Northover authored
More MachO madness for everyone. MachO relocations are only 32-bits, which means the ARM64_RELOC_ADDEND one only actually has 24 (signed) bits for the actual addend. This is a problem when calculating the address of a basic block; because it has no symbol of its own, the sequence adrp x0, Ltmp0@PAGE add x0, x0, x0 Ltmp0@PAGEOFF is represented by relocation with an addend that contains the offset from the function start to Ltmp, and so the largest function where this is guaranteed to work is 8MB. That's not quite big enough that we can call it user error (IMO). So this patch puts the any blockaddress into a constant-pool, where the addend is instead stored in the (x)word being relocated, which is obviously big enough for any function.
-
Jamie Schmeiser authored
Summary: Introduce base classes that hold a textual represent of the IR based on basic blocks and a base class for comparing this representation. A new change printer is introduced that uses these classes to save and compare representations of the IR before and after each pass. It only reports when changes are made by a pass (similar to -print-changed) except that the changes are shown in a patch-like format with those lines that are removed shown in red prefixed with '-' and those added shown in green with '+'. This functionality was introduced in my tutorial at the 2020 virtual developer's meeting. Author: Jamie Schmeiser <schmeise@ca.ibm.com> Reviewed By: aeubanks (Arthur Eubanks) Differential Revision: https://reviews.llvm.org/D91890
-
Simon Pilgrim authored
This is going to be necessary for a future reuse of MergeInnerShuffle
-
Mikael Holmen authored
My toolchain (LLVM 8.0, libstdc++ 5.4.0) complained with: 12:38:19 ../lib/Target/RISCV/RISCVISelLowering.cpp:1717:12: error: chosen constructor is explicit in copy-initialization 12:38:19 return {RISCVISD::VECREDUCE_FADD, Op.getOperand(0), 12:38:19 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 12:38:19 /proj/flexasic/app/llvm/8.0/bin/../lib/gcc/x86_64-unknown-linux-gnu/5.4.0/../../../../include/c++/5.4.0/tuple:479:19: note: explicit constructor declared here 12:38:19 constexpr tuple(_UElements&&... __elements) 12:38:19 ^ 12:38:19 ../lib/Target/RISCV/RISCVISelLowering.cpp:1720:12: error: chosen constructor is explicit in copy-initialization 12:38:19 return {RISCVISD::VECREDUCE_SEQ_FADD, Op.getOperand(1), Op.getOperand(0)}; 12:38:19 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 12:38:19 /proj/flexasic/app/llvm/8.0/bin/../lib/gcc/x86_64-unknown-linux-gnu/5.4.0/../../../../include/c++/5.4.0/tuple:479:19: note: explicit constructor declared here 12:38:19 constexpr tuple(_UElements&&... __elements) 12:38:19 ^ 12:38:19 2 errors generated. This commit adds explicit calls to std::make_tuple to work around the problem. -
Nicholas Guy authored
Different targets might handle branch performance differently, so this patch allows for targets to specify the TailDuplicateSize threshold. Said threshold defines how small a branch can be and still be duplicated to generate straight-line code instead. This patch also specifies said override values for the AArch64 subtarget. Differential Revision: https://reviews.llvm.org/D95631
-
KareemErgawy-TomTom authored
Following up on https://reviews.llvm.org/D94360, this patch splits the serialization code into multiple source files to provide a better structure and allow parallel compilation. Reviewed By: antiagainst Differential Revision: https://reviews.llvm.org/D95855
-
Florian Hahn authored
This patch improves the index management during constraint building. Previously, the code rejected constraints which used values that were not part of Value2Index, but after combining the coefficients of the new indices were 0 (if ShouldAdd was 0). In those cases, no new indices need to be added. Instead of adding to Value2Index directly, add new indices to the NewIndices map. The caller can then check if it needs to add any new indices. This enables checking constraints like `a + x <= a + n` to `x <= n`, even if there is no constraint for `a` directly.
-
Jay Foad authored
Differential Revision: https://reviews.llvm.org/D96143
-