1f563bd74SQiu Chaofan // REQUIRES: powerpc-registered-target 2*39db5e1eSNikita Popov // RUN: %clang_cc1 -triple powerpc-unknown-aix -target-feature +altivec \ 3f563bd74SQiu Chaofan // RUN: -emit-llvm -o - %s | FileCheck --check-prefix=AIX32 %s 4*39db5e1eSNikita Popov // RUN: %clang_cc1 -triple powerpc64-unknown-aix -target-feature +altivec \ 5f563bd74SQiu Chaofan // RUN: -emit-llvm -o - %s | FileCheck --check-prefix=AIX64 %s 6f563bd74SQiu Chaofan 7f563bd74SQiu Chaofan typedef struct { 8f563bd74SQiu Chaofan } Zero; 9f563bd74SQiu Chaofan typedef struct { 10f563bd74SQiu Chaofan char c; 11f563bd74SQiu Chaofan } One; 12f563bd74SQiu Chaofan typedef struct { 13f563bd74SQiu Chaofan short s; 14f563bd74SQiu Chaofan } Two; 15f563bd74SQiu Chaofan typedef struct { 16f563bd74SQiu Chaofan char c[3]; 17f563bd74SQiu Chaofan } Three; 18f563bd74SQiu Chaofan typedef struct { 19f563bd74SQiu Chaofan float f; 20f563bd74SQiu Chaofan } Four; 21f563bd74SQiu Chaofan typedef struct { 22f563bd74SQiu Chaofan char c[5]; 23f563bd74SQiu Chaofan } Five; 24f563bd74SQiu Chaofan typedef struct { 25f563bd74SQiu Chaofan short s[3]; 26f563bd74SQiu Chaofan } Six; 27f563bd74SQiu Chaofan typedef struct { 28f563bd74SQiu Chaofan char c[7]; 29f563bd74SQiu Chaofan } Seven; 30f563bd74SQiu Chaofan typedef struct { 31f563bd74SQiu Chaofan long long l; 32f563bd74SQiu Chaofan } Eight; 33f563bd74SQiu Chaofan typedef struct { 34f563bd74SQiu Chaofan int i; 35f563bd74SQiu Chaofan } __attribute__((aligned(32))) OverAligned; 36f563bd74SQiu Chaofan typedef struct { 37f563bd74SQiu Chaofan int i; 38f563bd74SQiu Chaofan vector signed int vsi; 39f563bd74SQiu Chaofan } StructVector; 40f563bd74SQiu Chaofan 41*39db5e1eSNikita Popov // AIX32-LABEL: define void @arg0(ptr noundef byval(%struct.Zero) align 4 %x) 42*39db5e1eSNikita Popov // AIX64-LABEL: define void @arg0(ptr noundef byval(%struct.Zero) align 8 %x) arg0(Zero x)43f563bd74SQiu Chaofanvoid arg0(Zero x) {} 44f563bd74SQiu Chaofan 45*39db5e1eSNikita Popov // AIX32-LABEL: define void @arg1(ptr noundef byval(%struct.One) align 4 %x) 46*39db5e1eSNikita Popov // AIX64-LABEL: define void @arg1(ptr noundef byval(%struct.One) align 8 %x) arg1(One x)47f563bd74SQiu Chaofanvoid arg1(One x) {} 48f563bd74SQiu Chaofan 49*39db5e1eSNikita Popov // AIX32-LABEL: define void @arg2(ptr noundef byval(%struct.Two) align 4 %x) 50*39db5e1eSNikita Popov // AIX64-LABEL: define void @arg2(ptr noundef byval(%struct.Two) align 8 %x) arg2(Two x)51f563bd74SQiu Chaofanvoid arg2(Two x) {} 52f563bd74SQiu Chaofan 53*39db5e1eSNikita Popov // AIX32-LABEL: define void @arg3(ptr noundef byval(%struct.Three) align 4 %x) 54*39db5e1eSNikita Popov // AIX64-LABEL: define void @arg3(ptr noundef byval(%struct.Three) align 8 %x) arg3(Three x)55f563bd74SQiu Chaofanvoid arg3(Three x) {} 56f563bd74SQiu Chaofan 57*39db5e1eSNikita Popov // AIX32-LABEL: define void @arg4(ptr noundef byval(%struct.Four) align 4 %x) 58*39db5e1eSNikita Popov // AIX64-LABEL: define void @arg4(ptr noundef byval(%struct.Four) align 8 %x) arg4(Four x)59f563bd74SQiu Chaofanvoid arg4(Four x) {} 60f563bd74SQiu Chaofan 61*39db5e1eSNikita Popov // AIX32-LABEL: define void @arg5(ptr noundef byval(%struct.Five) align 4 %x) 62*39db5e1eSNikita Popov // AIX64-LABEL: define void @arg5(ptr noundef byval(%struct.Five) align 8 %x) arg5(Five x)63f563bd74SQiu Chaofanvoid arg5(Five x) {} 64f563bd74SQiu Chaofan 65*39db5e1eSNikita Popov // AIX32-LABEL: define void @arg6(ptr noundef byval(%struct.Six) align 4 %x) 66*39db5e1eSNikita Popov // AIX64-LABEL: define void @arg6(ptr noundef byval(%struct.Six) align 8 %x) arg6(Six x)67f563bd74SQiu Chaofanvoid arg6(Six x) {} 68f563bd74SQiu Chaofan 69*39db5e1eSNikita Popov // AIX32-LABEL: define void @arg7(ptr noundef byval(%struct.Seven) align 4 %x) 70*39db5e1eSNikita Popov // AIX64-LABEL: define void @arg7(ptr noundef byval(%struct.Seven) align 8 %x) arg7(Seven x)71f563bd74SQiu Chaofanvoid arg7(Seven x) {} 72f563bd74SQiu Chaofan 73*39db5e1eSNikita Popov // AIX32-LABEL: define void @arg8(ptr noundef byval(%struct.Eight) align 4 %0) 74f563bd74SQiu Chaofan // AIX32: %x = alloca %struct.Eight, align 8 75*39db5e1eSNikita Popov // AIX32: call void @llvm.memcpy.p0.p0.i32 76*39db5e1eSNikita Popov // AIX64-LABEL: define void @arg8(ptr noundef byval(%struct.Eight) align 8 %x) arg8(Eight x)77f563bd74SQiu Chaofanvoid arg8(Eight x) {} 78f563bd74SQiu Chaofan 79*39db5e1eSNikita Popov // AIX32-LABEL: define void @arg9(ptr noundef byval(%struct.OverAligned) align 4 %0) 80f563bd74SQiu Chaofan // AIX32: %x = alloca %struct.OverAligned, align 32 81*39db5e1eSNikita Popov // AIX32: call void @llvm.memcpy.p0.p0.i32 82*39db5e1eSNikita Popov // AIX64-LABEL: define void @arg9(ptr noundef byval(%struct.OverAligned) align 8 %0) 83f563bd74SQiu Chaofan // AIX64: %x = alloca %struct.OverAligned, align 32 84*39db5e1eSNikita Popov // AIX64: call void @llvm.memcpy.p0.p0.i64 arg9(OverAligned x)85f563bd74SQiu Chaofanvoid arg9(OverAligned x) {} 86f563bd74SQiu Chaofan 87*39db5e1eSNikita Popov // AIX32-LABEL: define void @arg10(ptr noundef byval(%struct.StructVector) align 16 %x) 88*39db5e1eSNikita Popov // AIX64-LABEL: define void @arg10(ptr noundef byval(%struct.StructVector) align 16 %x) arg10(StructVector x)89f563bd74SQiu Chaofanvoid arg10(StructVector x) {} 90