[llvm] f964417 - Revert "[Pipelines] Introduce DAE after ArgumentPromotion"

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 26 07:37:20 PDT 2022


Saying that a pipeline change "breaks the compiler" is rather 
non-specific and suspicious.  Is there a bug filed with a precise 
description of what went wrong and test case?

Philip

On 8/26/22 03:43, Pavel Samolysov via llvm-commits wrote:
> Author: Pavel Samolysov
> Date: 2022-08-26T13:43:09+03:00
> New Revision: f964417c32d05a88c80db315e97ada639d97eda1
>
> URL: https://github.com/llvm/llvm-project/commit/f964417c32d05a88c80db315e97ada639d97eda1
> DIFF: https://github.com/llvm/llvm-project/commit/f964417c32d05a88c80db315e97ada639d97eda1.diff
>
> LOG: Revert "[Pipelines] Introduce DAE after ArgumentPromotion"
>
> The commit breaks the compiler when a function is used as a function
> parameter (hm... for a function from the standard C library?):
>
> ```
> static float strtof(char *, char *) {}
> void a() { strtof(a, 0); }
> ```
>
> This reverts commit 879f5118fc74657e4a5c4eff6810098e1eed75ac.
>
> Added:
>      
>
> Modified:
>      clang/test/CodeGen/thinlto-distributed-newpm.ll
>      llvm/lib/Passes/PassBuilderPipelines.cpp
>      llvm/test/Other/new-pm-defaults.ll
>      llvm/test/Other/new-pm-lto-defaults.ll
>      llvm/test/Other/new-pm-thinlto-defaults.ll
>      llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
>      llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
>      llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
>      llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
>      llvm/test/Transforms/InstCombine/unused-nonnull.ll
>      llvm/test/Transforms/PhaseOrdering/dce-after-argument-promotion.ll
>
> Removed:
>      
>
>
> ################################################################################
> diff  --git a/clang/test/CodeGen/thinlto-distributed-newpm.ll b/clang/test/CodeGen/thinlto-distributed-newpm.ll
> index 64ac49420cbdc..463fc522c6a28 100644
> --- a/clang/test/CodeGen/thinlto-distributed-newpm.ll
> +++ b/clang/test/CodeGen/thinlto-distributed-newpm.ll
> @@ -34,6 +34,7 @@
>   ; CHECK-O: Running pass: CalledValuePropagationPass
>   ; CHECK-O: Running pass: GlobalOptPass
>   ; CHECK-O: Running pass: PromotePass
> +; CHECK-O: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O: Running pass: InstCombinePass on main
>   ; CHECK-O: Running pass: SimplifyCFGPass on main
>   ; CHECK-O: Running pass: InlinerPass on (main)
> @@ -73,7 +74,6 @@
>   ; CHECK-O: Running pass: LCSSAPass on main
>   ; CHECK-O: Running pass: SimplifyCFGPass on main
>   ; CHECK-O: Running pass: InstCombinePass on main
> -; CHECK-O: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O: Running pass: GlobalOptPass
>   ; CHECK-O: Running pass: GlobalDCEPass
>   ; CHECK-O: Running pass: EliminateAvailableExternallyPass
>
> diff  --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp
> index 2587c8ce900b9..bd07638b37617 100644
> --- a/llvm/lib/Passes/PassBuilderPipelines.cpp
> +++ b/llvm/lib/Passes/PassBuilderPipelines.cpp
> @@ -639,7 +639,7 @@ void PassBuilder::addPGOInstrPasses(ModulePassManager &MPM,
>   
>       FunctionPassManager FPM;
>       FPM.addPass(SROAPass());
> -    FPM.addPass(EarlyCSEPass()); // Catch trivial redundancies.
> +    FPM.addPass(EarlyCSEPass());    // Catch trivial redundancies.
>       FPM.addPass(SimplifyCFGPass(SimplifyCFGOptions().convertSwitchRangeToICmp(
>           true)));                    // Merge & remove basic blocks.
>       FPM.addPass(InstCombinePass()); // Combine silly sequences.
> @@ -734,9 +734,10 @@ PassBuilder::buildInlinerPipeline(OptimizationLevel Level,
>     if (PGOOpt)
>       IP.EnableDeferral = EnablePGOInlineDeferral;
>   
> -  ModuleInlinerWrapperPass MIWP(IP, PerformMandatoryInliningsFirst,
> -                                InlineContext{Phase, InlinePass::CGSCCInliner},
> -                                UseInlineAdvisor, MaxDevirtIterations);
> +  ModuleInlinerWrapperPass MIWP(
> +      IP, PerformMandatoryInliningsFirst,
> +      InlineContext{Phase, InlinePass::CGSCCInliner},
> +      UseInlineAdvisor, MaxDevirtIterations);
>   
>     // Require the GlobalsAA analysis for the module so we can query it within
>     // the CGSCC pipeline.
> @@ -960,6 +961,10 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
>     // constants.
>     MPM.addPass(createModuleToFunctionPassAdaptor(PromotePass()));
>   
> +  // Remove any dead arguments exposed by cleanups and constant folding
> +  // globals.
> +  MPM.addPass(DeadArgumentEliminationPass());
> +
>     // Create a small function pass pipeline to cleanup after all the global
>     // optimizations.
>     FunctionPassManager GlobalCleanupPM;
> @@ -994,10 +999,6 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
>     else
>       MPM.addPass(buildInlinerPipeline(Level, Phase));
>   
> -  // Remove any dead arguments exposed by cleanups, constant folding globals,
> -  // and argument promotion.
> -  MPM.addPass(DeadArgumentEliminationPass());
> -
>     MPM.addPass(CoroCleanupPass());
>   
>     if (EnableMemProfiler && Phase != ThinOrFullLTOPhase::ThinLTOPreLink) {
> @@ -1595,6 +1596,9 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
>     // keep one copy of each constant.
>     MPM.addPass(ConstantMergePass());
>   
> +  // Remove unused arguments from functions.
> +  MPM.addPass(DeadArgumentEliminationPass());
> +
>     // Reduce the code after globalopt and ipsccp.  Both can open up significant
>     // simplification opportunities, and both can propagate functions through
>     // function pointers.  When this happens, we often have to resolve varargs
> @@ -1617,7 +1621,7 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
>         getInlineParamsFromOptLevel(Level),
>         /* MandatoryFirst */ true,
>         InlineContext{ThinOrFullLTOPhase::FullLTOPostLink,
> -                    InlinePass::CGSCCInliner}));
> +                          InlinePass::CGSCCInliner}));
>   
>     // Optimize globals again after we ran the inliner.
>     MPM.addPass(GlobalOptPass());
> @@ -1629,9 +1633,6 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
>     // transform it to pass arguments by value instead of by reference.
>     MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(ArgumentPromotionPass()));
>   
> -  // Remove unused arguments from functions.
> -  MPM.addPass(DeadArgumentEliminationPass());
> -
>     FunctionPassManager FPM;
>     // The IPO Passes may leave cruft around. Clean up after them.
>     FPM.addPass(InstCombinePass());
> @@ -1694,6 +1695,7 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
>     MainFPM.addPass(DSEPass());
>     MainFPM.addPass(MergedLoadStoreMotionPass());
>   
> +
>     if (EnableConstraintElimination)
>       MainFPM.addPass(ConstraintEliminationPass());
>   
> @@ -1718,7 +1720,8 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
>     addVectorPasses(Level, MainFPM, /* IsFullLTO */ true);
>   
>     // Run the OpenMPOpt CGSCC pass again late.
> -  MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(OpenMPOptCGSCCPass()));
> +  MPM.addPass(
> +      createModuleToPostOrderCGSCCPassAdaptor(OpenMPOptCGSCCPass()));
>   
>     invokePeepholeEPCallbacks(MainFPM, Level);
>     MainFPM.addPass(JumpThreadingPass());
>
> diff  --git a/llvm/test/Other/new-pm-defaults.ll b/llvm/test/Other/new-pm-defaults.ll
> index ee721c3ff9556..4ca8ca799f13d 100644
> --- a/llvm/test/Other/new-pm-defaults.ll
> +++ b/llvm/test/Other/new-pm-defaults.ll
> @@ -112,6 +112,7 @@
>   ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
>   ; CHECK-O-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O-NEXT: Running pass: PromotePass
> +; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O-NEXT: Running pass: InstCombinePass
>   ; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
>   ; CHECK-O-NEXT: Running analysis: AAManager
> @@ -218,7 +219,6 @@
>   ; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
>   ; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
>   ; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
> -; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O-NEXT: Running pass: CoroCleanupPass
>   ; CHECK-O-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O-NEXT: Running pass: GlobalDCEPass
>
> diff  --git a/llvm/test/Other/new-pm-lto-defaults.ll b/llvm/test/Other/new-pm-lto-defaults.ll
> index 792d0840d6b96..da66e71a5bf8d 100644
> --- a/llvm/test/Other/new-pm-lto-defaults.ll
> +++ b/llvm/test/Other/new-pm-lto-defaults.ll
> @@ -75,6 +75,7 @@
>   ; CHECK-O23SZ-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O23SZ-NEXT: Running pass: PromotePass
>   ; CHECK-O23SZ-NEXT: Running pass: ConstantMergePass
> +; CHECK-O23SZ-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O23SZ-NEXT: Running pass: InstCombinePass
>   ; CHECK-O3-NEXT: Running pass: AggressiveInstCombinePass
>   ; CHECK-EP-Peephole-NEXT: Running pass: NoOpFunctionPass
> @@ -86,7 +87,6 @@
>   ; CHECK-O23SZ-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O23SZ-NEXT: Running pass: GlobalDCEPass
>   ; CHECK-O23SZ-NEXT: Running pass: ArgumentPromotionPass
> -; CHECK-O23SZ-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O23SZ-NEXT: Running pass: InstCombinePass
>   ; CHECK-EP-Peephole-NEXT: Running pass: NoOpFunctionPass
>   ; CHECK-O23SZ-NEXT: Running pass: JumpThreadingPass
>
> diff  --git a/llvm/test/Other/new-pm-thinlto-defaults.ll b/llvm/test/Other/new-pm-thinlto-defaults.ll
> index e1d822d4975e7..a6d6cdb76c4b1 100644
> --- a/llvm/test/Other/new-pm-thinlto-defaults.ll
> +++ b/llvm/test/Other/new-pm-thinlto-defaults.ll
> @@ -78,6 +78,7 @@
>   ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
>   ; CHECK-O-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O-NEXT: Running pass: PromotePass
> +; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O-NEXT: Running pass: InstCombinePass
>   ; CHECK-PRELINK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
>   ; CHECK-O-NEXT: Running analysis: AAManager
> @@ -187,7 +188,6 @@
>   ; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
>   ; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
>   ; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
> -; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O-NEXT: Running pass: CoroCleanupPass
>   ; CHECK-PRELINK-O-NEXT: Running pass: GlobalOptPass
>   ; CHECK-POSTLINK-O-NEXT: Running pass: GlobalOptPass
>
> diff  --git a/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll b/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
> index a4f1ff543f39d..f301d3de38248 100644
> --- a/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
> +++ b/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
> @@ -48,6 +48,7 @@
>   ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
>   ; CHECK-O-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O-NEXT: Running pass: PromotePass
> +; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O-NEXT: Running pass: InstCombinePass
>   ; CHECK-O-NEXT: Running analysis: AAManager
>   ; CHECK-O-NEXT: Running analysis: BasicAA
> @@ -159,7 +160,6 @@
>   ; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
>   ; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
>   ; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
> -; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O-NEXT: Running pass: CoroCleanupPass
>   ; CHECK-O-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O-NEXT: Running pass: GlobalDCEPass
>
> diff  --git a/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll b/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
> index f31be138aad87..568b1fcf2b849 100644
> --- a/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
> +++ b/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
> @@ -62,6 +62,7 @@
>   ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
>   ; CHECK-O-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O-NEXT: Running pass: PromotePass
> +; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O-NEXT: Running pass: InstCombinePass
>   ; CHECK-O-NEXT: Running analysis: BlockFrequencyAnalysis on foo
>   ; These next two can appear in any order since they are accessed as parameters
> @@ -171,7 +172,6 @@
>   ; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
>   ; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
>   ; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
> -; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O-NEXT: Running pass: CoroCleanupPass
>   ; CHECK-O-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O-NEXT: Running pass: GlobalDCEPass
>
> diff  --git a/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll b/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
> index 812212d56bb05..448eb0e228e59 100644
> --- a/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
> +++ b/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
> @@ -48,6 +48,7 @@
>   ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
>   ; CHECK-O-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O-NEXT: Running pass: PromotePass
> +; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O-NEXT: Running pass: InstCombinePass
>   ; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
>   ; CHECK-O-NEXT: Running analysis: AAManager
> @@ -200,7 +201,6 @@
>   ; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
>   ; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
>   ; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
> -; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O-NEXT: Running pass: CoroCleanupPass
>   ; CHECK-O-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis on bar
>
> diff  --git a/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll b/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
> index 0d51942672397..3ee1ba6f90591 100644
> --- a/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
> +++ b/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
> @@ -58,6 +58,7 @@
>   ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
>   ; CHECK-O-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O-NEXT: Running pass: PromotePass
> +; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O-NEXT: Running pass: InstCombinePass
>   ; CHECK-O-NEXT: Running analysis: BlockFrequencyAnalysis on foo
>   ; These next two can appear in any order since they are accessed as parameters
> @@ -165,7 +166,6 @@
>   ; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ShouldNotRunFunctionPassesAnalysis
>   ; CHECK-O-NEXT: Invalidating analysis: ShouldNotRunFunctionPassesAnalysis
>   ; CHECK-O-NEXT: Invalidating analysis: InlineAdvisorAnalysis
> -; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
>   ; CHECK-O-NEXT: Running pass: CoroCleanupPass
>   ; CHECK-O-NEXT: Running pass: GlobalOptPass
>   ; CHECK-O-NEXT: Running pass: AnnotationRemarksPass on foo
>
> diff  --git a/llvm/test/Transforms/InstCombine/unused-nonnull.ll b/llvm/test/Transforms/InstCombine/unused-nonnull.ll
> index 545876a166ed3..f29485218abe5 100644
> --- a/llvm/test/Transforms/InstCombine/unused-nonnull.ll
> +++ b/llvm/test/Transforms/InstCombine/unused-nonnull.ll
> @@ -9,7 +9,7 @@ target triple = "x86_64-unknown-linux-gnu"
>   
>   define i32 @main(i32 %argc, i8** %argv) #0 {
>   ; CHECK-LABEL: define {{[^@]+}}@main
> -; CHECK-SAME: (i32 [[ARGC:%.*]], i8** nocapture readonly [[ARGV:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
> +; CHECK-SAME: (i32 [[ARGC:%.*]], i8** nocapture readnone [[ARGV:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
>   ; CHECK-NEXT:  entry:
>   ; CHECK-NEXT:    [[TMP0:%.*]] = icmp slt i32 [[ARGC]], 2
>   ; CHECK-NEXT:    [[SPEC_SELECT:%.*]] = select i1 [[TMP0]], i32 0, i32 [[ARGC]]
> @@ -37,8 +37,7 @@ done:
>   
>   define i32 @compute(i8* noundef nonnull %ptr, i32 %x) #1 {
>   ; CHECK-LABEL: define {{[^@]+}}@compute
> -; CHECK-SAME: (i8* nocapture noundef nonnull readnone [[PTR:%.*]], i32 returned [[X:%.*]])
> -; CHECK-SAME:  local_unnamed_addr #[[ATTR1:[0-9]+]] {
> +; CHECK-SAME: (i8* nocapture nonnull readnone [[PTR:%.*]], i32 returned [[X:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
>   ; CHECK-NEXT:    ret i32 [[X]]
>   ;
>     ret i32 %x
>
> diff  --git a/llvm/test/Transforms/PhaseOrdering/dce-after-argument-promotion.ll b/llvm/test/Transforms/PhaseOrdering/dce-after-argument-promotion.ll
> index 3f7c224985166..8d0135c9566ba 100644
> --- a/llvm/test/Transforms/PhaseOrdering/dce-after-argument-promotion.ll
> +++ b/llvm/test/Transforms/PhaseOrdering/dce-after-argument-promotion.ll
> @@ -9,7 +9,7 @@
>   
>   define internal void @f(%struct.ss* byval(%struct.ss) align 8 %b, i32* byval(i32) align 4 %X) noinline nounwind  {
>   ; CHECK-LABEL: define {{[^@]+}}@f
> -; CHECK-SAME: (i32 [[B_0:%.*]]){{[^#]*}} #[[ATTR0:[0-9]+]] {
> +; CHECK-SAME: (i32 [[B_0:%.*]], i32 [[X:%.*]]){{[^#]*}} #[[ATTR0:[0-9]+]] {
>   ; CHECK-NEXT:  entry:
>   ; CHECK-NEXT:    [[TEMP:%.*]] = add i32 [[B_0]], 1
>   ; CHECK-NEXT:    store i32 [[TEMP]], i32* [[DUMMY]], align 4
> @@ -28,7 +28,8 @@ define i32 @test(i32* %X) {
>   ; CHECK-LABEL: define {{[^@]+}}@test
>   ; CHECK-SAME: (i32* {{[^%]*}} [[X:%.*]]){{[^#]*}} #[[ATTR1:[0-9]+]] {
>   ; CHECK-NEXT:  entry:
> -; CHECK-NEXT:    tail call {{.*}}void @f(i32 1)
> +; CHECK-NEXT:    [[X_VAL:%.*]] = load i32, i32* [[X]], align 4
> +; CHECK-NEXT:    tail call {{.*}}void @f(i32 1, i32 [[X_VAL]])
>   ; CHECK-NEXT:    ret i32 0
>   ;
>   entry:
>
>
>          
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list