Skip to content

Commit 7f9deca

Browse files
Initial commit
1 parent 7a8bff4 commit 7f9deca

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ static cl::opt<bool>
3838
EnableRsqrtOpt("nvptx-rsqrt-approx-opt", cl::init(true), cl::Hidden,
3939
cl::desc("Enable reciprocal sqrt optimization"));
4040

41+
static cl::opt<bool>
42+
EnableMADWide("nvptx-mad-wide-opt", cl::init(false), cl::Hidden,
43+
cl::desc("Enable MAD wide optimization"));
44+
45+
4146
/// createNVPTXISelDag - This pass converts a legalized DAG into a
4247
/// NVPTX-specific DAG, ready for instruction scheduling.
4348
FunctionPass *llvm::createNVPTXISelDag(NVPTXTargetMachine &TM,
@@ -84,6 +89,10 @@ bool NVPTXDAGToDAGISel::allowFMA() const {
8489

8590
bool NVPTXDAGToDAGISel::doRsqrtOpt() const { return EnableRsqrtOpt; }
8691

92+
bool NVPTXDAGToDAGISel::doMADWideOpt() const {
93+
return EnableMADWide;
94+
}
95+
8796
/// Select - Select instructions not customized! Used for
8897
/// expanded, promoted and normal instructions.
8998
void NVPTXDAGToDAGISel::Select(SDNode *N) {

llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class LLVM_LIBRARY_VISIBILITY NVPTXDAGToDAGISel : public SelectionDAGISel {
4545
bool useF32FTZ() const;
4646
bool allowFMA() const;
4747
bool doRsqrtOpt() const;
48+
bool doMADWideOpt() const;
4849

4950
NVPTXScopes Scopes{};
5051

llvm/lib/Target/NVPTX/NVPTXInstrInfo.td

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ def hasArchAccelFeatures : Predicate<"Subtarget->hasArchAccelFeatures()">;
114114
def doF32FTZ : Predicate<"useF32FTZ()">;
115115
def doNoF32FTZ : Predicate<"!useF32FTZ()">;
116116
def doRsqrtOpt : Predicate<"doRsqrtOpt()">;
117+
def doMADWideOpt : Predicate<"doMADWideOpt()">;
117118

118119
def hasHWROT32 : Predicate<"Subtarget->hasHWROT32()">;
119120
def noHWROT32 : Predicate<"!Subtarget->hasHWROT32()">;
@@ -901,6 +902,12 @@ let Predicates = [hasOptEnabled] in {
901902

902903
// Generating mad.wide causes a regression:
903904
// https://github.com/llvm/llvm-project/pull/150477#issuecomment-3191367837
905+
let Predicates = [doMADWideOpt] in {
906+
defm MAD_WIDE_U16 : MADInst<"wide.u16", umul_wide, I32RT, I16RT>;
907+
defm MAD_WIDE_S16 : MADInst<"wide.s16", smul_wide, I32RT, I16RT>;
908+
defm MAD_WIDE_U32 : MADInst<"wide.u32", umul_wide, I64RT, I32RT>;
909+
defm MAD_WIDE_S32 : MADInst<"wide.s32", smul_wide, I64RT, I32RT>;
910+
}
904911
}
905912

906913
//-----------------------------------

0 commit comments

Comments
 (0)