Skip to content

Commit 3508c76

Browse files
Addressed comments and add test
1 parent 4acd123 commit 3508c76

File tree

3 files changed

+66
-12
lines changed

3 files changed

+66
-12
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# RUN: llvm-exegesis -mode=latency --benchmark-phase=assemble-measured-code -mtriple=riscv64-unknown-linux-gnu --mcpu=generic -opcode-name=LD |& FileCheck --check-prefix=TEST1 %s
2+
3+
TEST1: ---
4+
TEST1-NEXT: mode: latency
5+
TEST1-NEXT: key:
6+
TEST1-NEXT: instructions:
7+
TEST1-NEXT: - 'LD X10 X10 i_0x0'
8+
9+
# RUN: llvm-exegesis -mode=latency --benchmark-phase=assemble-measured-code -mtriple=riscv64-unknown-linux-gnu --mcpu=generic -opcode-name=LW |& FileCheck --check-prefix=TEST2 %s
10+
11+
TEST2: ---
12+
TEST2-NEXT: mode: latency
13+
TEST2-NEXT: key:
14+
TEST2-NEXT: instructions:
15+
TEST2-NEXT: - 'LW X10 X10 i_0x0'
16+
17+
# RUN: llvm-exegesis -mode=latency --benchmark-phase=assemble-measured-code -mtriple=riscv64-unknown-linux-gnu --mcpu=generic -opcode-name=LH |& FileCheck --check-prefix=TEST3 %s
18+
19+
TEST3: ---
20+
TEST3-NEXT: mode: latency
21+
TEST3-NEXT: key:
22+
TEST3-NEXT: instructions:
23+
TEST3-NEXT: - 'LH X10 X10 i_0x0'
24+
25+
# RUN: llvm-exegesis -mode=latency --benchmark-phase=assemble-measured-code -mtriple=riscv64-unknown-linux-gnu --mcpu=generic -opcode-name=LWU |& FileCheck --check-prefix=TEST4 %s
26+
27+
TEST4: ---
28+
TEST4-NEXT: mode: latency
29+
TEST4-NEXT: key:
30+
TEST4-NEXT: instructions:
31+
TEST4-NEXT: - 'LWU X10 X10 i_0x0'
32+
33+
# RUN: llvm-exegesis -mode=latency --benchmark-phase=assemble-measured-code -mtriple=riscv64-unknown-linux-gnu --mcpu=generic -opcode-name=LBU |& FileCheck --check-prefix=TEST5 %s
34+
35+
TEST5: ---
36+
TEST5-NEXT: mode: latency
37+
TEST5-NEXT: key:
38+
TEST5-NEXT: instructions:
39+
TEST5-NEXT: - 'LBU X10 X10 i_0x0'
40+
41+
# RUN: llvm-exegesis -mode=latency --benchmark-phase=assemble-measured-code -mtriple=riscv64-unknown-linux-gnu --mcpu=generic -opcode-name=LUI |& FileCheck --check-prefix=TEST6 %s
42+
43+
TEST6: LUI: No strategy found to make the execution serial
44+
45+
46+
# RUN: llvm-exegesis -mode=latency --benchmark-phase=assemble-measured-code -mtriple=riscv64-unknown-linux-gnu --mcpu=generic -opcode-name=LB |& FileCheck --check-prefix=TEST7 %s
47+
48+
TEST7: ---
49+
TEST7-NEXT: mode: latency
50+
TEST7-NEXT: key:
51+
TEST7-NEXT: instructions:
52+
TEST7-NEXT: - 'LB X10 X10 i_0x0'
53+
54+
# RUN: llvm-exegesis -mode=latency --benchmark-phase=assemble-measured-code -mtriple=riscv64-unknown-linux-gnu --mcpu=generic -mattr=+a -opcode-name=LR_W_RL |& FileCheck --check-prefix=TEST8 %s
55+
56+
TEST8: ---
57+
TEST8-NEXT: mode: latency
58+
TEST8-NEXT: key:
59+
TEST8-NEXT: instructions:
60+
TEST8-NEXT: - 'LR_W_RL X10 X10'

llvm/tools/llvm-exegesis/lib/CodeTemplate.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,6 @@ struct CodeTemplate {
132132
// If the template uses the provided scratch memory, the register in which
133133
// the pointer to this memory is passed in to the function.
134134
unsigned ScratchSpacePointerInReg = 0;
135-
// Require to pre-store value of a given register (fisrt)
136-
// to scratch memory with given offset (second)
137-
SmallVector<std::pair<unsigned, unsigned>, 2> PreinitScratchMemory;
138135

139136
#if defined(__GNUC__) && (defined(__clang__) || LLVM_GNUC_PREREQ(8, 0, 0))
140137
// FIXME: GCC7 bug workaround. Drop #if after GCC7 no longer supported.

llvm/tools/llvm-exegesis/lib/SerialSnippetGenerator.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,18 +113,18 @@ static void appendCodeTemplates(const LLVMState &State,
113113

114114
// TODO: now it is not checked if load writes the whole register.
115115

116-
auto DefOpIt = find_if(I.Operands, [](Operand const &op) {
117-
return op.isDef() && op.isReg();
116+
auto DefOpIt = find_if(I.Operands, [](Operand const &Op) {
117+
return Op.isDef() && Op.isReg();
118118
});
119119

120120
if (DefOpIt == I.Operands.end())
121121
return;
122122

123123
const Operand &DefOp = *DefOpIt;
124-
auto &ET = State.getExegesisTarget();
125-
auto ScratchMemoryRegister = ET.getScratchMemoryRegister(
124+
const ExegesisTarget &ET = State.getExegesisTarget();
125+
unsigned ScratchMemoryRegister = ET.getScratchMemoryRegister(
126126
State.getTargetMachine().getTargetTriple());
127-
auto &RegClass =
127+
const llvm::MCRegisterClass &RegClass =
128128
State.getTargetMachine().getMCRegisterInfo()->getRegClass(
129129
DefOp.getExplicitOperandInfo().RegClass);
130130

@@ -138,13 +138,10 @@ static void appendCodeTemplates(const LLVMState &State,
138138

139139
CodeTemplate CT;
140140
CT.Execution = ExecutionModeBit;
141-
if (CT.ScratchSpacePointerInReg == 0)
142-
CT.ScratchSpacePointerInReg = ScratchMemoryRegister;
141+
CT.ScratchSpacePointerInReg = ScratchMemoryRegister;
143142

144143
CT.Info = std::string(ExecutionClassDescription);
145144
CT.Instructions.push_back(std::move(Variant));
146-
CT.PreinitScratchMemory.emplace_back(ScratchMemoryRegister,
147-
/* Offset */ 0);
148145
CodeTemplates.push_back(std::move(CT));
149146
}
150147

0 commit comments

Comments
 (0)