]> granicus.if.org Git - llvm/commitdiff
GlobalISel: Add helper to LLT to get a scalar or vector
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Fri, 25 Jan 2019 00:10:49 +0000 (00:10 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Fri, 25 Jan 2019 00:10:49 +0000 (00:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@352136 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/LowLevelTypeImpl.h
unittests/CodeGen/LowLevelTypeTest.cpp

index cfa830cd6a3bcabd0e7a4578df8f295a82c08d36..f81999f3df8767a45b8e8bff191a4428b47132dd 100644 (file)
@@ -70,6 +70,14 @@ public:
                ScalarTy.isPointer() ? ScalarTy.getAddressSpace() : 0};
   }
 
+  static LLT scalarOrVector(uint16_t NumElements, LLT ScalarTy) {
+    return NumElements == 1 ? ScalarTy : LLT::vector(NumElements, ScalarTy);
+  }
+
+  static LLT scalarOrVector(uint16_t NumElements, unsigned ScalarSize) {
+    return scalarOrVector(NumElements, LLT::scalar(ScalarSize));
+  }
+
   explicit LLT(bool isPointer, bool isVector, uint16_t NumElements,
                unsigned SizeInBits, unsigned AddressSpace) {
     init(isPointer, isVector, NumElements, SizeInBits, AddressSpace);
index 400436f1ddf683884a62b698ce2d7b2b44c0a8fc..684a2cfd39555551e42922d0ed4c429f697e37d6 100644 (file)
@@ -103,6 +103,21 @@ TEST(LowLevelTypeTest, Vector) {
   }
 }
 
+TEST(LowLevelTypeTest, ScalarOrVector) {
+  // Test version with number of bits for scalar type.
+  EXPECT_EQ(LLT::scalar(32), LLT::scalarOrVector(1, 32));
+  EXPECT_EQ(LLT::vector(2, 32), LLT::scalarOrVector(2, 32));
+
+  // Test version with LLT for scalar type.
+  EXPECT_EQ(LLT::scalar(32), LLT::scalarOrVector(1, LLT::scalar(32)));
+  EXPECT_EQ(LLT::vector(2, 32), LLT::scalarOrVector(2, LLT::scalar(32)));
+
+  // Test with pointer elements.
+  EXPECT_EQ(LLT::pointer(1, 32), LLT::scalarOrVector(1, LLT::pointer(1, 32)));
+  EXPECT_EQ(LLT::vector(2, LLT::pointer(1, 32)),
+            LLT::scalarOrVector(2, LLT::pointer(1, 32)));
+}
+
 TEST(LowLevelTypeTest, Pointer) {
   LLVMContext C;
   DataLayout DL("");