[llvm] 5fc9449 - [DeadArgElim] Use poison instead of undef as placeholder for dead arguments

Nuno Lopes via llvm-commits llvm-commits at lists.llvm.org
Thu May 19 10:03:15 PDT 2022


Author: Nuno Lopes
Date: 2022-05-19T18:00:24+01:00
New Revision: 5fc9449c962a0703a658aa8e29162e00dc2fecf1

URL: https://github.com/llvm/llvm-project/commit/5fc9449c962a0703a658aa8e29162e00dc2fecf1
DIFF: https://github.com/llvm/llvm-project/commit/5fc9449c962a0703a658aa8e29162e00dc2fecf1.diff

LOG: [DeadArgElim] Use poison instead of undef as placeholder for dead arguments

It doesn't matter which value we use for dead args, so let's switch
to poison, so we can eventually kill undef.

Reviewed By: aeubanks, fhahn

Differential Revision: https://reviews.llvm.org/D125983

Added: 
    

Modified: 
    clang/test/CodeGen/debug-info-block-vars.c
    clang/test/CodeGen/mips-unsigned-ext-var.c
    llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
    llvm/test/DebugInfo/X86/dbgloc-insert-extract-val-instrs.ll
    llvm/test/Transforms/DeadArgElim/NoundefAttrs.ll
    llvm/test/Transforms/DeadArgElim/aggregates.ll
    llvm/test/Transforms/DeadArgElim/byref.ll
    llvm/test/Transforms/DeadArgElim/dbginfo-update-dbgval-local.ll
    llvm/test/Transforms/DeadArgElim/dbginfo-update-dbgval.ll
    llvm/test/Transforms/DeadArgElim/deadexternal.ll
    llvm/test/Transforms/DeadArgElim/fct_ptr.ll
    llvm/test/Transforms/DeadArgElim/opaque-ptr.ll
    llvm/test/Transforms/DeadArgElim/variadic_safety.ll

Removed: 
    


################################################################################
diff  --git a/clang/test/CodeGen/debug-info-block-vars.c b/clang/test/CodeGen/debug-info-block-vars.c
index 11c899fa3c811..e22e8ac0f84ba 100644
--- a/clang/test/CodeGen/debug-info-block-vars.c
+++ b/clang/test/CodeGen/debug-info-block-vars.c
@@ -13,8 +13,8 @@
 // CHECK-OPT-NOT: alloca
 // Since the block address is not used anywhere in this function,
 // the optimizer (DeadArgElim) has replaced all the false uses
