Skip to content

Commit 18a7c51

Browse files
committed
[NVPTX] Removed always-true predicates in NVPTX.
NVPTX stopped supporting GPUs older than sm_20 (Fermi) quite a while back. Removal of support of pre-Fermi GPUs made a lot of predicates in the NVPTX backend pointless as they can't ever be false any more. It's time to retire them. NFC intended. Differential Revision: https://reviews.llvm.org/D43843 llvm-svn: 326349
1 parent 39ba31f commit 18a7c51

File tree

5 files changed

+132
-216
lines changed

5 files changed

+132
-216
lines changed

llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -974,10 +974,6 @@ void NVPTXAsmPrinter::emitHeader(Module &M, raw_ostream &O,
974974
const NVPTXTargetMachine &NTM = static_cast<const NVPTXTargetMachine &>(TM);
975975
if (NTM.getDrvInterface() == NVPTX::NVCL)
976976
O << ", texmode_independent";
977-
else {
978-
if (!STI.hasDouble())
979-
O << ", map_f64_to_f32";
980-
}
981977

982978
if (MAI->doesSupportDebugInformation())
983979
O << ", debug";

llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -417,20 +417,13 @@ NVPTXTargetLowering::NVPTXTargetLowering(const NVPTXTargetMachine &TM,
417417
setOperationAction(ISD::BITREVERSE, MVT::i32, Legal);
418418
setOperationAction(ISD::BITREVERSE, MVT::i64, Legal);
419419

420-
if (STI.hasROT64()) {
421-
setOperationAction(ISD::ROTL, MVT::i64, Legal);
422-
setOperationAction(ISD::ROTR, MVT::i64, Legal);
423-
} else {
424-
setOperationAction(ISD::ROTL, MVT::i64, Expand);
425-
setOperationAction(ISD::ROTR, MVT::i64, Expand);
426-
}
427-
if (STI.hasROT32()) {
428-
setOperationAction(ISD::ROTL, MVT::i32, Legal);
429-
setOperationAction(ISD::ROTR, MVT::i32, Legal);
430-
} else {
431-
setOperationAction(ISD::ROTL, MVT::i32, Expand);
432-
setOperationAction(ISD::ROTR, MVT::i32, Expand);
433-
}
420+
// TODO: we may consider expanding ROTL/ROTR on older GPUs. Currently on GPUs
421+
// that don't have h/w rotation we lower them to multi-instruction assembly.
422+
// See ROT*_sw in NVPTXIntrInfo.td
423+
setOperationAction(ISD::ROTL, MVT::i64, Legal);
424+
setOperationAction(ISD::ROTR, MVT::i64, Legal);
425+
setOperationAction(ISD::ROTL, MVT::i32, Legal);
426+
setOperationAction(ISD::ROTR, MVT::i32, Legal);
434427

435428
setOperationAction(ISD::ROTL, MVT::i16, Expand);
436429
setOperationAction(ISD::ROTR, MVT::i16, Expand);

llvm/lib/Target/NVPTX/NVPTXInstrInfo.td

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -111,28 +111,14 @@ def VecElement : Operand<i32> {
111111
//===----------------------------------------------------------------------===//
112112

113113

114-
def hasAtomRedG32 : Predicate<"Subtarget->hasAtomRedG32()">;
115-
def hasAtomRedS32 : Predicate<"Subtarget->hasAtomRedS32()">;
116-
def hasAtomRedGen32 : Predicate<"Subtarget->hasAtomRedGen32()">;
117-
def useAtomRedG32forGen32 :
118-
Predicate<"!Subtarget->hasAtomRedGen32() && Subtarget->hasAtomRedG32()">;
119-
def hasBrkPt : Predicate<"Subtarget->hasBrkPt()">;
120-
def hasAtomRedG64 : Predicate<"Subtarget->hasAtomRedG64()">;
121-
def hasAtomRedS64 : Predicate<"Subtarget->hasAtomRedS64()">;
122-
def hasAtomRedGen64 : Predicate<"Subtarget->hasAtomRedGen64()">;
123-
def useAtomRedG64forGen64 :
124-
Predicate<"!Subtarget->hasAtomRedGen64() && Subtarget->hasAtomRedG64()">;
125-
def hasAtomAddF32 : Predicate<"Subtarget->hasAtomAddF32()">;
126114
def hasAtomAddF64 : Predicate<"Subtarget->hasAtomAddF64()">;
127115
def hasAtomScope : Predicate<"Subtarget->hasAtomScope()">;
128116
def hasAtomBitwise64 : Predicate<"Subtarget->hasAtomBitwise64()">;
129117
def hasAtomMinMax64 : Predicate<"Subtarget->hasAtomMinMax64()">;
130118
def hasVote : Predicate<"Subtarget->hasVote()">;
131119
def hasDouble : Predicate<"Subtarget->hasDouble()">;
132-
def reqPTX20 : Predicate<"Subtarget->reqPTX20()">;
133120
def hasLDG : Predicate<"Subtarget->hasLDG()">;
134121
def hasLDU : Predicate<"Subtarget->hasLDU()">;
135-
def hasGenericLdSt : Predicate<"Subtarget->hasGenericLdSt()">;
136122

137123
def doF32FTZ : Predicate<"useF32FTZ()">;
138124
def doNoF32FTZ : Predicate<"!useF32FTZ()">;
@@ -961,13 +947,12 @@ def FDIV321r_prec_ftz :
961947
(ins f32imm:$a, Float32Regs:$b),
962948
"rcp.rn.ftz.f32 \t$dst, $b;",
963949
[(set Float32Regs:$dst, (fdiv FloatConst1:$a, Float32Regs:$b))]>,
964-
Requires<[reqPTX20, doF32FTZ]>;
950+
Requires<[doF32FTZ]>;
965951
def FDIV321r_prec :
966952
NVPTXInst<(outs Float32Regs:$dst),
967953
(ins f32imm:$a, Float32Regs:$b),
968954
"rcp.rn.f32 \t$dst, $b;",
969-
[(set Float32Regs:$dst, (fdiv FloatConst1:$a, Float32Regs:$b))]>,
970-
Requires<[reqPTX20]>;
955+
[(set Float32Regs:$dst, (fdiv FloatConst1:$a, Float32Regs:$b))]>;
971956
//
972957
// F32 Accurate division
973958
//
@@ -976,25 +961,23 @@ def FDIV32rr_prec_ftz :
976961
(ins Float32Regs:$a, Float32Regs:$b),
977962
"div.rn.ftz.f32 \t$dst, $a, $b;",
978963
[(set Float32Regs:$dst, (fdiv Float32Regs:$a, Float32Regs:$b))]>,
979-
Requires<[doF32FTZ, reqPTX20]>;
964+
Requires<[doF32FTZ]>;
980965
def FDIV32ri_prec_ftz :
981966
NVPTXInst<(outs Float32Regs:$dst),
982967
(ins Float32Regs:$a, f32imm:$b),
983968
"div.rn.ftz.f32 \t$dst, $a, $b;",
984969
[(set Float32Regs:$dst, (fdiv Float32Regs:$a, fpimm:$b))]>,
985-
Requires<[doF32FTZ, reqPTX20]>;
970+
Requires<[doF32FTZ]>;
986971
def FDIV32rr_prec :
987972
NVPTXInst<(outs Float32Regs:$dst),
988973
(ins Float32Regs:$a, Float32Regs:$b),
989974
"div.rn.f32 \t$dst, $a, $b;",
990-
[(set Float32Regs:$dst, (fdiv Float32Regs:$a, Float32Regs:$b))]>,
991-
Requires<[reqPTX20]>;
975+
[(set Float32Regs:$dst, (fdiv Float32Regs:$a, Float32Regs:$b))]>;
992976
def FDIV32ri_prec :
993977
NVPTXInst<(outs Float32Regs:$dst),
994978
(ins Float32Regs:$a, f32imm:$b),
995979
"div.rn.f32 \t$dst, $a, $b;",
996-
[(set Float32Regs:$dst, (fdiv Float32Regs:$a, fpimm:$b))]>,
997-
Requires<[reqPTX20]>;
980+
[(set Float32Regs:$dst, (fdiv Float32Regs:$a, fpimm:$b))]>;
998981

999982
//
1000983
// FMA

0 commit comments

Comments
 (0)