annotate clang/test/CodeGenCXX/arm-pcs.cpp @ 206:f17a3b42b08b

Added tag before-12 for changeset b7591485f4cd
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 07 Jun 2021 21:25:57 +0900
parents 1d019706d866
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // Covers a bug fix for ABI selection with homogenous aggregates:
anatofuz
parents:
diff changeset
2 // See: https://bugs.llvm.org/show_bug.cgi?id=39982
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 // REQUIRES: arm-registered-target
anatofuz
parents:
diff changeset
5 // RUN: %clang -mfloat-abi=hard --target=armv7-unknown-linux-gnueabi -O3 -S -o - %s | FileCheck %s -check-prefixes=HARD,CHECK
anatofuz
parents:
diff changeset
6 // RUN: %clang -mfloat-abi=softfp --target=armv7-unknown-linux-gnueabi -O3 -S -o - %s | FileCheck %s -check-prefixes=SOFTFP,CHECK
anatofuz
parents:
diff changeset
7 // RUN: %clang -mfloat-abi=soft --target=armv7-unknown-linux-gnueabi -O3 -S -o - %s | FileCheck %s -check-prefixes=SOFT,CHECK
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 struct S {
anatofuz
parents:
diff changeset
10 float f;
anatofuz
parents:
diff changeset
11 float d;
anatofuz
parents:
diff changeset
12 float c;
anatofuz
parents:
diff changeset
13 float t;
anatofuz
parents:
diff changeset
14 };
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 // Variadic functions should always marshal for the base standard.
anatofuz
parents:
diff changeset
17 // See section 5.5 (Parameter Passing) of the AAPCS.
anatofuz
parents:
diff changeset
18 float __attribute__((pcs("aapcs-vfp"))) variadic(S s, ...) {
anatofuz
parents:
diff changeset
19 // CHECK-NOT: vmov s{{[0-9]+}}, s{{[0-9]+}}
anatofuz
parents:
diff changeset
20 // CHECK: mov r{{[0-9]+}}, r{{[0-9]+}}
anatofuz
parents:
diff changeset
21 return s.d;
anatofuz
parents:
diff changeset
22 }
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 float no_attribute(S s) {
anatofuz
parents:
diff changeset
25 // SOFT: mov r{{[0-9]+}}, r{{[0-9]+}}
anatofuz
parents:
diff changeset
26 // SOFTFP: mov r{{[0-9]+}}, r{{[0-9]+}}
anatofuz
parents:
diff changeset
27 // HARD: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
anatofuz
parents:
diff changeset
28 return s.d;
anatofuz
parents:
diff changeset
29 }
anatofuz
parents:
diff changeset
30
anatofuz
parents:
diff changeset
31 float __attribute__((pcs("aapcs-vfp"))) baz(float x, float y) {
anatofuz
parents:
diff changeset
32 // CHECK-NOT: mov s{{[0-9]+}}, r{{[0-9]+}}
anatofuz
parents:
diff changeset
33 // SOFT: mov r{{[0-9]+}}, r{{[0-9]+}}
anatofuz
parents:
diff changeset
34 // SOFTFP: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
anatofuz
parents:
diff changeset
35 // HARD: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
anatofuz
parents:
diff changeset
36 return y;
anatofuz
parents:
diff changeset
37 }
anatofuz
parents:
diff changeset
38
anatofuz
parents:
diff changeset
39 float __attribute__((pcs("aapcs-vfp"))) foo(S s) {
anatofuz
parents:
diff changeset
40 // CHECK-NOT: mov s{{[0-9]+}}, r{{[0-9]+}}
anatofuz
parents:
diff changeset
41 // SOFT: mov r{{[0-9]+}}, r{{[0-9]+}}
anatofuz
parents:
diff changeset
42 // SOFTFP: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
anatofuz
parents:
diff changeset
43 // HARD: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
anatofuz
parents:
diff changeset
44 return s.d;
anatofuz
parents:
diff changeset
45 }
anatofuz
parents:
diff changeset
46
anatofuz
parents:
diff changeset
47 float __attribute__((pcs("aapcs"))) bar(S s) {
anatofuz
parents:
diff changeset
48 // CHECK-NOT: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
anatofuz
parents:
diff changeset
49 // CHECK: mov r{{[0-9]+}}, r{{[0-9]+}}
anatofuz
parents:
diff changeset
50 return s.d;
anatofuz
parents:
diff changeset
51 }