diff --git include/clang/Basic/LangOptions.def include/clang/Basic/LangOptions.def
index 20e4ca8..dd4d3e8 100644
--- include/clang/Basic/LangOptions.def
+++ include/clang/Basic/LangOptions.def
@@ -170,6 +170,8 @@ BENIGN_LANGOPT(EmitMicrosoftInlineAsm , 1, 0,
 
 BENIGN_LANGOPT(RetainCommentsFromSystemHeaders, 1, 0, "retain documentation comments from system headers in the AST")
 
+LANGOPT(CilkPlus, 1, 0, "Intel Cilk Plus extensions to C/C++")
+
 #undef LANGOPT
 #undef VALUE_LANGOPT
 #undef BENIGN_LANGOPT
diff --git include/clang/Driver/Options.td include/clang/Driver/Options.td
index 3c39eb6..5335721 100644
--- include/clang/Driver/Options.td
+++ include/clang/Driver/Options.td
@@ -587,6 +587,9 @@ def fobjc_sender_dependent_dispatch : Flag<["-"], "fobjc-sender-dependent-dispat
 def fobjc : Flag<["-"], "fobjc">, Group<f_Group>;
 def fomit_frame_pointer : Flag<["-"], "fomit-frame-pointer">, Group<f_Group>;
 def fopenmp : Flag<["-"], "fopenmp">, Group<f_Group>;
+def fcilkplus : Flag<["-"], "fcilkplus">, Group<f_Group>, Flags<[CC1Option]>,
+  HelpText<"Enable Cilk Plus extensions">;
+def fno_cilkplus : Flag<["-"], "fno-cilkplus">, Group<f_Group>, Flags<[CC1Option]>;
 def fno_optimize_sibling_calls : Flag<["-"], "fno-optimize-sibling-calls">, Group<f_Group>;
 def foptimize_sibling_calls : Flag<["-"], "foptimize-sibling-calls">, Group<f_Group>;
 def force__cpusubtype__ALL : Flag<["-"], "force_cpusubtype_ALL">;
diff --git lib/Driver/Tools.cpp lib/Driver/Tools.cpp
index 95db821..37e3d2e 100644
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -2433,6 +2433,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
   Args.AddLastArg(CmdArgs, options::OPT_funroll_loops);
 
   Args.AddLastArg(CmdArgs, options::OPT_pthread);
+  if (Args.hasFlag(options::OPT_fcilkplus, options::OPT_fno_cilkplus, false))
+    CmdArgs.push_back("-fcilkplus");
 
 
   // -stack-protector=0 is default.
diff --git lib/Frontend/CompilerInvocation.cpp lib/Frontend/CompilerInvocation.cpp
index 78dc0d5..9fffd4c 100644
--- lib/Frontend/CompilerInvocation.cpp
+++ lib/Frontend/CompilerInvocation.cpp
@@ -709,6 +709,8 @@ static void LangOptsToArgs(const LangOptions &Opts, ToArgsList &Res) {
     Res.push_back("-fmsc-version=" + llvm::utostr(Opts.MSCVersion));
   if (Opts.Borland)
     Res.push_back("-fborland-extensions");
+  if (Opts.CilkPlus)
+    Res.push_back("-fcilkplus");
   if (Opts.ObjCDefaultSynthProperties)
     Res.push_back("-fobjc-default-synthesize-properties");
   // NoInline is implicit.
@@ -2078,6 +2080,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
   Opts.MicrosoftMode = Args.hasArg(OPT_fms_compatibility);
   Opts.MSCVersion = Args.getLastArgIntValue(OPT_fmsc_version, 0, Diags);
   Opts.Borland = Args.hasArg(OPT_fborland_extensions);
+  Opts.CilkPlus = Args.hasArg(OPT_fcilkplus);
   Opts.WritableStrings = Args.hasArg(OPT_fwritable_strings);
   Opts.ConstStrings = Args.hasFlag(OPT_fconst_strings, OPT_fno_const_strings,
                                    Opts.ConstStrings);
diff --git test/Driver/clang_f_opts.c test/Driver/clang_f_opts.c
index 0ee7d2d..e775168 100644
--- test/Driver/clang_f_opts.c
+++ test/Driver/clang_f_opts.c
@@ -38,3 +38,12 @@
 
 // RUN: %clang -fms-extensions -fenable-experimental-ms-inline-asm %s -### 2>&1 | FileCheck -check-prefix=CHECK-OPTIONS3 %s
 // CHECK-OPTIONS3: -fenable-experimental-ms-inline-asm
+//
+// RUN: %clang %s -### 2>&1                          | FileCheck -check-prefix=CHECK-CILK1 %s
+// RUN: %clang %s -### 2>&1 -fcilkplus               | FileCheck -check-prefix=CHECK-CILK2 %s
+// RUN: %clang %s -### 2>&1 -fcilkplus -fno-cilkplus | FileCheck -check-prefix=CHECK-CILK3 %s
+// RUN: %clang %s -### 2>&1 -fno-cilkplus -fcilkplus | FileCheck -check-prefix=CHECK-CILK4 %s
+// CHECK-CILK1-NOT: -fcilkplus
+// CHECK-CILK2:     -fcilkplus
+// CHECK-CILK3-NOT: -fcilkplus
+// CHECK-CILK4:     -fcilkplus
