LLVM  3.7.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  SelectionDAG &DAG,
59  SmallVectorImpl<SDValue> &InVals) const;
60 
61  // Lower a call into CALLSEQ_START - BPFISD:CALL - CALLSEQ_END chain
63  SmallVectorImpl<SDValue> &InVals) const override;
64 
65  // Lower incoming arguments, copy physregs into vregs
66  SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv,
67  bool IsVarArg,
69  SDLoc DL, SelectionDAG &DAG,
70  SmallVectorImpl<SDValue> &InVals) const override;
71 
72  SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool IsVarArg,
74  const SmallVectorImpl<SDValue> &OutVals, SDLoc DL,
75  SelectionDAG &DAG) const override;
76 
77  EVT getOptimalMemOpType(uint64_t Size, unsigned DstAlign, unsigned SrcAlign,
78  bool IsMemset, bool ZeroMemset, bool MemcpyStrSrc,
79  MachineFunction &MF) const override {
80  return Size >= 8 ? MVT::i64 : MVT::i32;
81  }
82 
83  bool shouldConvertConstantLoadToIntImm(const APInt &Imm,
84  Type *Ty) const override {
85  return true;
86  }
87 };
88 }
89 
90 #endif
BUILTIN_OP_END - This must be the last enum value in this list.
Definition: ISDOpcodes.h:724
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.
MachineBasicBlock * EmitInstrWithCustomInserter(MachineInstr *MI, MachineBasicBlock *BB) const override
This method should be implemented by targets that mark instructions with the 'usesCustomInserter' fla...
This is used to represent a portion of an LLVM function in a low-level Data Dependence DAG representa...
Definition: SelectionDAG.h:179
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:73
Representation of each machine instruction.
Definition: MachineInstr.h:51
BPFTargetLowering(const TargetMachine &TM, const BPFSubtarget &STI)
Primary interface to the complete machine description for the target machine.
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...