comparison llvm/test/Transforms/GlobalOpt/fastcc.ll @ 207:2e18cbf3894f

LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Jun 2021 06:07:14 +0900
parents 0572611fdcc8
children c4bab56944e8
comparison
equal deleted inserted replaced
173:0572611fdcc8 207:2e18cbf3894f
27 ; CHECK-LABEL: define internal i32 @j 27 ; CHECK-LABEL: define internal i32 @j
28 %v = load i32, i32* %m 28 %v = load i32, i32* %m
29 ret i32 %v 29 ret i32 %v
30 } 30 }
31 31
32 define internal i32 @inalloca(i32* inalloca %p) { 32 define internal i32 @inalloca(i32* inalloca(i32) %p) {
33 ; CHECK-LABEL: define internal fastcc i32 @inalloca(i32* %p) 33 ; CHECK-LABEL: define internal fastcc i32 @inalloca(i32* %p)
34 %rv = load i32, i32* %p 34 %rv = load i32, i32* %p
35 ret i32 %rv 35 ret i32 %rv
36 } 36 }
37 37
38 define i32 @inalloca2_caller(i32* inalloca(i32) %p) {
39 %rv = musttail call i32 @inalloca2(i32* inalloca(i32) %p)
40 ret i32 %rv
41 }
42 define internal i32 @inalloca2(i32* inalloca(i32) %p) {
43 ; Because of the musttail caller, this inalloca cannot be dropped.
44 ; CHECK-LABEL: define internal i32 @inalloca2(i32* inalloca(i32) %p)
45 %rv = load i32, i32* %p
46 ret i32 %rv
47 }
48
38 define internal i32 @preallocated(i32* preallocated(i32) %p) { 49 define internal i32 @preallocated(i32* preallocated(i32) %p) {
39 ; TODO: handle preallocated: 50 ; CHECK-LABEL: define internal fastcc i32 @preallocated(i32* %p)
40 ; CHECK-NOT-LABEL: define internal fastcc i32 @preallocated(i32* %p)
41 %rv = load i32, i32* %p 51 %rv = load i32, i32* %p
42 ret i32 %rv 52 ret i32 %rv
43 } 53 }
44 54
45 define void @call_things() { 55 define void @call_things() {
47 call i32 @f(i32* %m) 57 call i32 @f(i32* %m)
48 call x86_thiscallcc i32 @g(i32* %m) 58 call x86_thiscallcc i32 @g(i32* %m)
49 call coldcc i32 @h(i32* %m) 59 call coldcc i32 @h(i32* %m)
50 call i32 @j(i32* %m) 60 call i32 @j(i32* %m)
51 %args = alloca inalloca i32 61 %args = alloca inalloca i32
52 call i32 @inalloca(i32* inalloca %args) 62 call i32 @inalloca(i32* inalloca(i32) %args)
53 ; TODO: handle preallocated 63 %c = call token @llvm.call.preallocated.setup(i32 1)
54 ;%c = call token @llvm.call.preallocated.setup(i32 1) 64 %N = call i8* @llvm.call.preallocated.arg(token %c, i32 0) preallocated(i32)
55 ;%N = call i8* @llvm.call.preallocated.arg(token %c, i32 0) preallocated(i32) 65 %n = bitcast i8* %N to i32*
56 ;%n = bitcast i8* %N to i32* 66 call i32 @preallocated(i32* preallocated(i32) %n) ["preallocated"(token %c)]
57 ;call i32 @preallocated(i32* preallocated(i32) %n) ["preallocated"(token %c)]
58 ret void 67 ret void
59 } 68 }
60
61 @llvm.used = appending global [1 x i8*] [
62 i8* bitcast (i32(i32*)* @j to i8*)
63 ], section "llvm.metadata"
64
65 ; CHECK-LABEL: define void @call_things() 69 ; CHECK-LABEL: define void @call_things()
66 ; CHECK: call fastcc i32 @f 70 ; CHECK: call fastcc i32 @f
67 ; CHECK: call fastcc i32 @g 71 ; CHECK: call fastcc i32 @g
68 ; CHECK: call coldcc i32 @h 72 ; CHECK: call coldcc i32 @h
69 ; CHECK: call i32 @j 73 ; CHECK: call i32 @j
70 ; CHECK: call fastcc i32 @inalloca(i32* %args) 74 ; CHECK: call fastcc i32 @inalloca(i32* %args)
75 ; CHECK-NOT: llvm.call.preallocated
76 ; CHECK: call fastcc i32 @preallocated(i32* %n)
77
78 @llvm.used = appending global [1 x i8*] [
79 i8* bitcast (i32(i32*)* @j to i8*)
80 ], section "llvm.metadata"