Mercurial > hg > CbC > CbC_llvm
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" |