diff --git a/driver/CompileGo.cpp b/driver/CompileGo.cpp
index 23fc08c..a9d30a5 100644
--- a/driver/CompileGo.cpp
+++ b/driver/CompileGo.cpp
@@ -69,6 +69,7 @@
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Transforms/IPO.h"
 #include "llvm/Transforms/IPO/PassManagerBuilder.h"
+#include "llvm/Transforms/Utils.h"
 
 #include <sstream>
 
@@ -108,6 +109,7 @@
   std::unique_ptr<TargetLibraryInfoImpl> tlii_;
   std::string targetCpuAttr_;
   std::string targetFeaturesAttr_;
+  std::string sampleProfileFile_;
   bool enable_gc_;
 
   void createPasses(legacy::PassManager &MPM,
@@ -343,6 +345,32 @@
                                   gollvm::options::OPT_fno_show_column,
                                   true);
 
+  // AutoFDO.
+  opt::Arg *sprofarg =
+      args_.getLastArg(gollvm::options::OPT_fprofile_sample_use,
+                       gollvm::options::OPT_fno_profile_sample_use,
+                       gollvm::options::OPT_fprofile_sample_use_EQ);
+  if (sprofarg) {
+    opt::Arg *fnamearg =
+        args_.getLastArg(gollvm::options::OPT_fprofile_sample_use_EQ);
+    if (fnamearg == nullptr) {
+      // Using -fsample-profile-use / -fno-sample-profile-use without
+      // also using -fprofile-sample-use=XXXX doesn't make sense
+      errs() << progname_ << ": warning: "
+             << "-fprofile-sample-use / -fno-profile-sample-use "
+             << "flags ignored (since no -fprofile-sample-use=<file> "
+             << "specified).\n";
+    } else if (!sprofarg->getOption().matches(
+        gollvm::options::OPT_fno_profile_sample_use)) {
+      StringRef fname = fnamearg->getValue();
+      if (!llvm::sys::fs::exists(fname)) {
+        errs() << progname_ << ": unable to access file: " << fname << "\n";
+        return false;
+      }
+      sampleProfileFile_ = fname;
+    }
+  }
+
   TargetOptions Options;
 
   // FIXME: turn off integrated assembler for now.
@@ -713,6 +741,11 @@
                                        enable);
 }
 
+static void addAddDiscriminatorsPass(const llvm::PassManagerBuilder &Builder,
+                                     llvm::legacy::PassManagerBase &PM) {
+  PM.add(createAddDiscriminatorsPass());
+}
+
 void CompileGoImpl::createPasses(legacy::PassManager &MPM,
                                  legacy::FunctionPassManager &FPM)
 {
@@ -740,6 +773,25 @@
   pmb.SLPVectorize = enableVectorization(true);
   pmb.LoopVectorize = enableVectorization(false);
 
+  bool needDwarfDiscr = false;
+  if (! sampleProfileFile_.empty()) {
+    pmb.PGOSampleUse = sampleProfileFile_;
+    needDwarfDiscr = true;
+  }
+  opt::Arg *dbgprofarg =
+      args_.getLastArg(gollvm::options::OPT_fdebug_info_for_profiling,
+                       gollvm::options::OPT_fno_debug_info_for_profiling);
+  if (dbgprofarg) {
+    if (dbgprofarg->getOption().matches(gollvm::options::OPT_fdebug_info_for_profiling))
+      needDwarfDiscr = true;
+    else
+      needDwarfDiscr = false;
+  }
+  if (needDwarfDiscr)
+    pmb.addExtension(llvm::PassManagerBuilder::EP_EarlyAsPossible,
+                           addAddDiscriminatorsPass);
+
+
   FPM.add(new TargetLibraryInfoWrapperPass(*tlii_));
   if (! args_.hasArg(gollvm::options::OPT_noverify))
     FPM.add(createVerifierPass());
diff --git a/driver/GollvmOptions.td b/driver/GollvmOptions.td
index a997b08..b74e61f 100644
--- a/driver/GollvmOptions.td
+++ b/driver/GollvmOptions.td
@@ -301,6 +301,21 @@
 def fdebug_prefix_map_EQ : Joined<["-"], "fdebug-prefix-map=">, Group<f_Group>,
   HelpText<"remap file source paths in debug info">;
 
+
+def fprofile_sample_use : Flag<["-"], "fprofile-sample-use">, Group<f_Group>, Flags<[DriverOption]>;
+def fno_profile_sample_use : Flag<["-"], "fno-profile-sample-use">, Group<f_Group>, Flags<[DriverOption]>;
+
+def fprofile_sample_use_EQ : Joined<["-"], "fprofile-sample-use=">,
+    Group<f_Group>, Flags<[DriverOption]>,
+    HelpText<"Enable sample-based profile guided optimizations">;
+
+def fdebug_info_for_profiling : Flag<["-"], "fdebug-info-for-profiling">, Group<f_Group>,
+    Flags<[DriverOption]>,
+    HelpText<"Emit extra debug info to make sample profile more accurate.">;
+def fno_debug_info_for_profiling : Flag<["-"], "fno-debug-info-for-profiling">, Group<f_Group>,
+    Flags<[DriverOption]>,
+    HelpText<"Do not emit extra debug info for sample profiler.">;
+    
 // Target-dependent "-m" options.
 
 def march_EQ : Joined<["-"], "march=">, Group<m_Group>;
