1 //===- StructBuilder.cpp - Helper for building LLVM structs --------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "mlir/Conversion/LLVMCommon/StructBuilder.h"
10 #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
11 #include "mlir/Dialect/LLVMIR/LLVMTypes.h"
12 #include "mlir/IR/Builders.h"
16 //===----------------------------------------------------------------------===//
17 // StructBuilder implementation
18 //===----------------------------------------------------------------------===//
20 StructBuilder::StructBuilder(Value v
) : value(v
), structType(v
.getType()) {
21 assert(value
!= nullptr && "value cannot be null");
22 assert(LLVM::isCompatibleType(structType
) && "expected llvm type");
25 Value
StructBuilder::extractPtr(OpBuilder
&builder
, Location loc
,
27 return builder
.create
<LLVM::ExtractValueOp
>(loc
, value
, pos
);
30 void StructBuilder::setPtr(OpBuilder
&builder
, Location loc
, unsigned pos
,
32 value
= builder
.create
<LLVM::InsertValueOp
>(loc
, value
, ptr
, pos
);