[PATCH] D31359: [GlobalISel]: Allow backends to custom legalize Intrinsics

Aditya Nandakumar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 30 14:09:39 PDT 2017


aditya_nandakumar updated this revision to Diff 93539.
aditya_nandakumar added a comment.

Updated this to just handle the lowering of the Intrinsics.
Handling the case of reporting failure on deleted instructions is being discussed here (and is orthogonal to this).
https://reviews.llvm.org/D31503


Repository:
  rL LLVM

https://reviews.llvm.org/D31359

Files:
  include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
  lib/CodeGen/GlobalISel/LegalizerHelper.cpp
  lib/CodeGen/GlobalISel/LegalizerInfo.cpp


Index: lib/CodeGen/GlobalISel/LegalizerInfo.cpp
===================================================================
--- lib/CodeGen/GlobalISel/LegalizerInfo.cpp
+++ lib/CodeGen/GlobalISel/LegalizerInfo.cpp
@@ -194,3 +194,8 @@
                                    MachineIRBuilder &MIRBuilder) const {
   return false;
 }
+bool LegalizerInfo::legalizeIntrinsic(MachineInstr &MI,
+                                   MachineRegisterInfo &MRI,
+                                   MachineIRBuilder &MIRBuilder) const {
+  return true;
+}
Index: lib/CodeGen/GlobalISel/LegalizerHelper.cpp
===================================================================
--- lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+++ lib/CodeGen/GlobalISel/LegalizerHelper.cpp
@@ -37,6 +37,10 @@
 
 LegalizerHelper::LegalizeResult
 LegalizerHelper::legalizeInstrStep(MachineInstr &MI) {
+  if (TargetOpcode::G_INTRINSIC == MI.getOpcode() ||
+      TargetOpcode::G_INTRINSIC_W_SIDE_EFFECTS == MI.getOpcode())
+    return LI.legalizeIntrinsic(MI, MRI, MIRBuilder) ? Legalized
+                                                     : UnableToLegalize;
   auto Action = LI.getAction(MI, MRI);
   switch (std::get<0>(Action)) {
   case LegalizerInfo::Legal:
Index: include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
===================================================================
--- include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
+++ include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
@@ -192,6 +192,9 @@
                               MachineRegisterInfo &MRI,
                               MachineIRBuilder &MIRBuilder) const;
 
+  virtual bool legalizeIntrinsic(MachineInstr &MI, MachineRegisterInfo &MRI,
+                                 MachineIRBuilder &MIRBuilder) const;
+
 private:
   static const int FirstOp = TargetOpcode::PRE_ISEL_GENERIC_OPCODE_START;
   static const int LastOp = TargetOpcode::PRE_ISEL_GENERIC_OPCODE_END;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D31359.93539.patch
Type: text/x-patch
Size: 1901 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170330/2f7103ee/attachment.bin>


More information about the llvm-commits mailing list