@@ -711,6 +711,7 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
711
711
}
712
712
auto &TII = *MI.getMF ()->getSubtarget ().getInstrInfo ();
713
713
// Make the original instruction a trunc now, and update its source.
714
+ Observer.changingInstr (MI);
714
715
MI.setDesc (TII.get (TargetOpcode::G_TRUNC));
715
716
MI.getOperand (1 ).setReg (MIBNewOp->getOperand (0 ).getReg ());
716
717
Observer.changedInstr (MI);
@@ -726,13 +727,15 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
726
727
// Perform operation at larger width (any extension is fine here, high bits
727
728
// don't affect the result) and then truncate the result back to the
728
729
// original type.
730
+ Observer.changingInstr (MI);
729
731
widenScalarSrc (MI, WideTy, 1 , TargetOpcode::G_ANYEXT);
730
732
widenScalarSrc (MI, WideTy, 2 , TargetOpcode::G_ANYEXT);
731
733
widenScalarDst (MI, WideTy);
732
734
Observer.changedInstr (MI);
733
735
return Legalized;
734
736
735
737
case TargetOpcode::G_SHL:
738
+ Observer.changingInstr (MI);
736
739
widenScalarSrc (MI, WideTy, 1 , TargetOpcode::G_ANYEXT);
737
740
// The "number of bits to shift" operand must preserve its value as an
738
741
// unsigned integer:
@@ -743,13 +746,15 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
743
746
744
747
case TargetOpcode::G_SDIV:
745
748
case TargetOpcode::G_SREM:
749
+ Observer.changingInstr (MI);
746
750
widenScalarSrc (MI, WideTy, 1 , TargetOpcode::G_SEXT);
747
751
widenScalarSrc (MI, WideTy, 2 , TargetOpcode::G_SEXT);
748
752
widenScalarDst (MI, WideTy);
749
753
Observer.changedInstr (MI);
750
754
return Legalized;
751
755
752
756
case TargetOpcode::G_ASHR:
757
+ Observer.changingInstr (MI);
753
758
widenScalarSrc (MI, WideTy, 1 , TargetOpcode::G_SEXT);
754
759
// The "number of bits to shift" operand must preserve its value as an
755
760
// unsigned integer:
@@ -761,6 +766,7 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
761
766
case TargetOpcode::G_UDIV:
762
767
case TargetOpcode::G_UREM:
763
768
case TargetOpcode::G_LSHR:
769
+ Observer.changingInstr (MI);
764
770
widenScalarSrc (MI, WideTy, 1 , TargetOpcode::G_ZEXT);
765
771
widenScalarSrc (MI, WideTy, 2 , TargetOpcode::G_ZEXT);
766
772
widenScalarDst (MI, WideTy);
@@ -773,6 +779,7 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
773
779
// Perform operation at larger width (any extension is fine here, high bits
774
780
// don't affect the result) and then truncate the result back to the
775
781
// original type.
782
+ Observer.changingInstr (MI);
776
783
widenScalarSrc (MI, WideTy, 2 , TargetOpcode::G_ANYEXT);
777
784
widenScalarSrc (MI, WideTy, 3 , TargetOpcode::G_ANYEXT);
778
785
widenScalarDst (MI, WideTy);
@@ -783,27 +790,31 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
783
790
case TargetOpcode::G_FPTOUI:
784
791
if (TypeIdx != 0 )
785
792
return UnableToLegalize;
793
+ Observer.changingInstr (MI);
786
794
widenScalarDst (MI, WideTy);
787
795
Observer.changedInstr (MI);
788
796
return Legalized;
789
797
790
798
case TargetOpcode::G_SITOFP:
791
799
if (TypeIdx != 1 )
792
800
return UnableToLegalize;
801
+ Observer.changingInstr (MI);
793
802
widenScalarSrc (MI, WideTy, 1 , TargetOpcode::G_SEXT);
794
803
Observer.changedInstr (MI);
795
804
return Legalized;
796
805
797
806
case TargetOpcode::G_UITOFP:
798
807
if (TypeIdx != 1 )
799
808
return UnableToLegalize;
809
+ Observer.changingInstr (MI);
800
810
widenScalarSrc (MI, WideTy, 1 , TargetOpcode::G_ZEXT);
801
811
Observer.changedInstr (MI);
802
812
return Legalized;
803
813
804
814
case TargetOpcode::G_INSERT:
805
815
if (TypeIdx != 0 )
806
816
return UnableToLegalize;
817
+ Observer.changingInstr (MI);
807
818
widenScalarSrc (MI, WideTy, 1 , TargetOpcode::G_ANYEXT);
808
819
widenScalarDst (MI, WideTy);
809
820
Observer.changedInstr (MI);
@@ -819,6 +830,7 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
819
830
LLVM_FALLTHROUGH;
820
831
case TargetOpcode::G_SEXTLOAD:
821
832
case TargetOpcode::G_ZEXTLOAD:
833
+ Observer.changingInstr (MI);
822
834
widenScalarDst (MI, WideTy);
823
835
Observer.changedInstr (MI);
824
836
return Legalized;
@@ -828,6 +840,7 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
828
840
WideTy != LLT::scalar (8 ))
829
841
return UnableToLegalize;
830
842
843
+ Observer.changingInstr (MI);
831
844
widenScalarSrc (MI, WideTy, 0 , TargetOpcode::G_ZEXT);
832
845
Observer.changedInstr (MI);
833
846
return Legalized;
@@ -836,6 +849,7 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
836
849
MachineOperand &SrcMO = MI.getOperand (1 );
837
850
LLVMContext &Ctx = MIRBuilder.getMF ().getFunction ().getContext ();
838
851
const APInt &Val = SrcMO.getCImm ()->getValue ().sext (WideTy.getSizeInBits ());
852
+ Observer.changingInstr (MI);
839
853
SrcMO.setCImm (ConstantInt::get (Ctx, Val));
840
854
841
855
widenScalarDst (MI, WideTy);
@@ -857,18 +871,21 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
857
871
default :
858
872
llvm_unreachable (" Unhandled fp widen type" );
859
873
}
874
+ Observer.changingInstr (MI);
860
875
SrcMO.setFPImm (ConstantFP::get (Ctx, Val));
861
876
862
877
widenScalarDst (MI, WideTy, 0 , TargetOpcode::G_FPTRUNC);
863
878
Observer.changedInstr (MI);
864
879
return Legalized;
865
880
}
866
881
case TargetOpcode::G_BRCOND:
882
+ Observer.changingInstr (MI);
867
883
widenScalarSrc (MI, WideTy, 0 , TargetOpcode::G_ANYEXT);
868
884
Observer.changedInstr (MI);
869
885
return Legalized;
870
886
871
887
case TargetOpcode::G_FCMP:
888
+ Observer.changingInstr (MI);
872
889
if (TypeIdx == 0 )
873
890
widenScalarDst (MI, WideTy);
874
891
else {
@@ -879,6 +896,7 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
879
896
return Legalized;
880
897
881
898
case TargetOpcode::G_ICMP:
899
+ Observer.changingInstr (MI);
882
900
if (TypeIdx == 0 )
883
901
widenScalarDst (MI, WideTy);
884
902
else {
@@ -894,13 +912,15 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
894
912
895
913
case TargetOpcode::G_GEP:
896
914
assert (TypeIdx == 1 && " unable to legalize pointer of GEP" );
915
+ Observer.changingInstr (MI);
897
916
widenScalarSrc (MI, WideTy, 2 , TargetOpcode::G_SEXT);
898
917
Observer.changedInstr (MI);
899
918
return Legalized;
900
919
901
920
case TargetOpcode::G_PHI: {
902
921
assert (TypeIdx == 0 && " Expecting only Idx 0" );
903
922
923
+ Observer.changingInstr (MI);
904
924
for (unsigned I = 1 ; I < MI.getNumOperands (); I += 2 ) {
905
925
MachineBasicBlock &OpMBB = *MI.getOperand (I + 1 ).getMBB ();
906
926
MIRBuilder.setInsertPt (OpMBB, OpMBB.getFirstTerminator ());
@@ -916,6 +936,7 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
916
936
case TargetOpcode::G_EXTRACT_VECTOR_ELT:
917
937
if (TypeIdx != 2 )
918
938
return UnableToLegalize;
939
+ Observer.changingInstr (MI);
919
940
widenScalarSrc (MI, WideTy, 2 , TargetOpcode::G_SEXT);
920
941
Observer.changedInstr (MI);
921
942
return Legalized;
@@ -1152,6 +1173,7 @@ LegalizerHelper::lowerBitCount(MachineInstr &MI, unsigned TypeIdx, LLT Ty) {
1152
1173
return UnableToLegalize;
1153
1174
case TargetOpcode::G_CTLZ_ZERO_UNDEF: {
1154
1175
// This trivially expands to CTLZ.
1176
+ Observer.changingInstr (MI);
1155
1177
MI.setDesc (TII.get (TargetOpcode::G_CTLZ));
1156
1178
Observer.changedInstr (MI);
1157
1179
return Legalized;
@@ -1201,6 +1223,7 @@ LegalizerHelper::lowerBitCount(MachineInstr &MI, unsigned TypeIdx, LLT Ty) {
1201
1223
}
1202
1224
case TargetOpcode::G_CTTZ_ZERO_UNDEF: {
1203
1225
// This trivially expands to CTTZ.
1226
+ Observer.changingInstr (MI);
1204
1227
MI.setDesc (TII.get (TargetOpcode::G_CTTZ));
1205
1228
Observer.changedInstr (MI);
1206
1229
return Legalized;
0 commit comments