73 lines · c
1// RUN: %clang_cc1 -triple aarch64 -emit-llvm -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-AAPCS2// RUN: %clang_cc1 -triple arm64-apple-ios7.0 -target-abi darwinpcs -emit-llvm -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-DARWIN3// RUN: %clang_cc1 -triple aarch64-linux-gnu -emit-llvm -o - -x c %s | FileCheck %s --check-prefixes=CHECK,CHECK-AAPCS4 5typedef struct {6 float v[2];7} S0;8 9// CHECK-AAPCS: define{{.*}} float @f0([2 x float] alignstack(8) %h.coerce)10// CHECK-DARWIN: define{{.*}} float @f0([2 x float] %h.coerce)11float f0(S0 h) {12 return h.v[0];13}14 15// CHECK: define{{.*}} float @f0_call()16// CHECK-AAPCS: %call = call float @f0([2 x float] alignstack(8) %0)17// CHECK-DARWIN: %call = call float @f0([2 x float] %0)18float f0_call(void) {19 S0 h = {1.0f, 2.0f};20 return f0(h);21}22typedef struct {23 double v[2];24} S1;25// CHECK-AAPCS: define{{.*}} double @f1([2 x double] alignstack(8) %h.coerce)26// CHECK-DARWIN: define{{.*}} double @f1([2 x double] %h.coerce)27double f1(S1 h) {28 return h.v[0];29}30 31// CHECK: define{{.*}} double @f1_call()32// CHECK-AAPCS: %call = call double @f1([2 x double] alignstack(8) %033// CHECK-DARWIN: %call = call double @f1([2 x double] %034double f1_call(void) {35 S1 h = {1.0, 2.0};36 return f1(h);37}38typedef struct {39 __attribute__((__aligned__(16))) double v[2];40} S2;41 42// CHECK-AAPCS: define{{.*}} double @f2([2 x double] alignstack(16) %h.coerce)43// CHECK-DARWIN: define{{.*}} double @f2([2 x double] %h.coerce)44double f2(S2 h) {45 return h.v[0];46}47 48// CHECK: define{{.*}} double @f2_call()49// CHECK-AAPCS: %call = call double @f2([2 x double] alignstack(16) %0)50// CHECK-DARWIN: %call = call double @f2([2 x double] %051double f2_call(void) {52 S2 h = {1.0, 2.0};53 return f2(h);54}55 56typedef struct {57 __attribute__((__aligned__(32))) double v[4];58} S3;59 60// CHECK-AAPCS: define{{.*}} double @f3([4 x double] alignstack(16) %h.coerce)61// CHECK-DARWIN: define{{.*}} double @f3([4 x double] %h.coerce)62double f3(S3 h) {63 return h.v[0];64}65 66// CHECK: define{{.*}} double @f3_call()67// CHECK-AAPCS: %call = call double @f3([4 x double] alignstack(16) %0)68// CHECK-DARWIN: %call = call double @f3([4 x double] %069double f3_call(void) {70 S3 h = {1.0, 2.0};71 return f3(h);72}73