diff options
author | Justin Holewinski <justin.holewinski@gmail.com> | 2011-05-18 15:42:23 +0000 |
---|---|---|
committer | Justin Holewinski <justin.holewinski@gmail.com> | 2011-05-18 15:42:23 +0000 |
commit | bbdcd17d4415b120bc93c88129629b120135a9bf (patch) | |
tree | f876f6217cb2cc711576389fef0aa68d696f241c /llvm/lib | |
parent | 3d9407f4eb36a4fb4986686e636e896d261e97bf (diff) | |
download | bcm5719-llvm-bbdcd17d4415b120bc93c88129629b120135a9bf.tar.gz bcm5719-llvm-bbdcd17d4415b120bc93c88129629b120135a9bf.zip |
PTX: add flag to disable mad/fma selection
Patch by Dan Bailey
llvm-svn: 131537
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/PTX/PTX.td | 3 | ||||
-rw-r--r-- | llvm/lib/Target/PTX/PTXInstrInfo.td | 10 | ||||
-rw-r--r-- | llvm/lib/Target/PTX/PTXSubtarget.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/Target/PTX/PTXSubtarget.h | 7 |
4 files changed, 19 insertions, 4 deletions
diff --git a/llvm/lib/Target/PTX/PTX.td b/llvm/lib/Target/PTX/PTX.td index cf10f0c2f59..231866a0895 100644 --- a/llvm/lib/Target/PTX/PTX.td +++ b/llvm/lib/Target/PTX/PTX.td @@ -24,6 +24,9 @@ include "llvm/Target/Target.td" def FeatureDouble : SubtargetFeature<"double", "SupportsDouble", "true", "Do not demote .f64 to .f32">; +def FeatureNoFMA : SubtargetFeature<"no-fma","SupportsFMA", "false", + "Disable Fused-Multiply Add">; + //===- PTX Version --------------------------------------------------------===// def FeaturePTX20 : SubtargetFeature<"ptx20", "PTXVersion", "PTX_VERSION_2_0", diff --git a/llvm/lib/Target/PTX/PTXInstrInfo.td b/llvm/lib/Target/PTX/PTXInstrInfo.td index e90d4fffb0d..d5d08bed224 100644 --- a/llvm/lib/Target/PTX/PTXInstrInfo.td +++ b/llvm/lib/Target/PTX/PTXInstrInfo.td @@ -39,6 +39,10 @@ def DoesNotSupportPTX22 : Predicate<"!getSubtarget().supportsPTX22()">; def SupportsPTX23 : Predicate<"getSubtarget().supportsPTX23()">; def DoesNotSupportPTX23 : Predicate<"!getSubtarget().supportsPTX23()">; +// Fused-Multiply Add +def SupportsFMA : Predicate<"getSubtarget().supportsFMA()">; +def DoesNotSupportFMA : Predicate<"!getSubtarget().supportsFMA()">; + //===----------------------------------------------------------------------===// // Instruction Pattern Stuff //===----------------------------------------------------------------------===// @@ -629,8 +633,8 @@ def FDIVri64SM10 : InstPTX<(outs RRegf64:$d), // In the short term, mad is supported on all PTX versions and we use a // default rounding mode no matter what shader model or PTX version. // TODO: Allow the rounding mode to be selectable through llc. -defm FMADSM13 : PTX_FLOAT_4OP<"mad.rn", fmul, fadd>, Requires<[SupportsSM13]>; -defm FMAD : PTX_FLOAT_4OP<"mad", fmul, fadd>, Requires<[DoesNotSupportSM13]>; +defm FMADSM13 : PTX_FLOAT_4OP<"mad.rn", fmul, fadd>, Requires<[SupportsSM13, SupportsFMA]>; +defm FMAD : PTX_FLOAT_4OP<"mad", fmul, fadd>, Requires<[DoesNotSupportSM13, SupportsFMA]>; ///===- Floating-Point Intrinsic Instructions -----------------------------===// @@ -667,6 +671,8 @@ def FCOS64 : InstPTX<(outs RRegf64:$d), ///===- Comparison and Selection Instructions -----------------------------===// +// .setp + // Compare u16 defm SETPEQu16 : PTX_SETP_I<RRegu16, "u16", i16imm, SETEQ, "eq">; diff --git a/llvm/lib/Target/PTX/PTXSubtarget.cpp b/llvm/lib/Target/PTX/PTXSubtarget.cpp index e7542908e24..e8a1dfecd00 100644 --- a/llvm/lib/Target/PTX/PTXSubtarget.cpp +++ b/llvm/lib/Target/PTX/PTXSubtarget.cpp @@ -21,7 +21,8 @@ PTXSubtarget::PTXSubtarget(const std::string &TT, const std::string &FS, : PTXShaderModel(PTX_SM_1_0), PTXVersion(PTX_VERSION_2_0), SupportsDouble(false), - Is64Bit(is64Bit) { + SupportsFMA(true), + Is64Bit(is64Bit) { std::string TARGET = "generic"; ParseSubtargetFeatures(FS, TARGET); } diff --git a/llvm/lib/Target/PTX/PTXSubtarget.h b/llvm/lib/Target/PTX/PTXSubtarget.h index eebb284f375..59fa6965bba 100644 --- a/llvm/lib/Target/PTX/PTXSubtarget.h +++ b/llvm/lib/Target/PTX/PTXSubtarget.h @@ -49,7 +49,10 @@ namespace llvm { // The native .f64 type is supported on the hardware. bool SupportsDouble; - + + // Support the fused-multiply add (FMA) and multiply-add (MAD) instructions + bool SupportsFMA; + // Use .u64 instead of .u32 for addresses. bool Is64Bit; @@ -64,6 +67,8 @@ namespace llvm { bool is64Bit() const { return Is64Bit; } + bool supportsFMA() const { return SupportsFMA; } + bool supportsSM13() const { return PTXShaderModel >= PTX_SM_1_3; } bool supportsSM20() const { return PTXShaderModel >= PTX_SM_2_0; } |