diff --git a/lib/Target/TriCore/TriCoreFrameLowering.cpp b/lib/Target/TriCore/TriCoreFrameLowering.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..24205934f6b3f87929726fc4c04f85b8e5910610
--- /dev/null
+++ b/lib/Target/TriCore/TriCoreFrameLowering.cpp
@@ -0,0 +1,74 @@
+//===-- TriCoreFrameLowering.cpp - Frame info for TriCore Target --------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains TriCore frame information that doesn't fit anywhere else
+// cleanly...
+//
+//===----------------------------------------------------------------------===//
+
+#define DEBUG_TYPE "target_tricore"
+
+#include "TriCoreFrameLowering.h"
+#include "TriCoreInstrInfo.h"
+#include "TriCoreMisc.h"
+#include "TriCore.h"
+
+#include "llvm/Function.h"
+#include "llvm/CodeGen/MachineInstrBuilder.h"
+#include "llvm/CodeGen/RegisterScavenging.h"
+#include "llvm/Support/Debug.h"
+#include "llvm/Support/raw_ostream.h"
+#include "llvm/Target/TargetInstrInfo.h"
+
+namespace llvm {
+
+// Inserts prologue code into the function.
+void TriCoreFrameLowering::emitPrologue(MachineFunction &mf) const {
+  DebugLoc                    dl;
+  MachineBasicBlock          &mbb       = mf.front();
+  MachineBasicBlock::iterator it        = mbb.begin();
+  uint64_t                    stackSize = mf.getFrameInfo()->getStackSize();
+  const TargetFrameLowering  *tfi       = mf.getTarget().getFrameLowering();
+  const TargetInstrInfo      *tii       = mf.getTarget().getInstrInfo();
+
+  DEBUG(errs() << "TriCoreFrameLowering::emitPrologue(): mf = " << mf.getFunction()->getName() << "\n");
+
+  if (it != mbb.end())
+    dl = it->getDebugLoc();
+
+  // Set frame pointer if one is used; adjust stack pointer
+  if (tfi->hasFP(mf)) {
+    BuildMI(mbb, it, dl, tii->get(TriCore::MOV_AAsrr), FRAME_POINTER)
+        .addReg(STACK_POINTER);
+  }
+  adjustStackPointer(mf, mbb, it, -stackSize);
+}
+
+
+// Inserts epilogue code into the function.
+void TriCoreFrameLowering::emitEpilogue(MachineFunction &mf,
+                                        MachineBasicBlock &mbb) const {
+  // Nothing to do - the ret instruction performs all cleanup automatically,
+  // including restoring stack pointer and frame pointer (being located in the
+  // upper context).
+}
+
+// This method is called immediately before PrologEpilogInserter scans the
+// physical registers used to determine what callee saved registers should be
+// spilled.
+void TriCoreFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &mf, RegScavenger *rs) const {
+  // FIXME: This always leads to the generation of an emergency spill slot in
+  //        the stack frame, whether we actually need one or not.
+  const TargetRegisterClass *rc = TriCore::IRRegisterClass;
+  int fi = mf.getFrameInfo()->CreateStackObject(rc->getSize(),
+                                                rc->getAlignment(), false);
+  rs->setScavengingFrameIndex(fi);
+}
+
+}
diff --git a/lib/Target/TriCore/TriCoreMisc.cpp b/lib/Target/TriCore/TriCoreMisc.cpp
index 242d297c6efe2830f0d4ebe9efbe145d9ec5b15a..abccb26aed0c1a251ebf6c6b076e44dcf786d98e 100644
--- a/lib/Target/TriCore/TriCoreMisc.cpp
+++ b/lib/Target/TriCore/TriCoreMisc.cpp
@@ -26,7 +26,7 @@
 #include "llvm/Target/TargetInstrInfo.h"
 #include "llvm/Target/TargetMachine.h"
 
-using namespace llvm;
+namespace llvm {
 
 // Increments or decrements the stack pointer by the given number of bytes.
 void adjustStackPointer(MachineFunction &mf,
@@ -57,3 +57,5 @@ void adjustStackPointer(MachineFunction &mf,
     }
   }
 }
+
+}