[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