 +  return false;
 +}
 +
-+bool ARMSFIPlacement::PassStoreSandboxing(MachineBasicBlock &MBB) {
++bool ARMSFIPlacement::SandboxStoresInBlock(MachineBasicBlock &MBB) {
 +  /*
 +   * This is a simple local reverse-dataflow analysis to determine where CPSR
 +   * is live.  We cannot use the conditional store sequence anywhere that CPSR

+    }
+
+  private:
+    bool PlaceMBB(MachineBasicBlock &MBB);
+    bool PassStoreSandboxing(MachineBasicBlock &MBB);
+    bool PassBranchSandboxing(MachineBasicBlock &MBB);
+    void SandboxStore(MachineBasicBlock &MBB,
+                      MachineBasicBlock::iterator MBBI,
+                      MachineInstr &MI,

 
 static const MCAsmInfo *createMCAsmInfo(const Target &T, StringRef TT) {
   Triple TheTriple(TT);
@@ -128,6 +134,14 @@
   }
 
   PM.add(createARMConstantIslandPass());
+
+  // @LOCALMOD-START
+  if (FlagSfiStore)
+    PM.add(createARMSFIPlacementPass());
+  if (FlagSfiBranch)
+    PM.add(createARMSFIBranchPass());
+  // @LOCALMOD-END
+
   return true;
 }
 
@@ -190,4 +204,3 @@
   PM.add(createARMObjectCodeEmitterPass(*this, OCE));
   return false;
 }
