Index: lib/Driver/Tools.cpp =================================================================== --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -7616,6 +7616,12 @@ /// XCore Tools // We pass assemble and link construction to the xcc tool. +static const char *getXCoreMarch(const ArgList &Args) { + if (const Arg *A = Args.getLastArg(options::OPT_march_EQ)) + return A->getValue(); + return "xs1b"; +} + void XCore::Assemble::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, @@ -7635,6 +7641,9 @@ if (!A->getOption().matches(options::OPT_g0)) CmdArgs.push_back("-g"); + StringRef March = getXCoreMarch(Args); + CmdArgs.push_back(Args.MakeArgString("-march=" + March)); + if (Args.hasFlag(options::OPT_fverbose_asm, options::OPT_fno_verbose_asm, false)) CmdArgs.push_back("-fverbose-asm"); @@ -7670,6 +7679,9 @@ if (Args.hasArg(options::OPT_v)) CmdArgs.push_back("-v"); + StringRef March = getXCoreMarch(Args); + CmdArgs.push_back(Args.MakeArgString("-march=" + March)); + ExceptionSettings EH = exceptionSettings(Args, getToolChain().getTriple()); if (EH.ShouldUseExceptionTables) CmdArgs.push_back("-fexceptions"); Index: test/Driver/xcore-opts.c =================================================================== --- test/Driver/xcore-opts.c +++ test/Driver/xcore-opts.c @@ -2,6 +2,7 @@ // RUN: %clang -target xcore -x c++ %s -g -Wl,L1Arg,L2Arg -Wa,A1Arg,A2Arg -fverbose-asm -v -### -o %t.o 2>&1 | FileCheck %s // RUN: %clang -target xcore -x c++ %s -fexceptions -### -o %t.o 2>&1 | FileCheck -check-prefix CHECK-EXCEP %s // RUN: %clang -target xcore %s -g0 -### -o %t.o 2>&1 | FileCheck -check-prefix CHECK-G0 %s +// RUN: %clang -target xcore %s -march=xs0a -### -o %t.o 2>&1 | FileCheck -check-prefix CHECK-MARCH %s // CHECK: "-nostdsysteminc" // CHECK: "-momit-leaf-frame-pointer" @@ -13,10 +14,10 @@ // CHECK: "-fno-common" // CHECK: xcc" "-o" // CHECK-EXCEP-NOT: "-fexceptions" -// CHECK: "-c" "-v" "-g" "-fverbose-asm" "A1Arg" "A2Arg" +// CHECK: "-c" "-v" "-g" "-march=xs1b" "-fverbose-asm" "A1Arg" "A2Arg" // CHECK: xcc" "-o" // CHECK-EXCEP-NOT: "-fexceptions" -// CHECK: "-v" +// CHECK: "-v" "-march=xs1b" // CHECK: "L1Arg" "L2Arg" // CHECK-EXCEP: "-fno-use-cxa-atexit" @@ -32,3 +33,7 @@ // CHECK-G0-NOT: "-g" // CHECK-G0: xcc" +// CHECK-MARCH: xcc" +// CHECK-MARCH: "-march=xs0a" +// CHECK-MARCH: xcc" +// CHECK-MARCH: "-march=xs0a"