[PATCH] D10913: FastISel support for instructions that load floating point immediate values.

Dan Gohman dan433584 at gmail.com
Thu Jul 2 20:43:48 PDT 2015


sunfish created this revision.
sunfish added a subscriber: llvm-commits-list.

This patch adds FastISel support for instructions which have a floating point immediate operand and no other input operands, and a register output.

http://reviews.llvm.org/D10913

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

Index: lib/CodeGen/SelectionDAG/FastISel.cpp
===================================================================
--- lib/CodeGen/SelectionDAG/FastISel.cpp
+++ lib/CodeGen/SelectionDAG/FastISel.cpp
@@ -1864,6 +1864,25 @@
   return ResultReg;
 }
 
+unsigned FastISel::fastEmitInst_f(unsigned MachineInstOpcode,
+                                  const TargetRegisterClass *RC,
+                                  const ConstantFP *FPImm) {
+  const MCInstrDesc &II = TII.get(MachineInstOpcode);
+
+  unsigned ResultReg = createResultReg(RC);
+
+  if (II.getNumDefs() >= 1)
+    BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, II, ResultReg)
+        .addFPImm(FPImm);
+  else {
+    BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, II)
+        .addFPImm(FPImm);
+    BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc,
+            TII.get(TargetOpcode::COPY), ResultReg).addReg(II.ImplicitDefs[0]);
+  }
+  return ResultReg;
+}
+
 unsigned FastISel::fastEmitInst_rf(unsigned MachineInstOpcode,
                                    const TargetRegisterClass *RC, unsigned Op0,
                                    bool Op0IsKill, const ConstantFP *FPImm) {
Index: include/llvm/CodeGen/FastISel.h
===================================================================
--- include/llvm/CodeGen/FastISel.h
+++ include/llvm/CodeGen/FastISel.h
@@ -419,6 +419,12 @@
                             const TargetRegisterClass *RC, unsigned Op0,
                             bool Op0IsKill, uint64_t Imm1, uint64_t Imm2);
 
+  /// \brief Emit a MachineInstr with a floating-point immediate and a result
+  /// register in the given register class.
+  unsigned fastEmitInst_f(unsigned MachineInstOpcode,
+                          const TargetRegisterClass *RC,
+                          const ConstantFP *FPImm);
+
   /// \brief Emit a MachineInstr with two register operands and a result
   /// register in the given register class.
   unsigned fastEmitInst_rf(unsigned MachineInstOpcode,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D10913.28987.patch
Type: text/x-patch
Size: 1973 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150703/d2e8a5f9/attachment.bin>


More information about the llvm-commits mailing list