Index: llvm/include/llvm/IR/IntrinsicInst.h =================================================================== --- llvm/include/llvm/IR/IntrinsicInst.h +++ llvm/include/llvm/IR/IntrinsicInst.h @@ -274,7 +274,7 @@ for (Value *OldValue : location_ops()) { if (!RemovedValues.insert(OldValue).second) continue; - Value *Undef = UndefValue::get(OldValue->getType()); + Value *Undef = PoisonValue::get(OldValue->getType()); replaceVariableLocationOp(OldValue, Undef); } } Index: llvm/test/DebugInfo/Generic/assignment-tracking/loop-deletion/dead-loop.ll =================================================================== --- llvm/test/DebugInfo/Generic/assignment-tracking/loop-deletion/dead-loop.ll +++ llvm/test/DebugInfo/Generic/assignment-tracking/loop-deletion/dead-loop.ll @@ -18,7 +18,7 @@ ;; mistake. ; CHECK: for.end: -; CHECK-NEXT: call void @llvm.dbg.assign(metadata i32 undef,{{.+}}, metadata !DIExpression({{.+}}), metadata ![[ID:[0-9]+]], metadata ptr %Counter, metadata !DIExpression()) +; CHECK-NEXT: call void @llvm.dbg.assign(metadata i32 poison,{{.+}}, metadata !DIExpression({{.+}}), metadata ![[ID:[0-9]+]], metadata ptr %Counter, metadata !DIExpression()) ; CHECK-NEXT: store i32 2, ptr %Counter, align 4,{{.*}}!DIAssignID ![[ID]] define dso_local void @_Z3funv() local_unnamed_addr #0 !dbg !7 { Index: llvm/test/DebugInfo/Generic/assignment-tracking/salvage-value.ll =================================================================== --- llvm/test/DebugInfo/Generic/assignment-tracking/salvage-value.ll +++ llvm/test/DebugInfo/Generic/assignment-tracking/salvage-value.ll @@ -16,7 +16,7 @@ call void @llvm.dbg.assign(metadata i32 %add1, metadata !32, metadata !DIExpression(), metadata !31, metadata ptr %p, metadata !DIExpression()), !dbg !16 ;; %add1 is not salvaged as it requires two values and DIArgList is ;; not (yet) supported for dbg.assigns. -; CHECK-NEXT: call void @llvm.dbg.assign(metadata i32 undef,{{.+}}, metadata !DIExpression(),{{.+}}, metadata ptr %p, metadata !DIExpression()) +; CHECK-NEXT: call void @llvm.dbg.assign(metadata i32 poison,{{.+}}, metadata !DIExpression(),{{.+}}, metadata ptr %p, metadata !DIExpression()) %arrayidx0 = getelementptr inbounds i32, ptr %p, i32 0 call void @llvm.dbg.assign(metadata i32 %x, metadata !14, metadata !DIExpression(), metadata !17, metadata ptr %arrayidx0, metadata !DIExpression()), !dbg !16 Index: llvm/test/DebugInfo/Generic/pr40628.ll =================================================================== --- llvm/test/DebugInfo/Generic/pr40628.ll +++ llvm/test/DebugInfo/Generic/pr40628.ll @@ -11,7 +11,7 @@ ; being assigned the 'undef' value. ; CHECK: @foo -; CHECK-NEXT: dbg.value(metadata i32 undef, metadata ![[DEADVAR:[0-9]+]], +; CHECK-NEXT: dbg.value(metadata i32 poison, metadata ![[DEADVAR:[0-9]+]], ; CHECK-NEXT: load ; CHECK-NEXT: dbg.value(metadata i32 %{{[0-9]+}}, metadata ![[LIVEVAR:[0-9]+]], ; CHECK-NEXT: store Index: llvm/test/DebugInfo/X86/dead-store-elimination-marks-undef.ll =================================================================== --- llvm/test/DebugInfo/X86/dead-store-elimination-marks-undef.ll +++ llvm/test/DebugInfo/X86/dead-store-elimination-marks-undef.ll @@ -8,7 +8,7 @@ define dso_local i32 @main() local_unnamed_addr !dbg !7 { %1 = alloca i32, align 4 %2 = load i32, i32* @b, align 1, !dbg !13 - ; CHECK: call void @llvm.dbg.value(metadata i32 undef + ; CHECK: call void @llvm.dbg.value(metadata i32 poison call void @llvm.dbg.value(metadata i32 %2, metadata !12, metadata !DIExpression()), !dbg !13 store i32 %2, i32* %1, align 4, !dbg !13 ret i32 0, !dbg !13 Index: llvm/test/DebugInfo/X86/licm-undef-dbg-value.ll =================================================================== --- llvm/test/DebugInfo/X86/licm-undef-dbg-value.ll +++ llvm/test/DebugInfo/X86/licm-undef-dbg-value.ll @@ -1,7 +1,7 @@ ; RUN: opt -passes=licm %s -S | FileCheck %s ; CHECK: for.body: -; CHECK-NEXT: llvm.dbg.value(metadata i8 undef +; CHECK-NEXT: llvm.dbg.value(metadata i8 poison ; The load is loop invariant. Check that we leave an undef dbg.value behind ; when licm sinks the instruction. Index: llvm/test/DebugInfo/limit-arglist-size.ll =================================================================== --- llvm/test/DebugInfo/limit-arglist-size.ll +++ llvm/test/DebugInfo/limit-arglist-size.ll @@ -4,7 +4,7 @@ ; referenced by a dbg.value to 16. This test checks that we do not exceed this ; limit during salvaging. -; CHECK: DIArgList(i32 undef +; CHECK: DIArgList(i32 poison ; CHECK-NOT: DW_OP_LLVM_arg, 16 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" Index: llvm/test/DebugInfo/salvage-limit-expr-size.ll =================================================================== --- llvm/test/DebugInfo/salvage-limit-expr-size.ll +++ llvm/test/DebugInfo/salvage-limit-expr-size.ll @@ -13,8 +13,8 @@ call void @llvm.dbg.value(metadata i32 %add.1, metadata !12, metadata !DIExpression(DW_OP_constu, 1, DW_OP_plus, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_stack_value)), !dbg !13 call void @llvm.dbg.value(metadata i32 %add.2, metadata !12, metadata !DIExpression(DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_stack_value)), !dbg !13 ;; These expressions should be set undef, as they would salvage up to exactly 129 elements. - ; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 undef, metadata ![[VAR_C]] - ; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 undef, metadata ![[VAR_C]] + ; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 poison, metadata ![[VAR_C]] + ; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 poison, metadata ![[VAR_C]] call void @llvm.dbg.value(metadata i32 %add.1, metadata !12, metadata !DIExpression(DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_stack_value)), !dbg !13 call void @llvm.dbg.value(metadata i32 %add.2, metadata !12, metadata !DIExpression(DW_OP_constu, 1, DW_OP_plus, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_plus_uconst, 1, DW_OP_stack_value)), !dbg !13 %mul = mul nsw i32 %a, %b, !dbg !15 Index: llvm/test/Transforms/BDCE/pr41925.ll =================================================================== --- llvm/test/Transforms/BDCE/pr41925.ll +++ llvm/test/Transforms/BDCE/pr41925.ll @@ -29,10 +29,10 @@ for.cond2thread-pre-split.preheader: ; preds = %entry br label %for.cond2thread-pre-split, !dbg !23 for.cond2thread-pre-split: ; preds = %for.cond2thread-pre-split.preheader, %for.inc7 -;CHECK: call void @llvm.dbg.value(metadata i8 undef +;CHECK: call void @llvm.dbg.value(metadata i8 poison %l_177.06 = phi i8 [ %l_177.1.lcssa, %for.inc7 ], [ 2, %for.cond2thread-pre-split.preheader ] call void @llvm.dbg.value(metadata i8 %l_177.06, metadata !17, metadata !DIExpression()), !dbg !18 -;CHECK: call void @llvm.dbg.value(metadata i8 undef +;CHECK: call void @llvm.dbg.value(metadata i8 poison %.pr1 = load i8, i8* @a, align 1, !dbg !24 call void @llvm.dbg.value(metadata i8 %l_177.06, metadata !17, metadata !DIExpression()), !dbg !18 %cmp42 = icmp sgt i8 %.pr1, -1, !dbg !27 @@ -42,8 +42,8 @@ br label %for.body6, !dbg !28 for.body6: ; preds = %for.body6.preheader, %for.body6 -;CHECK: call void @llvm.dbg.value(metadata i8 undef -;CHECK: call void @llvm.dbg.value(metadata i8 undef +;CHECK: call void @llvm.dbg.value(metadata i8 poison +;CHECK: call void @llvm.dbg.value(metadata i8 poison %l_177.13 = phi i8 [ %inc, %for.body6 ], [ %l_177.06, %for.body6.preheader ] call void @llvm.dbg.value(metadata i8 %l_177.13, metadata !17, metadata !DIExpression()), !dbg !18 call void @llvm.dbg.value(metadata i8 %l_177.13, metadata !17, metadata !DIExpression(DW_OP_plus_uconst, 1, DW_OP_stack_value)), !dbg !18 @@ -61,7 +61,7 @@ br label %for.inc7, !dbg !35 for.inc7: ; preds = %for.inc7.loopexit, %for.cond2thread-pre-split -;CHECK: call void @llvm.dbg.value(metadata i8 undef +;CHECK: call void @llvm.dbg.value(metadata i8 poison %l_177.1.lcssa = phi i8 [ %l_177.06, %for.cond2thread-pre-split ], [ %inc.lcssa, %for.inc7.loopexit ], !dbg !18 %1 = load i8, i8* @b, align 1, !dbg !35 %inc8 = add i8 %1, 1, !dbg !35 Index: llvm/test/Transforms/InstCombine/debuginfo-dce.ll =================================================================== --- llvm/test/Transforms/InstCombine/debuginfo-dce.ll +++ llvm/test/Transforms/InstCombine/debuginfo-dce.ll @@ -34,7 +34,7 @@ call void @llvm.dbg.value(metadata %struct.entry* %1, metadata !18, metadata !20), !dbg !19 ; CHECK: define void @salvage_load ; CHECK-NEXT: entry: -; CHECK-NEXT: call void @llvm.dbg.value(metadata %struct.entry* undef +; CHECK-NEXT: call void @llvm.dbg.value(metadata %struct.entry* poison store %struct.entry* %1, %struct.entry** %im_not_dead, align 8 ret void, !dbg !21 } Index: llvm/test/Transforms/InstCombine/debuginfo-sink.ll =================================================================== --- llvm/test/Transforms/InstCombine/debuginfo-sink.ll +++ llvm/test/Transforms/InstCombine/debuginfo-sink.ll @@ -33,7 +33,7 @@ ; value range. ; CHECK-LABEL: define i32 @bar( -; CHECK: call void @llvm.dbg.value(metadata ptr undef, +; CHECK: call void @llvm.dbg.value(metadata ptr poison, ; CHECK-NEXT: br label %sink2 define i32 @bar(ptr %a, i32 %b) !dbg !70 { Index: llvm/test/Transforms/InstCombine/erase-dbg-values-at-dead-alloc-site.ll =================================================================== --- llvm/test/Transforms/InstCombine/erase-dbg-values-at-dead-alloc-site.ll +++ llvm/test/Transforms/InstCombine/erase-dbg-values-at-dead-alloc-site.ll @@ -12,7 +12,7 @@ ; ; RUN-ONCE-LABEL: @t1( ; RUN-ONCE-NEXT: llvm.dbg.value(metadata i32 %0, metadata [[t1_arg0:![0-9]+]], metadata !DIExpression()) -; RUN-ONCE-NEXT: llvm.dbg.value(metadata ptr undef, metadata [[t1_fake_ptr:![0-9]+]], metadata !DIExpression()) +; RUN-ONCE-NEXT: llvm.dbg.value(metadata ptr poison, metadata [[t1_fake_ptr:![0-9]+]], metadata !DIExpression()) ; RUN-ONCE-NEXT: ret void define void @t1(i32) !dbg !9 { %2 = alloca i32, align 4 Index: llvm/test/Transforms/InstCombine/pr43893.ll =================================================================== --- llvm/test/Transforms/InstCombine/pr43893.ll +++ llvm/test/Transforms/InstCombine/pr43893.ll @@ -9,9 +9,9 @@ %0 = load i8, ptr @a, align 1, !dbg !17 %dec = add i8 %0, -1, !dbg !17 store i8 %dec, ptr @a, align 1, !dbg !17 -;CHECK: call void @llvm.dbg.value(metadata i32 undef +;CHECK: call void @llvm.dbg.value(metadata i32 poison ;CHECK: call void @llvm.dbg.value(metadata i32 -8 -;CHECK: call void @llvm.dbg.value(metadata i32 undef +;CHECK: call void @llvm.dbg.value(metadata i32 poison %conv = sext i8 %dec to i32, !dbg !17 %udiv = udiv i32 %conv, 4, !dbg !17 call void @llvm.dbg.value(metadata i32 %udiv, metadata !18, metadata !DIExpression()), !dbg !19 Index: llvm/test/Transforms/InstCombine/stacksave-debuginfo.ll =================================================================== --- llvm/test/Transforms/InstCombine/stacksave-debuginfo.ll +++ llvm/test/Transforms/InstCombine/stacksave-debuginfo.ll @@ -8,7 +8,7 @@ define ptr @test1(i32 %P) !dbg !6 { ; CHECK-LABEL: @test1( -; CHECK-NEXT: call void @llvm.dbg.value(metadata ptr undef +; CHECK-NEXT: call void @llvm.dbg.value(metadata ptr poison ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[P:%.*]] to i64, !dbg !13 ; CHECK-NEXT: [[A:%.*]] = alloca i32, i64 [[TMP1]], align 4, !dbg !13 ; CHECK-NEXT: call void @llvm.dbg.value(metadata ptr [[A]] Index: llvm/test/Transforms/LoopDeletion/diundef.ll =================================================================== --- llvm/test/Transforms/LoopDeletion/diundef.ll +++ llvm/test/Transforms/LoopDeletion/diundef.ll @@ -18,7 +18,7 @@ %exitcond = icmp ne i32 %inc, 3, !dbg !23 br i1 %exitcond, label %for.cond, label %for.end, !dbg !24, !llvm.loop !25 -; CHECK: call void @llvm.dbg.value(metadata i32 undef, metadata !16, metadata !DIExpression()), !dbg !17 +; CHECK: call void @llvm.dbg.value(metadata i32 poison, metadata !16, metadata !DIExpression()), !dbg !17 ; CHECK-NEXT: %call = tail call i32 {{.*}} @patatino() for.end: ; preds = %for.cond %call = tail call i32 (...) @patatino() #3, !dbg !27 Index: llvm/test/Transforms/LoopStrengthReduce/dbg-preserve-1.ll =================================================================== --- llvm/test/Transforms/LoopStrengthReduce/dbg-preserve-1.ll +++ llvm/test/Transforms/LoopStrengthReduce/dbg-preserve-1.ll @@ -3,7 +3,7 @@ ; Test that LSR avoids crashing on very large integer inputs. It should ; discard the variable location by creating an undef dbg.value. ; -; CHECK: call void @llvm.dbg.value(metadata i128 undef, +; CHECK: call void @llvm.dbg.value(metadata i128 poison, source_filename = "" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" Index: llvm/test/Transforms/Reassociate/reassociate_dbgvalue_discard.ll =================================================================== --- llvm/test/Transforms/Reassociate/reassociate_dbgvalue_discard.ll +++ llvm/test/Transforms/Reassociate/reassociate_dbgvalue_discard.ll @@ -11,8 +11,8 @@ define dso_local i32 @test1(i32 %a, i32 %b, i32 %c, i32 %d) local_unnamed_addr #0 !dbg !7 { ; CHECK-LABEL: @test1( ; CHECK-NEXT: entry: -; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 undef, metadata !16, metadata !DIExpression()), !dbg !20 -; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 undef, metadata !17, metadata !DIExpression()), !dbg !21 +; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 poison, metadata !16, metadata !DIExpression()), !dbg !20 +; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 poison, metadata !17, metadata !DIExpression()), !dbg !21 ; CHECK-NEXT: [[M1:%.*]] = mul i32 [[D:%.*]], [[C:%.*]], !dbg !22 ; CHECK-NEXT: [[M3:%.*]] = mul i32 [[M1]], [[A:%.*]], !dbg !23 ; CHECK-NEXT: call void @llvm.dbg.value(metadata i32 [[M3]], metadata !18, metadata !DIExpression()), !dbg !24 Index: llvm/test/Transforms/Reassociate/undef_intrinsics_when_deleting_instructions.ll =================================================================== --- llvm/test/Transforms/Reassociate/undef_intrinsics_when_deleting_instructions.ll +++ llvm/test/Transforms/Reassociate/undef_intrinsics_when_deleting_instructions.ll @@ -1,73 +1,73 @@ -; RUN: opt < %s -passes=reassociate -S | FileCheck %s - -; Check that reassociate pass now undefs debug intrinsics that reference a value -; that gets dropped and cannot be salvaged. - -; CHECK-NOT: %add = fadd fast float %a, %b -; CHECK: call void @llvm.dbg.value(metadata float undef, metadata [[VAR_X:![0-9]+]], metadata !DIExpression()) - -; CHECK-LABEL: if.then: -; CHECK-NOT: %add1 = fadd fast float %add, %c -; CHECK: call void @llvm.dbg.value(metadata float undef, metadata [[VAR_Y:![0-9]+]], metadata !DIExpression()) -; CHECK-LABEL: !0 = -; CHECK-DAG: [[VAR_Y]] = !DILocalVariable(name: "y" -; CHECK-DAG: [[VAR_X]] = !DILocalVariable(name: "x" - -define float @"?foo@@YAMMMMM@Z"(float %a, float %b, float %c, float %d) !dbg !8 { -entry: - call void @llvm.dbg.value(metadata float %d, metadata !12, metadata !DIExpression()), !dbg !13 - call void @llvm.dbg.value(metadata float %c, metadata !14, metadata !DIExpression()), !dbg !13 - call void @llvm.dbg.value(metadata float %b, metadata !15, metadata !DIExpression()), !dbg !13 - call void @llvm.dbg.value(metadata float %a, metadata !16, metadata !DIExpression()), !dbg !13 - %add = fadd fast float %a, %b, !dbg !17 - call void @llvm.dbg.value(metadata float %add, metadata !18, metadata !DIExpression()), !dbg !13 - %cmp = fcmp fast oeq float %d, 4.000000e+00, !dbg !19 - br i1 %cmp, label %if.then, label %return, !dbg !19 +; RUN: opt < %s -passes=reassociate -S | FileCheck %s -if.then: ; preds = %entry - %add1 = fadd fast float %add, %c, !dbg !20 - call void @llvm.dbg.value(metadata float %add1, metadata !23, metadata !DIExpression()), !dbg !24 - %sub = fsub fast float %add, 1.200000e+01, !dbg !25 - %sub2 = fsub fast float %add1, %sub, !dbg !25 - %mul = fmul fast float %sub2, 2.000000e+01, !dbg !25 - %div = fdiv fast float %mul, 3.000000e+00, !dbg !25 - br label %return, !dbg !25 +; Check that reassociate pass now undefs debug intrinsics that reference a value +; that gets dropped and cannot be salvaged. -return: ; preds = %entry, %if.then - %retval.0 = phi float [ %div, %if.then ], [ 0.000000e+00, %entry ], !dbg !13 - ret float %retval.0, !dbg !26 +; CHECK-NOT: %add = fadd fast float %a, %b +; CHECK: call void @llvm.dbg.value(metadata float poison, metadata [[VAR_X:![0-9]+]], metadata !DIExpression()) + +; CHECK-LABEL: if.then: +; CHECK-NOT: %add1 = fadd fast float %add, %c +; CHECK: call void @llvm.dbg.value(metadata float poison, metadata [[VAR_Y:![0-9]+]], metadata !DIExpression()) +; CHECK-LABEL: !0 = +; CHECK-DAG: [[VAR_Y]] = !DILocalVariable(name: "y" +; CHECK-DAG: [[VAR_X]] = !DILocalVariable(name: "x" + +define float @"?foo@@YAMMMMM@Z"(float %a, float %b, float %c, float %d) !dbg !8 { +entry: + call void @llvm.dbg.value(metadata float %d, metadata !12, metadata !DIExpression()), !dbg !13 + call void @llvm.dbg.value(metadata float %c, metadata !14, metadata !DIExpression()), !dbg !13 + call void @llvm.dbg.value(metadata float %b, metadata !15, metadata !DIExpression()), !dbg !13 + call void @llvm.dbg.value(metadata float %a, metadata !16, metadata !DIExpression()), !dbg !13 + %add = fadd fast float %a, %b, !dbg !17 + call void @llvm.dbg.value(metadata float %add, metadata !18, metadata !DIExpression()), !dbg !13 + %cmp = fcmp fast oeq float %d, 4.000000e+00, !dbg !19 + br i1 %cmp, label %if.then, label %return, !dbg !19 + +if.then: ; preds = %entry + %add1 = fadd fast float %add, %c, !dbg !20 + call void @llvm.dbg.value(metadata float %add1, metadata !23, metadata !DIExpression()), !dbg !24 + %sub = fsub fast float %add, 1.200000e+01, !dbg !25 + %sub2 = fsub fast float %add1, %sub, !dbg !25 + %mul = fmul fast float %sub2, 2.000000e+01, !dbg !25 + %div = fdiv fast float %mul, 3.000000e+00, !dbg !25 + br label %return, !dbg !25 + +return: ; preds = %entry, %if.then + %retval.0 = phi float [ %div, %if.then ], [ 0.000000e+00, %entry ], !dbg !13 + ret float %retval.0, !dbg !26 } -declare void @llvm.dbg.value(metadata, metadata, metadata) +declare void @llvm.dbg.value(metadata, metadata, metadata) !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!3, !4, !5, !6} !llvm.ident = !{!7} -!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 11.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None) -!1 = !DIFile(filename: "undef_intrinsics_when_deleting_instructions.cpp", directory: "/") +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 11.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None) +!1 = !DIFile(filename: "undef_intrinsics_when_deleting_instructions.cpp", directory: "/") !2 = !{} -!3 = !{i32 2, !"CodeView", i32 1} +!3 = !{i32 2, !"CodeView", i32 1} !4 = !{i32 2, !"Debug Info Version", i32 3} !5 = !{i32 1, !"wchar_size", i32 2} !6 = !{i32 7, !"PIC Level", i32 2} -!7 = !{!"clang version 11.0.0"} -!8 = distinct !DISubprogram(name: "foo", linkageName: "?foo@@YAMMMMM@Z", scope: !1, file: !1, line: 1, type: !9, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) -!9 = !DISubroutineType(types: !10) -!10 = !{!11, !11, !11, !11, !11} -!11 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float) -!12 = !DILocalVariable(name: "d", arg: 4, scope: !8, file: !1, line: 1, type: !11) -!13 = !DILocation(line: 0, scope: !8) -!14 = !DILocalVariable(name: "c", arg: 3, scope: !8, file: !1, line: 1, type: !11) -!15 = !DILocalVariable(name: "b", arg: 2, scope: !8, file: !1, line: 1, type: !11) -!16 = !DILocalVariable(name: "a", arg: 1, scope: !8, file: !1, line: 1, type: !11) -!17 = !DILocation(line: 2, scope: !8) -!18 = !DILocalVariable(name: "x", scope: !8, file: !1, line: 2, type: !11) -!19 = !DILocation(line: 3, scope: !8) -!20 = !DILocation(line: 4, scope: !21) -!21 = distinct !DILexicalBlock(scope: !22, file: !1, line: 3) -!22 = distinct !DILexicalBlock(scope: !8, file: !1, line: 3) -!23 = !DILocalVariable(name: "y", scope: !21, file: !1, line: 4, type: !11) -!24 = !DILocation(line: 0, scope: !21) -!25 = !DILocation(line: 5, scope: !21) -!26 = !DILocation(line: 8, scope: !8) +!7 = !{!"clang version 11.0.0"} +!8 = distinct !DISubprogram(name: "foo", linkageName: "?foo@@YAMMMMM@Z", scope: !1, file: !1, line: 1, type: !9, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) +!9 = !DISubroutineType(types: !10) +!10 = !{!11, !11, !11, !11, !11} +!11 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float) +!12 = !DILocalVariable(name: "d", arg: 4, scope: !8, file: !1, line: 1, type: !11) +!13 = !DILocation(line: 0, scope: !8) +!14 = !DILocalVariable(name: "c", arg: 3, scope: !8, file: !1, line: 1, type: !11) +!15 = !DILocalVariable(name: "b", arg: 2, scope: !8, file: !1, line: 1, type: !11) +!16 = !DILocalVariable(name: "a", arg: 1, scope: !8, file: !1, line: 1, type: !11) +!17 = !DILocation(line: 2, scope: !8) +!18 = !DILocalVariable(name: "x", scope: !8, file: !1, line: 2, type: !11) +!19 = !DILocation(line: 3, scope: !8) +!20 = !DILocation(line: 4, scope: !21) +!21 = distinct !DILexicalBlock(scope: !22, file: !1, line: 3) +!22 = distinct !DILexicalBlock(scope: !8, file: !1, line: 3) +!23 = !DILocalVariable(name: "y", scope: !21, file: !1, line: 4, type: !11) +!24 = !DILocation(line: 0, scope: !21) +!25 = !DILocation(line: 5, scope: !21) +!26 = !DILocation(line: 8, scope: !8)