- Feb 13, 2022
-
-
Simon Pilgrim authored
[X86] combineAndnp - if an input has a zero (after inversion for Op0) in a vector element, then we don't demand that bit/element in the other input Similar to what we already perform in combineAnd
-
Benjamin Kramer authored
Reg unit sets are uniqued, so no need to wrap it in a set.
-
Benjamin Kramer authored
-
Sanjay Patel authored
I have not found a way to expose a difference for this patch in a test because it only triggers for a one-use load, but this is the code that was adapted into D118376 and caused miscompiles. The new code pattern is the same as what we do in narrowExtractedVectorLoad() (reduces load width for a subvector extract). This removes seemingly unnecessary manual worklist management and fixes the chain updating via "SelectionDAG::makeEquivalentMemoryOrdering()". Differential Revision: https://reviews.llvm.org/D119549
-
Simon Pilgrim authored
-
Simon Pilgrim authored
-
- Feb 12, 2022
-
-
Simon Pilgrim authored
Extend the existing fold to use SimplifyMultipleUseDemandedBits as well as SimplifyDemandedVectorElts/SimplifyDemandedBits when attempting to simplify based off known zero vector elements.
-
Sanjay Patel authored
-
Simon Pilgrim authored
To find uniform shift/rotation amounts, we currently use SelectionDAG::getSplatValue which creates a node that extracts the scalar value from the source vector, this makes it more difficult for later combines to remove the extraction and stay on the SIMD unit, and can be a problem when the scalar type is illegal (i.e. i64 vs v2i64 on 32-bit targets). This patch begins to use SelectionDAG::getSplatSourceVector (which SelectionDAG::getSplatValue uses internally) and adds a new variant of getTargetVShiftNode that takes the source vector and the splat index, and adjusts the vector in place to create the zero-extended value suitable for the SSE PSLL/PSRL/PSRA uniform instructions. I'm still addressing a number of regressions when used for normal vector shifts, so I've just handled the funnelshift/rotation lowering for this first patch. I can then focus on the yak shaving (SimplifyDemandedBits/Elts in particular) necessary to always use SelectionDAG::getSplatSourceVector. Differential Revision: https://reviews.llvm.org/D119090
-
Benjamin Kramer authored
-
Simon Pilgrim authored
-
Simon Pilgrim authored
-
Benjamin Kramer authored
-
Michał Górny authored
Apparently modern versions of ounit2 can only be found as "ounit2" rather than "oUnit" version 2. Update the CMake check to support both variants. This makes the OCaml tests run again with ounit2-2.2.4. Differential Revision: https://reviews.llvm.org/D119079
-
Aaron Ballman authored
A significant number of our tests in C accidentally use functions without prototypes. This patch converts the function signatures to have a prototype for the situations where the test is not specific to K&R C declarations. e.g., void func(); becomes void func(void); This is the eighth batch of tests being updated (there are a significant number of other tests left to be updated).
-
Simon Pilgrim authored
Just use dyn_cast<> to determine literal + container values from the binop
-
Simon Pilgrim authored
[clang-doc] populateParentNamespaces - use cast<> instead of dyn_cast<> to avoid dereference of nullptr The pointer is referenced immediately, so assert the cast is correct instead of returning nullptr It's only later iterations of the loop where the getParent() call might return nullptr
-
Simon Pilgrim authored
The pointer is referenced immediately, so assert the cast is correct instead of returning nullptr
-
Simon Pilgrim authored
[clang][sema] Sema::CheckFreeArguments - use cast<> instead of dyn_cast<> to avoid dereference of nullptr The pointer is referenced immediately, so assert the cast is correct instead of returning nullptr
-
Simon Pilgrim authored
The pointer is referenced immediately, so assert the cast is correct instead of returning nullptr
-
Simon Pilgrim authored
[clang-tidy] RedundantControlFlowCheck::issueDiagnostic - use cast<> instead of dyn_cast<> to avoid dereference of nullptr The pointer is referenced immediately, so assert the cast is correct instead of returning nullptr
-
Simon Pilgrim authored
[clang-tidy] FunctionASTVisitor::TraverseStmt - use cast<> instead of dyn_cast<> to avoid dereference of nullptr The pointer is referenced immediately, so assert the cast is correct instead of returning nullptr
-
Simon Pilgrim authored
[clang-tidy] NoexceptMoveConstructorCheck::check - use castAs<> instead of getAs<> to avoid dereference of nullptr The pointer is referenced immediately, so assert the cast is correct instead of returning nullptr
-
Simon Pilgrim authored
[clang-tidy] UseNoexceptCheck::check - use cast<> instead of dyn_cast<> to avoid dereference of nullptr The pointer is referenced immediately, so assert the cast is correct instead of returning nullptr
-
Simon Pilgrim authored
The pointer is always dereferenced
-
Simon Pilgrim authored
[clang-tidy] ProBoundsConstantArrayIndexCheck::check - use cast<> instead of dyn_cast<> to avoid dereference of nullptr The pointer is referenced immediately, so assert the cast is correct instead of returning nullptr
-
Simon Pilgrim authored
[clang-tidy] checkOverridingFunctionReturnType - use castAs<> instead of getAs<> to avoid dereference of nullptr The pointers are referenced immediately, so assert the cast is correct instead of returning nullptr
-
Douglas Yung authored
Revert "Reland "[lld/coff] Make lld-link work in a non-MSVC shell, add /winsysroot:"" This reverts commit 0574b5fc and 73e585e4. This change is causing the test Driver/cl-options.c to fail on Windows buildbots. https://lab.llvm.org/staging/#/builders/204/builds/1343
-
Haocong.Lu authored
A LUI instruction with flag RISCVII::MO_HI is usually used in conjunction with ADDI, and jointly complete address computation. To bind the cost evaluation of address computation, the LUI should not be regarded as a cheap move separately, which is consistent with ADDI. In this test case, it improves the unroll-loop code that the rematerialization of array's base address miss MachineCSE with Heuristics #1 at isProfitableToCSE. Reviewed By: asb, frasercrmck Differential Revision: https://reviews.llvm.org/D118216
-
Haocong.Lu authored
Reviewed By: asb, frasercrmck Differential Revision: https://reviews.llvm.org/D118218
-
Siva Chandra Reddy authored
-
Jez Ng authored
By unsetting this property, we are now able to internalize more symbols during LTO. I compared the output of `-save-temps` for both LLD and ld64, and we now match ld64's behavior as far as `lto-internalize.ll` is concerned. (Thanks @smeenai for working on an initial version of this diff!) Fixes https://github.com/llvm/llvm-project/issues/50574. Reviewed By: #lld-macho, thakis Differential Revision: https://reviews.llvm.org/D119372
-
Micah Weston authored
Implements ADDS/SUBS 24-bit immediate optimization using the MIPeepholeOpt pass. This follows the pattern: Optimize ([adds|subs] r, imm) -> ([ADDS|SUBS] ([ADD|SUB] r, #imm0, lsl #12), #imm1), if imm == (imm0<<12)+imm1. and both imm0 and imm1 are non-zero 12-bit unsigned integers. Optimize ([adds|subs] r, imm) -> ([SUBS|ADDS] ([SUB|ADD] r, #imm0, lsl #12), #imm1), if imm == -(imm0<<12)-imm1, and both imm0 and imm1 are non-zero 12-bit unsigned integers. The SplitAndOpcFunc type had to change the return type to an Opcode pair so that the first add/sub is the regular instruction and the second is the flag setting instruction. This required updating the code in the AND case. Testing: I ran a two stage bootstrap with this code. Using the second stage compiler, I verified that the negation of an ADDS to SUBS or vice versa is a valid optimization. Example V == -0x111111. Reviewed By: dmgreen Differential Revision: https://reviews.llvm.org/D118663
-
Chenbing.Zheng authored
Move some combine patterns to DAG combine,and it dealt with fixme left in RISCVInstrInfoZb.td. Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D119527
-
Florian Mayer authored
Reviewed By: browneee Differential Revision: https://reviews.llvm.org/D119606
-
Peter Klausler authored
It is generally an error when a USE-associated name clashes with a name defined locally, but not in all cases; a generic interface can be both USE-associated and locally defined. This works, but not when there is also a local subprogram with the same name, which is valid when that subprogram is a specific of the local generic. A bogus error issues at the point of the USE because name resolution will have already defined a symbol for the local subprogram. The solution is to collect the names of local generics when creating the program tree, and then create their symbols as well if their names are also local subprograms, prior to any USE association processing. Differential Revision: https://reviews.llvm.org/D119566
-
Roger Kim authored
We are just grouping the files and the tests together. Reviewed By: int3, #lld-macho Differential Revision: https://reviews.llvm.org/D119456
-
Roger Kim authored
This diff has the C-string literals printed into the mapfile in the symbol table like how ld64 does. Here is what ld64's mapfile looks like with C-string literals: ``` # Path: out # Arch: x86_64 # Object files: [ 0] linker synthesized [ 1] foo.o # Sections: # Address Size Segment Section 0x100003F7D 0x0000001D __TEXT __text 0x100003F9A 0x0000001E __TEXT __cstring 0x100003FB8 0x00000048 __TEXT __unwind_info # Symbols: # Address Size File Name 0x100003F7D 0x0000001D [ 1] _main 0x100003F9A 0x0000000E [ 1] literal string: Hello world!\n 0x100003FA8 0x00000010 [ 1] literal string: Hello, it's me\n 0x100003FB8 0x00000048 [ 0] compact unwind info ``` Here is what the new lld's Mach-O mapfile looks like: ``` # Path: /Users/rgr/local/llvm-project/build/Debug/tools/lld/test/MachO/Output/map-file.s.tmp/c-string-liter al-out # Arch: x86_64 # Object files: [ 0] linker synthes...
-
Florian Mayer authored
Reviewed By: eugenis Differential Revision: https://reviews.llvm.org/D119503
-
Florian Mayer authored
Reviewed By: eugenis Differential Revision: https://reviews.llvm.org/D119498
-