forked from OSchip/llvm-project
4ec55f8ab6
This reverts commit r265765, reapplying r265759 after changing a call from LocalAsMetadata::get to ValueAsMetadata::get (and adding a unit test). When a local value is mapped to a constant (like "i32 %a" => "i32 7"), the new debug intrinsic operand may no longer be pointing at a local. http://lab.llvm.org:8080/green/job/clang-stage1-configure-RA_build/19020/ The previous coommit message follows: -- This is a partial re-commit -- maybe more of a re-implementation -- of r265631 (reverted in r265637). This makes RF_IgnoreMissingLocals behave (almost) consistently between the Value and the Metadata hierarchy. In particular: - MapValue returns nullptr or "metadata !{}" for missing locals in MetadataAsValue/LocalAsMetadata bridging paris, depending on the RF_IgnoreMissingLocals flag. - MapValue doesn't memoize LocalAsMetadata-related results. - MapMetadata no longer deals with LocalAsMetadata or RF_IgnoreMissingLocals at all. (This wasn't in r265631 at all, but I realized during testing it would make the patch simpler with no loss of generality.) r265631 went too far, making both functions universally ignore RF_IgnoreMissingLocals. This broke building (e.g.) compiler-rt. Reassociate (and possibly other passes) don't currently maintain dominates-use invariants for metadata operands, resulting in IR like this: define void @foo(i32 %arg) { call void @llvm.some.intrinsic(metadata i32 %x) %x = add i32 1, i32 %arg } If the inliner chooses to inline @foo into another function, then RemapInstruction will call `MapValue(metadata i32 %x)` and assert that the return is not nullptr. I've filed PR27273 to add a Verifier check and fix the underlying problem in the optimization passes. As a workaround, return `!{}` instead of nullptr for unmapped LocalAsMetadata when RF_IgnoreMissingLocals is unset. Otherwise, match the behaviour of r265631. Original commit message: ValueMapper: Make LocalAsMetadata match function-local Values Start treating LocalAsMetadata similarly to function-local members of the Value hierarchy in MapValue and MapMetadata. - Don't memoize them. - Return nullptr if they are missing. This also cleans up ConstantAsMetadata to stop listening to the RF_IgnoreMissingLocals flag. llvm-svn: 265768 |
||
---|---|---|
.. | ||
ASanStackFrameLayout.cpp | ||
AddDiscriminators.cpp | ||
BasicBlockUtils.cpp | ||
BreakCriticalEdges.cpp | ||
BuildLibCalls.cpp | ||
BypassSlowDivision.cpp | ||
CMakeLists.txt | ||
CloneFunction.cpp | ||
CloneModule.cpp | ||
CmpInstAnalysis.cpp | ||
CodeExtractor.cpp | ||
CtorUtils.cpp | ||
DemoteRegToStack.cpp | ||
Evaluator.cpp | ||
FlattenCFG.cpp | ||
FunctionImportUtils.cpp | ||
GlobalStatus.cpp | ||
InlineFunction.cpp | ||
InstructionNamer.cpp | ||
IntegerDivision.cpp | ||
LCSSA.cpp | ||
LLVMBuild.txt | ||
Local.cpp | ||
LoopSimplify.cpp | ||
LoopUnroll.cpp | ||
LoopUnrollRuntime.cpp | ||
LoopUtils.cpp | ||
LoopVersioning.cpp | ||
LowerInvoke.cpp | ||
LowerSwitch.cpp | ||
Mem2Reg.cpp | ||
MemorySSA.cpp | ||
MetaRenamer.cpp | ||
ModuleUtils.cpp | ||
PromoteMemoryToRegister.cpp | ||
SSAUpdater.cpp | ||
SanitizerStats.cpp | ||
SimplifyCFG.cpp | ||
SimplifyIndVar.cpp | ||
SimplifyInstructions.cpp | ||
SimplifyLibCalls.cpp | ||
SplitModule.cpp | ||
SymbolRewriter.cpp | ||
UnifyFunctionExitNodes.cpp | ||
Utils.cpp | ||
ValueMapper.cpp |