[PATCH] D157458: [X86][AMX] Fix virtual register traversing in case of GlobalIsel
Evgenii Kudriashov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 8 17:52:46 PDT 2023
e-kud updated this revision to Diff 548421.
e-kud added a comment.
Moved from a ll test to a more illustrative mir test.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D157458/new/
https://reviews.llvm.org/D157458
Files:
llvm/include/llvm/CodeGen/MachineRegisterInfo.h
llvm/lib/Target/X86/X86FastPreTileConfig.cpp
llvm/test/CodeGen/X86/AMX/amx-fastpreconfig-gisel.mir
Index: llvm/test/CodeGen/X86/AMX/amx-fastpreconfig-gisel.mir
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/X86/AMX/amx-fastpreconfig-gisel.mir
@@ -0,0 +1,57 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
+# RUN: llc -mtriple=x86_64-- -run-pass=fastpretileconfig -o - %s | FileCheck %s
+
+# GlobalIsel doesn't use all virtual registers and there may be virtual
+# registers without class.
+# Note that %3 doesn't have a class.
+--- |
+ define i64 @f(i64 %0, i64 %1) {
+ entry:
+ %2 = lshr i64 %0, %1
+ %3 = add i64 %2, 123456789
+ ret i64 %3
+ }
+
+...
+---
+name: f
+legalized: true
+regBankSelected: true
+selected: true
+failedISel: false
+tracksRegLiveness: true
+registers:
+ - { id: 0, class: gr64, preferred-register: '' }
+ - { id: 1, class: gr64_with_sub_8bit, preferred-register: '' }
+ - { id: 2, class: gr64, preferred-register: '' }
+ - { id: 3, class: gpr, preferred-register: '' }
+ - { id: 4, class: gr64, preferred-register: '' }
+ - { id: 5, class: gr8, preferred-register: '' }
+liveins:
+ - { reg: '$rdi', virtual-reg: '' }
+ - { reg: '$rsi', virtual-reg: '' }
+body: |
+ bb.1.entry:
+ liveins: $rdi, $rsi
+
+ ; CHECK-LABEL: name: f
+ ; CHECK: liveins: $rdi, $rsi
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64_with_sub_8bit = COPY $rsi
+ ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit
+ ; CHECK-NEXT: $cl = COPY [[COPY2]]
+ ; CHECK-NEXT: [[SHR64rCL:%[0-9]+]]:gr64 = SHR64rCL [[COPY]], implicit-def $eflags, implicit $cl
+ ; CHECK-NEXT: [[ADD64ri32_:%[0-9]+]]:gr64 = ADD64ri32 [[SHR64rCL]], 123456789, implicit-def $eflags
+ ; CHECK-NEXT: $rax = COPY [[ADD64ri32_]]
+ ; CHECK-NEXT: RET 0, implicit $rax
+ %0:gr64 = COPY $rdi
+ %1:gr64_with_sub_8bit = COPY $rsi
+ %5:gr8 = COPY %1.sub_8bit
+ $cl = COPY %5
+ %2:gr64 = SHR64rCL %0, implicit-def $eflags, implicit $cl
+ %4:gr64 = ADD64ri32 %2, 123456789, implicit-def $eflags
+ $rax = COPY %4
+ RET 0, implicit $rax
+
+...
Index: llvm/lib/Target/X86/X86FastPreTileConfig.cpp
===================================================================
--- llvm/lib/Target/X86/X86FastPreTileConfig.cpp
+++ llvm/lib/Target/X86/X86FastPreTileConfig.cpp
@@ -668,7 +668,8 @@
bool HasVirtTileReg = false;
for (unsigned I = 0, E = NumVirtRegs; I != E; ++I) {
Register VirtReg = Register::index2VirtReg(I);
- if (MRI->getRegClass(VirtReg)->getID() == X86::TILERegClassID) {
+ const TargetRegisterClass *RC = MRI->getRegClassOrNull(VirtReg);
+ if (RC && RC->getID() == X86::TILERegClassID) {
HasVirtTileReg = true;
break;
}
Index: llvm/include/llvm/CodeGen/MachineRegisterInfo.h
===================================================================
--- llvm/include/llvm/CodeGen/MachineRegisterInfo.h
+++ llvm/include/llvm/CodeGen/MachineRegisterInfo.h
@@ -672,9 +672,9 @@
/// conditions are met:
/// 1. Generic virtual registers are created.
/// 2. The machine function has not completely been through the
- /// instruction selection process.
+ /// instruction selection process or selected using GlobalISel.
/// None of this condition is possible without GlobalISel for now.
- /// In other words, if GlobalISel is not used or if the query happens after
+ /// In other words, if GlobalISel is not used and if the query happens after
/// the select pass, using getRegClass is safe.
const TargetRegisterClass *getRegClassOrNull(Register Reg) const {
const RegClassOrRegBank &Val = VRegInfo[Reg].first;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D157458.548421.patch
Type: text/x-patch
Size: 3737 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230809/13f16109/attachment.bin>
More information about the llvm-commits
mailing list