diff --git a/bolt/include/bolt/Core/BinaryFunction.h b/bolt/include/bolt/Core/BinaryFunction.h
--- a/bolt/include/bolt/Core/BinaryFunction.h
+++ b/bolt/include/bolt/Core/BinaryFunction.h
@@ -1831,6 +1831,11 @@
     return ParentFragments.count(Parent);
   }
 
+  /// Return the child fragment form parent function
+  SmallPtrSet<BinaryFunction *, 1> getFragments() {
+    return Fragments;
+  }
+
   /// Set the profile data for the number of times the function was called.
   BinaryFunction &setExecutionCount(uint64_t Count) {
     ExecutionCount = Count;
diff --git a/bolt/lib/Passes/RegReAssign.cpp b/bolt/lib/Passes/RegReAssign.cpp
--- a/bolt/lib/Passes/RegReAssign.cpp
+++ b/bolt/lib/Passes/RegReAssign.cpp
@@ -308,6 +308,10 @@
                       << " with " << BC.MRI->getName(ExtReg) << "\n\n");
     swap(Function, ClassicReg, ExtReg);
     FuncsChanged.insert(&Function);
+    for (BinaryFunction *childF : Function.getFragments()) {
+      swap(*childF, RBX, Candidate);
+      FuncsChanged.insert(childF);
+    }
     ++Begin;
     if (Begin == End)
       break;
@@ -349,6 +353,10 @@
   (void)BC;
   swap(Function, RBX, Candidate);
   FuncsChanged.insert(&Function);
+  for (BinaryFunction *childF : Function.getFragments()) {
+    swap(*childF, RBX, Candidate);
+    FuncsChanged.insert(childF);
+  }
   return true;
 }
 
@@ -408,7 +416,7 @@
   for (auto &I : BC.getBinaryFunctions()) {
     BinaryFunction &Function = I.second;
 
-    if (!Function.isSimple() || Function.isIgnored())
+    if (!Function.isSimple() || Function.isIgnored() || Function.isFragment())
       continue;
 
     LLVM_DEBUG(dbgs() << "====================================\n");