Skip to content

Commit 2db182f

Browse files
committed
[Diagnostics] Allow emitting analysis and missed remarks on functions
Summary: Currently, only `OptimizationRemarks` can be emitted using a Function. Add constructors to allow this for `OptimizationRemarksAnalysis` and `OptimizationRemarkMissed` as well. Reviewed By: jdoerfert thegameg Differential Revision: https://reviews.llvm.org/D102784
1 parent 9b59a61 commit 2db182f

File tree

8 files changed

+107
-86
lines changed

8 files changed

+107
-86
lines changed

clang/test/OpenMP/remarks_parallel_in_multiple_target_state_machines.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// RUN: %clang_cc1 -verify=host -Rpass=openmp -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc
2-
// RUN: %clang_cc1 -verify=all,safe -Rpass=openmp -fopenmp -O2 -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t.out
3-
// RUN: %clang_cc1 -fexperimental-new-pass-manager -verify=all,safe -Rpass=openmp -fopenmp -O2 -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t.out
1+
// RUN: %clang_cc1 -verify=host -Rpass=openmp-opt -Rpass-analysis=openmp -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc
2+
// RUN: %clang_cc1 -verify=all,safe -Rpass=openmp-opt -Rpass-analysis=openmp -fopenmp -O2 -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t.out
3+
// RUN: %clang_cc1 -fexperimental-new-pass-manager -verify=all,safe -Rpass=openmp-opt -Rpass-analysis=openmp -fopenmp -O2 -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t.out
44

55
// host-no-diagnostics
66

@@ -96,5 +96,5 @@ void spmd(void) {
9696
}
9797
}
9898

99-
// all-remark@* 5 {{OpenMP runtime call __kmpc_global_thread_num moved to}}
99+
// all-remark@* 5 {{OpenMP runtime call __kmpc_global_thread_num moved to beginning of OpenMP region}}
100100
// all-remark@* 12 {{OpenMP runtime call __kmpc_global_thread_num deduplicated}}

clang/test/OpenMP/remarks_parallel_in_target_state_machine.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// RUN: %clang_cc1 -verify=host -Rpass=openmp -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc
2-
// RUN: %clang_cc1 -verify -Rpass=openmp -fopenmp -O2 -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t.out
3-
// RUN: %clang_cc1 -fexperimental-new-pass-manager -verify -Rpass=openmp -fopenmp -O2 -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t.out
1+
// RUN: %clang_cc1 -verify=host -Rpass=openmp -Rpass-analysis=openmp-opt -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc
2+
// RUN: %clang_cc1 -verify -Rpass=openmp -Rpass-analysis=openmp-opt -fopenmp -O2 -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t.out
3+
// RUN: %clang_cc1 -fexperimental-new-pass-manager -verify -Rpass=openmp -Rpass-analysis=openmp-opt -fopenmp -O2 -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t.out
44

55
// host-no-diagnostics
66

@@ -43,5 +43,5 @@ void spmd(void) {
4343
}
4444
}
4545

46-
// expected-remark@* {{OpenMP runtime call __kmpc_global_thread_num moved to}}
46+
// expected-remark@* {{OpenMP runtime call __kmpc_global_thread_num moved to beginning of OpenMP region}}
4747
// expected-remark@* 2 {{OpenMP runtime call __kmpc_global_thread_num deduplicated}}

