[PATCH] D82459: [AMDGPU] Make sure to fix implicit operands on insertBranch
David Stuttard via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 24 08:36:56 PDT 2020
dstuttard updated this revision to Diff 273038.
dstuttard added a comment.
Made requested changes
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D82459/new/
https://reviews.llvm.org/D82459
Files:
llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
llvm/test/CodeGen/AMDGPU/insert-branch-w32.mir
Index: llvm/test/CodeGen/AMDGPU/insert-branch-w32.mir
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/AMDGPU/insert-branch-w32.mir
@@ -0,0 +1,47 @@
+# RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass branch-folder -o - %s | FileCheck %s
+
+# Designed to provoke calling SIInstrInfo::insertBranch in wave32 mode
+# The implicit $vcc operand should be $vcc_lo in this case
+
+...
+# CHECK-LABEL: bb.1:
+# CHECK: S_CBRANCH_VCCNZ %bb.1, implicit $vcc_lo
+
+name: _amdgpu_cs_main
+body: |
+ bb.0:
+ $vgpr1 = V_MOV_B32_e32 1050, implicit $exec
+ $sgpr0 = S_MOV_B32 1123418112
+ $vcc_hi = IMPLICIT_DEF
+ bb.1:
+ $vgpr0 = COPY killed $vgpr1, implicit $exec
+ V_CMP_GT_U32_e32 5, $vgpr1, implicit-def $vcc_lo, implicit $exec, implicit-def $vcc
+ $vcc_lo = S_AND_B32 $exec_lo, $vcc_lo, implicit-def dead $scc
+ S_CBRANCH_VCCNZ %bb.1, implicit $vcc_lo, implicit $vcc
+ S_BRANCH %bb.2
+
+ bb.2:
+ $sgpr1 = COPY $sgpr0
+ S_BRANCH %bb.1
+
+...
+
+# CHECK-LABEL: bb.1:
+# CHECK: S_CBRANCH_VCCNZ %bb.1, implicit undef $vcc_lo
+---
+name: _amdgpu_cs_main_undef
+body: |
+ bb.0:
+ $vgpr1 = V_MOV_B32_e32 1050, implicit $exec
+ $sgpr0 = S_MOV_B32 1123418112
+ $vcc_hi = IMPLICIT_DEF
+ bb.1:
+ $vgpr0 = COPY killed $vgpr1, implicit $exec
+ S_CBRANCH_VCCNZ %bb.1, implicit undef $vcc_lo, implicit undef $vcc
+ S_BRANCH %bb.2
+
+ bb.2:
+ $sgpr1 = COPY $sgpr0
+ S_BRANCH %bb.1
+
+...
Index: llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
===================================================================
--- llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
+++ llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
@@ -2271,6 +2271,7 @@
// Copy the flags onto the implicit condition register operand.
preserveCondRegFlags(CondBr->getOperand(1), Cond[1]);
+ fixImplicitOperands(*CondBr);
if (BytesAdded)
*BytesAdded = 4;
@@ -3332,7 +3333,8 @@
const MachineOperand &Orig) {
for (MachineOperand &Use : MI.implicit_operands()) {
- if (Use.isUse() && Use.getReg() == AMDGPU::VCC) {
+ if (Use.isUse() &&
+ (Use.getReg() == AMDGPU::VCC || Use.getReg() == AMDGPU::VCC_LO)) {
Use.setIsUndef(Orig.isUndef());
Use.setIsKill(Orig.isKill());
return;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82459.273038.patch
Type: text/x-patch
Size: 2373 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200624/1d3e904b/attachment-0001.bin>
More information about the llvm-commits
mailing list