[llvm] 6d6288f - llvm-reduce: Preserve subregisters and other fields for top block def
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 27 11:21:48 PDT 2022
Author: Matt Arsenault
Date: 2022-04-27T14:21:43-04:00
New Revision: 6d6288f2bebf0e6d21b54779dae9a34bab713f0a
URL: https://github.com/llvm/llvm-project/commit/6d6288f2bebf0e6d21b54779dae9a34bab713f0a
DIFF: https://github.com/llvm/llvm-project/commit/6d6288f2bebf0e6d21b54779dae9a34bab713f0a.diff
LOG: llvm-reduce: Preserve subregisters and other fields for top block def
Added:
llvm/test/tools/llvm-reduce/mir/subreg-def0.mir
llvm/test/tools/llvm-reduce/mir/subreg-def1.mir
Modified:
llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp
Removed:
################################################################################
diff --git a/llvm/test/tools/llvm-reduce/mir/subreg-def0.mir b/llvm/test/tools/llvm-reduce/mir/subreg-def0.mir
new file mode 100644
index 0000000000000..e37ab45fa4926
--- /dev/null
+++ b/llvm/test/tools/llvm-reduce/mir/subreg-def0.mir
@@ -0,0 +1,21 @@
+# REQUIRES: amdgpu-registered-target
+# RUN: llvm-reduce -mtriple=amdgcn-amd-amdhsa --test FileCheck --test-arg --check-prefix=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t 2> %t.log
+# RUN: FileCheck --match-full-lines --check-prefix=RESULT %s < %t
+
+# CHECK-INTERESTINGNESS: V_ADD_U32
+
+# RESULT: S_WAITCNT 0, implicit-def undef %2.sub1, implicit-def %3.sub0
+# RESULT-NEXT: %1:vgpr_32 = V_ADD_U32_e32 %2.sub0, %2.sub1, implicit $exec
+# RESULT-NEXT: S_ENDPGM 0, implicit %1
+
+---
+name: f
+tracksRegLiveness: true
+body: |
+ bb.0:
+ S_WAITCNT 0
+ undef %0.sub1:vreg_64 = V_MOV_B32_e32 0, implicit $exec
+ %0.sub0:vreg_64 = V_MOV_B32_e32 1, implicit $exec
+ %1:vgpr_32 = V_ADD_U32_e32 %0.sub0, %0.sub1, implicit $exec
+ S_ENDPGM 0, implicit %1
+...
diff --git a/llvm/test/tools/llvm-reduce/mir/subreg-def1.mir b/llvm/test/tools/llvm-reduce/mir/subreg-def1.mir
new file mode 100644
index 0000000000000..8be7f64040b25
--- /dev/null
+++ b/llvm/test/tools/llvm-reduce/mir/subreg-def1.mir
@@ -0,0 +1,24 @@
+# REQUIRES: amdgpu-registered-target
+# RUN: llvm-reduce -mtriple=amdgcn-amd-amdhsa --test FileCheck --test-arg --check-prefix=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t 2> %t.log
+# RUN: FileCheck --match-full-lines --check-prefix=RESULT %s < %t
+
+# CHECK-INTERESTINGNESS: %{{[0-9]+}}.sub0:vreg_64 = V_ADD_U32_e32 %{{[0-9]+}}.sub1, %{{[0-9]+}}.sub0, implicit $exec
+# CHECK-INTERESTINGNESS: %{{[0-9]+}}.sub0:vreg_64 = V_ADD_U32_e32 4, %{{[0-9]+}}.sub0, implicit $exec
+
+# RESULT: S_WAITCNT 0, implicit-def undef %2.sub1
+# RESULT-NEXT: %{{[0-9]+}}.sub0:vreg_64 = V_ADD_U32_e32 %{{[0-9]+}}.sub1, %{{[0-9]+}}.sub0, implicit $exec
+# RESULT-NEXT: %{{[0-9]+}}.sub0:vreg_64 = V_ADD_U32_e32 4, %{{[0-9]+}}.sub0, implicit $exec
+# RESULT-NEXT: S_ENDPGM 0, implicit %{{[0-9]+}}, implicit %{{[0-9]+}}.sub0
+
+---
+name: f
+tracksRegLiveness: true
+body: |
+ bb.0:
+ S_WAITCNT 0
+ undef %0.sub1:vreg_64 = V_MOV_B32_e32 0, implicit $exec
+ %1.sub1:vreg_64 = V_ADD_U32_e32 2, %0.sub1, implicit $exec
+ %0.sub0:vreg_64 = V_ADD_U32_e32 %1.sub1, %0.sub0, implicit $exec
+ %1.sub0:vreg_64 = V_ADD_U32_e32 4, %0.sub0, implicit $exec
+ S_ENDPGM 0, implicit %1, implicit %0.sub0
+...
diff --git a/llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp b/llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp
index 29191b597a5da..2d1be013038ff 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp
@@ -101,10 +101,17 @@ static void extractInstrFromModule(Oracle &O, MachineFunction &MF) {
// If no dominating definition was found then add an implicit one to the
// first instruction in the entry block.
+
+ // FIXME: This should really insert IMPLICIT_DEF or G_IMPLICIT_DEF. We
+ // need to refine the reduction quality metric from number of serialized
+ // bytes to continue progressing if we're going to introduce new
+ // instructions.
if (!NewReg && TopMI) {
NewReg = MRI->cloneVirtualRegister(Reg);
TopMI->addOperand(MachineOperand::CreateReg(
- NewReg, true /*IsDef*/, true /*IsImp*/, false /*IsKill*/));
+ NewReg, true /*IsDef*/, true /*IsImp*/, false /*IsKill*/,
+ MO.isDead(), MO.isUndef(), MO.isEarlyClobber(), MO.getSubReg(),
+ /*IsDebug*/ false, MO.isInternalRead()));
}
// Update all uses.
More information about the llvm-commits
mailing list