LLVM  4.0.0
BPFISelLowering.h
Go to the documentation of this file.
1 //===-- BPFISelLowering.h - BPF 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 // This file defines the interfaces that BPF uses to lower LLVM code into a
11 // selection DAG.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_LIB_TARGET_BPF_BPFISELLOWERING_H
16 #define LLVM_LIB_TARGET_BPF_BPFISELLOWERING_H
17 
18 #include "BPF.h"
21 
22 namespace llvm {
23 class BPFSubtarget;
24 namespace BPFISD {
25 enum NodeType : unsigned {
32 };
33 }
34 
36 public:
37  explicit BPFTargetLowering(const TargetMachine &TM, const BPFSubtarget &STI);
38 
39  // Provide custom lowering hooks for some operations.
40  SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override;
41 
42  // This method returns the name of a target specific DAG node.
43  const char *getTargetNodeName(unsigned Opcode) const override;
44 
47  MachineBasicBlock *BB) const override;
48 
49 private:
50  SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG) const;
51  SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const;
52  SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
53 
54  // Lower the result values of a call, copying them out of physregs into vregs
55  SDValue LowerCallResult(SDValue Chain, SDValue InFlag,
56  CallingConv::ID CallConv, bool IsVarArg,
58  const SDLoc &DL, SelectionDAG &DAG,
59  SmallVectorImpl<SDValue> &InVals) const;
60 
61  // Maximum number of arguments to a call
62  static const unsigned MaxArgs;
63 
64  // Lower a call into CALLSEQ_START - BPFISD:CALL - CALLSEQ_END chain
66  SmallVectorImpl<SDValue> &InVals) const override;
67 
68  // Lower incoming arguments, copy physregs into vregs
69  SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv,
70  bool IsVarArg,
72  const SDLoc &DL, SelectionDAG &DAG,
73  SmallVectorImpl<SDValue> &InVals) const override;
74 
75  SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool IsVarArg,
77  const SmallVectorImpl<SDValue> &OutVals, const SDLoc &DL,
78  SelectionDAG &DAG) const override;
79 
80  EVT getOptimalMemOpType(uint64_t Size, unsigned DstAlign, unsigned SrcAlign,
81  bool IsMemset, bool ZeroMemset, bool MemcpyStrSrc,
82  MachineFunction &MF) const override {
83  return Size >= 8 ? MVT::i64 : MVT::i32;
84  }
85 
86  bool shouldConvertConstantLoadToIntImm(const APInt &Imm,
87  Type *Ty) const override {
88  return true;
89  }
90 };
91 }
92 
93 #endif
BUILTIN_OP_END - This must be the last enum value in this list.
Definition: ISDOpcodes.h:762
This class defines information used to lower LLVM code to legal SelectionDAG operators that the targe...
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:45
const char * getTargetNodeName(unsigned Opcode) const override
This method returns the name of a target specific DAG node.
EVT - Extended Value Type.
Definition: ValueTypes.h:31
This structure contains all information that is necessary for lowering calls.
This is used to represent a portion of an LLVM function in a low-level Data Dependence DAG representa...
Definition: SelectionDAG.h:166
Wrapper class for IR location info (IR ordering and DebugLoc) to be passed into SDNode creation funct...
Class for arbitrary precision integers.
Definition: APInt.h:77
Representation of each machine instruction.
Definition: MachineInstr.h:52
BPFTargetLowering(const TargetMachine &TM, const BPFSubtarget &STI)
MachineBasicBlock * EmitInstrWithCustomInserter(MachineInstr &MI, MachineBasicBlock *BB) const override
This method should be implemented by targets that mark instructions with the 'usesCustomInserter' fla...
Primary interface to the complete machine description for the target machine.
IRTranslator LLVM IR MI
Unlike LLVM values, Selection DAG nodes may return multiple values as the result of a computation...
This file describes how to lower LLVM code to machine code.
SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override
This callback is invoked for operations that are unsupported by the target, which are registered to u...