1 //===- llvm/unittest/IR/AttributesTest.cpp - Attributes unit tests --------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "llvm/IR/Attributes.h" 11 #include "llvm/IR/LLVMContext.h" 12 #include "gtest/gtest.h" 13 using namespace llvm; 14 15 namespace { 16 17 TEST(Attributes, Uniquing) { 18 LLVMContext C; 19 20 Attribute AttrA = Attribute::get(C, Attribute::AlwaysInline); 21 Attribute AttrB = Attribute::get(C, Attribute::AlwaysInline); 22 EXPECT_EQ(AttrA, AttrB); 23 24 AttributeSet ASs[] = { 25 AttributeSet::get(C, 1, Attribute::ZExt), 26 AttributeSet::get(C, 2, Attribute::SExt) 27 }; 28 29 AttributeSet SetA = AttributeSet::get(C, ASs); 30 AttributeSet SetB = AttributeSet::get(C, ASs); 31 EXPECT_EQ(SetA, SetB); 32 } 33 34 TEST(Attributes, Ordering) { 35 LLVMContext C; 36 37 Attribute Align4 = Attribute::get(C, Attribute::Alignment, 4); 38 Attribute Align5 = Attribute::get(C, Attribute::Alignment, 5); 39 Attribute Deref4 = Attribute::get(C, Attribute::Dereferenceable, 4); 40 Attribute Deref5 = Attribute::get(C, Attribute::Dereferenceable, 5); 41 EXPECT_TRUE(Align4 < Align5); 42 EXPECT_TRUE(Align4 < Deref4); 43 EXPECT_TRUE(Align4 < Deref5); 44 EXPECT_TRUE(Align5 < Deref4); 45 46 AttributeSet ASs[] = { 47 AttributeSet::get(C, 2, Attribute::ZExt), 48 AttributeSet::get(C, 1, Attribute::SExt) 49 }; 50 51 AttributeSet SetA = AttributeSet::get(C, ASs); 52 AttributeSet SetB = SetA.removeAttributes(C, 1, ASs[1]); 53 EXPECT_NE(SetA, SetB); 54 } 55 56 } // end anonymous namespace 57