From 97515eb97bc5a3b075fc4d452c330ac7405cf815 Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Thu, 7 Jan 2016 22:18:37 +0000 Subject: [PATCH] [Verifier] Check that debug values have proper size Summary: Teach the Verifier to make sure that the storage size given to llvm.dbg.declare or the value size given to llvm.dbg.value agree with what is declared in DebugInfo. This is implicitly assumed in a number of passes (e.g. in SROA). Additionally this catches a number of common mistakes, such as passing a pointer when a value was intended or vice versa. One complication comes from stack coloring which modifies the original IR when it merges allocas in order to make sure that if AA falls back to the IR it gets the correct result. However, given this new invariant, indiscriminately replacing one alloca by a different (differently sized one) is no longer valid. Fix this by just undefing out any use of the alloca in a dbg.declare in this case. Additionally, I had to fix a number of test cases. Of particular note: - I regenerated dbg-changes-codegen-branch-folding.ll from the given source as it was affected by the bug fixed in r256077 - two-cus-from-same-file.ll was changed to avoid having a variable-typed debug variable as that would depend on the target, even though this test is supposed to be generic - I had to manually declared size/align for reference type. See also the discussion for D14275/r253186. - fpstack-debuginstr-kill.ll required changing `double` to `long double` - most others were just a question of adding OP_deref Reviewers: aprantl Differential Revision: http://reviews.llvm.org/D14276 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@257105 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/StackColoring.cpp | 16 +- lib/IR/Verifier.cpp | 64 ++++- test/CodeGen/ARM/2010-08-04-StackVariable.ll | 11 +- .../MIR/X86/invalid-metadata-node-type.mir | 2 +- .../MIR/X86/stack-object-debug-info.mir | 7 +- test/CodeGen/X86/2012-11-30-regpres-dbg.ll | 2 +- test/CodeGen/X86/MachineSink-DbgValue.ll | 4 +- .../X86/dbg-changes-codegen-branch-folding.ll | 252 +++++++++--------- test/CodeGen/X86/fpstack-debuginstr-kill.ll | 2 +- .../X86/misched-code-difference-with-debug.ll | 4 +- test/DebugInfo/AArch64/frameindices.ll | 2 +- .../DebugInfo/Generic/2010-05-03-OriginDIE.ll | 4 +- .../Generic/incorrect-variable-debugloc1.ll | 3 +- .../Generic/two-cus-from-same-file.ll | 9 +- test/DebugInfo/Mips/dsr-non-fixed-objects.ll | 2 +- test/DebugInfo/X86/bbjoin.ll | 6 +- test/DebugInfo/X86/dbg-value-dag-combine.ll | 4 +- test/DebugInfo/X86/dbg-value-isel.ll | 2 +- test/DebugInfo/X86/dbg-value-terminator.ll | 3 +- test/DebugInfo/X86/elf-names.ll | 2 +- test/DebugInfo/X86/nodebug_with_debug_loc.ll | 4 +- test/DebugInfo/X86/nophysreg.ll | 10 +- test/DebugInfo/X86/rvalue-ref.ll | 2 +- test/DebugInfo/X86/sret.ll | 2 +- .../CodeGenPrepare/X86/catchpad-phi-cast.ll | 2 +- .../DeadStoreElimination/inst-limits.ll | 2 +- .../SLPVectorizer/X86/debug_info.ll | 4 +- 27 files changed, 246 insertions(+), 181 deletions(-) diff --git a/lib/CodeGen/StackColoring.cpp b/lib/CodeGen/StackColoring.cpp index 3541b33a844..505d6fd8896 100644 --- a/lib/CodeGen/StackColoring.cpp +++ b/lib/CodeGen/StackColoring.cpp @@ -21,7 +21,6 @@ // //===----------------------------------------------------------------------===// -#include "llvm/CodeGen/Passes.h" #include "llvm/ADT/BitVector.h" #include "llvm/ADT/DepthFirstIterator.h" #include "llvm/ADT/PostOrderIterator.h" @@ -40,6 +39,7 @@ #include "llvm/CodeGen/MachineMemOperand.h" #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/MachineRegisterInfo.h" +#include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/PseudoSourceValue.h" #include "llvm/CodeGen/SlotIndexes.h" #include "llvm/CodeGen/StackProtector.h" @@ -47,6 +47,7 @@ #include "llvm/IR/Dominators.h" #include "llvm/IR/Function.h" #include "llvm/IR/Instructions.h" +#include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/Module.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" @@ -494,10 +495,21 @@ void StackColoring::remapInstructions(DenseMap &SlotRemap) { // upcoming replacement. SP->adjustForColoring(From, To); + // The new alloca might not be valid in a llvm.dbg.declare for this + // variable, so undef out the use to make the verifier happy. + AllocaInst *FromAI = const_cast(From); + if (FromAI->isUsedByMetadata()) + ValueAsMetadata::handleRAUW(FromAI, UndefValue::get(FromAI->getType())); + for (auto &Use : FromAI->uses()) { + if (BitCastInst *BCI = dyn_cast(Use.get())) + if (BCI->isUsedByMetadata()) + ValueAsMetadata::handleRAUW(BCI, UndefValue::get(BCI->getType())); + } + // Note that this will not replace uses in MMOs (which we'll update below), // or anywhere else (which is why we won't delete the original // instruction). - const_cast(From)->replaceAllUsesWith(Inst); + FromAI->replaceAllUsesWith(Inst); } // Remap all instructions to the new stack slots. diff --git a/lib/IR/Verifier.cpp b/lib/IR/Verifier.cpp index 64d7575b8a1..165f745b506 100644 --- a/lib/IR/Verifier.cpp +++ b/lib/IR/Verifier.cpp @@ -432,8 +432,7 @@ private: // Module-level debug info verification... void verifyTypeRefs(); template - void verifyBitPieceExpression(const DbgInfoIntrinsic &I, - const MapTy &TypeRefs); + void verifyDIExpression(const DbgInfoIntrinsic &I, const MapTy &TypeRefs); void visitUnresolvedTypeRef(const MDString *S, const MDNode *N); }; } // End anonymous namespace @@ -3854,15 +3853,34 @@ static uint64_t getVariableSize(const DILocalVariable &V, const MapTy &Map) { } template -void Verifier::verifyBitPieceExpression(const DbgInfoIntrinsic &I, - const MapTy &TypeRefs) { +void Verifier::verifyDIExpression(const DbgInfoIntrinsic &I, + const MapTy &TypeRefs) { DILocalVariable *V; DIExpression *E; + const Value *Arg; + uint64_t ArgumentTypeSizeInBits = 0; if (auto *DVI = dyn_cast(&I)) { + Arg = DVI->getValue(); + if (Arg) + ArgumentTypeSizeInBits = + M->getDataLayout().getTypeAllocSizeInBits(Arg->getType()); V = dyn_cast_or_null(DVI->getRawVariable()); E = dyn_cast_or_null(DVI->getRawExpression()); } else { auto *DDI = cast(&I); + // For declare intrinsics, get the total size of the alloca, to allow + // case where the variable may span more than one element. + Arg = DDI->getAddress(); + if (Arg) + Arg = Arg->stripPointerCasts(); + const AllocaInst *AI = dyn_cast_or_null(Arg); + if (AI) { + // We can only say something about constant size allocations + if (const ConstantInt *CI = dyn_cast(AI->getArraySize())) + ArgumentTypeSizeInBits = + CI->getLimitedValue() * + M->getDataLayout().getTypeAllocSizeInBits(AI->getAllocatedType()); + } V = dyn_cast_or_null(DDI->getRawVariable()); E = dyn_cast_or_null(DDI->getRawExpression()); } @@ -3871,10 +3889,6 @@ void Verifier::verifyBitPieceExpression(const DbgInfoIntrinsic &I, if (!V || !E || !E->isValid()) return; - // Nothing to do if this isn't a bit piece expression. - if (!E->isBitPiece()) - return; - // The frontend helps out GDB by emitting the members of local anonymous // unions as artificial local variables with shared storage. When SROA splits // the storage for artificial local variables that are smaller than the entire @@ -3890,11 +3904,33 @@ void Verifier::verifyBitPieceExpression(const DbgInfoIntrinsic &I, if (!VarSize) return; - unsigned PieceSize = E->getBitPieceSize(); - unsigned PieceOffset = E->getBitPieceOffset(); - Assert(PieceSize + PieceOffset <= VarSize, - "piece is larger than or outside of variable", &I, V, E); - Assert(PieceSize != VarSize, "piece covers entire variable", &I, V, E); + if (E->isBitPiece()) { + unsigned PieceSize = E->getBitPieceSize(); + unsigned PieceOffset = E->getBitPieceOffset(); + Assert(PieceSize + PieceOffset <= VarSize, + "piece is larger than or outside of variable", &I, V, E); + Assert(PieceSize != VarSize, "piece covers entire variable", &I, V, E); + return; + } + + if (!ArgumentTypeSizeInBits) + return; // We were unable to determine the size of the argument + + if (E->getNumElements() == 0) { + // In the case where the expression is empty, verify the size of the + // argument. Doing this in the general case would require looking through + // any dereferences that may be in the expression. + Assert(ArgumentTypeSizeInBits == VarSize, + "size of passed value (" + std::to_string(ArgumentTypeSizeInBits) + + ") does not match size of declared variable (" + + std::to_string(VarSize) + ")", + &I, Arg, V, V->getType(), E); + } else if (E->getElement(0) == dwarf::DW_OP_deref) { + Assert(ArgumentTypeSizeInBits == M->getDataLayout().getPointerSizeInBits(), + "the operation of the expression is a deref, but the passed value " + "is not pointer sized", + &I, Arg, V, V->getType(), E); + } } void Verifier::visitUnresolvedTypeRef(const MDString *S, const MDNode *N) { @@ -3927,7 +3963,7 @@ void Verifier::verifyTypeRefs() { for (const BasicBlock &BB : F) for (const Instruction &I : BB) if (auto *DII = dyn_cast(&I)) - verifyBitPieceExpression(*DII, TypeRefs); + verifyDIExpression(*DII, TypeRefs); // Return early if all typerefs were resolved. if (UnresolvedTypeRefs.empty()) diff --git a/test/CodeGen/ARM/2010-08-04-StackVariable.ll b/test/CodeGen/ARM/2010-08-04-StackVariable.ll index 14ddb59b538..9055b2b551e 100644 --- a/test/CodeGen/ARM/2010-08-04-StackVariable.ll +++ b/test/CodeGen/ARM/2010-08-04-StackVariable.ll @@ -1,6 +1,9 @@ ; RUN: llc -O0 -mtriple=arm-apple-darwin < %s | grep DW_OP_breg ; Use DW_OP_breg in variable's location expression if the variable is in a stack slot. +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:64" +target triple = "arm-apple-darwin" + %struct.SVal = type { i8*, i32 } define i32 @_Z3fooi4SVal(i32 %i, %struct.SVal* noalias %location) nounwind ssp !dbg !17 { @@ -78,7 +81,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon !llvm.module.flags = !{!49} !0 = !DISubprogram(name: "SVal", line: 11, isLocal: false, isDefinition: false, virtualIndex: 6, isOptimized: false, file: !48, scope: !1, type: !14) -!1 = !DICompositeType(tag: DW_TAG_structure_type, name: "SVal", line: 1, size: 128, align: 64, file: !48, elements: !4) +!1 = !DICompositeType(tag: DW_TAG_structure_type, name: "SVal", line: 1, size: 64, align: 64, file: !48, elements: !4) !2 = !DIFile(filename: "small.cc", directory: "/Users/manav/R8248330") !3 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "4.2.1 (Based on Apple Inc. build 5658) (LLVM build)", isOptimized: false, emissionKind: 1, file: !48, enums: !47, retainedTypes: !47, subprograms: !46, globals: !47, imports: !47) !4 = !{!5, !7, !0, !9} @@ -103,14 +106,14 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon !23 = !DILocalVariable(name: "i", line: 16, arg: 1, scope: !17, file: !2, type: !13) !24 = !DILocation(line: 16, scope: !17) !25 = !DILocalVariable(name: "location", line: 16, arg: 2, scope: !17, file: !2, type: !26) -!26 = !DIDerivedType(tag: DW_TAG_reference_type, name: "SVal", size: 64, align: 64, file: !48, scope: !2, baseType: !1) +!26 = !DIDerivedType(tag: DW_TAG_reference_type, name: "SVal", size: 32, align: 32, file: !48, scope: !2, baseType: !1) !27 = !DILocation(line: 17, scope: !28) !28 = distinct !DILexicalBlock(line: 16, column: 0, file: !2, scope: !17) !29 = !DILocation(line: 18, scope: !28) !30 = !DILocation(line: 20, scope: !28) !31 = !DILocalVariable(name: "this", line: 11, arg: 1, scope: !16, file: !2, type: !32) -!32 = !DIDerivedType(tag: DW_TAG_const_type, size: 64, align: 64, flags: DIFlagArtificial, file: !48, scope: !2, baseType: !33) -!33 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, file: !48, scope: !2, baseType: !1) +!32 = !DIDerivedType(tag: DW_TAG_const_type, flags: DIFlagArtificial, file: !48, scope: !2, baseType: !33) +!33 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, file: !48, scope: !2, baseType: !1) !34 = !DILocation(line: 11, scope: !16) !35 = !DILocation(line: 11, scope: !36) !36 = distinct !DILexicalBlock(line: 11, column: 0, file: !48, scope: !37) diff --git a/test/CodeGen/MIR/X86/invalid-metadata-node-type.mir b/test/CodeGen/MIR/X86/invalid-metadata-node-type.mir index a6c2e509da0..47f41b2afb8 100644 --- a/test/CodeGen/MIR/X86/invalid-metadata-node-type.mir +++ b/test/CodeGen/MIR/X86/invalid-metadata-node-type.mir @@ -6,7 +6,7 @@ entry: %x.i = alloca i8, align 1 %y.i = alloca [256 x i8], align 16 - %0 = bitcast [256 x i8]* %y.i to i8* + %0 = bitcast i8* %x.i to i8* br label %for.body for.body: diff --git a/test/CodeGen/MIR/X86/stack-object-debug-info.mir b/test/CodeGen/MIR/X86/stack-object-debug-info.mir index 509b196416f..8074f7603b7 100644 --- a/test/CodeGen/MIR/X86/stack-object-debug-info.mir +++ b/test/CodeGen/MIR/X86/stack-object-debug-info.mir @@ -35,11 +35,14 @@ !1 = !DIFile(filename: "t.c", directory: "") !2 = !{} !3 = !{i32 1, !"Debug Info Version", i32 3} - !4 = !DILocalVariable(name: "x", scope: !5, file: !1, line: 16, type: !6) + !4 = !DILocalVariable(name: "x", scope: !5, file: !1, line: 16, type: !9) !5 = distinct !DISubprogram(scope: null, isLocal: false, isDefinition: true, isOptimized: false) !6 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) !7 = !DIExpression() !8 = !DILocation(line: 0, scope: !5) + !9 = !DICompositeType(tag: DW_TAG_array_type, baseType: !6, size: 2048, align: 8, elements: !10) + !10 = !{!11} + !11 = !DISubrange(count: 256) ... --- name: foo @@ -50,7 +53,7 @@ frameInfo: # CHECK-LABEL: foo # CHECK: stack: # CHECK: - { id: 0, name: y.i, offset: 0, size: 256, alignment: 16, di-variable: '!4', -# CHECK-NEXT: di-expression: '!7', di-location: '!8' } +# CHECK-NEXT: di-expression: '!10', di-location: '!11' } stack: - { id: 0, name: y.i, offset: 0, size: 256, alignment: 16, di-variable: '!4', di-expression: '!7', di-location: '!8' } diff --git a/test/CodeGen/X86/2012-11-30-regpres-dbg.ll b/test/CodeGen/X86/2012-11-30-regpres-dbg.ll index 3f7a10ae035..de258c55f61 100644 --- a/test/CodeGen/X86/2012-11-30-regpres-dbg.ll +++ b/test/CodeGen/X86/2012-11-30-regpres-dbg.ll @@ -40,7 +40,7 @@ invoke.cont44: ; preds = %if.end !1 = !{!2} !2 = distinct !DISubprogram(name: "test", isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 1, file: !6, scope: !5, type: !7) !3 = !DILocalVariable(name: "callback", line: 214, scope: !2, type: !4) -!4 = !DICompositeType(tag: DW_TAG_structure_type, name: "btCompoundLeafCallback", line: 90, size: 512, align: 64, file: !6) +!4 = !DICompositeType(tag: DW_TAG_structure_type, name: "btCompoundLeafCallback", line: 90, size: 64, align: 64, file: !6) !5 = !DIFile(filename: "MultiSource/Benchmarks/Bullet/btCompoundCollisionAlgorithm.cpp", directory: "MultiSource/Benchmarks/Bullet") !6 = !DIFile(filename: "MultiSource/Benchmarks/Bullet/btCompoundCollisionAlgorithm.cpp", directory: "MultiSource/Benchmarks/Bullet") !7 = !DISubroutineType(types: !9) diff --git a/test/CodeGen/X86/MachineSink-DbgValue.ll b/test/CodeGen/X86/MachineSink-DbgValue.ll index 457d9beb37d..57d1ac0c9db 100644 --- a/test/CodeGen/X86/MachineSink-DbgValue.ll +++ b/test/CodeGen/X86/MachineSink-DbgValue.ll @@ -36,9 +36,9 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon !5 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !6 = !DILocalVariable(name: "i", line: 2, arg: 1, scope: !1, file: !2, type: !5) !7 = !DILocalVariable(name: "c", line: 2, arg: 2, scope: !1, file: !2, type: !8) -!8 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, scope: !0, baseType: !9) +!8 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, scope: !0, baseType: !5) !9 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) -!10 = !DILocalVariable(name: "a", line: 3, scope: !11, file: !2, type: !9) +!10 = !DILocalVariable(name: "a", line: 3, scope: !11, file: !2, type: !5) !11 = distinct !DILexicalBlock(line: 2, column: 25, file: !20, scope: !1) !12 = !DILocation(line: 2, column: 13, scope: !1) !13 = !DILocation(line: 2, column: 22, scope: !1) diff --git a/test/CodeGen/X86/dbg-changes-codegen-branch-folding.ll b/test/CodeGen/X86/dbg-changes-codegen-branch-folding.ll index 54bd4892683..24d7e895a45 100644 --- a/test/CodeGen/X86/dbg-changes-codegen-branch-folding.ll +++ b/test/CodeGen/X86/dbg-changes-codegen-branch-folding.ll @@ -12,7 +12,7 @@ ; CHECK: je .LBB0_4 ; Regenerate test with this command: -; clang -emit-llvm -S -O2 -g +; clang++ -emit-llvm -S -O2 -g ; from this source: ; ; extern void foo(char *dst,unsigned siz,const char *src); @@ -44,161 +44,171 @@ %struct.AAA3 = type { [4 x i8] } @.str = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 -@.str1 = private unnamed_addr constant [2 x i8] c"+\00", align 1 -@.str2 = private unnamed_addr constant [2 x i8] c"-\00", align 1 +@.str.1 = private unnamed_addr constant [2 x i8] c"+\00", align 1 +@.str.2 = private unnamed_addr constant [2 x i8] c"-\00", align 1 ; Function Attrs: uwtable define void @_Z3barii(i32 %param1, i32 %param2) #0 !dbg !24 { entry: %var1 = alloca %struct.AAA3, align 1 %var2 = alloca %struct.AAA3, align 1 - tail call void @llvm.dbg.value(metadata i32 %param1, i64 0, metadata !30, metadata !DIExpression()), !dbg !47 - tail call void @llvm.dbg.value(metadata i32 %param2, i64 0, metadata !31, metadata !DIExpression()), !dbg !47 - tail call void @llvm.dbg.value(metadata i8* null, i64 0, metadata !32, metadata !DIExpression()), !dbg !49 + tail call void @llvm.dbg.value(metadata i32 %param1, i64 0, metadata !29, metadata !46), !dbg !47 + tail call void @llvm.dbg.value(metadata i32 %param2, i64 0, metadata !30, metadata !46), !dbg !48 + tail call void @llvm.dbg.value(metadata i8* null, i64 0, metadata !31, metadata !46), !dbg !49 %tobool = icmp eq i32 %param2, 0, !dbg !50 - br i1 %tobool, label %if.end, label %if.then, !dbg !50 + br i1 %tobool, label %if.end, label %if.then, !dbg !52 if.then: ; preds = %entry - %call = tail call i8* @_Z5i2stri(i32 %param2), !dbg !52 - tail call void @llvm.dbg.value(metadata i8* %call, i64 0, metadata !32, metadata !DIExpression()), !dbg !49 - br label %if.end, !dbg !54 + %call = tail call i8* @_Z5i2stri(i32 %param2), !dbg !53 + tail call void @llvm.dbg.value(metadata i8* %call, i64 0, metadata !31, metadata !46), !dbg !49 + br label %if.end, !dbg !55 if.end: ; preds = %entry, %if.then - tail call void @llvm.dbg.value(metadata %struct.AAA3* %var1, i64 0, metadata !33, metadata !DIExpression()), !dbg !55 - tail call void @llvm.dbg.value(metadata %struct.AAA3* %var1, i64 0, metadata !56, metadata !DIExpression()), !dbg !57 - tail call void @llvm.dbg.value(metadata !58, i64 0, metadata !59, metadata !DIExpression()), !dbg !60 - %arraydecay.i = getelementptr inbounds %struct.AAA3, %struct.AAA3* %var1, i64 0, i32 0, i64 0, !dbg !61 - call void @_Z3fooPcjPKc(i8* %arraydecay.i, i32 4, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0)), !dbg !61 - call void @llvm.dbg.value(metadata %struct.AAA3* %var2, i64 0, metadata !34, metadata !DIExpression()), !dbg !63 - call void @llvm.dbg.value(metadata %struct.AAA3* %var2, i64 0, metadata !64, metadata !DIExpression()), !dbg !65 - call void @llvm.dbg.value(metadata !58, i64 0, metadata !66, metadata !DIExpression()), !dbg !67 - %arraydecay.i5 = getelementptr inbounds %struct.AAA3, %struct.AAA3* %var2, i64 0, i32 0, i64 0, !dbg !68 - call void @_Z3fooPcjPKc(i8* %arraydecay.i5, i32 4, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0)), !dbg !68 - %tobool1 = icmp eq i32 %param1, 0, !dbg !69 - call void @llvm.dbg.value(metadata %struct.AAA3* %var2, i64 0, metadata !34, metadata !DIExpression()), !dbg !63 - br i1 %tobool1, label %if.else, label %if.then2, !dbg !69 + %0 = getelementptr inbounds %struct.AAA3, %struct.AAA3* %var1, i64 0, i32 0, i64 0, !dbg !56 + call void @llvm.lifetime.start(i64 4, i8* %0) #4, !dbg !56 + tail call void @llvm.dbg.value(metadata %struct.AAA3* %var1, i64 0, metadata !32, metadata !57), !dbg !58 + tail call void @llvm.dbg.value(metadata %struct.AAA3* %var1, i64 0, metadata !36, metadata !46), !dbg !59 + tail call void @llvm.dbg.value(metadata i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i64 0, metadata !38, metadata !46), !dbg !62 + call void @_Z3fooPcjPKc(i8* %0, i32 4, i8* nonnull getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0)), !dbg !63 + %1 = getelementptr inbounds %struct.AAA3, %struct.AAA3* %var2, i64 0, i32 0, i64 0, !dbg !65 + call void @llvm.lifetime.start(i64 4, i8* %1) #4, !dbg !65 + call void @llvm.dbg.value(metadata %struct.AAA3* %var2, i64 0, metadata !33, metadata !57), !dbg !66 + call void @llvm.dbg.value(metadata %struct.AAA3* %var2, i64 0, metadata !36, metadata !46), !dbg !67 + call void @llvm.dbg.value(metadata i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i64 0, metadata !38, metadata !46), !dbg !69 + call void @_Z3fooPcjPKc(i8* %1, i32 4, i8* nonnull getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0)), !dbg !70 + %tobool1 = icmp eq i32 %param1, 0, !dbg !71 + call void @llvm.dbg.value(metadata %struct.AAA3* %var2, i64 0, metadata !33, metadata !57), !dbg !66 + call void @llvm.dbg.value(metadata %struct.AAA3* %var2, i64 0, metadata !41, metadata !46), !dbg !73 + br i1 %tobool1, label %if.else, label %if.then2, !dbg !75 if.then2: ; preds = %if.end - call void @llvm.dbg.value(metadata %struct.AAA3* %var2, i64 0, metadata !71, metadata !DIExpression()), !dbg !73 - call void @llvm.dbg.value(metadata !74, i64 0, metadata !75, metadata !DIExpression()), !dbg !76 - call void @_Z3fooPcjPKc(i8* %arraydecay.i5, i32 4, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str1, i64 0, i64 0)), !dbg !76 - br label %if.end3, !dbg !72 + call void @llvm.dbg.value(metadata i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i64 0, metadata !42, metadata !46), !dbg !76 + call void @_Z3fooPcjPKc(i8* %1, i32 4, i8* nonnull getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0)), !dbg !78 + br label %if.end3, !dbg !79 if.else: ; preds = %if.end - call void @llvm.dbg.value(metadata %struct.AAA3* %var2, i64 0, metadata !77, metadata !DIExpression()), !dbg !79 - call void @llvm.dbg.value(metadata !80, i64 0, metadata !81, metadata !DIExpression()), !dbg !82 - call void @_Z3fooPcjPKc(i8* %arraydecay.i5, i32 4, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str2, i64 0, i64 0)), !dbg !82 + call void @llvm.dbg.value(metadata i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0), i64 0, metadata !42, metadata !46), !dbg !80 + call void @_Z3fooPcjPKc(i8* %1, i32 4, i8* nonnull getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0)), !dbg !81 br label %if.end3 if.end3: ; preds = %if.else, %if.then2 - call void @llvm.dbg.value(metadata %struct.AAA3* %var1, i64 0, metadata !33, metadata !DIExpression()), !dbg !55 - call void @llvm.dbg.value(metadata %struct.AAA3* %var1, i64 0, metadata !83, metadata !DIExpression()), !dbg !85 - call void @llvm.dbg.value(metadata !58, i64 0, metadata !86, metadata !DIExpression()), !dbg !87 - call void @_Z3fooPcjPKc(i8* %arraydecay.i, i32 4, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0)), !dbg !87 - ret void, !dbg !88 + call void @llvm.dbg.value(metadata %struct.AAA3* %var1, i64 0, metadata !32, metadata !57), !dbg !58 + call void @llvm.dbg.value(metadata %struct.AAA3* %var1, i64 0, metadata !41, metadata !46), !dbg !82 + call void @llvm.dbg.value(metadata i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i64 0, metadata !42, metadata !46), !dbg !84 + call void @_Z3fooPcjPKc(i8* %0, i32 4, i8* nonnull getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0)), !dbg !85 + call void @llvm.lifetime.end(i64 4, i8* %1) #4, !dbg !86 + call void @llvm.lifetime.end(i64 4, i8* %0) #4, !dbg !87 + ret void, !dbg !86 } -declare i8* @_Z5i2stri(i32) #1 +; Function Attrs: argmemonly nounwind +declare void @llvm.lifetime.start(i64, i8* nocapture) #1 -declare void @_Z3fooPcjPKc(i8*, i32, i8*) #1 +declare i8* @_Z5i2stri(i32) #2 + +; Function Attrs: argmemonly nounwind +declare void @llvm.lifetime.end(i64, i8* nocapture) #1 + +declare void @_Z3fooPcjPKc(i8*, i32, i8*) #2 ; Function Attrs: nounwind readnone -declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #2 +declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #3 -attributes #0 = { uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #2 = { nounwind readnone } +attributes #0 = { uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { argmemonly nounwind } +attributes #2 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #3 = { nounwind readnone } +attributes #4 = { nounwind } !llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!44, !45} -!llvm.ident = !{!46} +!llvm.module.flags = !{!43, !44} +!llvm.ident = !{!45} -!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0 ", isOptimized: true, emissionKind: 1, file: !1, enums: !2, retainedTypes: !3, subprograms: !23, globals: !2, imports: !2) -!1 = !DIFile(filename: "dbg-changes-codegen-branch-folding.cpp", directory: "/tmp/dbginfo") +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 3.8.0 (trunk 255993) (llvm/trunk 256074)", isOptimized: true, runtimeVersion: 0, emissionKind: 1, enums: !2, retainedTypes: !3, subprograms: !23) +!1 = !DIFile(filename: "test.cpp", directory: "/mnt/extra") !2 = !{} !3 = !{!4} -!4 = !DICompositeType(tag: DW_TAG_structure_type, name: "AAA3", line: 4, size: 32, align: 8, file: !1, elements: !5, identifier: "_ZTS4AAA3") +!4 = !DICompositeType(tag: DW_TAG_structure_type, name: "AAA3", file: !1, line: 4, size: 32, align: 8, elements: !5, identifier: "_ZTS4AAA3") !5 = !{!6, !11, !17, !18} -!6 = !DIDerivedType(tag: DW_TAG_member, name: "text", line: 8, size: 32, align: 8, file: !1, scope: !"_ZTS4AAA3", baseType: !7) -!7 = !DICompositeType(tag: DW_TAG_array_type, size: 32, align: 8, baseType: !8, elements: !9) -!8 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) +!6 = !DIDerivedType(tag: DW_TAG_member, name: "text", scope: !"_ZTS4AAA3", file: !1, line: 8, baseType: !7, size: 32, align: 8) +!7 = !DICompositeType(tag: DW_TAG_array_type, baseType: !8, size: 32, align: 8, elements: !9) +!8 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) !9 = !{!10} !10 = !DISubrange(count: 4) -!11 = !DISubprogram(name: "AAA3", line: 5, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 5, file: !1, scope: !"_ZTS4AAA3", type: !12) +!11 = !DISubprogram(name: "AAA3", scope: !"_ZTS4AAA3", file: !1, line: 5, type: !12, isLocal: false, isDefinition: false, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true) !12 = !DISubroutineType(types: !13) !13 = !{null, !14, !15} -!14 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !"_ZTS4AAA3") -!15 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !16) +!14 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS4AAA3", size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer) +!15 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !16, size: 64, align: 64) !16 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !8) -!17 = !DISubprogram(name: "operator=", linkageName: "_ZN4AAA3aSEPKc", line: 6, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 6, file: !1, scope: !"_ZTS4AAA3", type: !12) -!18 = !DISubprogram(name: "operator const char *", linkageName: "_ZNK4AAA3cvPKcEv", line: 7, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 7, file: !1, scope: !"_ZTS4AAA3", type: !19) +!17 = !DISubprogram(name: "operator=", linkageName: "_ZN4AAA3aSEPKc", scope: !"_ZTS4AAA3", file: !1, line: 6, type: !12, isLocal: false, isDefinition: false, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: true) +!18 = !DISubprogram(name: "operator const char *", linkageName: "_ZNK4AAA3cvPKcEv", scope: !"_ZTS4AAA3", file: !1, line: 7, type: !19, isLocal: false, isDefinition: false, scopeLine: 7, flags: DIFlagPrototyped, isOptimized: true) !19 = !DISubroutineType(types: !20) !20 = !{!15, !21} -!21 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !22) +!21 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !22, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer) !22 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !"_ZTS4AAA3") -!23 = !{!24, !35, !40} -!24 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barii", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 11, file: !1, scope: !25, type: !26, variables: !29) -!25 = !DIFile(filename: "dbg-changes-codegen-branch-folding.cpp", directory: "/tmp/dbginfo") -!26 = !DISubroutineType(types: !27) -!27 = !{null, !28, !28} -!28 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) -!29 = !{!30, !31, !32, !33, !34} -!30 = !DILocalVariable(name: "param1", line: 11, arg: 1, scope: !24, file: !25, type: !28) -!31 = !DILocalVariable(name: "param2", line: 11, arg: 2, scope: !24, file: !25, type: !28) -!32 = !DILocalVariable(name: "temp", line: 12, scope: !24, file: !25, type: !15) -!33 = !DILocalVariable(name: "var1", line: 17, scope: !24, file: !25, type: !"_ZTS4AAA3") -!34 = !DILocalVariable(name: "var2", line: 18, scope: !24, file: !25, type: !"_ZTS4AAA3") -!35 = distinct !DISubprogram(name: "operator=", linkageName: "_ZN4AAA3aSEPKc", line: 6, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 6, file: !1, scope: !"_ZTS4AAA3", type: !12, declaration: !17, variables: !36) -!36 = !{!37, !39} -!37 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !35, type: !38) -!38 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS4AAA3") -!39 = !DILocalVariable(name: "value", line: 6, arg: 2, scope: !35, file: !25, type: !15) -!40 = distinct !DISubprogram(name: "AAA3", linkageName: "_ZN4AAA3C2EPKc", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 5, file: !1, scope: !"_ZTS4AAA3", type: !12, declaration: !11, variables: !41) -!41 = !{!42, !43} -!42 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !40, type: !38) -!43 = !DILocalVariable(name: "value", line: 5, arg: 2, scope: !40, file: !25, type: !15) -!44 = !{i32 2, !"Dwarf Version", i32 4} -!45 = !{i32 2, !"Debug Info Version", i32 3} -!46 = !{!"clang version 3.5.0 "} -!47 = !DILocation(line: 11, scope: !24) -!48 = !{i8* null} -!49 = !DILocation(line: 12, scope: !24) -!50 = !DILocation(line: 14, scope: !51) -!51 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !24) -!52 = !DILocation(line: 15, scope: !53) -!53 = distinct !DILexicalBlock(line: 14, column: 0, file: !1, scope: !51) -!54 = !DILocation(line: 16, scope: !53) -!55 = !DILocation(line: 17, scope: !24) -!56 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !40, type: !38) -!57 = !DILocation(line: 0, scope: !40, inlinedAt: !55) -!58 = !{i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0)} -!59 = !DILocalVariable(name: "value", line: 5, arg: 2, scope: !40, file: !25, type: !15) -!60 = !DILocation(line: 5, scope: !40, inlinedAt: !55) -!61 = !DILocation(line: 5, scope: !62, inlinedAt: !55) -!62 = distinct !DILexicalBlock(line: 5, column: 0, file: !1, scope: !40) -!63 = !DILocation(line: 18, scope: !24) -!64 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !40, type: !38) -!65 = !DILocation(line: 0, scope: !40, inlinedAt: !63) -!66 = !DILocalVariable(name: "value", line: 5, arg: 2, scope: !40, file: !25, type: !15) -!67 = !DILocation(line: 5, scope: !40, inlinedAt: !63) -!68 = !DILocation(line: 5, scope: !62, inlinedAt: !63) -!69 = !DILocation(line: 20, scope: !70) -!70 = distinct !DILexicalBlock(line: 20, column: 0, file: !1, scope: !24) -!71 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !35, type: !38) -!72 = !DILocation(line: 21, scope: !70) -!73 = !DILocation(line: 0, scope: !35, inlinedAt: !72) -!74 = !{i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str1, i64 0, i64 0)} -!75 = !DILocalVariable(name: "value", line: 6, arg: 2, scope: !35, file: !25, type: !15) -!76 = !DILocation(line: 6, scope: !35, inlinedAt: !72) -!77 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !35, type: !38) -!78 = !DILocation(line: 23, scope: !70) -!79 = !DILocation(line: 0, scope: !35, inlinedAt: !78) -!80 = !{i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str2, i64 0, i64 0)} -!81 = !DILocalVariable(name: "value", line: 6, arg: 2, scope: !35, file: !25, type: !15) -!82 = !DILocation(line: 6, scope: !35, inlinedAt: !78) -!83 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !35, type: !38) -!84 = !DILocation(line: 24, scope: !24) -!85 = !DILocation(line: 0, scope: !35, inlinedAt: !84) -!86 = !DILocalVariable(name: "value", line: 6, arg: 2, scope: !35, file: !25, type: !15) -!87 = !DILocation(line: 6, scope: !35, inlinedAt: !84) -!88 = !DILocation(line: 25, scope: !24) +!23 = !{!24, !34, !39} +!24 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barii", scope: !1, file: !1, line: 11, type: !25, isLocal: false, isDefinition: true, scopeLine: 11, flags: DIFlagPrototyped, isOptimized: true, variables: !28) +!25 = !DISubroutineType(types: !26) +!26 = !{null, !27, !27} +!27 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) +!28 = !{!29, !30, !31, !32, !33} +!29 = !DILocalVariable(name: "param1", arg: 1, scope: !24, file: !1, line: 11, type: !27) +!30 = !DILocalVariable(name: "param2", arg: 2, scope: !24, file: !1, line: 11, type: !27) +!31 = !DILocalVariable(name: "temp", scope: !24, file: !1, line: 12, type: !15) +!32 = !DILocalVariable(name: "var1", scope: !24, file: !1, line: 17, type: !"_ZTS4AAA3") +!33 = !DILocalVariable(name: "var2", scope: !24, file: !1, line: 18, type: !"_ZTS4AAA3") +!34 = distinct !DISubprogram(name: "AAA3", linkageName: "_ZN4AAA3C2EPKc", scope: !"_ZTS4AAA3", file: !1, line: 5, type: !12, isLocal: false, isDefinition: true, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true, declaration: !11, variables: !35) +!35 = !{!36, !38} +!36 = !DILocalVariable(name: "this", arg: 1, scope: !34, type: !37, flags: DIFlagArtificial | DIFlagObjectPointer) +!37 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !"_ZTS4AAA3", size: 64, align: 64) +!38 = !DILocalVariable(name: "value", arg: 2, scope: !34, file: !1, line: 5, type: !15) +!39 = distinct !DISubprogram(name: "operator=", linkageName: "_ZN4AAA3aSEPKc", scope: !"_ZTS4AAA3", file: !1, line: 6, type: !12, isLocal: false, isDefinition: true, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: true, declaration: !17, variables: !40) +!40 = !{!41, !42} +!41 = !DILocalVariable(name: "this", arg: 1, scope: !39, type: !37, flags: DIFlagArtificial | DIFlagObjectPointer) +!42 = !DILocalVariable(name: "value", arg: 2, scope: !39, file: !1, line: 6, type: !15) +!43 = !{i32 2, !"Dwarf Version", i32 4} +!44 = !{i32 2, !"Debug Info Version", i32 3} +!45 = !{!"clang version 3.8.0 (trunk 255993) (llvm/trunk 256074)"} +!46 = !DIExpression() +!47 = !DILocation(line: 11, column: 15, scope: !24) +!48 = !DILocation(line: 11, column: 26, scope: !24) +!49 = !DILocation(line: 12, column: 16, scope: !24) +!50 = !DILocation(line: 14, column: 7, scope: !51) +!51 = distinct !DILexicalBlock(scope: !24, file: !1, line: 14, column: 7) +!52 = !DILocation(line: 14, column: 7, scope: !24) +!53 = !DILocation(line: 15, column: 12, scope: !54) +!54 = distinct !DILexicalBlock(scope: !51, file: !1, line: 14, column: 15) +!55 = !DILocation(line: 16, column: 3, scope: !54) +!56 = !DILocation(line: 17, column: 3, scope: !24) +!57 = !DIExpression(DW_OP_deref) +!58 = !DILocation(line: 17, column: 8, scope: !24) +!59 = !DILocation(line: 0, scope: !34, inlinedAt: !60) +!60 = distinct !DILocation(line: 17, column: 8, scope: !61) +!61 = !DILexicalBlockFile(scope: !24, file: !1, discriminator: 1) +!62 = !DILocation(line: 5, column: 19, scope: !34, inlinedAt: !60) +!63 = !DILocation(line: 5, column: 28, scope: !64, inlinedAt: !60) +!64 = distinct !DILexicalBlock(scope: !34, file: !1, line: 5, column: 26) +!65 = !DILocation(line: 18, column: 3, scope: !24) +!66 = !DILocation(line: 18, column: 8, scope: !24) +!67 = !DILocation(line: 0, scope: !34, inlinedAt: !68) +!68 = distinct !DILocation(line: 18, column: 8, scope: !61) +!69 = !DILocation(line: 5, column: 19, scope: !34, inlinedAt: !68) +!70 = !DILocation(line: 5, column: 28, scope: !64, inlinedAt: !68) +!71 = !DILocation(line: 20, column: 7, scope: !72) +!72 = distinct !DILexicalBlock(scope: !24, file: !1, line: 20, column: 7) +!73 = !DILocation(line: 0, scope: !39, inlinedAt: !74) +!74 = distinct !DILocation(line: 23, column: 10, scope: !72) +!75 = !DILocation(line: 20, column: 7, scope: !24) +!76 = !DILocation(line: 6, column: 29, scope: !39, inlinedAt: !77) +!77 = distinct !DILocation(line: 21, column: 10, scope: !72) +!78 = !DILocation(line: 6, column: 38, scope: !39, inlinedAt: !77) +!79 = !DILocation(line: 21, column: 5, scope: !72) +!80 = !DILocation(line: 6, column: 29, scope: !39, inlinedAt: !74) +!81 = !DILocation(line: 6, column: 38, scope: !39, inlinedAt: !74) +!82 = !DILocation(line: 0, scope: !39, inlinedAt: !83) +!83 = distinct !DILocation(line: 24, column: 8, scope: !24) +!84 = !DILocation(line: 6, column: 29, scope: !39, inlinedAt: !83) +!85 = !DILocation(line: 6, column: 38, scope: !39, inlinedAt: !83) +!86 = !DILocation(line: 25, column: 1, scope: !24) +!87 = !DILocation(line: 25, column: 1, scope: !61) diff --git a/test/CodeGen/X86/fpstack-debuginstr-kill.ll b/test/CodeGen/X86/fpstack-debuginstr-kill.ll index 2ee67dc190b..4de54b13b2a 100644 --- a/test/CodeGen/X86/fpstack-debuginstr-kill.ll +++ b/test/CodeGen/X86/fpstack-debuginstr-kill.ll @@ -60,7 +60,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) !14 = !DIDerivedType(tag: DW_TAG_typedef, name: "fpu_extended", line: 3, file: !5, baseType: !15) !15 = !DIDerivedType(tag: DW_TAG_typedef, name: "fpu_register", line: 2, file: !5, baseType: !16) !16 = !DIDerivedType(tag: DW_TAG_typedef, name: "uae_f64", line: 1, file: !5, baseType: !17) -!17 = !DIBasicType(tag: DW_TAG_base_type, name: "double", size: 64, align: 64, encoding: DW_ATE_float) +!17 = !DIBasicType(tag: DW_TAG_base_type, name: "long double", size: 128, align: 128, encoding: DW_ATE_float) !18 = !DILocalVariable(name: "a", line: 15, scope: !4, file: !6, type: !19) !19 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !20 = !DILocalVariable(name: "value", line: 16, scope: !4, file: !6, type: !14) diff --git a/test/CodeGen/X86/misched-code-difference-with-debug.ll b/test/CodeGen/X86/misched-code-difference-with-debug.ll index 0a1ea830a41..db0bb6388f2 100644 --- a/test/CodeGen/X86/misched-code-difference-with-debug.ll +++ b/test/CodeGen/X86/misched-code-difference-with-debug.ll @@ -49,10 +49,10 @@ entry: %0 = load i8, i8* @argc, align 1 tail call void @llvm.dbg.value(metadata i8 %0, i64 0, metadata !19, metadata !29), !dbg !DILocation(scope: !13) %conv = sext i8 %0 to i32 - tail call void @llvm.dbg.value(metadata %class.C* %c, i64 0, metadata !18, metadata !29), !dbg !DILocation(scope: !13) + tail call void @llvm.dbg.value(metadata %class.C* %c, i64 0, metadata !18, metadata !DIExpression(DW_OP_deref)), !dbg !DILocation(scope: !13) %call = call i32 (%class.C*, i8, i8, i8, ...) @test_function(%class.C* %c, i8 signext 0, i8 signext %0, i8 signext 0, i32 %conv) %1 = load i8, i8* @argc, align 1 - call void @llvm.dbg.value(metadata %class.C* %c, i64 0, metadata !18, metadata !29), !dbg !DILocation(scope: !13) + call void @llvm.dbg.value(metadata %class.C* %c, i64 0, metadata !18, metadata !DIExpression(DW_OP_deref)), !dbg !DILocation(scope: !13) %call2 = call i32 (%class.C*, i8, i8, i8, ...) @test_function(%class.C* %c, i8 signext 0, i8 signext %1, i8 signext 0, i32 %conv) ret void } diff --git a/test/DebugInfo/AArch64/frameindices.ll b/test/DebugInfo/AArch64/frameindices.ll index 5fb03dfc883..aea95996f8e 100644 --- a/test/DebugInfo/AArch64/frameindices.ll +++ b/test/DebugInfo/AArch64/frameindices.ll @@ -239,7 +239,7 @@ attributes #5 = { builtin } !76 = !DIExpression(DW_OP_bit_piece, 8, 120) !77 = !DILocation(line: 17, column: 12, scope: !31, inlinedAt: !75) !78 = !DIExpression(DW_OP_bit_piece, 136, 56) -!79 = !DIExpression() +!79 = !DIExpression(DW_OP_deref) !80 = !DILocation(line: 19, column: 5, scope: !34) !81 = !DILocation(line: 20, column: 7, scope: !34) !82 = !DILocation(line: 20, column: 5, scope: !34) diff --git a/test/DebugInfo/Generic/2010-05-03-OriginDIE.ll b/test/DebugInfo/Generic/2010-05-03-OriginDIE.ll index 9ebfb06cc5e..e2b1ce268d3 100644 --- a/test/DebugInfo/Generic/2010-05-03-OriginDIE.ll +++ b/test/DebugInfo/Generic/2010-05-03-OriginDIE.ll @@ -23,12 +23,12 @@ entry: %a10 = call i64 @llvm.bswap.i64(i64 %a9) nounwind ; [#uses=1] %a11 = getelementptr inbounds %struct.gpt_t, %struct.gpt_t* %gpt, i32 0, i32 8, !dbg !7 ; [#uses=1] %a12 = load i64, i64* %a11, align 4, !dbg !7 ; [#uses=1] - call void @llvm.dbg.declare(metadata i64* %data_addr.i17, metadata !8, metadata !DIExpression()) nounwind, !dbg !14 + call void @llvm.dbg.declare(metadata i64* %data_addr.i17, metadata !8, metadata !DIExpression(DW_OP_deref)) nounwind, !dbg !14 store i64 %a12, i64* %data_addr.i17, align 8 call void @llvm.dbg.value(metadata !6, i64 0, metadata !15, metadata !DIExpression()) nounwind, !dbg !DILocation(scope: !16) call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !19, metadata !DIExpression()) nounwind, !dbg !DILocation(scope: !16) call void @llvm.dbg.declare(metadata !6, metadata !23, metadata !DIExpression()) nounwind, !dbg !DILocation(scope: !24) - call void @llvm.dbg.value(metadata i64* %data_addr.i17, i64 0, metadata !34, metadata !DIExpression()) nounwind, !dbg !DILocation(scope: !24) + call void @llvm.dbg.value(metadata i64* %data_addr.i17, i64 0, metadata !34, metadata !DIExpression(DW_OP_deref)) nounwind, !dbg !DILocation(scope: !24) %a13 = load volatile i64, i64* %data_addr.i17, align 8 ; [#uses=1] %a14 = call i64 @llvm.bswap.i64(i64 %a13) nounwind ; [#uses=2] %a15 = add i64 %a10, %a14, !dbg !7 ; [#uses=1] diff --git a/test/DebugInfo/Generic/incorrect-variable-debugloc1.ll b/test/DebugInfo/Generic/incorrect-variable-debugloc1.ll index 33af0baeb65..78a738261c8 100644 --- a/test/DebugInfo/Generic/incorrect-variable-debugloc1.ll +++ b/test/DebugInfo/Generic/incorrect-variable-debugloc1.ll @@ -35,7 +35,7 @@ entry: %call = tail call i32 @_Z4funcv(), !dbg !19 tail call void @llvm.dbg.value(metadata i32 %call, i64 0, metadata !10, metadata !16), !dbg !17 store volatile i32 %call, i32* %c, align 4, !dbg !19 - tail call void @llvm.dbg.value(metadata i32* %c, i64 0, metadata !10, metadata !16), !dbg !17 + tail call void @llvm.dbg.value(metadata i32* %c, i64 0, metadata !10, metadata !21), !dbg !17 %c.0.c.0. = load volatile i32, i32* %c, align 4, !dbg !20 ret i32 %c.0.c.0., !dbg !20 } @@ -74,4 +74,5 @@ attributes #2 = { nounwind readnone } !18 = !DILocation(line: 5, column: 3, scope: !4) !19 = !DILocation(line: 6, column: 7, scope: !4) !20 = !DILocation(line: 7, column: 3, scope: !4) +!21 = !DIExpression(DW_OP_deref) diff --git a/test/DebugInfo/Generic/two-cus-from-same-file.ll b/test/DebugInfo/Generic/two-cus-from-same-file.ll index 65d376c814d..83321e950ed 100644 --- a/test/DebugInfo/Generic/two-cus-from-same-file.ll +++ b/test/DebugInfo/Generic/two-cus-from-same-file.ll @@ -24,7 +24,8 @@ declare i32 @puts(i8* nocapture) nounwind define i32 @main(i32 %argc, i8** nocapture %argv) nounwind !dbg !12 { entry: tail call void @llvm.dbg.value(metadata i32 %argc, i64 0, metadata !21, metadata !DIExpression()), !dbg !26 - tail call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !22, metadata !DIExpression()), !dbg !27 + ; Avoid talking about the pointer size in debug info because that's target dependent + tail call void @llvm.dbg.value(metadata i8** %argv, i64 0, metadata !22, metadata !DIExpression(DW_OP_deref, DW_OP_deref)), !dbg !27 %puts = tail call i32 @puts(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @str1, i32 0, i32 0)), !dbg !28 tail call void @foo() nounwind, !dbg !30 ret i32 0, !dbg !31 @@ -46,14 +47,12 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon !10 = !{!12} !12 = distinct !DISubprogram(name: "main", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 11, file: !32, scope: !6, type: !13, variables: !19) !13 = !DISubroutineType(types: !14) -!14 = !{!15, !15, !16} +!14 = !{!15, !15, !18} !15 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) -!16 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, baseType: !17) -!17 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, baseType: !18) !18 = !DIBasicType(tag: DW_TAG_base_type, name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) !19 = !{!21, !22} !21 = !DILocalVariable(name: "argc", line: 11, arg: 1, scope: !12, file: !6, type: !15) -!22 = !DILocalVariable(name: "argv", line: 11, arg: 2, scope: !12, file: !6, type: !16) +!22 = !DILocalVariable(name: "argv", line: 11, arg: 2, scope: !12, file: !6, type: !18) !23 = !DILocation(line: 6, column: 3, scope: !24) !24 = distinct !DILexicalBlock(line: 5, column: 16, file: !32, scope: !5) !25 = !DILocation(line: 7, column: 1, scope: !24) diff --git a/test/DebugInfo/Mips/dsr-non-fixed-objects.ll b/test/DebugInfo/Mips/dsr-non-fixed-objects.ll index 7bd68318ca5..ddd24ff5ee1 100644 --- a/test/DebugInfo/Mips/dsr-non-fixed-objects.ll +++ b/test/DebugInfo/Mips/dsr-non-fixed-objects.ll @@ -65,7 +65,7 @@ entry: %1 = load i32, i32* %b.addr, align 4, !dbg !35 %add = add nsw i32 %0, %1, !dbg !36 store i32 %add, i32* %c, align 16, !dbg !33 - call void @llvm.dbg.declare(metadata i32** %w, metadata !37, metadata !16), !dbg !38 + call void @llvm.dbg.declare(metadata i32** %w, metadata !37, metadata !DIExpression(DW_OP_deref)), !dbg !38 %2 = load i32, i32* %c, align 16, !dbg !39 %3 = alloca i8, i32 %2, !dbg !40 %4 = bitcast i8* %3 to i32*, !dbg !40 diff --git a/test/DebugInfo/X86/bbjoin.ll b/test/DebugInfo/X86/bbjoin.ll index 8061a8d2ce9..385cb6cc779 100644 --- a/test/DebugInfo/X86/bbjoin.ll +++ b/test/DebugInfo/X86/bbjoin.ll @@ -30,9 +30,9 @@ entry: call void @llvm.lifetime.start(i64 4, i8* %0) #4, !dbg !14 tail call void @llvm.dbg.value(metadata i32 23, i64 0, metadata !9, metadata !15), !dbg !16 store i32 23, i32* %x, align 4, !dbg !16, !tbaa !17 - tail call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !9, metadata !15), !dbg !16 + tail call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !9, metadata !DIExpression(DW_OP_deref)), !dbg !16 call void @g(i32* nonnull %x) #4, !dbg !21 - call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !9, metadata !15), !dbg !16 + call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !9, metadata !DIExpression(DW_OP_deref)), !dbg !16 %1 = load i32, i32* %x, align 4, !dbg !22, !tbaa !17 %cmp = icmp eq i32 %1, 42, !dbg !24 br i1 %cmp, label %if.then, label %if.end, !dbg !25 @@ -44,7 +44,7 @@ if.then: ; preds = %entry if.end: ; preds = %if.then, %entry %2 = phi i32 [ 43, %if.then ], [ %1, %entry ], !dbg !27 - call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !9, metadata !15), !dbg !16 + call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !9, metadata !DIExpression(DW_OP_deref)), !dbg !16 call void @llvm.lifetime.end(i64 4, i8* %0) #4, !dbg !28 ret i32 %2, !dbg !29 } diff --git a/test/DebugInfo/X86/dbg-value-dag-combine.ll b/test/DebugInfo/X86/dbg-value-dag-combine.ll index 6243be8aa4a..39d533fa3ca 100644 --- a/test/DebugInfo/X86/dbg-value-dag-combine.ll +++ b/test/DebugInfo/X86/dbg-value-dag-combine.ll @@ -1,6 +1,6 @@ ; RUN: llc < %s | FileCheck %s -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" -target triple = "x86_64-apple-darwin10.0.0" +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:32" +target triple = "i686-apple-darwin" ; PR 9817 diff --git a/test/DebugInfo/X86/dbg-value-isel.ll b/test/DebugInfo/X86/dbg-value-isel.ll index ae76beb8140..e673410ab26 100644 --- a/test/DebugInfo/X86/dbg-value-isel.ll +++ b/test/DebugInfo/X86/dbg-value-isel.ll @@ -86,7 +86,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon !2 = distinct !DICompileUnit(language: DW_LANG_C89, producer: "clc", isOptimized: false, emissionKind: 1, file: !20, enums: !21, retainedTypes: !21, subprograms: !19, imports: null) !3 = !DISubroutineType(types: !4) !4 = !{null, !5} -!5 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 32, align: 32, scope: !2, baseType: !6) +!5 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align:64, scope: !2, baseType: !6) !6 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint", file: !20, scope: !2, baseType: !7) !7 = !DIBasicType(tag: DW_TAG_base_type, name: "unsigned int", size: 32, align: 32, encoding: DW_ATE_unsigned) !8 = !DILocalVariable(name: "ip", line: 1, arg: 1, scope: !0, file: !1, type: !5) diff --git a/test/DebugInfo/X86/dbg-value-terminator.ll b/test/DebugInfo/X86/dbg-value-terminator.ll index 8b8bdec18ab..45b5886dc73 100644 --- a/test/DebugInfo/X86/dbg-value-terminator.ll +++ b/test/DebugInfo/X86/dbg-value-terminator.ll @@ -7,6 +7,7 @@ ; ; CHECK-LABEL: test: ; CHECK: ##DEBUG_VALUE: foo:i + %a = type { i32, i32 } define hidden fastcc %a* @test() #1 !dbg !1 { @@ -87,7 +88,7 @@ VEC_edge_base_index.exit7.i: ; preds = %"3.i5.i" "44.i": ; preds = %"42.i" %2 = load %a*, %a** undef, align 8, !dbg !12 %3 = bitcast %a* %2 to %a*, !dbg !12 - call void @llvm.dbg.value(metadata %a* %3, i64 0, metadata !6, metadata !DIExpression()), !dbg !12 + call void @llvm.dbg.value(metadata %a* %3, i64 0, metadata !6, metadata !DIExpression(DW_OP_deref)), !dbg !12 br label %may_unswitch_on.exit, !dbg !12 "45.i": ; preds = %"38.i" diff --git a/test/DebugInfo/X86/elf-names.ll b/test/DebugInfo/X86/elf-names.ll index 2c857192762..219847cdf9a 100644 --- a/test/DebugInfo/X86/elf-names.ll +++ b/test/DebugInfo/X86/elf-names.ll @@ -81,7 +81,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon !20 = !DISubprogram(name: "D", line: 4, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 4, file: !6, scope: !10, type: !21) !21 = !DISubroutineType(types: !22) !22 = !{null, !9, !23} -!23 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !24) +!23 = !DIDerivedType(tag: DW_TAG_reference_type, size: 64, align: 64, baseType: !24) !24 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !10) !27 = !{!29} !29 = !DILocalVariable(name: "this", line: 12, arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !5, file: !6, type: !30) diff --git a/test/DebugInfo/X86/nodebug_with_debug_loc.ll b/test/DebugInfo/X86/nodebug_with_debug_loc.ll index 4ccf22bdc5a..1bf96c02fe1 100644 --- a/test/DebugInfo/X86/nodebug_with_debug_loc.ll +++ b/test/DebugInfo/X86/nodebug_with_debug_loc.ll @@ -58,8 +58,8 @@ entry: for.body: ; preds = %for.body, %entry %iter.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ] call void @llvm.lifetime.start(i64 4, i8* %0), !dbg !26 - call void @llvm.dbg.value(metadata %struct.string* %str2.i, i64 0, metadata !16, metadata !DIExpression()) #3, !dbg !26 - call void @llvm.dbg.value(metadata %struct.string* %str2.i, i64 0, metadata !27, metadata !DIExpression()) #3, !dbg !29 + call void @llvm.dbg.value(metadata %struct.string* %str2.i, i64 0, metadata !16, metadata !DIExpression(DW_OP_deref)) #3, !dbg !26 + call void @llvm.dbg.value(metadata %struct.string* %str2.i, i64 0, metadata !27, metadata !DIExpression(DW_OP_deref)) #3, !dbg !29 call void @_Z4sinkPKv(i8* undef) #3, !dbg !29 call void @_Z4sinkPKv(i8* %0) #3, !dbg !30 call void @llvm.lifetime.end(i64 4, i8* %0), !dbg !31 diff --git a/test/DebugInfo/X86/nophysreg.ll b/test/DebugInfo/X86/nophysreg.ll index ddf014b43b7..db9cabf3c7c 100644 --- a/test/DebugInfo/X86/nophysreg.ll +++ b/test/DebugInfo/X86/nophysreg.ll @@ -88,25 +88,25 @@ while.cond.loopexit: ; preds = %while.body4, %while while.body: ; preds = %entry, %while.cond.loopexit store i32 0, i32* %ref.tmp, align 4, !dbg !41, !tbaa !42 - call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !21, metadata !36), !dbg !46 + call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !21, metadata !DIExpression(DW_OP_deref)), !dbg !46 call void @_Z4funcRKiS0_(i32* dereferenceable(4) %x, i32* dereferenceable(4) %ref.tmp), !dbg !47 %call29 = call i32 @_Z4condv(), !dbg !48 %tobool310 = icmp eq i32 %call29, 0, !dbg !48 br i1 %tobool310, label %while.cond.loopexit, label %while.body4, !dbg !49 while.body4: ; preds = %while.body, %while.body4 - call void @llvm.dbg.value(metadata i8* %y, i64 0, metadata !23, metadata !36), !dbg !50 + call void @llvm.dbg.value(metadata i8* %y, i64 0, metadata !23, metadata !DIExpression(DW_OP_deref)), !dbg !50 call void @_Z4funcPv(i8* %y), !dbg !51 - call void @llvm.dbg.value(metadata i8* %j, i64 0, metadata !26, metadata !36), !dbg !52 + call void @llvm.dbg.value(metadata i8* %j, i64 0, metadata !26, metadata !DIExpression(DW_OP_deref)), !dbg !52 call void @_Z4funcPv(i8* %j), !dbg !53 - call void @llvm.dbg.value(metadata i8* %I, i64 0, metadata !27, metadata !36), !dbg !54 + call void @llvm.dbg.value(metadata i8* %I, i64 0, metadata !27, metadata !DIExpression(DW_OP_deref)), !dbg !54 call void @_Z4funcPv(i8* %I), !dbg !55 store i32 0, i32* %ref.tmp5, align 4, !dbg !56, !tbaa !42 store i32 0, i32* %ref.tmp6, align 4, !dbg !57, !tbaa !42 call void @_Z4funcRKiS0_(i32* dereferenceable(4) %ref.tmp5, i32* dereferenceable(4) %ref.tmp6), !dbg !58 call void @llvm.dbg.declare(metadata %struct.A* undef, metadata !28, metadata !36), !dbg !59 call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !28, metadata !33), !dbg !59 - call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !21, metadata !36), !dbg !46 + call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !21, metadata !DIExpression(DW_OP_deref)), !dbg !46 call void @llvm.dbg.value(metadata i32* %x, i64 0, metadata !60, metadata !33), !dbg !62 call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !60, metadata !35), !dbg !62 call void @llvm.dbg.declare(metadata %struct.A* undef, metadata !60, metadata !36), !dbg !62 diff --git a/test/DebugInfo/X86/rvalue-ref.ll b/test/DebugInfo/X86/rvalue-ref.ll index c72a3aa2c04..a348b1d8d25 100644 --- a/test/DebugInfo/X86/rvalue-ref.ll +++ b/test/DebugInfo/X86/rvalue-ref.ll @@ -30,7 +30,7 @@ declare i32 @printf(i8*, ...) !6 = !DIFile(filename: "foo.cpp", directory: "/Users/echristo/tmp") !7 = !DISubroutineType(types: !8) !8 = !{null, !9} -!9 = !DIDerivedType(tag: DW_TAG_rvalue_reference_type, baseType: !10) +!9 = !DIDerivedType(tag: DW_TAG_rvalue_reference_type, size: 64, align: 64, baseType: !10) !10 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !11 = !DILocalVariable(name: "i", line: 4, arg: 1, scope: !5, file: !6, type: !9) !12 = !DILocation(line: 4, column: 17, scope: !5) diff --git a/test/DebugInfo/X86/sret.ll b/test/DebugInfo/X86/sret.ll index 45af2821741..e48ed6567da 100644 --- a/test/DebugInfo/X86/sret.ll +++ b/test/DebugInfo/X86/sret.ll @@ -284,7 +284,7 @@ attributes #7 = { builtin nounwind } !19 = !DISubprogram(name: "A", line: 5, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 5, file: !1, scope: !"_ZTS1A", type: !20) !20 = !DISubroutineType(types: !21) !21 = !{null, !17, !22} -!22 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !23) +!22 = !DIDerivedType(tag: DW_TAG_reference_type, size: 64, align: 64, baseType: !23) !23 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !"_ZTS1A") !25 = !DISubprogram(name: "operator=", linkageName: "_ZN1AaSERKS_", line: 7, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 7, file: !1, scope: !"_ZTS1A", type: !26) !26 = !DISubroutineType(types: !27) diff --git a/test/Transforms/CodeGenPrepare/X86/catchpad-phi-cast.ll b/test/Transforms/CodeGenPrepare/X86/catchpad-phi-cast.ll index 8c5e01e3634..cd3c1e8088e 100644 --- a/test/Transforms/CodeGenPrepare/X86/catchpad-phi-cast.ll +++ b/test/Transforms/CodeGenPrepare/X86/catchpad-phi-cast.ll @@ -113,6 +113,6 @@ catch: !10 = !{!"clang version 3.8.0 (trunk 254906) (llvm/trunk 254917)"} !11 = !DILocalVariable(name: "p", scope: !4, file: !1, line: 2, type: !12) !12 = !DIBasicType(name: "char", size: 8, align: 8, encoding: DW_ATE_signed_char) -!13 = !DIExpression() +!13 = !DIExpression(DW_OP_deref) !14 = !DILocation(line: 2, column: 8, scope: !4) !15 = !DILocation(line: 3, column: 1, scope: !4) diff --git a/test/Transforms/DeadStoreElimination/inst-limits.ll b/test/Transforms/DeadStoreElimination/inst-limits.ll index 5848ab89bc8..6c91232c4ef 100644 --- a/test/Transforms/DeadStoreElimination/inst-limits.ll +++ b/test/Transforms/DeadStoreElimination/inst-limits.ll @@ -118,7 +118,7 @@ entry: ; Insert a meaningless dbg.value intrinsic; it should have no ; effect on the working of DSE in any way. - call void @llvm.dbg.value(metadata i32* undef, i64 0, metadata !10, metadata !DIExpression()), !dbg !DILocation(scope: !4) + call void @llvm.dbg.value(metadata i32 undef, i64 0, metadata !10, metadata !DIExpression()), !dbg !DILocation(scope: !4) ; CHECK: store i32 -1, i32* @x, align 4 store i32 -1, i32* @x, align 4 diff --git a/test/Transforms/SLPVectorizer/X86/debug_info.ll b/test/Transforms/SLPVectorizer/X86/debug_info.ll index 4472225811b..b3173a45742 100644 --- a/test/Transforms/SLPVectorizer/X86/debug_info.ll +++ b/test/Transforms/SLPVectorizer/X86/debug_info.ll @@ -25,8 +25,8 @@ define i32 @depth(double* nocapture %A, i32 %m) #0 !dbg !4 { entry: tail call void @llvm.dbg.value(metadata double* %A, i64 0, metadata !12, metadata !DIExpression()), !dbg !19 tail call void @llvm.dbg.value(metadata i32 %m, i64 0, metadata !13, metadata !DIExpression()), !dbg !19 - tail call void @llvm.dbg.value(metadata i32 00, i64 0, metadata !14, metadata !DIExpression()), !dbg !21 - tail call void @llvm.dbg.value(metadata i32 02, i64 0, metadata !15, metadata !DIExpression()), !dbg !21 + tail call void @llvm.dbg.value(metadata double 0.0, i64 0, metadata !14, metadata !DIExpression()), !dbg !21 + tail call void @llvm.dbg.value(metadata double 0.2, i64 0, metadata !15, metadata !DIExpression()), !dbg !21 tail call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !16, metadata !DIExpression()), !dbg !23 %cmp8 = icmp sgt i32 %m, 0, !dbg !23 br i1 %cmp8, label %for.body.lr.ph, label %for.end, !dbg !23