- Jun 05, 2023
-
-
LLVM GN Syncbot authored
-
pvanhout authored
This patch splits the GlobalISelEmitter.cpp file, which imports DAG ISel patterns for GISel, into separate "GISelMatchTable.h/cpp" files. The main motive is readability & maintainability. GlobalISelEmitter.cpp was about 6400 lines of mixed code, some bits implementing the match table codegen, some others dedicated to importing DAG patterns. Now it's down to 2700 + a 2150 header + 2000 impl. It's a tiny bit more lines overall but that's to be expected - moving inline definitions to out-of-line, adding comments in the .cpp, etc. all of that takes additional space, but I think the tradeoff is worth it. I did as little unrelated code changes as possible, I would say the biggest change is the introduction of the `gi` namespace used to prevent name conflicts/ODR violations with type common names such as `Matcher`. It was previously not an issue because all of the code was in an anonymous namespace. This moves all of the "match table" code out of the file, so predicates, rules, and actions are all separated now. I believe this helps separating concerns, now `GlobalISelEmitter.cpp` is more focused on importing DAG patterns into GI, instead of also containing the whole match table internals as well. Note: the new files have a "GISel" prefix to make them distinct from the other "GI" files in the same folder, which are for the combiner. Reviewed By: aemerson Differential Revision: https://reviews.llvm.org/D151432
-
Mikhail Goncharov authored
-
Matthias Springer authored
Differential Revision: https://reviews.llvm.org/D151998
-
Qiu Chaofan authored
-
Serge Pavlov authored
The change implements intrinsics 'get_fpenv', 'set_fpenv' and 'reset_fpenv'. They are used to read floating-point environment, set it or reset to some default state. They do the same actions as C library functions 'fegetenv' and 'fesetenv'. By default these intrinsics are lowered to calls to these functions. The new intrinsics specify FP environment as a value of integer type, it is convenient of most targets where the FP state is a content of some register. Some targets however use long representations. On X86 the size of FP environment is 256 bits, and even half of this size is not a legal ibteger type. To facilitate legalization in such cases, two sets of DAG nodes is used. Nodes GET_FPENV and SET_FPENV are used when FP environment may be represented by a legal integer type. Nodes GET_FPENV_MEM and SET_FPENV_MEM consider FP environment as a region in memory, much like `fesetenv` and `fegetenv` do. They are used when target has long representation for floationg-point state. Differential Revision: https://reviews.llvm.org/D71742
-
Qiu Chaofan authored
The build failure should be fixed by de681d53. Follow-up refactor will be done in future patches. This reverts commit e7c5ced0.
-
Haohai Wen authored
Reviewed By: skan Differential Revision: https://reviews.llvm.org/D152119
-
Vinayaka Bandishti authored
Fix a bug in detecting unknown ids as mods of known ids that was preventing certain fusions. While at this, fix the function signature of `detectAsMod` function to have output as the last argument. Reviewed By: bondhugula Differential Revision: https://reviews.llvm.org/D152055
-
Vinayaka Bandishti authored
Before serializing, optimizations on llvm were only called on path to hsaco, and not cubin. Define opt-level for `gpu-to-cubin` pass as well, and move call to optimize llvm to a common place. Reviewed By: bondhugula Differential Revision: https://reviews.llvm.org/D151554
-
Alex Voicu authored
Correctly account for the fact that certain targets do not use the generic address space for the implicit VTT argument. This entails adjusting `ItaniumCXXABI::buildStructorSignature`, `ItaniumCXXABI::addImplicitStructorParams` and `ItaniumCXXABI::getImplicitConstructorArgs` to use the target's global variable address space. The associated test is temporarily marked `XFAIL` as additional fixes are needed. Reviewed By: rjmccall Differential Revision: https://reviews.llvm.org/D150746
-
Haohai Wen authored
Each COFFSection bind MCSection when created. No need to iterate throught MCAssembler when writeSection. Reviewed By: skan Differential Revision: https://reviews.llvm.org/D151793
-
Chen Zheng authored
Change to system assembler to compile assembly files even -fintegrated-as is specified. We don't have a good Clang as for now for assembly files on AIX. Reviewed By: qiucf Differential Revision: https://reviews.llvm.org/D148490
-
Jacques Pienaar authored
Previously the SignedVarInt was incorrectly defined. Follow up work needed for improving Array printing/parsing, but correcting the definitions for now.
-
Alexey Lapshin authored
This addresses the issue found by: https://lab.llvm.org/buildbot/#/builders/192/builds/2309
-
Jacques Pienaar authored
Enables reserving or marking dead in enum list, resulting in skipping in dispatches.
-
Jacques Pienaar authored
Fix missed review comment from https://reviews.llvm.org/D144820
-
Aiden Grossman authored
The comment moved is referring to the --output-asm-syntax flag rather than the --print-imm-hex flag, but seems to have mistakenly been put under the definition of that flag due to some misplaced line numbers on phabricator.
-
Benjamin Kramer authored
-
Florian Hahn authored
If the value was already known to not be uniform for the previous (smaller VF), it cannot be uniform for the larger VF. This slightly reduces compile-time, once uniformity checks are becoming a bit more expensive due to using SCEV rewriting (D148841). Reviewed By: Ayal Differential Revision: https://reviews.llvm.org/D151658
-
Alexey Lapshin authored
-
LLVM GN Syncbot authored
-
Alexey Lapshin authored
This patch creates skeleton implementation for the DWARFLinkerParallel. It also integrates DWARFLinkerParallel into dsymutil and llvm-dwarfutil, so that empty DWARFLinker::link() can be called. To do this new command line option is added "--linker apple/llvm". Additionally it changes existing DWARFLinker interfaces/implementations to be compatible: use Error for error reporting for the DWARFStreamer, make DWARFFile to owner of referenced resources, other small refactorings. Differential Revision: https://reviews.llvm.org/D147952
-
LLVM GN Syncbot authored
-
Danila Kutenin authored
This is the implementation of the first proposal of strict weak ordering checks described in https://discourse.llvm.org/t/rfc-strict-weak-ordering-checks-in-the-debug-libc/70217 This targets the most vulnerable algorithms like std::sort Reviewed By: philnik, #libc Differential Revision: https://reviews.llvm.org/D150264
-
Manna, Soumi authored
This patch uses castAs instead of getAs which will assert if the type doesn't match in ConvertQualTypeToKind(clang::ASTContext const &, clang::QualType). Reviewed By: erichkeane Differential Revision: https://reviews.llvm.org/D151928
-
Manna, Soumi authored
This patch uses castAs instead of getAs which will assert if the type doesn't match to resolve dereference issue with nullptr FPT when calling getThisType() in clang::CodeGen::CGDebugInfo::CreateType(clang::MemberPointerType const *, llvm::DIFile *). Reviewed By: erichkeane Differential Revision: https://reviews.llvm.org/D151947
-
Simon Pilgrim authored
I've kept the legalForCartesianProduct call, but this requires us to maintain 32-bit/64-bit integer lists - we might want to just use legalIf and perform the type pair set matching manually.
- Jun 04, 2023
-
-
Ben Shi authored
Reviewed By: aykevl, Patryk27 Differential Revision: https://reviews.llvm.org/D152087
-
Sergei Barannikov authored
The constructor hasn't been used since its introduction.
-
Simon Pilgrim authored
[GlobalIsel][X86] Move G_PTRTOINT/G_INTTOPTR legalization before legacy handling and merge 32-bit/64-bit handling I've kept the legalForCartesianProduct call, but this requires us to maintain 32-bit/64-bit integer lists - we might want to just use legalIf and perform the type pair set matching manually.
-
LLVM GN Syncbot authored
-
Sergei Barannikov authored
Make `qualifyWindowsLibrary` and `addStackProbeTargetAttributes` protected members of `TargetCodeGenInfo`. These are helper functions used by `getDependentLibraryOption` and `setTargetAttributes` methods when targeting Windows. The change will allow these functions to be reused after splitting `TargetInfo.cpp`. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D150178
-
Simon Pilgrim authored
We're moving away from using per-ISA legalization controls and using LegalIf etc. to handle specific ISAs instead.
-
Alexey Lapshin authored
This reverts commit e0ba9b2a.
-
LLVM GN Syncbot authored
-
Alexey Lapshin authored
This patch creates skeleton implementation for the DWARFLinkerParallel. It also integrates DWARFLinkerParallel into dsymutil and llvm-dwarfutil, so that empty DWARFLinker::link() can be called. To do this new command line option is added "--linker apple/llvm". Additionally it changes existing DWARFLinker interfaces/implementations to be compatible: use Error for error reporting for the DWARFStreamer, make DWARFFile to owner of referenced resources, other small refactorings. Differential Revision: https://reviews.llvm.org/D147952
-
Sergei Barannikov authored
The lists contain differences between register numbers, not the register numbers themselves. Since a difference can also be negative, this also changes its type to signed. Changing the type to signed exposed a "bug". For AMDGPU, which has many registers, the first element of a sequence could be as big as ~45k. The value does not fit into int16_t, but fits into uint16_t. The bug didn't show up because of unsigned wrapping and truncation of the Val field in the advance() method. To fix the issue, I changed the way regunit difflists are encoded. The 4-bit 'scale' field of MCRegisterDesc::RegUnit was replaced by 12-bit number of the first regunit, and the first element of each of the lists was removed. The higher 20 bits of RegUnit field contain the initial offset into DiffLists array. AMDGPU has 1'409 regunits (2^12 = 4'096), and the biggest offset is 80'041 (2^20 = 1'048'576). That is, there is enough room. Changing the encoding method also resulted in a smaller array size, the numbers are below (I omitted targets with less than 100 elements). ``` AMDGPU | 80052 | 78741 | -1,6% RISCV | 6498 | 6297 | -3,1% ARM | 4181 | 3966 | -5,1% AArch64 | 2770 | 2592 | -6,4% PPC | 1578 | 1441 | -8,7% Hexagon | 994 | 740 | -25,6% R600 | 508 | 398 | -21,7% VE | 471 | 459 | -2,5% Sparc | 381 | 363 | -4,7% X86 | 326 | 208 | -36,2% Mips | 253 | 200 | -20,9% SystemZ | 186 | 162 | -12,9% ``` Reviewed By: foad, arsenm Differential Revision: https://reviews.llvm.org/D151036
-