annotate lib/Target/ARM/ARMSelectionDAGInfo.h @ 148:63bd29f05246

merged
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 14 Aug 2019 19:46:37 +0900
parents c2174574ed3a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 //===-- ARMSelectionDAGInfo.h - ARM SelectionDAG Info -----------*- C++ -*-===//
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 //
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 120
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 120
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 120
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 //
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
9 // This file defines the ARM subclass for SelectionDAGTargetInfo.
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 //===----------------------------------------------------------------------===//
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
13 #ifndef LLVM_LIB_TARGET_ARM_ARMSELECTIONDAGINFO_H
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
14 #define LLVM_LIB_TARGET_ARM_ARMSELECTIONDAGINFO_H
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 #include "MCTargetDesc/ARMAddressingModes.h"
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
17 #include "llvm/CodeGen/RuntimeLibcalls.h"
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
18 #include "llvm/CodeGen/SelectionDAGTargetInfo.h"
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 namespace llvm {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 namespace ARM_AM {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 static inline ShiftOpc getShiftOpcForNode(unsigned Opcode) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 switch (Opcode) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 default: return ARM_AM::no_shift;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 case ISD::SHL: return ARM_AM::lsl;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 case ISD::SRL: return ARM_AM::lsr;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 case ISD::SRA: return ARM_AM::asr;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 case ISD::ROTR: return ARM_AM::ror;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 //case ISD::ROTL: // Only if imm -> turn into ROTR.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 // Can't handle RRX here, because it would require folding a flag into
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 // the addressing mode. :( This causes us to miss certain things.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 //case ARMISD::RRX: return ARM_AM::rrx;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 } // end namespace ARM_AM
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
38 class ARMSelectionDAGInfo : public SelectionDAGTargetInfo {
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 public:
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
40 SDValue EmitTargetCodeForMemcpy(SelectionDAG &DAG, const SDLoc &dl,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
41 SDValue Chain, SDValue Dst, SDValue Src,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
42 SDValue Size, unsigned Align, bool isVolatile,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
43 bool AlwaysInline,
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 MachinePointerInfo DstPtrInfo,
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
45 MachinePointerInfo SrcPtrInfo) const override;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
47 SDValue
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
48 EmitTargetCodeForMemmove(SelectionDAG &DAG, const SDLoc &dl, SDValue Chain,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
49 SDValue Dst, SDValue Src, SDValue Size,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
50 unsigned Align, bool isVolatile,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
51 MachinePointerInfo DstPtrInfo,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
52 MachinePointerInfo SrcPtrInfo) const override;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
53
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 // Adjust parameters for memset, see RTABI section 4.3.4
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
55 SDValue EmitTargetCodeForMemset(SelectionDAG &DAG, const SDLoc &dl,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
56 SDValue Chain, SDValue Op1, SDValue Op2,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
57 SDValue Op3, unsigned Align, bool isVolatile,
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
58 MachinePointerInfo DstPtrInfo) const override;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
59
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
60 SDValue EmitSpecializedLibcall(SelectionDAG &DAG, const SDLoc &dl,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
61 SDValue Chain, SDValue Dst, SDValue Src,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
62 SDValue Size, unsigned Align,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
63 RTLIB::Libcall LC) const;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 };
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 #endif