commit 982944525c7706c4dee00042d5b7cf2f0d87804f
Author: David Stenberg <david.stenberg@ericsson.com>
Date:   Mon Feb 10 17:14:15 2020 +0100

    Revert "[InstCombine][DebugInfo] Fold constants wrapped in metadata"
    
    This reverts commit b54a8ec1bcd3689771c847cb37515b627034e518.
    
    The commit triggered debug invariance (different output with/without
    -g). The patch seems to have exposed a pre-existing invariance problem
    in GlobalOpt, which I'll write a bug report for.

diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
index 6f22190582b..bbbb1d1c13b 100644
--- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
@@ -3620,20 +3620,10 @@ static bool AddReachableCodeToWorklist(BasicBlock *BB, const DataLayout &DL,
 
       // See if we can constant fold its operands.
       for (Use &U : Inst->operands()) {
-        bool WrapAsMetadata = false;
-        auto *V = cast<Value>(U);
-
-        // Look through metadata wrappers.
-        if (auto *MAV = dyn_cast<MetadataAsValue>(V))
-          if (auto *VAM = dyn_cast<ValueAsMetadata>(MAV->getMetadata())) {
-            V = VAM->getValue();
-            WrapAsMetadata = true;
-          }
-
-        if (!isa<ConstantVector>(V) && !isa<ConstantExpr>(V))
+        if (!isa<ConstantVector>(U) && !isa<ConstantExpr>(U))
           continue;
 
-        auto *C = cast<Constant>(V);
+        auto *C = cast<Constant>(U);
         Constant *&FoldRes = FoldedConstants[C];
         if (!FoldRes)
           FoldRes = ConstantFoldConstant(C, DL, TLI);
@@ -3644,11 +3634,7 @@ static bool AddReachableCodeToWorklist(BasicBlock *BB, const DataLayout &DL,
           LLVM_DEBUG(dbgs() << "IC: ConstFold operand of: " << *Inst
                             << "\n    Old = " << *C
                             << "\n    New = " << *FoldRes << '\n');
-          if (WrapAsMetadata)
-            U = MetadataAsValue::get(Inst->getContext(),
-                                     ValueAsMetadata::get(FoldRes));
-          else
-            U = FoldRes;
+          U = FoldRes;
           MadeIRChange = true;
         }
       }
diff --git a/llvm/test/Transforms/InstCombine/constant-fold-metadata-wrapped.ll b/llvm/test/Transforms/InstCombine/constant-fold-metadata-wrapped.ll
deleted file mode 100644
index 039270ab663..00000000000
--- a/llvm/test/Transforms/InstCombine/constant-fold-metadata-wrapped.ll
+++ /dev/null
@@ -1,59 +0,0 @@
-; RUN: opt -S -instcombine %s -o - | FileCheck %s
-
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
-%struct.Foo = type { i32 }
-
-@global = common global %struct.Foo zeroinitializer, align 4
-
-; Verify that we constant fold the GEP in the llvm.dbg.value intrinsic. We
-; want it to match with the non-dbg GEP, so that the debug information can be
-; emitted later on.
-
-; When constant folding the GEP the index operand types are canonicalized, so
-; we get an i64 operand here.
-; CHECK: call void @llvm.dbg.value(metadata i32* getelementptr inbounds (%struct.Foo, %struct.Foo* @global, i64 0, i32 0)
-; CHECK: call void @ext(i32* getelementptr inbounds (%struct.Foo, %struct.Foo* @global, i64 0, i32 0))
-
-; Function Attrs: nounwind uwtable
-define i32 @main() #0 !dbg !13 {
-entry:
-  call void @llvm.dbg.value(metadata i32* getelementptr inbounds (%struct.Foo, %struct.Foo* @global, i32 0, i32 0), metadata !17, metadata !DIExpression()), !dbg !18
-  call void @ext(i32* getelementptr inbounds (%struct.Foo, %struct.Foo* @global, i32 0, i32 0)), !dbg !19
-  ret i32 0, !dbg !20
-}
-
-declare !dbg !4 void @ext(i32*)
-
-; Function Attrs: nounwind readnone speculatable willreturn
-declare void @llvm.dbg.value(metadata, metadata, metadata) #1
-
-attributes #0 = { nounwind uwtable }
-attributes #1 = { nounwind readnone speculatable willreturn }
-
-!llvm.dbg.cu = !{!0}
-!llvm.module.flags = !{!9, !10, !11}
-!llvm.ident = !{!12}
-
-!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 11.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !3, globals: !2, splitDebugInlining: false, nameTableKind: None)
-!1 = !DIFile(filename: "foo.c", directory: "/")
-!2 = !{}
-!3 = !{!4}
-!4 = !DISubprogram(name: "ext", scope: !1, file: !1, line: 3, type: !5, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !2)
-!5 = !DISubroutineType(types: !6)
-!6 = !{null, !7}
-!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !8, size: 64)
-!8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
-!9 = !{i32 7, !"Dwarf Version", i32 4}
-!10 = !{i32 2, !"Debug Info Version", i32 3}
-!11 = !{i32 1, !"wchar_size", i32 4}
-!12 = !{!"clang version 11.0.0 "}
-!13 = distinct !DISubprogram(name: "main", scope: !1, file: !1, line: 5, type: !14, scopeLine: 5, flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !16)
-!14 = !DISubroutineType(types: !15)
-!15 = !{!8}
-!16 = !{!17}
-!17 = !DILocalVariable(name: "local", scope: !13, file: !1, line: 6, type: !7)
-!18 = !DILocation(line: 0, scope: !13)
-!19 = !DILocation(line: 7, scope: !13)
-!20 = !DILocation(line: 8, scope: !13)
