OLD | NEW |
1 //===-- ARMISelLowering.h - ARM DAG Lowering Interface ----------*- C++ -*-===// | 1 //===-- ARMISelLowering.h - ARM DAG Lowering Interface ----------*- C++ -*-===// |
2 // | 2 // |
3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // This file defines the interfaces that ARM uses to lower LLVM code into a | 10 // This file defines the interfaces that ARM uses to lower LLVM code into a |
11 // selection DAG. | 11 // selection DAG. |
12 // | 12 // |
13 //===----------------------------------------------------------------------===// | 13 //===----------------------------------------------------------------------===// |
14 | 14 |
15 #ifndef LLVM_LIB_TARGET_ARM_ARMISELLOWERING_H | 15 #ifndef LLVM_LIB_TARGET_ARM_ARMISELLOWERING_H |
16 #define LLVM_LIB_TARGET_ARM_ARMISELLOWERING_H | 16 #define LLVM_LIB_TARGET_ARM_ARMISELLOWERING_H |
17 | 17 |
18 #include "MCTargetDesc/ARMBaseInfo.h" | 18 #include "MCTargetDesc/ARMBaseInfo.h" |
19 #include "llvm/CodeGen/CallingConvLower.h" | 19 #include "llvm/CodeGen/CallingConvLower.h" |
20 #include "llvm/CodeGen/SelectionDAG.h" | 20 #include "llvm/CodeGen/SelectionDAG.h" |
| 21 #include "llvm/Support/CommandLine.h" // @LOCALMOD |
21 #include "llvm/Target/TargetLowering.h" | 22 #include "llvm/Target/TargetLowering.h" |
22 #include <vector> | 23 #include <vector> |
23 | 24 |
24 namespace llvm { | 25 namespace llvm { |
25 class ARMConstantPoolValue; | 26 class ARMConstantPoolValue; |
26 class ARMSubtarget; | 27 class ARMSubtarget; |
27 | 28 |
28 namespace ARMISD { | 29 namespace ARMISD { |
29 // ARM Specific DAG Nodes | 30 // ARM Specific DAG Nodes |
30 enum NodeType { | 31 enum NodeType { |
31 // Start the numbering where the builtin ops and target ops leave off. | 32 // Start the numbering where the builtin ops and target ops leave off. |
32 FIRST_NUMBER = ISD::BUILTIN_OP_END, | 33 FIRST_NUMBER = ISD::BUILTIN_OP_END, |
33 | 34 |
34 Wrapper, // Wrapper - A wrapper node for TargetConstantPool, | 35 Wrapper, // Wrapper - A wrapper node for TargetConstantPool, |
35 // TargetExternalSymbol, and TargetGlobalAddress. | 36 // TargetExternalSymbol, and TargetGlobalAddress. |
36 WrapperPIC, // WrapperPIC - A wrapper node for TargetGlobalAddress in | 37 WrapperPIC, // WrapperPIC - A wrapper node for TargetGlobalAddress in |
37 // PIC mode. | 38 // PIC mode. |
38 WrapperJT, // WrapperJT - A wrapper node for TargetJumpTable | 39 WrapperJT, // WrapperJT - A wrapper node for TargetJumpTable |
39 | 40 // @LOCALMOD-START |
| 41 WrapperJT2, // like WrapperJT but without the UID |
| 42 WrapperGOT, // A Wrapper node for GOT addresses |
| 43 EH_RETURN, // For LowerEH_RETURN |
| 44 // @LOCALMOD-END |
40 // Add pseudo op to model memcpy for struct byval. | 45 // Add pseudo op to model memcpy for struct byval. |
41 COPY_STRUCT_BYVAL, | 46 COPY_STRUCT_BYVAL, |
42 | 47 |
43 CALL, // Function call. | 48 CALL, // Function call. |
44 CALL_PRED, // Function call that's predicable. | 49 CALL_PRED, // Function call that's predicable. |
45 CALL_NOLINK, // Function call with branch not branch-and-link. | 50 CALL_NOLINK, // Function call with branch not branch-and-link. |
46 tCALL, // Thumb function call. | 51 tCALL, // Thumb function call. |
47 BRCOND, // Conditional branch. | 52 BRCOND, // Conditional branch. |
48 BR_JT, // Jumptable branch. | 53 BR_JT, // Jumptable branch. |
49 BR2_JT, // Jumptable branch (2 level - jumptable entry is a jump). | 54 BR2_JT, // Jumptable branch (2 level - jumptable entry is a jump). |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 SDValue LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const; | 467 SDValue LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const; |
463 SDValue LowerGlobalAddressDarwin(SDValue Op, SelectionDAG &DAG) const; | 468 SDValue LowerGlobalAddressDarwin(SDValue Op, SelectionDAG &DAG) const; |
464 SDValue LowerGlobalAddressELF(SDValue Op, SelectionDAG &DAG) const; | 469 SDValue LowerGlobalAddressELF(SDValue Op, SelectionDAG &DAG) const; |
465 SDValue LowerGlobalAddressWindows(SDValue Op, SelectionDAG &DAG) const; | 470 SDValue LowerGlobalAddressWindows(SDValue Op, SelectionDAG &DAG) const; |
466 SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const; | 471 SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const; |
467 SDValue LowerToTLSGeneralDynamicModel(GlobalAddressSDNode *GA, | 472 SDValue LowerToTLSGeneralDynamicModel(GlobalAddressSDNode *GA, |
468 SelectionDAG &DAG) const; | 473 SelectionDAG &DAG) const; |
469 SDValue LowerToTLSExecModels(GlobalAddressSDNode *GA, | 474 SDValue LowerToTLSExecModels(GlobalAddressSDNode *GA, |
470 SelectionDAG &DAG, | 475 SelectionDAG &DAG, |
471 TLSModel::Model model) const; | 476 TLSModel::Model model) const; |
| 477 // @LOCALMOD-START |
| 478 SDValue LowerJumpTable(SDValue Op, SelectionDAG &DAG) const; |
| 479 SDValue LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const; |
| 480 // @LOCALMOD-END |
| 481 |
472 SDValue LowerGLOBAL_OFFSET_TABLE(SDValue Op, SelectionDAG &DAG) const; | 482 SDValue LowerGLOBAL_OFFSET_TABLE(SDValue Op, SelectionDAG &DAG) const; |
473 SDValue LowerBR_JT(SDValue Op, SelectionDAG &DAG) const; | 483 SDValue LowerBR_JT(SDValue Op, SelectionDAG &DAG) const; |
474 SDValue LowerXALUO(SDValue Op, SelectionDAG &DAG) const; | 484 SDValue LowerXALUO(SDValue Op, SelectionDAG &DAG) const; |
475 SDValue LowerSELECT(SDValue Op, SelectionDAG &DAG) const; | 485 SDValue LowerSELECT(SDValue Op, SelectionDAG &DAG) const; |
476 SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const; | 486 SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const; |
477 SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG) const; | 487 SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG) const; |
478 SDValue LowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG) const; | 488 SDValue LowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG) const; |
479 SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const; | 489 SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const; |
480 SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const; | 490 SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const; |
481 SDValue LowerShiftRightParts(SDValue Op, SelectionDAG &DAG) const; | 491 SDValue LowerShiftRightParts(SDValue Op, SelectionDAG &DAG) const; |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 enum NEONModImmType { | 621 enum NEONModImmType { |
612 VMOVModImm, | 622 VMOVModImm, |
613 VMVNModImm, | 623 VMVNModImm, |
614 OtherModImm | 624 OtherModImm |
615 }; | 625 }; |
616 | 626 |
617 namespace ARM { | 627 namespace ARM { |
618 FastISel *createFastISel(FunctionLoweringInfo &funcInfo, | 628 FastISel *createFastISel(FunctionLoweringInfo &funcInfo, |
619 const TargetLibraryInfo *libInfo); | 629 const TargetLibraryInfo *libInfo); |
620 } | 630 } |
| 631 |
| 632 // @LOCALMOD-START |
| 633 extern cl::opt<bool> EnableARMAEABIFunctions; |
| 634 // @LOCALMOD-END |
621 } | 635 } |
622 | 636 |
623 #endif // ARMISELLOWERING_H | 637 #endif // ARMISELLOWERING_H |
OLD | NEW |