]> granicus.if.org Git - clang/commitdiff
AMDGPU: Default to hidden visibility
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Thu, 30 Aug 2018 08:18:06 +0000 (08:18 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Thu, 30 Aug 2018 08:18:06 +0000 (08:18 +0000)
Object linking isn't supported, so it's not useful
to emit default visibility. Default visibility requires
relocations we don't yet support for functions compiled
in another translation unit.

WebAssembly already does this, although they insert these
arguments in a different place for some reason.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@341033 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/ToolChains/AMDGPU.cpp
lib/Driver/ToolChains/AMDGPU.h
test/Driver/amdgpu-visibility.cl [new file with mode: 0644]

index 6b673feeadfcf5510a8d8a7c4b335e122a05bf10..451f31dd527a2bcf27ff5cebac3a191f5e2f8365 100644 (file)
@@ -98,3 +98,16 @@ AMDGPUToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch,
 
   return DAL;
 }
+
+void AMDGPUToolChain::addClangTargetOptions(
+    const llvm::opt::ArgList &DriverArgs,
+    llvm::opt::ArgStringList &CC1Args,
+    Action::OffloadKind DeviceOffloadingKind) const {
+  // Default to "hidden" visibility, as object level linking will not be
+  // supported for the forseeable future.
+  if (!DriverArgs.hasArg(options::OPT_fvisibility_EQ,
+                         options::OPT_fvisibility_ms_compat)) {
+    CC1Args.push_back("-fvisibility");
+    CC1Args.push_back("hidden");
+  }
+}
index 36114d0dabc43d72341e8ec37fde5f8646584d53..9d38eeedf59d2f28976befc5c18cc107083f4db9 100644 (file)
@@ -61,6 +61,10 @@ public:
   llvm::opt::DerivedArgList *
   TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
                 Action::OffloadKind DeviceOffloadKind) const override;
+
+  void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
+                             llvm::opt::ArgStringList &CC1Args,
+                             Action::OffloadKind DeviceOffloadKind) const override;
 };
 
 } // end namespace toolchains
diff --git a/test/Driver/amdgpu-visibility.cl b/test/Driver/amdgpu-visibility.cl
new file mode 100644 (file)
index 0000000..35969db
--- /dev/null
@@ -0,0 +1,7 @@
+// RUN: %clang -### -target amdgcn-amd-amdhsa -x cl -c -emit-llvm %s 2>&1 | FileCheck -check-prefix=DEFAULT %s
+// RUN: %clang -### -target amdgcn-amd-amdhsa -x cl -c -emit-llvm -fvisibility=protected  %s 2>&1 | FileCheck -check-prefix=OVERRIDE-PROTECTED  %s
+// RUN: %clang -### -target amdgcn-amd-amdhsa -x cl -c -emit-llvm -fvisibility-ms-compat  %s 2>&1 | FileCheck -check-prefix=OVERRIDE-MS  %s
+
+// DEFAULT: "-fvisibility" "hidden"
+// OVERRIDE-PROTECTED: "-fvisibility" "protected"
+// OVERRIDE-MS:  "-fvisibility" "hidden" "-ftype-visibility" "default"