diff options
author | Daniel Sanders <daniel_l_sanders@apple.com> | 2019-10-03 18:49:27 -0700 |
---|---|---|
committer | Daniel Sanders <daniel_l_sanders@apple.com> | 2019-10-25 12:56:49 -0700 |
commit | a6e1de4afc51560df18c95cb616dec51248ed660 (patch) | |
tree | 75d78df5c258819e85caf35aca806f85a212985f /llvm/test | |
parent | 64c1f6602a029e3b0914b95d5b580e4b02fc43c1 (diff) | |
download | bcm5719-llvm-a6e1de4afc51560df18c95cb616dec51248ed660.tar.gz bcm5719-llvm-a6e1de4afc51560df18c95cb616dec51248ed660.zip |
[gicombiner] Add parse failure tests for defs/match
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/TableGen/GICombinerEmitter/defs-invalid.td | 42 | ||||
-rw-r--r-- | llvm/test/TableGen/GICombinerEmitter/match-invalid.td | 71 |
2 files changed, 113 insertions, 0 deletions
diff --git a/llvm/test/TableGen/GICombinerEmitter/defs-invalid.td b/llvm/test/TableGen/GICombinerEmitter/defs-invalid.td new file mode 100644 index 00000000000..fe11ef4673e --- /dev/null +++ b/llvm/test/TableGen/GICombinerEmitter/defs-invalid.td @@ -0,0 +1,42 @@ +// RUN: not llvm-tblgen -I %p/../../../include -gen-global-isel-combiner \ +// RUN: -combiners=MyCombiner %s 2>&1 | \ +// RUN: FileCheck -implicit-check-not=error %s + +include "llvm/Target/Target.td" +include "llvm/Target/GlobalISel/Combine.td" + +def MyTargetISA : InstrInfo; +def MyTarget : Target { let InstructionSet = MyTargetISA; } + +def dummy; + +def missing_defs_node : GICombineRule< + (dummy), + (dummy), + (dummy)>; +// CHECK: :[[@LINE-4]]:{{[0-9]+}}: error: Expected defs operator +// CHECK-NEXT: def missing_defs_node : GICombineRule< +// CHECK: :[[@LINE-6]]:{{[0-9]+}}: error: Failed to parse rule + +def no_roots : GICombineRule< + (defs), + (dummy), + (dummy)>; +// CHECK: :[[@LINE-4]]:{{[0-9]+}}: error: Combine rules must have at least one root +// CHECK-NEXT: def no_roots : GICombineRule< +// CHECK: :[[@LINE-6]]:{{[0-9]+}}: error: Failed to parse rule + +def unknown_kind : GICombineRule< + (defs dummy:$a), + (dummy), + (dummy)>; +// CHECK: :[[@LINE-4]]:{{[0-9]+}}: error: Expected a subclass of GIDefKind or a sub-dag whose operator is of type GIDefKindWithArgs +// CHECK-NEXT: def unknown_kind : GICombineRule< +// CHECK: :[[@LINE-6]]:{{[0-9]+}}: error: Failed to parse rule + +def MyCombiner: GICombinerHelper<"GenMyCombiner", [ +// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: Failed to parse one or more rules + missing_defs_node, + no_roots, + unknown_kind +]>; diff --git a/llvm/test/TableGen/GICombinerEmitter/match-invalid.td b/llvm/test/TableGen/GICombinerEmitter/match-invalid.td new file mode 100644 index 00000000000..2d67f1ea549 --- /dev/null +++ b/llvm/test/TableGen/GICombinerEmitter/match-invalid.td @@ -0,0 +1,71 @@ +// RUN: not llvm-tblgen -I %p/../../../include -gen-global-isel-combiner \ +// RUN: -combiners=MyCombiner %s 2>&1 | \ +// RUN: FileCheck -implicit-check-not=error %s + +include "llvm/Target/Target.td" +include "llvm/Target/GlobalISel/Combine.td" + +def MyTargetISA : InstrInfo; +def MyTarget : Target { let InstructionSet = MyTargetISA; } + +def dummy; + +def R0 : Register<"r0"> { let Namespace = "MyTarget"; } +def GPR32 : RegisterClass<"MyTarget", [i32], 32, (add R0)>; +class I<dag OOps, dag IOps, list<dag> Pat> + : Instruction { + let Namespace = "MyTarget"; + let OutOperandList = OOps; + let InOperandList = IOps; + let Pattern = Pat; +} +def MOV : I<(outs GPR32:$dst), (ins GPR32:$src1), []>; + +def missing_match_node : GICombineRule< + (defs root:$a), + (dummy), + (dummy)>; +// CHECK: :[[@LINE-4]]:{{[0-9]+}}: error: Expected match operator +// CHECK-NEXT: def missing_match_node : GICombineRule< +// CHECK: :[[@LINE-6]]:{{[0-9]+}}: error: Failed to parse rule + +def null_matcher : GICombineRule< + (defs root:$a), + (match), + (dummy)>; +// CHECK: :[[@LINE-4]]:{{[0-9]+}}: error: Matcher is empty +// CHECK-NEXT: def null_matcher : GICombineRule< +// CHECK: :[[@LINE-6]]:{{[0-9]+}}: error: Failed to parse rule + +def unknown_kind1 : GICombineRule< + (defs root:$a), + (match 0), + (dummy)>; +// CHECK: :[[@LINE-4]]:{{[0-9]+}}: error: Expected a subclass of GIMatchKind or a sub-dag whose operator is either of a GIMatchKindWithArgs or Instruction +// CHECK-NEXT: def unknown_kind1 : GICombineRule< +// CHECK: :[[@LINE-6]]:{{[0-9]+}}: error: Failed to parse rule + +def unknown_kind2 : GICombineRule< + (defs root:$a), + (match (dummy)), + (dummy)>; +// CHECK: :[[@LINE-4]]:{{[0-9]+}}: error: Expected a subclass of GIMatchKind or a sub-dag whose operator is either of a GIMatchKindWithArgs or Instruction +// CHECK-NEXT: def unknown_kind2 : GICombineRule< +// CHECK: :[[@LINE-6]]:{{[0-9]+}}: error: Failed to parse rule + +def multidef_but_not_an_error: GICombineRule< + (defs root:$a), + (match (MOV $a, $b), + (MOV $a, $b)), + (dummy)>; +// CHECK-NOT: :[[@LINE-5]]:{{[0-9]+}}: error: + +def MyCombiner: GICombinerHelper<"GenMyCombiner", [ +// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: Failed to parse one or more rules + missing_match_node, + null_matcher, + unknown_kind1, + unknown_kind2, + // Rules omitted from a matcher can be as broken as you like. They will not be read. + // multidef_but_not_an_error +]>; |