diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2012-01-31 04:52:32 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2012-01-31 04:52:32 +0000 |
commit | 6f72ac4799a1a20c07cd96cc994dd6394ebff9a2 (patch) | |
tree | a645d65aa202cf9c0a5042a86bd134a97ad007b8 /lib/Support | |
parent | 90f1d8a5da6f962175af0a3ebedb76aeffa42694 (diff) | |
download | external_llvm-6f72ac4799a1a20c07cd96cc994dd6394ebff9a2.zip external_llvm-6f72ac4799a1a20c07cd96cc994dd6394ebff9a2.tar.gz external_llvm-6f72ac4799a1a20c07cd96cc994dd6394ebff9a2.tar.bz2 |
Add various coarse bit-width architecture predicates to llvm::Triple.
These are very useful for frontends and other utilities reasoning about
or selecting between triples.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149353 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support')
-rw-r--r-- | lib/Support/Triple.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp index e69d438..d726fa3 100644 --- a/lib/Support/Triple.cpp +++ b/lib/Support/Triple.cpp @@ -665,3 +665,52 @@ void Triple::setEnvironmentName(StringRef Str) { void Triple::setOSAndEnvironmentName(StringRef Str) { setTriple(getArchName() + "-" + getVendorName() + "-" + Str); } + +static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) { + switch (Arch) { + case llvm::Triple::UnknownArch: + case llvm::Triple::InvalidArch: + return 0; + + case llvm::Triple::msp430: + return 16; + + case llvm::Triple::amdil: + case llvm::Triple::arm: + case llvm::Triple::cellspu: + case llvm::Triple::hexagon: + case llvm::Triple::le32: + case llvm::Triple::mblaze: + case llvm::Triple::mips: + case llvm::Triple::mipsel: + case llvm::Triple::ppc: + case llvm::Triple::ptx32: + case llvm::Triple::sparc: + case llvm::Triple::tce: + case llvm::Triple::thumb: + case llvm::Triple::x86: + case llvm::Triple::xcore: + return 32; + + case llvm::Triple::mips64: + case llvm::Triple::mips64el: + case llvm::Triple::ppc64: + case llvm::Triple::ptx64: + case llvm::Triple::sparcv9: + case llvm::Triple::x86_64: + return 64; + } + llvm_unreachable("Invalid architecture value"); +} + +bool Triple::isArch64Bit() const { + return getArchPointerBitWidth(getArch()) == 64; +} + +bool Triple::isArch32Bit() const { + return getArchPointerBitWidth(getArch()) == 32; +} + +bool Triple::isArch16Bit() const { + return getArchPointerBitWidth(getArch()) == 16; +} |