| //===-- LLVMAttrDefs.td - LLVM Attributes definition file --*- tablegen -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVMIR_ATTRDEFS |
| #define LLVMIR_ATTRDEFS |
| |
| include "mlir/Dialect/LLVMIR/LLVMOpBase.td" |
| |
| |
| // All of the attributes will extend this class. |
| class LLVM_Attr<string name> : AttrDef<LLVM_Dialect, name>; |
| |
| // The "FastMath" flags associated with floating point LLVM instructions. |
| def FastmathFlagsAttr : LLVM_Attr<"FMF"> { |
| let mnemonic = "fastmath"; |
| |
| // List of type parameters. |
| let parameters = (ins |
| "FastmathFlags":$flags |
| ); |
| } |
| |
| // Attribute definition for the LLVM Linkage enum. |
| def LinkageAttr : LLVM_Attr<"Linkage"> { |
| let mnemonic = "linkage"; |
| let parameters = (ins |
| "linkage::Linkage":$linkage |
| ); |
| } |
| |
| def LoopOptionsAttr : LLVM_Attr<"LoopOptions"> { |
| let mnemonic = "loopopts"; |
| |
| let description = [{ |
| This attributes encapsulates "loop options". It is means to decorate |
| branches that are "latches" (loop backedges) and maps to the `!llvm.loop` |
| metadatas: https://llvm.org/docs/LangRef.html#llvm-loop |
| It store the options as a pair <enum,int64_t> in a sorted array and expose |
| APIs to retrieve the value for each option with a stronger type (bool for |
| example). |
| }]; |
| |
| // List of type parameters. |
| let parameters = (ins |
| ArrayRefParameter<"std::pair<LoopOptionCase, int64_t>", "">:$options |
| ); |
| |
| let extraClassDeclaration = [{ |
| using OptionValuePair = std::pair<LoopOptionCase, int64_t>; |
| using OptionsArray = ArrayRef<std::pair<LoopOptionCase, int64_t>>; |
| Optional<bool> disableUnroll(); |
| Optional<bool> disableLICM(); |
| Optional<int64_t> interleaveCount(); |
| }]; |
| |
| let builders = [ |
| /// Build the LoopOptions Attribute from a sorted array of individual options. |
| AttrBuilder<(ins "ArrayRef<std::pair<LoopOptionCase, int64_t>>":$sortedOptions)>, |
| AttrBuilder<(ins "LoopOptionsAttrBuilder &":$optionBuilders)> |
| ]; |
| let skipDefaultBuilders = 1; |
| } |
| |
| #endif // LLVMIR_ATTRDEFS |