[PATCH] D127642: [RISCV] Fixing undefined physical register issue when subreg liveness tracking enabled.
Kito Cheng via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 14 08:17:55 PDT 2022
kito-cheng updated this revision to Diff 436796.
kito-cheng added a comment.
Chagnes:
- Refine testcase.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D127642/new/
https://reviews.llvm.org/D127642
Files:
llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp
llvm/test/CodeGen/RISCV/rvv/undef-subreg-range.mir
Index: llvm/test/CodeGen/RISCV/rvv/undef-subreg-range.mir
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/RISCV/rvv/undef-subreg-range.mir
@@ -0,0 +1,74 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
+# RUN: llc %s -O2 -mtriple riscv64 -riscv-enable-subreg-liveness \
+# RUN: -verify-machineinstrs -run-pass=riscv-expand-pseudo -o - 2>&1 \
+# RUN: | FileCheck %s
+--- |
+ define void @foo() #0 {
+ entry:
+ ret void
+ }
+...
+---
+name: foo
+alignment: 4
+exposesReturnsTwice: false
+legalized: false
+regBankSelected: false
+selected: false
+failedISel: false
+tracksRegLiveness: true
+hasWinCFI: false
+callsEHReturn: false
+callsUnwindInit: false
+hasEHCatchret: false
+hasEHScopes: false
+hasEHFunclets: false
+failsVerification: false
+tracksDebugUserValues: true
+registers: []
+liveins: []
+frameInfo:
+ isFrameAddressTaken: false
+ isReturnAddressTaken: false
+ hasStackMap: false
+ hasPatchPoint: false
+ stackSize: 16
+ offsetAdjustment: 0
+ maxAlignment: 16
+ adjustsStack: false
+ hasCalls: false
+ stackProtector: ''
+ functionContext: ''
+ maxCallFrameSize: 0
+ cvBytesOfCalleeSavedRegisters: 0
+ hasOpaqueSPAdjustment: false
+ hasVAStart: false
+ hasMustTailInVarArgFunc: false
+ hasTailCall: false
+ localFrameSize: 0
+ savePoint: ''
+ restorePoint: ''
+fixedStack: []
+stack:
+ - { id: 0, name: '', type: spill-slot, offset: 0, size: 32, alignment: 8,
+ stack-id: scalable-vector, callee-saved-register: '', callee-saved-restored: true }
+callSites: []
+debugValueSubstitutions: []
+constants: []
+machineFunctionInfo:
+ varArgsFrameIndex: 0
+ varArgsSaveSize: 0
+body: |
+ bb.0.entry:
+ liveins: $v8m2, $x10, $x11
+ ; CHECK-LABEL: name: foo
+ ; CHECK: liveins: $v8m2, $x10, $x11
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: VS2R_V $v8m2, $x10, implicit $v8m2_v10m2 :: (store unknown-size into %stack.0, align 8)
+ ; CHECK-NEXT: $x10 = ADD $x10, $x11
+ ; CHECK-NEXT: VS2R_V $v10m2, $x10, implicit $v8m2_v10m2 :: (store unknown-size into %stack.0, align 8)
+ ; CHECK-NEXT: PseudoRET
+ PseudoVSPILL2_M2 killed $v8m2_v10m2, killed $x10, killed $x11 :: (store unknown-size into %stack.0, align 8)
+ PseudoRET
+
+...
Index: llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp
===================================================================
--- llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp
+++ llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp
@@ -314,10 +314,15 @@
assert(LMUL == 1 && "LMUL must be 1, 2, or 4.");
for (unsigned I = 0; I < NF; ++I) {
+ // Adding implicit-use of super register to describe we are using part of
+ // super register, that prevents machine verifier complaining when part of
+ // subreg is undef, see comment in MachineVerifier::checkLiveness for more
+ // detail.
BuildMI(MBB, MBBI, DL, TII->get(Opcode))
.addReg(TRI->getSubReg(SrcReg, SubRegIdx + I))
.addReg(Base)
- .addMemOperand(*(MBBI->memoperands_begin()));
+ .addMemOperand(*(MBBI->memoperands_begin()))
+ .addReg(SrcReg, RegState::Implicit);
if (I != NF - 1)
BuildMI(MBB, MBBI, DL, TII->get(RISCV::ADD), Base)
.addReg(Base)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127642.436796.patch
Type: text/x-patch
Size: 3414 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220614/7dffc57f/attachment.bin>
More information about the llvm-commits
mailing list