xref: /llvm-project/llvm/test/TableGen/GlobalISelCombinerEmitter/builtins/builtin-pattern-parrsing.td (revision 844c0da77766901eba6420c096657c6078289c4e)
1*844c0da7Spvanhout// RUN: llvm-tblgen -I %p/../../../../include -gen-global-isel-combiner \
2*844c0da7Spvanhout// RUN:     -gicombiner-stop-after-parse -combiners=MyCombiner %s | \
3*844c0da7Spvanhout// RUN: FileCheck %s
4*844c0da7Spvanhout
5*844c0da7Spvanhoutinclude "llvm/Target/Target.td"
6*844c0da7Spvanhoutinclude "llvm/Target/GlobalISel/Combine.td"
7*844c0da7Spvanhout
8*844c0da7Spvanhoutdef MyTargetISA : InstrInfo;
9*844c0da7Spvanhoutdef MyTarget : Target { let InstructionSet = MyTargetISA; }
10*844c0da7Spvanhout
11*844c0da7Spvanhout// CHECK:      (CombineRule name:BuiltinTest0 id:0 root:a
12*844c0da7Spvanhout// CHECK-NEXT:   (MatchPats
13*844c0da7Spvanhout// CHECK-NEXT:     <match_root>__BuiltinTest0_match_0:(CodeGenInstructionPattern G_TRUNC operands:[<def>$a, $b])
14*844c0da7Spvanhout// CHECK-NEXT:   )
15*844c0da7Spvanhout// CHECK-NEXT:   (ApplyPats
16*844c0da7Spvanhout// CHECK-NEXT:     <apply_root>__BuiltinTest0_apply_0:(BuiltinPattern GIReplaceReg operands:[<def>$a, $b])
17*844c0da7Spvanhout// CHECK-NEXT:   )
18*844c0da7Spvanhout// CHECK-NEXT:   (OperandTable MatchPats
19*844c0da7Spvanhout// CHECK-NEXT:     a -> __BuiltinTest0_match_0
20*844c0da7Spvanhout// CHECK-NEXT:     b -> <live-in>
21*844c0da7Spvanhout// CHECK-NEXT:   )
22*844c0da7Spvanhout// CHECK-NEXT:   (OperandTable ApplyPats
23*844c0da7Spvanhout// CHECK-NEXT:     a -> __BuiltinTest0_apply_0
24*844c0da7Spvanhout// CHECK-NEXT:     b -> <live-in>
25*844c0da7Spvanhout// CHECK-NEXT:   )
26*844c0da7Spvanhout// CHECK-NEXT: )
27*844c0da7Spvanhoutdef BuiltinTest0 : GICombineRule<
28*844c0da7Spvanhout  (defs root:$a),
29*844c0da7Spvanhout  (match (G_TRUNC $a, $b)),
30*844c0da7Spvanhout  (apply (GIReplaceReg $a, $b))
31*844c0da7Spvanhout>;
32*844c0da7Spvanhout
33*844c0da7Spvanhout// CHECK:      (CombineRule name:BuiltinTest1 id:1 root:mi
34*844c0da7Spvanhout// CHECK-NEXT:   (MatchPats
35*844c0da7Spvanhout// CHECK-NEXT:     <match_root>mi:(CodeGenInstructionPattern G_STORE operands:[$a, $b])
36*844c0da7Spvanhout// CHECK-NEXT:   )
37*844c0da7Spvanhout// CHECK-NEXT:   (ApplyPats
38*844c0da7Spvanhout// CHECK-NEXT:     __BuiltinTest1_apply_0:(BuiltinPattern GIEraseRoot operands:[])
39*844c0da7Spvanhout// CHECK-NEXT:   )
40*844c0da7Spvanhout// CHECK-NEXT:   (OperandTable MatchPats
41*844c0da7Spvanhout// CHECK-NEXT:     a -> <live-in>
42*844c0da7Spvanhout// CHECK-NEXT:     b -> <live-in>
43*844c0da7Spvanhout// CHECK-NEXT:   )
44*844c0da7Spvanhout// CHECK-NEXT:   (OperandTable ApplyPats <empty>)
45*844c0da7Spvanhout// CHECK-NEXT: )
46*844c0da7Spvanhoutdef BuiltinTest1 : GICombineRule<
47*844c0da7Spvanhout  (defs root:$mi),
48*844c0da7Spvanhout  (match (G_STORE $a, $b):$mi),
49*844c0da7Spvanhout  (apply (GIEraseRoot))
50*844c0da7Spvanhout>;
51*844c0da7Spvanhout
52*844c0da7Spvanhoutdef MyCombiner: GICombiner<"GenMyCombiner", [
53*844c0da7Spvanhout  BuiltinTest0,
54*844c0da7Spvanhout  BuiltinTest1
55*844c0da7Spvanhout]>;
56