Skip to content

Commit 03a592f

Browse files
committed
TableGen/GlobalISel: Fix srcvalue inputs
Allow using srcvalue for discarding pattern inputs.
1 parent 86d14ed commit 03a592f

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// RUN: llvm-tblgen -gen-global-isel -warn-on-skipped-patterns -I %p/../../include -I %p/Common %s -o - < %s | FileCheck -check-prefix=GISEL %s
2+
3+
include "llvm/Target/Target.td"
4+
include "GlobalISelEmitterCommon.td"
5+
6+
def int_tgt_foo : Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], []>;
7+
8+
// Test that using srcvalue works for discarded pattern inputs.
9+
def FOO : I<(outs GPR32:$dst), (ins GPR32Op:$src0, GPR32Op:$src1), []>;
10+
11+
// GISEL: GIM_CheckOpcode, /*MI*/0, TargetOpcode::G_INTRINSIC_W_SIDE_EFFECTS,
12+
// GISEL-NEXT: GIM_CheckNumOperands, /*MI*/0, /*Expected*/4,
13+
// GISEL-NEXT: GIM_CheckIntrinsicID, /*MI*/0, /*Op*/1, Intrinsic::tgt_foo,
14+
// GISEL-NEXT: GIM_CheckType, /*MI*/0, /*Op*/0, /*Type*/GILLT_s32,
15+
// GISEL-NEXT: GIM_CheckType, /*MI*/0, /*Op*/2, /*Type*/GILLT_s32,
16+
// GISEL-NEXT: GIM_CheckType, /*MI*/0, /*Op*/3, /*Type*/GILLT_s32,
17+
// GISEL-NEXT: GIM_CheckRegBankForClass, /*MI*/0, /*Op*/0, /*RC*/MyTarget::GPR32RegClassID,
18+
// GISEL-NEXT: // (intrinsic_w_chain:{ *:[i32] } 248:{ *:[iPTR] }, srcvalue:{ *:[i32] }, i32:{ *:[i32] }:$src1) => (FOO:{ *:[i32] } (IMPLICIT_DEF:{ *:[i32] }), GPR32:{ *:[i32] }:$src1)
19+
// GISEL-NEXT: GIR_MakeTempReg, /*TempRegID*/0, /*TypeID*/GILLT_s32,
20+
// GISEL-NEXT: GIR_BuildMI, /*InsnID*/1, /*Opcode*/TargetOpcode::IMPLICIT_DEF,
21+
// GISEL-NEXT: GIR_AddTempRegister, /*InsnID*/1, /*TempRegID*/0, /*TempRegFlags*/RegState::Define,
22+
// GISEL-NEXT: GIR_ConstrainSelectedInstOperands, /*InsnID*/1,
23+
// GISEL-NEXT: GIR_BuildMI, /*InsnID*/0, /*Opcode*/MyTarget::FOO,
24+
// GISEL-NEXT: GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/0, // dst
25+
// GISEL-NEXT: GIR_AddTempRegister, /*InsnID*/0, /*TempRegID*/0, /*TempRegFlags*/0,
26+
// GISEL-NEXT: GIR_Copy, /*NewInsnID*/0, /*OldInsnID*/0, /*OpIdx*/3, // src1
27+
// GISEL-NEXT: GIR_EraseFromParent, /*InsnID*/0,
28+
// GISEL-NEXT: GIR_ConstrainSelectedInstOperands, /*InsnID*/0,
29+
def : Pat <
30+
(int_tgt_foo (i32 srcvalue), i32:$src1),
31+
(FOO (IMPLICIT_DEF), GPR32:$src1)
32+
>;

llvm/utils/TableGen/GlobalISelEmitter.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3971,6 +3971,10 @@ Error GlobalISelEmitter::importChildMatcher(
39713971
"Src pattern child def is an unsupported tablegen class (ImmLeaf)");
39723972
}
39733973

3974+
// Place holder for SRCVALUE nodes. Nothing to do here.
3975+
if (ChildRec->getName() == "srcvalue")
3976+
return Error::success();
3977+
39743978
return failedImport(
39753979
"Src pattern child def is an unsupported tablegen class");
39763980
}

0 commit comments

Comments
 (0)