brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 9a7716e Raw
57 lines · plain
1// RUN: llvm-tblgen -I %p/../../../include -gen-global-isel-combiner \2// RUN:     -combiners=MyCombiner %s | FileCheck %s3 4// Checks that temporary registers defined in apply patterns5// are emitted with RegState::Define.6 7include "llvm/Target/Target.td"8include "llvm/Target/GlobalISel/Combine.td"9 10def MyTargetISA : InstrInfo;11def MyTarget : Target { let InstructionSet = MyTargetISA; }12 13def Test0 : GICombineRule<14  (defs root:$dst),15  (match (G_ADD $dst, $lhs, $rhs)),16  (apply (G_UDIVREM $tmp, $dst, $lhs, $rhs))17>;18 19def Test1 : GICombineRule<20  (defs root:$dst),21  (match (G_ADD $dst, $lhs, $rhs)),22  (apply (G_UDIVREM $dst, $tmp, $lhs, $rhs))23>;24 25def Test2 : GICombineRule<26  (defs root:$dst),27  (match (G_ADD $dst, $lhs, $rhs)),28  (apply (G_ADD $tmp, 0, $lhs),29         (G_ADD $dst, $tmp, $rhs))30>;31 32def MyCombiner: GICombiner<"GenMyCombiner", [33  Test0,34  Test1,35  Test2,36]>;37 38// CHECK:       // Combiner Rule #0: Test039// CHECK-NEXT:  GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::G_UDIVREM),40// CHECK-NEXT:  GIR_AddTempRegister, /*InsnID*/0, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define),41// CHECK-NEXT:  GIR_RootToRootCopy, /*OpIdx*/0, // dst42// CHECK-NEXT:  GIR_RootToRootCopy, /*OpIdx*/1, // lhs43// CHECK-NEXT:  GIR_RootToRootCopy, /*OpIdx*/2, // rhs44 45// CHECK:       // Combiner Rule #1: Test146// CHECK-NEXT:  GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::G_UDIVREM),47// CHECK-NEXT:  GIR_RootToRootCopy, /*OpIdx*/0, // dst48// CHECK-NEXT:  GIR_AddTempRegister, /*InsnID*/0, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define),49// CHECK-NEXT:  GIR_RootToRootCopy, /*OpIdx*/1, // lhs50// CHECK-NEXT:  GIR_RootToRootCopy, /*OpIdx*/2, // rhs51 52// CHECK:       // Combiner Rule #2: Test253// CHECK-NEXT:  GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(TargetOpcode::G_ADD),54// CHECK-NEXT:  GIR_AddTempRegister, /*InsnID*/0, /*TempRegID*/0, /*TempRegFlags*/GIMT_Encode2(RegState::Define),55// CHECK-NEXT:  GIR_AddSimpleTempRegister, /*InsnID*/0, /*TempRegID*/1,56// CHECK-NEXT:  GIR_RootToRootCopy, /*OpIdx*/1, // lhs57