- Jan 18, 2024
-
-
Aart Bik authored
-
Joseph Huber authored
Summary: The linker wrapper's job is to sort various embedded inputs into a list of files that participate in a single link job. So far, this has been completely 1-to-1, that is, each input file participates in exactly one link job. However, support for AMD's target-id requires that one input file may participate in multiple link jobs. For example, if given a `gfx90a` static library and a `gfx90a:xnack+` object file input, we should link the gfx90a` target into the `gfx90a:xnack+` job. These are considered separate CPUs that can be mutually linked more or less. This patch adds the necessary logic to make this happen. It primarily reworks the logic to copy relevant input files into a separate list. So, it moves construction of the final list of link jobs into the extraction phase. We also need to copy the files in the case that it is needed more than once, as the entire workflow expects ownership of said file.
-
Simon Pilgrim authored
-
Krzysztof Drewniak authored
Clang stopped doing this late 2021 back in 33315ef3, and no other frontent does this, so stop doing it.
-
Krzysztof Drewniak authored
Since most of the operations in the `math` dialect don't have low-precision implementations, add the -math-legalize-to-f32 pass that goes through and brackets low-precision math funcitons (like `math.sin %0 : f16`) with `arith.extf` and `arith.truncf`. This preserves the original semantics of the math operation but allows lowering to proceed. Versions of this lowering are already implicitly present in some passes, like ConvertGPUToROCDL. However, because those are implicit rewrites, they hide the floating-point extension and truncation, preventing anyone from writing passes that operate on those implitic extf/truncf pairs. Exposing this legalization explicitly is needed to allow lowening 8-bit floats on AMD GPUs, as the implementation of extf and truncf on that platform requires the complex logic found in ArithToAMDGPU, which runs before the GPU to ROCDL lowering.
-
Alan Phipps authored
Clean-up of the algorithm that assigns MC/DC True/False control-flow condition IDs when constructing an MC/DC decision region. This patch creates a common API for setting/getting the condition IDs, making the binary logical operator visitor functions much cleaner. This patch also fixes issue https://github.com/llvm/llvm-project/issues/77873 in which a record's control flow map can be malformed due to an incorrect calculation of the True/False condition IDs.
-
Philip Reames authored
We do the same for the analogous transform in DAGCombine, but this case was missed in the recent patch which added support for zext nneg. Sorry for the lack of test coverage. Not sure how to exercise this piece of logic. It appears to have only minimal impact on LIT tests (only test/CodeGen/X86/wide-scalar-shift-by-byte-multiple-legalization.ll), and even then, the changes without it appear uninteresting. Maybe we should remove this transform instead?
-
Sergio Afonso authored
After the removal of the OpenMP early outlining MLIR pass in #67319, the `EarlyOutliningInterface` stopped doing any useful work. It used to be necessary to tie the name of the function from which a target region was outlined to that new function, so it would be used when translating to LLVM IR in place of the outlined function's name. This is not necessary anymore, so this patch removes all references to this interface and uses of the `omp.outline_parent_name` discardable attribute in tests.
-
Haohai Wen authored
When merging blocks, if the previous block has no any branch instruction and has one successor, the successor may be SEH landing pad and the block will always raise exception and nerver fall through to next block. We can not merge them in such case. isSuccessor should be used to confirm it can fall through to next block.
-
Timm Baeder authored
We need to look at the chain of declarations to initialize the right field.
-
Alan Phipps authored
Fixes oversight in commit 8ecbb040 in which FileID was not being set when creating a new MC/DC DecisionRegion.
-
madanial0 authored
The template function call CheckDescriptorEqInt((exitStat.get(), 127) is deduced to have INT_T equal to std::int32_t instead of std::int64_t, but the length descriptor points to a 64-byte storage. The comparison does not work in a big endian. Co-authored-by:Mark Danial <mark.danial@ibm.com>
-
madanial0 authored
When running the `flang/test/HLFIR/simplify-hlfir-intrinsics.fir` test case on AIX we encounter issues building op as they are not found in the mlir context: ``` LLVM ERROR: Building op `arith.subi` but it isn't known in this MLIRContext: the dialect may not be loaded or this operation hasn't been added by the dialect. See also https://mlir.llvm.org/getting_started/Faq/#registered-loaded-dependent-whats-up-with-dialects-management LLVM ERROR: Building op `hlfir.yield_element` but it isn't known in this MLIRContext: the dialect may not be loaded or this operation hasn't been added by the dialect. See also https://mlir.llvm.org/getting_started/Faq/#registered-loaded-dependent-whats-up-with-dialects-management LLVM ERROR: Building op `hlfir.yield_element` but it isn't known in this MLIRContext: the dialect may not be loaded or this operation hasn't been added by the dialect. See also https://mlir.llvm.org/getting_started/Faq/#registered-loaded-dependent-whats-up-with-dialects-management ``` The issue is caused by the "Merge disjoint stack slots" pass and the error is not present if the source is built with `-mllvm --no-stack-coloring` Thanks to investigation by @stefanp-ibm we found that "the initializer_list {inputIndices[1], inputIndices[0]} has a lifetime that only exists for the range of the constructor for ValueRange. Once we get to stack coloring we merge the stack slot for that element with another stack slot and then it gets overwritten which corrupts transposedIndices" The changes below prevents the corruption of transposedIndices and passes the test case. Co-authored-by:
Mark Danial <mark.danial@ibm.com>
-
Andrei Golubev authored
FmtAlign::fill() accepts a uint32_t variable while the usages operate on size_t values. On some platform / compiler combinations, this ends up being a narrowing conversion. Fix this by changing the function's signature. This was first seen on MSVC x86. Co-authored-by:Orest Chura <orest.chura@intel.com>
-
Simon Pilgrim authored
This helps ensure the encoding details are next to the EVEX tag Noticed while preparing to add more constant commenting as part of #73783 and #71078
-
Jannik Silvanus authored
`ValueAsMetadata::handleRAUW` is a mechanism to replace all metadata referring to one value by a different value. Relax an assert that used to enforce the old and new value to have the same type. This seems to be a sanity plausibility assert only, as the implementation actually supports mismatching types. This is motivated by a downstream mechanism where we use poison ValueAsMetadata values to annotate pointee types of opaque pointer function arguments. When replacing one type with a different one to work around DXIL vs LLVM incompatibilities, we need to update type annotations, and handleRAUW is more efficient than creating new MD nodes.
-
stephenpeckham authored
-
Luke Lau authored
Everytime an extension is added, this test will need to have the negative extension appended to multiple CHECK lines where we're overriding the arch. This is quite time consuming since it needs to be in the right order, so this replaces the explicit list of negative extensions with a regexp instead.
-
Dominik Adamski authored
Typo in test: openmp/libomptarget/test/offloading/fortran/basic-target-parallel-do.f90
-
Quinn Dawkins authored
Similar to `transform.get_result`, except it returns a handle to the operand indicated by a positional specification, same as is defined for the linalg match ops. Additionally updates `get_result` to take the same positional specification. This makes the use case of wanting to get all of the results of an operation easier by no longer requiring the user to reconstruct the list of results one-by-one.
-
cor3ntin authored
To avoid any possible confusion with the notion of pure function and the gnu::pure attribute.
-
Dominik Adamski authored
Added test which proves that end-to-end compilation of `omp target parallel do` costruct is successful for Flang compiler.
-
Leandro Lupori authored
Check for DEFAULT_SYSROOT, because when it is set -isysroot has no effect.
-
Timm Baeder authored
In CheckConstant(), consider that in C++98 const variables may not be read at all, and diagnose that accordingly.
-
Piotr Sobczak authored
Support new amdgcn_global_load_tr instructions for load with transpose. * MC layer support for GLOBAL_LOAD_TR_B64/GLOBAL_LOAD_TR_B128 * Intrinsic int_amdgcn_global_load_tr * Clang builtins amdgcn_global_load_tr*
-
Vassil Vassilev authored
This patch brings back the basic support for C by inserting the required for value printing runtime only when we are in C++ mode. Additionally, it defines a new overload of operator placement new because we can't really forward declare it in a library-agnostic way. Fixes the issue described in llvm/llvm-project#69072.
-
Guillaume Chatelet authored
-
Sergio Afonso authored
Just a minimal readability improvement that we overlooked during refactoring.
-
Jay Foad authored
-
Krzysztof Parzyszek authored
This moves the lowering of the nested evaluations all the way to the bottom of the call stack. This PR does not attempt to change the leaf lowering functions beyond placing the call to `genEval` in there. Whether the nested evaluations should be lowered for any given op depends on the context in which that op is created, hence a `genNested` parameter was added. Contexts in which nested evaluations should not be lowered are during lowering of composite constructs, such as PARALLEL SECTIONS. This particular case is considered a block construct tied to the SECTIONS directive, and the lowering code will first create an empty parallel op, and then recursively lower the SECTIONS code. Similar situations occur when lowering most (if not all) compound/composite constructs. Recursive lowering [4/5]
-
Jay Foad authored
New pseudos were added for instructions that were natively VOP3 on GFX11: V_ADD_F64_pseudo, V_MUL_F64_pseudo, V_MIN_NUM_F64, V_MAX_NUM_F64, V_LSHLREV_B64_pseudo --------- Co-authored-by:Mirko Brkusanin <Mirko.Brkusanin@amd.com>
-
Vlad Serebrennikov authored
The test checks that objects in arrays are destructed in reverse order during stack unwinding. This patch is trying to establish a precedent how codegen tests for C++ defect report test suite should be written. Refer to PR for exact reasoning.
-
Mariusz Sikora authored
- image_atomic_pk_add_f16 - image_atomic_pk_add_bf16 - ds_pk_add_bf16 - ds_pk_add_f16 - ds_pk_add_rtn_bf16 - ds_pk_add_rtn_f16 - flat_atomic_pk_add_f16 - flat_atomic_pk_add_bf16 - global_atomic_pk_add_f16 - global_atomic_pk_add_bf16 - buffer_atomic_pk_add_f16 - buffer_atomic_pk_add_bf16
-
Mariusz Sikora authored
Endoding is VOP3P. Tagged as deep/machine learning instructions. i32 type (v4fp8 or v4bf8 packed in i32) is used for src0 and src1. src0 and src1 have no src_modifiers. src2 is f32 and has src_modifiers: f32 fneg(neg_lo[2]) and f32 fabs(neg_hi[2]). --------- Co-authored-by:Petar Avramovic <Petar.Avramovic@amd.com>
-
Timm Baeder authored
Add a new emitComplexReal() helper function and use that for the new casts as well as the old __real implementation.
-
Guillaume Chatelet authored
Another patch is needed to cover `DyadicFloat` and `NormalFloat` constructors.
-
Yingwei Zheng authored
InstCombine already handles the pattern `(shl ShVal, (X & (Width - 1))) | (lshr ShVal, ((-X) & (Width - 1)))`. Under certain circumstances, `X & (Width - 1)` will be simplified to `X`. Therefore, this patch adds support for the pattern `(shl ShVal, X) | (lshr ShVal, ((-X) & (Width - 1)))`. Alive2: https://alive2.llvm.org/ce/z/P7JQ2V
-
Congcong Cai authored
Fixes: https://github.com/llvm/llvm-project/issues/78076 Alive2 Proof: https://alive2.llvm.org/ce/z/XEDy0f
-
paperchalice authored
Reverts llvm/llvm-project#70912. This breaks some bazel tests.
-
Simon Pilgrim authored
We had the same helper function in shuffle decode / vector constant code - move this to X86InstrInfo to avoid duplication.
-