- May 11, 2022
-
-
Xiang1 Zhang authored
Reviewed By: PengfeiWang Differential Revision: https://reviews.llvm.org/D125159
-
Mingming Liu authored
Differential Revision: https://reviews.llvm.org/D125345
-
Ting Wang authored
Enable FeatureISA2_06 on Power A2 target Reviewed By: nemanjai Differential Revision: https://reviews.llvm.org/D125203
-
Eduard Zingerman authored
Commit 8a633261 ("[BPF] Mark FI_ri as isPseudo to avoid assertion during disassembly") added isPseudo to FI_ri insn in BPFInstrInfo.td file. This patch added the missing test file. Differential Revision: https://reviews.llvm.org/D125185
-
Eduard Zingerman authored
When a specific sequence of bytes is present in the file during disassembly the disassembler fails with the following assertion: ... 0: 18 20 00 00 00 00 00 00 lea ... Assertion `idx < size()' failed. ... llvm::SmallVectorTemplateCommon<...>::operator[](...) ... llvm::MCInst::getOperand(unsigned int) ... llvm::BPFInstPrinter::printOperand(...) ... llvm::BPFInstPrinter::printInstruction() ... llvm::BPFInstPrinter::printInst(...) ... ... The byte sequence causing the error is (little endian): 18 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 The issue could be reproduced using the program bellow: test.ir: @G = constant [16 x i8] [i8 u0x18, i8 u0x20, i8 u0x00, i8 u0x00, i8 u0x00, i8 u0x00, i8 u0x00, i8 u0x00, i8 u0x00, i8 u0x00, i8 u0x00, i8 u0x00, i8 u0x00, i8 u0x00, i8 u0x00, i8 u0x00], section "foo", align 8 Compiled and disassembled as follows: cat test.ir | llc -march=bpfel -filetype=obj -o - \ | llvm-objdump --arch=bpfel --section=foo -d - This byte sequence corresponds to FI_ri instruction declared in the BPFInstrInfo.td as follows: def FI_ri : TYPE_LD_ST<BPF_IMM.Value, BPF_DW.Value, (outs GPR:$dst), (ins MEMri:$addr), "lea\t$dst, $addr", [(set i64:$dst, FIri:$addr)]> { // This is a tentative instruction, and will be replaced // with MOV_rr and ADD_ri in PEI phase let Inst{51-48} = 0; let Inst{55-52} = 2; let Inst{47-32} = 0; let Inst{31-0} = 0; let BPFClass = BPF_LD; } Notes: - First byte (opcode) is formed as follows: - BPF_IMM.Value is 0x00 - BPF_DW.Value is 0x18 - BPF_LD is 0x00 - Second byte (registers) is formed as follows: - let Inst{55-52} = 2; - let Inst{51-48} = 0; The FI_ri instruction is always replaced by MOV_rr ADD_ri instructions pair in the BPFRegisterInfo::eliminateFrameIndex method. Thus, this instruction should be invisible to disassembler. This patch achieves this by adding "isPseudo" flag for this instruction. The bug was found by decompiling of one of the BPF tests from Linux kernel (llvm-objdump -D tools/testing/selftests/bpf/bpf_iter_sockmap.o) Differential Revision: https://reviews.llvm.org/D125185 -
Florian Mayer authored
-
Florian Mayer authored
Don't fail on corrupted ELF file on indexing. This happens because files change in the directory from concurrent tests.
-
Peter Klausler authored
Inquiries into the bounds, size, and length of local variables (and function results) are acceptable specification expressions. A recent change allowed them for dummy arguments that are not OPTIONAL or INTENT(OUT), but didn't address other object entities. Differential Revision: https://reviews.llvm.org/D125343
-
Nick Desaulniers authored
We're having a hard time booting the ARCH=i386 Linux kernel with clang after removing -ffreestanding because instcombine was dropping inreg from callers during libcall simplification, but not the callees defined in different translation units. This led the callers and callees to have wildly different calling conventions, which (predictably) blew up at runtime. Infer the inreg param attrs on function declarations from the module metadata "NumRegisterParameters." This allows us to boot the ARCH=i386 Linux kernel (w/ -ffreestanding removed). Fixes: https://github.com/llvm/llvm-project/issues/53645 Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D125285
-
Wende Tan authored
The original fix (commit 23ec5782) of https://github.com/llvm/llvm-project/issues/52787 only adds `Function`s that have `Instruction`s that directly use `BlockAddress`es into the bitcode (`FUNC_CODE_BLOCKADDR_USERS`). However, in either @rickyz's original reproducing code: ``` void f(long); __attribute__((noinline)) static void fun(long x) { f(x + 1); } void repro(void) { fun(({ label: (long)&&label; })); } ``` ``` ... define dso_local void @repro() #0 { entry: br label %label label: ; preds = %entry tail call fastcc void @fun() ret void } define internal fastcc void @fun() unnamed_addr #1 { entry: tail call void @f(i64 add (i64 ptrtoint (i8* blockaddress(@repro, %label) to i64), i64 1)) #3 ret void } ... ``` or the xfs and overlayfs in the Linux kernel, `BlockAddress`es (e.g., `i8* blockaddress(@repro, %label)`) may first compose `ConstantExpr`s (e.g., `i64 ptrtoi...
-
Mingming Liu authored
(following AND) and eliminates redundant TEST instruction. Differential Revision: https://reviews.llvm.org/D124118
-
Chia-hung Duan authored
Before dump, Insetad of switching to generic form silently after verification failure. Print some debug logs to help identify why an op may be printed in a different way. Reviewed By: rriddle Differential Revision: https://reviews.llvm.org/D125136
-
Thomas Raoux authored
Move async copy operations to NVGPU as they only exist on NV target and are designed to match ptx semantic. This allows us to also add more fine grain caching hint attribute to the op. Add hint to bypass L1 and hook it up to NVVM op. Differential Revision: https://reviews.llvm.org/D125244
-
Vasileios Porpodas authored
The current reordering scheme only checks the ordering of in-tree operands. There are some cases, however, where we need to adjust the ordering based on the ordering of a future SLP-tree who's instructions are not part of the current tree, but are external users. This patch is a simple implementation of this. We keep track of scalar stores that are users of TreeEntries and if they look profitable to vectorize, then we keep track of their ordering. During the reordering step we take this new index order into account. This can remove some shuffles in cases like in the lit test. Differential Revision: https://reviews.llvm.org/D125111
-
Philip Reames authored
-
Philip Reames authored
-
Mike Rice authored
This adds support for variable stride with the val, uval, and ref linear modifiers. Previously only the no modifer type ls<argno> was supported. val -> Ls<argno> uval -> Us<argno> ref -> Rs<argno> Differential Revision: https://reviews.llvm.org/D125330
-
LLVM GN Syncbot authored
-
Mehdi Amini authored
-
Jan Korous authored
This reverts commit ce583b14.
-
Mingming Liu authored
This reverts commit d84ca05e. Will revert, update commit message and re-commit.
-
Vasileios Porpodas authored
[SLP][NFC] Precommit a lit test for a followup patch that improves tree reordering for external users. Differential Revision: https://reviews.llvm.org/D125110
-
Erich Keane authored
-
Jim Ingham authored
It was originally only in "gdb-remote process" but it is convenient to also have it come as part of gdb-remote packets.
-
Matthias Braun authored
-
Nathan James authored
-
jeff authored
This patch adds cluster edges between independent MFMA instructions. Additionally, it propogates all predecessors of cluster insts to the root of the cluster(s), and all successors to the leaf(ves) of the cluster(s) -- this is done to remove the possibility that those insts will be interspersed within the cluster. Reviewed By: kerbowa Differential Revision: https://reviews.llvm.org/D124678
-
Erich Keane authored
-
Mingming Liu authored
Differential Revision: https://reviews.llvm.org/D124118
-
Erich Keane authored
last.
-
jeff authored
Reviewed By: kerbowa Differential Revision: https://reviews.llvm.org/D124647
-
Arthur Eubanks authored
D98718 caused the order of Values/MemoryLocations we pass to alias() to be significant due to storing the offset in the PartialAlias case. But some callers weren't audited and were still passing swapped arguments, causing the returned PartialAlias offset to be negative in some cases. For example, the newly added unittests would return -1 instead of 1. Fixes #55343, a miscompile. Reviewed By: asbirlea, nikic Differential Revision: https://reviews.llvm.org/D125328
-
Florian Hahn authored
The patch extends AArch64TTIImpl::instCombineIntrinsic to simplify llvm.aarch64.neon.f{min,max}nm(a, a) -> a. This helps with simplifying code written using the ACLE, e.g. see https://godbolt.org/z/jYxsoc89c Reviewed By: dmgreen Differential Revision: https://reviews.llvm.org/D125234 -
Yaxun (Sam) Liu authored
-
Nicolas Vasilache authored
This is now subsumed by `replaceLoopWithNewYields`. Differential Revision: https://reviews.llvm.org/D125309
-
Mahesh Ravishankar authored
The current implementation of `cloneWithNewYields` has a few issues - It clones the loop body of the original loop to create a new loop. This is very expensive. - It performs `erase` operations which are incompatible when this method is called from within a pattern rewrite. All erases need to go through `PatternRewriter`. To address these a new utility method `replaceLoopWithNewYields` is added which - moves the operations from the original loop into the new loop. - replaces all uses of the original loop with the corresponding results of the new loop - use a call back to allow caller to generate the new yield values. - the original loop is modified to just yield the basic block arguments corresponding to the iter_args of the loop. This represents a no-op loop. The loop itself is dead (since all its uses are replaced), but is not removed. The caller is expected to erase the op. Consequently, this method can be called from within a `matchAndRewrite` method of a `PatternRewriter`. The `cloneWithNewYields` could be replaces with `replaceLoopWithNewYields`, but that seems to trigger a failure during walks, potentially due to the operations being moved. That is left as a TODO. Differential Revision: https://reviews.llvm.org/D125147
-
Alan Zhao authored
The EXTERN keyword defines external symbols in MASM. Credit goes to epastor@ for implementing most of the logic; I (ayzhao@) added some bugfixes and tests. [0]: https://docs.microsoft.com/en-us/cpp/assembler/masm/extern-masm?view=msvc-170 Reviewed By: epastor Submitted By: epastor Differential Revision: https://reviews.llvm.org/D125273
-
Yaxun (Sam) Liu authored
CUDA/HIP programs use __noinline__ like a keyword e.g. __noinline__ void foo() {} since __noinline__ is defined as a macro __attribute__((noinline)) in CUDA/HIP runtime header files. However, gcc and clang supports __attribute__((__noinline__)) the same as __attribute__((noinline)). Some C++ libraries use __attribute__((__noinline__)) in their header files. When CUDA/HIP programs include such header files, clang will emit error about invalid attributes. This patch fixes this issue by supporting __noinline__ as a keyword, so that CUDA/HIP runtime could remove the macro definition. Reviewed by: Aaron Ballman, Artem Belevich Differential Revision: https://reviews.llvm.org/D124866 -
Sanjay Patel authored
shuffle (cast X), (cast Y), Mask --> cast (shuffle X, Y, Mask) This is similar to a recent transform with fneg ( b331a7eb ), but this is intentionally the most conservative first step to try to avoid regressions in codegen. There are several restrictions that could be removed as follow-up enhancements. Note that a cast with a unary shuffle is currently canonicalized in the other direction (shuffle after cast - D103038 ). We might want to invert that to be consistent with this patch.
-
Sanjay Patel authored
-