Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 9 Jun 2011 22:17:27 +0000 (UTC)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r222902 - in projects/llvm-ia64: contrib/llvm/include/llvm/ADT contrib/llvm/lib/Support contrib/llvm/lib/Target/IA64 contrib/llvm/lib/Target/IA64/TargetInfo lib/clang lib/clang/include/...
Message-ID:  <201106092217.p59MHRsf096814@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marcel
Date: Thu Jun  9 22:17:27 2011
New Revision: 222902
URL: http://svn.freebsd.org/changeset/base/222902

Log:
  Add a skeletal IA64 backend.

Added:
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.h
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64AsmPrinter.cpp
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.cpp
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.h
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64InstrInfo.cpp
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64InstrInfo.h
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCAsmInfo.cpp
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCAsmInfo.h
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.h
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64SelectionDAGInfo.cpp
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64SelectionDAGInfo.h
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.cpp
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.h
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetLowering.cpp
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetLowering.h
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetMachine.cpp
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetMachine.h
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/TargetInfo/
  projects/llvm-ia64/contrib/llvm/lib/Target/IA64/TargetInfo/IA64TargetInfo.cpp
  projects/llvm-ia64/lib/clang/libllvmia64codegen/
  projects/llvm-ia64/lib/clang/libllvmia64codegen/Makefile
  projects/llvm-ia64/lib/clang/libllvmia64info/
  projects/llvm-ia64/lib/clang/libllvmia64info/Makefile
Modified:
  projects/llvm-ia64/contrib/llvm/include/llvm/ADT/Triple.h
  projects/llvm-ia64/contrib/llvm/lib/Support/Triple.cpp
  projects/llvm-ia64/lib/clang/Makefile
  projects/llvm-ia64/lib/clang/clang.build.mk
  projects/llvm-ia64/lib/clang/include/llvm/Config/Targets.def
  projects/llvm-ia64/usr.bin/clang/clang/Makefile

Modified: projects/llvm-ia64/contrib/llvm/include/llvm/ADT/Triple.h
==============================================================================
--- projects/llvm-ia64/contrib/llvm/include/llvm/ADT/Triple.h	Thu Jun  9 21:29:15 2011	(r222901)
+++ projects/llvm-ia64/contrib/llvm/include/llvm/ADT/Triple.h	Thu Jun  9 22:17:27 2011	(r222902)
@@ -50,6 +50,7 @@ public:
     arm,     // ARM; arm, armv.*, xscale
     bfin,    // Blackfin: bfin
     cellspu, // CellSPU: spu, cellspu
+    ia64,    // IA-64: ia64
     mips,    // MIPS: mips, mipsallegrex
     mipsel,  // MIPSEL: mipsel, mipsallegrexel, psp
     msp430,  // MSP430: msp430

