DataLayoutTest.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. //===- ConstantRangeTest.cpp - ConstantRange tests ------------------------===//
  2. //
  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
  6. //
  7. //===----------------------------------------------------------------------===//
  8. #include "llvm/IR/DataLayout.h"
  9. #include "llvm/IR/LLVMContext.h"
  10. #include "llvm/IR/Type.h"
  11. #include "gtest/gtest.h"
  12. using namespace llvm;
  13. namespace {
  14. TEST(DataLayoutTest, FunctionPtrAlign) {
  15. EXPECT_EQ(MaybeAlign(0), DataLayout("").getFunctionPtrAlign());
  16. EXPECT_EQ(MaybeAlign(1), DataLayout("Fi8").getFunctionPtrAlign());
  17. EXPECT_EQ(MaybeAlign(2), DataLayout("Fi16").getFunctionPtrAlign());
  18. EXPECT_EQ(MaybeAlign(4), DataLayout("Fi32").getFunctionPtrAlign());
  19. EXPECT_EQ(MaybeAlign(8), DataLayout("Fi64").getFunctionPtrAlign());
  20. EXPECT_EQ(MaybeAlign(1), DataLayout("Fn8").getFunctionPtrAlign());
  21. EXPECT_EQ(MaybeAlign(2), DataLayout("Fn16").getFunctionPtrAlign());
  22. EXPECT_EQ(MaybeAlign(4), DataLayout("Fn32").getFunctionPtrAlign());
  23. EXPECT_EQ(MaybeAlign(8), DataLayout("Fn64").getFunctionPtrAlign());
  24. EXPECT_EQ(DataLayout::FunctionPtrAlignType::Independent, \
  25. DataLayout("").getFunctionPtrAlignType());
  26. EXPECT_EQ(DataLayout::FunctionPtrAlignType::Independent, \
  27. DataLayout("Fi8").getFunctionPtrAlignType());
  28. EXPECT_EQ(DataLayout::FunctionPtrAlignType::MultipleOfFunctionAlign, \
  29. DataLayout("Fn8").getFunctionPtrAlignType());
  30. EXPECT_EQ(DataLayout("Fi8"), DataLayout("Fi8"));
  31. EXPECT_NE(DataLayout("Fi8"), DataLayout("Fi16"));
  32. EXPECT_NE(DataLayout("Fi8"), DataLayout("Fn8"));
  33. DataLayout a(""), b("Fi8"), c("Fn8");
  34. EXPECT_NE(a, b);
  35. EXPECT_NE(a, c);
  36. EXPECT_NE(b, c);
  37. a = b;
  38. EXPECT_EQ(a, b);
  39. a = c;
  40. EXPECT_EQ(a, c);
  41. }
  42. TEST(DataLayoutTest, ValueOrABITypeAlignment) {
  43. const DataLayout DL("Fi8");
  44. LLVMContext Context;
  45. Type *const FourByteAlignType = Type::getInt32Ty(Context);
  46. EXPECT_EQ(Align(16),
  47. DL.getValueOrABITypeAlignment(MaybeAlign(16), FourByteAlignType));
  48. EXPECT_EQ(Align(4),
  49. DL.getValueOrABITypeAlignment(MaybeAlign(), FourByteAlignType));
  50. }
  51. } // anonymous namespace