1*e035ef0eSFabian Mora //===- PtrAttrs.cpp - Pointer dialect attributes ----------------*- C++ -*-===// 2*e035ef0eSFabian Mora // 3*e035ef0eSFabian Mora // This file is licensed under the Apache License v2.0 with LLVM Exceptions. 4*e035ef0eSFabian Mora // See https://llvm.org/LICENSE.txt for license information. 5*e035ef0eSFabian Mora // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*e035ef0eSFabian Mora // 7*e035ef0eSFabian Mora //===----------------------------------------------------------------------===// 8*e035ef0eSFabian Mora // 9*e035ef0eSFabian Mora // This file defines the Ptr dialect attributes. 10*e035ef0eSFabian Mora // 11*e035ef0eSFabian Mora //===----------------------------------------------------------------------===// 12*e035ef0eSFabian Mora 13*e035ef0eSFabian Mora #include "mlir/Dialect/Ptr/IR/PtrAttrs.h" 14*e035ef0eSFabian Mora #include "llvm/ADT/TypeSwitch.h" 15*e035ef0eSFabian Mora 16*e035ef0eSFabian Mora using namespace mlir; 17*e035ef0eSFabian Mora using namespace mlir::ptr; 18*e035ef0eSFabian Mora 19*e035ef0eSFabian Mora constexpr const static unsigned kBitsInByte = 8; 20*e035ef0eSFabian Mora 21*e035ef0eSFabian Mora //===----------------------------------------------------------------------===// 22*e035ef0eSFabian Mora // SpecAttr 23*e035ef0eSFabian Mora //===----------------------------------------------------------------------===// 24*e035ef0eSFabian Mora verify(function_ref<InFlightDiagnostic ()> emitError,uint32_t size,uint32_t abi,uint32_t preferred,uint32_t index)25*e035ef0eSFabian MoraLogicalResult SpecAttr::verify(function_ref<InFlightDiagnostic()> emitError, 26*e035ef0eSFabian Mora uint32_t size, uint32_t abi, uint32_t preferred, 27*e035ef0eSFabian Mora uint32_t index) { 28*e035ef0eSFabian Mora if (size % kBitsInByte != 0) 29*e035ef0eSFabian Mora return emitError() << "size entry must be divisible by 8"; 30*e035ef0eSFabian Mora if (abi % kBitsInByte != 0) 31*e035ef0eSFabian Mora return emitError() << "abi entry must be divisible by 8"; 32*e035ef0eSFabian Mora if (preferred % kBitsInByte != 0) 33*e035ef0eSFabian Mora return emitError() << "preferred entry must be divisible by 8"; 34*e035ef0eSFabian Mora if (index != kOptionalSpecValue && index % kBitsInByte != 0) 35*e035ef0eSFabian Mora return emitError() << "index entry must be divisible by 8"; 36*e035ef0eSFabian Mora if (abi > preferred) 37*e035ef0eSFabian Mora return emitError() << "preferred alignment is expected to be at least " 38*e035ef0eSFabian Mora "as large as ABI alignment"; 39*e035ef0eSFabian Mora return success(); 40*e035ef0eSFabian Mora } 41