118
118
#define VP_PROPERTY_FUNCTIONAL_INTRINSIC (INTRIN )
119
119
#endif
120
120
121
+ // This VP Intrinsic has no functionally-equivalent non-VP opcode or intrinsic.
122
+ #ifndef VP_PROPERTY_NO_FUNCTIONAL
123
+ #define VP_PROPERTY_NO_FUNCTIONAL
124
+ #endif
125
+
121
126
// This VP Intrinsic is a memory operation
122
127
// The pointer arg is at POINTERPOS and the data arg is at DATAPOS.
123
128
#ifndef VP_PROPERTY_MEMOP
@@ -235,27 +240,32 @@ END_REGISTER_VP(vp_umax, VP_UMAX)
235
240
BEGIN_REGISTER_VP_INTRINSIC(vp_abs, 2 , 3 )
236
241
BEGIN_REGISTER_VP_SDNODE(VP_ABS, -1 , vp_abs, 1 , 2 )
237
242
HELPER_MAP_VPID_TO_VPSD(vp_abs, VP_ABS)
243
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(abs)
238
244
VP_PROPERTY_FUNCTIONAL_SDOPC(ABS)
239
245
END_REGISTER_VP(vp_abs, VP_ABS)
240
246
241
247
// llvm.vp.bswap(x,mask,vlen)
242
248
BEGIN_REGISTER_VP(vp_bswap, 1 , 2 , VP_BSWAP, -1 )
249
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(bswap)
243
250
VP_PROPERTY_FUNCTIONAL_SDOPC(BSWAP)
244
251
END_REGISTER_VP(vp_bswap, VP_BSWAP)
245
252
246
253
// llvm.vp.bitreverse(x,mask,vlen)
247
254
BEGIN_REGISTER_VP(vp_bitreverse, 1 , 2 , VP_BITREVERSE, -1 )
255
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(bitreverse)
248
256
VP_PROPERTY_FUNCTIONAL_SDOPC(BITREVERSE)
249
257
END_REGISTER_VP(vp_bitreverse, VP_BITREVERSE)
250
258
251
259
// llvm.vp.ctpop(x,mask,vlen)
252
260
BEGIN_REGISTER_VP(vp_ctpop, 1 , 2 , VP_CTPOP, -1 )
261
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(ctpop)
253
262
VP_PROPERTY_FUNCTIONAL_SDOPC(CTPOP)
254
263
END_REGISTER_VP(vp_ctpop, VP_CTPOP)
255
264
256
265
// llvm.vp.ctlz(x,is_zero_poison,mask,vlen)
257
266
BEGIN_REGISTER_VP_INTRINSIC(vp_ctlz, 2 , 3 )
258
267
BEGIN_REGISTER_VP_SDNODE(VP_CTLZ, -1 , vp_ctlz, 1 , 2 )
268
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(ctlz)
259
269
VP_PROPERTY_FUNCTIONAL_SDOPC(CTLZ)
260
270
END_REGISTER_VP_SDNODE(VP_CTLZ)
261
271
BEGIN_REGISTER_VP_SDNODE(VP_CTLZ_ZERO_UNDEF, -1 , vp_ctlz_zero_undef, 1 , 2 )
@@ -265,6 +275,7 @@ END_REGISTER_VP_INTRINSIC(vp_ctlz)
265
275
// llvm.vp.cttz(x,is_zero_poison,mask,vlen)
266
276
BEGIN_REGISTER_VP_INTRINSIC(vp_cttz, 2 , 3 )
267
277
BEGIN_REGISTER_VP_SDNODE(VP_CTTZ, -1 , vp_cttz, 1 , 2 )
278
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(cttz)
268
279
VP_PROPERTY_FUNCTIONAL_SDOPC(CTTZ)
269
280
END_REGISTER_VP_SDNODE(VP_CTTZ)
270
281
BEGIN_REGISTER_VP_SDNODE(VP_CTTZ_ZERO_UNDEF, -1 , vp_cttz_zero_undef, 1 , 2 )
@@ -273,11 +284,13 @@ END_REGISTER_VP_INTRINSIC(vp_cttz)
273
284
274
285
// llvm.vp.fshl(x,y,z,mask,vlen)
275
286
BEGIN_REGISTER_VP(vp_fshl, 3 , 4 , VP_FSHL, -1 )
287
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(fshl)
276
288
VP_PROPERTY_FUNCTIONAL_SDOPC(FSHL)
277
289
END_REGISTER_VP(vp_fshl, VP_FSHL)
278
290
279
291
// llvm.vp.fshr(x,y,z,mask,vlen)
280
292
BEGIN_REGISTER_VP(vp_fshr, 3 , 4 , VP_FSHR, -1 )
293
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(fshr)
281
294
VP_PROPERTY_FUNCTIONAL_SDOPC(FSHR)
282
295
END_REGISTER_VP(vp_fshr, VP_FSHR)
283
296
// /// } Integer Arithmetic
@@ -323,23 +336,27 @@ END_REGISTER_VP(vp_fneg, VP_FNEG)
323
336
324
337
// llvm.vp.fabs(x,mask,vlen)
325
338
BEGIN_REGISTER_VP(vp_fabs, 1 , 2 , VP_FABS, -1 )
339
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(fabs)
326
340
VP_PROPERTY_FUNCTIONAL_SDOPC(FABS)
327
341
END_REGISTER_VP(vp_fabs, VP_FABS)
328
342
329
343
// llvm.vp.sqrt(x,mask,vlen)
330
344
BEGIN_REGISTER_VP(vp_sqrt, 1 , 2 , VP_SQRT, -1 )
345
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(sqrt)
331
346
VP_PROPERTY_FUNCTIONAL_SDOPC(FSQRT)
332
347
END_REGISTER_VP(vp_sqrt, VP_SQRT)
333
348
334
349
// llvm.vp.fma(x,y,z,mask,vlen)
335
350
BEGIN_REGISTER_VP(vp_fma, 3 , 4 , VP_FMA, -1 )
336
351
VP_PROPERTY_CONSTRAINEDFP(1 , 1 , experimental_constrained_fma)
352
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(fma)
337
353
VP_PROPERTY_FUNCTIONAL_SDOPC(FMA)
338
354
END_REGISTER_VP(vp_fma, VP_FMA)
339
355
340
356
// llvm.vp.fmuladd(x,y,z,mask,vlen)
341
357
BEGIN_REGISTER_VP(vp_fmuladd, 3 , 4 , VP_FMULADD, -1 )
342
358
VP_PROPERTY_CONSTRAINEDFP(1 , 1 , experimental_constrained_fmuladd)
359
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(fmuladd)
343
360
VP_PROPERTY_FUNCTIONAL_SDOPC(FMAD)
344
361
END_REGISTER_VP(vp_fmuladd, VP_FMULADD)
345
362
@@ -366,36 +383,43 @@ END_REGISTER_VP(vp_maxnum, VP_FMAXNUM)
366
383
367
384
// llvm.vp.ceil(x,mask,vlen)
368
385
BEGIN_REGISTER_VP(vp_ceil, 1 , 2 , VP_FCEIL, -1 )
386
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(ceil)
369
387
VP_PROPERTY_FUNCTIONAL_SDOPC(FCEIL)
370
388
END_REGISTER_VP(vp_ceil, VP_FCEIL)
371
389
372
390
// llvm.vp.floor(x,mask,vlen)
373
391
BEGIN_REGISTER_VP(vp_floor, 1 , 2 , VP_FFLOOR, -1 )
392
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(floor)
374
393
VP_PROPERTY_FUNCTIONAL_SDOPC(FFLOOR)
375
394
END_REGISTER_VP(vp_floor, VP_FFLOOR)
376
395
377
396
// llvm.vp.round(x,mask,vlen)
378
397
BEGIN_REGISTER_VP(vp_round, 1 , 2 , VP_FROUND, -1 )
398
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(round)
379
399
VP_PROPERTY_FUNCTIONAL_SDOPC(FROUND)
380
400
END_REGISTER_VP(vp_round, VP_FROUND)
381
401
382
402
// llvm.vp.roundeven(x,mask,vlen)
383
403
BEGIN_REGISTER_VP(vp_roundeven, 1 , 2 , VP_FROUNDEVEN, -1 )
404
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(roundeven)
384
405
VP_PROPERTY_FUNCTIONAL_SDOPC(FROUNDEVEN)
385
406
END_REGISTER_VP(vp_roundeven, VP_FROUNDEVEN)
386
407
387
408
// llvm.vp.roundtozero(x,mask,vlen)
388
409
BEGIN_REGISTER_VP(vp_roundtozero, 1 , 2 , VP_FROUNDTOZERO, -1 )
410
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(trunc)
389
411
VP_PROPERTY_FUNCTIONAL_SDOPC(FTRUNC)
390
412
END_REGISTER_VP(vp_roundtozero, VP_FROUNDTOZERO)
391
413
392
414
// llvm.vp.rint(x,mask,vlen)
393
415
BEGIN_REGISTER_VP(vp_rint, 1 , 2 , VP_FRINT, -1 )
416
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(rint)
394
417
VP_PROPERTY_FUNCTIONAL_SDOPC(FRINT)
395
418
END_REGISTER_VP(vp_rint, VP_FRINT)
396
419
397
420
// llvm.vp.nearbyint(x,mask,vlen)
398
421
BEGIN_REGISTER_VP(vp_nearbyint, 1 , 2 , VP_FNEARBYINT, -1 )
422
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(nearbyint)
399
423
VP_PROPERTY_FUNCTIONAL_SDOPC(FNEARBYINT)
400
424
END_REGISTER_VP(vp_nearbyint, VP_FNEARBYINT)
401
425
@@ -499,6 +523,7 @@ END_REGISTER_VP_INTRINSIC(vp_icmp)
499
523
500
524
// llvm.vp.is.fpclass(on_true,on_false,mask,vlen)
501
525
BEGIN_REGISTER_VP(vp_is_fpclass, 2 , 3 , VP_IS_FPCLASS, 0 )
526
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(is_fpclass)
502
527
END_REGISTER_VP(vp_is_fpclass, VP_IS_FPCLASS)
503
528
504
529
// /// Memory Operations {
@@ -515,6 +540,7 @@ END_REGISTER_VP(vp_store, VP_STORE)
515
540
// llvm.experimental.vp.strided.store(val,ptr,stride,mask,vlen)
516
541
BEGIN_REGISTER_VP_INTRINSIC(experimental_vp_strided_store, 3 , 4 )
517
542
// chain = EXPERIMENTAL_VP_STRIDED_STORE chain,val,base,offset,stride,mask,evl
543
+ VP_PROPERTY_NO_FUNCTIONAL
518
544
BEGIN_REGISTER_VP_SDNODE(EXPERIMENTAL_VP_STRIDED_STORE, 1 , experimental_vp_strided_store, 5 , 6 )
519
545
HELPER_MAP_VPID_TO_VPSD(experimental_vp_strided_store, EXPERIMENTAL_VP_STRIDED_STORE)
520
546
VP_PROPERTY_MEMOP(1 , 0 )
@@ -542,6 +568,7 @@ END_REGISTER_VP(vp_load, VP_LOAD)
542
568
// llvm.experimental.vp.strided.load(ptr,stride,mask,vlen)
543
569
BEGIN_REGISTER_VP_INTRINSIC(experimental_vp_strided_load, 2 , 3 )
544
570
// chain = EXPERIMENTAL_VP_STRIDED_LOAD chain,base,offset,stride,mask,evl
571
+ VP_PROPERTY_NO_FUNCTIONAL
545
572
BEGIN_REGISTER_VP_SDNODE(EXPERIMENTAL_VP_STRIDED_LOAD, -1 , experimental_vp_strided_load, 4 , 5 )
546
573
HELPER_MAP_VPID_TO_VPSD(experimental_vp_strided_load, EXPERIMENTAL_VP_STRIDED_LOAD)
547
574
VP_PROPERTY_MEMOP(0 , std::nullopt)
@@ -668,9 +695,11 @@ END_REGISTER_VP(vp_select, VP_SELECT)
668
695
669
696
// llvm.vp.merge(cond,on_true,on_false,pivot)
670
697
BEGIN_REGISTER_VP(vp_merge, std::nullopt, 3 , VP_MERGE, -1 )
698
+ VP_PROPERTY_NO_FUNCTIONAL
671
699
END_REGISTER_VP(vp_merge, VP_MERGE)
672
700
673
701
BEGIN_REGISTER_VP(experimental_vp_splice, 3 , 5 , EXPERIMENTAL_VP_SPLICE, -1 )
702
+ VP_PROPERTY_FUNCTIONAL_INTRINSIC(experimental_vector_splice)
674
703
END_REGISTER_VP(experimental_vp_splice, EXPERIMENTAL_VP_SPLICE)
675
704
676
705
// /// } Shuffles
@@ -689,5 +718,6 @@ END_REGISTER_VP(experimental_vp_splice, EXPERIMENTAL_VP_SPLICE)
689
718
#undef VP_PROPERTY_FUNCTIONAL_INTRINSIC
690
719
#undef VP_PROPERTY_FUNCTIONAL_OPC
691
720
#undef VP_PROPERTY_FUNCTIONAL_SDOPC
721
+ #undef VP_PROPERTY_NO_FUNCTIONAL
692
722
#undef VP_PROPERTY_MEMOP
693
723
#undef VP_PROPERTY_REDUCTION
0 commit comments