brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 2778452 Raw
68 lines · plain
1// RUN: llvm-tblgen -gen-global-isel -optimize-match-table=false -I %p/../../../include -I %p/../Common %s | FileCheck %s2 3include "llvm/Target/Target.td"4include "GlobalISelEmitterCommon.td"5 6def ADDI : I<(outs GPR32:$dst), (ins GPR32:$src1, i32imm:$src2), []>;7 8def to_tframeindex : SDNodeXForm<frameindex, [{}]>;9 10def : GICustomOperandRenderer<"renderFrameIndex">,11      GISDNodeXFormEquiv<to_tframeindex>;12 13def : Pat<(frameindex:$fi), (ADDI (to_tframeindex $fi), 0)>;14 15def : Pat<(ptradd frameindex:$fi, (i32 imm:$offset)),16          (ADDI (to_tframeindex $fi), imm:$offset)>;17 18// CHECK-LABEL: GIM_Try, /*On fail goto*//*Label 0*/ GIMT_Encode4(74), // Rule ID 1 //19// CHECK-NEXT: GIM_CheckNumOperands, /*MI*/0, /*Expected*/3,20// CHECK-NEXT: GIM_CheckOpcode, /*MI*/0, GIMT_Encode2(TargetOpcode::G_PTR_ADD),21// CHECK-NEXT: // MIs[0] DstI[dst]22// CHECK-NEXT: GIM_CheckPointerToAny, /*MI*/0, /*Op*/0, /*SizeInBits*/32,23// CHECK-NEXT: GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(MyTarget::GPR32RegClassID),24// CHECK-NEXT: // MIs[0] fi25// CHECK-NEXT: GIM_CheckPointerToAny, /*MI*/0, /*Op*/1, /*SizeInBits*/32,26// CHECK-NEXT: GIM_RecordInsn, /*DefineMI*/1, /*MI*/0, /*OpIdx*/1, // MIs[1]27// CHECK-NEXT: GIM_CheckNumOperands, /*MI*/1, /*Expected*/2,28// CHECK-NEXT: GIM_CheckOpcode, /*MI*/1, GIMT_Encode2(TargetOpcode::G_FRAME_INDEX),29// CHECK-NEXT: // MIs[1] Operand 030// CHECK-NEXT: GIM_CheckPointerToAny, /*MI*/1, /*Op*/0, /*SizeInBits*/32,31// CHECK-NEXT: // MIs[1] Operand 132// CHECK-NEXT: // No operand predicates33// CHECK-NEXT: // MIs[0] offset34// CHECK-NEXT: GIM_RootCheckType, /*Op*/2, /*Type*/GILLT_s32,35// CHECK-NEXT: GIM_RecordInsn, /*DefineMI*/2, /*MI*/0, /*OpIdx*/2, // MIs[2]36// CHECK-NEXT: GIM_CheckNumOperands, /*MI*/2, /*Expected*/2,37// CHECK-NEXT: GIM_CheckOpcode, /*MI*/2, GIMT_Encode2(TargetOpcode::G_CONSTANT),38// CHECK-NEXT: // MIs[2] Operand 039// CHECK-NEXT: GIM_CheckType, /*MI*/2, /*Op*/0, /*Type*/GILLT_s32,40// CHECK-NEXT: // MIs[2] Operand 141// CHECK-NEXT: // No operand predicates42// CHECK-NEXT: GIM_CheckIsSafeToFold, /*NumInsns*/2,43// CHECK-NEXT: // (ptradd:{ *:[i32] } (frameindex:{ *:[i32] }):$fi, (imm:{ *:[i32] }):$offset)  =>  (ADDI:{ *:[i32] } (to_tframeindex:{ *:[i32] } ?:{ *:[i32] }:$fi), (imm:{ *:[i32] }):$offset)44// CHECK-NEXT: GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(MyTarget::ADDI),45// CHECK-NEXT: GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]46// CHECK-NEXT: GIR_CustomRenderer, /*InsnID*/0, /*OldInsnID*/1, /*Renderer*/GIMT_Encode2(GICR_renderFrameIndex), // fi47// CHECK-NEXT: GIR_CopyConstantAsSImm, /*NewInsnID*/0, /*OldInsnID*/2, // offset48// CHECK-NEXT: GIR_RootConstrainSelectedInstOperands,49// CHECK-NEXT: // GIR_Coverage, 1,50// CHECK-NEXT: GIR_EraseRootFromParent_Done,51 52// CHECK-LABEL: GIM_Try, /*On fail goto*//*Label 1*/ GIMT_Encode4(109), // Rule ID 0 //53// CHECK-NEXT: GIM_CheckNumOperands, /*MI*/0, /*Expected*/2,54// CHECK-NEXT: GIM_CheckOpcode, /*MI*/0, GIMT_Encode2(TargetOpcode::G_FRAME_INDEX),55// CHECK-NEXT: // MIs[0] DstI[dst]56// CHECK-NEXT: GIM_CheckPointerToAny, /*MI*/0, /*Op*/0, /*SizeInBits*/32,57// CHECK-NEXT: GIM_RootCheckRegBankForClass, /*Op*/0, /*RC*/GIMT_Encode2(MyTarget::GPR32RegClassID),58// CHECK-NEXT: // MIs[0] Operand 159// CHECK-NEXT: // No operand predicates60// CHECK-NEXT: // (frameindex:{ *:[i32] }):$fi  =>  (ADDI:{ *:[i32] } (to_tframeindex:{ *:[i32] } ?:{ *:[i32] }:$fi), 0:{ *:[i32] })61// CHECK-NEXT: GIR_BuildRootMI, /*Opcode*/GIMT_Encode2(MyTarget::ADDI),62// CHECK-NEXT: GIR_RootToRootCopy, /*OpIdx*/0, // DstI[dst]63// CHECK-NEXT: GIR_CustomRenderer, /*InsnID*/0, /*OldInsnID*/0, /*Renderer*/GIMT_Encode2(GICR_renderFrameIndex), // fi64// CHECK-NEXT: GIR_AddImm8, /*InsnID*/0, /*Imm*/0,65// CHECK-NEXT: GIR_RootConstrainSelectedInstOperands,66// CHECK-NEXT: // GIR_Coverage, 0,67// CHECK-NEXT: GIR_EraseRootFromParent_Done,68