From 46cf6fc74237696070eb90d48a7c213a2c741e9b Mon Sep 17 00:00:00 2001 From: Sergei Barannikov Date: Sun, 29 Dec 2024 10:07:53 +0300 Subject: [PATCH] [TableGen][GISel] Fix IMPLICIT_DEF operand being added as a use `IMPLICIT_DEF` has one operand that is a def, not a use. --- .../GlobalISelEmitter/undef-tied-input.td | 24 +++++++++++++++++++ llvm/utils/TableGen/GlobalISelEmitter.cpp | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 llvm/test/TableGen/GlobalISelEmitter/undef-tied-input.td diff --git a/llvm/test/TableGen/GlobalISelEmitter/undef-tied-input.td b/llvm/test/TableGen/GlobalISelEmitter/undef-tied-input.td new file mode 100644 index 0000000000000..a2ee3dc311772 --- /dev/null +++ b/llvm/test/TableGen/GlobalISelEmitter/undef-tied-input.td @@ -0,0 +1,24 @@ +// RUN: llvm-tblgen -gen-global-isel -I %p/../../../include -I %p/../Common %s | FileCheck %s + +include "llvm/Target/Target.td" +include "GlobalISelEmitterCommon.td" + +def undef_tied : OperandWithDefaultOps { + let MIOperandInfo = (ops GPR32:$inactive); +} + +let Constraints = "$opt.inactive = $rd" in +def I1 : I<(outs GPR32:$rd), (ins GPR32:$rs, undef_tied:$opt), + [(set GPR32:$rd, (abs i32:$rs))]>; + +// CHECK-LABEL: // (abs:{ *:[i32] } i32:{ *:[i32] }:$rs) => (I1:{ *:[i32] } i32:{ *:[i32] }:$rs) +// CHECK-NEXT: GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s32, +// CHECK-NEXT: GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(TargetOpcode::IMPLICIT_DEF), +// CHECK-NEXT: GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define), +// CHECK-NEXT: GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(MyTarget::I1), +// CHECK-NEXT: GIR_RootToRootCopy, /*OpIdx*/0, // DstI[rd] +// CHECK-NEXT: GIR_RootToRootCopy, /*OpIdx*/1, // rs +// CHECK-NEXT: GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/0, +// CHECK-NEXT: GIR_RootConstrainSelectedInstOperands, +// CHECK-NEXT: // GIR_Coverage, 0, +// CHECK-NEXT: GIR_EraseRootFromParent_Done, diff --git a/llvm/utils/TableGen/GlobalISelEmitter.cpp b/llvm/utils/TableGen/GlobalISelEmitter.cpp index f0fb11625883e..092cdd4ad5b43 100644 --- a/llvm/utils/TableGen/GlobalISelEmitter.cpp +++ b/llvm/utils/TableGen/GlobalISelEmitter.cpp @@ -1756,7 +1756,7 @@ Error GlobalISelEmitter::importDefaultOperandRenderers( &Target.getInstruction(RK.getDef("IMPLICIT_DEF"))); BuildMIAction &IDMIBuilder = *static_cast(InsertPt->get()); - IDMIBuilder.addRenderer(TempRegID); + IDMIBuilder.addRenderer(TempRegID, /*IsDef=*/true); DstMIBuilder.addRenderer(TempRegID); } else { DstMIBuilder.addRenderer(Target, Def);