llvm-project/llvm/lib/Transforms/IPO
Nikita Popov 412141663c Reapply [FunctionAttrs] Infer precise FMRB
The previous version of the patch would incorrect convert an
existing argmemonly attribute into an inaccessiblemem_or_argmemonly
attribute.

-----

This updates checkFunctionMemoryAccess() to infer a precise
FunctionModRefBehavior, rather than an approximation split into
read/write and argmemonly.

Afterwards, we still map this back to imprecise function attributes.
This still allows us to infer some cases that we previously did not
handle, namely inaccessiblememonly and inaccessiblemem_or_argmemonly.
In practice, this means we get better memory attributes in the
presence of intrinsics like @llvm.assume.

Differential Revision: https://reviews.llvm.org/D134527
2022-09-29 14:02:15 +02:00
..
AlwaysInliner.cpp [IPO] Reorder parameters of InlineFunction (NFC) 2022-09-20 09:09:38 -07:00
Annotation2Metadata.cpp
ArgumentPromotion.cpp [ArgPromotion] Transfer metadata nontemporal to promoted loads 2022-07-26 16:30:08 +08:00
Attributor.cpp Revert "[Attributor] AAPointerInfo should allow "harmless" uses" 2022-09-11 21:37:54 -07:00
AttributorAttributes.cpp [AAPointerInfo] OffsetInfo: Unassigned is distinct from Unknown 2022-09-28 20:31:36 +05:30
BarrierNoopPass.cpp
BlockExtractor.cpp [Transforms] Qualify auto in range-based for loops (NFC) 2022-08-27 21:21:02 -07:00
CMakeLists.txt [NFC][2/n] Remove PrunePH pass 2022-09-26 18:38:04 -07:00
CalledValuePropagation.cpp [IPO] Use default member initialization (NFC) 2022-06-18 12:17:09 -07:00
ConstantMerge.cpp [llvm] Qualify auto (NFC) 2022-08-07 23:55:27 -07:00
CrossDSOCFI.cpp [Transforms] Qualify auto in range-based for loops (NFC) 2022-08-27 21:21:02 -07:00
DeadArgumentElimination.cpp [DeadArgElim] Use structure bindings in foreach loops. NFC 2022-09-01 13:48:46 +03:00
ElimAvailExtern.cpp
ExtractGV.cpp Cleanup includes: Transforms/IPO 2022-03-22 10:06:28 +01:00
ForceFunctionAttrs.cpp Cleanup includes: final pass 2022-03-29 09:00:21 +02:00
FunctionAttrs.cpp Reapply [FunctionAttrs] Infer precise FMRB 2022-09-29 14:02:15 +02:00
FunctionImport.cpp [llvm] Qualify auto (NFC) 2022-08-07 23:55:27 -07:00
FunctionSpecialization.cpp [TTI] NFC: Reduce InstructionCost::getValue() usage... 2022-08-26 16:37:32 +03:00
GlobalDCE.cpp [Transforms] Qualify auto in range-based for loops (NFC) 2022-08-27 21:21:02 -07:00
GlobalOpt.cpp [GlobalOpt] Fix debug variance problem in hasOnlyColdCalls 2022-09-02 12:29:44 +02:00
GlobalSplit.cpp [NFC] Switch a few uses of undef to poison as placeholders for unreachble code 2022-06-30 23:01:43 +01:00
HotColdSplitting.cpp Add !nosanitize to FixedMetadataKinds 2022-05-27 09:46:13 +08:00
IPO.cpp [NFC][2/n] Remove PrunePH pass 2022-09-26 18:38:04 -07:00
IROutliner.cpp Remove redundant initialization of Optional (NFC) 2022-08-20 21:18:28 -07:00
InferFunctionAttrs.cpp Reapply "[BuildLibCalls] Introduce getOrInsertLibFunc() for use when building 2022-05-02 19:37:00 +02:00
InlineSimple.cpp Cleanup includes: Transforms/IPO 2022-03-22 10:06:28 +01:00
Inliner.cpp [IPO] Reorder parameters of InlineFunction (NFC) 2022-09-20 09:09:38 -07:00
Internalize.cpp [Internalize] Support glob patterns for API lists 2022-07-22 08:24:32 -04:00
LoopExtractor.cpp Cleanup includes: Transforms/IPO 2022-03-22 10:06:28 +01:00
LowerTypeTests.cpp [Transform] Use range-based for loops (NFC) 2022-08-27 23:54:32 -07:00
MergeFunctions.cpp [NFC] Switch a few uses of undef to poison as placeholders for unreachble code 2022-07-03 14:34:03 +01:00
ModuleInliner.cpp [IPO] Reorder parameters of InlineFunction (NFC) 2022-09-20 09:09:38 -07:00
OpenMPOpt.cpp Revert "[OpenMP] Codegen aggregate for outlined function captures" 2022-09-15 03:08:46 +00:00
PartialInlining.cpp [IPO] Reorder parameters of InlineFunction (NFC) 2022-09-20 09:09:38 -07:00
PassManagerBuilder.cpp [NFC][2/n] Remove PrunePH pass 2022-09-26 18:38:04 -07:00
SCCP.cpp [llvm] Remove redundaunt virtual specifiers (NFC) 2022-07-24 21:50:35 -07:00
SampleContextTracker.cpp [llvm] Qualify auto (NFC) 2022-08-07 23:55:27 -07:00
SampleProfile.cpp [IPO] Reorder parameters of InlineFunction (NFC) 2022-09-20 09:09:38 -07:00
SampleProfileProbe.cpp [llvm] Use value_or instead of getValueOr (NFC) 2022-06-18 23:07:11 -07:00
StripDeadPrototypes.cpp
StripSymbols.cpp [StripDeadDebugInfo] Drop dead CUs 2022-09-11 01:31:03 -07:00
SyntheticCountsPropagation.cpp Remove redundant initialization of Optional (NFC) 2022-08-20 21:18:28 -07:00
ThinLTOBitcodeWriter.cpp [AA] Tracking per-location ModRef info in FunctionModRefBehavior (NFCI) 2022-09-14 16:34:41 +02:00
WholeProgramDevirt.cpp [WPD/LTT] Lower type test feeding assumes via phi correctly 2022-09-16 13:50:01 -07:00