|
 | llvm/test/tools/llvm-dwarfdump/X86/DW_AT_defaulted.s |
|
 | llvm/test/CodeGen/RISCV/rvv/sink-splat-operands.ll (diff) |
|
 | llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp (diff) |
|
 | polly/test/Isl/CodeGen/MemAccess/create_arrays.ll (diff) |
 | polly/test/Isl/CodeGen/invariant_load_alias_metadata.ll (diff) |
 | polly/test/Isl/CodeGen/getNumberOfIterations.ll (diff) |
 | polly/test/ScopInfo/int2ptr_ptr2int_2.ll (diff) |
 | polly/test/Isl/CodeGen/phi_loop_carried_float_escape.ll (diff) |
 | polly/test/Isl/CodeGen/MemAccess/codegen_address_space.ll (diff) |
 | polly/test/Isl/CodeGen/partial_write_array.ll (diff) |
 | polly/test/Isl/CodeGen/OpenMP/new_multidim_access.ll (diff) |
 | polly/test/CodeGen/stride_detection.ll (diff) |
 | polly/lib/CodeGen/IRBuilder.cpp (diff) |
 | polly/test/ScopInfo/int2ptr_ptr2int.ll (diff) |
 | polly/test/Isl/CodeGen/stmt_split_no_dependence.ll (diff) |
 | polly/test/Isl/CodeGen/annotated_alias_scopes.ll (diff) |
 | polly/test/Isl/CodeGen/phi_loop_carried_float.ll (diff) |
 | polly/test/ScheduleOptimizer/pattern-matching-based-opts_10.ll (diff) |
 | polly/test/Isl/CodeGen/non_affine_float_compare.ll (diff) |
 | polly/test/Isl/CodeGen/partial_write_full_write_that_appears_partial.ll (diff) |
 | polly/test/Isl/CodeGen/non-affine-phi-node-expansion-2.ll (diff) |
 | polly/test/Isl/CodeGen/MemAccess/different_types.ll (diff) |
 | polly/test/Isl/CodeGen/scev-backedgetaken.ll (diff) |
 | polly/test/Isl/CodeGen/MemAccess/generate-all.ll (diff) |
 | polly/test/Isl/CodeGen/invariant_loads_ignore_parameter_bounds.ll (diff) |
 | polly/test/Isl/CodeGen/simple_vec_assign_scalar.ll (diff) |
 | polly/test/Isl/CodeGen/partial_write_impossible_restriction.ll (diff) |
 | polly/test/Isl/CodeGen/OpenMP/alias-metadata.ll (diff) |
|
 | openmp/libomptarget/plugins/cuda/src/rtl.cpp (diff) |
Commit
96d3319d6f024b17ac725d9595548acc4787003c
by Saleem AbdulrasoolSema: relax va_start checking further for Windows AArch64
When building in C mode, the VC runtime assumes that it can use pointer aliasing through `char *` for the parameter to `__va_start`. Relax the checks further. In theory we could keep the tests strict for non-system header code, but this takes the less strict approach as the additional check doesn't particularly end up being too much more helpful for correctness. The C++ type system is a bit stricter and requires the explicit cast which we continue to verify.
|
 | clang/lib/Sema/SemaChecking.cpp (diff) |
 | clang/test/Sema/microsoft-varargs.c |
|
 | llvm/test/CodeGen/AArch64/debugtrap.ll (diff) |
 | llvm/test/CodeGen/AArch64/ubsantrap.ll (diff) |
 | llvm/test/CodeGen/AArch64/arm64-trap.ll (diff) |
 | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp (diff) |
|
 | llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUMachineCFGStructurizer.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUAtomicOptimizer.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUInstCombineIntrinsic.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUSubtarget.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPULibFunc.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUPropagateAttributes.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUReplaceLDSUseWithPointer.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUAnnotateKernelFeatures.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp (diff) |
 | llvm/lib/Target/AMDGPU/AMDGPURewriteOutArguments.cpp (diff) |
Commit
4edf46f72a8f3bd9d60628d0c852e8ff91921673
by rob.suderman[mlir][tosa] Remove the documentation requirement for elements of several binary elementwise ops to be of the same rank.
Reviewed By: rsuderman
Differential Revision: https://reviews.llvm.org/D110095
|
 | mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td (diff) |
