iid_iunknown created this revision. iid_iunknown added reviewers: rengolin, t.p.northover, compnerd. iid_iunknown added subscribers: cfe-commits, asl. iid_iunknown set the repository for this revision to rL LLVM. Herald added subscribers: rengolin, aemerson.
Clang does not detect `aapcs-vfp` for the EABIHF environment. The reason is that only GNUEABIHF is considered while choosing calling convention, EABIHF is ignored. This causes clang to use `aapcs` for EABIHF and add the `arm_aapcscc` specifier to functions in generated IR. The modified `arm-cc.c` test checks that no calling convention specifier is added to functions for EABIHF, which means the default one is used (`CallingConv::ARM_AAPCS_VFP`). Repository: rL LLVM http://reviews.llvm.org/D20219 Files: lib/CodeGen/TargetInfo.cpp test/CodeGen/arm-cc.c Index: test/CodeGen/arm-cc.c =================================================================== --- test/CodeGen/arm-cc.c +++ test/CodeGen/arm-cc.c @@ -3,6 +3,7 @@ // RUN: %clang_cc1 -triple armv7-apple-darwin9 -target-abi aapcs -emit-llvm -w -o - %s | FileCheck -check-prefix=DARWIN-AAPCS %s // RUN: %clang_cc1 -triple arm-none-linux-gnueabi -target-abi apcs-gnu -emit-llvm -w -o - %s | FileCheck -check-prefix=LINUX-APCS %s // RUN: %clang_cc1 -triple arm-none-linux-gnueabi -target-abi aapcs -emit-llvm -w -o - %s | FileCheck -check-prefix=LINUX-AAPCS %s +// RUN: %clang_cc1 -triple armv7-none-eabihf -target-abi aapcs-vfp -emit-llvm -w -o - %s | FileCheck -check-prefix=BAREMETAL-AAPCS_VFP %s // DARWIN-APCS-LABEL: define void @f() @@ -13,6 +14,9 @@ // LINUX-APCS: call arm_apcscc void @g // LINUX-AAPCS-LABEL: define void @f() // LINUX-AAPCS: call void @g +// BAREMETAL-AAPCS_VFP-LABEL: define void @f() +// BAREMETAL-AAPCS_VFP: call void @g +// BAREMETAL-AAPCS_VFP: declare void @g() void g(void); void f(void) { g(); Index: lib/CodeGen/TargetInfo.cpp =================================================================== --- lib/CodeGen/TargetInfo.cpp +++ lib/CodeGen/TargetInfo.cpp @@ -7804,7 +7804,8 @@ Kind = ARMABIInfo::AAPCS16_VFP; else if (CodeGenOpts.FloatABI == "hard" || (CodeGenOpts.FloatABI != "soft" && - Triple.getEnvironment() == llvm::Triple::GNUEABIHF)) + (Triple.getEnvironment() == llvm::Triple::GNUEABIHF || + Triple.getEnvironment() == llvm::Triple::EABIHF))) Kind = ARMABIInfo::AAPCS_VFP; return SetCGInfo(new ARMTargetCodeGenInfo(Types, Kind));
Index: test/CodeGen/arm-cc.c =================================================================== --- test/CodeGen/arm-cc.c +++ test/CodeGen/arm-cc.c @@ -3,6 +3,7 @@ // RUN: %clang_cc1 -triple armv7-apple-darwin9 -target-abi aapcs -emit-llvm -w -o - %s | FileCheck -check-prefix=DARWIN-AAPCS %s // RUN: %clang_cc1 -triple arm-none-linux-gnueabi -target-abi apcs-gnu -emit-llvm -w -o - %s | FileCheck -check-prefix=LINUX-APCS %s // RUN: %clang_cc1 -triple arm-none-linux-gnueabi -target-abi aapcs -emit-llvm -w -o - %s | FileCheck -check-prefix=LINUX-AAPCS %s +// RUN: %clang_cc1 -triple armv7-none-eabihf -target-abi aapcs-vfp -emit-llvm -w -o - %s | FileCheck -check-prefix=BAREMETAL-AAPCS_VFP %s // DARWIN-APCS-LABEL: define void @f() @@ -13,6 +14,9 @@ // LINUX-APCS: call arm_apcscc void @g // LINUX-AAPCS-LABEL: define void @f() // LINUX-AAPCS: call void @g +// BAREMETAL-AAPCS_VFP-LABEL: define void @f() +// BAREMETAL-AAPCS_VFP: call void @g +// BAREMETAL-AAPCS_VFP: declare void @g() void g(void); void f(void) { g(); Index: lib/CodeGen/TargetInfo.cpp =================================================================== --- lib/CodeGen/TargetInfo.cpp +++ lib/CodeGen/TargetInfo.cpp @@ -7804,7 +7804,8 @@ Kind = ARMABIInfo::AAPCS16_VFP; else if (CodeGenOpts.FloatABI == "hard" || (CodeGenOpts.FloatABI != "soft" && - Triple.getEnvironment() == llvm::Triple::GNUEABIHF)) + (Triple.getEnvironment() == llvm::Triple::GNUEABIHF || + Triple.getEnvironment() == llvm::Triple::EABIHF))) Kind = ARMABIInfo::AAPCS_VFP; return SetCGInfo(new ARMTargetCodeGenInfo(Types, Kind));
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits