15ffd83dbSDimitry Andric//=- AMDGPUCombine.td - Define AMDGPU Combine Rules ----------*- tablegen -*-=// 25ffd83dbSDimitry Andric// 35ffd83dbSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45ffd83dbSDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 55ffd83dbSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65ffd83dbSDimitry Andric// 75ffd83dbSDimitry Andric//===----------------------------------------------------------------------===// 85ffd83dbSDimitry Andric 95ffd83dbSDimitry Andricinclude "llvm/Target/GlobalISel/Combine.td" 105ffd83dbSDimitry Andric 115ffd83dbSDimitry Andric// TODO: This really belongs after legalization after scalarization. 125ffd83dbSDimitry Andric// TODO: GICombineRules should accept subtarget predicates 135ffd83dbSDimitry Andric 14*e8d8bef9SDimitry Andricdef fmin_fmax_legacy_matchdata : GIDefMatchData<"AMDGPUPostLegalizerCombinerHelper::FMinFMaxLegacyInfo">; 155ffd83dbSDimitry Andric 165ffd83dbSDimitry Andricdef fcmp_select_to_fmin_fmax_legacy : GICombineRule< 175ffd83dbSDimitry Andric (defs root:$select, fmin_fmax_legacy_matchdata:$matchinfo), 185ffd83dbSDimitry Andric (match (wip_match_opcode G_SELECT):$select, 19*e8d8bef9SDimitry Andric [{ return PostLegalizerHelper.matchFMinFMaxLegacy(*${select}, ${matchinfo}); }]), 20*e8d8bef9SDimitry Andric (apply [{ PostLegalizerHelper.applySelectFCmpToFMinToFMaxLegacy(*${select}, ${matchinfo}); }])>; 215ffd83dbSDimitry Andric 225ffd83dbSDimitry Andric 235ffd83dbSDimitry Andricdef uchar_to_float : GICombineRule< 245ffd83dbSDimitry Andric (defs root:$itofp), 255ffd83dbSDimitry Andric (match (wip_match_opcode G_UITOFP, G_SITOFP):$itofp, 26*e8d8bef9SDimitry Andric [{ return PostLegalizerHelper.matchUCharToFloat(*${itofp}); }]), 27*e8d8bef9SDimitry Andric (apply [{ PostLegalizerHelper.applyUCharToFloat(*${itofp}); }])>; 285ffd83dbSDimitry Andric 29*e8d8bef9SDimitry Andricdef cvt_f32_ubyteN_matchdata : GIDefMatchData<"AMDGPUPostLegalizerCombinerHelper::CvtF32UByteMatchInfo">; 305ffd83dbSDimitry Andric 315ffd83dbSDimitry Andricdef cvt_f32_ubyteN : GICombineRule< 325ffd83dbSDimitry Andric (defs root:$cvt_f32_ubyteN, cvt_f32_ubyteN_matchdata:$matchinfo), 335ffd83dbSDimitry Andric (match (wip_match_opcode G_AMDGPU_CVT_F32_UBYTE0, 345ffd83dbSDimitry Andric G_AMDGPU_CVT_F32_UBYTE1, 355ffd83dbSDimitry Andric G_AMDGPU_CVT_F32_UBYTE2, 365ffd83dbSDimitry Andric G_AMDGPU_CVT_F32_UBYTE3):$cvt_f32_ubyteN, 37*e8d8bef9SDimitry Andric [{ return PostLegalizerHelper.matchCvtF32UByteN(*${cvt_f32_ubyteN}, ${matchinfo}); }]), 38*e8d8bef9SDimitry Andric (apply [{ PostLegalizerHelper.applyCvtF32UByteN(*${cvt_f32_ubyteN}, ${matchinfo}); }])>; 395ffd83dbSDimitry Andric 405ffd83dbSDimitry Andric// Combines which should only apply on SI/VI 415ffd83dbSDimitry Andricdef gfx6gfx7_combines : GICombineGroup<[fcmp_select_to_fmin_fmax_legacy]>; 425ffd83dbSDimitry Andric 435ffd83dbSDimitry Andric 445ffd83dbSDimitry Andricdef AMDGPUPreLegalizerCombinerHelper: GICombinerHelper< 45*e8d8bef9SDimitry Andric "AMDGPUGenPreLegalizerCombinerHelper", [all_combines]> { 465ffd83dbSDimitry Andric let DisableRuleOption = "amdgpuprelegalizercombiner-disable-rule"; 475ffd83dbSDimitry Andric} 485ffd83dbSDimitry Andric 495ffd83dbSDimitry Andricdef AMDGPUPostLegalizerCombinerHelper: GICombinerHelper< 505ffd83dbSDimitry Andric "AMDGPUGenPostLegalizerCombinerHelper", 51*e8d8bef9SDimitry Andric [all_combines, gfx6gfx7_combines, 525ffd83dbSDimitry Andric uchar_to_float, cvt_f32_ubyteN]> { 535ffd83dbSDimitry Andric let DisableRuleOption = "amdgpupostlegalizercombiner-disable-rule"; 54*e8d8bef9SDimitry Andric let StateClass = "AMDGPUPostLegalizerCombinerHelperState"; 55*e8d8bef9SDimitry Andric let AdditionalArguments = []; 565ffd83dbSDimitry Andric} 575ffd83dbSDimitry Andric 585ffd83dbSDimitry Andricdef AMDGPURegBankCombinerHelper : GICombinerHelper< 595ffd83dbSDimitry Andric "AMDGPUGenRegBankCombinerHelper", []> { 605ffd83dbSDimitry Andric let DisableRuleOption = "amdgpuregbankcombiner-disable-rule"; 615ffd83dbSDimitry Andric} 62