Skip to content

Commit

Permalink
[GlobalOpt] Convert remaining tests to opaque pointers (NFC)
Browse files Browse the repository at this point in the history
  • Loading branch information
nikic committed Dec 13, 2022
1 parent 2f115fb commit d4191be
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 121 deletions.
63 changes: 31 additions & 32 deletions llvm/test/Transforms/GlobalOpt/fastcc.ll
@@ -1,80 +1,79 @@
; RUN: opt < %s -passes=globalopt -S | FileCheck %s

declare token @llvm.call.preallocated.setup(i32)
declare i8* @llvm.call.preallocated.arg(token, i32)
declare ptr @llvm.call.preallocated.arg(token, i32)

define internal i32 @f(i32* %m) {
define internal i32 @f(ptr %m) {
; CHECK-LABEL: define internal fastcc i32 @f
%v = load i32, i32* %m
%v = load i32, ptr %m
ret i32 %v
}

define internal x86_thiscallcc i32 @g(i32* %m) {
define internal x86_thiscallcc i32 @g(ptr %m) {
; CHECK-LABEL: define internal fastcc i32 @g
%v = load i32, i32* %m
%v = load i32, ptr %m
ret i32 %v
}

; Leave this one alone, because the user went out of their way to request this
; convention.
define internal coldcc i32 @h(i32* %m) {
define internal coldcc i32 @h(ptr %m) {
; CHECK-LABEL: define internal coldcc i32 @h
%v = load i32, i32* %m
%v = load i32, ptr %m
ret i32 %v
}

define internal i32 @j(i32* %m) {
define internal i32 @j(ptr %m) {
; CHECK-LABEL: define internal i32 @j
%v = load i32, i32* %m
%v = load i32, ptr %m
ret i32 %v
}

define internal i32 @inalloca(i32* inalloca(i32) %p) {
; CHECK-LABEL: define internal fastcc i32 @inalloca(i32* %p)
%rv = load i32, i32* %p
define internal i32 @inalloca(ptr inalloca(i32) %p) {
; CHECK-LABEL: define internal fastcc i32 @inalloca(ptr %p)
%rv = load i32, ptr %p
ret i32 %rv
}

define i32 @inalloca2_caller(i32* inalloca(i32) %p) {
%rv = musttail call i32 @inalloca2(i32* inalloca(i32) %p)
define i32 @inalloca2_caller(ptr inalloca(i32) %p) {
%rv = musttail call i32 @inalloca2(ptr inalloca(i32) %p)
ret i32 %rv
}
define internal i32 @inalloca2(i32* inalloca(i32) %p) {
define internal i32 @inalloca2(ptr inalloca(i32) %p) {
; Because of the musttail caller, this inalloca cannot be dropped.
; CHECK-LABEL: define internal i32 @inalloca2(i32* inalloca(i32) %p)
%rv = load i32, i32* %p
; CHECK-LABEL: define internal i32 @inalloca2(ptr inalloca(i32) %p)
%rv = load i32, ptr %p
ret i32 %rv
}

define internal i32 @preallocated(i32* preallocated(i32) %p) {
; CHECK-LABEL: define internal fastcc i32 @preallocated(i32* %p)
%rv = load i32, i32* %p
define internal i32 @preallocated(ptr preallocated(i32) %p) {
; CHECK-LABEL: define internal fastcc i32 @preallocated(ptr %p)
%rv = load i32, ptr %p
ret i32 %rv
}

define void @call_things() {
%m = alloca i32
call i32 @f(i32* %m)
call x86_thiscallcc i32 @g(i32* %m)
call coldcc i32 @h(i32* %m)
call i32 @j(i32* %m)
call i32 @f(ptr %m)
call x86_thiscallcc i32 @g(ptr %m)
call coldcc i32 @h(ptr %m)
call i32 @j(ptr %m)
%args = alloca inalloca i32
call i32 @inalloca(i32* inalloca(i32) %args)
call i32 @inalloca(ptr inalloca(i32) %args)
%c = call token @llvm.call.preallocated.setup(i32 1)
%N = call i8* @llvm.call.preallocated.arg(token %c, i32 0) preallocated(i32)
%n = bitcast i8* %N to i32*
call i32 @preallocated(i32* preallocated(i32) %n) ["preallocated"(token %c)]
%N = call ptr @llvm.call.preallocated.arg(token %c, i32 0) preallocated(i32)
call i32 @preallocated(ptr preallocated(i32) %N) ["preallocated"(token %c)]
ret void
}
; CHECK-LABEL: define void @call_things()
; CHECK: call fastcc i32 @f
; CHECK: call fastcc i32 @g
; CHECK: call coldcc i32 @h
; CHECK: call i32 @j
; CHECK: call fastcc i32 @inalloca(i32* %args)
; CHECK: call fastcc i32 @inalloca(ptr %args)
; CHECK-NOT: llvm.call.preallocated
; CHECK: call fastcc i32 @preallocated(i32* %n)
; CHECK: call fastcc i32 @preallocated(ptr %paarg)

@llvm.used = appending global [1 x i8*] [
i8* bitcast (i32(i32*)* @j to i8*)
@llvm.used = appending global [1 x ptr] [
ptr @j
], section "llvm.metadata"
36 changes: 17 additions & 19 deletions llvm/test/Transforms/GlobalOpt/null-check-is-use-pr35760.ll
Expand Up @@ -4,62 +4,60 @@
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@_ZL3g_i = internal global i32* null, align 8
@_ZL3g_i = internal global ptr null, align 8
@.str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@.str.1 = private unnamed_addr constant [2 x i8] c"1\00", align 1

define dso_local i32 @main() {
; CHECK-LABEL: define {{[^@]+}}@main() local_unnamed_addr {
; CHECK-NEXT: bb:
; CHECK-NEXT: store i32* null, i32** @_ZL3g_i, align 8
; CHECK-NEXT: store ptr null, ptr @_ZL3g_i, align 8
; CHECK-NEXT: call fastcc void @_ZL13PutsSomethingv()
; CHECK-NEXT: ret i32 0
;
bb:
store i32* null, i32** @_ZL3g_i, align 8
store ptr null, ptr @_ZL3g_i, align 8
call void @_ZL13PutsSomethingv()
ret i32 0
}

define internal void @_ZL13PutsSomethingv() {
; CHECK-LABEL: define {{[^@]+}}@_ZL13PutsSomethingv() unnamed_addr {
; CHECK-NEXT: bb:
; CHECK-NEXT: [[I:%.*]] = load i32*, i32** @_ZL3g_i, align 8
; CHECK-NEXT: [[I1:%.*]] = icmp eq i32* [[I]], null
; CHECK-NEXT: [[I:%.*]] = load ptr, ptr @_ZL3g_i, align 8
; CHECK-NEXT: [[I1:%.*]] = icmp eq ptr [[I]], null
; CHECK-NEXT: br i1 [[I1]], label [[BB2:%.*]], label [[BB6:%.*]]
; CHECK: bb2:
; CHECK-NEXT: [[I3:%.*]] = call noalias i8* @malloc(i64 4)
; CHECK-NEXT: [[I4:%.*]] = bitcast i8* [[I3]] to i32*
; CHECK-NEXT: store i32* [[I4]], i32** @_ZL3g_i, align 8
; CHECK-NEXT: [[I5:%.*]] = call i32 @puts(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
; CHECK-NEXT: [[I3:%.*]] = call noalias ptr @malloc(i64 4)
; CHECK-NEXT: store ptr [[I3]], ptr @_ZL3g_i, align 8
; CHECK-NEXT: [[I5:%.*]] = call i32 @puts(ptr @.str)
; CHECK-NEXT: br label [[BB8:%.*]]
; CHECK: bb6:
; CHECK-NEXT: [[I7:%.*]] = call i32 @puts(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
; CHECK-NEXT: [[I7:%.*]] = call i32 @puts(ptr @.str.1)
; CHECK-NEXT: br label [[BB8]]
; CHECK: bb8:
; CHECK-NEXT: ret void
;
bb:
%i = load i32*, i32** @_ZL3g_i, align 8
%i1 = icmp eq i32* %i, null
%i = load ptr, ptr @_ZL3g_i, align 8
%i1 = icmp eq ptr %i, null
br i1 %i1, label %bb2, label %bb6

bb2: ; preds = %bb
%i3 = call noalias i8* @malloc(i64 4)
%i4 = bitcast i8* %i3 to i32*
store i32* %i4, i32** @_ZL3g_i, align 8
%i5 = call i32 @puts(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%i3 = call noalias ptr @malloc(i64 4)
store ptr %i3, ptr @_ZL3g_i, align 8
%i5 = call i32 @puts(ptr @.str)
br label %bb8

bb6: ; preds = %bb
%i7 = call i32 @puts(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%i7 = call i32 @puts(ptr @.str.1)
br label %bb8

bb8: ; preds = %bb6, %bb2
ret void
}

; Function Attrs: allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare dso_local noalias i8* @malloc(i64) #0
declare dso_local noalias ptr @malloc(i64) #0

declare dso_local i32 @puts(i8* nocapture readonly)
declare dso_local i32 @puts(ptr nocapture readonly)
42 changes: 20 additions & 22 deletions llvm/test/Transforms/GlobalOpt/null-check-not-use-pr35760.ll
Expand Up @@ -6,64 +6,62 @@
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@_ZL3g_i = internal global i32* null, align 8
@_ZL3g_j = global i32* null, align 8
@_ZL3g_i = internal global ptr null, align 8
@_ZL3g_j = global ptr null, align 8
@.str = private unnamed_addr constant [2 x i8] c"0\00", align 1
@.str.1 = private unnamed_addr constant [2 x i8] c"1\00", align 1

define dso_local i32 @main() {
; CHECK-LABEL: define {{[^@]+}}@main() local_unnamed_addr {
; CHECK-NEXT: bb:
; CHECK-NEXT: store i32* null, i32** @_ZL3g_i, align 8
; CHECK-NEXT: store ptr null, ptr @_ZL3g_i, align 8
; CHECK-NEXT: call fastcc void @_ZL13PutsSomethingv()
; CHECK-NEXT: ret i32 0
;
bb:
store i32* null, i32** @_ZL3g_i, align 8
store ptr null, ptr @_ZL3g_i, align 8
call void @_ZL13PutsSomethingv()
ret i32 0
}

define internal void @_ZL13PutsSomethingv() {
; CHECK-LABEL: define {{[^@]+}}@_ZL13PutsSomethingv() unnamed_addr {
; CHECK-NEXT: bb:
; CHECK-NEXT: [[I:%.*]] = load i32*, i32** @_ZL3g_i, align 8
; CHECK-NEXT: [[I1:%.*]] = load i32*, i32** @_ZL3g_j, align 8
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32* [[I]], [[I1]]
; CHECK-NEXT: [[I:%.*]] = load ptr, ptr @_ZL3g_i, align 8
; CHECK-NEXT: [[I1:%.*]] = load ptr, ptr @_ZL3g_j, align 8
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[I]], [[I1]]
; CHECK-NEXT: br i1 [[CMP]], label [[BB2:%.*]], label [[BB6:%.*]]
; CHECK: bb2:
; CHECK-NEXT: [[I3:%.*]] = call noalias i8* @malloc(i64 4)
; CHECK-NEXT: [[I4:%.*]] = bitcast i8* [[I3]] to i32*
; CHECK-NEXT: store i32* [[I4]], i32** @_ZL3g_i, align 8
; CHECK-NEXT: [[I5:%.*]] = call i32 @puts(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
; CHECK-NEXT: [[I3:%.*]] = call noalias ptr @malloc(i64 4)
; CHECK-NEXT: store ptr [[I3]], ptr @_ZL3g_i, align 8
; CHECK-NEXT: [[I5:%.*]] = call i32 @puts(ptr @.str)
; CHECK-NEXT: br label [[BB8:%.*]]
; CHECK: bb6:
; CHECK-NEXT: [[I7:%.*]] = call i32 @puts(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
; CHECK-NEXT: [[I7:%.*]] = call i32 @puts(ptr @.str.1)
; CHECK-NEXT: br label [[BB8]]
; CHECK: bb8:
; CHECK-NEXT: ret void
;
bb:
%i = load i32*, i32** @_ZL3g_i, align 8
%i1 = load i32*, i32** @_ZL3g_j, align 8
%cmp = icmp eq i32* %i, %i1
%i = load ptr, ptr @_ZL3g_i, align 8
%i1 = load ptr, ptr @_ZL3g_j, align 8
%cmp = icmp eq ptr %i, %i1
br i1 %cmp, label %bb2, label %bb6

bb2: ; preds = %bb
%i3 = call noalias i8* @malloc(i64 4)
%i4 = bitcast i8* %i3 to i32*
store i32* %i4, i32** @_ZL3g_i, align 8
%i5 = call i32 @puts(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%i3 = call noalias ptr @malloc(i64 4)
store ptr %i3, ptr @_ZL3g_i, align 8
%i5 = call i32 @puts(ptr @.str)
br label %bb8

bb6: ; preds = %bb
%i7 = call i32 @puts(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%i7 = call i32 @puts(ptr @.str.1)
br label %bb8

bb8: ; preds = %bb6, %bb2
ret void
}

declare dso_local noalias i8* @malloc(i64)
declare dso_local noalias ptr @malloc(i64)

declare dso_local i32 @puts(i8* nocapture readonly)
declare dso_local i32 @puts(ptr nocapture readonly)

0 comments on commit d4191be

Please sign in to comment.