summaryrefslogtreecommitdiff
path: root/mlir/lib/Target/LLVMIR/Transforms/TargetToDataLayout.cpp
AgeCommit message (Collapse)Author
2025-08-26[MLIR][LLVMIR][DLTI] Pass to update #llvm.target's features per relevant ↵Rolf Morel
backend (#154938) Modifies `#llvm.target<..., features = $FEATURES>` so that `$FEATURES` is now an `#llvm.target_features<[...]>` attribute (rather than a `StringAttr`). This enables the attribute to respond to DLTI queries for the different target features. The pass updates the `$FEATURES` attribute of the target attr at name `llvm.target` in accordance with the (Sub)Target's features that the relevant LLVM backend knows about. --- DEMO: ```mlir module attributes {llvm.target = #llvm.target<triple = "x86_64-unknown-linux", chip = "skylake"> } { } ``` by way of `-llvm-target-to-target-features` turns into: ```mlir module attributes {llvm.target = #llvm.target<triple = "x86_64-unknown-linux", chip = "skylake", features = <["+64bit", "+64bit-mode", "+adx", "+aes", "+allow-light-256-bit", "+avx", "+avx2", "+bmi", "+bmi2", "+clflushopt", "+cmov", "+crc32", "+cx16", "+cx8", "+ermsb", "+f16c", "+false-deps-popcnt", "+fast-15bytenop", "+fast-gather", "+fast-scalar-fsqrt", "+fast-shld-rotate", "+fast-variable-crosslane-shuffle", "+fast-variable-perlane-shuffle", "+fast-vector-fsqrt", "+fma", "+fsgsbase", "+fxsr", "+idivq-to-divl", "+invpcid", "+lzcnt", "+macrofusion", "+mmx", "+movbe", "+no-bypass-delay-blend", "+no-bypass-delay-mov", "+no-bypass-delay-shuffle", "+nopl", "+pclmul", "+popcnt", "+prfchw", "+rdrnd", "+rdseed", "+sahf", "+slow-3ops-lea", "+sse", "+sse2", "+sse3", "+sse4.1", "+sse4.2", "+ssse3", "+vzeroupper", "+x87", "+xsave", "+xsavec", "+xsaveopt", "+xsaves"]>>} { } ```
2025-08-20[MLIR][LLVMIR][DLTI] Add `LLVM::TargetAttrInterface` and `#llvm.target` attr ↵Rolf Morel
(#145899) Adds the `#llvm.target<triple = $TRIPLE, chip = $CHIP, features = $FEATURES>` attribute and along with a `-llvm-target-to-data-layout` pass to derive a MLIR data layout from the LLVM data layout string (using the existing `DataLayoutImporter`). The attribute implements the relevant DLTI-interfaces, to expose the `triple`, `chip` (AKA `cpu`) and `features` on `#llvm.target` and the full `DataLayoutSpecInterface`. The pass combines the generated `#dlti.dl_spec` with an existing `dl_spec` in case one is already present, e.g. a `dl_spec` which is there to specify size of the `index` type. Adds a `TargetAttrInterface` which can be implemented by all attributes representing LLVM targets. Similar to the Draft PR https://github.com/llvm/llvm-project/pull/78073. RFC on which this PR is based: https://discourse.llvm.org/t/mandatory-data-layout-in-the-llvm-dialect/85875