diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index 91095194123679128c90200bc02b55df484ccb0f..36400db33e41a001380ccfdd068f31a89e25727f 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -4095,28 +4095,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
   case llvm::Triple::thumbeb:
     // Use the effective triple, which takes into account the deployment target.
     AddARMTargetArgs(Triple, Args, CmdArgs, KernelOrKext);
-
-    // disable additional optimizations to make CFRGs work properly
-    // TODO: This is a hack ;)
-    // Disable nested loop separation for loops with multiple backedges
-    // during Natural Loop Canonicalization (-simplifycfg)
-    // This eases manual annotation of loop bounds as the appearance of
-    // additional nested loops is prohibited by this flag.
-    // When we manage to get rid of loop bound annotations by translating
-    // them to markers and constraints, we can enable this transformation
-    // again.
-    // @see patmos::PatmosBaseTool::ConstructOptJob
-    CmdArgs.push_back("-mllvm");
-    CmdArgs.push_back("-disable-separate-nested-loops");
-
-    // Perform most llvm-opt optimizations at link time (but prepare bitcode with
-    // baseline optimizations)
-    if (Arg *A = Args.getLastArg(options::OPT_O_Group))
-      if (!A->getOption().matches(options::OPT_O0)) {
-        CmdArgs.push_back("-disable-llvm-optzns");
-        CmdArgs.push_back("-enable-llvm-baseline-optzns");
-      }
-
     break;
 
   case llvm::Triple::aarch64: