blob: 13769dc8efe0feb610bd60a49265a3a1ede78a54 [file] [log] [blame]
Dan Gohman9becddd2010-04-16 23:04:22 +00001//===-- ARMSelectionDAGInfo.h - ARM SelectionDAG Info -----------*- 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 ARM subclass for TargetSelectionDAGInfo.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef ARMSELECTIONDAGINFO_H
15#define ARMSELECTIONDAGINFO_H
16
Evan Chenga20cde32011-07-20 23:34:39 +000017#include "MCTargetDesc/ARMAddressingModes.h"
Dan Gohman9becddd2010-04-16 23:04:22 +000018#include "llvm/Target/TargetSelectionDAGInfo.h"
19
20namespace llvm {
21
Evan Chenga20cde32011-07-20 23:34:39 +000022namespace ARM_AM {
23 static inline ShiftOpc getShiftOpcForNode(unsigned Opcode) {
24 switch (Opcode) {
25 default: return ARM_AM::no_shift;
26 case ISD::SHL: return ARM_AM::lsl;
27 case ISD::SRL: return ARM_AM::lsr;
28 case ISD::SRA: return ARM_AM::asr;
29 case ISD::ROTR: return ARM_AM::ror;
30 //case ISD::ROTL: // Only if imm -> turn into ROTR.
31 // Can't handle RRX here, because it would require folding a flag into
32 // the addressing mode. :( This causes us to miss certain things.
33 //case ARMISD::RRX: return ARM_AM::rrx;
34 }
35 }
36} // end namespace ARM_AM
37
Dan Gohman9becddd2010-04-16 23:04:22 +000038class ARMSelectionDAGInfo : public TargetSelectionDAGInfo {
39public:
Eric Christopher70e005a2014-06-12 23:39:49 +000040 explicit ARMSelectionDAGInfo(const DataLayout &DL);
Dan Gohman9becddd2010-04-16 23:04:22 +000041 ~ARMSelectionDAGInfo();
Dan Gohmanbb919df2010-05-11 17:31:57 +000042
Andrew Trickef9de2a2013-05-25 02:42:55 +000043 SDValue EmitTargetCodeForMemcpy(SelectionDAG &DAG, SDLoc dl,
Dan Gohmanbb919df2010-05-11 17:31:57 +000044 SDValue Chain,
45 SDValue Dst, SDValue Src,
46 SDValue Size, unsigned Align,
47 bool isVolatile, bool AlwaysInline,
Chris Lattner2510de22010-09-21 05:40:29 +000048 MachinePointerInfo DstPtrInfo,
Craig Topper6bc27bf2014-03-10 02:09:33 +000049 MachinePointerInfo SrcPtrInfo) const override;
Renato Golin4cd51872011-05-22 21:41:23 +000050
51 // Adjust parameters for memset, see RTABI section 4.3.4
Andrew Trickef9de2a2013-05-25 02:42:55 +000052 SDValue EmitTargetCodeForMemset(SelectionDAG &DAG, SDLoc dl,
Renato Golin4cd51872011-05-22 21:41:23 +000053 SDValue Chain,
54 SDValue Op1, SDValue Op2,
55 SDValue Op3, unsigned Align,
56 bool isVolatile,
Craig Topper6bc27bf2014-03-10 02:09:33 +000057 MachinePointerInfo DstPtrInfo) const override;
Dan Gohman9becddd2010-04-16 23:04:22 +000058};
59
60}
61
62#endif