Add a helper method that will be used to support EXTRACT_SUBREG for selecting trunc...
authorOwen Anderson <resistor@mac.com>
Wed, 27 Aug 2008 22:30:02 +0000 (22:30 +0000)
committerOwen Anderson <resistor@mac.com>
Wed, 27 Aug 2008 22:30:02 +0000 (22:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55439 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/FastISel.h
lib/CodeGen/SelectionDAG/FastISel.cpp

index f28739448dfba3ec227ca94a844e3a2fcbb9196c..fcd970b84041c3a2d1d1ae8a526c5297ea44db8c 100644 (file)
@@ -193,6 +193,11 @@ protected:
                           const TargetRegisterClass *RC,
                           uint64_t Imm);
 
+  /// FastEmitInst_extractsubreg - Emit a MachineInstr for an extract_subreg
+  /// from a specified index of a superregister.
+  unsigned FastEmitInst_extractsubreg(const TargetRegisterClass *RC,
+                                      unsigned Op0, uint32_t Idx);
+
 private:
   unsigned getRegForValue(Value *V,
                           DenseMap<const Value*, unsigned> &ValueMap);
index 82eee56cd2b9d376b5b2ac22a3765b4968139fd4..2dd228249b3e5cb2389dbd5142f782a26a5ef63a 100644 (file)
@@ -586,3 +586,14 @@ unsigned FastISel::FastEmitInst_i(unsigned MachineInstOpcode,
   BuildMI(MBB, II, ResultReg).addImm(Imm);
   return ResultReg;
 }
+
+unsigned FastISel::FastEmitInst_extractsubreg(const TargetRegisterClass *RC,
+                                              unsigned Op0, uint32_t Idx) {
+  const TargetRegisterClass* SRC = *(RC->subregclasses_begin()+Idx-1);
+  
+  unsigned ResultReg = createResultReg(SRC);
+  const TargetInstrDesc &II = TII.get(TargetInstrInfo::EXTRACT_SUBREG);
+  
+  BuildMI(MBB, II, ResultReg).addReg(Op0);
+  return ResultReg;
+}