Modified: projects/llvm-ia64/contrib/llvm/lib/Support/Triple.cpp
==============================================================================
--- projects/llvm-ia64/contrib/llvm/lib/Support/Triple.cpp	Thu Jun  9 21:29:15 2011	(r222901)
+++ projects/llvm-ia64/contrib/llvm/lib/Support/Triple.cpp	Thu Jun  9 22:17:27 2011	(r222902)
@@ -27,6 +27,7 @@ const char *Triple::getArchTypeName(Arch
   case arm:     return "arm";
   case bfin:    return "bfin";
   case cellspu: return "cellspu";
+  case ia64:    return "ia64";
   case mips:    return "mips";
   case mipsel:  return "mipsel";
   case msp430:  return "msp430";
@@ -62,6 +63,8 @@ const char *Triple::getArchTypePrefix(Ar
 
   case cellspu: return "spu";
 
+  case ia64:    return "ia64";
+
   case ppc64:
   case ppc:     return "ppc";
 
@@ -139,6 +142,8 @@ Triple::ArchType Triple::getArchTypeForL
     return bfin;
   if (Name == "cellspu")
     return cellspu;
+  if (Name == "ia64")
+    return ia64;
   if (Name == "mips")
     return mips;
   if (Name == "mipsel")
@@ -279,6 +284,8 @@ Triple::ArchType Triple::ParseArch(Strin
     return alpha;
   else if (ArchName == "spu" || ArchName == "cellspu")
     return cellspu;
+  else if (ArchName == "ia64")
+    return ia64;
   else if (ArchName == "msp430")
     return msp430;
   else if (ArchName == "mips" || ArchName == "mipsallegrex")

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.h	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,23 @@
+#ifndef LLVM_TARGET_IA64_H
+#define LLVM_TARGET_IA64_H
+
+#include "llvm/Target/TargetMachine.h"
+
+namespace llvm {
+
+  class FunctionPass;
+  class IA64TargetMachine;
+
+  FunctionPass *createIA64ISelDag(IA64TargetMachine &TM,
+	CodeGenOpt::Level OptLevel);
+
+  FunctionPass *createIA64BundleSelectionPass();
+
+  extern Target TheIA64Target;
+
+} // namespace llvm
+
+#include "IA64GenRegisterNames.inc"
+#include "IA64GenInstrNames.inc"
+
+#endif // LLVM_TARGET_IA64_H

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,55 @@
+include "llvm/Target/Target.td"
+
+//
+// Subtargets
+// 
+class IA64Impl<string name, list<SubtargetFeature> features> :
+    Processor<name, NoItineraries, features>;
+
+def : IA64Impl<"merced", []>;
+def : IA64Impl<"mckinley", []>;
+
+//
+// Registers
+//
+class IA64Register<string name> : Register<name> {
+  let Namespace = "IA64";
+}
+
+def F0 : IA64Register<"f0">;
+def F1 : IA64Register<"f1">;
+
+def P0 : IA64Register<"p0">;
+
+def R0 : IA64Register<"r0">;
+
+//
+// Register classes
+//
+class IA64RegisterClass<list<ValueType> types, int align, list<Register> regs>
+  : RegisterClass<"IA64", types, align, regs> {
+}
+
+def FloatingPoint : IA64RegisterClass<[f128], 128, [F0, F1]>;
+def General : IA64RegisterClass<[i64], 64, [R0]>;
+def Predicate : IA64RegisterClass<[i1], 0, [P0]>;
+
+//
+// Instructions
+//
+class IA64Instruction<dag outs, dag ins> : Instruction {
+  let Namespace = "IA64";
+  let OutOperandList = outs;
+  let InOperandList = ins;
+}
+
+def NOP : IA64Instruction<(outs), (ins)>;
+
+def IA64InstrInfo : InstrInfo;
+
+//
+// Target for the Itanium Processor Family (IPF)
+//
+def IA64 : Target {
+  let InstructionSet = IA64InstrInfo;
+}

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64AsmPrinter.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64AsmPrinter.cpp	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,56 @@
+#include "IA64.h"
+
+#include "llvm/Module.h"
+#include "llvm/Type.h"
+#include "llvm/CodeGen/AsmPrinter.h"
+#include "llvm/CodeGen/DwarfWriter.h"
+#include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/MC/MCAsmInfo.h"
+#include "llvm/Target/TargetRegistry.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/FormattedStream.h"
+#include "llvm/ADT/Statistic.h"
+
+using namespace llvm;
+
+namespace {
+  class IA64AsmPrinter : public AsmPrinter {
+    std::set<std::string> ExternalFunctionNames, ExternalObjectNames;
+  public:
+    explicit IA64AsmPrinter(formatted_raw_ostream &O, TargetMachine &TM,
+	    const MCAsmInfo *T, bool V) :
+        AsmPrinter(O, TM, T, V) {}
+
+    virtual const char *getPassName() const {
+      return "IA64 Assembly Printer";
+    }
+
+    static const char *getRegisterName(unsigned RegNo);
+
+    void PrintGlobalVariable(const GlobalVariable *GVar);
+
+    void printInstruction(const MachineInstr *MI);
+    bool runOnMachineFunction(MachineFunction &F);
+  };
+} // end of anonymous namespace
+
+#include "IA64GenAsmWriter.inc"
+
+void
+IA64AsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar)
+{
+  llvm_unreachable(__func__);
+}
+
+bool
+IA64AsmPrinter::runOnMachineFunction(MachineFunction &MF)
+{
+  llvm_unreachable(__func__);
+}
+
+
+extern "C" void
+LLVMInitializeIA64AsmPrinter()
+{
+  RegisterAsmPrinter<IA64AsmPrinter> X(TheIA64Target);
+}

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.cpp	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,33 @@
+#include "IA64FrameLowering.h"
+#include "IA64InstrInfo.h"
+
+#include "llvm/Function.h"
+#include "llvm/CodeGen/MachineFrameInfo.h"
+#include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/CodeGen/MachineInstrBuilder.h"
+#include "llvm/CodeGen/MachineModuleInfo.h"
+#include "llvm/CodeGen/MachineRegisterInfo.h"
+#include "llvm/Target/TargetData.h"
+#include "llvm/Target/TargetOptions.h"
+#include "llvm/Support/CommandLine.h"
+
+using namespace llvm;
+
+void
+IA64FrameLowering::emitPrologue(MachineFunction &MF) const
+{
+  llvm_unreachable(__func__);
+}
+
+void
+IA64FrameLowering::emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB)
+    const
+{
+  llvm_unreachable(__func__);
+}
+
+bool
+IA64FrameLowering::hasFP(const MachineFunction &MF) const
+{ 
+  llvm_unreachable(__func__);
+}

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.h	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,31 @@
+#ifndef LLVM_TARGET_IA64_FRAMELOWERING_H
+#define LLVM_TARGET_IA64_FRAMELOWERING_H
+
+#include "IA64.h"
+#include "IA64Subtarget.h"
+#include "llvm/Target/TargetFrameLowering.h"
+
+namespace llvm {
+
+  class IA64Subtarget;
+
+  class IA64FrameLowering : public TargetFrameLowering {
+  protected:
+    const IA64Subtarget &STI;
+
+  public:
+    explicit IA64FrameLowering(const IA64Subtarget &sti) :
+	TargetFrameLowering(TargetFrameLowering::StackGrowsDown, 2, -2),
+	STI(sti)
+    {
+    }
+
+    void emitPrologue(MachineFunction &MF) const;
+    void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
+
+    bool hasFP(const MachineFunction &MF) const;
+  };
+
+} // namespace llvm
+
+#endif // LLVM_TARGET_IA64_FRAMELOWERING_H

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64InstrInfo.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64InstrInfo.cpp	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,22 @@
+#include "IA64.h"
+#include "IA64InstrInfo.h"
+#include "IA64TargetMachine.h"
+
+#include "llvm/Function.h"
+#include "llvm/CodeGen/MachineFrameInfo.h"
+#include "llvm/CodeGen/MachineInstrBuilder.h"
+#include "llvm/CodeGen/MachineRegisterInfo.h"
+#include "llvm/CodeGen/PseudoSourceValue.h"
+#include "llvm/Support/ErrorHandling.h"
+
+#include "IA64GenInstrInfo.inc"
+
+using namespace llvm;
+
+IA64InstrInfo::IA64InstrInfo(IA64TargetMachine &tm) :
+    TargetInstrInfoImpl(IA64Insts, array_lengthof(IA64Insts)),
+    RI(tm, *this),
+    TM(tm)
+{
+  // nothing to do
+}

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64InstrInfo.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64InstrInfo.h	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,29 @@
+#ifndef LLVM_TARGET_IA64_INSTRINFO_H
+#define LLVM_TARGET_IA64_INSTRINFO_H
+
+#include "IA64RegisterInfo.h"
+
+#include "llvm/Target/TargetInstrInfo.h"
+
+namespace llvm {
+
+  class IA64TargetMachine;
+
+  class IA64InstrInfo : public TargetInstrInfoImpl {
+    const IA64RegisterInfo RI;
+    IA64TargetMachine &TM;
+
+  public:
+    explicit IA64InstrInfo(IA64TargetMachine &TM);
+
+    /// getRegisterInfo - TargetInstrInfo is a superset of MRegister info.  As
+    /// such, whenever a client has an instance of instruction info, it should
+    /// always be able to get register info as well (through this method).
+    ///
+    virtual const TargetRegisterInfo &getRegisterInfo() const { return RI; }
+
+  };
+
+} // namespace llvm
+
+#endif // LLVM_TARGET_IA64_INSTRINFO_H

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCAsmInfo.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCAsmInfo.cpp	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,14 @@
+#include "IA64MCAsmInfo.h"
+
+using namespace llvm;
+
+IA64MCAsmInfo::IA64MCAsmInfo(const Target &T, StringRef TT) {
+  AsciiDirective = "\tstring\t";
+  AscizDirective = "\tstringz\t";
+  CommentString = "//";
+  Data8bitsDirective = "\tdata1\t";
+  Data16bitsDirective = "\tdata2\t";
+  Data32bitsDirective = "\tdata4\t";
+  Data64bitsDirective = "\tdata8\t";
+  ZeroDirective = NULL;
+}

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCAsmInfo.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCAsmInfo.h	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,16 @@
+#ifndef LLVM_TARGET_IA64_MCASMINFO_H
+#define LLVM_TARGET_IA64_MCASMINFO_H
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/MC/MCAsmInfo.h"
+
+namespace llvm {
+  class Target;
+
+  struct IA64MCAsmInfo : public MCAsmInfo {
+    explicit IA64MCAsmInfo(const Target &T, StringRef TT);
+  };
+
+} // namespace llvm
+
+#endif // LLVM_TARGET_IA64_MCASMINFO_H

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,63 @@
+#include "IA64.h"
+#include "IA64RegisterInfo.h"
+#include "IA64TargetMachine.h"
+
+#include "llvm/Function.h"
+#include "llvm/CodeGen/MachineFrameInfo.h"
+#include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/CodeGen/MachineInstrBuilder.h"
+#include "llvm/Target/TargetMachine.h"
+#include "llvm/Target/TargetOptions.h"
+#include "llvm/ADT/BitVector.h"
+#include "llvm/Support/ErrorHandling.h"
+
+using namespace llvm;
+
+// FIXME: Provide proper call frame setup / destroy opcodes.
+IA64RegisterInfo::IA64RegisterInfo(IA64TargetMachine &tm,
+	const TargetInstrInfo &tii) :
+    IA64GenRegisterInfo(IA64::NOP, IA64::NOP),
+    TM(tm),
+    TII(tii)
+{
+  StackAlign = TM.getFrameLowering()->getStackAlignment();
+}
+
+const unsigned *
+IA64RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const
+{
+  llvm_unreachable(__func__);
+}
+
+BitVector
+IA64RegisterInfo::getReservedRegs(const MachineFunction &MF) const
+{
+  llvm_unreachable(__func__);
+}
+
+void
+IA64RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj,
+    RegScavenger *RS) const
+{
+  llvm_unreachable(__func__);
+}
+
+int
+IA64RegisterInfo::getDwarfRegNum(unsigned RegNum, bool isEH) const
+{
+  return IA64GenRegisterInfo::getDwarfRegNumFull(RegNum, 0);
+}
+
+unsigned
+IA64RegisterInfo::getFrameRegister(const MachineFunction &MF) const
+{
+  llvm_unreachable(__func__);
+}
+
+unsigned
+IA64RegisterInfo::getRARegister() const
+{
+  llvm_unreachable(__func__);
+}
+
+#include "IA64GenRegisterInfo.inc"

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.h	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,40 @@
+#ifndef LLVM_TARGET_IA64_REGISTERINFO_H
+#define LLVM_TARGET_IA64_REGISTERINFO_H
+
+#include "llvm/Target/TargetRegisterInfo.h"
+
+#include "IA64GenRegisterInfo.h.inc"
+
+namespace llvm {
+
+  class TargetInstrInfo;
+  class IA64TargetMachine;
+
+  struct IA64RegisterInfo : public IA64GenRegisterInfo {
+  private:
+    IA64TargetMachine &TM;
+    const TargetInstrInfo &TII;
+
+    /// StackAlign - Default stack alignment.
+    ///
+    unsigned StackAlign;
+
+  public:
+    IA64RegisterInfo(IA64TargetMachine &tm, const TargetInstrInfo &tii);
+
+    const unsigned *getCalleeSavedRegs(const MachineFunction *MF = 0) const;
+
+    BitVector getReservedRegs(const MachineFunction &MF) const;
+
+    void eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
+        RegScavenger *RS = NULL) const;
+
+    int getDwarfRegNum(unsigned RegNum, bool isEH) const;
+
+    unsigned getFrameRegister(const MachineFunction &MF) const;
+    unsigned getRARegister() const;
+  };
+
+} // namespace llvm
+
+#endif // LLVM_TARGET_IA64_REGISTERINFO_H

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64SelectionDAGInfo.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64SelectionDAGInfo.cpp	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,12 @@
+#include "IA64TargetMachine.h"
+
+using namespace llvm;
+
+IA64SelectionDAGInfo::IA64SelectionDAGInfo(const IA64TargetMachine &TM) :
+    TargetSelectionDAGInfo(TM)
+{
+}
+
+IA64SelectionDAGInfo::~IA64SelectionDAGInfo()
+{
+}

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64SelectionDAGInfo.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64SelectionDAGInfo.h	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,18 @@
+#ifndef LLVM_TARGET_IA64_SELECTIONDAGINFO_H
+#define LLVM_TARGET_IA64_SELECTIONDAGINFO_H
+
+#include "llvm/Target/TargetSelectionDAGInfo.h"
+
+namespace llvm {
+
+  class IA64TargetMachine;
+
+  class IA64SelectionDAGInfo : public TargetSelectionDAGInfo {
+  public:
+    explicit IA64SelectionDAGInfo(const IA64TargetMachine &TM);
+    ~IA64SelectionDAGInfo();
+};
+
+} // namespace llvm
+
+#endif // LLVM_TARGET_IA64_SELECTIONDAGINFO_H

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.cpp	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,13 @@
+#include "IA64.h"
+#include "IA64Subtarget.h"
+
+#include "IA64GenSubtarget.inc"
+
+using namespace llvm;
+
+IA64Subtarget::IA64Subtarget(const std::string &TT, const std::string &FS) {
+  std::string CPU = "generic";
+
+  // Parse features string.
+  ParseSubtargetFeatures(FS, CPU);
+}

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.h	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,26 @@
+#ifndef LLVM_TARGET_IA64_SUBTARGET_H
+#define LLVM_TARGET_IA64_SUBTARGET_H
+
+#include "llvm/Target/TargetSubtarget.h"
+
+#include <string>
+
+namespace llvm {
+
+  class IA64Subtarget : public TargetSubtarget {
+    bool ExtendedInsts;
+
+  public:
+    /// This constructor initializes the data members to match that
+    /// of the specified triple.
+    IA64Subtarget(const std::string &TT, const std::string &FS);
+
+    /// ParseSubtargetFeatures - Parses features string setting specified
+    /// subtarget options.  Definition of function is auto generated by tblgen.
+    std::string ParseSubtargetFeatures(const std::string &FS,
+	const std::string &CPU);
+  };
+
+} // End llvm namespace
+
+#endif  // LLVM_TARGET_IA64_SUBTARGET_H

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetLowering.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetLowering.cpp	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,53 @@
+#include "IA64.h"
+#include "IA64Subtarget.h"
+#include "IA64TargetLowering.h"
+#include "IA64TargetMachine.h"
+
+#include "llvm/DerivedTypes.h"
+#include "llvm/Function.h"
+#include "llvm/Intrinsics.h"
+#include "llvm/CallingConv.h"
+#include "llvm/GlobalVariable.h"
+#include "llvm/GlobalAlias.h"
+#include "llvm/CodeGen/CallingConvLower.h"
+#include "llvm/CodeGen/MachineFrameInfo.h"
+#include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/CodeGen/MachineInstrBuilder.h"
+#include "llvm/CodeGen/MachineRegisterInfo.h"
+#include "llvm/CodeGen/PseudoSourceValue.h"
+#include "llvm/CodeGen/SelectionDAGISel.h"
+#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
+#include "llvm/CodeGen/ValueTypes.h"
+#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/Debug.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/raw_ostream.h"
+#include "llvm/ADT/VectorExtras.h"
+
+using namespace llvm;
+
+IA64TargetLowering::IA64TargetLowering(IA64TargetMachine &tm) :
+    TargetLowering(tm, new TargetLoweringObjectFileELF()),
+    Subtarget(*tm.getSubtargetImpl()),
+    TM(tm)
+{
+  TD = getTargetData();
+
+  // Set up the register classes.
+  addRegisterClass(MVT::f128, &IA64::FloatingPointRegClass);
+  addRegisterClass(MVT::i64, &IA64::GeneralRegClass);
+  addRegisterClass(MVT::i1, &IA64::PredicateRegClass);
+
+  // Compute derived properties from the register classes
+  computeRegisterProperties();
+}
+
+unsigned
+IA64TargetLowering::getFunctionAlignment(const Function *F) const
+{
+  // Functions must have at least 16-byte alignment, but 32-byte alignment
+  // is better because branch targets should be aligned on 32-byte boundaries
+  // to ensure that the front-end can deliver 2 bundles per cycle to the
+  // back-end.
+  return F->hasFnAttr(Attribute::OptimizeForSize) ? 4 : 5;
+}

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetLowering.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetLowering.h	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,26 @@
+#ifndef LLVM_TARGET_IA64_TARGETLOWERING_H
+#define LLVM_TARGET_IA64_TARGETLOWERING_H
+
+#include "IA64.h"
+#include "llvm/CodeGen/SelectionDAG.h"
+#include "llvm/Target/TargetLowering.h"
+
+namespace llvm {
+
+  class IA64Subtarget;
+  class IA64TargetMachine;
+
+  class IA64TargetLowering : public TargetLowering {
+    const TargetData *TD;
+    const IA64Subtarget &Subtarget;
+    const IA64TargetMachine &TM;
+
+  public:
+    explicit IA64TargetLowering(IA64TargetMachine &TM);
+
+    virtual unsigned getFunctionAlignment(const Function *F) const;
+  };
+
+} // namespace llvm
+
+#endif // LLVM_TARGET_IA64_TARGETLOWERING_H

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetMachine.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetMachine.cpp	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,45 @@
+#include "IA64.h"
+#include "IA64MCAsmInfo.h"
+#include "IA64TargetMachine.h"
+
+#include "llvm/PassManager.h"
+#include "llvm/CodeGen/Passes.h"
+#include "llvm/MC/MCAsmInfo.h"
+#include "llvm/Target/TargetRegistry.h"
+
+using namespace llvm;
+
+extern "C" void
+LLVMInitializeIA64Target() {
+  RegisterTargetMachine<IA64TargetMachine> X(TheIA64Target);
+  RegisterAsmInfo<IA64MCAsmInfo> Z(TheIA64Target);
+}
+
+IA64TargetMachine::IA64TargetMachine(const Target &T, const std::string &TT,
+	const std::string &FS) :
+    LLVMTargetMachine(T, TT),
+    Subtarget(TT, FS),
+    DataLayout("e-i64:64:64-f80:128:128-f128:128:128-n8:16:32:64"),
+    InstrInfo(*this),
+    TLInfo(*this),
+    TSInfo(*this),
+    FrameLowering(Subtarget)
+{
+  // Nothing to do.
+}
+
+bool
+IA64TargetMachine::addInstSelector(PassManagerBase &PM,
+	CodeGenOpt::Level OptLevel)
+{
+  // PM.add(createIA64ISelDag(*this, OptLevel));
+  return false;
+}
+
+bool
+IA64TargetMachine::addPreEmitPass(PassManagerBase &PM,
+	CodeGenOpt::Level OptLevel)
+{
+  // PM.add(createIA64BundleSelectionPass());
+  return false;
+}

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetMachine.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetMachine.h	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,59 @@
+#ifndef LLVM_TARGET_IA64_TARGETMACHINE_H
+#define LLVM_TARGET_IA64_TARGETMACHINE_H
+
+#include "IA64FrameLowering.h"
+#include "IA64InstrInfo.h"
+#include "IA64SelectionDAGInfo.h"
+#include "IA64Subtarget.h"
+#include "IA64TargetLowering.h"
+
+#include "llvm/Target/TargetData.h"
+#include "llvm/Target/TargetFrameLowering.h"
+#include "llvm/Target/TargetMachine.h"
+
+namespace llvm {
+
+  class IA64TargetMachine : public LLVMTargetMachine {
+    IA64Subtarget        Subtarget;
+    const TargetData     DataLayout;       // Calculates type size & alignment
+    IA64InstrInfo        InstrInfo;
+    IA64TargetLowering   TLInfo;
+    IA64SelectionDAGInfo TSInfo;
+    IA64FrameLowering    FrameLowering;
+
+  public:
+    IA64TargetMachine(const Target &T, const std::string &TT,
+	const std::string &FS);
+
+    virtual const TargetFrameLowering *getFrameLowering() const {
+      return &FrameLowering;
+    }
+
+    virtual const IA64InstrInfo *getInstrInfo() const { return &InstrInfo; }
+    virtual const TargetData *getTargetData() const { return &DataLayout;}
+
+    virtual const IA64Subtarget *getSubtargetImpl() const {
+      return &Subtarget;
+    }
+
+    virtual const TargetRegisterInfo *getRegisterInfo() const {
+      return &InstrInfo.getRegisterInfo();
+    }
+
+    virtual const IA64TargetLowering *getTargetLowering() const {
+      return &TLInfo;
+    }
+
+    virtual const IA64SelectionDAGInfo* getSelectionDAGInfo() const {
+      return &TSInfo;
+    }
+
+    virtual bool addInstSelector(PassManagerBase &PM,
+	CodeGenOpt::Level OptLevel);
+    virtual bool addPreEmitPass(PassManagerBase &PM,
+	CodeGenOpt::Level OptLevel);
+  };
+
+} // namespace llvm
+
+#endif // LLVM_TARGET_IA64_TARGETMACHINE_H

Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/TargetInfo/IA64TargetInfo.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/TargetInfo/IA64TargetInfo.cpp	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,14 @@
+#include "IA64.h"
+#include "llvm/Module.h"
+#include "llvm/Target/TargetRegistry.h"
+
+using namespace llvm;
+
+Target llvm::TheIA64Target;
+
+extern "C" void
+LLVMInitializeIA64TargetInfo()
+{
+  RegisterTarget<Triple::ia64, /*HasJIT=*/false>
+    X(TheIA64Target, "ia64", "Itanium Processor Family");
+}

