Skip to content

Commit 7ba2d82

Browse files
committed
GlobalISel: Add helper to LLT to get a scalar or vector
llvm-svn: 352136
1 parent 653020d commit 7ba2d82

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

llvm/include/llvm/Support/LowLevelTypeImpl.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,14 @@ class LLT {
7070
ScalarTy.isPointer() ? ScalarTy.getAddressSpace() : 0};
7171
}
7272

73+
static LLT scalarOrVector(uint16_t NumElements, LLT ScalarTy) {
74+
return NumElements == 1 ? ScalarTy : LLT::vector(NumElements, ScalarTy);
75+
}
76+
77+
static LLT scalarOrVector(uint16_t NumElements, unsigned ScalarSize) {
78+
return scalarOrVector(NumElements, LLT::scalar(ScalarSize));
79+
}
80+
7381
explicit LLT(bool isPointer, bool isVector, uint16_t NumElements,
7482
unsigned SizeInBits, unsigned AddressSpace) {
7583
init(isPointer, isVector, NumElements, SizeInBits, AddressSpace);

llvm/unittests/CodeGen/LowLevelTypeTest.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,21 @@ TEST(LowLevelTypeTest, Vector) {
103103
}
104104
}
105105

106+
TEST(LowLevelTypeTest, ScalarOrVector) {
107+
// Test version with number of bits for scalar type.
108+
EXPECT_EQ(LLT::scalar(32), LLT::scalarOrVector(1, 32));
109+
EXPECT_EQ(LLT::vector(2, 32), LLT::scalarOrVector(2, 32));
110+
111+
// Test version with LLT for scalar type.
112+
EXPECT_EQ(LLT::scalar(32), LLT::scalarOrVector(1, LLT::scalar(32)));
113+
EXPECT_EQ(LLT::vector(2, 32), LLT::scalarOrVector(2, LLT::scalar(32)));
114+
115+
// Test with pointer elements.
116+
EXPECT_EQ(LLT::pointer(1, 32), LLT::scalarOrVector(1, LLT::pointer(1, 32)));
117+
EXPECT_EQ(LLT::vector(2, LLT::pointer(1, 32)),
118+
LLT::scalarOrVector(2, LLT::pointer(1, 32)));
119+
}
120+
106121
TEST(LowLevelTypeTest, Pointer) {
107122
LLVMContext C;
108123
DataLayout DL("");

0 commit comments

Comments
 (0)