- Nov 08, 2023
-
-
Krzysztof Parzyszek authored
-
Florian Hahn authored
Update addInfoForInductions to also check if the add-rec is for the current loop. Otherwise we might add incorrect facts or crash. Fixes a miscompile & crash introduced by 00396e6a.
-
alexfh authored
Revert "[DAGCombiner] Transform `(icmp eq/ne (and X,C0),(shift X,C1))` to use rotate or to getter constants." due to a miscompile (#71598) - Revert "[DAGCombiner] Transform `(icmp eq/ne (and X,C0),(shift X,C1))` to use rotate or to getter constants." - causes a miscompile, see https://github.com/llvm/llvm-project/commit/112e49b38150b8bfdef01434309d1b05204193e4#commitcomment-131943923 - Revert "[X86] Fix gcc warning about mix of enumeral and non-enumeral types. NFC", which fixes a compiler warning in the commit above
-
Ilya Leoshkevich authored
GCC supports building individual functions with backchain using the __attribute__((target("backchain"))) syntax, and Clang should too. Clang translates this into the "target-features"="+backchain" attribute, and the -mbackchain command-line option into the "backchain" attribute. The backend currently checks only the latter; furthermore, the backchain target feature is not defined. Handle backchain like soft-float. Define a target feature, convert function attribute into it in getSubtargetImpl(), and check for target feature instead of function attribute everywhere. Add an end-to-end test to the Clang testsuite. -
Florian Hahn authored
In the added test case, the AddRec from the first loop is used incorrectly in the second loop.
-
Nikita Popov authored
If we know that the sdiv result is a single constant, directly use that instead of performing narrowing. Fixes https://github.com/llvm/llvm-project/issues/71659.
-
Nikita Popov authored
-
Nicolas Vasilache authored
-
Björn Pettersson authored
When hovering over variables larger than 64 bits, with more than 64 active bits, there were assertion failures since Hover is trying to print the value as a 64-bit hex value. There is already protection avoiding to call printHex if there is more than 64 significant bits. And we already truncate and print negative values using only 32 bits, when possible. So we can simply truncate values with more than 64 bits to avoid the assert when using getZExtValue. The result will be that for example a negative 128 bit variable is printed using 64 bits, when possible. There is still no support for printing more than 64 bits. That would involve more changes since for example llvm::FormatterNumber is limited to 64 bits. This is a second attempt at landing this patch. Now with protection to ensure we use a triple that supports __int128_t.
-
Jie Fu authored
/llvm-project/llvm/lib/Target/AMDGPU/SIFrameLowering.cpp:1829:8: error: unused variable 'IsChainFunction' [-Werror,-Wunused-variable] bool IsChainFunction = MF.getInfo<SIMachineFunctionInfo>()->isChainFunction(); ^ 1 error generated. -
Vlad Serebrennikov authored
This patch leaves `ObjCOrBuiltinID` alone, because of performance concerns with potential refactoring that would enable correct types in debug info.
-
Jie Fu authored
/llvm-project/mlir/lib/Dialect/NVGPU/IR/NVGPUDialect.cpp:396:31: error: comparison of integers of different signs: 'size_t' (aka 'unsigned long') and 'int64_t' (aka 'long long') [-Werror,-Wsign-compare] if (getCoordinates().size() != ~~~~~~~~~~~~~~~~~~~~~~~ ^ 1 error generated. -
Graham Hunter authored
-
LLVM GN Syncbot authored
-
Bjorn Pettersson authored
This reverts commit 2626916c. It failed on buildbots not supporting __int128_t.
-
Mitch Phillips authored
This reverts commit 32a3f2af. Reason: Broke the sanitizer buildbots. More details at https://github.com/llvm/llvm-project/commit/32a3f2afe6ea7ffb02a6a188b123ded6f4c89f6c
-
Markos Horro authored
The same idea as in 34d380e1, but considering truncation instructions. Improvement for #59633.
-
Guray Ozen authored
This PR improves and cleans-up verifiers of TmaCreateDescriptor and TmaAsyncLoad Ops and unifies them. The PR verifiers followings that didn't before: - address space - rank match between descriptor and memref - element type match between descriptor and memref - shape type match between descriptor and memref
-
Job Noorman authored
BOLT currently hooks its its instrumentation finalization function via `DT_FINI`. However, this method of calling finalization routines is not supported anymore on newer ABIs like RISC-V. `DT_FINI_ARRAY` is preferred there. This patch adds support for hooking into `DT_FINI_ARRAY` instead if the binary does not have a `DT_FINI` entry. If it does, `DT_FINI` takes precedence so this patch should not change how the currently supported instrumentation targets behave. `DT_FINI_ARRAY` points to an array in memory of `DT_FINI_ARRAYSZ` bytes. It consists of pointer-length entries that contain the addresses of finalization functions. However, the addresses are only filled-in by the dynamic linker at load time using relative relocations. This makes hooking via `DT_FINI_ARRAY` a bit more complicated than via `DT_FINI`. The implementation works as follows: - While scanning the binary: find the section where `DT_FINI_ARRAY` points to, r...
-
Simon Pilgrim authored
-
Simon Pilgrim authored
Single use each of lhs/rhs so we shouldn't need them.
-
Simon Pilgrim authored
-
Björn Pettersson authored
When hovering over variables larger than 64 bits, with more than 64 active bits, there were assertion failures since Hover is trying to print the value as a 64-bit hex value. There is already protection avoiding to call printHex if there is more than 64 significant bits. And we already truncate and print negative values using only 32 bits, when possible. So we can simply truncate values with more than 64 bits to avoid the assert when using getZExtValue. The result will be that for example a negative 128 bit variable is printed using 64 bits, when possible. There is still no support for printing more than 64 bits. That would involve more changes since for example llvm::FormatterNumber is limited to 64 bits.
-
Björn Pettersson authored
In commit 5a9a02f6 scalar evolution got support for computing SCEV:s for (ashr(add(shl(x, n), c), m)) constructs. The code however used APInt::getZExtValue without first checking that the APInt would fit inside an uint64_t. When for example using 128-bit types we ended up in assertion failures (or maybe miscompiles in non-assert builds). This patch simply avoid converting from APInt to uint64_t when creating the truncated constant. We can just truncate the APInt instead.
-
Piotr Zegar authored
Enums without enumerators (empty) are now excluded from analysis as it's not possible to peroperly determinate new narrowed type, and such enums can be used in diffrent way, like as strong-types. Closes #71544
-
Mitch Phillips authored
This reverts commit 086b6534. Reason: Broke under -Werror. More details in https://reviews.llvm.org/D123235
-
David Spickett authored
The contents of which are mostly SPSR_EL1 as shown in the Arm manual, with a few adjustments for things Linux says userspace shouldn't concern itself with. ``` (lldb) register read cpsr cpsr = 0x80001000 = (N = 1, Z = 0, C = 0, V = 0, SS = 0, IL = 0, ... ``` Some fields are always present, some depend on extensions. I've checked for those extensions using HWCAP and HWCAP2. To provide this for core files and live processes I've added a new class LinuxArm64RegisterFlags. This is a container for all the registers we'll want to have fields and handles detecting fields and updating register info. This is used by the native process as follows: * There is a global LinuxArm64RegisterFlags object. * The first thread takes a mutex on it, and updates the fields. * Subsequent threads see that detection is already done, and skip it. * All threads then update their own copy of the register information with pointers to the field information contained in the global object. This means that even though every thread will have the same fields, we only detect them once and have one copy of the information. Core files instead have a LinuxArm64RegisterFlags as a member, because each core file could have different saved capabilities. The logic from there is the same but we get HWACP values from the corefile note. This handler class is Linux specific right now, but it can easily be made more generic if needed. For example by using LLVM's FeatureBitset instead of HWCAPs. Updating register info is done with string comparison, which isn't ideal. For CPSR, we do know the register number ahead of time but we do not for other registers in dynamic register sets. So in the interest of consistency, I'm going to use string comparison for all registers including cpsr. I've added tests with a core file and live process. Only checking for fields that are always present to account for CPU variance. -
Nikita Popov authored
Looking through inttoptr / ptrtoint intermixed with GEPs is very questionable from a provenance perspective. We also don't seem to have any test coverage that shows this is useful (apart from one test I added to guard against a crash).
-
Jay Foad authored
Track the live register state immediately before, instead of after, MBBI. This makes it simple to track the state at the start or end of a basic block without a separate (and poorly named) Tracking flag. This changes the API of the backward(MachineBasicBlock::iterator I) method, which now recedes to the state just before, instead of just after, *I. Some clients are simplified by this change. There is one small functional change shown in the lit tests where multiple spilled registers all need to be reloaded before the same instruction. The reloads will now be inserted in the opposite order. This should not affect correctness.
-
Timm Baeder authored
The boolean argument in the APSInt constructor is IsUnsigned, not IsSigned.
-
Pravin Jagtap authored
Operands of `__builtin_amdgcn_update_dpp` need to evaluate to constant to match the intrinsic requirements. Fixes: SWDEV-426822, SWDEV-431138 --------- Authored-by:Pravin Jagtap <Pravin.Jagtap@amd.com>
-
Nicolas Vasilache authored
Address issues with #71597 post-revert and and reland
-
Nicolas Vasilache authored
This reverts commit 4f51b2bf.
-
Nicolas Vasilache authored
This reverts commit 8c014e59.
-
Pierre van Houtryve authored
Also disables generation of MutateOpcode. It's almost never used in combiners anyway. If we really want to use it, it needs to be investigated & properly fixed (see TODO) Fixes #70780 -
Florian Mayer authored
-
David Spickett authored
ZT0 is much like ZA apart from not being scalable, so there's not much new to cover.
-
Zhaoxuan Jiang authored
The landing of https://reviews.llvm.org/D88663 renders the existing stp-opt-with-renaming-undef-assert test useless because the picked register for renaming becomes q0 instead of q16.
-
Nicolas Vasilache authored
Followup from #71597
-
Cullen Rhodes authored
This patch extends ArmSMEToSCF to support lowering of masked tile_load ops. Only masks created by 'vector.create_mask' are currently supported. There are two lowerings depending on the pad. For pad of constant zero, the tile is first zeroed, then only active rows are loaded. For non-zero pad, the scalar pad is broadcast to a 1-D vector and a regular 'vector.masked_load' (will be lowered to SVE, not SME) loads each slice, with padding specified as a passthru and the 2-D mask combined into a 1-D mask. The resulting slice is then inserted into the tile with 'arm_sme.move_vector_to_tile_slice'.
-