Modified: projects/llvm-ia64/lib/clang/Makefile
==============================================================================
--- projects/llvm-ia64/lib/clang/Makefile	Thu Jun  9 21:29:15 2011	(r222901)
+++ projects/llvm-ia64/lib/clang/Makefile	Thu Jun  9 22:17:27 2011	(r222902)
@@ -42,6 +42,8 @@ SUBDIR=	libclanganalysis \
 	libllvmarmdisassembler \
 	libllvmarminfo \
 	libllvmarminstprinter \
+	libllvmia64codegen \
+	libllvmia64info \
 	libllvmmipscodegen \
 	libllvmmipsinfo \
 	libllvmpowerpccodegen \

Modified: projects/llvm-ia64/lib/clang/clang.build.mk
==============================================================================
--- projects/llvm-ia64/lib/clang/clang.build.mk	Thu Jun  9 21:29:15 2011	(r222901)
+++ projects/llvm-ia64/lib/clang/clang.build.mk	Thu Jun  9 22:17:27 2011	(r222902)
@@ -40,7 +40,7 @@ Intrinsics.inc.h: ${LLVM_SRCS}/include/l
 	${TBLGEN} -gen-intrinsic \
 	    ${LLVM_SRCS}/include/llvm/Intrinsics.td > ${.TARGET}
 .for arch in \
