blob: 8f9dc90aeda4161ab85c8c1090889771b7bcfa5f [file] [log] [blame]
Akira Hatanaka5ac065a2013-03-13 00:54:29 +00001//===-- MipsSEISelLowering.h - MipsSE DAG Lowering Interface ----*- C++ -*-===//
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// Subclass of MipsTargetLowering specialized for mips32/64.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef MipsSEISELLOWERING_H
15#define MipsSEISELLOWERING_H
16
17#include "MipsISelLowering.h"
Akira Hatanakacbcdcfb2013-03-30 01:12:05 +000018#include "MipsRegisterInfo.h"
Akira Hatanaka5ac065a2013-03-13 00:54:29 +000019
20namespace llvm {
21 class MipsSETargetLowering : public MipsTargetLowering {
22 public:
23 explicit MipsSETargetLowering(MipsTargetMachine &TM);
24
25 virtual bool allowsUnalignedMemoryAccesses(EVT VT, bool *Fast) const;
26
Akira Hatanakaf5926fd2013-03-30 01:36:35 +000027 virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const;
28
Akira Hatanaka5ac065a2013-03-13 00:54:29 +000029 virtual MachineBasicBlock *
30 EmitInstrWithCustomInserter(MachineInstr *MI, MachineBasicBlock *MBB) const;
31
Akira Hatanakacbcdcfb2013-03-30 01:12:05 +000032 virtual const TargetRegisterClass *getRepRegClassFor(MVT VT) const {
33 if (VT == MVT::Untyped)
34 return Subtarget->hasDSP() ? &Mips::ACRegsDSPRegClass :
35 &Mips::ACRegsRegClass;
36
37 return TargetLowering::getRepRegClassFor(VT);
38 }
39
Akira Hatanaka5ac065a2013-03-13 00:54:29 +000040 private:
41 virtual bool
42 isEligibleForTailCallOptimization(const MipsCC &MipsCCInfo,
43 unsigned NextStackOffset,
44 const MipsFunctionInfo& FI) const;
45
46 virtual void
47 getOpndList(SmallVectorImpl<SDValue> &Ops,
48 std::deque< std::pair<unsigned, SDValue> > &RegsToPass,
49 bool IsPICCall, bool GlobalOrExternal, bool InternalLinkage,
50 CallLoweringInfo &CLI, SDValue Callee, SDValue Chain) const;
51
Akira Hatanakaf5926fd2013-03-30 01:36:35 +000052 SDValue lowerMulDiv(SDValue Op, unsigned NewOpc, bool HasLo, bool HasHi,
53 SelectionDAG &DAG) const;
54
Akira Hatanaka5ac065a2013-03-13 00:54:29 +000055 MachineBasicBlock *emitBPOSGE32(MachineInstr *MI,
56 MachineBasicBlock *BB) const;
57 };
58}
59
60#endif // MipsSEISELLOWERING_H