From 9fdb2699ae45326b358c05cf17ac35136243e79b Mon Sep 17 00:00:00 2001 From: Denis Bakhvalov Date: Tue, 4 Aug 2020 14:34:28 -0700 Subject: [PATCH 1/3] [DAE][SYCL] Emit MD instead of updating integration header --- .../IPO/DeadArgumentElimination.cpp | 96 +++---------------- ...cl-kernels-neg5.ll => sycl-kernels-neg.ll} | 4 +- .../DeadArgElim/sycl-kernels-neg1.ll | 17 ---- .../DeadArgElim/sycl-kernels-neg2.ll | 13 --- .../DeadArgElim/sycl-kernels-neg3.ll | 16 ---- .../DeadArgElim/sycl-kernels-neg4.ll | 18 ---- .../Transforms/DeadArgElim/sycl-kernels.ll | 33 ++----- 7 files changed, 21 insertions(+), 176 deletions(-) rename llvm/test/Transforms/DeadArgElim/{sycl-kernels-neg5.ll => sycl-kernels-neg.ll} (87%) delete mode 100644 llvm/test/Transforms/DeadArgElim/sycl-kernels-neg1.ll delete mode 100644 llvm/test/Transforms/DeadArgElim/sycl-kernels-neg2.ll delete mode 100644 llvm/test/Transforms/DeadArgElim/sycl-kernels-neg3.ll delete mode 100644 llvm/test/Transforms/DeadArgElim/sycl-kernels-neg4.ll diff --git a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp index d3a924f6f000a..46df15909f99d 100644 --- a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp +++ b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp @@ -41,7 +41,6 @@ #include "llvm/InitializePasses.h" #include "llvm/Pass.h" #include "llvm/Support/Casting.h" -#include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Transforms/IPO.h" @@ -55,11 +54,6 @@ using namespace llvm; #define DEBUG_TYPE "deadargelim" -static cl::opt - IntegrationHeaderFileName("integr-header-file", - cl::desc("Path to integration header file"), - cl::value_desc("filename"), cl::Hidden); - STATISTIC(NumArgumentsEliminated, "Number of unread args removed"); STATISTIC(NumRetValsEliminated , "Number of unused return values removed"); STATISTIC(NumArgumentsReplacedWithUndef, @@ -760,78 +754,6 @@ void DeadArgumentEliminationPass::PropagateLiveness(const RetOrArg &RA) { Uses.erase(Begin, I); } -// Update kernel arguments table inside the integration header. -// For example: -// static constexpr const bool param_omit_table[] = { -// // OMIT_TABLE_BEGIN -// // kernel_name_1 -// false, false, // <= update to true if the argument is dead -// // kernel_name_2 -// false, false, -// // OMIT_TABLE_END -// }; -// TODO: batch changes to multiple SPIR kernels and do one bulk update. -constexpr StringLiteral OMIT_TABLE_BEGIN("// OMIT_TABLE_BEGIN"); -constexpr StringLiteral OMIT_TABLE_END("// OMIT_TABLE_END"); -static void updateIntegrationHeader(StringRef SpirKernelName, - const ArrayRef &ArgAlive) { - ErrorOr> IntHeaderBuffer = - MemoryBuffer::getFile(IntegrationHeaderFileName); - - if (!IntHeaderBuffer) - report_fatal_error("unable to read integration header file '" + - IntegrationHeaderFileName + - "': " + IntHeaderBuffer.getError().message()); - - // 1. Find the region between OMIT_TABLE_BEGIN and OMIT_TABLE_END - StringRef IntHeader((*IntHeaderBuffer)->getBuffer()); - if (!IntHeader.contains(OMIT_TABLE_BEGIN)) - report_fatal_error(OMIT_TABLE_BEGIN + - " marker not found in integration header"); - if (!IntHeader.contains(OMIT_TABLE_END)) - report_fatal_error(OMIT_TABLE_END + - " marker not found in integration header"); - - size_t BeginRegionPos = - IntHeader.find(OMIT_TABLE_BEGIN) + OMIT_TABLE_BEGIN.size(); - size_t EndRegionPos = IntHeader.find(OMIT_TABLE_END); - - StringRef OmitArgTable = IntHeader.slice(BeginRegionPos, EndRegionPos); - - // 2. Find the line that corresponds to the SPIR kernel - if (!OmitArgTable.contains(SpirKernelName)) - report_fatal_error( - "Argument table not found in integration header for function '" + - SpirKernelName + "'"); - - size_t BeginLinePos = - OmitArgTable.find(SpirKernelName) + SpirKernelName.size(); - size_t EndLinePos = OmitArgTable.find("//", BeginLinePos); - - StringRef OmitArgLine = OmitArgTable.slice(BeginLinePos, EndLinePos); - - size_t LineLeftTrim = OmitArgLine.size() - OmitArgLine.ltrim().size(); - size_t LineRightTrim = OmitArgLine.size() - OmitArgLine.rtrim().size(); - - // 3. Construct new file contents and replace only that string. - std::string NewIntHeader; - NewIntHeader += - IntHeader.take_front(BeginRegionPos + BeginLinePos + LineLeftTrim); - for (auto &AliveArg : ArgAlive) - NewIntHeader += AliveArg ? "false, " : "true, "; - NewIntHeader += IntHeader.drop_front(BeginRegionPos + BeginLinePos + - OmitArgLine.size() - LineRightTrim); - - // 4. Flush the string into the file. - std::error_code EC; - raw_fd_ostream File(IntegrationHeaderFileName, EC, sys::fs::F_Text); - - if (EC) - report_fatal_error("Cannot open integration header for writing."); - - File << NewIntHeader; -} - // RemoveDeadStuffFromFunction - Remove any arguments and return values from F // that are not in LiveValues. Transform the function and all of the callees of // the function to not have these arguments and return values. @@ -875,8 +797,17 @@ bool DeadArgumentEliminationPass::RemoveDeadStuffFromFunction(Function *F) { } } - if (CheckSpirKernels) - updateIntegrationHeader(F->getName(), ArgAlive); + if (CheckSpirKernels) { + SmallVector MDOmitArgs; + auto MDOmitArgTrue = llvm::ConstantAsMetadata::get( + ConstantInt::get(Type::getInt1Ty(F->getContext()), 1)); + auto MDOmitArgFalse = llvm::ConstantAsMetadata::get( + ConstantInt::get(Type::getInt1Ty(F->getContext()), 0)); + for (auto &AliveArg : ArgAlive) + MDOmitArgs.push_back(AliveArg ? MDOmitArgFalse : MDOmitArgTrue); + F->setMetadata("spir_kernel_omit_args", + llvm::MDNode::get(F->getContext(), MDOmitArgs)); + } // Find out the new return value. Type *RetTy = FTy->getReturnType(); @@ -1193,11 +1124,6 @@ bool DeadArgumentEliminationPass::RemoveDeadStuffFromFunction(Function *F) { PreservedAnalyses DeadArgumentEliminationPass::run(Module &M, ModuleAnalysisManager &) { - // Integration header file must be provided for - // DAE to work on SPIR kernels. - if (CheckSpirKernels && !IntegrationHeaderFileName.getNumOccurrences()) - return PreservedAnalyses::all(); - bool Changed = false; // First pass: Do a simple check to see if any functions can have their "..." diff --git a/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg5.ll b/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg.ll similarity index 87% rename from llvm/test/Transforms/DeadArgElim/sycl-kernels-neg5.ll rename to llvm/test/Transforms/DeadArgElim/sycl-kernels-neg.ll index 915241aec9489..4d0cfd2a2ee4f 100644 --- a/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg5.ll +++ b/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg.ll @@ -3,7 +3,9 @@ ; RUN: opt < %s -deadargelim-sycl -S | FileCheck %s ; This test ensures dead arguments are not eliminated -; from a global function that is not a SYCL kernel. +; from a global function that is not a SPIR kernel. + +; CHECK-NOT: !spir_kernel_omit_args target triple = "spir64-unknown-unknown-sycldevice" diff --git a/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg1.ll b/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg1.ll deleted file mode 100644 index 55199ccdda687..0000000000000 --- a/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg1.ll +++ /dev/null @@ -1,17 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature -; RUN: opt < %s -deadargelim-sycl -S | FileCheck %s -; Skip DAE if the path to the integration header is not specified. - -target triple = "spir64-unknown-unknown-sycldevice" - -define weak_odr spir_kernel void @NegativeSpirKernel(float %arg1, float %arg2) { -; CHECK-LABEL: define {{[^@]+}}@NegativeSpirKernel -; CHECK-SAME: (float [[ARG1:%.*]], float [[ARG2:%.*]]) -; CHECK-NEXT: call void @foo(float [[ARG1]]) -; CHECK-NEXT: ret void -; - call void @foo(float %arg1) - ret void -} - -declare void @foo(float %arg) diff --git a/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg2.ll b/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg2.ll deleted file mode 100644 index 1c67c9a53dd04..0000000000000 --- a/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg2.ll +++ /dev/null @@ -1,13 +0,0 @@ -; RUN: touch %t-int_header.h -; RUN: not --crash opt < %s -deadargelim-sycl -S -integr-header-file %t-bad_file.h - -; Path to the integration header is wrong. - -target triple = "spir64-unknown-unknown-sycldevice" - -define weak_odr spir_kernel void @NegativeSpirKernel(float %arg1, float %arg2) { - call void @foo(float %arg1) - ret void -} - -declare void @foo(float %arg) diff --git a/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg3.ll b/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg3.ll deleted file mode 100644 index 2a1f8189269ae..0000000000000 --- a/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg3.ll +++ /dev/null @@ -1,16 +0,0 @@ -; RUN: echo 'static constexpr const bool param_omit_table[] = {' > %t-int_header.h -; RUN: echo ' // NegativeSpirKernel' >> %t-int_header.h -; RUN: echo ' false, false,' >> %t-int_header.h -; RUN: echo '};' >> %t-int_header.h -; RUN: not --crash opt < %s -deadargelim-sycl -S -integr-header-file %t-int_header.h - -; No OMIT_TABLE markers in the integration header. - -target triple = "spir64-unknown-unknown-sycldevice" - -define weak_odr spir_kernel void @NegativeSpirKernel(float %arg1, float %arg2) { - call void @foo(float %arg1) - ret void -} - -declare void @foo(float %arg) diff --git a/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg4.ll b/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg4.ll deleted file mode 100644 index 21412ac5a4bfe..0000000000000 --- a/llvm/test/Transforms/DeadArgElim/sycl-kernels-neg4.ll +++ /dev/null @@ -1,18 +0,0 @@ -; RUN: echo 'static constexpr const bool param_omit_table[] = {' > %t-int_header.h -; RUN: echo ' // OMIT_TABLE_BEGIN' >> %t-int_header.h -; RUN: echo ' // WrongKernelName' >> %t-int_header.h -; RUN: echo ' false, false,' >> %t-int_header.h -; RUN: echo ' // OMIT_TABLE_END' >> %t-int_header.h -; RUN: echo '};' >> %t-int_header.h -; RUN: not --crash opt < %s -deadargelim-sycl -S -integr-header-file %t-int_header.h - -; Wrong kernel name in the integration header. - -target triple = "spir64-unknown-unknown-sycldevice" - -define weak_odr spir_kernel void @NegativeSpirKernel(float %arg1, float %arg2) { - call void @foo(float %arg1) - ret void -} - -declare void @foo(float %arg) diff --git a/llvm/test/Transforms/DeadArgElim/sycl-kernels.ll b/llvm/test/Transforms/DeadArgElim/sycl-kernels.ll index 5cd5019554734..c5faa65ee15c1 100644 --- a/llvm/test/Transforms/DeadArgElim/sycl-kernels.ll +++ b/llvm/test/Transforms/DeadArgElim/sycl-kernels.ll @@ -1,17 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature -; RUN: echo 'some code we want to preserve' > %t-int_header.h -; RUN: echo 'static constexpr const bool param_omit_table[] = {' >> %t-int_header.h -; RUN: echo ' // OMIT_TABLE_BEGIN' >> %t-int_header.h -; RUN: echo ' // SpirKernel1' >> %t-int_header.h -; RUN: echo ' false, false,' >> %t-int_header.h -; RUN: echo ' // SpirKernel2' >> %t-int_header.h -; RUN: echo ' false, false,' >> %t-int_header.h -; RUN: echo ' // OMIT_TABLE_END' >> %t-int_header.h -; RUN: echo '};' >> %t-int_header.h -; RUN: echo 'some code we want to preserve' >> %t-int_header.h ; RUN: opt < %s -deadargelim -S | FileCheck %s --check-prefixes=CHECK -; RUN: opt < %s -deadargelim-sycl -S -integr-header-file %t-int_header.h | FileCheck %s --check-prefixes=CHECK-SYCL -; RUN: cat %t-int_header.h | FileCheck %s --check-prefixes=CHECK-INT-HEADER +; RUN: opt < %s -deadargelim-sycl -S | FileCheck %s --check-prefixes=CHECK-SYCL ; This test checks eliminating dead arguments ; from SPIR kernel functions in SYCL environment. @@ -25,10 +14,10 @@ define weak_odr spir_kernel void @SpirKernel1(float %arg1, float %arg2) { ; CHECK-NEXT: ret void ; ; CHECK-SYCL-LABEL: define {{[^@]+}}@SpirKernel1 -; CHECK-SYCL-SAME: (float [[ARG1:%.*]]) +; CHECK-SYCL-SAME: (float [[ARG1:%.*]]) !spir_kernel_omit_args ![[KERN_ARGS1:[0-9]]] ; CHECK-SYCL-NEXT: call void @foo(float [[ARG1]]) ; CHECK-SYCL-NEXT: ret void -; + call void @foo(float %arg1) ret void } @@ -40,23 +29,15 @@ define weak_odr spir_kernel void @SpirKernel2(float %arg1, float %arg2) { ; CHECK-NEXT: ret void ; ; CHECK-SYCL-LABEL: define {{[^@]+}}@SpirKernel2 -; CHECK-SYCL-SAME: (float [[ARG2:%.*]]) +; CHECK-SYCL-SAME: (float [[ARG2:%.*]]) !spir_kernel_omit_args ![[KERN_ARGS2:[0-9]]] ; CHECK-SYCL-NEXT: call void @foo(float [[ARG2]]) ; CHECK-SYCL-NEXT: ret void -; + call void @foo(float %arg2) ret void } -; CHECK-INT-HEADER: some code we want to preserve -; CHECK-INT-HEADER: static constexpr const bool param_omit_table[] = { -; CHECK-INT-HEADER: // OMIT_TABLE_BEGIN -; CHECK-INT-HEADER: // SpirKernel1 -; CHECK-INT-HEADER: false, true, -; CHECK-INT-HEADER: // SpirKernel2 -; CHECK-INT-HEADER: true, false, -; CHECK-INT-HEADER: // OMIT_TABLE_END -; CHECK-INT-HEADER: }; -; CHECK-INT-HEADER: some code we want to preserve +; CHECK-SYCL: ![[KERN_ARGS1]] = !{i1 false, i1 true} +; CHECK-SYCL: ![[KERN_ARGS2]] = !{i1 true, i1 false} declare void @foo(float %arg) From 4c2fbd68f8d570e88681594560389b49ce8401f9 Mon Sep 17 00:00:00 2001 From: Denis Bakhvalov Date: Wed, 5 Aug 2020 14:07:13 -0700 Subject: [PATCH 2/3] [DAE][SYCL] - Removed DAE from standard optimization pipeline We cannot run DAE in ESIMD cntext since the pointers to SPIR kernel functions are saved in !genx.kernels metadata. Because of that I removed DAE pass from the standard pipeline and put it in the place that is specific for SYCL passes and guarded it under a new temporary option: '-fenable-sycl-dae'. This option is only used until other parts of the solution are not in place. --- clang/include/clang/Basic/LangOptions.def | 1 + clang/include/clang/Driver/Options.td | 2 ++ clang/lib/CodeGen/BackendUtil.cpp | 9 +++++++++ clang/lib/Frontend/CompilerInvocation.cpp | 1 + llvm/lib/Transforms/IPO/PassManagerBuilder.cpp | 1 - llvm/test/Other/opt-O2-pipeline.ll | 1 - llvm/test/Other/opt-O3-pipeline-enable-matrix.ll | 1 - llvm/test/Other/opt-O3-pipeline.ll | 1 - llvm/test/Other/opt-Os-pipeline.ll | 1 - 9 files changed, 13 insertions(+), 5 deletions(-) diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index 55ee5c7aabbd6..f4c67646c22a7 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -251,6 +251,7 @@ LANGOPT(SYCLUnnamedLambda , 1, 0, "Allow unnamed lambda SYCL kernels") LANGOPT(SYCLVersion , 32, 0, "Version of the SYCL standard used") LANGOPT(DeclareSPIRVBuiltins, 1, 0, "Declare SPIR-V builtin functions") LANGOPT(SYCLExplicitSIMD , 1, 0, "SYCL compilation with explicit SIMD extension") +LANGOPT(EnableDAEInSpirKernels , 1, 0, "Enable Dead Argument Elimination in SPIR kernels") LANGOPT(HIPUseNewLaunchAPI, 1, 0, "Use new kernel launching API for HIP") diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 96a5968175c37..93927db667202 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -4456,6 +4456,8 @@ def fsycl_allow_func_ptr : Flag<["-"], "fsycl-allow-func-ptr">, def fno_sycl_allow_func_ptr : Flag<["-"], "fno-sycl-allow-func-ptr">; def fsycl_enable_optimizations: Flag<["-"], "fsycl-enable-optimizations">, HelpText<"Experimental flag enabling standard optimization in the front-end.">; +def fenable_sycl_dae : Flag<["-"], "fenable-sycl-dae">, + HelpText<"Enable Dead Argument Elimination in SPIR kernels">; } // let Flags = [CC1Option] diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 49264ff396e3d..1c3183630f3f8 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -918,6 +918,15 @@ void EmitAssemblyHelper::EmitAssembly(BackendAction Action, if (LangOpts.SYCLIsDevice && CodeGenOpts.DisableLLVMPasses) PerModulePasses.add(createDeadCodeEliminationPass()); + // Eliminate dead arguments from SPIR kernels in SYCL environment. + // 1. Run DAE when LLVM optimizations are applied as well. + // 2. We cannot run DAE for ESIMD since the pointers to SPIR kernel + // functions are saved in !genx.kernels metadata. + // 3. DAE pass temporary guarded under option. + if (LangOpts.SYCLIsDevice && !CodeGenOpts.DisableLLVMPasses && + !LangOpts.SYCLExplicitSIMD && LangOpts.EnableDAEInSpirKernels) + PerModulePasses.add(createDeadArgEliminationSYCLPass()); + if (LangOpts.SYCLIsDevice && LangOpts.SYCLExplicitSIMD) PerModulePasses.add(createGenXSPIRVWriterAdaptorPass()); diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index b64c7105a142f..885b199fcaf14 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -2596,6 +2596,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, } } Opts.SYCLExplicitSIMD = Args.hasArg(options::OPT_fsycl_esimd); + Opts.EnableDAEInSpirKernels = Args.hasArg(options::OPT_fenable_sycl_dae); } Opts.IncludeDefaultHeader = Args.hasArg(OPT_finclude_default_header); diff --git a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp index 0062532e25dad..22daa8e812f69 100644 --- a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp +++ b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp @@ -680,7 +680,6 @@ void PassManagerBuilder::populateModulePassManager( if (RunInliner) { MPM.add(createGlobalOptimizerPass()); MPM.add(createGlobalDCEPass()); - MPM.add(createDeadArgEliminationSYCLPass()); } // If we are planning to perform ThinLTO later, let's not bloat the code with diff --git a/llvm/test/Other/opt-O2-pipeline.ll b/llvm/test/Other/opt-O2-pipeline.ll index dfc3087d60dae..56f85d0fb9a8c 100644 --- a/llvm/test/Other/opt-O2-pipeline.ll +++ b/llvm/test/Other/opt-O2-pipeline.ll @@ -193,7 +193,6 @@ ; CHECK-NEXT: Branch Probability Analysis ; CHECK-NEXT: Block Frequency Analysis ; CHECK-NEXT: Dead Global Elimination -; CHECK-NEXT: Dead Argument Elimination for SPIR kernels in SYCL environment ; CHECK-NEXT: CallGraph Construction ; CHECK-NEXT: Globals Alias Analysis ; CHECK-NEXT: FunctionPass Manager diff --git a/llvm/test/Other/opt-O3-pipeline-enable-matrix.ll b/llvm/test/Other/opt-O3-pipeline-enable-matrix.ll index 10a03d5e47850..a0b7a8f5e1e3d 100644 --- a/llvm/test/Other/opt-O3-pipeline-enable-matrix.ll +++ b/llvm/test/Other/opt-O3-pipeline-enable-matrix.ll @@ -198,7 +198,6 @@ ; CHECK-NEXT: Branch Probability Analysis ; CHECK-NEXT: Block Frequency Analysis ; CHECK-NEXT: Dead Global Elimination -; CHECK-NEXT: Dead Argument Elimination for SPIR kernels in SYCL environment ; CHECK-NEXT: CallGraph Construction ; CHECK-NEXT: Globals Alias Analysis ; CHECK-NEXT: FunctionPass Manager diff --git a/llvm/test/Other/opt-O3-pipeline.ll b/llvm/test/Other/opt-O3-pipeline.ll index c4d18357690bd..942f7d9dfead5 100644 --- a/llvm/test/Other/opt-O3-pipeline.ll +++ b/llvm/test/Other/opt-O3-pipeline.ll @@ -198,7 +198,6 @@ ; CHECK-NEXT: Branch Probability Analysis ; CHECK-NEXT: Block Frequency Analysis ; CHECK-NEXT: Dead Global Elimination -; CHECK-NEXT: Dead Argument Elimination for SPIR kernels in SYCL environment ; CHECK-NEXT: CallGraph Construction ; CHECK-NEXT: Globals Alias Analysis ; CHECK-NEXT: FunctionPass Manager diff --git a/llvm/test/Other/opt-Os-pipeline.ll b/llvm/test/Other/opt-Os-pipeline.ll index 31806bc173006..d975cc48b629c 100644 --- a/llvm/test/Other/opt-Os-pipeline.ll +++ b/llvm/test/Other/opt-Os-pipeline.ll @@ -179,7 +179,6 @@ ; CHECK-NEXT: Branch Probability Analysis ; CHECK-NEXT: Block Frequency Analysis ; CHECK-NEXT: Dead Global Elimination -; CHECK-NEXT: Dead Argument Elimination for SPIR kernels in SYCL environment ; CHECK-NEXT: CallGraph Construction ; CHECK-NEXT: Globals Alias Analysis ; CHECK-NEXT: FunctionPass Manager From 2cbb491f179aa6b33bf22886deac1eeb8a037e35 Mon Sep 17 00:00:00 2001 From: Alexey Bader Date: Thu, 6 Aug 2020 17:38:33 +0300 Subject: [PATCH 3/3] Undo wrong conflict resolution. --- clang/include/clang/Driver/Options.td | 2 -- 1 file changed, 2 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index ebf2efd3386ae..03c1f03df2bb1 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -4455,8 +4455,6 @@ def fsycl_std_layout_kernel_params: Flag<["-"], "fsycl-std-layout-kernel-params" def fsycl_allow_func_ptr : Flag<["-"], "fsycl-allow-func-ptr">, HelpText<"Allow function pointers in SYCL device.">; def fno_sycl_allow_func_ptr : Flag<["-"], "fno-sycl-allow-func-ptr">; -def fsycl_enable_optimizations: Flag<["-"], "fsycl-enable-optimizations">, - HelpText<"Experimental flag enabling standard optimization in the front-end.">; def fenable_sycl_dae : Flag<["-"], "fenable-sycl-dae">, HelpText<"Enable Dead Argument Elimination in SPIR kernels">;