-	ARM/ARM Mips/Mips PowerPC/PPC X86/X86
+	ARM/ARM IA64/IA64 Mips/Mips PowerPC/PPC X86/X86
 . for hdr in \
 	AsmMatcher/-gen-asm-matcher \
 	AsmWriter1/-gen-asm-writer,-asmwriternum=1 \

Modified: projects/llvm-ia64/lib/clang/include/llvm/Config/Targets.def
==============================================================================
--- projects/llvm-ia64/lib/clang/include/llvm/Config/Targets.def	Thu Jun  9 21:29:15 2011	(r222901)
+++ projects/llvm-ia64/lib/clang/include/llvm/Config/Targets.def	Thu Jun  9 22:17:27 2011	(r222902)
@@ -1,6 +1,7 @@
 /* $FreeBSD$ */
 
 LLVM_TARGET(ARM)
+LLVM_TARGET(IA64)
 LLVM_TARGET(Mips)
 LLVM_TARGET(PowerPC)
 LLVM_TARGET(X86)

Added: projects/llvm-ia64/lib/clang/libllvmia64codegen/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/lib/clang/libllvmia64codegen/Makefile	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,25 @@
+# $FreeBSD$
+
+LIB=	llvmia64codegen
+
+SRCDIR=	lib/Target/IA64
+SRCS=	\
+	IA64FrameLowering.cpp \
+	IA64InstrInfo.cpp \
+	IA64TargetLowering.cpp \
+	IA64MCAsmInfo.cpp \
+	IA64RegisterInfo.cpp \
+	IA64SelectionDAGInfo.cpp \
+	IA64Subtarget.cpp \
+	IA64TargetMachine.cpp
+
+TGHDRS=	\
+	Intrinsics \
+	IA64GenInstrInfo \
+	IA64GenInstrNames \
+	IA64GenRegisterInfo \
+	IA64GenRegisterInfo.h \
+	IA64GenRegisterNames \
+	IA64GenSubtarget
+
+.include "../clang.lib.mk"

