From 587aeafe2c1d7bcc3a330cab4c6812f736127baa Mon Sep 17 00:00:00 2001 From: Ben Langmuir Date: Fri, 7 Aug 2015 01:59:56 +0000 Subject: [PATCH] Make 'arm' cover both 32 and 64 bit architecutres ... and add aarch32 to specifically refer to the 32-bit ones. Previously, 'arm' meant only 32-bit architectures and there was no way for a module to build with both 32 and 64 bit ARM architectures. Now a module that is intended to work on both architectures can specify requires arm whereas a module only for 32-bit platforms can say requires aarch32 and just like before, 64-bit only can say requires aarch64 llvm-svn: 244306 --- clang/lib/Basic/Targets.cpp | 2 + clang/test/Modules/Inputs/module.map | 13 ++++ .../test/Modules/compiler_builtins_aarch64.m | 6 ++ clang/test/Modules/target-features.m | 61 +++++++++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 clang/test/Modules/compiler_builtins_aarch64.m create mode 100644 clang/test/Modules/target-features.m diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 993f48ded383..9f0bd964be12 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -4551,6 +4551,7 @@ public: bool hasFeature(StringRef Feature) const override { return llvm::StringSwitch(Feature) .Case("arm", true) + .Case("aarch32", true) .Case("softfloat", SoftFloat) .Case("thumb", isThumb()) .Case("neon", (FPU & NeonFPU) && !SoftFloat) @@ -5198,6 +5199,7 @@ public: bool hasFeature(StringRef Feature) const override { return Feature == "aarch64" || Feature == "arm64" || + Feature == "arm" || (Feature == "neon" && FPU == NeonMode); } diff --git a/clang/test/Modules/Inputs/module.map b/clang/test/Modules/Inputs/module.map index 904c65c2dbf4..323e2cc85b9b 100644 --- a/clang/test/Modules/Inputs/module.map +++ b/clang/test/Modules/Inputs/module.map @@ -347,3 +347,16 @@ module RequiresWithMissingHeader { header "RequiresWithMissingHeader-Missing2.h" } } + +module TargetFeatures { + module arm { + requires arm + module aarch32 { requires aarch32 } + module aarch64 { requires aarch64 } + } + module x86 { + requires x86 + module x86_32 { requires x86_32 } + module x86_64 { requires x86_64 } + } +} diff --git a/clang/test/Modules/compiler_builtins_aarch64.m b/clang/test/Modules/compiler_builtins_aarch64.m new file mode 100644 index 000000000000..6403f09b19ed --- /dev/null +++ b/clang/test/Modules/compiler_builtins_aarch64.m @@ -0,0 +1,6 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fsyntax-only -triple aarch64-unknown-unknown -target-feature +neon -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -verify %s +// expected-no-diagnostics +// REQUIRES: aarch64-registered-target +@import _Builtin_intrinsics.arm; +@import _Builtin_intrinsics.arm.neon; diff --git a/clang/test/Modules/target-features.m b/clang/test/Modules/target-features.m new file mode 100644 index 000000000000..b4524835f534 --- /dev/null +++ b/clang/test/Modules/target-features.m @@ -0,0 +1,61 @@ +// REQUIRES: x86-registered-target +// REQUIRES: arm-registered-target +// REQUIRES: aarch64-registered-target + +// RUN: rm -rf %t + +// Sanity check one of the compilations. +// RUN: %clang_cc1 -triple aarch64-unknown-unknown -fmodules -fmodules-cache-path=%t -fimplicit-module-maps -I %S/Inputs -fsyntax-only %s -verify -DSANITY_CHECK +// expected-no-diagnostics + +// Check all the targets: +// RUN: not %clang_cc1 -triple armv7-unknown-unknown -fmodules -fmodules-cache-path=%t -fimplicit-module-maps -I %S/Inputs -fsyntax-only %s 2> %t.aarch32 +// RUN: FileCheck %s -check-prefix=AARCH32 < %t.aarch32 +// RUN: not %clang_cc1 -triple aarch64-unknown-unknown -fmodules -fmodules-cache-path=%t -fimplicit-module-maps -I %S/Inputs -fsyntax-only %s 2> %t.aarch64 +// RUN: FileCheck %s -check-prefix=AARCH64 < %t.aarch64 +// RUN: not %clang_cc1 -triple i386-unknown-unknown -fmodules -fmodules-cache-path=%t -fimplicit-module-maps -I %S/Inputs -fsyntax-only %s 2> %t.x86_32 +// RUN: FileCheck %s -check-prefix=X86_32 < %t.x86_32 +// RUN: not %clang_cc1 -triple x86_64-unknown-unknown -fmodules -fmodules-cache-path=%t -fimplicit-module-maps -I %S/Inputs -fsyntax-only %s 2> %t.x86_64 +// RUN: FileCheck %s -check-prefix=X86_64 < %t.x86_64 + +#ifndef SANITY_CHECK +@import TargetFeatures; +// AARCH32-NOT: module 'TargetFeatures' requires +// AARCH64-NOT: module 'TargetFeatures' requires +// X86_32-NOT: module 'TargetFeatures' requires +// X86_64-NOT: module 'TargetFeatures' requires +@import TargetFeatures.arm; +// AARCH32-NOT: module 'TargetFeatures.arm' requires +// AARCH64-NOT: module 'TargetFeatures.arm' requires +// X86_32: module 'TargetFeatures.arm' requires feature 'arm' +// X86_64: module 'TargetFeatures.arm' requires feature 'arm' +@import TargetFeatures.arm.aarch32; +// AARCH32-NOT: module 'TargetFeatures.arm.aarch32' requires +// AARCH64: module 'TargetFeatures.arm.aarch32' requires feature 'aarch32' +// X86_32: module 'TargetFeatures.arm.aarch32' requires feature +// X86_64: module 'TargetFeatures.arm.aarch32' requires feature +#endif + +@import TargetFeatures.arm.aarch64; +// AARCH32: module 'TargetFeatures.arm.aarch64' requires feature 'aarch64' +// AARCH64-NOT: module 'TargetFeatures.arm.aarch64' requires +// X86_32: module 'TargetFeatures.arm.aarch64' requires feature +// X86_64: module 'TargetFeatures.arm.aarch64' requires feature + +#ifndef SANITY_CHECK +@import TargetFeatures.x86; +// AARCH32: module 'TargetFeatures.x86' requires feature 'x86' +// AARCH64: module 'TargetFeatures.x86' requires feature 'x86' +// X86_32-NOT: module 'TargetFeatures.x86' requires +// X86_64-NOT: module 'TargetFeatures.x86' requires +@import TargetFeatures.x86.x86_32; +// AARCH32: module 'TargetFeatures.x86.x86_32' requires feature +// AARCH64: module 'TargetFeatures.x86.x86_32' requires feature +// X86_32-NOT: module 'TargetFeatures.x86.x86_32' requires +// X86_64: module 'TargetFeatures.x86.x86_32' requires feature 'x86_32' +@import TargetFeatures.x86.x86_64; +// AARCH32: module 'TargetFeatures.x86.x86_64' requires feature +// AARCH64: module 'TargetFeatures.x86.x86_64' requires feature +// X86_32: module 'TargetFeatures.x86.x86_64' requires feature 'x86_64' +// X86_64-NOT: module 'TargetFeatures.x86.x86_64' requires +#endif