Skip to content

Commit b641375

Browse files
committed
LoongArch (ROTL_W, CACOP_D, CACOP_W removed)
1 parent 56d3a23 commit b641375

File tree

8 files changed

+68
-233
lines changed

8 files changed

+68
-233
lines changed

llvm/lib/Target/LoongArch/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ tablegen(LLVM LoongArchGenInstrInfo.inc -gen-instr-info)
1010
tablegen(LLVM LoongArchGenMCPseudoLowering.inc -gen-pseudo-lowering)
1111
tablegen(LLVM LoongArchGenMCCodeEmitter.inc -gen-emitter)
1212
tablegen(LLVM LoongArchGenRegisterInfo.inc -gen-register-info)
13+
tablegen(LLVM LoongArchGenSDNodeInfo.inc -gen-sd-node-info)
1314
tablegen(LLVM LoongArchGenSubtargetInfo.inc -gen-subtarget)
1415

1516
add_public_tablegen_target(LoongArchCommonTableGen)
@@ -27,6 +28,7 @@ add_llvm_target(LoongArchCodeGen
2728
LoongArchMergeBaseOffset.cpp
2829
LoongArchOptWInstrs.cpp
2930
LoongArchRegisterInfo.cpp
31+
LoongArchSelectionDAGInfo.cpp
3032
LoongArchSubtarget.cpp
3133
LoongArchTargetMachine.cpp
3234
LoongArchTargetTransformInfo.cpp

llvm/lib/Target/LoongArch/LoongArchISelDAGToDAG.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#define LLVM_LIB_TARGET_LOONGARCH_LOONGARCHISELDAGTODAG_H
1515

1616
#include "LoongArch.h"
17+
#include "LoongArchSelectionDAGInfo.h"
1718
#include "LoongArchTargetMachine.h"
1819
#include "llvm/CodeGen/SelectionDAGISel.h"
1920

llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp

Lines changed: 3 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "LoongArch.h"
1616
#include "LoongArchMachineFunctionInfo.h"
1717
#include "LoongArchRegisterInfo.h"
18+
#include "LoongArchSelectionDAGInfo.h"
1819
#include "LoongArchSubtarget.h"
1920
#include "MCTargetDesc/LoongArchBaseInfo.h"
2021
#include "MCTargetDesc/LoongArchMCTargetDesc.h"
@@ -2693,7 +2694,7 @@ SDValue LoongArchTargetLowering::lowerShiftRightParts(SDValue Op,
26932694

26942695
// Returns the opcode of the target-specific SDNode that implements the 32-bit
26952696
// form of the given Opcode.
2696-
static LoongArchISD::NodeType getLoongArchWOpcode(unsigned Opcode) {
2697+
static unsigned getLoongArchWOpcode(unsigned Opcode) {
26972698
switch (Opcode) {
26982699
default:
26992700
llvm_unreachable("Unexpected opcode");
@@ -2729,7 +2730,7 @@ static LoongArchISD::NodeType getLoongArchWOpcode(unsigned Opcode) {
27292730
static SDValue customLegalizeToWOp(SDNode *N, SelectionDAG &DAG, int NumOp,
27302731
unsigned ExtOpc = ISD::ANY_EXTEND) {
27312732
SDLoc DL(N);
2732-
LoongArchISD::NodeType WOpcode = getLoongArchWOpcode(N->getOpcode());
2733+
unsigned WOpcode = getLoongArchWOpcode(N->getOpcode());
27332734
SDValue NewOp0, NewRes;
27342735

27352736
switch (NumOp) {
@@ -4715,97 +4716,6 @@ bool LoongArchTargetLowering::allowsMisalignedMemoryAccesses(
47154716
return true;
47164717
}
47174718

4718-
const char *LoongArchTargetLowering::getTargetNodeName(unsigned Opcode) const {
4719-
switch ((LoongArchISD::NodeType)Opcode) {
4720-
case LoongArchISD::FIRST_NUMBER:
4721-
break;
4722-
4723-
#define NODE_NAME_CASE(node) \
4724-
case LoongArchISD::node: \
4725-
return "LoongArchISD::" #node;
4726-
4727-
// TODO: Add more target-dependent nodes later.
4728-
NODE_NAME_CASE(CALL)
4729-
NODE_NAME_CASE(CALL_MEDIUM)
4730-
NODE_NAME_CASE(CALL_LARGE)
4731-
NODE_NAME_CASE(RET)
4732-
NODE_NAME_CASE(TAIL)
4733-
NODE_NAME_CASE(TAIL_MEDIUM)
4734-
NODE_NAME_CASE(TAIL_LARGE)
4735-
NODE_NAME_CASE(SLL_W)
4736-
NODE_NAME_CASE(SRA_W)
4737-
NODE_NAME_CASE(SRL_W)
4738-
NODE_NAME_CASE(BSTRINS)
4739-
NODE_NAME_CASE(BSTRPICK)
4740-
NODE_NAME_CASE(MOVGR2FR_W_LA64)
4741-
NODE_NAME_CASE(MOVFR2GR_S_LA64)
4742-
NODE_NAME_CASE(FTINT)
4743-
NODE_NAME_CASE(REVB_2H)
4744-
NODE_NAME_CASE(REVB_2W)
4745-
NODE_NAME_CASE(BITREV_4B)
4746-
NODE_NAME_CASE(BITREV_8B)
4747-
NODE_NAME_CASE(BITREV_W)
4748-
NODE_NAME_CASE(ROTR_W)
4749-
NODE_NAME_CASE(ROTL_W)
4750-
NODE_NAME_CASE(DIV_W)
4751-
NODE_NAME_CASE(DIV_WU)
4752-
NODE_NAME_CASE(MOD_W)
4753-
NODE_NAME_CASE(MOD_WU)
4754-
NODE_NAME_CASE(CLZ_W)
4755-
NODE_NAME_CASE(CTZ_W)
4756-
NODE_NAME_CASE(DBAR)
4757-
NODE_NAME_CASE(IBAR)
4758-
NODE_NAME_CASE(BREAK)
4759-
NODE_NAME_CASE(SYSCALL)
4760-
NODE_NAME_CASE(CRC_W_B_W)
4761-
NODE_NAME_CASE(CRC_W_H_W)
4762-
NODE_NAME_CASE(CRC_W_W_W)
4763-
NODE_NAME_CASE(CRC_W_D_W)
4764-
NODE_NAME_CASE(CRCC_W_B_W)
4765-
NODE_NAME_CASE(CRCC_W_H_W)
4766-
NODE_NAME_CASE(CRCC_W_W_W)
4767-
NODE_NAME_CASE(CRCC_W_D_W)
4768-
NODE_NAME_CASE(CSRRD)
4769-
NODE_NAME_CASE(CSRWR)
4770-
NODE_NAME_CASE(CSRXCHG)
4771-
NODE_NAME_CASE(IOCSRRD_B)
4772-
NODE_NAME_CASE(IOCSRRD_H)
4773-
NODE_NAME_CASE(IOCSRRD_W)
4774-
NODE_NAME_CASE(IOCSRRD_D)
4775-
NODE_NAME_CASE(IOCSRWR_B)
4776-
NODE_NAME_CASE(IOCSRWR_H)
4777-
NODE_NAME_CASE(IOCSRWR_W)
4778-
NODE_NAME_CASE(IOCSRWR_D)
4779-
NODE_NAME_CASE(CPUCFG)
4780-
NODE_NAME_CASE(MOVGR2FCSR)
4781-
NODE_NAME_CASE(MOVFCSR2GR)
4782-
NODE_NAME_CASE(CACOP_D)
4783-
NODE_NAME_CASE(CACOP_W)
4784-
NODE_NAME_CASE(VSHUF)
4785-
NODE_NAME_CASE(VPICKEV)
4786-
NODE_NAME_CASE(VPICKOD)
4787-
NODE_NAME_CASE(VPACKEV)
4788-
NODE_NAME_CASE(VPACKOD)
4789-
NODE_NAME_CASE(VILVL)
4790-
NODE_NAME_CASE(VILVH)
4791-
NODE_NAME_CASE(VSHUF4I)
4792-
NODE_NAME_CASE(VREPLVEI)
4793-
NODE_NAME_CASE(VREPLGR2VR)
4794-
NODE_NAME_CASE(XVPERMI)
4795-
NODE_NAME_CASE(VPICK_SEXT_ELT)
4796-
NODE_NAME_CASE(VPICK_ZEXT_ELT)
4797-
NODE_NAME_CASE(VREPLVE)
4798-
NODE_NAME_CASE(VALL_ZERO)
4799-
NODE_NAME_CASE(VANY_ZERO)
4800-
NODE_NAME_CASE(VALL_NONZERO)
4801-
NODE_NAME_CASE(VANY_NONZERO)
4802-
NODE_NAME_CASE(FRECIPE)
4803-
NODE_NAME_CASE(FRSQRTE)
4804-
}
4805-
#undef NODE_NAME_CASE
4806-
return nullptr;
4807-
}
4808-
48094719
//===----------------------------------------------------------------------===//
48104720
// Calling Convention Implementation
48114721
//===----------------------------------------------------------------------===//

llvm/lib/Target/LoongArch/LoongArchISelLowering.h

Lines changed: 0 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -21,137 +21,6 @@
2121

2222
namespace llvm {
2323
class LoongArchSubtarget;
24-
namespace LoongArchISD {
25-
enum NodeType : unsigned {
26-
FIRST_NUMBER = ISD::BUILTIN_OP_END,
27-
28-
// TODO: add more LoongArchISDs
29-
CALL,
30-
CALL_MEDIUM,
31-
CALL_LARGE,
32-
RET,
33-
TAIL,
34-
TAIL_MEDIUM,
35-
TAIL_LARGE,
36-
37-
// 32-bit shifts, directly matching the semantics of the named LoongArch
38-
// instructions.
39-
SLL_W,
40-
SRA_W,
41-
SRL_W,
42-
43-
ROTL_W,
44-
ROTR_W,
45-
46-
// unsigned 32-bit integer division
47-
DIV_W,
48-
MOD_W,
49-
DIV_WU,
50-
MOD_WU,
51-
52-
// FPR<->GPR transfer operations
53-
MOVGR2FR_W_LA64,
54-
MOVFR2GR_S_LA64,
55-
MOVFCSR2GR,
56-
MOVGR2FCSR,
57-
58-
FTINT,
59-
60-
// Bit counting operations
61-
CLZ_W,
62-
CTZ_W,
63-
64-
BSTRINS,
65-
BSTRPICK,
66-
67-
// Byte-swapping and bit-reversal
68-
REVB_2H,
69-
REVB_2W,
70-
BITREV_4B,
71-
BITREV_8B,
72-
BITREV_W,
73-
74-
// Intrinsic operations start ============================================
75-
BREAK,
76-
CACOP_D,
77-
CACOP_W,
78-
DBAR,
79-
IBAR,
80-
SYSCALL,
81-
82-
// CRC check operations
83-
CRC_W_B_W,
84-
CRC_W_H_W,
85-
CRC_W_W_W,
86-
CRC_W_D_W,
87-
CRCC_W_B_W,
88-
CRCC_W_H_W,
89-
CRCC_W_W_W,
90-
CRCC_W_D_W,
91-
92-
CSRRD,
93-
94-
// Write new value to CSR and return old value.
95-
// Operand 0: A chain pointer.
96-
// Operand 1: The new value to write.
97-
// Operand 2: The address of the required CSR.
98-
// Result 0: The old value of the CSR.
99-
// Result 1: The new chain pointer.
100-
CSRWR,
101-
102-
// Similar to CSRWR but with a write mask.
103-
// Operand 0: A chain pointer.
104-
// Operand 1: The new value to write.
105-
// Operand 2: The write mask.
106-
// Operand 3: The address of the required CSR.
107-
// Result 0: The old value of the CSR.
108-
// Result 1: The new chain pointer.
109-
CSRXCHG,
110-
111-
// IOCSR access operations
112-
IOCSRRD_B,
113-
IOCSRRD_W,
114-
IOCSRRD_H,
115-
IOCSRRD_D,
116-
IOCSRWR_B,
117-
IOCSRWR_H,
118-
IOCSRWR_W,
119-
IOCSRWR_D,
120-
121-
// Read CPU configuration information operation
122-
CPUCFG,
123-
124-
// Vector Shuffle
125-
VREPLVE,
126-
VSHUF,
127-
VPICKEV,
128-
VPICKOD,
129-
VPACKEV,
130-
VPACKOD,
131-
VILVL,
132-
VILVH,
133-
VSHUF4I,
134-
VREPLVEI,
135-
VREPLGR2VR,
136-
XVPERMI,
137-
138-
// Extended vector element extraction
139-
VPICK_SEXT_ELT,
140-
VPICK_ZEXT_ELT,
141-
142-
// Vector comparisons
143-
VALL_ZERO,
144-
VANY_ZERO,
145-
VALL_NONZERO,
146-
VANY_NONZERO,
147-
148-
// Floating point approximate reciprocal operation
149-
FRECIPE,
150-
FRSQRTE
151-
152-
// Intrinsic operations end =============================================
153-
};
154-
} // end namespace LoongArchISD
15524

15625
class LoongArchTargetLowering : public TargetLowering {
15726
const LoongArchSubtarget &Subtarget;
@@ -171,9 +40,6 @@ class LoongArchTargetLowering : public TargetLowering {
17140

17241
SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const override;
17342

174-
// This method returns the name of a target specific DAG node.
175-
const char *getTargetNodeName(unsigned Opcode) const override;
176-
17743
// Lower incoming arguments, copy physregs into vregs.
17844
SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv,
17945
bool IsVarArg,
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//===- LoongArchSelectionDAGInfo.cpp --------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include "LoongArchSelectionDAGInfo.h"
10+
11+
#define GET_SDNODE_DESC
12+
#include "LoongArchGenSDNodeInfo.inc"
13+
14+
using namespace llvm;
15+
16+
LoongArchSelectionDAGInfo::LoongArchSelectionDAGInfo()
17+
: SelectionDAGGenTargetInfo(LoongArchGenSDNodeInfo) {}
18+
19+
LoongArchSelectionDAGInfo::~LoongArchSelectionDAGInfo() = default;
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//===- LoongArchSelectionDAGInfo.h ------------------------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_LIB_TARGET_LOONGARCH_LOONGARCHSELECTIONDAGINFO_H
10+
#define LLVM_LIB_TARGET_LOONGARCH_LOONGARCHSELECTIONDAGINFO_H
11+
12+
#include "llvm/CodeGen/SelectionDAGTargetInfo.h"
13+
14+
#define GET_SDNODE_ENUM
15+
#include "LoongArchGenSDNodeInfo.inc"
16+
17+
namespace llvm {
18+
19+
class LoongArchSelectionDAGInfo : public SelectionDAGGenTargetInfo {
20+
public:
21+
LoongArchSelectionDAGInfo();
22+
23+
~LoongArchSelectionDAGInfo() override;
24+
};
25+
26+
} // namespace llvm
27+
28+
#endif // LLVM_LIB_TARGET_LOONGARCH_LOONGARCHSELECTIONDAGINFO_H

llvm/lib/Target/LoongArch/LoongArchSubtarget.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "LoongArchSubtarget.h"
1414
#include "LoongArchFrameLowering.h"
15+
#include "LoongArchSelectionDAGInfo.h"
1516
#include "MCTargetDesc/LoongArchBaseInfo.h"
1617

1718
using namespace llvm;
@@ -95,4 +96,12 @@ LoongArchSubtarget::LoongArchSubtarget(const Triple &TT, StringRef CPU,
9596
: LoongArchGenSubtargetInfo(TT, CPU, TuneCPU, FS),
9697
FrameLowering(
9798
initializeSubtargetDependencies(TT, CPU, TuneCPU, FS, ABIName)),
98-
InstrInfo(*this), RegInfo(getHwMode()), TLInfo(TM, *this) {}
99+
InstrInfo(*this), RegInfo(getHwMode()), TLInfo(TM, *this) {
100+
TSInfo = std::make_unique<LoongArchSelectionDAGInfo>();
101+
}
102+
103+
LoongArchSubtarget::~LoongArchSubtarget() = default;
104+
105+
const SelectionDAGTargetInfo *LoongArchSubtarget::getSelectionDAGInfo() const {
106+
return TSInfo.get();
107+
}

0 commit comments

Comments
 (0)