|
 | clang/lib/Format/Format.cpp (diff) |
 | clang/lib/Format/TokenAnnotator.cpp (diff) |
 | clang/lib/Format/WhitespaceManager.h (diff) |
 | clang/lib/Format/MacroExpander.cpp (diff) |
 | clang/lib/Format/ContinuationIndenter.cpp (diff) |
 | clang/lib/Format/UnwrappedLineFormatter.cpp (diff) |
|
 | mlir/lib/Dialect/Tosa/Transforms/TosaMakeBroadcastable.cpp (diff) |
Commit
4ceea7740990f5b755a7bb911e92254dd5680921
by Amara Emerson[X86] Rename the X86WinAllocaExpander pass and related symbols to "DynAlloca". NFC.
For x86 Darwin, we have a stack checking feature which re-uses some of this machinery around stack probing on Windows. Renaming this to be more appropriate for a generic feature.
Differential Revision: https://reviews.llvm.org/D109993
|
 | llvm/lib/Target/X86/X86DynAllocaExpander.cpp |
 | llvm/lib/Target/X86/CMakeLists.txt (diff) |
 | llvm/lib/Target/X86/X86.h (diff) |
 | llvm/lib/Target/X86/X86TargetMachine.cpp (diff) |
 | llvm/lib/Target/X86/X86ISelLowering.cpp (diff) |
 | llvm/lib/Target/X86/X86MachineFunctionInfo.h (diff) |
 | llvm/lib/Target/X86/X86ISelLowering.h (diff) |
 | llvm/test/CodeGen/X86/O0-pipeline.ll (diff) |
 | llvm/utils/gn/secondary/llvm/lib/Target/X86/BUILD.gn (diff) |
 | llvm/test/CodeGen/X86/opt-pipeline.ll (diff) |
 | llvm/lib/Target/X86/X86InstrInfo.td (diff) |
 | llvm/lib/Target/X86/X86InstrCompiler.td (diff) |
 | llvm/lib/Target/X86/X86WinAllocaExpander.cpp |
Commit
4e7c0a37c9c92baa655d244f5bfde91d52b138d0
by joker.ephUpdate MLIR generate-test-checks.py to add the notice from the source into the generated file
Folks may not read the source of the tool and miss these instructions.
Differential Revision: https://reviews.llvm.org/D110082
|
 | mlir/utils/generate-test-checks.py (diff) |
Commit
bb2506061b06e9786b5eb9c458f52f9ba7e52a73
by chiahungduan[mlir-tblgen] Add DagNode StaticMatcher.
Some patterns may share the common DAG structures. Generate a static function to do the match logic to reduce the binary size.
Reviewed By: jpienaar
Differential Revision: https://reviews.llvm.org/D105797
|
 | mlir/test/mlir-tblgen/rewriter-static-matcher.td |
 | mlir/tools/mlir-tblgen/RewriterGen.cpp (diff) |
 | mlir/lib/TableGen/Pattern.cpp (diff) |
 | mlir/include/mlir/TableGen/Pattern.h (diff) |
|
 | clang/lib/Sema/SemaOpenMP.cpp (diff) |
 | clang/lib/Sema/SemaTemplate.cpp (diff) |
 | clang/lib/Sema/SemaTemplateDeduction.cpp (diff) |
 | clang/lib/Sema/SemaType.cpp (diff) |
 | clang/lib/Sema/SemaCodeComplete.cpp (diff) |
 | clang/lib/Sema/SemaStmt.cpp (diff) |
 | clang/lib/Sema/SemaInit.cpp (diff) |
 | clang/lib/Sema/SemaDeclCXX.cpp (diff) |
 | clang/lib/Sema/SemaTemplateInstantiateDecl.cpp (diff) |
 | clang/lib/Sema/SemaChecking.cpp (diff) |
 | clang/lib/Sema/TreeTransform.h (diff) |
 | clang/lib/Sema/SemaCXXScopeSpec.cpp (diff) |
 | clang/lib/Sema/SemaDeclObjC.cpp (diff) |
 | clang/lib/Sema/SemaConcept.cpp (diff) |
 | clang/lib/Sema/SemaDeclAttr.cpp (diff) |
 | clang/lib/Sema/SemaLookup.cpp (diff) |
