Mercurial > hg > CbC > CbC_llvm
comparison clang/test/CodeGen/arm64-microsoft-arguments.cpp @ 236:c4bab56944e8 llvm-original
LLVM 16
author | kono |
---|---|
date | Wed, 09 Nov 2022 17:45:10 +0900 |
parents | 79ff65ed7e25 |
children | 1f2b6ac9f198 |
comparison
equal
deleted
inserted
replaced
232:70dce7da266c | 236:c4bab56944e8 |
---|---|
1 // RUN: %clang_cc1 -triple aarch64-windows -ffreestanding -emit-llvm -O0 \ | 1 // RUN: %clang_cc1 -no-opaque-pointers -triple aarch64-windows -ffreestanding -emit-llvm -O0 \ |
2 // RUN: -x c++ -o - %s | FileCheck %s | 2 // RUN: -x c++ -o - %s | FileCheck %s |
3 | 3 |
4 // Pass and return for type size <= 8 bytes. | 4 // Pass and return for type size <= 8 bytes. |
5 // CHECK: define {{.*}} i64 @{{.*}}f1{{.*}}() | 5 // CHECK: define {{.*}} i64 @{{.*}}f1{{.*}}() |
6 // CHECK: call i64 {{.*}}func1{{.*}}(i64 %3) | 6 // CHECK: call i64 {{.*}}func1{{.*}}(i64 %3) |
27 return func2(x); | 27 return func2(x); |
28 } | 28 } |
29 | 29 |
30 // Pass and return for type size > 16 bytes. | 30 // Pass and return for type size > 16 bytes. |
31 // CHECK: define {{.*}} void @{{.*}}f3{{.*}}(%struct.S3* noalias sret(%struct.S3) align 4 %agg.result) | 31 // CHECK: define {{.*}} void @{{.*}}f3{{.*}}(%struct.S3* noalias sret(%struct.S3) align 4 %agg.result) |
32 // CHECK: call void {{.*}}func3{{.*}}(%struct.S3* sret(%struct.S3) align 4 %agg.result, %struct.S3* %agg.tmp) | 32 // CHECK: call void {{.*}}func3{{.*}}(%struct.S3* sret(%struct.S3) align 4 %agg.result, %struct.S3* noundef %agg.tmp) |
33 struct S3 { | 33 struct S3 { |
34 int a[5]; | 34 int a[5]; |
35 }; | 35 }; |
36 | 36 |
37 S3 func3(S3 x); | 37 S3 func3(S3 x); |
55 return func4(x); | 55 return func4(x); |
56 } | 56 } |
57 | 57 |
58 // Pass and return from instance method called from instance method. | 58 // Pass and return from instance method called from instance method. |
59 // CHECK: define {{.*}} void @{{.*}}bar@Q1{{.*}}(%class.Q1* {{[^,]*}} %this, %class.P1* inreg noalias sret(%class.P1) align 1 %agg.result) | 59 // CHECK: define {{.*}} void @{{.*}}bar@Q1{{.*}}(%class.Q1* {{[^,]*}} %this, %class.P1* inreg noalias sret(%class.P1) align 1 %agg.result) |
60 // CHECK: call void {{.*}}foo@P1{{.*}}(%class.P1* {{[^,]*}} %ref.tmp, %class.P1* inreg sret(%class.P1) align 1 %agg.result, i8 %1) | 60 // CHECK: call void {{.*}}foo@P1{{.*}}(%class.P1* noundef{{[^,]*}} %ref.tmp, %class.P1* inreg sret(%class.P1) align 1 %agg.result, i8 %1) |
61 | 61 |
62 class P1 { | 62 class P1 { |
63 public: | 63 public: |
64 P1 foo(P1 x); | 64 P1 foo(P1 x); |
65 }; | 65 }; |
74 return P1().foo(p1); | 74 return P1().foo(p1); |
75 } | 75 } |
76 | 76 |
77 // Pass and return from instance method called from free function. | 77 // Pass and return from instance method called from free function. |
78 // CHECK: define {{.*}} void {{.*}}bar{{.*}}() | 78 // CHECK: define {{.*}} void {{.*}}bar{{.*}}() |
79 // CHECK: call void {{.*}}foo@P2{{.*}}(%class.P2* {{[^,]*}} %ref.tmp, %class.P2* inreg sret(%class.P2) align 1 %retval, i8 %0) | 79 // CHECK: call void {{.*}}foo@P2{{.*}}(%class.P2* noundef{{[^,]*}} %ref.tmp, %class.P2* inreg sret(%class.P2) align 1 %retval, i8 %0) |
80 class P2 { | 80 class P2 { |
81 public: | 81 public: |
82 P2 foo(P2 x); | 82 P2 foo(P2 x); |
83 }; | 83 }; |
84 | 84 |