Skip to content

Commit eb6f6d8

Browse files
committed
Update according to comments
Signed-off-by: Alan Li <[email protected]>
1 parent 9849ed9 commit eb6f6d8

File tree

3 files changed

+19
-23
lines changed

3 files changed

+19
-23
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2520,6 +2520,8 @@ def HasXF32Insts : Predicate<"Subtarget->hasXF32Insts()">,
25202520
def HasAshrPkInsts : Predicate<"Subtarget->hasAshrPkInsts()">,
25212521
AssemblerPredicate<(all_of FeatureAshrPkInsts)>;
25222522

2523+
def HasLShlAddB64 : Predicate<"Subtarget->hasLshlAddB64()">;
2524+
25232525
// Include AMDGPU TD files
25242526
include "SISchedule.td"
25252527
include "GCNProcessors.td"

llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "llvm/ADT/ScopeExit.h"
2727
#include "llvm/CodeGen/GlobalISel/GenericMachineInstrs.h"
2828
#include "llvm/CodeGen/GlobalISel/LegalizerHelper.h"
29+
#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
2930
#include "llvm/CodeGen/GlobalISel/MIPatternMatch.h"
3031
#include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
3132
#include "llvm/CodeGen/GlobalISel/Utils.h"
@@ -743,22 +744,16 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST_,
743744
.minScalar(0, S16)
744745
.widenScalarToNextMultipleOf(0, 32)
745746
.maxScalar(0, S32);
746-
if (ST.hasLshlAddB64())
747-
getActionDefinitionsBuilder(G_ADD)
748-
.legalFor({S64, S32, S16, V2S16})
749-
.clampMaxNumElementsStrict(0, S16, 2)
750-
.scalarize(0)
751-
.minScalar(0, S16)
752-
.widenScalarToNextMultipleOf(0, 32)
753-
.maxScalar(0, S32);
754-
else
755-
getActionDefinitionsBuilder(G_ADD)
756-
.legalFor({S32, S16, V2S16})
757-
.clampMaxNumElementsStrict(0, S16, 2)
758-
.scalarize(0)
759-
.minScalar(0, S16)
760-
.widenScalarToNextMultipleOf(0, 32)
761-
.maxScalar(0, S32);
747+
748+
getActionDefinitionsBuilder(G_ADD)
749+
.legalFor(ST.hasLshlAddB64()
750+
? std::initializer_list<LLT>{S32, S16, V2S16, S64}
751+
: std::initializer_list<LLT>{S32, S16, V2S16})
752+
.clampMaxNumElementsStrict(0, S16, 2)
753+
.scalarize(0)
754+
.minScalar(0, S16)
755+
.widenScalarToNextMultipleOf(0, 32)
756+
.maxScalar(0, S32);
762757
}
763758

764759
if (ST.hasScalarSMulU64()) {

llvm/lib/Target/AMDGPU/VOP3Instructions.td

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -762,7 +762,7 @@ def : ThreeOp_i32_Pats<and, or, V_AND_OR_B32_e64>;
762762
def : ThreeOp_i32_Pats<or, or, V_OR3_B32_e64>;
763763
def : ThreeOp_i32_Pats<xor, add, V_XAD_U32_e64>;
764764

765-
let SubtargetPredicate = isGFX940Plus in {
765+
let SubtargetPredicate = HasLShlAddB64 in {
766766
// TODO: Canonicalize these in the target specific CombinerHelper?
767767
def : GCNPat<
768768
(ptradd (shl i64:$src0, i32:$shift), i64:$src1),
@@ -778,17 +778,16 @@ def : GCNPat<
778778
(ptradd i64:$src0, i64:$src1),
779779
(V_LSHL_ADD_U64_e64 VSrc_b64:$src0, (i32 0), VSrc_b64:$src1)
780780
>;
781-
}
782781

783-
def : GCNPat<
784-
(DivergentBinFrag<mul> i32:$src0, IsPow2Plus1:$src1),
785-
(V_LSHL_ADD_U32_e64 i32:$src0, (i32 (Log2_32 imm:$src1)), i32:$src0)>;
786-
787-
let SubtargetPredicate = isGFX940Plus in
788782
def : GCNPat<
789783
(ThreeOpFrag<shl_0_to_4, add> i64:$src0, i32:$src1, i64:$src2),
790784
(V_LSHL_ADD_U64_e64 VSrc_b64:$src0, VSrc_b32:$src1, VSrc_b64:$src2)
791785
>;
786+
} // End SubtargetPredicate = HasLShlAddB64
787+
788+
def : GCNPat<
789+
(DivergentBinFrag<mul> i32:$src0, IsPow2Plus1:$src1),
790+
(V_LSHL_ADD_U32_e64 i32:$src0, (i32 (Log2_32 imm:$src1)), i32:$src0)>;
792791

793792
def : VOPBinOpClampPat<saddsat, V_ADD_I32_e64, i32>;
794793
def : VOPBinOpClampPat<ssubsat, V_SUB_I32_e64, i32>;

0 commit comments

Comments
 (0)