|
 | clang/lib/AST/CommentBriefParser.cpp (diff) |
 | clang/lib/AST/RecordLayoutBuilder.cpp (diff) |
 | clang/lib/AST/ASTContext.cpp (diff) |
 | clang/lib/AST/Interp/Program.cpp (diff) |
 | clang/lib/AST/Interp/Opcodes.td (diff) |
 | clang/lib/AST/DeclCXX.cpp (diff) |
 | clang/lib/AST/ComparisonCategories.cpp (diff) |
 | clang/lib/AST/MicrosoftMangle.cpp (diff) |
 | clang/lib/AST/DeclTemplate.cpp (diff) |
 | clang/lib/AST/ExprConstant.cpp (diff) |
 | clang/lib/AST/Interp/InterpState.h (diff) |
 | clang/lib/AST/ASTImporter.cpp (diff) |
 | clang/lib/AST/Interp/Function.h (diff) |
 | clang/lib/AST/Interp/InterpStack.h (diff) |
 | clang/lib/AST/Interp/Descriptor.h (diff) |
Commit
f417d9d821118ef330b263c4c7ad9d3cda30f406
by mnadeem[InstCombine] Eliminate vector reverse if all inputs/outputs to an instruction are reverses
Differential Revision: https://reviews.llvm.org/D109808
Change-Id: I1a10d2bc33acbe0ea353c6cb3d077851391fe73e
|
 | llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp (diff) |
 | llvm/test/Transforms/InstCombine/vector-reverse.ll |
 | llvm/test/Transforms/LoopVectorize/AArch64/sve-vector-reverse-mask4.ll (diff) |
 | llvm/test/Transforms/LoopVectorize/AArch64/sve-vector-reverse.ll (diff) |
Commit
1fb2e842a93ac862849f5081eb6fdf6f1447ef2a
by stellaraccident[mlir][python] Forward _OperationBase _CAPIPtr to the Operation.
* ODS generated operations extend _OperationBase and without this, cannot be marshalled to CAPI functions. * No test case updates: this kind of interop is quite hard to verify with in-tree tests.
Differential Revision: https://reviews.llvm.org/D110030
|
 | mlir/lib/Bindings/Python/IRCore.cpp (diff) |
Commit
4f21152af12b21ea8f04b322a29dc6ad9e79ef16
by riddleriver[mlir] Tighten verification of SparseElementsAttr
SparseElementsAttr currently does not perform any verfication on construction, with the only verification existing within the parser. This revision moves the parser verification to SparseElementsAttr, and also adds additional verification for when a sparse index is not valid.
Differential Revision: https://reviews.llvm.org/D109189
|
 | mlir/lib/Parser/Parser.h (diff) |
 | mlir/lib/Parser/TypeParser.cpp (diff) |
 | mlir/test/IR/pretty-attributes.mlir (diff) |
 | mlir/test/CAPI/ir.c (diff) |
 | mlir/lib/Parser/AttributeParser.cpp (diff) |
 | mlir/test/IR/parser.mlir (diff) |
 | mlir/test/Dialect/Tensor/canonicalize.mlir (diff) |
 | mlir/test/IR/invalid.mlir (diff) |
 | mlir/include/mlir/IR/BuiltinAttributes.h (diff) |
 | mlir/test/Dialect/Quant/convert-const.mlir (diff) |
 | mlir/include/mlir/IR/BuiltinAttributes.td (diff) |
 | mlir/lib/IR/BuiltinAttributes.cpp (diff) |
 | mlir/test/Target/LLVMIR/llvmir.mlir (diff) |
