[llvm] r284604 - TMP

Tim Northover via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 19 08:55:09 PDT 2016


Author: tnorthover
Date: Wed Oct 19 10:55:09 2016
New Revision: 284604

URL: http://llvm.org/viewvc/llvm-project?rev=284604&view=rev
Log:
TMP

Modified:
    llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h
    llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp

Modified: llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h?rev=284604&r1=284603&r2=284604&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h (original)
+++ llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h Wed Oct 19 10:55:09 2016
@@ -120,6 +120,8 @@ private:
 
   bool translateMemcpy(const CallInst &CI);
 
+  void getStackGuard(unsigned DstReg);
+
   bool translateKnownIntrinsic(const CallInst &CI, Intrinsic::ID ID);
 
   /// Translate call instruction.

Modified: llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp?rev=284604&r1=284603&r2=284604&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp (original)
+++ llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp Wed Oct 19 10:55:09 2016
@@ -382,6 +382,26 @@ bool IRTranslator::translateMemcpy(const
                         CallLowering::ArgInfo(0, CI.getType()), Args);
 }
 
+void IRTranslator::getStackGuard(unsigned DstReg) {
+  auto MIB = MIRBuilder.buildInstr(TargetOpcode::LOAD_STACK_GUARD);
+  MIB.addDef(DstReg);
+
+  auto &MF = MIRBuilder.getMF();
+  auto &TLI = *MF.getSubtarget().getTargetLowering();
+  Value *Global = TLI.getSDagStackGuard(*MF.getFunction()->getParent());
+  if (!Global)
+    return;
+
+  MachinePointerInfo MPInfo(Global);
+  MachineInstr::mmo_iterator MemRefs = MF.allocateMemRefsArray(1);
+  auto Flags = MachineMemOperand::MOLoad | MachineMemOperand::MOInvariant |
+               MachineMemOperand::MODereferenceable;
+  *MemRefs =
+      MF.getMachineMemOperand(MPInfo, Flags, DL->getPointerSizeInBits() / 8,
+                              DL->getPointerABIAlignment() / 8);
+  MIB.setMemRefs(MemRefs, MemRefs + 1);
+}
+
 bool IRTranslator::translateKnownIntrinsic(const CallInst &CI,
                                            Intrinsic::ID ID) {
   unsigned Op = 0;
@@ -402,6 +422,19 @@ bool IRTranslator::translateKnownIntrins
     MIRBuilder.buildConstant(getOrCreateVReg(CI), Min->isZero() ? -1ULL : 0);
     return true;
   }
+  case Intrinsic::stackguard:
+    getStackGuard(getOrCreateVReg(CI));
+    return true;
+  case Intrinsic::stackprotector: {
+    // LLT PtrTy{*CI.getArgOperand(0).getType(), *DL};
+    // unsigned GuardVal = MRI->createGenericVirtualRegister(PtrTy);
+    // getStackGuard(GuardVal);
+
+    // AllocaInst *Slot = cast<AllocaInst>(I.getArgOperand(1));
+    // unsigned StackSlot = MIRBuilder.buildFrameIndex(FrameReg, FI);
+    // MIRBuilder.buildStore(GuardVal, StackSlot);
+    return true;
+  }
   }
 
   LLT Ty{*CI.getOperand(0)->getType(), *DL};




More information about the llvm-commits mailing list