From: Ben Langmuir Date: Fri, 7 Aug 2015 01:59:56 +0000 (+0000) Subject: Make 'arm' cover both 32 and 64 bit architecutres X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=155571f0769506d01c50a4d5ccf3ebf52a6b6ea0;p=clang 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 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@244306 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 993f48ded3..9f0bd964be 100644 --- a/lib/Basic/Targets.cpp +++ b/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/test/Modules/Inputs/module.map b/test/Modules/Inputs/module.map index 904c65c2db..323e2cc85b 100644 --- a/test/Modules/Inputs/module.map +++ b/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/test/Modules/compiler_builtins_aarch64.m b/test/Modules/compiler_builtins_aarch64.m new file mode 100644 index 0000000000..6403f09b19 --- /dev/null +++ b/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/test/Modules/target-features.m b/test/Modules/target-features.m new file mode 100644 index 0000000000..b4524835f5 --- /dev/null +++ b/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