Commit
0cb5d7fc7fd3eeb40b6ecf9b34a497d46bcba6c6
by riddleriver[mlir] Add value_begin/value_end methods to DenseElementsAttr
Currently DenseElementsAttr only exposes the ability to get the full range of values for a given type T, but there are many situations where we just want the beginning/end iterator. This revision adds proper value_begin/value_end methods for all of the supported T types, and also cleans up a bit of the interface.
Differential Revision: https://reviews.llvm.org/D104173
|
 | mlir/lib/Conversion/StandardToSPIRV/StandardToSPIRV.cpp (diff) |
 | mlir/examples/toy/Ch7/mlir/LowerToAffineLoops.cpp (diff) |
 | mlir/include/mlir/IR/BuiltinAttributes.td (diff) |
 | mlir/include/mlir/Dialect/CommonFolders.h (diff) |
 | mlir/lib/IR/AsmPrinter.cpp (diff) |
 | mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp (diff) |
 | mlir/unittests/TableGen/StructsGenTest.cpp (diff) |
 | mlir/lib/CAPI/IR/BuiltinAttributes.cpp (diff) |
 | mlir/lib/IR/BuiltinAttributes.cpp (diff) |
 | mlir/lib/Interfaces/InferTypeOpInterface.cpp (diff) |
 | mlir/lib/Dialect/GPU/IR/GPUDialect.cpp (diff) |
 | mlir/examples/toy/Ch5/mlir/LowerToAffineLoops.cpp (diff) |
 | mlir/include/mlir/IR/BuiltinAttributes.h (diff) |
 | mlir/lib/Target/LLVMIR/ConvertFromLLVMIR.cpp (diff) |
 | mlir/examples/toy/Ch6/mlir/LowerToAffineLoops.cpp (diff) |
 | mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp (diff) |
 | mlir/lib/IR/Operation.cpp (diff) |
 | mlir/lib/Conversion/LinalgToSPIRV/LinalgToSPIRV.cpp (diff) |
Commit
d80d3a358fffce430c94c7e9c716a5641010e4d0
by riddleriver[mlir] Refactor ElementsAttr into an AttrInterface
This revision refactors ElementsAttr into an Attribute Interface. This enables a common interface with which to interact with element attributes, without needing to modify the builtin dialect. It also removes a majority (if not all?) of the need for the current OpaqueElementsAttr, which was originally intended as a way to opaquely represent data that was not representable by the other builtin constructs.
The new ElementsAttr interface not only allows for users to natively represent their data in the way that best suits them, it also allows for efficient opaque access and iteration of the underlying data. Attributes using the ElementsAttr interface can directly expose support for interacting with the held elements using any C++ data type they claim to support. For example, DenseIntOrFpElementsAttr supports iteration using various native C++ integer/float data types, as well as APInt/APFloat, and more. ElementsAttr instances that refer to DenseIntOrFpElementsAttr can use all of these data types for iteration:
```c++ DenseIntOrFpElementsAttr intElementsAttr = ...;
ElementsAttr attr = intElementsAttr; for (uint64_t value : attr.getValues<uint64_t>()) ...; for (APInt value : attr.getValues<APInt>()) ...; for (IntegerAttr value : attr.getValues<IntegerAttr>()) ...; ```
ElementsAttr also supports failable range/iterator access, allowing for selective code paths depending on data type support:
```c++ ElementsAttr attr = ...; if (auto range = attr.tryGetValues<uint64_t>()) { for (uint64_t value : *range) ...; } ```
Differential Revision: https://reviews.llvm.org/D109190
|
 | mlir/include/mlir/Support/InterfaceSupport.h (diff) |
 | mlir/include/mlir/IR/BuiltinAttributes.h (diff) |
 | mlir/lib/IR/BuiltinAttributeInterfaces.cpp |
 | mlir/include/mlir/IR/BuiltinAttributes.td (diff) |
 | mlir/include/mlir/IR/BuiltinAttributeInterfaces.td |
 | mlir/include/mlir/IR/CMakeLists.txt (diff) |
 | mlir/tools/mlir-opt/mlir-opt.cpp (diff) |
 | mlir/lib/IR/CMakeLists.txt (diff) |
 | utils/bazel/llvm-project-overlay/mlir/BUILD.bazel (diff) |
 | utils/bazel/llvm-project-overlay/mlir/test/BUILD.bazel (diff) |
 | mlir/include/mlir/IR/BuiltinAttributeInterfaces.h |
 | mlir/test/IR/elements-attr-interface.mlir |
 | mlir/test/lib/Dialect/Test/TestAttributes.cpp (diff) |
 | mlir/test/lib/IR/CMakeLists.txt (diff) |
 | mlir/test/lib/IR/TestBuiltinAttributeInterfaces.cpp |
 | llvm/include/llvm/ADT/STLExtras.h (diff) |
 | mlir/lib/IR/BuiltinAttributes.cpp (diff) |
 | mlir/test/lib/Dialect/Test/TestAttrDefs.td (diff) |