llvm/include/llvm/IR/DiagnosticInfo.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,11 @@ class OptimizationRemarkMissed : public DiagnosticInfoIROptimization {
743743
OptimizationRemarkMissed(const char *PassName, StringRef RemarkName,
744744
const Instruction *Inst);
745745

746+
/// Same as above but \p F is used to derive code region and debug
747+
/// location.
748+
OptimizationRemarkMissed(const char *PassName, StringRef RemarkName,
749+
const Function *F);
750+
746751
static bool classof(const DiagnosticInfo *DI) {
747752
return DI->getKind() == DK_OptimizationRemarkMissed;
748753
}
@@ -795,6 +800,11 @@ class OptimizationRemarkAnalysis : public DiagnosticInfoIROptimization {
795800
OptimizationRemarkAnalysis(const char *PassName, StringRef RemarkName,
796801
const Instruction *Inst);
797802

803+
/// Same as above but \p F is used to derive code region and debug
804+
/// location.
805+
OptimizationRemarkAnalysis(const char *PassName, StringRef RemarkName,
806+
const Function *F);
807+
798808
static bool classof(const DiagnosticInfo *DI) {
799809
return DI->getKind() == DK_OptimizationRemarkAnalysis;
800810
}

llvm/lib/IR/DiagnosticInfo.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,13 @@ OptimizationRemarkMissed::OptimizationRemarkMissed(const char *PassName,
291291
*Inst->getParent()->getParent(),
292292
Inst->getDebugLoc(), Inst->getParent()) {}
293293

294+
OptimizationRemarkMissed::OptimizationRemarkMissed(const char *PassName,
295+
StringRef RemarkName,
296+
const Function *Func)
297+
: DiagnosticInfoIROptimization(
298+
DK_OptimizationRemarkMissed, DS_Remark, PassName, RemarkName, *Func,
299+
Func->getSubprogram(), getFirstFunctionBlock(Func)) {}
300+
294301
bool OptimizationRemarkMissed::isEnabled() const {
295302
const Function &Fn = getFunction();
296303
LLVMContext &Ctx = Fn.getContext();
@@ -319,6 +326,13 @@ OptimizationRemarkAnalysis::OptimizationRemarkAnalysis(
319326
*cast<BasicBlock>(CodeRegion)->getParent(),
320327
Loc, CodeRegion) {}
321328

329+
OptimizationRemarkAnalysis::OptimizationRemarkAnalysis(const char *PassName,
330+
StringRef RemarkName,
331+
const Function *Func)
332+
: DiagnosticInfoIROptimization(
333+
DK_OptimizationRemarkAnalysis, DS_Remark, PassName, RemarkName, *Func,
334+
Func->getSubprogram(), getFirstFunctionBlock(Func)) {}
335+
322336
bool OptimizationRemarkAnalysis::isEnabled() const {
323337
const Function &Fn = getFunction();
324338
LLVMContext &Ctx = Fn.getContext();

llvm/lib/Transforms/IPO/OpenMPOpt.cpp

Lines changed: 68 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -581,15 +581,15 @@ struct OpenMPOpt {
581581
for (Function *F : OMPInfoCache.ModuleSlice) {
582582
for (auto ICV : ICVs) {
583583
auto ICVInfo = OMPInfoCache.ICVs[ICV];
584-
auto Remark = [&](OptimizationRemark OR) {
585-
return OR << "OpenMP ICV " << ore::NV("OpenMPICV", ICVInfo.Name)
586-
<< " Value: "
587-
<< (ICVInfo.InitValue
588-
? ICVInfo.InitValue->getValue().toString(10, true)
589-
: "IMPLEMENTATION_DEFINED");
584+
auto Remark = [&](OptimizationRemarkAnalysis ORA) {
585+
return ORA << "OpenMP ICV " << ore::NV("OpenMPICV", ICVInfo.Name)
586+
<< " Value: "
587+
<< (ICVInfo.InitValue
588+
? ICVInfo.InitValue->getValue().toString(10, true)
589+
: "IMPLEMENTATION_DEFINED");
590590
};
591591

592-
emitRemarkOnFunction(F, "OpenMPICVTracker", Remark);
592+
emitRemark<OptimizationRemarkAnalysis>(F, "OpenMPICVTracker", Remark);
593593
}
594594
}
595595
}
@@ -600,12 +600,12 @@ struct OpenMPOpt {
600600
if (!OMPInfoCache.Kernels.count(F))
601601
continue;
602602

603-
auto Remark = [&](OptimizationRemark OR) {
604-
return OR << "OpenMP GPU kernel "
605-
<< ore::NV("OpenMPGPUKernel", F->getName()) << "\n";
603+
auto Remark = [&](OptimizationRemarkAnalysis ORA) {
604+
return ORA << "OpenMP GPU kernel "
605+
<< ore::NV("OpenMPGPUKernel", F->getName()) << "\n";
606606
};
607607

608-
emitRemarkOnFunction(F, "OpenMPGPU", Remark);
608+
emitRemark<OptimizationRemarkAnalysis>(F, "OpenMPGPU", Remark);
609609
}
610610
}
611611

@@ -1419,12 +1419,11 @@ struct OpenMPOpt {
14191419
continue;
14201420

14211421
auto Remark = [&](OptimizationRemark OR) {
1422-
auto newLoc = &*F.getEntryBlock().getFirstInsertionPt();
14231422
return OR << "OpenMP runtime call "
1424-
<< ore::NV("OpenMPOptRuntime", RFI.Name) << " moved to "
1425-
<< ore::NV("OpenMPRuntimeMoves", newLoc->getDebugLoc());
1423+
<< ore::NV("OpenMPOptRuntime", RFI.Name)
1424+
<< " moved to beginning of OpenMP region";
14261425
};
1427-
emitRemark<OptimizationRemark>(CI, "OpenMPRuntimeCodeMotion", Remark);
1426+
emitRemark<OptimizationRemark>(&F, "OpenMPRuntimeCodeMotion", Remark);
14281427

14291428
CI->moveBefore(&*F.getEntryBlock().getFirstInsertionPt());
14301429
ReplVal = CI;
@@ -1457,7 +1456,7 @@ struct OpenMPOpt {
14571456
return OR << "OpenMP runtime call "
14581457
<< ore::NV("OpenMPOptRuntime", RFI.Name) << " deduplicated";
14591458
};
1460-
emitRemark<OptimizationRemark>(CI, "OpenMPRuntimeDeduplicated", Remark);
1459+
emitRemark<OptimizationRemark>(&F, "OpenMPRuntimeDeduplicated", Remark);
14611460

14621461
CGUpdater.removeCallSite(*CI);
14631462
CI->replaceAllUsesWith(ReplVal);
@@ -1558,28 +1557,22 @@ struct OpenMPOpt {
15581557
///
15591558
/// The remark is built using a callback function provided by the caller that
15601559
/// takes a RemarkKind as input and returns a RemarkKind.
1561-
template <typename RemarkKind,
1562-
typename RemarkCallBack = function_ref<RemarkKind(RemarkKind &&)>>
1563-
void emitRemark(Instruction *Inst, StringRef RemarkName,
1560+
template <typename RemarkKind, typename RemarkCallBack>
1561+
void emitRemark(Instruction *I, StringRef RemarkName,
15641562
RemarkCallBack &&RemarkCB) const {
1565-
Function *F = Inst->getParent()->getParent();
1563+
Function *F = I->getParent()->getParent();
15661564
auto &ORE = OREGetter(F);
15671565

1568-
ORE.emit(
1569-
[&]() { return RemarkCB(RemarkKind(DEBUG_TYPE, RemarkName, Inst)); });
1566+
ORE.emit([&]() { return RemarkCB(RemarkKind(DEBUG_TYPE, RemarkName, I)); });
15701567
}
15711568

1572-
/// Emit a remark on a function. Since only OptimizationRemark is supporting
1573-
/// this, it can't be made generic.
1574-
void
1575-
emitRemarkOnFunction(Function *F, StringRef RemarkName,
1576-
function_ref<OptimizationRemark(OptimizationRemark &&)>
1577-
&&RemarkCB) const {
1569+
/// Emit a remark on a function.
1570+
template <typename RemarkKind, typename RemarkCallBack>
1571+
void emitRemark(Function *F, StringRef RemarkName,
1572+
RemarkCallBack &&RemarkCB) const {
15781573
auto &ORE = OREGetter(F);
15791574

1580-
ORE.emit([&]() {
1581-
return RemarkCB(OptimizationRemark(DEBUG_TYPE, RemarkName, F));
1582-
});
1575+
ORE.emit([&]() { return RemarkCB(RemarkKind(DEBUG_TYPE, RemarkName, F)); });
15831576
}
15841577

15851578
/// The underlying module.
@@ -1672,10 +1665,11 @@ Kernel OpenMPOpt::getUniqueKernelFor(Function &F) {
16721665
if (!F.hasLocalLinkage()) {
16731666

16741667
// See https://openmp.llvm.org/remarks/OptimizationRemarks.html
1675-
auto Remark = [&](OptimizationRemark OR) {
1676-
return OR << "[OMP100] Potentially unknown OpenMP target region caller";
1668+
auto Remark = [&](OptimizationRemarkAnalysis ORA) {
1669+
return ORA
1670+
<< "[OMP100] Potentially unknown OpenMP target region caller";
16771671
};
1678-
emitRemarkOnFunction(&F, "OMP100", Remark);
1672+
emitRemark<OptimizationRemarkAnalysis>(&F, "OMP100", Remark);
16791673

16801674
return nullptr;
16811675
}
@@ -1768,15 +1762,16 @@ bool OpenMPOpt::rewriteDeviceCodeStateMachine() {
17681762
continue;
17691763

17701764
{
1771-
auto Remark = [&](OptimizationRemark OR) {
1772-
return OR << "Found a parallel region that is called in a target "
1773-
"region but not part of a combined target construct nor "
1774-
"nested inside a target construct without intermediate "
1775-
"code. This can lead to excessive register usage for "
1776-
"unrelated target regions in the same translation unit "
1777-
"due to spurious call edges assumed by ptxas.";
1765+
auto Remark = [&](OptimizationRemarkAnalysis ORA) {
1766+
return ORA << "Found a parallel region that is called in a target "
1767+
"region but not part of a combined target construct nor "
1768+
"nested inside a target construct without intermediate "
1769+
"code. This can lead to excessive register usage for "
1770+
"unrelated target regions in the same translation unit "
1771+
"due to spurious call edges assumed by ptxas.";
17781772
};
1779-
emitRemarkOnFunction(F, "OpenMPParallelRegionInNonSPMD", Remark);
1773+
emitRemark<OptimizationRemarkAnalysis>(F, "OpenMPParallelRegionInNonSPMD",
1774+
Remark);
17801775
}
17811776

17821777
// If this ever hits, we should investigate.
@@ -1785,12 +1780,13 @@ bool OpenMPOpt::rewriteDeviceCodeStateMachine() {
17851780
if (UnknownUse || NumDirectCalls != 1 ||
17861781
ToBeReplacedStateMachineUses.size() != 2) {
17871782
{
1788-
auto Remark = [&](OptimizationRemark OR) {
1789-
return OR << "Parallel region is used in "
1790-
<< (UnknownUse ? "unknown" : "unexpected")
1791-
<< " ways; will not attempt to rewrite the state machine.";
1783+
auto Remark = [&](OptimizationRemarkAnalysis ORA) {
1784+
return ORA << "Parallel region is used in "
1785+
<< (UnknownUse ? "unknown" : "unexpected")
1786+
<< " ways; will not attempt to rewrite the state machine.";
17921787
};
1793-
emitRemarkOnFunction(F, "OpenMPParallelRegionInNonSPMD", Remark);
1788+
emitRemark<OptimizationRemarkAnalysis>(
1789+
F, "OpenMPParallelRegionInNonSPMD", Remark);
17941790
}
17951791
continue;
17961792
}
@@ -1800,14 +1796,14 @@ bool OpenMPOpt::rewriteDeviceCodeStateMachine() {
18001796
Kernel K = getUniqueKernelFor(*F);
18011797
if (!K) {
18021798
{
1803-
auto Remark = [&](OptimizationRemark OR) {
1804-
return OR << "Parallel region is not known to be called from a "
1805-
"unique single target region, maybe the surrounding "
1806-
"function has external linkage?; will not attempt to "
1807-
"rewrite the state machine use.";
1799+
auto Remark = [&](OptimizationRemarkAnalysis ORA) {
1800+
return ORA << "Parallel region is not known to be called from a "
1801+
"unique single target region, maybe the surrounding "
1802+
"function has external linkage?; will not attempt to "
1803+
"rewrite the state machine use.";
18081804
};
1809-
emitRemarkOnFunction(F, "OpenMPParallelRegionInMultipleKernesl",
1810-
Remark);
1805+
emitRemark<OptimizationRemarkAnalysis>(
1806+
F, "OpenMPParallelRegionInMultipleKernesl", Remark);
18111807
}
18121808
continue;
18131809
}
@@ -1818,25 +1814,26 @@ bool OpenMPOpt::rewriteDeviceCodeStateMachine() {
18181814
// ensures only direct calls to the function are left.
18191815

18201816
{
1821-
auto RemarkParalleRegion = [&](OptimizationRemark OR) {
1822-
return OR << "Specialize parallel region that is only reached from a "
1823-
"single target region to avoid spurious call edges and "
1824-
"excessive register usage in other target regions. "
1825-
"(parallel region ID: "
1826-
<< ore::NV("OpenMPParallelRegion", F->getName())
1827-
<< ", kernel ID: "
1828-
<< ore::NV("OpenMPTargetRegion", K->getName()) << ")";
1817+
auto RemarkParalleRegion = [&](OptimizationRemarkAnalysis ORA) {
1818+
return ORA << "Specialize parallel region that is only reached from a "
1819+
"single target region to avoid spurious call edges and "
1820+
"excessive register usage in other target regions. "
1821+
"(parallel region ID: "
1822+
<< ore::NV("OpenMPParallelRegion", F->getName())
1823+
<< ", kernel ID: "
1824+
<< ore::NV("OpenMPTargetRegion", K->getName()) << ")";
18291825
};
1830-
emitRemarkOnFunction(F, "OpenMPParallelRegionInNonSPMD",
1831-
RemarkParalleRegion);
1832-
auto RemarkKernel = [&](OptimizationRemark OR) {
1833-
return OR << "Target region containing the parallel region that is "
1834-
"specialized. (parallel region ID: "
1835-
<< ore::NV("OpenMPParallelRegion", F->getName())
1836-
<< ", kernel ID: "
1837-
<< ore::NV("OpenMPTargetRegion", K->getName()) << ")";
1826+
emitRemark<OptimizationRemarkAnalysis>(F, "OpenMPParallelRegionInNonSPMD",
1827+
RemarkParalleRegion);
1828+
auto RemarkKernel = [&](OptimizationRemarkAnalysis ORA) {
1829+
return ORA << "Target region containing the parallel region that is "
1830+
"specialized. (parallel region ID: "
1831+
<< ore::NV("OpenMPParallelRegion", F->getName())
1832+
<< ", kernel ID: "
1833+
<< ore::NV("OpenMPTargetRegion", K->getName()) << ")";
18381834
};
1839-
emitRemarkOnFunction(K, "OpenMPParallelRegionInNonSPMD", RemarkKernel);
1835+
emitRemark<OptimizationRemarkAnalysis>(K, "OpenMPParallelRegionInNonSPMD",
1836+
RemarkKernel);
18401837
}
18411838

18421839
Module &M = *F->getParent();

llvm/test/Transforms/OpenMP/deduplication_remarks.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ target triple = "x86_64-pc-linux-gnu"
1010
@0 = private unnamed_addr global %struct.ident_t { i32 0, i32 34, i32 0, i32 0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str0, i32 0, i32 0) }, align 8
1111
@.str0 = private unnamed_addr constant [23 x i8] c";unknown;unknown;0;0;;\00", align 1
1212

13-
; CHECK: remark: deduplication_remarks.c:9:10: OpenMP runtime call __kmpc_global_thread_num moved to deduplication_remarks.c:5:10
14-
; CHECK: remark: deduplication_remarks.c:7:10: OpenMP runtime call __kmpc_global_thread_num deduplicated
15-
; CHECK: remark: deduplication_remarks.c:5:10: OpenMP runtime call __kmpc_global_thread_num deduplicated
13+
; CHECK: remark: deduplication_remarks.c:4:0: OpenMP runtime call __kmpc_global_thread_num moved to beginning of OpenMP region
14+
; CHECK: remark: deduplication_remarks.c:4:0: OpenMP runtime call __kmpc_global_thread_num deduplicated
15+
; CHECK: remark: deduplication_remarks.c:4:0: OpenMP runtime call __kmpc_global_thread_num deduplicated
1616
define dso_local void @deduplicate() local_unnamed_addr !dbg !14 {
1717
%1 = tail call i32 @__kmpc_global_thread_num(%struct.ident_t* nonnull @0), !dbg !21
1818
call void @useI32(i32 %1), !dbg !23

llvm/test/Transforms/OpenMP/gpu_kernel_detection_remarks.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
; RUN: opt -passes=openmp-opt-cgscc -pass-remarks=openmp-opt -openmp-print-gpu-kernels -disable-output < %s 2>&1 | FileCheck %s --implicit-check-not=non_kernel
2-
; RUN: opt -openmp-opt-cgscc -pass-remarks=openmp-opt -openmp-print-gpu-kernels -disable-output < %s 2>&1 | FileCheck %s --implicit-check-not=non_kernel
1+
; RUN: opt -passes=openmp-opt-cgscc -pass-remarks-analysis=openmp-opt -openmp-print-gpu-kernels -disable-output < %s 2>&1 | FileCheck %s --implicit-check-not=non_kernel
2+
; RUN: opt -openmp-opt-cgscc -pass-remarks-analysis=openmp-opt -openmp-print-gpu-kernels -disable-output < %s 2>&1 | FileCheck %s --implicit-check-not=non_kernel
33

44
; CHECK-DAG: remark: <unknown>:0:0: OpenMP GPU kernel kernel1
55
; CHECK-DAG: remark: <unknown>:0:0: OpenMP GPU kernel kernel2

llvm/test/Transforms/OpenMP/icv_remarks.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
; RUN: opt -passes=openmp-opt-cgscc -pass-remarks=openmp-opt -openmp-print-icv-values -disable-output < %s 2>&1 | FileCheck %s
2-
; RUN: opt -openmp-opt-cgscc -pass-remarks=openmp-opt -openmp-print-icv-values -disable-output < %s 2>&1 | FileCheck %s
1+
; RUN: opt -passes=openmp-opt-cgscc -pass-remarks-analysis=openmp-opt -openmp-print-icv-values -disable-output < %s 2>&1 | FileCheck %s
2+
; RUN: opt -openmp-opt-cgscc -pass-remarks-analysis=openmp-opt -openmp-print-icv-values -disable-output < %s 2>&1 | FileCheck %s
33

44
; ModuleID = 'icv_remarks.c'
55
source_filename = "icv_remarks.c"

0 commit comments

Comments
 (0)