summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-04-16 19:11:17 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-04-16 19:11:17 +0000
commit92ad94e7cd8f95019d66b1534d6187f87c293a9c (patch)
tree8864d88a6c5f64bbb0fab3e818e40cd99bdc8a6e /clang/lib
parent58d5e0c0685806105b8c126b0c51c6ea1d0d4341 (diff)
downloadbcm5719-llvm-92ad94e7cd8f95019d66b1534d6187f87c293a9c.tar.gz
bcm5719-llvm-92ad94e7cd8f95019d66b1534d6187f87c293a9c.zip
[Hexagon] Emit a warning when -fvectorize is given without -mhvx
llvm-svn: 330150
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Driver/ToolChains/Hexagon.cpp21
-rw-r--r--clang/lib/Driver/ToolChains/Hexagon.h1
2 files changed, 15 insertions, 7 deletions
diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp
index 6402a8288ba..04b09d94832 100644
--- a/clang/lib/Driver/ToolChains/Hexagon.cpp
+++ b/clang/lib/Driver/ToolChains/Hexagon.cpp
@@ -108,8 +108,11 @@ void hexagon::getHexagonTargetFeatures(const Driver &D, const ArgList &Args,
Features.push_back(UseLongCalls ? "+long-calls" : "-long-calls");
- bool HasHVX(false);
+ bool HasHVX = false;
handleHVXTargetFeatures(D, Args, Features, HasHVX);
+
+ if (HexagonToolChain::isAutoHVXEnabled(Args) && !HasHVX)
+ D.Diag(diag::warn_drv_vectorize_needs_hvx);
}
// Hexagon tools start.
@@ -520,12 +523,9 @@ void HexagonToolChain::addClangTargetOptions(const ArgList &DriverArgs,
CC1Args.push_back("-target-feature");
CC1Args.push_back("+reserved-r19");
}
- if (Arg *A = DriverArgs.getLastArg(options::OPT_fvectorize,
- options::OPT_fno_vectorize)) {
- if (A->getOption().matches(options::OPT_fvectorize)) {
- CC1Args.push_back("-mllvm");
- CC1Args.push_back("-hexagon-autohvx");
- }
+ if (isAutoHVXEnabled(DriverArgs)) {
+ CC1Args.push_back("-mllvm");
+ CC1Args.push_back("-hexagon-autohvx");
}
}
@@ -564,6 +564,13 @@ HexagonToolChain::GetCXXStdlibType(const ArgList &Args) const {
return ToolChain::CST_Libstdcxx;
}
+bool HexagonToolChain::isAutoHVXEnabled(const llvm::opt::ArgList &Args) {
+ if (Arg *A = Args.getLastArg(options::OPT_fvectorize,
+ options::OPT_fno_vectorize))
+ return A->getOption().matches(options::OPT_fvectorize);
+ return false;
+}
+
//
// Returns the default CPU for Hexagon. This is the default compilation target
// if no Hexagon processor is selected at the command-line.
diff --git a/clang/lib/Driver/ToolChains/Hexagon.h b/clang/lib/Driver/ToolChains/Hexagon.h
index 229a08c76df..e43b8a5b880 100644
--- a/clang/lib/Driver/ToolChains/Hexagon.h
+++ b/clang/lib/Driver/ToolChains/Hexagon.h
@@ -94,6 +94,7 @@ public:
void getHexagonLibraryPaths(const llvm::opt::ArgList &Args,
ToolChain::path_list &LibPaths) const;
+ static bool isAutoHVXEnabled(const llvm::opt::ArgList &Args);
static const StringRef GetDefaultCPU();
static const StringRef GetTargetCPUVersion(const llvm::opt::ArgList &Args);
OpenPOWER on IntegriCloud