|
 | llvm/lib/Target/WebAssembly/WebAssemblyReplacePhysRegs.cpp (diff) |
 | llvm/lib/Target/NVPTX/NVPTXGenericToNVVM.cpp (diff) |
 | llvm/lib/AsmParser/LLParser.cpp (diff) |
 | llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp (diff) |
 | llvm/lib/Target/WebAssembly/WebAssemblyOptimizeLiveIntervals.cpp (diff) |
 | llvm/lib/Target/X86/X86AvoidStoreForwardingBlocks.cpp (diff) |
 | llvm/lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp (diff) |
 | llvm/lib/Target/WebAssembly/WebAssemblyMemIntrinsicResults.cpp (diff) |
 | llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp (diff) |
 | llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp (diff) |
 | llvm/lib/Target/WebAssembly/WebAssemblyPrepareForLiveIntervals.cpp (diff) |
 | llvm/lib/Target/WebAssembly/WebAssemblyCFGStackify.cpp (diff) |
 | llvm/lib/Target/X86/X86OptimizeLEAs.cpp (diff) |
 | llvm/lib/Target/WebAssembly/WebAssemblyLowerBrUnless.cpp (diff) |
|
 | llvm/include/llvm/Analysis/ScalarEvolution.h (diff) |
 | llvm/lib/Analysis/ScalarEvolution.cpp (diff) |
Commit
cad9f98a2ad98fecf663e9ce39502b8e43676fc9
by llvm-project[Polly] Don't generate inter-iteration noalias metadata.
This metadata was intended to mark all accesses within an iteration to be pairwise non-aliasing, in this case because every memory of a base pointer is touched (read or write) at most once. This is typical for 'sweeps' over all data. The stated motivation from D30606 is to ensure that unrolled iterations are considered non-aliasing.
Rhe implemention had multiple issues:
* The structure of the noalias metadata was malformed. D110026 added check in the verifier for this metadata, and the tests were failing since then.
* This is not true for the outer loops of the BLIS matrix multiplication, where it was being inserted. Each element of A, B, C is accessed multiple times, as often as the loop not used as an index is iterating.
* Scopes were added to SecondLevelOtherAliasScopeList (used for the !noalias scop list) on-the-fly when another SCEV was seen. This meant that previously visited instructions would not be updated with alias scopes that are only seen later, missing out those SCEVs they should not be aliasing with.
* Since the !noalias scope list would ideally consists of all other SCEV for this base pointer, we might run quickly into scalability issues. Especially after unrolling there would probably at least once SCEV per instruction and unroll instance.
* The inter-iteration noalias base pointer was not removed after leaving the loop marked with it, effectively marking everything after it to noalias as well.
A solution I considered was to mark each instruction as non-aliasing with its own scope. The instruction itself would obviously alias itself, but such construction might also be considered invalid. Duplicating the instruction (e.g. due to speculation) would mark the instruction non-aliasing with its clone. I don't want to go into this territory, especially since the original motivation of determining unrolled instances as noalias based on SCEV is the what scev-aa does as well.
This effectively reverts D30606 and D35761.
|
 | polly/lib/CodeGen/IslNodeBuilder.cpp (diff) |
 | polly/test/ScheduleOptimizer/pattern-matching-based-opts_14.ll (diff) |
 | polly/include/polly/CodeGen/IRBuilder.h (diff) |
 | polly/lib/CodeGen/IRBuilder.cpp (diff) |
 | polly/test/ScheduleOptimizer/ensure-correct-tile-sizes.ll (diff) |
 | polly/test/ScheduleOptimizer/pattern-matching-based-opts_13.ll (diff) |
 | polly/test/ScheduleOptimizer/pattern-matching-based-opts_5.ll (diff) |
 | polly/test/ScheduleOptimizer/mat_mul_pattern_data_layout_2.ll (diff) |
 | polly/test/ScheduleOptimizer/pattern-matching-based-opts_10.ll |
 | polly/test/ScheduleOptimizer/pattern-matching-based-opts_3.ll (diff) |
 | polly/lib/Transform/MatmulOptimizer.cpp (diff) |
