From 6d6288f2bebf0e6d21b54779dae9a34bab713f0a Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 19 Apr 2022 10:15:40 -0400 Subject: [PATCH] llvm-reduce: Preserve subregisters and other fields for top block def --- llvm/test/tools/llvm-reduce/mir/subreg-def0.mir | 21 +++++++++++++++++++ llvm/test/tools/llvm-reduce/mir/subreg-def1.mir | 24 ++++++++++++++++++++++ .../llvm-reduce/deltas/ReduceInstructionsMIR.cpp | 9 +++++++- 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 llvm/test/tools/llvm-reduce/mir/subreg-def0.mir create mode 100644 llvm/test/tools/llvm-reduce/mir/subreg-def1.mir 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 0000000..e37ab45 --- /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 0000000..8be7f64 --- /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 29191b5..2d1be01 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. -- 2.7.4