brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · 1d327d7 Raw
52 lines · cpp
1// Covers a bug fix for ABI selection with homogenous aggregates:2//  See: https://bugs.llvm.org/show_bug.cgi?id=399823 4// REQUIRES: arm-registered-target5// RUN: %clang -mfloat-abi=hard --target=armv7-unknown-linux-gnueabi -O3 -S -o - %s | FileCheck %s -check-prefixes=HARD,CHECK6// RUN: %clang -mfloat-abi=softfp --target=armv7-unknown-linux-gnueabi -O3 -S -o - %s | FileCheck %s -check-prefixes=SOFTFP,CHECK7// RUN: %clang -mfloat-abi=soft --target=armv7-unknown-linux-gnueabi -O3 -S -o - %s | FileCheck %s -check-prefixes=SOFT,CHECK8 9struct S {10  float f;11  float d;12  float c;13  float t;14};15 16// Variadic functions should always marshal for the base standard.17// See section 5.5 (Parameter Passing) of the AAPCS.18float __attribute__((pcs("aapcs-vfp"))) variadic(S s, ...) {19  // CHECK-NOT: vmov s{{[0-9]+}}, s{{[0-9]+}}20  // CHECK: mov r{{[0-9]+}}, r{{[0-9]+}}21  return s.d;22}23 24float no_attribute(S s) {25  // SOFT: mov r{{[0-9]+}}, r{{[0-9]+}}26  // SOFTFP: mov r{{[0-9]+}}, r{{[0-9]+}}27  // HARD: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}28  return s.d;29}30 31float __attribute__((pcs("aapcs-vfp"))) baz(float x, float y) {32  // CHECK-NOT: mov s{{[0-9]+}}, r{{[0-9]+}}33  // SOFT: mov r{{[0-9]+}}, r{{[0-9]+}}34  // SOFTFP: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}35  // HARD: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}36  return y;37}38 39float __attribute__((pcs("aapcs-vfp"))) foo(S s) {40  // CHECK-NOT: mov s{{[0-9]+}}, r{{[0-9]+}}41  // SOFT: mov r{{[0-9]+}}, r{{[0-9]+}}42  // SOFTFP: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}43  // HARD: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}44  return s.d;45}46 47float __attribute__((pcs("aapcs"))) bar(S s) {48  // CHECK-NOT: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}49  // CHECK: mov r{{[0-9]+}}, r{{[0-9]+}}50  return s.d;51}52