1fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard//===-- R600ISelLowering.h - R600 DAG Lowering Interface -*- C++ -*--------===//
2a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
3a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//                     The LLVM Compiler Infrastructure
4a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
5a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// This file is distributed under the University of Illinois Open Source
6a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// License. See LICENSE.TXT for details.
7a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
8a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//===----------------------------------------------------------------------===//
9a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
10fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard// R600 DAG Lowering interface definition
11a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
12a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//===----------------------------------------------------------------------===//
13a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
14a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#ifndef R600ISELLOWERING_H
15a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define R600ISELLOWERING_H
16a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
17a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "AMDGPUISelLowering.h"
18a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
19a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardnamespace llvm {
20a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
21a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardclass R600InstrInfo;
22a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardclass R600TargetLowering : public AMDGPUTargetLowering
24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardpublic:
26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  R600TargetLowering(TargetMachine &TM);
27a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  virtual MachineBasicBlock * EmitInstrWithCustomInserter(MachineInstr *MI,
28a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      MachineBasicBlock * BB) const;
29c53c8d05551083437eb991e79002c0a272541a79Tom Stellard  virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const;
30a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardprivate:
32a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  const R600InstrInfo * TII;
33a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
34bcfc97dbf40c256ed59c2424e0c55b845f0f2569Tom Stellard  /// lowerImplicitParameter - Each OpenCL kernel has nine implicit parameters
35bcfc97dbf40c256ed59c2424e0c55b845f0f2569Tom Stellard  /// that are stored in the first nine dwords of a Vertex Buffer.  These
365f82d1924831da7467bfe8025ca18e98b9548ca4Tom Stellard  /// implicit parameters are lowered to load instructions which retreive the
375f82d1924831da7467bfe8025ca18e98b9548ca4Tom Stellard  /// values from the Vertex Buffer.
385f82d1924831da7467bfe8025ca18e98b9548ca4Tom Stellard  SDValue LowerImplicitParameter(SelectionDAG &DAG, EVT VT,
395f82d1924831da7467bfe8025ca18e98b9548ca4Tom Stellard                                 DebugLoc DL, unsigned DwordOffset) const;
405f82d1924831da7467bfe8025ca18e98b9548ca4Tom Stellard
41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  void lowerImplicitParameter(MachineInstr *MI, MachineBasicBlock &BB,
42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      MachineRegisterInfo & MRI, unsigned dword_offset) const;
43a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
4487272e9e2560a88352cf54d164507569ac43e502Tom Stellard  SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG) const;
4587272e9e2560a88352cf54d164507569ac43e502Tom Stellard
46c53c8d05551083437eb991e79002c0a272541a79Tom Stellard  /// LowerROTL - Lower ROTL opcode to BITALIGN
47c53c8d05551083437eb991e79002c0a272541a79Tom Stellard  SDValue LowerROTL(SDValue Op, SelectionDAG &DAG) const;
48c53c8d05551083437eb991e79002c0a272541a79Tom Stellard
4947d1b0a80990dda4e14073f667f0c2b939dfb925Tom Stellard  SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const;
5092823fb72abf1539bdb545fedc5525e9fc0b04ccTom Stellard  SDValue LowerSETCC(SDValue Op, SelectionDAG &DAG) const;
5147d1b0a80990dda4e14073f667f0c2b939dfb925Tom Stellard
52a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard};
53a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
54a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} // End namespace llvm;
55a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
56a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif // R600ISELLOWERING_H
57