Skip to content

Commit 2593476

Browse files
authored
lcb: Fixed register order for subregisters (#461)
* lcb: Fixed register order for subregisters * lcb: Updated test
1 parent b3e8597 commit 2593476

File tree

4 files changed

+608
-593
lines changed

4 files changed

+608
-593
lines changed

vadl/main/resources/templates/lcb/llvm/lib/Target/RegisterInfo.td

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
let Namespace = "[(${namespace})]" in {
2-
// SubRegIndexes for GPR registers
3-
def sub_32 : SubRegIndex<32>;
4-
def sub_32_hi : SubRegIndex<32, 32>;
5-
def full_64 : SubRegIndex<64>;
6-
}
1+
// SubRegIndexes for GPR registers
2+
def SUB_32 : SubRegIndex<32>;
3+
def SUB_32_HI : SubRegIndex<32, 32>;
4+
def FULL_64 : SubRegIndex<64>;
75

86
[# th:each="register, iterStat : ${aliasRegisters}" ]
97
def [(${register.name})] : Register<"[(${register.name})]">

vadl/main/vadl/lcb/template/lib/Target/EmitRegisterInfoTableGenFilePass.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,16 @@
1919
import java.io.IOException;
2020
import java.util.ArrayList;
2121
import java.util.HashSet;
22+
import java.util.List;
2223
import java.util.Map;
2324
import java.util.Optional;
2425
import java.util.stream.Collectors;
2526
import java.util.stream.IntStream;
2627
import java.util.stream.Stream;
2728
import vadl.configuration.LcbConfiguration;
29+
import vadl.gcb.valuetypes.CompilerRegister;
2830
import vadl.lcb.passes.llvmLowering.GenerateTableGenRegistersPass;
31+
import vadl.lcb.passes.llvmLowering.tablegen.model.register.TableGenRegister;
2932
import vadl.lcb.passes.llvmLowering.tablegen.model.register.TableGenRegisterClass;
3033
import vadl.lcb.template.CommonVarNames;
3134
import vadl.lcb.template.LcbTemplateRenderingPass;
@@ -126,13 +129,31 @@ protected Map<String, Object> createVariables(final PassResults passResults,
126129
outputAliasRegisterClasses.add(new WrappedRegisterFile(registerClass, allocationSeq));
127130
}
128131

132+
var registers = sortRegisters(output.registers());
129133
return Map.of(CommonVarNames.NAMESPACE,
130134
lcbConfiguration().targetName().value().toLowerCase(),
131135
"pointerAlignment", DataLayoutProvider.pointerAlignment(abi),
132-
"registers", output.registers(),
136+
"registers", registers,
133137
"aliasRegisters", output.aliasRegisters(),
134138
"registerFiles", outputRegisterClasses,
135139
"aliasRegisterFiles", outputAliasRegisterClasses
136140
);
137141
}
142+
143+
private List<TableGenRegister> sortRegisters(List<TableGenRegister> registers) {
144+
var result = new ArrayList<TableGenRegister>();
145+
var ready = new HashSet<CompilerRegister>();
146+
147+
while (result.size() != registers.size()) {
148+
for (var register : registers) {
149+
var allSubRegisters = ready.containsAll(register.subRegs());
150+
if (allSubRegisters && !ready.contains(register.compilerRegister())) {
151+
ready.add(register.compilerRegister());
152+
result.add(register);
153+
}
154+
}
155+
}
156+
157+
return result;
158+
}
138159
}

0 commit comments

Comments
 (0)