@@ -81,6 +81,9 @@ void llvm::ComputeValueVTs(const TargetLowering &TLI, const DataLayout &DL,
81
81
SmallVectorImpl<EVT> *MemVTs,
82
82
SmallVectorImpl<TypeSize> *Offsets,
83
83
TypeSize StartingOffset) {
84
+ assert ((Ty->isScalableTy () == StartingOffset.isScalable () ||
85
+ StartingOffset.isZero ()) &&
86
+ " Offset/TypeSize mismatch!" );
84
87
// Given a struct type, recursively traverse the elements.
85
88
if (StructType *STy = dyn_cast<StructType>(Ty)) {
86
89
// If the Offsets aren't needed, don't query the struct layout. This allows
@@ -92,8 +95,8 @@ void llvm::ComputeValueVTs(const TargetLowering &TLI, const DataLayout &DL,
92
95
EE = STy->element_end ();
93
96
EI != EE; ++EI) {
94
97
// Don't compute the element offset if we didn't get a StructLayout above.
95
- TypeSize EltOffset = SL ? SL-> getElementOffset (EI - EB)
96
- : TypeSize::get ( 0 , StartingOffset. isScalable () );
98
+ TypeSize EltOffset =
99
+ SL ? SL-> getElementOffset (EI - EB) : TypeSize::getZero ( );
97
100
ComputeValueVTs (TLI, DL, *EI, ValueVTs, MemVTs, Offsets,
98
101
StartingOffset + EltOffset);
99
102
}
@@ -119,52 +122,12 @@ void llvm::ComputeValueVTs(const TargetLowering &TLI, const DataLayout &DL,
119
122
Offsets->push_back (StartingOffset);
120
123
}
121
124
122
- void llvm::ComputeValueVTs (const TargetLowering &TLI, const DataLayout &DL,
123
- Type *Ty, SmallVectorImpl<EVT> &ValueVTs,
124
- SmallVectorImpl<TypeSize> *Offsets,
125
- TypeSize StartingOffset) {
126
- return ComputeValueVTs (TLI, DL, Ty, ValueVTs, /* MemVTs=*/ nullptr , Offsets,
127
- StartingOffset);
128
- }
129
-
130
- void llvm::ComputeValueVTs (const TargetLowering &TLI, const DataLayout &DL,
131
- Type *Ty, SmallVectorImpl<EVT> &ValueVTs,
132
- SmallVectorImpl<TypeSize> *Offsets,
133
- uint64_t StartingOffset) {
134
- TypeSize Offset = TypeSize::get (StartingOffset, Ty->isScalableTy ());
135
- return ComputeValueVTs (TLI, DL, Ty, ValueVTs, Offsets, Offset);
136
- }
137
-
138
- void llvm::ComputeValueVTs (const TargetLowering &TLI, const DataLayout &DL,
139
- Type *Ty, SmallVectorImpl<EVT> &ValueVTs,
140
- SmallVectorImpl<uint64_t > *FixedOffsets,
141
- uint64_t StartingOffset) {
142
- TypeSize Offset = TypeSize::get (StartingOffset, Ty->isScalableTy ());
143
- if (FixedOffsets) {
144
- SmallVector<TypeSize, 4 > Offsets;
145
- ComputeValueVTs (TLI, DL, Ty, ValueVTs, &Offsets, Offset);
146
- for (TypeSize Offset : Offsets)
147
- FixedOffsets->push_back (Offset.getFixedValue ());
148
- } else {
149
- ComputeValueVTs (TLI, DL, Ty, ValueVTs, nullptr , Offset);
150
- }
151
- }
152
-
153
- void llvm::ComputeValueVTs (const TargetLowering &TLI, const DataLayout &DL,
154
- Type *Ty, SmallVectorImpl<EVT> &ValueVTs,
155
- SmallVectorImpl<EVT> *MemVTs,
156
- SmallVectorImpl<TypeSize> *Offsets,
157
- uint64_t StartingOffset) {
158
- TypeSize Offset = TypeSize::get (StartingOffset, Ty->isScalableTy ());
159
- return ComputeValueVTs (TLI, DL, Ty, ValueVTs, MemVTs, Offsets, Offset);
160
- }
161
-
162
125
void llvm::ComputeValueVTs (const TargetLowering &TLI, const DataLayout &DL,
163
126
Type *Ty, SmallVectorImpl<EVT> &ValueVTs,
164
127
SmallVectorImpl<EVT> *MemVTs,
165
128
SmallVectorImpl<uint64_t > *FixedOffsets,
166
129
uint64_t StartingOffset) {
167
- TypeSize Offset = TypeSize::get (StartingOffset, Ty-> isScalableTy () );
130
+ TypeSize Offset = TypeSize::getFixed (StartingOffset);
168
131
if (FixedOffsets) {
169
132
SmallVector<TypeSize, 4 > Offsets;
170
133
ComputeValueVTs (TLI, DL, Ty, ValueVTs, MemVTs, &Offsets, Offset);
0 commit comments