Skip to content

Commit d2a0e95

Browse files
committed
fix the bug
1 parent 903f279 commit d2a0e95

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

llvm/test/TableGen/GlobalISelEmitter/dead-def.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ def I2 : I<(outs GPR32:$other_name, GPR32:$same_name), (ins GPR32:$rs), []>;
1212
def : Pat<(abs i32:$x), (I1 (I2 $x))>;
1313

1414
// CHECK-LABEL: // (abs:{ *:[i32] } i32:{ *:[i32] }:$x) => (I1:{ *:[i32] } (I2:{ *:[i32] }:{ *:[i32] } ?:{ *:[i32] }:$x))
15+
// CHECK-NEXT: GIR_MakeTempReg, /*TempRegID*/1, /*TypeID*/GILLT_s32,
1516
// CHECK-NEXT: GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s32,
1617
// CHECK-NEXT: GIR_BuildMI, /*InsnID*/1, /*Opcode*/GIMT_Encode2(MyTarget::I2),
1718
// CHECK-NEXT: GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define),
18-
// CHECK-NEXT: GIR_Copy, /*NewInsnID*/1, /*OldInsnID*/0, /*OpIdx*/0, // DstI[same_name]
19+
// CHECK-NEXT: GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/1, /*TempRegFlags*/GIMT_Encode2(RegState::Define|RegState::Dead),
1920
// CHECK-NEXT: GIR_Copy, /*NewInsnID*/1, /*OldInsnID*/0, /*OpIdx*/1, // x
2021
// CHECK-NEXT: GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
2122
// CHECK-NEXT: GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(MyTarget::I1),

llvm/utils/TableGen/GlobalISelEmitter.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ class GlobalISelEmitter final : public GlobalISelMatchTableExecutorEmitter {
406406

407407
Expected<action_iterator> importExplicitDefRenderers(
408408
action_iterator InsertPt, RuleMatcher &M, BuildMIAction &DstMIBuilder,
409-
const TreePatternNode &Dst, unsigned Start = 0) const;
409+
const TreePatternNode &Dst, bool IsRoot) const;
410410

411411
Expected<action_iterator>
412412
importExplicitUseRenderers(action_iterator InsertPt, RuleMatcher &M,
@@ -1375,7 +1375,8 @@ Expected<BuildMIAction &> GlobalISelEmitter::createAndImportInstructionRenderer(
13751375
CopyToPhysRegMIBuilder.addRenderer<CopyPhysRegRenderer>(PhysInput.first);
13761376
}
13771377

1378-
if (auto Error = importExplicitDefRenderers(InsertPt, M, DstMIBuilder, Dst)
1378+
if (auto Error = importExplicitDefRenderers(InsertPt, M, DstMIBuilder, Dst,
1379+
/*IsRoot=*/true)
13791380
.takeError())
13801381
return std::move(Error);
13811382

@@ -1404,8 +1405,8 @@ GlobalISelEmitter::createAndImportSubInstructionRenderer(
14041405
DstMIBuilder.addRenderer<TempRegRenderer>(TempRegID, true);
14051406

14061407
// Handle additional (ignored) results.
1407-
InsertPtOrError = importExplicitDefRenderers(std::prev(*InsertPtOrError), M,
1408-
DstMIBuilder, Dst, /*Start=*/1);
1408+
InsertPtOrError = importExplicitDefRenderers(
1409+
std::prev(*InsertPtOrError), M, DstMIBuilder, Dst, /*IsRoot=*/false);
14091410
if (auto Error = InsertPtOrError.takeError())
14101411
return std::move(Error);
14111412

@@ -1446,16 +1447,16 @@ GlobalISelEmitter::createInstructionRenderer(action_iterator InsertPt,
14461447

14471448
Expected<action_iterator> GlobalISelEmitter::importExplicitDefRenderers(
14481449
action_iterator InsertPt, RuleMatcher &M, BuildMIAction &DstMIBuilder,
1449-
const TreePatternNode &Dst, unsigned Start) const {
1450+
const TreePatternNode &Dst, bool IsRoot) const {
14501451
const CodeGenInstruction *DstI = DstMIBuilder.getCGI();
14511452

14521453
// Process explicit defs. The caller may have already handled the first def.
1453-
for (unsigned I = Start, E = DstI->Operands.NumDefs; I != E; ++I) {
1454+
for (unsigned I = IsRoot ? 0 : 1, E = DstI->Operands.NumDefs; I != E; ++I) {
14541455
const CGIOperandList::OperandInfo &OpInfo = DstI->Operands[I];
14551456
std::string OpName = getMangledRootDefName(OpInfo.Name);
14561457

14571458
// If the def is used in the source DAG, forward it.
1458-
if (M.hasOperand(OpName)) {
1459+
if (IsRoot && M.hasOperand(OpName)) {
14591460
// CopyRenderer saves a StringRef, so cannot pass OpName itself -
14601461
// let's use a string with an appropriate lifetime.
14611462
StringRef PermanentRef = M.getOperandMatcher(OpName).getSymbolicName();

0 commit comments

Comments
 (0)