xref: /aosp_15_r20/external/clang/test/CodeGen/x86_64-arguments-win32.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -w -triple x86_64-pc-win32 -emit-llvm -o - %s | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li // To be ABI compatible with code generated by MSVC, there shouldn't be any
4*67e74705SXin Li // sign/zero extensions on types smaller than 64bit.
5*67e74705SXin Li 
6*67e74705SXin Li // CHECK-LABEL: define void @f1(i8 %a)
f1(char a)7*67e74705SXin Li void f1(char a) {}
8*67e74705SXin Li 
9*67e74705SXin Li // CHECK-LABEL: define void @f2(i8 %a)
f2(unsigned char a)10*67e74705SXin Li void f2(unsigned char a) {}
11*67e74705SXin Li 
12*67e74705SXin Li // CHECK-LABEL: define void @f3(i16 %a)
f3(short a)13*67e74705SXin Li void f3(short a) {}
14*67e74705SXin Li 
15*67e74705SXin Li // CHECK-LABEL: define void @f4(i16 %a)
f4(unsigned short a)16*67e74705SXin Li void f4(unsigned short a) {}
17*67e74705SXin Li 
18*67e74705SXin Li // For ABI compatibility with ICC, _Complex should be passed/returned
19*67e74705SXin Li // as if it were a struct with two elements.
20*67e74705SXin Li 
21*67e74705SXin Li // CHECK-LABEL: define void @f5(i64 %a.coerce)
f5(_Complex float a)22*67e74705SXin Li void f5(_Complex float a) {}
23*67e74705SXin Li 
24*67e74705SXin Li // CHECK-LABEL: define void @f6({ double, double }* %a)
f6(_Complex double a)25*67e74705SXin Li void f6(_Complex double a) {}
26*67e74705SXin Li 
27*67e74705SXin Li // CHECK-LABEL: define i64 @f7()
f7()28*67e74705SXin Li _Complex float f7() { return 1.0; }
29*67e74705SXin Li 
30*67e74705SXin Li // CHECK-LABEL: define void @f8({ double, double }* noalias sret %agg.result)
f8()31*67e74705SXin Li _Complex double f8() { return 1.0; }
32