Added: projects/llvm-ia64/lib/clang/libllvmia64info/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/llvm-ia64/lib/clang/libllvmia64info/Makefile	Thu Jun  9 22:17:27 2011	(r222902)
@@ -0,0 +1,13 @@
+# $FreeBSD: head/lib/clang/libllvmx86info/Makefile 212847 2010-09-19 10:54:58Z dim $
+
+LIB=	llvmia64info
+
+SRCDIR=	lib/Target/IA64/TargetInfo/
+INCDIR=	lib/Target/IA64
+SRCS=	IA64TargetInfo.cpp
+
+TGHDRS=	\
+	IA64GenInstrNames \
+	IA64GenRegisterNames
+
+.include "../clang.lib.mk"

Modified: projects/llvm-ia64/usr.bin/clang/clang/Makefile
==============================================================================
--- projects/llvm-ia64/usr.bin/clang/clang/Makefile	Thu Jun  9 21:29:15 2011	(r222901)
+++ projects/llvm-ia64/usr.bin/clang/clang/Makefile	Thu Jun  9 22:17:27 2011	(r222902)
@@ -45,6 +45,8 @@ LIBDEPS=clangfrontendtool \
 	llvmarmcodegen \
 	llvmarminstprinter \
 	llvmarminfo \
+	llvmia64codegen \
+	llvmia64info \
 	llvmmipscodegen \
 	llvmmipsinfo \
 	llvmpowerpccodegen \



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106092217.p59MHRsf096814>