diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2014-02-24 21:01:28 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2014-02-24 21:01:28 +0000 |
| commit | 41e2f2bacdd57e916909e52f34b06faaad4647f5 (patch) | |
| tree | fd4bc6c8392d05202256b4fe465cd949891824cc /llvm/lib/Target/R600/SIISelLowering.cpp | |
| parent | d0ce2bd8e484b5927824ff58dca7da3d896151dc (diff) | |
| download | bcm5719-llvm-41e2f2bacdd57e916909e52f34b06faaad4647f5.tar.gz bcm5719-llvm-41e2f2bacdd57e916909e52f34b06faaad4647f5.zip | |
R600/SI - Add new CI arithmetic instructions.
Does not yet include larger part required
to match v_mad_i64_i32 / v_mad_u64_u32.
llvm-svn: 202077
Diffstat (limited to 'llvm/lib/Target/R600/SIISelLowering.cpp')
| -rw-r--r-- | llvm/lib/Target/R600/SIISelLowering.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/llvm/lib/Target/R600/SIISelLowering.cpp b/llvm/lib/Target/R600/SIISelLowering.cpp index 1a49ccb2268..004957ce189 100644 --- a/llvm/lib/Target/R600/SIISelLowering.cpp +++ b/llvm/lib/Target/R600/SIISelLowering.cpp @@ -14,6 +14,7 @@ #include "SIISelLowering.h" #include "AMDGPU.h" +#include "AMDGPUSubtarget.h" #include "AMDILIntrinsicInfo.h" #include "SIInstrInfo.h" #include "SIMachineFunctionInfo.h" @@ -30,7 +31,6 @@ using namespace llvm; SITargetLowering::SITargetLowering(TargetMachine &TM) : AMDGPUTargetLowering(TM) { - addRegisterClass(MVT::i1, &AMDGPU::SReg_64RegClass); addRegisterClass(MVT::i64, &AMDGPU::VSrc_64RegClass); @@ -175,8 +175,20 @@ SITargetLowering::SITargetLowering(TargetMachine &TM) : } } - setTargetDAGCombine(ISD::SELECT_CC); + for (int I = MVT::v1f64; I <= MVT::v8f64; ++I) { + MVT::SimpleValueType VT = static_cast<MVT::SimpleValueType>(I); + setOperationAction(ISD::FTRUNC, MVT::f64, Expand); + setOperationAction(ISD::FCEIL, MVT::f64, Expand); + setOperationAction(ISD::FFLOOR, MVT::f64, Expand); + } + if (Subtarget->getGeneration() >= AMDGPUSubtarget::SEA_ISLANDS) { + setOperationAction(ISD::FTRUNC, MVT::f64, Legal); + setOperationAction(ISD::FCEIL, MVT::f64, Legal); + setOperationAction(ISD::FFLOOR, MVT::f64, Legal); + } + + setTargetDAGCombine(ISD::SELECT_CC); setTargetDAGCombine(ISD::SETCC); setSchedulingPreference(Sched::RegPressure); |

