Jlm
Loading...
Searching...
No Matches
AttributeConversionTests.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2022 Nico Reißmann <nico.reissmann@gmail.com>
3 * See COPYING for terms of redistribution.
4 */
5
6#include <gtest/gtest.h>
7
10
11#include <llvm/IR/Attributes.h>
12#include <llvm/IR/LLVMContext.h>
13
14TEST(AttributeConversionTests, TestAttributeKindConversion)
15{
16 typedef llvm::Attribute::AttrKind ak;
17
18 for (int attributeKind = ak::None; attributeKind != ak::EndAttrKinds; attributeKind++)
19 {
20 jlm::llvm::ConvertAttributeKind(static_cast<ak>(attributeKind));
21 }
22}
23
24TEST(AttributeConversionTests, TestAttributeListConversion)
25{
26 // Arrange
27 llvm::LLVMContext context;
28 llvm::AttrBuilder functionAttributeBuilder(context);
29 functionAttributeBuilder.addAttribute(llvm::Attribute::NoUnwind);
30
31 llvm::AttrBuilder returnAttributeBuilder(context);
32 returnAttributeBuilder.addAttribute(llvm::Attribute::NoReturn);
33
34 llvm::AttrBuilder parameter0AttributeBuilder(context);
35 parameter0AttributeBuilder.addAttribute(llvm::Attribute::ZExt);
36
37 llvm::AttrBuilder parameter1AttributeBuilder(context);
38 parameter1AttributeBuilder.addAttribute(llvm::Attribute::NoUndef);
39
40 auto llvmFunctionAttributes = llvm::AttributeSet::get(context, functionAttributeBuilder);
41 auto llvmReturnAttributes = llvm::AttributeSet::get(context, returnAttributeBuilder);
42 auto llvmParameter0Attributes = llvm::AttributeSet::get(context, parameter0AttributeBuilder);
43 auto llvmParameter1Attributes = llvm::AttributeSet::get(context, parameter1AttributeBuilder);
44
45 auto llvmAttributeList = llvm::AttributeList::get(
46 context,
47 llvmFunctionAttributes,
48 llvmReturnAttributes,
49 { llvmParameter0Attributes, llvmParameter1Attributes });
50
51 // Act
52 jlm::llvm::TypeConverter typeConverter;
53 auto jlmAttributeList = jlm::llvm::convertAttributeList(llvmAttributeList, 2, typeConverter);
54
55 // Assert
56 auto jlmFunctionAttributes = jlmAttributeList.getFunctionAttributes();
57 EXPECT_EQ(jlmFunctionAttributes.numAttributes(), 1u);
58 EXPECT_EQ(
59 *jlmFunctionAttributes.EnumAttributes().begin(),
61
62 auto jlmReturnAttributes = jlmAttributeList.getReturnAttributes();
63 EXPECT_EQ(jlmReturnAttributes.numAttributes(), 1u);
64 EXPECT_EQ(
65 *jlmReturnAttributes.EnumAttributes().begin(),
67
68 EXPECT_EQ(jlmAttributeList.getParameterAttributes().size(), 2u);
69 auto jlmParameter0Attributes = jlmAttributeList.getParameterAttributes()[0];
70 auto jlmParameter1Attributes = jlmAttributeList.getParameterAttributes()[1];
71
72 EXPECT_EQ(jlmParameter0Attributes.numAttributes(), 1u);
73 EXPECT_EQ(
74 *jlmParameter0Attributes.EnumAttributes().begin(),
76
77 EXPECT_EQ(jlmParameter1Attributes.numAttributes(), 1u);
78 EXPECT_EQ(
79 *jlmParameter1Attributes.EnumAttributes().begin(),
81}
TEST(AttributeConversionTests, TestAttributeKindConversion)
Attribute::kind ConvertAttributeKind(const ::llvm::Attribute::AttrKind &kind)
AttributeList convertAttributeList(const ::llvm::AttributeList &attributeList, const size_t numParameters, TypeConverter &typeConverter)