Jlm
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 
14 TEST(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 
24 TEST(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)