Skip to content

Commit 3c0e197

Browse files
committed
Changes from code review.
1 parent 3abe11e commit 3c0e197

File tree

2 files changed

+13
-17
lines changed

2 files changed

+13
-17
lines changed

llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -118,18 +118,14 @@ class SPIRVLegalizePointerCast : public FunctionPass {
118118

119119
// Loads elements from an array and constructs a vector.
120120
Value *loadVectorFromArray(IRBuilder<> &B, FixedVectorType *TargetType,
121-
ArrayType *SourceType, Value *Source) {
122-
// Ensure the element types of the array and vector are the same.
123-
assert(TargetType->getElementType() == SourceType->getElementType() &&
124-
"Element types of array and vector must be the same.");
125-
121+
Value *Source) {
126122
// Load each element of the array.
127123
SmallVector<Value *, 4> LoadedElements;
128124
for (unsigned i = 0; i < TargetType->getNumElements(); ++i) {
129125
// Create a GEP to access the i-th element of the array.
130126
SmallVector<Type *, 2> Types = {Source->getType(), Source->getType()};
131127
SmallVector<Value *, 4> Args;
132-
Args.push_back(B.getInt1(true));
128+
Args.push_back(B.getInt1(false));
133129
Args.push_back(Source);
134130
Args.push_back(B.getInt32(0));
135131
Args.push_back(ConstantInt::get(B.getInt32Ty(), i));
@@ -143,7 +139,7 @@ class SPIRVLegalizePointerCast : public FunctionPass {
143139
}
144140

145141
// Build the vector from the loaded elements.
146-
Value *NewVector = UndefValue::get(TargetType);
142+
Value *NewVector = PoisonValue::get(TargetType);
147143
buildAssignType(B, TargetType, NewVector);
148144

149145
for (unsigned i = 0; i < TargetType->getNumElements(); ++i) {
@@ -173,7 +169,7 @@ class SPIRVLegalizePointerCast : public FunctionPass {
173169
SmallVector<Type *, 2> Types = {DstArrayPtr->getType(),
174170
DstArrayPtr->getType()};
175171
SmallVector<Value *, 4> Args;
176-
Args.push_back(B.getInt1(true));
172+
Args.push_back(B.getInt1(false));
177173
Args.push_back(DstArrayPtr);
178174
Args.push_back(B.getInt32(0));
179175
Args.push_back(ConstantInt::get(B.getInt32Ty(), i));
@@ -234,7 +230,7 @@ class SPIRVLegalizePointerCast : public FunctionPass {
234230
else if (SST && SST->getTypeAtIndex(0u) == ToTy)
235231
Output = loadFirstValueFromAggregate(B, ToTy, OriginalOperand, LI);
236232
else if (SAT && DVT && SAT->getElementType() == DVT->getElementType())
237-
Output = loadVectorFromArray(B, DVT, SAT, OriginalOperand);
233+
Output = loadVectorFromArray(B, DVT, OriginalOperand);
238234
else
239235
llvm_unreachable("Unimplemented implicit down-cast from load.");
240236

llvm/test/CodeGen/SPIRV/pointers/load-store-vec-from-array.ll

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,30 @@
2121

2222
define spir_func void @main() {
2323
entry:
24-
; CHECK: [[GEP0:%[0-9]+]] = OpInBoundsAccessChain [[PTR_FLOAT]] [[G_IN]] [[UINT0]]
24+
; CHECK: [[GEP0:%[0-9]+]] = OpAccessChain [[PTR_FLOAT]] [[G_IN]] [[UINT0]]
2525
; CHECK-NEXT: [[LOAD0:%[0-9]+]] = OpLoad [[FLOAT]] [[GEP0]]
26-
; CHECK-NEXT: [[GEP1:%[0-9]+]] = OpInBoundsAccessChain [[PTR_FLOAT]] [[G_IN]] [[UINT1]]
26+
; CHECK-NEXT: [[GEP1:%[0-9]+]] = OpAccessChain [[PTR_FLOAT]] [[G_IN]] [[UINT1]]
2727
; CHECK-NEXT: [[LOAD1:%[0-9]+]] = OpLoad [[FLOAT]] [[GEP1]]
28-
; CHECK-NEXT: [[GEP2:%[0-9]+]] = OpInBoundsAccessChain [[PTR_FLOAT]] [[G_IN]] [[UINT2]]
28+
; CHECK-NEXT: [[GEP2:%[0-9]+]] = OpAccessChain [[PTR_FLOAT]] [[G_IN]] [[UINT2]]
2929
; CHECK-NEXT: [[LOAD2:%[0-9]+]] = OpLoad [[FLOAT]] [[GEP2]]
30-
; CHECK-NEXT: [[GEP3:%[0-9]+]] = OpInBoundsAccessChain [[PTR_FLOAT]] [[G_IN]] [[UINT3]]
30+
; CHECK-NEXT: [[GEP3:%[0-9]+]] = OpAccessChain [[PTR_FLOAT]] [[G_IN]] [[UINT3]]
3131
; CHECK-NEXT: [[LOAD3:%[0-9]+]] = OpLoad [[FLOAT]] [[GEP3]]
3232
; CHECK-NEXT: [[VEC_INSERT0:%[0-9]+]] = OpCompositeInsert [[VEC4FLOAT]] [[LOAD0]] [[UNDEF_VEC]] 0
3333
; CHECK-NEXT: [[VEC_INSERT1:%[0-9]+]] = OpCompositeInsert [[VEC4FLOAT]] [[LOAD1]] [[VEC_INSERT0]] 1
3434
; CHECK-NEXT: [[VEC_INSERT2:%[0-9]+]] = OpCompositeInsert [[VEC4FLOAT]] [[LOAD2]] [[VEC_INSERT1]] 2
3535
; CHECK-NEXT: [[VEC:%[0-9]+]] = OpCompositeInsert [[VEC4FLOAT]] [[LOAD3]] [[VEC_INSERT2]] 3
3636
%0 = load <4 x float>, ptr addrspace(10) @G_in, align 64
3737

38-
; CHECK-NEXT: [[GEP_OUT0:%[0-9]+]] = OpInBoundsAccessChain [[PTR_FLOAT]] [[G_OUT]] [[UINT0]]
38+
; CHECK-NEXT: [[GEP_OUT0:%[0-9]+]] = OpAccessChain [[PTR_FLOAT]] [[G_OUT]] [[UINT0]]
3939
; CHECK-NEXT: [[VEC_EXTRACT0:%[0-9]+]] = OpCompositeExtract [[FLOAT]] [[VEC]] 0
4040
; CHECK-NEXT: OpStore [[GEP_OUT0]] [[VEC_EXTRACT0]]
41-
; CHECK-NEXT: [[GEP_OUT1:%[0-9]+]] = OpInBoundsAccessChain [[PTR_FLOAT]] [[G_OUT]] [[UINT1]]
41+
; CHECK-NEXT: [[GEP_OUT1:%[0-9]+]] = OpAccessChain [[PTR_FLOAT]] [[G_OUT]] [[UINT1]]
4242
; CHECK-NEXT: [[VEC_EXTRACT1:%[0-9]+]] = OpCompositeExtract [[FLOAT]] [[VEC]] 1
4343
; CHECK-NEXT: OpStore [[GEP_OUT1]] [[VEC_EXTRACT1]]
44-
; CHECK-NEXT: [[GEP_OUT2:%[0-9]+]] = OpInBoundsAccessChain [[PTR_FLOAT]] [[G_OUT]] [[UINT2]]
44+
; CHECK-NEXT: [[GEP_OUT2:%[0-9]+]] = OpAccessChain [[PTR_FLOAT]] [[G_OUT]] [[UINT2]]
4545
; CHECK-NEXT: [[VEC_EXTRACT2:%[0-9]+]] = OpCompositeExtract [[FLOAT]] [[VEC]] 2
4646
; CHECK-NEXT: OpStore [[GEP_OUT2]] [[VEC_EXTRACT2]]
47-
; CHECK-NEXT: [[GEP_OUT3:%[0-9]+]] = OpInBoundsAccessChain [[PTR_FLOAT]] [[G_OUT]] [[UINT3]]
47+
; CHECK-NEXT: [[GEP_OUT3:%[0-9]+]] = OpAccessChain [[PTR_FLOAT]] [[G_OUT]] [[UINT3]]
4848
; CHECK-NEXT: [[VEC_EXTRACT3:%[0-9]+]] = OpCompositeExtract [[FLOAT]] [[VEC]] 3
4949
; CHECK-NEXT: OpStore [[GEP_OUT3]] [[VEC_EXTRACT3]]
5050
store <4 x float> %0, ptr addrspace(10) @G_out, align 64

0 commit comments

Comments
 (0)