[llvm] 3121816 - GlobalOpt: Add a test for addrspacecast coverage with alloc functions
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue May 16 08:32:42 PDT 2023
Author: Matt Arsenault
Date: 2023-05-16T16:32:30+01:00
New Revision: 3121816ab9606e67f13a70c7f2c8c0263a84f6f7
URL: https://github.com/llvm/llvm-project/commit/3121816ab9606e67f13a70c7f2c8c0263a84f6f7
DIFF: https://github.com/llvm/llvm-project/commit/3121816ab9606e67f13a70c7f2c8c0263a84f6f7.diff
LOG: GlobalOpt: Add a test for addrspacecast coverage with alloc functions
AllUsesOfValueWillTrapIfNull could handle addrspacecast, but currently
doesn't.
Added:
llvm/test/Transforms/GlobalOpt/malloc-promote-addrspacecast.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/Transforms/GlobalOpt/malloc-promote-addrspacecast.ll b/llvm/test/Transforms/GlobalOpt/malloc-promote-addrspacecast.ll
new file mode 100644
index 0000000000000..05dffd708ba27
--- /dev/null
+++ b/llvm/test/Transforms/GlobalOpt/malloc-promote-addrspacecast.ll
@@ -0,0 +1,56 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
+; RUN: opt -S -passes=globalopt < %s | FileCheck %s
+target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
+
+declare noalias ptr @malloc(i64) allockind("alloc,uninitialized") allocsize(0)
+
+ at G = internal global ptr null
+
+;.
+; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global ptr null
+;.
+define void @init() {
+; CHECK-LABEL: @init(
+; CHECK-NEXT: [[MALLOCCALL:%.*]] = tail call ptr @malloc(i64 4)
+; CHECK-NEXT: store ptr [[MALLOCCALL]], ptr @G, align 8
+; CHECK-NEXT: [[GV:%.*]] = load ptr, ptr @G, align 8
+; CHECK-NEXT: [[ADDRSPACECAST:%.*]] = addrspacecast ptr [[GV]] to ptr addrspace(1)
+; CHECK-NEXT: store i32 20, ptr addrspace(1) [[ADDRSPACECAST]], align 4
+; CHECK-NEXT: ret void
+;
+ %malloccall = tail call ptr @malloc(i64 4)
+ store ptr %malloccall, ptr @G
+ %GV = load ptr, ptr @G
+ %addrspacecast = addrspacecast ptr %GV to ptr addrspace(1)
+ store i32 20, ptr addrspace(1) %addrspacecast
+ ret void
+}
+
+define i32 @get() {
+; CHECK-LABEL: @get(
+; CHECK-NEXT: [[GV:%.*]] = load ptr, ptr @G, align 8
+; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[GV]], align 4
+; CHECK-NEXT: ret i32 [[V]]
+;
+ %GV = load ptr, ptr @G
+ %V = load i32, ptr %GV
+ ret i32 %V
+}
+
+define void @foo(i64 %Size) nounwind noinline #0 {
+; CHECK-LABEL: @foo(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr @G, align 4
+; CHECK-NEXT: ret void
+;
+entry:
+ %0 = load ptr, ptr @G, align 4
+ ret void
+}
+
+attributes #0 = { null_pointer_is_valid }
+
+;.
+; CHECK: attributes #[[ATTR0:[0-9]+]] = { allockind("alloc,uninitialized") allocsize(0) }
+; CHECK: attributes #[[ATTR1:[0-9]+]] = { noinline nounwind null_pointer_is_valid }
+;.
More information about the llvm-commits
mailing list