|
1 | | -// SPDX-FileCopyrightText : © 2025 TU Wien <vadl@tuwien.ac.at> |
| 1 | +// SPDX-FileCopyrightText : © 2025-2026 TU Wien <vadl@tuwien.ac.at> |
2 | 2 | // SPDX-License-Identifier: GPL-3.0-or-later |
3 | 3 | // |
4 | 4 | // This program is free software: you can redistribute it and/or modify |
|
30 | 30 | import vadl.gcb.passes.RegisterRef; |
31 | 31 | import vadl.gcb.passes.operands.model.GcbInstructionOperand; |
32 | 32 | import vadl.gcb.passes.operands.model.GcbInstructionRegisterFileOperand; |
| 33 | +import vadl.gcb.valuetypes.CompilerRegisterUtils; |
33 | 34 | import vadl.gcb.valuetypes.ValueType; |
34 | 35 | import vadl.lcb.passes.isaMatching.IsaMachineInstructionMatchingPass; |
35 | 36 | import vadl.lcb.passes.isaMatching.database.Database; |
|
49 | 50 | import vadl.lcb.passes.llvmLowering.tablegen.model.TableGenPseudoInstExpansionPattern; |
50 | 51 | import vadl.lcb.passes.llvmLowering.tablegen.model.TableGenSelectionWithOutputPattern; |
51 | 52 | import vadl.lcb.passes.operands.TableGenInstructionImmediateOperand; |
52 | | -import vadl.types.DataType; |
53 | 53 | import vadl.types.Type; |
54 | 54 | import vadl.viam.Abi; |
55 | 55 | import vadl.viam.Constant; |
56 | | -import vadl.viam.GeneratesRegisterFileName; |
57 | 56 | import vadl.viam.Instruction; |
| 57 | +import vadl.viam.RegisterResource; |
58 | 58 | import vadl.viam.graph.Graph; |
59 | 59 | import vadl.viam.graph.NodeList; |
60 | 60 | import vadl.viam.graph.dependency.ConstantNode; |
@@ -194,7 +194,7 @@ protected List<TableGenPattern> generatePatternVariations( |
194 | 194 | new LlvmReadRegFileNode(ref.regTensor(), address.copy(), ref.type(), |
195 | 195 | ref.staticCounterAccess()); |
196 | 196 | machine.addWithInputs(new LcbMachineInstructionNode( |
197 | | - new NodeList<>(new ConstantNode(new Constant.Str(abi.returnAddress().render())), |
| 197 | + new NodeList<>(new ConstantNode(new Constant.Str(renderAbiRegister(abi.returnAddress()))), |
198 | 198 | llvmReadRegFile, |
199 | 199 | new ConstantNode(constant)), jalr)); |
200 | 200 | return new TableGenPseudoInstExpansionPattern("PseudoCALLIndirect", |
@@ -247,7 +247,7 @@ protected List<TableGenPattern> generatePatternVariations( |
247 | 247 | var machine = new Graph("machine"); |
248 | 248 | machine.addWithInputs(new LcbMachineInstructionNode( |
249 | 249 | new NodeList<>( |
250 | | - new ConstantNode(new Constant.Str(zeroRegister(inputRegister.registerFile()))), |
| 250 | + new ConstantNode(new Constant.Str(zeroRegisterName(inputRegister.registerFile()))), |
251 | 251 | new LlvmReadRegFileNode(ref.registerTensor(), address, ref.type(), |
252 | 252 | ref.staticCounterAccess()), |
253 | 253 | fieldRef), jalr)); |
@@ -332,15 +332,14 @@ private TableGenPattern generateBranchIndirectWithZero( |
332 | 332 | return new TableGenSelectionWithOutputPattern(selector, machine); |
333 | 333 | } |
334 | 334 |
|
335 | | - private static String zeroRegister(GeneratesRegisterFileName registerFile) { |
336 | | - var constraint = |
337 | | - ensurePresent( |
338 | | - registerFile.constraints().stream().filter(x -> x.value().intValue() == 0) |
339 | | - .findFirst(), |
340 | | - () -> Diagnostic.error("There must a constraint for the zero register.", |
341 | | - registerFile.location()) |
342 | | - ); |
| 335 | + private static String zeroRegisterName(RegisterResource registerFile) { |
| 336 | + var indices = ensurePresent(CompilerRegisterUtils.zeroRegister(registerFile), |
| 337 | + () -> Diagnostic.error("There must a constraint for the zero register.", |
| 338 | + registerFile.location())); |
| 339 | + return CompilerRegisterUtils.indexedRegisterName(registerFile, indices.getFirst().intValue()); |
| 340 | + } |
343 | 341 |
|
344 | | - return registerFile.identifier().simpleName() + constraint.indices().getFirst().intValue(); |
| 342 | + private static String renderAbiRegister(Abi.AbiRegister register) { |
| 343 | + return CompilerRegisterUtils.indexedRegisterName(register.registerFile(), register.addr()); |
345 | 344 | } |
346 | 345 | } |
0 commit comments