annotate llvm/test/TableGen/address-space-patfrags.td @ 207:2e18cbf3894f

LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Jun 2021 06:07:14 +0900
parents 0572611fdcc8
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: llvm-tblgen -gen-dag-isel -I %p/../../include %s 2>&1 | FileCheck -check-prefix=SDAG %s
anatofuz
parents:
diff changeset
2 // RUN: llvm-tblgen -gen-global-isel -optimize-match-table=false -I %p/../../include %s -o - < %s | FileCheck -check-prefix=GISEL %s
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 include "llvm/Target/Target.td"
anatofuz
parents:
diff changeset
5
anatofuz
parents:
diff changeset
6 def TestTargetInstrInfo : InstrInfo;
anatofuz
parents:
diff changeset
7
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 def TestTarget : Target {
anatofuz
parents:
diff changeset
10 let InstructionSet = TestTargetInstrInfo;
anatofuz
parents:
diff changeset
11 }
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 def R0 : Register<"r0"> { let Namespace = "MyTarget"; }
anatofuz
parents:
diff changeset
14 def GPR32 : RegisterClass<"MyTarget", [i32], 32, (add R0)>;
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 // With one address space
anatofuz
parents:
diff changeset
18 def pat_frag_a : PatFrag <(ops node:$ptr), (load node:$ptr), [{}]> {
anatofuz
parents:
diff changeset
19 let AddressSpaces = [ 999 ];
anatofuz
parents:
diff changeset
20 let IsLoad = 1; // FIXME: Can this be inferred?
anatofuz
parents:
diff changeset
21 let MemoryVT = i32;
anatofuz
parents:
diff changeset
22 let MinAlignment = 2;
anatofuz
parents:
diff changeset
23 }
anatofuz
parents:
diff changeset
24
anatofuz
parents:
diff changeset
25 // With multiple address spaces
anatofuz
parents:
diff changeset
26 def pat_frag_b : PatFrag <(ops node:$ptr), (load node:$ptr), [{}]> {
anatofuz
parents:
diff changeset
27 let AddressSpaces = [ 123, 455 ];
anatofuz
parents:
diff changeset
28 let IsLoad = 1; // FIXME: Can this be inferred?
anatofuz
parents:
diff changeset
29 let MemoryVT = i32;
anatofuz
parents:
diff changeset
30 }
anatofuz
parents:
diff changeset
31
anatofuz
parents:
diff changeset
32 def inst_a : Instruction {
anatofuz
parents:
diff changeset
33 let OutOperandList = (outs GPR32:$dst);
anatofuz
parents:
diff changeset
34 let InOperandList = (ins GPR32:$src);
anatofuz
parents:
diff changeset
35 }
anatofuz
parents:
diff changeset
36
anatofuz
parents:
diff changeset
37 def inst_b : Instruction {
anatofuz
parents:
diff changeset
38 let OutOperandList = (outs GPR32:$dst);
anatofuz
parents:
diff changeset
39 let InOperandList = (ins GPR32:$src);
anatofuz
parents:
diff changeset
40 }
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 def inst_c : Instruction {
anatofuz
parents:
diff changeset
43 let OutOperandList = (outs);
anatofuz
parents:
diff changeset
44 let InOperandList = (ins GPR32:$src0, GPR32:$src1);
anatofuz
parents:
diff changeset
45 }
anatofuz
parents:
diff changeset
46
anatofuz
parents:
diff changeset
47 def inst_d : Instruction {
anatofuz
parents:
diff changeset
48 let OutOperandList = (outs);
anatofuz
parents:
diff changeset
49 let InOperandList = (ins GPR32:$src0, GPR32:$src1);
anatofuz
parents:
diff changeset
50 }
anatofuz
parents:
diff changeset
51
anatofuz
parents:
diff changeset
52 // SDAG: case 2: {
anatofuz
parents:
diff changeset
53 // SDAG-NEXT: // Predicate_pat_frag_b
anatofuz
parents:
diff changeset
54 // SDAG-NEXT: SDNode *N = Node;
anatofuz
parents:
diff changeset
55 // SDAG-NEXT: (void)N;
anatofuz
parents:
diff changeset
56 // SDAG-NEXT: unsigned AddrSpace = cast<MemSDNode>(N)->getAddressSpace();
anatofuz
parents:
diff changeset
57 // SDAG-NEXT: if (AddrSpace != 123 && AddrSpace != 455)
anatofuz
parents:
diff changeset
58 // SDAG-NEXT: return false;
anatofuz
parents:
diff changeset
59 // SDAG-NEXT: if (cast<MemSDNode>(N)->getMemoryVT() != MVT::i32) return false;
anatofuz
parents:
diff changeset
60 // SDAG-NEXT: return true;
anatofuz
parents:
diff changeset
61
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 // GISEL: GIM_Try, /*On fail goto*//*Label 0*/ {{[0-9]+}}, // Rule ID 0 //
anatofuz
parents:
diff changeset
64 // GISEL-NEXT: GIM_CheckNumOperands, /*MI*/0, /*Expected*/2,
anatofuz
parents:
diff changeset
65 // GISEL-NEXT: GIM_CheckOpcode, /*MI*/0, TargetOpcode::G_LOAD,
anatofuz
parents:
diff changeset
66 // GISEL-NEXT: GIM_CheckMemorySizeEqualToLLT, /*MI*/0, /*MMO*/0, /*OpIdx*/0,
anatofuz
parents:
diff changeset
67 // GISEL-NEXT: GIM_CheckMemoryAddressSpace, /*MI*/0, /*MMO*/0, /*NumAddrSpace*/2, /*AddrSpace*/123, /*AddrSpace*/455,
anatofuz
parents:
diff changeset
68 // GISEL-NEXT: GIM_CheckMemorySizeEqualTo, /*MI*/0, /*MMO*/0, /*Size*/4,
anatofuz
parents:
diff changeset
69 // GISEL-NEXT: GIM_CheckAtomicOrdering, /*MI*/0, /*Order*/(int64_t)AtomicOrdering::NotAtomic,
anatofuz
parents:
diff changeset
70 def : Pat <
anatofuz
parents:
diff changeset
71 (pat_frag_b GPR32:$src),
anatofuz
parents:
diff changeset
72 (inst_b GPR32:$src)
anatofuz
parents:
diff changeset
73 >;
anatofuz
parents:
diff changeset
74
anatofuz
parents:
diff changeset
75
anatofuz
parents:
diff changeset
76 // SDAG: case 3: {
anatofuz
parents:
diff changeset
77 // SDAG: // Predicate_pat_frag_a
anatofuz
parents:
diff changeset
78 // SDAG-NEXT: SDNode *N = Node;
anatofuz
parents:
diff changeset
79 // SDAG-NEXT: (void)N;
anatofuz
parents:
diff changeset
80 // SDAG-NEXT: unsigned AddrSpace = cast<MemSDNode>(N)->getAddressSpace();
anatofuz
parents:
diff changeset
81
anatofuz
parents:
diff changeset
82 // SDAG-NEXT: if (AddrSpace != 999)
anatofuz
parents:
diff changeset
83 // SDAG-NEXT: return false;
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
84 // SDAG-NEXT: if (cast<MemSDNode>(N)->getAlign() < Align(2))
150
anatofuz
parents:
diff changeset
85 // SDAG-NEXT: return false;
anatofuz
parents:
diff changeset
86 // SDAG-NEXT: if (cast<MemSDNode>(N)->getMemoryVT() != MVT::i32) return false;
anatofuz
parents:
diff changeset
87 // SDAG-NEXT: return true;
anatofuz
parents:
diff changeset
88
anatofuz
parents:
diff changeset
89 // GISEL: GIM_Try, /*On fail goto*//*Label 1*/ {{[0-9]+}}, // Rule ID 1 //
anatofuz
parents:
diff changeset
90 // GISEL-NEXT: GIM_CheckNumOperands, /*MI*/0, /*Expected*/2,
anatofuz
parents:
diff changeset
91 // GISEL-NEXT: GIM_CheckOpcode, /*MI*/0, TargetOpcode::G_LOAD,
anatofuz
parents:
diff changeset
92 // GISEL-NEXT: GIM_CheckMemorySizeEqualToLLT, /*MI*/0, /*MMO*/0, /*OpIdx*/0,
anatofuz
parents:
diff changeset
93 // GISEL-NEXT: GIM_CheckMemoryAddressSpace, /*MI*/0, /*MMO*/0, /*NumAddrSpace*/1, /*AddrSpace*/999,
anatofuz
parents:
diff changeset
94 // GISEL-NEXT: GIM_CheckMemoryAlignment, /*MI*/0, /*MMO*/0, /*MinAlign*/2,
anatofuz
parents:
diff changeset
95 // GISEL-NEXT: GIM_CheckMemorySizeEqualTo, /*MI*/0, /*MMO*/0, /*Size*/4,
anatofuz
parents:
diff changeset
96 // GISEL-NEXT: GIM_CheckAtomicOrdering, /*MI*/0, /*Order*/(int64_t)AtomicOrdering::NotAtomic,
anatofuz
parents:
diff changeset
97 def : Pat <
anatofuz
parents:
diff changeset
98 (pat_frag_a GPR32:$src),
anatofuz
parents:
diff changeset
99 (inst_a GPR32:$src)
anatofuz
parents:
diff changeset
100 >;
anatofuz
parents:
diff changeset
101
anatofuz
parents:
diff changeset
102
anatofuz
parents:
diff changeset
103 def truncstorei16_addrspace : PatFrag<(ops node:$val, node:$ptr),
anatofuz
parents:
diff changeset
104 (truncstore node:$val, node:$ptr)> {
anatofuz
parents:
diff changeset
105 let IsStore = 1;
anatofuz
parents:
diff changeset
106 let MemoryVT = i16;
anatofuz
parents:
diff changeset
107 let AddressSpaces = [ 123, 455 ];
anatofuz
parents:
diff changeset
108 }
anatofuz
parents:
diff changeset
109
anatofuz
parents:
diff changeset
110 // Test truncstore without a specific MemoryVT
anatofuz
parents:
diff changeset
111 // GISEL: GIM_Try, /*On fail goto*//*Label 2*/ {{[0-9]+}}, // Rule ID 2 //
anatofuz
parents:
diff changeset
112 // GISEL-NEXT: GIM_CheckNumOperands, /*MI*/0, /*Expected*/2,
anatofuz
parents:
diff changeset
113 // GISEL-NEXT: GIM_CheckOpcode, /*MI*/0, TargetOpcode::G_STORE,
anatofuz
parents:
diff changeset
114 // GISEL-NEXT: GIM_CheckMemorySizeLessThanLLT, /*MI*/0, /*MMO*/0, /*OpIdx*/0,
anatofuz
parents:
diff changeset
115 // GISEL-NEXT: GIM_CheckAtomicOrdering, /*MI*/0, /*Order*/(int64_t)AtomicOrdering::NotAtomic,
anatofuz
parents:
diff changeset
116 // GISEL-NEXT: // MIs[0] src0
anatofuz
parents:
diff changeset
117 // GISEL-NEXT: GIM_CheckType, /*MI*/0, /*Op*/0, /*Type*/GILLT_s32,
anatofuz
parents:
diff changeset
118 def : Pat <
anatofuz
parents:
diff changeset
119 (truncstore GPR32:$src0, GPR32:$src1),
anatofuz
parents:
diff changeset
120 (inst_c GPR32:$src0, GPR32:$src1)
anatofuz
parents:
diff changeset
121 >;
anatofuz
parents:
diff changeset
122
anatofuz
parents:
diff changeset
123 // Test non-truncstore has a size equal to LLT check.
anatofuz
parents:
diff changeset
124 // GISEL: GIM_Try, /*On fail goto*//*Label 3*/ {{[0-9]+}}, // Rule ID 3 //
anatofuz
parents:
diff changeset
125 // GISEL-NEXT: GIM_CheckNumOperands, /*MI*/0, /*Expected*/2,
anatofuz
parents:
diff changeset
126 // GISEL-NEXT: GIM_CheckOpcode, /*MI*/0, TargetOpcode::G_STORE,
anatofuz
parents:
diff changeset
127 // GISEL-NEXT: GIM_CheckMemorySizeEqualToLLT, /*MI*/0, /*MMO*/0, /*OpIdx*/0,
anatofuz
parents:
diff changeset
128 def : Pat <
anatofuz
parents:
diff changeset
129 (store GPR32:$src0, GPR32:$src1),
anatofuz
parents:
diff changeset
130 (inst_d GPR32:$src0, GPR32:$src1)
anatofuz
parents:
diff changeset
131 >;
anatofuz
parents:
diff changeset
132
anatofuz
parents:
diff changeset
133 // Test truncstore with specific MemoryVT
anatofuz
parents:
diff changeset
134 // GISEL: GIM_Try, /*On fail goto*//*Label 4*/ {{[0-9]+}}, // Rule ID 4 //
anatofuz
parents:
diff changeset
135 // GISEL-NEXT: GIM_CheckNumOperands, /*MI*/0, /*Expected*/2,
anatofuz
parents:
diff changeset
136 // GISEL-NEXT: GIM_CheckOpcode, /*MI*/0, TargetOpcode::G_STORE,
anatofuz
parents:
diff changeset
137 // GISEL-NEXT: GIM_CheckMemorySizeLessThanLLT, /*MI*/0, /*MMO*/0, /*OpIdx*/0,
anatofuz
parents:
diff changeset
138 // GISEL-NEXT: GIM_CheckMemoryAddressSpace, /*MI*/0, /*MMO*/0, /*NumAddrSpace*/2, /*AddrSpace*/123, /*AddrSpace*/455,
anatofuz
parents:
diff changeset
139 // GISEL-NEXT: GIM_CheckMemorySizeEqualTo, /*MI*/0, /*MMO*/0, /*Size*/2,
anatofuz
parents:
diff changeset
140 def : Pat <
anatofuz
parents:
diff changeset
141 (truncstorei16_addrspace GPR32:$src0, GPR32:$src1),
anatofuz
parents:
diff changeset
142 (inst_c GPR32:$src0, GPR32:$src1)
anatofuz
parents:
diff changeset
143 >;