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