diff options
author | Che-Liang Chiou <clchiou@gmail.com> | 2011-02-28 06:34:09 +0000 |
---|---|---|
committer | Che-Liang Chiou <clchiou@gmail.com> | 2011-02-28 06:34:09 +0000 |
commit | f71720231f6de9b2b7fe28edd179ae217a105329 (patch) | |
tree | 7ed3e644aac2d4be87b13f146f0467761e8e7600 /lib/Target/PTX/PTXISelLowering.cpp | |
parent | d8d1584c13c554349c235177b2b89cb5117347b2 (diff) |
Add preliminary support for .f32 in the PTX backend.
- Add appropriate TableGen patterns for fadd, fsub, fmul.
- Add .f32 as the PTX type for the LLVM float type.
- Allow parameters, return values, and global variable declarations
to accept the float type.
- Add appropriate test cases.
Patch by Justin Holewinski
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126636 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PTX/PTXISelLowering.cpp')
-rw-r--r-- | lib/Target/PTX/PTXISelLowering.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/lib/Target/PTX/PTXISelLowering.cpp b/lib/Target/PTX/PTXISelLowering.cpp index e6d44907ed..d30c9ecbe4 100644 --- a/lib/Target/PTX/PTXISelLowering.cpp +++ b/lib/Target/PTX/PTXISelLowering.cpp @@ -28,9 +28,12 @@ PTXTargetLowering::PTXTargetLowering(TargetMachine &TM) // Set up the register classes. addRegisterClass(MVT::i1, PTX::PredsRegisterClass); addRegisterClass(MVT::i32, PTX::RRegs32RegisterClass); - + addRegisterClass(MVT::f32, PTX::RRegf32RegisterClass); + setOperationAction(ISD::EXCEPTIONADDR, MVT::i32, Expand); + setOperationAction(ISD::ConstantFP, MVT::f32, Legal); + // Customize translation of memory addresses setOperationAction(ISD::GlobalAddress, MVT::i32, Custom); @@ -87,7 +90,8 @@ struct argmap_entry { bool operator==(MVT::SimpleValueType _VT) const { return VT == _VT; } } argmap[] = { argmap_entry(MVT::i1, PTX::PredsRegisterClass), - argmap_entry(MVT::i32, PTX::RRegs32RegisterClass) + argmap_entry(MVT::i32, PTX::RRegs32RegisterClass), + argmap_entry(MVT::f32, PTX::RRegf32RegisterClass) }; } // end anonymous namespace @@ -185,10 +189,18 @@ SDValue PTXTargetLowering:: if (Outs.size() == 0) return DAG.getNode(PTXISD::RET, dl, MVT::Other, Chain); - assert(Outs[0].VT == MVT::i32 && "Can return only basic types"); - SDValue Flag; - unsigned reg = PTX::R0; + unsigned reg; + + if (Outs[0].VT == MVT::i32) { + reg = PTX::R0; + } + else if (Outs[0].VT == MVT::f32) { + reg = PTX::F0; + } + else { + assert(false && "Can return only basic types"); + } MachineFunction &MF = DAG.getMachineFunction(); PTXMachineFunctionInfo *MFI = MF.getInfo<PTXMachineFunctionInfo>(); |