@@ -26,7 +26,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
26
#include " common/IGCConstantFolder.h"
27
27
#include < cfenv>
28
28
#include " Probe/Assertion.h"
29
- #include " Types.hpp"
30
29
31
30
namespace IGC
32
31
{
@@ -185,128 +184,6 @@ llvm::Constant* IGCConstantFolder::CreateCanonicalize(llvm::Constant* C0, bool f
185
184
return llvm::ConstantFP::get (C0->getContext (), APF);
186
185
}
187
186
188
- llvm::Constant* IGCConstantFolder::CreateFirstBitLo (llvm::Constant* C0) const
189
- {
190
- if (llvm::isa<llvm::UndefValue>(C0) || C0->getType ()->getIntegerBitWidth () > 32 )
191
- {
192
- return nullptr ;
193
- }
194
- llvm::ConstantInt* CI0 = llvm::cast<llvm::ConstantInt>(C0);
195
- uint32_t result = CI0->getValue ().countTrailingZeros ();
196
- return llvm::ConstantInt::get (C0->getType (), result);
197
- }
198
-
199
- llvm::Constant* IGCConstantFolder::CreateFirstBitHi (llvm::Constant* C0) const
200
- {
201
- if (llvm::isa<llvm::UndefValue>(C0) || C0->getType ()->getIntegerBitWidth () > 32 )
202
- {
203
- return nullptr ;
204
- }
205
- llvm::ConstantInt* CI0 = llvm::cast<llvm::ConstantInt>(C0);
206
- uint32_t result = CI0->getValue ().getActiveBits ();
207
- return llvm::ConstantInt::get (C0->getType (), result);
208
- }
209
-
210
- llvm::Constant* IGCConstantFolder::CreateFirstBitShi (llvm::Constant* C0) const
211
- {
212
- return CreateFirstBitHi (C0);
213
- }
214
-
215
- llvm::Constant* IGCConstantFolder::CreateBfrev (llvm::Constant* C0) const
216
- {
217
- if (llvm::isa<llvm::UndefValue>(C0) || C0->getType ()->getIntegerBitWidth () != 32 )
218
- {
219
- return nullptr ;
220
- }
221
- llvm::ConstantInt* CI0 = llvm::cast<llvm::ConstantInt>(C0);
222
- llvm::APInt result = CI0->getValue ();
223
- result.flipAllBits ();
224
- return llvm::ConstantInt::get (C0->getContext (), result);
225
- }
226
-
227
- llvm::Constant* IGCConstantFolder::CreateUbfe (llvm::Constant* C0, llvm::Constant* C1, llvm::Constant* C2) const
228
- {
229
- if (llvm::isa<llvm::UndefValue>(C0) || llvm::isa<llvm::UndefValue>(C1) || llvm::isa<llvm::UndefValue>(C2) || C2->getType ()->getIntegerBitWidth () != 32 )
230
- {
231
- return nullptr ;
232
- }
233
- llvm::ConstantInt* CI0 = llvm::cast<llvm::ConstantInt>(C0); // width
234
- llvm::ConstantInt* CI1 = llvm::cast<llvm::ConstantInt>(C1); // offset
235
- llvm::ConstantInt* CI2 = llvm::cast<llvm::ConstantInt>(C2); // the number to shift
236
- uint32_t width = int_cast<uint32_t >(CI0->getZExtValue ()) & 0x1F ;
237
- uint32_t offset = int_cast<uint32_t >(CI1->getZExtValue ()) & 0x1F ;
238
- uint32_t bitwidth = CI2->getType ()->getBitWidth ();
239
- if (CI0->isZero ())
240
- {
241
- return llvm::ConstantInt::get (C0->getType (), 0 );
242
- }
243
- else if ((width + offset) < bitwidth)
244
- {
245
- llvm::APInt result = CI2->getValue ();
246
- result = result.shl (bitwidth - (width + offset));
247
- result = result.lshr (bitwidth - width);
248
- return llvm::ConstantInt::get (C0->getContext (), result);
249
- }
250
- else
251
- {
252
- llvm::APInt result = CI2->getValue ();
253
- result = result.lshr (bitwidth - offset);
254
- return llvm::ConstantInt::get (C0->getContext (), result);
255
- }
256
- }
257
-
258
- llvm::Constant* IGCConstantFolder::CreateIbfe (llvm::Constant* C0, llvm::Constant* C1, llvm::Constant* C2) const
259
- {
260
- if (llvm::isa<llvm::UndefValue>(C0) || llvm::isa<llvm::UndefValue>(C1) || llvm::isa<llvm::UndefValue>(C2) || C2->getType ()->getIntegerBitWidth () != 32 )
261
- {
262
- return nullptr ;
263
- }
264
- llvm::ConstantInt* CI0 = llvm::cast<llvm::ConstantInt>(C0); // width
265
- llvm::ConstantInt* CI1 = llvm::cast<llvm::ConstantInt>(C1); // offset
266
- llvm::ConstantInt* CI2 = llvm::cast<llvm::ConstantInt>(C2); // the number to shift
267
- uint32_t width = int_cast<uint32_t >(CI0->getZExtValue ()) & 0x1F ;
268
- uint32_t offset = int_cast<uint32_t >(CI1->getZExtValue ()) & 0x1F ;
269
- uint32_t bitwidth = CI2->getType ()->getBitWidth ();
270
- if (CI0->isZero ())
271
- {
272
- return llvm::ConstantInt::get (C0->getType (), 0 );
273
- }
274
- else if ((width + offset) < bitwidth)
275
- {
276
- llvm::APInt result = CI2->getValue ();
277
- result = result.shl (bitwidth - (width + offset));
278
- result = result.ashr (bitwidth - width);
279
- return llvm::ConstantInt::get (C0->getContext (), result);
280
- }
281
- else
282
- {
283
- llvm::APInt result = CI2->getValue ();
284
- result = result.ashr (bitwidth - offset);
285
- return llvm::ConstantInt::get (C0->getContext (), result);
286
- }
287
- }
288
-
289
- llvm::Constant* IGCConstantFolder::CreateBfi (llvm::Constant* C0, llvm::Constant* C1, llvm::Constant* C2, llvm::Constant* C3) const
290
- {
291
- if (llvm::isa<llvm::UndefValue>(C0) || llvm::isa<llvm::UndefValue>(C1) || llvm::isa<llvm::UndefValue>(C2) ||
292
- llvm::isa<llvm::UndefValue>(C3) || C2->getType ()->getIntegerBitWidth () != 32 || C3->getType ()->getIntegerBitWidth () != 32 )
293
- {
294
- return nullptr ;
295
- }
296
- llvm::ConstantInt* CI0 = llvm::cast<llvm::ConstantInt>(C0); // width
297
- llvm::ConstantInt* CI1 = llvm::cast<llvm::ConstantInt>(C1); // offset
298
- llvm::ConstantInt* CI2 = llvm::cast<llvm::ConstantInt>(C2); // the number the bits are taken from.
299
- llvm::ConstantInt* CI3 = llvm::cast<llvm::ConstantInt>(C3); // the number with bits to be replaced.
300
- uint32_t width = int_cast<uint32_t >(CI0->getZExtValue ());
301
- uint32_t offset = int_cast<uint32_t >(CI1->getZExtValue ());
302
- uint32_t bitwidth = CI2->getType ()->getBitWidth ();
303
- llvm::APInt bitmask = llvm::APInt::getBitsSet (bitwidth, offset, offset + width);
304
- llvm::APInt result = CI2->getValue ();
305
- result = result.shl (offset);
306
- result = (result & bitmask) | (CI3->getValue () & !bitmask);
307
- return llvm::ConstantInt::get (C0->getContext (), result);
308
- }
309
-
310
187
llvm::Constant* IGCConstantFolder::CreateGradient (llvm::Constant* C0) const
311
188
{
312
189
IGC_ASSERT (nullptr != C0);
0 commit comments