 +
 +    O <<
 +      "\t.macro sfi_store_preamble reg cond\n"
-+      "\t.if \\reg != sp\n"
 +      "\tsfi_nop_if_at_bundle_end\n"
 +      "\tsfi_data_mask \\reg, \\cond\n"
-+      "\t.endif\n"
++      "\t.endm\n"
++      "\n\n";
++
++    O <<
++      "\t.macro sfi_cstore_preamble reg\n"
++      "\tsfi_nop_if_at_bundle_end\n"
++      "\tsfi_data_tst \\reg\n"
 +      "\t.endm\n"
 +      "\n\n";
 +  } else {
 +    O <<
-+    "\t.macro sfi_store_preamble reg cond\n"
-+    "\t.endm\n"
-+    "\n\n";
++      "\t.macro sfi_store_preamble reg cond\n"
++      "\t.endm\n"
++      "\n\n";
++
++    O <<
++      "\t.macro sfi_cstore_preamble reg cond\n"
++      "\t.endm\n"
++      "\n\n";
 +  }
 +
 +  const char* kPreds[] = {

                   [(ARMcall_nolink GPR:$func)]>,
            Requires<[IsARM, IsNotDarwin]> {
     let Inst{7-4}   = 0b0001;
@@ -717,19 +748,28 @@
           D16, D17, D18, D19, D20, D21, D22, D23,
           D24, D25, D26, D27, D28, D29, D30, D31, CPSR, FPSCR] in {
   def BLr9  : ABXI<0b1011, (outs), (ins i32imm:$func, variable_ops),

+#include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/CodeGen/MachineInstrBuilder.h"
+
+#include <set>
+#include <stdio.h>
+
+using namespace llvm;
