@@ -642,8 +642,8 @@ Optional<bool> compareFnAttributes(const CodeGenIntrinsic *L,
642
642
return R->hasSideEffects;
643
643
644
644
// Try to order by readonly/readnone attribute.
645
- CodeGenIntrinsic::ModRefBehavior LK = L->ModRef ;
646
- CodeGenIntrinsic::ModRefBehavior RK = R->ModRef ;
645
+ uint32_t LK = L->ME.toIntValue() ;
646
+ uint32_t RK = R->ME.toIntValue() ;
647
647
if (LK != RK) return (LK > RK);
648
648
649
649
return None;
@@ -772,60 +772,13 @@ void IntrinsicEmitter::EmitAttributes(const CodeGenIntrinsicTable &Ints,
772
772
if (Intrinsic.isSpeculatable)
773
773
OS << " Attribute::get(C, Attribute::Speculatable),\n";
774
774
775
- switch (Intrinsic.ModRef) {
776
- case CodeGenIntrinsic::NoMem:
777
- if (Intrinsic.hasSideEffects)
778
- break;
775
+ MemoryEffects ME = Intrinsic.ME;
776
+ // TODO: IntrHasSideEffects should affect not only readnone intrinsics.
777
+ if (ME.doesNotAccessMemory() && Intrinsic.hasSideEffects)
778
+ ME = MemoryEffects::unknown();
779
+ if (ME != MemoryEffects::unknown()) {
779
780
OS << " Attribute::getWithMemoryEffects(C, "
780
- << "MemoryEffects::none()),\n";
781
- break;
782
- case CodeGenIntrinsic::ReadArgMem:
783
- OS << " Attribute::getWithMemoryEffects(C, "
784
- << "MemoryEffects::argMemOnly(ModRefInfo::Ref)),\n";
785
- break;
786
- case CodeGenIntrinsic::ReadMem:
787
- OS << " Attribute::getWithMemoryEffects(C, "
788
- << "MemoryEffects::readOnly()),\n";
789
- break;
790
- case CodeGenIntrinsic::ReadInaccessibleMem:
791
- OS << " Attribute::getWithMemoryEffects(C, "
792
- << "MemoryEffects::inaccessibleMemOnly(ModRefInfo::Ref)),\n";
793
- break;
794
- case CodeGenIntrinsic::ReadInaccessibleMemOrArgMem:
795
- OS << " Attribute::getWithMemoryEffects(C, "
796
- << "MemoryEffects::inaccessibleOrArgMemOnly(ModRefInfo::Ref)),\n";
797
- break;
798
- break;
799
- case CodeGenIntrinsic::WriteArgMem:
800
- OS << " Attribute::getWithMemoryEffects(C, "
801
- << "MemoryEffects::argMemOnly(ModRefInfo::Mod)),\n";
802
- break;
803
- case CodeGenIntrinsic::WriteMem:
804
- OS << " Attribute::getWithMemoryEffects(C, "
805
- << "MemoryEffects::writeOnly()),\n";
806
- break;
807
- case CodeGenIntrinsic::WriteInaccessibleMem:
808
- OS << " Attribute::getWithMemoryEffects(C, "
809
- << "MemoryEffects::inaccessibleMemOnly(ModRefInfo::Mod)),\n";
810
- break;
811
- case CodeGenIntrinsic::WriteInaccessibleMemOrArgMem:
812
- OS << " Attribute::getWithMemoryEffects(C, "
813
- << "MemoryEffects::inaccessibleOrArgMemOnly(ModRefInfo::Mod)),\n";
814
- break;
815
- case CodeGenIntrinsic::ReadWriteArgMem:
816
- OS << " Attribute::getWithMemoryEffects(C, "
817
- << "MemoryEffects::argMemOnly(ModRefInfo::ModRef)),\n";
818
- break;
819
- case CodeGenIntrinsic::ReadWriteInaccessibleMem:
820
- OS << " Attribute::getWithMemoryEffects(C, "
821
- << "MemoryEffects::inaccessibleMemOnly(ModRefInfo::ModRef)),\n";
822
- break;
823
- case CodeGenIntrinsic::ReadWriteInaccessibleMemOrArgMem:
824
- OS << " Attribute::getWithMemoryEffects(C, "
825
- << "MemoryEffects::inaccessibleOrArgMemOnly(ModRefInfo::ModRef)),\n";
826
- break;
827
- case CodeGenIntrinsic::ReadWriteMem:
828
- break;
781
+ << "MemoryEffects::createFromIntValue(" << ME.toIntValue() << ")),\n";
829
782
}
830
783
OS << " });\n";
831
784
}
@@ -885,7 +838,7 @@ void IntrinsicEmitter::EmitAttributes(const CodeGenIntrinsicTable &Ints,
885
838
}
886
839
887
840
if (!Intrinsic.canThrow ||
888
- (Intrinsic.ModRef != CodeGenIntrinsic::ReadWriteMem &&
841
+ (Intrinsic.ME != MemoryEffects::unknown() &&
889
842
!Intrinsic.hasSideEffects) ||
890
843
Intrinsic.isNoReturn || Intrinsic.isNoCallback || Intrinsic.isNoSync ||
891
844
Intrinsic.isNoFree || Intrinsic.isWillReturn || Intrinsic.isCold ||
0 commit comments