1 //===-- SystemZTargetInfo.cpp - SystemZ Target Implementation -----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "SystemZ.h"
11 #include "llvm/Module.h"
12 #include "llvm/Target/TargetRegistry.h"
13 using namespace llvm;
14 
15 Target llvm::TheSystemZTarget;
16 
17 static unsigned SystemZ_JITMatchQuality() {
18   return 0;
19 }
20 
21 static unsigned SystemZ_TripleMatchQuality(const std::string &TT) {
22   // We strongly match s390x
23   if (TT.size() >= 5 && TT[0] == 's' && TT[1] == '3' && TT[2] == '9' &&
24       TT[3] == '0' &&  TT[4] == 'x')
25     return 20;
26 
27   return 0;
28 }
29 
30 static unsigned SystemZ_ModuleMatchQuality(const Module &M) {
31   // Check for a triple match.
32   if (unsigned Q = SystemZ_TripleMatchQuality(M.getTargetTriple()))
33     return Q;
34 
35   // Otherwise we don't match.
36   return 0;
37 }
38 
39 extern "C" void LLVMInitializeSystemZTargetInfo() {
40   TargetRegistry::RegisterTarget(TheSystemZTarget, "systemz",
41                                  "SystemZ",
42                                  &SystemZ_TripleMatchQuality,
43                                  &SystemZ_ModuleMatchQuality,
44                                  &SystemZ_JITMatchQuality);
45 }
46