Commit
073b254cffeffdef36ffbee0c9afdc0da9cd6ac3
by mkazantsev[SimplifyCFG] Redirect switch cases that lead to UB into an unreachable block
When following a case of a switch instruction is guaranteed to lead to UB, we can safely break these edges and redirect those cases into a newly created unreachable block. As result, CFG will become simpler and we can remove some of Phi inputs to make further analyzes easier.
Patch by Dmitry Bakunevich!
Differential Revision: https://reviews.llvm.org/D109428 Reviewed By: lebedev.ri
|
 | llvm/test/CodeGen/AArch64/arm64-ccmp.ll (diff) |
 | llvm/lib/Transforms/Utils/SimplifyCFG.cpp (diff) |
 | llvm/test/Transforms/SimplifyCFG/switch_ub.ll (diff) |
Commit
58abc8c34bde7021bbfa0a7bdfd2af9524cba263
by clattner[OpAsmParser] Add a parseCommaSeparatedList helper and beef up Delimeter.
Lots of custom ops have hand-rolled comma-delimited parsing loops, as does the MLIR parser itself. Provides a standard interface for doing this that is less error prone and less boilerplate.
While here, extend Delimiter to support <> and {} delimited sequences as well (I have a use for <> in CIRCT specifically).
Differential Revision: https://reviews.llvm.org/D110122
|
 | mlir/lib/Dialect/SPIRV/IR/SPIRVOps.cpp (diff) |
 | mlir/lib/Dialect/Async/IR/Async.cpp (diff) |
 | mlir/test/IR/invalid-affinemap.mlir (diff) |
 | mlir/lib/Dialect/StandardOps/IR/Ops.cpp (diff) |
 | mlir/include/mlir/IR/OpImplementation.h (diff) |
 | mlir/lib/Parser/AffineParser.cpp (diff) |
 | mlir/test/IR/invalid.mlir (diff) |
 | mlir/lib/Parser/LocationParser.cpp (diff) |
 | mlir/lib/Parser/TypeParser.cpp (diff) |
 | mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp (diff) |
 | mlir/lib/Parser/Parser.cpp (diff) |
 | mlir/lib/Parser/Parser.h (diff) |
 | mlir/lib/Parser/AttributeParser.cpp (diff) |
Commit
ea72b0319d7b0f0c2fcf41d121afa5d031b319d5
by yhsBPF: make 32bit register spill with 64bit alignment
In llvm, for non-alu32 mode, the stack alignment is 64bit so only one 64bit spill per 64bit slot. For alu32 mode, the stack alignment is 32bit, so it is possible to have two 32bit spills per 64bit slot.
Currently, bpf kernel verifier does not preserve register states for 32bit spills. That is, one 32bit register may hold a constant value or a bounded range before spill. After reload from the stack, the information is lost and sometimes this may cause verifier failure. For 64bit register spill, the verifier indeed tries to preserve the register state for reloading.
The current verifier can be modestly changed to handle one 32bit spill per 64bit stack slot with state-preserving reload. Handling two 32bit spills per 64bit stack slot will require substantial changes.
This patch changes stack alignment for alu32 to be 64bit. This way, for any 64bit slot in alu32 mode, only one 32bit or 64bit register values can be saved. Together with previous-mentioned verifier enhancement, 32bit spill can be handled with state preserving.
Note that llvm stack slot coallescing seems only doing adjacent packing which may leave some holes in the stack. For example, stack slot 8 <== 8 bytes stack slot 4 <== 8 bytes with 4 byte hole stack slot 8 <== 8 bytes stack slot 4 <== 4 bytes
Differential Revision: https://reviews.llvm.org/D109073
|
 | llvm/test/CodeGen/BPF/spill-alu32.ll |
 | llvm/lib/Target/BPF/BPFRegisterInfo.td (diff) |