-// (i.e., metadata users) with undef.
-// CHECK-OPT: call void @llvm.dbg.value(metadata i8* undef,
+// (i.e., metadata users) with poison.
+// CHECK-OPT: call void @llvm.dbg.value(metadata i8* poison,
 // CHECK-OPT-SAME:                      metadata !DIExpression())
 void f(void) {
   a(^{

diff  --git a/clang/test/CodeGen/mips-unsigned-ext-var.c b/clang/test/CodeGen/mips-unsigned-ext-var.c
index 596b2b2fb1d32..e3f1ea6b88e5f 100644
--- a/clang/test/CodeGen/mips-unsigned-ext-var.c
+++ b/clang/test/CodeGen/mips-unsigned-ext-var.c
@@ -17,6 +17,6 @@ void foo1(void) {
   foo(1,f);
 }
 
-//N64: call signext i32 (i32, ...) @foo(i32 signext undef, i32 noundef signext -32)
-//N32: call signext i32 (i32, ...) @foo(i32 signext undef, i32 noundef signext -32)
-//O32: call i32 (i32, ...) @foo(i32 signext undef, i32 noundef signext -32)
+//N64: call signext i32 (i32, ...) @foo(i32 signext poison, i32 noundef signext -32)
+//N32: call signext i32 (i32, ...) @foo(i32 signext poison, i32 noundef signext -32)
+//O32: call i32 (i32, ...) @foo(i32 signext poison, i32 noundef signext -32)

diff  --git a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
index a879a0fb30b36..a9cabb30324aa 100644
--- a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
+++ b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
@@ -54,8 +54,8 @@ using namespace llvm;
 
 STATISTIC(NumArgumentsEliminated, "Number of unread args removed");
 STATISTIC(NumRetValsEliminated  , "Number of unused return values removed");
-STATISTIC(NumArgumentsReplacedWithUndef,
-          "Number of unread args replaced with undef");
+STATISTIC(NumArgumentsReplacedWithPoison,
+          "Number of unread args replaced with poison");
 
 namespace {
 
@@ -251,14 +251,14 @@ bool DeadArgumentEliminationPass::DeleteDeadVarargs(Function &Fn) {
 }
 
 /// RemoveDeadArgumentsFromCallers - Checks if the given function has any
-/// arguments that are unused, and changes the caller parameters to be undefined
+/// arguments that are unused, and changes the caller parameters to be poison
 /// instead.
 bool DeadArgumentEliminationPass::RemoveDeadArgumentsFromCallers(Function &Fn) {
   // We cannot change the arguments if this TU does not define the function or
   // if the linker may choose a function body from another TU, even if the
   // nominal linkage indicates that other copies of the function have the same
   // semantics. In the below example, the dead load from %p may not have been
-  // eliminated from the linker-chosen copy of f, so replacing %p with undef
+  // eliminated from the linker-chosen copy of f, so replacing %p with poison
   // in callers may introduce undefined behavior.
   //
   // define linkonce_odr void @f(i32* %p) {
@@ -294,7 +294,7 @@ bool DeadArgumentEliminationPass::RemoveDeadArgumentsFromCallers(Function &Fn) {
     if (!Arg.hasSwiftErrorAttr() && Arg.use_empty() &&
         !Arg.hasPassPointeeByValueCopyAttr()) {
       if (Arg.isUsedByMetadata()) {
-        Arg.replaceAllUsesWith(UndefValue::get(Arg.getType()));
+        Arg.replaceAllUsesWith(PoisonValue::get(Arg.getType()));
         Changed = true;
       }
       UnusedArgs.push_back(Arg.getArgNo());
@@ -311,15 +311,15 @@ bool DeadArgumentEliminationPass::RemoveDeadArgumentsFromCallers(Function &Fn) {
         CB->getFunctionType() != Fn.getFunctionType())
       continue;
 
-    // Now go through all unused args and replace them with "undef".
+    // Now go through all unused args and replace them with poison.
     for (unsigned I = 0, E = UnusedArgs.size(); I != E; ++I) {
       unsigned ArgNo = UnusedArgs[I];
 
       Value *Arg = CB->getArgOperand(ArgNo);
-      CB->setArgOperand(ArgNo, UndefValue::get(Arg->getType()));
+      CB->setArgOperand(ArgNo, PoisonValue::get(Arg->getType()));
       CB->removeParamAttrs(ArgNo, UBImplyingAttributes);
 
-      ++NumArgumentsReplacedWithUndef;
+      ++NumArgumentsReplacedWithPoison;
       Changed = true;
     }
   }
@@ -964,10 +964,10 @@ bool DeadArgumentEliminationPass::RemoveDeadStuffFromFunction(Function *F) {
         CB.replaceAllUsesWith(NewCB);
         NewCB->takeName(&CB);
       } else if (NewCB->getType()->isVoidTy()) {
-        // If the return value is dead, replace any uses of it with undef
+        // If the return value is dead, replace any uses of it with poison
         // (any non-debug value uses will get removed later on).
         if (!CB.getType()->isX86_MMXTy())
-          CB.replaceAllUsesWith(UndefValue::get(CB.getType()));
+          CB.replaceAllUsesWith(PoisonValue::get(CB.getType()));
       } else {
         assert((RetTy->isStructTy() || RetTy->isArrayTy()) &&
                "Return type changed, but not into a void. The old return type"
@@ -983,8 +983,8 @@ bool DeadArgumentEliminationPass::RemoveDeadStuffFromFunction(Function *F) {
         // with all the uses, we will just rebuild it using extract/insertvalue
         // chaining and let instcombine clean that up.
         //
-        // Start out building up our return value from undef
-        Value *RetVal = UndefValue::get(RetTy);
+        // Start out building up our return value from poison
+        Value *RetVal = PoisonValue::get(RetTy);
         for (unsigned Ri = 0; Ri != RetCount; ++Ri)
           if (NewRetIdxs[Ri] != -1) {
             Value *V;
@@ -1029,10 +1029,10 @@ bool DeadArgumentEliminationPass::RemoveDeadStuffFromFunction(Function *F) {
       I2->takeName(&*I);
       ++I2;
     } else {
-      // If this argument is dead, replace any uses of it with undef
+      // If this argument is dead, replace any uses of it with poison
       // (any non-debug value uses will get removed later on).
       if (!I->getType()->isX86_MMXTy())
-        I->replaceAllUsesWith(UndefValue::get(I->getType()));
+        I->replaceAllUsesWith(PoisonValue::get(I->getType()));
     }
 
   // If we change the return value of the function we must rewrite any return
@@ -1051,8 +1051,8 @@ bool DeadArgumentEliminationPass::RemoveDeadStuffFromFunction(Function *F) {
           // This does generate messy code, but we'll let it to instcombine to
           // clean that up.
           Value *OldRet = RI->getOperand(0);
-          // Start out building up our return value from undef
-          RetVal = UndefValue::get(NRetTy);
+          // Start out building up our return value from poison
+          RetVal = PoisonValue::get(NRetTy);
           for (unsigned RetI = 0; RetI != RetCount; ++RetI)
             if (NewRetIdxs[RetI] != -1) {
               Value *EV = IRB.CreateExtractValue(OldRet, RetI, "oldret");
@@ -1117,7 +1117,7 @@ PreservedAnalyses DeadArgumentEliminationPass::run(Module &M,
     Changed |= RemoveDeadStuffFromFunction(&F);
 
   // Finally, look for any unused parameters in functions with non-local
-  // linkage and replace the passed in parameters with undef.
+  // linkage and replace the passed in parameters with poison.
   for (auto &F : M)
     Changed |= RemoveDeadArgumentsFromCallers(F);
 

diff  --git a/llvm/test/DebugInfo/X86/dbgloc-insert-extract-val-instrs.ll b/llvm/test/DebugInfo/X86/dbgloc-insert-extract-val-instrs.ll
index cbbc830e61ac9..7a21e884a5a32 100644
--- a/llvm/test/DebugInfo/X86/dbgloc-insert-extract-val-instrs.ll
+++ b/llvm/test/DebugInfo/X86/dbgloc-insert-extract-val-instrs.ll
@@ -5,13 +5,13 @@
 
 ; CHECK-LABEL: fn
 ; CHECK: %oldret = extractvalue { i32, i32, i16 } %z, 0, !dbg ![[LOC:.*]]
-; CHECK: %newret = insertvalue { i32, i32 } undef, i32 %oldret, 0, !dbg ![[LOC:.*]]
+; CHECK: %newret = insertvalue { i32, i32 } poison, i32 %oldret, 0, !dbg ![[LOC:.*]]
 ; CHECK: %oldret1 = extractvalue { i32, i32, i16 } %z, 1, !dbg ![[LOC:.*]]
 ; CHECK: %newret2 = insertvalue { i32, i32 } %newret, i32 %oldret1, 1, !dbg ![[LOC:.*]]
 
 ; CHECK-LABEL: fn1
 ; CHECK: %newret = extractvalue { i32, i32 } %ret, 0, !dbg ![[LOC2:.*]]
-; CHECK: %oldret = insertvalue { i32, i32, i16 } undef, i32 %newret, 0, !dbg ![[LOC2:.*]]
+; CHECK: %oldret = insertvalue { i32, i32, i16 } poison, i32 %newret, 0, !dbg ![[LOC2:.*]]
 ; CHECK: %newret1 = extractvalue { i32, i32 } %ret, 1, !dbg ![[LOC2:.*]]
 ; CHECK: %oldret2 = insertvalue { i32, i32, i16 } %oldret, i32 %newret1, 1, !dbg ![[LOC2:.*]]
 
@@ -19,7 +19,7 @@
 source_filename = "test.ll"
 
 define internal { i32, i32, i16 } @fn() !dbg !6 {
-  %x = insertvalue { i32, i32, i16 } undef, i32 1, 0, !dbg !8
+  %x = insertvalue { i32, i32, i16 } poison, i32 1, 0, !dbg !8
   %y = insertvalue { i32, i32, i16 } %x, i32 2, 1, !dbg !9
   %z = insertvalue { i32, i32, i16 } %y, i16 3, 2, !dbg !10
   ret { i32, i32, i16 } %z, !dbg !11

diff  --git a/llvm/test/Transforms/DeadArgElim/NoundefAttrs.ll b/llvm/test/Transforms/DeadArgElim/NoundefAttrs.ll
index 6c84ddaf69171..0b6f9771fdacf 100644
--- a/llvm/test/Transforms/DeadArgElim/NoundefAttrs.ll
+++ b/llvm/test/Transforms/DeadArgElim/NoundefAttrs.ll
@@ -1,7 +1,7 @@
 ; RUN: opt -passes=deadargelim -S < %s | FileCheck %s
 
-; If caller is changed to pass in undef, noundef, dereferenceable and other
-; attributes that imply immediate undefined behavior should be delete.
+; If caller is changed to pass in poison, noundef, dereferenceable and other
+; attributes that imply immediate undefined behavior must be deleted.
 ; Other attributes like nonnull, which only imply poison, can be safely kept.
 
 ; CHECK:   define i64 @bar(i64* nonnull %0, i64 %1)
@@ -12,7 +12,7 @@ entry:
 }
 
 define i64 @foo(i64* %p, i64 %v) {
-; CHECK:   %retval = call i64 @bar(i64* nonnull undef, i64 %v)
+; CHECK:   %retval = call i64 @bar(i64* nonnull poison, i64 %v)
   %retval = call i64 @bar(i64* nonnull dereferenceable(8) %p, i64 %v)
   ret i64 %retval
 }

diff  --git a/llvm/test/Transforms/DeadArgElim/aggregates.ll b/llvm/test/Transforms/DeadArgElim/aggregates.ll
index 67bfc4945fb5c..ce8f87767a40c 100644
--- a/llvm/test/Transforms/DeadArgElim/aggregates.ll
+++ b/llvm/test/Transforms/DeadArgElim/aggregates.ll
@@ -36,7 +36,7 @@ use_1:
   ; This use can be classified as applying only to ret 1.
   %val0 = extractvalue { i32, i32 } %val, 1
   call void @callee(i32 %val0)
-  ret { i32, i32 } undef
+  ret { i32, i32 } poison
 
 use_aggregate:
   ; This use is assumed to apply to both 0 and 1.
@@ -61,7 +61,7 @@ use_1:
   ; This use can be classified as applying only to ret 1.
   %val0 = extractvalue { i32, i32 } %val, 1
   call void @callee(i32 %val0)
-  ret { i32, i32 } undef
+  ret { i32, i32 } poison
 
 use_aggregate:
   ; This use is assumed to apply to both 0 and 1.
@@ -77,7 +77,7 @@ declare void @callee(i32)
 ; CHECK-LABEL: define internal [2 x i32] @array_rets_have_multiple_slots(i32 %in)
 
 define internal [2 x i32] @array_rets_have_multiple_slots(i32 %in) {
-  %ret = insertvalue [2 x i32] undef, i32 %in, 1
+  %ret = insertvalue [2 x i32] poison, i32 %in, 1
   ret [2 x i32] %ret
 }
 
@@ -91,7 +91,7 @@ define [2 x i32] @test_array_rets_have_multiple_slots() {
 
 ; CHECK-LABEL: define internal [2 x i32] @can_shrink_arrays()
 ; CHECK: [[VAL0:%.*]] = extractvalue [3 x i32] [i32 42, i32 43, i32 44], 0
-; CHECK: [[RESTMP:%.*]] = insertvalue [2 x i32] undef, i32 [[VAL0]], 0
+; CHECK: [[RESTMP:%.*]] = insertvalue [2 x i32] poison, i32 [[VAL0]], 0
 ; CHECK: [[VAL2:%.*]] = extractvalue [3 x i32] [i32 42, i32 43, i32 44], 2
 ; CHECK: [[RES:%.*]] = insertvalue [2 x i32] [[RESTMP]], i32 [[VAL2]], 1
 ; CHECK: ret [2 x i32] [[RES]]
@@ -168,9 +168,9 @@ entry:
 
 ; CHECK-LABEL: define void @PR24906
 ; CHECK: %[[invoke:.*]] = invoke i32 @agg_ret()
-; CHECK: %[[oldret:.*]] = insertvalue { i32 } undef, i32 %[[invoke]], 0
+; CHECK: %[[oldret:.*]] = insertvalue { i32 } poison, i32 %[[invoke]], 0
 ; CHECK: phi { i32 } [ %[[oldret]],
-define void @PR24906() personality i32 (i32)* undef {
+define void @PR24906() personality i32 (i32)* poison {
 entry:
   %tmp2 = invoke { i32 } @agg_ret()
           to label %bb3 unwind label %bb4

diff  --git a/llvm/test/Transforms/DeadArgElim/byref.ll b/llvm/test/Transforms/DeadArgElim/byref.ll
index 09a869d944913..b2ecfe15fa02a 100644
--- a/llvm/test/Transforms/DeadArgElim/byref.ll
+++ b/llvm/test/Transforms/DeadArgElim/byref.ll
@@ -12,9 +12,9 @@ define void @unused_byref_arg(i32* byref(i32) %dead_arg) {
   ret void
 }
 
-define void @dont_replace_by_undef(i32* %ptr) {
-; CHECK-LABEL: @dont_replace_by_undef(
-; CHECK-NEXT:    call void @unused_byref_arg(i32* byref(i32) undef)
+define void @dont_replace_by_poison(i32* %ptr) {
+; CHECK-LABEL: @dont_replace_by_poison(
+; CHECK-NEXT:    call void @unused_byref_arg(i32* byref(i32) poison)
 ; CHECK-NEXT:    ret void
 ;
   call void @unused_byref_arg(i32* byref(i32) %ptr)

diff  --git a/llvm/test/Transforms/DeadArgElim/dbginfo-update-dbgval-local.ll b/llvm/test/Transforms/DeadArgElim/dbginfo-update-dbgval-local.ll
index 795776e00007f..4a6d7ab9be55c 100644
--- a/llvm/test/Transforms/DeadArgElim/dbginfo-update-dbgval-local.ll
+++ b/llvm/test/Transforms/DeadArgElim/dbginfo-update-dbgval-local.ll
@@ -1,12 +1,12 @@
 ; RUN: opt -passes=deadargelim -S < %s | FileCheck %s
 
 ; Verify that the dbg.value intrinsics that use the dead argument and return
-; value are marked as undef to indicate that the values are optimized out.
+; value are marked as poison to indicate that the values are optimized out.
 
 ; Reproducer for PR23260.
 
 ; CHECK-LABEL: define internal void @bar()
-; CHECK: call void @llvm.dbg.value(metadata i32 undef, metadata ![[LOCAL1:[0-9]+]]
+; CHECK: call void @llvm.dbg.value(metadata i32 poison, metadata ![[LOCAL1:[0-9]+]]
 ; CHECK: call void @sink()
 
 ; Function Attrs: alwaysinline nounwind uwtable
@@ -19,7 +19,7 @@ entry:
 
 ; CHECK-LABEL: define void @foo()
 ; CHECK: call void @bar()
-; CHECK: call void @llvm.dbg.value(metadata i32 undef, metadata ![[LOCAL2:[0-9]+]]
+; CHECK: call void @llvm.dbg.value(metadata i32 poison, metadata ![[LOCAL2:[0-9]+]]
 ; CHECK: call void @bar()
 
 ; Function Attrs: nounwind uwtable

diff  --git a/llvm/test/Transforms/DeadArgElim/dbginfo-update-dbgval.ll b/llvm/test/Transforms/DeadArgElim/dbginfo-update-dbgval.ll
index ada1d451cadf7..6c55c0c1a5644 100644
--- a/llvm/test/Transforms/DeadArgElim/dbginfo-update-dbgval.ll
+++ b/llvm/test/Transforms/DeadArgElim/dbginfo-update-dbgval.ll
@@ -24,7 +24,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 ; Function Attrs: noinline nounwind uwtable
 define dso_local void @f2(i32 %k) local_unnamed_addr !dbg !11 {
 entry:
-; CHECK: call void @llvm.dbg.value(metadata i32 undef, metadata !15, metadata !DIExpression()), !dbg !16
+; CHECK: call void @llvm.dbg.value(metadata i32 poison, metadata !15, metadata !DIExpression()), !dbg !16
   call void @llvm.dbg.value(metadata i32 %k, metadata !15, metadata !DIExpression()), !dbg !16
   %0 = load i32, i32* @s, align 4, !dbg !17
   %inc = add nsw i32 %0, 1, !dbg !17
@@ -36,7 +36,7 @@ entry:
 ; Function Attrs: noinline nounwind uwtable
 define dso_local void @f() local_unnamed_addr !dbg !19 {
 entry:
-; CHECK: tail call void @f2(i32 undef), !dbg !22
+; CHECK: tail call void @f2(i32 poison), !dbg !22
   tail call void @f2(i32 4), !dbg !22
   ret void, !dbg !23
 }

diff  --git a/llvm/test/Transforms/DeadArgElim/deadexternal.ll b/llvm/test/Transforms/DeadArgElim/deadexternal.ll
index c2a082da5a90e..09e288c9ba0ab 100644
--- a/llvm/test/Transforms/DeadArgElim/deadexternal.ll
+++ b/llvm/test/Transforms/DeadArgElim/deadexternal.ll
@@ -8,7 +8,7 @@ define void @foo() {
   call void @test(i32 0)
   ret void
 ; CHECK-LABEL: @foo(
-; CHECK: i32 undef
+; CHECK: i32 poison
 }
 
 define void @f(i32 %X) {
@@ -22,7 +22,7 @@ declare void @sideeffect()
 define void @g(i32 %n) {
 entry:
   %add = add nsw i32 %n, 1
-; CHECK: tail call void @f(i32 undef)
+; CHECK: tail call void @f(i32 poison)
   tail call void @f(i32 %add)
   ret void
 }
@@ -32,7 +32,7 @@ entry:
   %i = alloca i32, align 4
   store volatile i32 10, i32* %i, align 4
 ; CHECK: %tmp = load volatile i32, i32* %i, align 4
-; CHECK-NEXT: call void @f(i32 undef)
+; CHECK-NEXT: call void @f(i32 poison)
   %tmp = load volatile i32, i32* %i, align 4
   call void @f(i32 %tmp)
   ret void
@@ -57,9 +57,9 @@ define void @unused_swifterror_arg(%swift_error** swifterror %dead_arg) {
   ret void
 }
 
-; CHECK-LABEL: @dont_replace_by_undef
-; CHECK-NOT: call void @unused_swifterror_arg({{.*}}undef)
-define void @dont_replace_by_undef() {
+; CHECK-LABEL: @dont_replace_by_poison
+; CHECK-NOT: call void @unused_swifterror_arg({{.*}}poison)
+define void @dont_replace_by_poison() {
   %error_ptr_ref = alloca swifterror %swift_error*
   store %swift_error* null, %swift_error** %error_ptr_ref
   call void @unused_swifterror_arg(%swift_error** %error_ptr_ref)

diff  --git a/llvm/test/Transforms/DeadArgElim/fct_ptr.ll b/llvm/test/Transforms/DeadArgElim/fct_ptr.ll
index 2e352666c1f6c..752c77204cfdd 100644
--- a/llvm/test/Transforms/DeadArgElim/fct_ptr.ll
+++ b/llvm/test/Transforms/DeadArgElim/fct_ptr.ll
@@ -5,7 +5,7 @@
 ; Because of that use, we used to bail out on removing the
 ; unused arguments for this function.
 ; Yet, we should still be able to rewrite the direct calls that are
-; statically known, by replacing the related arguments with undef.
+; statically known, by replacing the related arguments with poison.
 ; This is what we check on the call that produces %res2.
 
 define i32 @call_indirect(i32 (i32, i32, i32)* readnone %fct_ptr, i32 %arg1, i32 %arg2, i32 %arg3) {
@@ -13,13 +13,13 @@ define i32 @call_indirect(i32 (i32, i32, i32)* readnone %fct_ptr, i32 %arg1, i32
 ; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i32 (i32, i32, i32)* [[FCT_PTR:%.*]], @external_fct
 ; CHECK-NEXT:    br i1 [[CMP0]], label [[CALL_EXT:%.*]], label [[CHK2:%.*]]
 ; CHECK:       call_ext:
-; CHECK-NEXT:    [[RES1:%.*]] = tail call i32 @external_fct(i32 undef, i32 [[ARG2:%.*]], i32 undef)
+; CHECK-NEXT:    [[RES1:%.*]] = tail call i32 @external_fct(i32 poison, i32 [[ARG2:%.*]], i32 poison)
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       chk2:
 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 (i32, i32, i32)* [[FCT_PTR]], @internal_fct
 ; CHECK-NEXT:    br i1 [[CMP1]], label [[CALL_INT:%.*]], label [[CALL_OTHER:%.*]]
 ; CHECK:       call_int:
-; CHECK-NEXT:    [[RES2:%.*]] = tail call i32 @internal_fct(i32 undef, i32 [[ARG2]], i32 undef)
+; CHECK-NEXT:    [[RES2:%.*]] = tail call i32 @internal_fct(i32 poison, i32 [[ARG2]], i32 poison)
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       call_other:
 ; CHECK-NEXT:    [[RES3:%.*]] = tail call i32 @other_fct(i32 [[ARG2]])

diff  --git a/llvm/test/Transforms/DeadArgElim/opaque-ptr.ll b/llvm/test/Transforms/DeadArgElim/opaque-ptr.ll
index 02f2e0162ae07..3b4e5bcb5ba4a 100644
--- a/llvm/test/Transforms/DeadArgElim/opaque-ptr.ll
+++ b/llvm/test/Transforms/DeadArgElim/opaque-ptr.ll
@@ -11,7 +11,7 @@ define void @callee(i32 %unused) {
 
 define void @caller() {
 ; CHECK-LABEL: define {{[^@]+}}@caller() {
-; CHECK-NEXT:    call void @callee(i32 undef)
+; CHECK-NEXT:    call void @callee(i32 poison)
 ; CHECK-NEXT:    call void @callee()
 ; CHECK-NEXT:    call void @callee(i32 42, i32 24)
 ; CHECK-NEXT:    ret void

diff  --git a/llvm/test/Transforms/DeadArgElim/variadic_safety.ll b/llvm/test/Transforms/DeadArgElim/variadic_safety.ll
index df319a0e24a88..05d8c5420c3df 100644
--- a/llvm/test/Transforms/DeadArgElim/variadic_safety.ll
+++ b/llvm/test/Transforms/DeadArgElim/variadic_safety.ll
@@ -17,9 +17,9 @@ define internal i32 @va_func(i32 %a, i32 %b, ...) {
 define i32 @call_va(i32 %in) {
   %stacked = alloca i32
   store i32 42, i32* %stacked
-  %res = call i32(i32, i32, ...) @va_func(i32 %in, i32 %in, [6 x i32] undef, i32* byval(i32) %stacked)
+  %res = call i32(i32, i32, ...) @va_func(i32 %in, i32 %in, [6 x i32] poison, i32* byval(i32) %stacked)
   ret i32 %res
-; CHECK: call i32 (i32, i32, ...) @va_func(i32 undef, i32 %in, [6 x i32] undef, i32* byval(i32) %stacked)
+; CHECK: call i32 (i32, i32, ...) @va_func(i32 poison, i32 %in, [6 x i32] poison, i32* byval(i32) %stacked)
 }
 
 define internal i32 @va_deadret_func(i32 %a, i32 %b, ...) {
@@ -32,7 +32,7 @@ define internal i32 @va_deadret_func(i32 %a, i32 %b, ...) {
 define void @call_deadret(i32 %in) {
   %stacked = alloca i32
   store i32 42, i32* %stacked
-  call i32 (i32, i32, ...) @va_deadret_func(i32 undef, i32 %in, [6 x i32] undef, i32* byval(i32) %stacked)
+  call i32 (i32, i32, ...) @va_deadret_func(i32 poison, i32 %in, [6 x i32] poison, i32* byval(i32) %stacked)
   ret void
-; CHECK: call void (i32, i32, ...) @va_deadret_func(i32 undef, i32 undef, [6 x i32] undef, i32* byval(i32) %stacked)
+; CHECK: call void (i32, i32, ...) @va_deadret_func(i32 poison, i32 poison, [6 x i32] poison, i32* byval(i32) %stacked)
 }


        


More information about the llvm-commits mailing list