[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