@@ -299,6 +299,10 @@ static Constant *rebuildSExtCst(const Constant *C, unsigned NumElts,
299
299
unsigned SrcEltBitWidth) {
300
300
return rebuildExtCst (C, true , NumElts, SrcEltBitWidth);
301
301
}
302
+ static Constant *rebuildZExtCst (const Constant *C, unsigned NumElts,
303
+ unsigned SrcEltBitWidth) {
304
+ return rebuildExtCst (C, false , NumElts, SrcEltBitWidth);
305
+ }
302
306
303
307
bool X86FixupVectorConstantsPass::processInstruction (MachineFunction &MF,
304
308
MachineBasicBlock &MBB,
@@ -416,13 +420,19 @@ bool X86FixupVectorConstantsPass::processInstruction(MachineFunction &MF,
416
420
case X86::MOVDQUrm: {
417
421
FixupEntry Fixups[] = {
418
422
{HasSSE41 ? X86::PMOVSXBQrm : 0 , 2 , 8 , rebuildSExtCst},
423
+ {HasSSE41 ? X86::PMOVZXBQrm : 0 , 2 , 8 , rebuildZExtCst},
419
424
{X86::MOVDI2PDIrm, 1 , 32 , rebuildZeroUpperCst},
420
425
{HasSSE41 ? X86::PMOVSXBDrm : 0 , 4 , 8 , rebuildSExtCst},
426
+ {HasSSE41 ? X86::PMOVZXBDrm : 0 , 4 , 8 , rebuildZExtCst},
421
427
{HasSSE41 ? X86::PMOVSXWQrm : 0 , 2 , 16 , rebuildSExtCst},
428
+ {HasSSE41 ? X86::PMOVZXWQrm : 0 , 2 , 16 , rebuildZExtCst},
422
429
{X86::MOVQI2PQIrm, 1 , 64 , rebuildZeroUpperCst},
423
430
{HasSSE41 ? X86::PMOVSXBWrm : 0 , 8 , 8 , rebuildSExtCst},
431
+ {HasSSE41 ? X86::PMOVZXBWrm : 0 , 8 , 8 , rebuildZExtCst},
424
432
{HasSSE41 ? X86::PMOVSXWDrm : 0 , 4 , 16 , rebuildSExtCst},
425
- {HasSSE41 ? X86::PMOVSXDQrm : 0 , 2 , 32 , rebuildSExtCst}};
433
+ {HasSSE41 ? X86::PMOVZXWDrm : 0 , 4 , 16 , rebuildZExtCst},
434
+ {HasSSE41 ? X86::PMOVSXDQrm : 0 , 2 , 32 , rebuildSExtCst},
435
+ {HasSSE41 ? X86::PMOVZXDQrm : 0 , 2 , 32 , rebuildZExtCst}};
426
436
return FixupConstant (Fixups, 1 );
427
437
}
428
438
case X86::VMOVDQArm:
@@ -431,17 +441,23 @@ bool X86FixupVectorConstantsPass::processInstruction(MachineFunction &MF,
431
441
{HasAVX2 ? X86::VPBROADCASTBrm : 0 , 1 , 8 , rebuildSplatCst},
432
442
{HasAVX2 ? X86::VPBROADCASTWrm : 0 , 1 , 16 , rebuildSplatCst},
433
443
{X86::VPMOVSXBQrm, 2 , 8 , rebuildSExtCst},
444
+ {X86::VPMOVZXBQrm, 2 , 8 , rebuildZExtCst},
434
445
{X86::VMOVDI2PDIrm, 1 , 32 , rebuildZeroUpperCst},
435
446
{HasAVX2 ? X86::VPBROADCASTDrm : X86::VBROADCASTSSrm, 1 , 32 ,
436
447
rebuildSplatCst},
437
448
{X86::VPMOVSXBDrm, 4 , 8 , rebuildSExtCst},
449
+ {X86::VPMOVZXBDrm, 4 , 8 , rebuildZExtCst},
438
450
{X86::VPMOVSXWQrm, 2 , 16 , rebuildSExtCst},
451
+ {X86::VPMOVZXWQrm, 2 , 16 , rebuildZExtCst},
439
452
{X86::VMOVQI2PQIrm, 1 , 64 , rebuildZeroUpperCst},
440
453
{HasAVX2 ? X86::VPBROADCASTQrm : X86::VMOVDDUPrm, 1 , 64 ,
441
454
rebuildSplatCst},
442
455
{X86::VPMOVSXBWrm, 8 , 8 , rebuildSExtCst},
456
+ {X86::VPMOVZXBWrm, 8 , 8 , rebuildZExtCst},
443
457
{X86::VPMOVSXWDrm, 4 , 16 , rebuildSExtCst},
444
- {X86::VPMOVSXDQrm, 2 , 32 , rebuildSExtCst}};
458
+ {X86::VPMOVZXWDrm, 4 , 16 , rebuildZExtCst},
459
+ {X86::VPMOVSXDQrm, 2 , 32 , rebuildSExtCst},
460
+ {X86::VPMOVZXDQrm, 2 , 32 , rebuildZExtCst}};
445
461
return FixupConstant (Fixups, 1 );
446
462
}
447
463
case X86::VMOVDQAYrm:
@@ -452,15 +468,21 @@ bool X86FixupVectorConstantsPass::processInstruction(MachineFunction &MF,
452
468
{HasAVX2 ? X86::VPBROADCASTDYrm : X86::VBROADCASTSSYrm, 1 , 32 ,
453
469
rebuildSplatCst},
454
470
{HasAVX2 ? X86::VPMOVSXBQYrm : 0 , 4 , 8 , rebuildSExtCst},
471
+ {HasAVX2 ? X86::VPMOVZXBQYrm : 0 , 4 , 8 , rebuildZExtCst},
455
472
{HasAVX2 ? X86::VPBROADCASTQYrm : X86::VBROADCASTSDYrm, 1 , 64 ,
456
473
rebuildSplatCst},
457
474
{HasAVX2 ? X86::VPMOVSXBDYrm : 0 , 8 , 8 , rebuildSExtCst},
475
+ {HasAVX2 ? X86::VPMOVZXBDYrm : 0 , 8 , 8 , rebuildZExtCst},
458
476
{HasAVX2 ? X86::VPMOVSXWQYrm : 0 , 4 , 16 , rebuildSExtCst},
477
+ {HasAVX2 ? X86::VPMOVZXWQYrm : 0 , 4 , 16 , rebuildZExtCst},
459
478
{HasAVX2 ? X86::VBROADCASTI128rm : X86::VBROADCASTF128rm, 1 , 128 ,
460
479
rebuildSplatCst},
461
480
{HasAVX2 ? X86::VPMOVSXBWYrm : 0 , 16 , 8 , rebuildSExtCst},
481
+ {HasAVX2 ? X86::VPMOVZXBWYrm : 0 , 16 , 8 , rebuildZExtCst},
462
482
{HasAVX2 ? X86::VPMOVSXWDYrm : 0 , 8 , 16 , rebuildSExtCst},
463
- {HasAVX2 ? X86::VPMOVSXDQYrm : 0 , 4 , 32 , rebuildSExtCst}};
483
+ {HasAVX2 ? X86::VPMOVZXWDYrm : 0 , 8 , 16 , rebuildZExtCst},
484
+ {HasAVX2 ? X86::VPMOVSXDQYrm : 0 , 4 , 32 , rebuildSExtCst},
485
+ {HasAVX2 ? X86::VPMOVZXDQYrm : 0 , 4 , 32 , rebuildZExtCst}};
464
486
return FixupConstant (Fixups, 1 );
465
487
}
466
488
case X86::VMOVDQA32Z128rm:
@@ -471,15 +493,21 @@ bool X86FixupVectorConstantsPass::processInstruction(MachineFunction &MF,
471
493
{HasBWI ? X86::VPBROADCASTBZ128rm : 0 , 1 , 8 , rebuildSplatCst},
472
494
{HasBWI ? X86::VPBROADCASTWZ128rm : 0 , 1 , 16 , rebuildSplatCst},
473
495
{X86::VPMOVSXBQZ128rm, 2 , 8 , rebuildSExtCst},
496
+ {X86::VPMOVZXBQZ128rm, 2 , 8 , rebuildZExtCst},
474
497
{X86::VMOVDI2PDIZrm, 1 , 32 , rebuildZeroUpperCst},
475
498
{X86::VPBROADCASTDZ128rm, 1 , 32 , rebuildSplatCst},
476
499
{X86::VPMOVSXBDZ128rm, 4 , 8 , rebuildSExtCst},
500
+ {X86::VPMOVZXBDZ128rm, 4 , 8 , rebuildZExtCst},
477
501
{X86::VPMOVSXWQZ128rm, 2 , 16 , rebuildSExtCst},
502
+ {X86::VPMOVZXWQZ128rm, 2 , 16 , rebuildZExtCst},
478
503
{X86::VMOVQI2PQIZrm, 1 , 64 , rebuildZeroUpperCst},
479
504
{X86::VPBROADCASTQZ128rm, 1 , 64 , rebuildSplatCst},
480
505
{HasBWI ? X86::VPMOVSXBWZ128rm : 0 , 8 , 8 , rebuildSExtCst},
506
+ {HasBWI ? X86::VPMOVZXBWZ128rm : 0 , 8 , 8 , rebuildZExtCst},
481
507
{X86::VPMOVSXWDZ128rm, 4 , 16 , rebuildSExtCst},
482
- {X86::VPMOVSXDQZ128rm, 2 , 32 , rebuildSExtCst}};
508
+ {X86::VPMOVZXWDZ128rm, 4 , 16 , rebuildZExtCst},
509
+ {X86::VPMOVSXDQZ128rm, 2 , 32 , rebuildSExtCst},
510
+ {X86::VPMOVZXDQZ128rm, 2 , 32 , rebuildZExtCst}};
483
511
return FixupConstant (Fixups, 1 );
484
512
}
485
513
case X86::VMOVDQA32Z256rm:
@@ -491,13 +519,19 @@ bool X86FixupVectorConstantsPass::processInstruction(MachineFunction &MF,
491
519
{HasBWI ? X86::VPBROADCASTWZ256rm : 0 , 1 , 16 , rebuildSplatCst},
492
520
{X86::VPBROADCASTDZ256rm, 1 , 32 , rebuildSplatCst},
493
521
{X86::VPMOVSXBQZ256rm, 4 , 8 , rebuildSExtCst},
522
+ {X86::VPMOVZXBQZ256rm, 4 , 8 , rebuildZExtCst},
494
523
{X86::VPBROADCASTQZ256rm, 1 , 64 , rebuildSplatCst},
495
524
{X86::VPMOVSXBDZ256rm, 8 , 8 , rebuildSExtCst},
525
+ {X86::VPMOVZXBDZ256rm, 8 , 8 , rebuildZExtCst},
496
526
{X86::VPMOVSXWQZ256rm, 4 , 16 , rebuildSExtCst},
527
+ {X86::VPMOVZXWQZ256rm, 4 , 16 , rebuildZExtCst},
497
528
{X86::VBROADCASTI32X4Z256rm, 1 , 128 , rebuildSplatCst},
498
529
{HasBWI ? X86::VPMOVSXBWZ256rm : 0 , 16 , 8 , rebuildSExtCst},
530
+ {HasBWI ? X86::VPMOVZXBWZ256rm : 0 , 16 , 8 , rebuildZExtCst},
499
531
{X86::VPMOVSXWDZ256rm, 8 , 16 , rebuildSExtCst},
500
- {X86::VPMOVSXDQZ256rm, 4 , 32 , rebuildSExtCst}};
532
+ {X86::VPMOVZXWDZ256rm, 8 , 16 , rebuildZExtCst},
533
+ {X86::VPMOVSXDQZ256rm, 4 , 32 , rebuildSExtCst},
534
+ {X86::VPMOVZXDQZ256rm, 4 , 32 , rebuildZExtCst}};
501
535
return FixupConstant (Fixups, 1 );
502
536
}
503
537
case X86::VMOVDQA32Zrm:
@@ -510,13 +544,19 @@ bool X86FixupVectorConstantsPass::processInstruction(MachineFunction &MF,
510
544
{X86::VPBROADCASTDZrm, 1 , 32 , rebuildSplatCst},
511
545
{X86::VPBROADCASTQZrm, 1 , 64 , rebuildSplatCst},
512
546
{X86::VPMOVSXBQZrm, 8 , 8 , rebuildSExtCst},
547
+ {X86::VPMOVZXBQZrm, 8 , 8 , rebuildZExtCst},
513
548
{X86::VBROADCASTI32X4rm, 1 , 128 , rebuildSplatCst},
514
549
{X86::VPMOVSXBDZrm, 16 , 8 , rebuildSExtCst},
550
+ {X86::VPMOVZXBDZrm, 16 , 8 , rebuildZExtCst},
515
551
{X86::VPMOVSXWQZrm, 8 , 16 , rebuildSExtCst},
552
+ {X86::VPMOVZXWQZrm, 8 , 16 , rebuildZExtCst},
516
553
{X86::VBROADCASTI64X4rm, 1 , 256 , rebuildSplatCst},
517
554
{HasBWI ? X86::VPMOVSXBWZrm : 0 , 32 , 8 , rebuildSExtCst},
555
+ {HasBWI ? X86::VPMOVZXBWZrm : 0 , 32 , 8 , rebuildZExtCst},
518
556
{X86::VPMOVSXWDZrm, 16 , 16 , rebuildSExtCst},
519
- {X86::VPMOVSXDQZrm, 8 , 32 , rebuildSExtCst}};
557
+ {X86::VPMOVZXWDZrm, 16 , 16 , rebuildZExtCst},
558
+ {X86::VPMOVSXDQZrm, 8 , 32 , rebuildSExtCst},
559
+ {X86::VPMOVZXDQZrm, 8 , 32 , rebuildZExtCst}};
520
560
return FixupConstant (Fixups, 1 );
521
561
}
522
562
}
0 commit comments