@@ -432,44 +432,23 @@ bool MipsExpandPseudo::expandAtomicBinOpSubword(
432
432
Register OldVal = I->getOperand (6 ).getReg ();
433
433
Register BinOpRes = I->getOperand (7 ).getReg ();
434
434
Register StoreVal = I->getOperand (8 ).getReg ();
435
- bool NoMovnInstr = (IsMin || IsMax) && !STI->hasMips4 () && !STI->hasMips32 ();
436
435
437
436
const BasicBlock *LLVM_BB = BB.getBasicBlock ();
438
437
MachineBasicBlock *loopMBB = MF->CreateMachineBasicBlock (LLVM_BB);
439
- MachineBasicBlock *loop1MBB;
440
- MachineBasicBlock *loop2MBB;
441
- if (NoMovnInstr) {
442
- loop1MBB = MF->CreateMachineBasicBlock (LLVM_BB);
443
- loop2MBB = MF->CreateMachineBasicBlock (LLVM_BB);
444
- }
445
438
MachineBasicBlock *sinkMBB = MF->CreateMachineBasicBlock (LLVM_BB);
446
439
MachineBasicBlock *exitMBB = MF->CreateMachineBasicBlock (LLVM_BB);
447
440
MachineFunction::iterator It = ++BB.getIterator ();
448
441
MF->insert (It, loopMBB);
449
- if (NoMovnInstr) {
450
- MF->insert (It, loop1MBB);
451
- MF->insert (It, loop2MBB);
452
- }
453
442
MF->insert (It, sinkMBB);
454
443
MF->insert (It, exitMBB);
455
444
456
445
exitMBB->splice (exitMBB->begin (), &BB, std::next (I), BB.end ());
457
446
exitMBB->transferSuccessorsAndUpdatePHIs (&BB);
458
447
459
448
BB.addSuccessor (loopMBB, BranchProbability::getOne ());
460
- if (NoMovnInstr) {
461
- loopMBB->addSuccessor (loop1MBB);
462
- loopMBB->addSuccessor (loop2MBB);
463
- } else {
464
- loopMBB->addSuccessor (sinkMBB);
465
- loopMBB->addSuccessor (loopMBB);
466
- }
449
+ loopMBB->addSuccessor (sinkMBB);
450
+ loopMBB->addSuccessor (loopMBB);
467
451
loopMBB->normalizeSuccProbs ();
468
- if (NoMovnInstr) {
469
- loop1MBB->addSuccessor (loop2MBB);
470
- loop2MBB->addSuccessor (loopMBB);
471
- loop2MBB->addSuccessor (exitMBB, BranchProbability::getOne ());
472
- }
473
452
474
453
BuildMI (loopMBB, DL, TII->get (LL), OldVal).addReg (Ptr).addImm (0 );
475
454
if (IsNand) {
@@ -546,7 +525,7 @@ bool MipsExpandPseudo::expandAtomicBinOpSubword(
546
525
BuildMI (loopMBB, DL, TII->get (OR), BinOpRes)
547
526
.addReg (BinOpRes)
548
527
.addReg (Scratch4);
549
- } else if (STI-> hasMips4 () || STI-> hasMips32 ()) {
528
+ } else {
550
529
// max: move BinOpRes, StoreVal
551
530
// movn BinOpRes, Incr, Scratch4, BinOpRes
552
531
// min: move BinOpRes, StoreVal
@@ -558,59 +537,12 @@ bool MipsExpandPseudo::expandAtomicBinOpSubword(
558
537
.addReg (Incr)
559
538
.addReg (Scratch4)
560
539
.addReg (BinOpRes);
561
- } else {
562
- // if min:
563
- // loopMBB: move BinOpRes, StoreVal
564
- // beq Scratch4, 0, loop1MBB
565
- // j loop2MBB
566
- // loop1MBB: move BinOpRes, Incr
567
- // loop2MBB: and BinOpRes, BinOpRes, Mask
568
- // and StoreVal, OlddVal, Mask2
569
- // or StoreVal, StoreVal, BinOpRes
570
- // StoreVal<tied1> = sc StoreVal, 0(Ptr)
571
- // beq StoreVal, zero, loopMBB
572
- //
573
- // if max:
574
- // loopMBB: move BinOpRes, Incr
575
- // beq Scratch4, 0, loop1MBB
576
- // j loop2MBB
577
- // loop1MBB: move BinOpRes, StoreVal
578
- // loop2MBB: and BinOpRes, BinOpRes, Mask
579
- // and StoreVal, OlddVal, Mask2
580
- // or StoreVal, StoreVal, BinOpRes
581
- // StoreVal<tied1> = sc StoreVal, 0(Ptr)
582
- // beq StoreVal, zero, loopMBB
583
- if (IsMin) {
584
- BuildMI (loopMBB, DL, TII->get (OR), BinOpRes)
585
- .addReg (StoreVal)
586
- .addReg (Mips::ZERO);
587
- BuildMI (loop1MBB, DL, TII->get (OR), BinOpRes)
588
- .addReg (Incr)
589
- .addReg (Mips::ZERO);
590
- } else {
591
- BuildMI (loopMBB, DL, TII->get (OR), BinOpRes)
592
- .addReg (Incr)
593
- .addReg (Mips::ZERO);
594
- BuildMI (loop1MBB, DL, TII->get (OR), BinOpRes)
595
- .addReg (StoreVal)
596
- .addReg (Mips::ZERO);
597
- }
598
- BuildMI (loopMBB, DL, TII->get (BEQ))
599
- .addReg (Scratch4)
600
- .addReg (Mips::ZERO)
601
- .addMBB (loop1MBB);
602
- BuildMI (loopMBB, DL, TII->get (Mips::B)).addMBB (loop2MBB);
603
540
}
604
541
605
542
// and BinOpRes, BinOpRes, Mask
606
- if (NoMovnInstr)
607
- BuildMI (loop2MBB, DL, TII->get (Mips::AND), BinOpRes)
608
- .addReg (BinOpRes)
609
- .addReg (Mask);
610
- else
611
- BuildMI (loopMBB, DL, TII->get (Mips::AND), BinOpRes)
612
- .addReg (BinOpRes)
613
- .addReg (Mask);
543
+ BuildMI (loopMBB, DL, TII->get (Mips::AND), BinOpRes)
544
+ .addReg (BinOpRes)
545
+ .addReg (Mask);
614
546
615
547
} else if (!IsSwap) {
616
548
// <binop> binopres, oldval, incr2
@@ -632,37 +564,14 @@ bool MipsExpandPseudo::expandAtomicBinOpSubword(
632
564
// or StoreVal, StoreVal, BinOpRes
633
565
// StoreVal<tied1> = sc StoreVal, 0(Ptr)
634
566
// beq StoreVal, zero, loopMBB
635
- if (NoMovnInstr) {
636
- BuildMI (loop2MBB, DL, TII->get (Mips::AND), StoreVal)
637
- .addReg (OldVal)
638
- .addReg (Mask2);
639
- BuildMI (loop2MBB, DL, TII->get (Mips::OR), StoreVal)
640
- .addReg (StoreVal)
641
- .addReg (BinOpRes);
642
- BuildMI (loop2MBB, DL, TII->get (SC), StoreVal)
643
- .addReg (StoreVal)
644
- .addReg (Ptr)
645
- .addImm (0 );
646
- BuildMI (loop2MBB, DL, TII->get (BEQ))
647
- .addReg (StoreVal)
648
- .addReg (Mips::ZERO)
649
- .addMBB (loopMBB);
650
- } else {
651
- BuildMI (loopMBB, DL, TII->get (Mips::AND), StoreVal)
652
- .addReg (OldVal)
653
- .addReg (Mask2);
654
- BuildMI (loopMBB, DL, TII->get (Mips::OR), StoreVal)
655
- .addReg (StoreVal)
656
- .addReg (BinOpRes);
657
- BuildMI (loopMBB, DL, TII->get (SC), StoreVal)
658
- .addReg (StoreVal)
659
- .addReg (Ptr)
660
- .addImm (0 );
661
- BuildMI (loopMBB, DL, TII->get (BEQ))
662
- .addReg (StoreVal)
663
- .addReg (Mips::ZERO)
664
- .addMBB (loopMBB);
665
- }
567
+ BuildMI (loopMBB, DL, TII->get (Mips::AND), StoreVal)
568
+ .addReg (OldVal).addReg (Mask2);
569
+ BuildMI (loopMBB, DL, TII->get (Mips::OR), StoreVal)
570
+ .addReg (StoreVal).addReg (BinOpRes);
571
+ BuildMI (loopMBB, DL, TII->get (SC), StoreVal)
572
+ .addReg (StoreVal).addReg (Ptr).addImm (0 );
573
+ BuildMI (loopMBB, DL, TII->get (BEQ))
574
+ .addReg (StoreVal).addReg (Mips::ZERO).addMBB (loopMBB);
666
575
667
576
// sinkMBB:
668
577
// and maskedoldval1,oldval,mask
@@ -691,10 +600,6 @@ bool MipsExpandPseudo::expandAtomicBinOpSubword(
691
600
692
601
LivePhysRegs LiveRegs;
693
602
computeAndAddLiveIns (LiveRegs, *loopMBB);
694
- if (NoMovnInstr) {
695
- computeAndAddLiveIns (LiveRegs, *loop1MBB);
696
- computeAndAddLiveIns (LiveRegs, *loop2MBB);
697
- }
698
603
computeAndAddLiveIns (LiveRegs, *sinkMBB);
699
604
computeAndAddLiveIns (LiveRegs, *exitMBB);
700
605
@@ -841,41 +746,20 @@ bool MipsExpandPseudo::expandAtomicBinOp(MachineBasicBlock &BB,
841
746
llvm_unreachable (" Unknown pseudo atomic!" );
842
747
}
843
748
844
- bool NoMovnInstr = (IsMin || IsMax) && !STI->hasMips4 () && !STI->hasMips32 ();
845
749
const BasicBlock *LLVM_BB = BB.getBasicBlock ();
846
750
MachineBasicBlock *loopMBB = MF->CreateMachineBasicBlock (LLVM_BB);
847
- MachineBasicBlock *loop1MBB;
848
- MachineBasicBlock *loop2MBB;
849
- if (NoMovnInstr) {
850
- loop1MBB = MF->CreateMachineBasicBlock (LLVM_BB);
851
- loop2MBB = MF->CreateMachineBasicBlock (LLVM_BB);
852
- }
853
751
MachineBasicBlock *exitMBB = MF->CreateMachineBasicBlock (LLVM_BB);
854
752
MachineFunction::iterator It = ++BB.getIterator ();
855
753
MF->insert (It, loopMBB);
856
- if (NoMovnInstr) {
857
- MF->insert (It, loop1MBB);
858
- MF->insert (It, loop2MBB);
859
- }
860
754
MF->insert (It, exitMBB);
861
755
862
756
exitMBB->splice (exitMBB->begin (), &BB, std::next (I), BB.end ());
863
757
exitMBB->transferSuccessorsAndUpdatePHIs (&BB);
864
758
865
759
BB.addSuccessor (loopMBB, BranchProbability::getOne ());
866
- if (NoMovnInstr) {
867
- loopMBB->addSuccessor (loop1MBB);
868
- loopMBB->addSuccessor (loop2MBB);
869
- } else {
870
- loopMBB->addSuccessor (exitMBB);
871
- loopMBB->addSuccessor (loopMBB);
872
- }
760
+ loopMBB->addSuccessor (exitMBB);
761
+ loopMBB->addSuccessor (loopMBB);
873
762
loopMBB->normalizeSuccProbs ();
874
- if (NoMovnInstr) {
875
- loop1MBB->addSuccessor (loop2MBB);
876
- loop2MBB->addSuccessor (loopMBB);
877
- loop2MBB->addSuccessor (exitMBB, BranchProbability::getOne ());
878
- }
879
763
880
764
BuildMI (loopMBB, DL, TII->get (LL), OldVal).addReg (Ptr).addImm (0 );
881
765
assert ((OldVal != Ptr) && " Clobbered the wrong ptr reg!" );
@@ -918,7 +802,7 @@ bool MipsExpandPseudo::expandAtomicBinOp(MachineBasicBlock &BB,
918
802
BuildMI (loopMBB, DL, TII->get (OR), Scratch)
919
803
.addReg (Scratch)
920
804
.addReg (Scratch2);
921
- } else if (STI-> hasMips4 () || STI-> hasMips32 ()) {
805
+ } else {
922
806
// max: move Scratch, OldVal
923
807
// movn Scratch, Incr, Scratch2, Scratch
924
808
// min: move Scratch, OldVal
@@ -930,38 +814,6 @@ bool MipsExpandPseudo::expandAtomicBinOp(MachineBasicBlock &BB,
930
814
.addReg (Incr)
931
815
.addReg (Scratch2)
932
816
.addReg (Scratch);
933
- } else {
934
- // if min:
935
- // loopMBB: move Scratch, OldVal
936
- // beq Scratch2_32, 0, loop1MBB
937
- // j loop2MBB
938
- // loop1MBB: move Scratch, Incr
939
- // loop2MBB: sc $2, 0($4)
940
- // beqz $2, $BB0_1
941
- // nop
942
- //
943
- // if max:
944
- // loopMBB: move Scratch, Incr
945
- // beq Scratch2_32, 0, loop1MBB
946
- // j loop2MBB
947
- // loop1MBB: move Scratch, OldVal
948
- // loop2MBB: sc $2, 0($4)
949
- // beqz $2, $BB0_1
950
- // nop
951
- if (IsMin) {
952
- BuildMI (loopMBB, DL, TII->get (OR), Scratch).addReg (OldVal).addReg (ZERO);
953
- BuildMI (loop1MBB, DL, TII->get (OR), Scratch).addReg (Incr).addReg (ZERO);
954
- } else {
955
- BuildMI (loopMBB, DL, TII->get (OR), Scratch).addReg (Incr).addReg (ZERO);
956
- BuildMI (loop1MBB, DL, TII->get (OR), Scratch)
957
- .addReg (OldVal)
958
- .addReg (ZERO);
959
- }
960
- BuildMI (loopMBB, DL, TII->get (BEQ))
961
- .addReg (Scratch2_32)
962
- .addReg (ZERO)
963
- .addMBB (loop1MBB);
964
- BuildMI (loopMBB, DL, TII->get (Mips::B)).addMBB (loop2MBB);
965
817
}
966
818
967
819
} else if (Opcode) {
@@ -977,35 +829,20 @@ bool MipsExpandPseudo::expandAtomicBinOp(MachineBasicBlock &BB,
977
829
BuildMI (loopMBB, DL, TII->get (OR), Scratch).addReg (Incr).addReg (ZERO);
978
830
}
979
831
980
- if (NoMovnInstr) {
981
- BuildMI (loop2MBB, DL, TII->get (SC), Scratch)
982
- .addReg (Scratch)
983
- .addReg (Ptr)
984
- .addImm (0 );
985
- BuildMI (loop2MBB, DL, TII->get (BEQ))
986
- .addReg (Scratch)
987
- .addReg (ZERO)
988
- .addMBB (loopMBB);
989
- } else {
990
- BuildMI (loopMBB, DL, TII->get (SC), Scratch)
991
- .addReg (Scratch)
992
- .addReg (Ptr)
993
- .addImm (0 );
994
- BuildMI (loopMBB, DL, TII->get (BEQ))
995
- .addReg (Scratch)
996
- .addReg (ZERO)
997
- .addMBB (loopMBB);
998
- }
832
+ BuildMI (loopMBB, DL, TII->get (SC), Scratch)
833
+ .addReg (Scratch)
834
+ .addReg (Ptr)
835
+ .addImm (0 );
836
+ BuildMI (loopMBB, DL, TII->get (BEQ))
837
+ .addReg (Scratch)
838
+ .addReg (ZERO)
839
+ .addMBB (loopMBB);
999
840
1000
841
NMBBI = BB.end ();
1001
842
I->eraseFromParent ();
1002
843
1003
844
LivePhysRegs LiveRegs;
1004
845
computeAndAddLiveIns (LiveRegs, *loopMBB);
1005
- if (!STI->hasMips4 () && !STI->hasMips32 ()) {
1006
- computeAndAddLiveIns (LiveRegs, *loop1MBB);
1007
- computeAndAddLiveIns (LiveRegs, *loop2MBB);
1008
- }
1009
846
computeAndAddLiveIns (LiveRegs, *exitMBB);
1010
847
1011
848
return true ;
0 commit comments