[llvm] cb0d288 - Utils: Fix deleting calls to null in non-0 address spaces

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 23 05:49:49 PST 2022


Author: Matt Arsenault
Date: 2022-11-23T08:49:44-05:00
New Revision: cb0d2887ab8f54f8dea72149904468f61cfc0d5b

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

LOG: Utils: Fix deleting calls to null in non-0 address spaces

Added: 
    llvm/test/Transforms/SimplifyCFG/call-null.ll

Modified: 
    llvm/lib/Transforms/Utils/Local.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp
index a68d8345201f8..8f996e933859f 100644
--- a/llvm/lib/Transforms/Utils/Local.cpp
+++ b/llvm/lib/Transforms/Utils/Local.cpp
@@ -2389,7 +2389,9 @@ static bool markAliveBlocks(Function &F,
               }
           }
         } else if ((isa<ConstantPointerNull>(Callee) &&
-                    !NullPointerIsDefined(CI->getFunction())) ||
+                    !NullPointerIsDefined(CI->getFunction(),
+                                          cast<PointerType>(Callee->getType())
+                                              ->getAddressSpace())) ||
                    isa<UndefValue>(Callee)) {
           changeToUnreachable(CI, false, DTU);
           Changed = true;

diff  --git a/llvm/test/Transforms/SimplifyCFG/call-null.ll b/llvm/test/Transforms/SimplifyCFG/call-null.ll
new file mode 100644
index 0000000000000..e10c416c8ffc2
--- /dev/null
+++ b/llvm/test/Transforms/SimplifyCFG/call-null.ll
@@ -0,0 +1,52 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -S -passes=simplifycfg %s | FileCheck %s
+
+define void @call_null_as0() {
+; CHECK-LABEL: @call_null_as0(
+; CHECK-NEXT:    unreachable
+;
+  call addrspace(0) void null()
+  ret void
+}
+
+define void @call_null_as0_null_pointer_defined() null_pointer_is_valid {
+; CHECK-LABEL: @call_null_as0_null_pointer_defined(
+; CHECK-NEXT:    call void null()
+; CHECK-NEXT:    ret void
+;
+  call addrspace(0) void null()
+  ret void
+}
+
+define void @call_null_as1() {
+; CHECK-LABEL: @call_null_as1(
+; CHECK-NEXT:    call addrspace(1) void null()
+; CHECK-NEXT:    ret void
+;
+  call addrspace(1) void null()
+  ret void
+}
+
+define void @call_poison_as0() {
+; CHECK-LABEL: @call_poison_as0(
+; CHECK-NEXT:    unreachable
+;
+  call addrspace(0) void poison()
+  ret void
+}
+
+define void @call_poison_as0_poison_pointer_defined() null_pointer_is_valid {
+; CHECK-LABEL: @call_poison_as0_poison_pointer_defined(
+; CHECK-NEXT:    unreachable
+;
+  call addrspace(0) void poison()
+  ret void
+}
+
+define void @call_poison_as1() {
+; CHECK-LABEL: @call_poison_as1(
+; CHECK-NEXT:    unreachable
+;
+  call addrspace(1) void poison()
+  ret void
+}


        


More information about the llvm-commits mailing list