diff options
author | Florian Hahn <florian.hahn@arm.com> | 2017-06-07 11:50:45 +0000 |
---|---|---|
committer | Florian Hahn <florian.hahn@arm.com> | 2017-06-07 11:50:45 +0000 |
commit | 54a73f97584724c131f71d7a6f56c1a1dffdea2a (patch) | |
tree | 92040b59ebea2751fdd1c208951824600c918b84 /lib/Basic/Targets.cpp | |
parent | 1741b26b00397c62ce7fb95250b37268484ac140 (diff) |
[CodeGen] Add thumb-mode to target-features for arm/thumb triples.
Summary:
The thumb-mode target feature is used to force Thumb or ARM code
generation on a per-function basis. Explicitly adding +thumb-mode to
functions for thumbxx triples enables mixed ARM/Thumb code generation in
places where compilation units with thumbxx and armxx triples are merged
together (e.g. the IR linker or LTO).
For armxx triples, -thumb-mode is added in a similar fashion.
Reviewers: echristo, t.p.northover, kristof.beyls, rengolin
Reviewed By: echristo
Subscribers: rinon, aemerson, mehdi_amini, javed.absar, cfe-commits
Differential Revision: https://reviews.llvm.org/D33448
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@304897 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic/Targets.cpp')
-rw-r--r-- | lib/Basic/Targets.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index a304a78354..89f192abc0 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -5442,6 +5442,13 @@ public: if (Feature[0] == '+') Features[Feature.drop_front(1)] = true; + // Enable or disable thumb-mode explicitly per function to enable mixed + // ARM and Thumb code generation. + if (isThumb()) + Features["thumb-mode"] = true; + else + Features["thumb-mode"] = false; + // Convert user-provided arm and thumb GNU target attributes to // [-|+]thumb-mode target features respectively. std::vector<std::string> UpdatedFeaturesVec(FeaturesVec); |