34 lines · c
1// RUN: %clang_cc1 -triple armv7a--none-eabi -target-abi aapcs -mfloat-abi soft -emit-llvm -o - -O2 %s | FileCheck %s --check-prefix=CHECK --check-prefix=SOFT2// RUN: %clang_cc1 -triple armv7a--none-eabi -target-abi aapcs -mfloat-abi hard -emit-llvm -o - -O2 %s | FileCheck %s --check-prefix=CHECK --check-prefix=HARD3// RUN: %clang_cc1 -triple armv7a--none-eabi -target-abi aapcs -mfloat-abi soft -fnative-half-arguments-and-returns -emit-llvm -o - -O2 %s | FileCheck %s --check-prefix=CHECK --check-prefix=NATIVE4 5__fp16 g;6 7void t1(__fp16 a) { g = a; }8// SOFT: define{{.*}} void @t1(half noundef [[PARAM:%.*]])9// HARD: define{{.*}} arm_aapcs_vfpcc void @t1(half noundef [[PARAM:%.*]])10// NATIVE: define{{.*}} void @t1(half noundef [[PARAM:%.*]])11// CHECK: store half [[PARAM]], ptr @g12 13__fp16 t2(void) { return g; }14// SOFT: define{{.*}} half @t2()15// HARD: define{{.*}} arm_aapcs_vfpcc half @t2()16// NATIVE: define{{.*}} half @t2()17// CHECK: [[LOAD:%.*]] = load half, ptr @g18// CHECK: ret half [[LOAD]]19 20_Float16 h;21 22void t3(_Float16 a) { h = a; }23// SOFT: define{{.*}} void @t3(half noundef [[PARAM:%.*]])24// HARD: define{{.*}} arm_aapcs_vfpcc void @t3(half noundef [[PARAM:%.*]])25// NATIVE: define{{.*}} void @t3(half noundef [[PARAM:%.*]])26// CHECK: store half [[PARAM]], ptr @h27 28_Float16 t4(void) { return h; }29// SOFT: define{{.*}} half @t4()30// HARD: define{{.*}} arm_aapcs_vfpcc half @t4()31// NATIVE: define{{.*}} half @t4()32// CHECK: [[LOAD:%.*]] = load half, ptr @h33// CHECK: ret half [[LOAD]]34