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