[llvm] r338384 - [MemDep] Use PhiValuesAnalysis to improve alias analysis results

Mikael Holmén via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 7 00:35:27 PDT 2018


Hi John,

With this commit we've seen instcombine crash in a number of different 
ways (asserts, SEGVs). E.g. if I do the following on trunk now

opt -S -o - bbi-16681.ll -memdep -instcombine

I get a SEGV

Stack dump:
0.      Program arguments: build-all-Debug/bin/opt -S -o - bbi-16681.ll 
-memdep -instcombine
1.      Running pass 'Function Pass Manager' on module 'bbi-16681.ll'.
2.      Running pass 'Combine redundant instructions' on function '@main'
build-all-Debug/bin/opt(_ZN4llvm3sys15PrintStackTraceERNS_11raw_ostreamE+0x3c)[0x3744bcc]
build-all-Debug/bin/opt[0x3744d79]
build-all-Debug/bin/opt(_ZN4llvm3sys17RunSignalHandlersEv+0x7e)[0x3742fce]
build-all-Debug/bin/opt[0x3745c0a]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x10330)[0x7fce168ea330]
build-all-Debug/bin/opt[0xc279fc]
build-all-Debug/bin/opt[0xca14d5]
build-all-Debug/bin/opt[0x2e99c00]
build-all-Debug/bin/opt(_ZNK4llvm5Value35stripPointerCastsAndInvariantGroupsEv+0x15)[0x2e99bd5]
build-all-Debug/bin/opt(_ZN4llvm13BasicAAResult10aliasCheckEPKNS_5ValueEmNS_9AAMDNodesES3_mS4_S3_S3_+0x88)[0x233da08]
build-all-Debug/bin/opt(_ZN4llvm13BasicAAResult8aliasPHIEPKNS_7PHINodeEmRKNS_9AAMDNodesEPKNS_5ValueEmS6_S9_+0x945)[0x2342345]
build-all-Debug/bin/opt(_ZN4llvm13BasicAAResult10aliasCheckEPKNS_5ValueEmNS_9AAMDNodesES3_mS4_S3_S3_+0x753)[0x233e0d3]
build-all-Debug/bin/opt(_ZN4llvm13BasicAAResult5aliasERKNS_14MemoryLocationES3_+0x1eb)[0x233d8bb]
build-all-Debug/bin/opt[0x231eb29]
build-all-Debug/bin/opt(_ZN4llvm9AAResults5aliasERKNS_14MemoryLocationES3_+0x89)[0x23173e9]
build-all-Debug/bin/opt(_ZN4llvm9AAResults13getModRefInfoENS_17ImmutableCallSiteERKNS_14MemoryLocationE+0x289)[0x23180d9]
build-all-Debug/bin/opt[0x15276ed]
build-all-Debug/bin/opt[0x15274c9]
build-all-Debug/bin/opt[0x24f5e07]
build-all-Debug/bin/opt(_ZN4llvm25FindAvailablePtrLoadStoreEPNS_5ValueEPNS_4TypeEbPNS_10BasicBlockERNS_14ilist_iteratorINS_12ilist_detail12node_optionsINS_11InstructionELb1ELb0EvEELb0ELb0EEEjPNS_9AAResultsEPbPj+0x409)[0x24f5979]
build-all-Debug/bin/opt(_ZN4llvm24FindAvailableLoadedValueEPNS_8LoadInstEPNS_10BasicBlockERNS_14ilist_iteratorINS_12ilist_detail12node_optionsINS_11InstructionELb1ELb0EvEELb0ELb0EEEjPNS_9AAResultsEPbPj+0xa6)[0x24f5556]
build-all-Debug/bin/opt[0x30eef35]
build-all-Debug/bin/opt[0x305f898]
build-all-Debug/bin/opt[0x305ed8f]
build-all-Debug/bin/opt[0x305976c]
build-all-Debug/bin/opt[0x305a3e9]
build-all-Debug/bin/opt(_ZN4llvm24InstructionCombiningPass13runOnFunctionERNS_8FunctionE+0x15b)[0x305a66b]
build-all-Debug/bin/opt(_ZN4llvm13FPPassManager13runOnFunctionERNS_8FunctionE+0x1eb)[0x2dfd62b]
build-all-Debug/bin/opt(_ZN4llvm13FPPassManager11runOnModuleERNS_6ModuleE+0x75)[0x2dfd9a5]
build-all-Debug/bin/opt[0x2dfe20e]
build-all-Debug/bin/opt(_ZN4llvm6legacy15PassManagerImpl3runERNS_6ModuleE+0x17f)[0x2dfdcaf]
build-all-Debug/bin/opt(_ZN4llvm6legacy11PassManager3runERNS_6ModuleE+0x21)[0x2dfe7a1]
build-all-Debug/bin/opt(main+0x2ca1)[0xc5e431]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7fce154c4f45]
build-all-Debug/bin/opt[0xc1d0a9]
Segmentation fault

Also, if I run valgrind on it I get tons of complaints so something 
nasty is definitely going on.

If I revert your commit it doesn't crash and valgrind doesn't complain 
anymore.

Regards,
Mikael


On 07/31/2018 04:19 PM, John Brawn via llvm-commits wrote:
> Author: john.brawn
> Date: Tue Jul 31 07:19:29 2018
> New Revision: 338384
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=338384&view=rev
> Log:
> [MemDep] Use PhiValuesAnalysis to improve alias analysis results
> 
> This is being done in order to make GVN able to better optimize certain inputs.
> MemDep doesn't use PhiValues directly, but does need to notifiy it when things
> get invalidated.
> 
> Differential Revision: https://reviews.llvm.org/D48489
> 
> Modified:
>      llvm/trunk/include/llvm/Analysis/MemoryDependenceAnalysis.h
>      llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp
>      llvm/trunk/test/Other/new-pm-defaults.ll
>      llvm/trunk/test/Other/new-pm-lto-defaults.ll
>      llvm/trunk/test/Other/new-pm-thinlto-defaults.ll
>      llvm/trunk/test/Other/opt-O2-pipeline.ll
>      llvm/trunk/test/Other/opt-O3-pipeline.ll
>      llvm/trunk/test/Other/opt-Os-pipeline.ll
>      llvm/trunk/test/Transforms/GVN/PRE/pre-after-rle.ll
> 
> Modified: llvm/trunk/include/llvm/Analysis/MemoryDependenceAnalysis.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/MemoryDependenceAnalysis.h?rev=338384&r1=338383&r2=338384&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/MemoryDependenceAnalysis.h (original)
> +++ llvm/trunk/include/llvm/Analysis/MemoryDependenceAnalysis.h Tue Jul 31 07:19:29 2018
> @@ -44,6 +44,7 @@ class Instruction;
>   class LoadInst;
>   class PHITransAddr;
>   class TargetLibraryInfo;
> +class PhiValues;
>   class Value;
>   
>   /// A memory dependence query can return one of three different answers.
> @@ -360,13 +361,14 @@ private:
>     AssumptionCache ∾
>     const TargetLibraryInfo &TLI;
>     DominatorTree &DT;
> +  PhiValues &PV;
>     PredIteratorCache PredCache;
>   
>   public:
>     MemoryDependenceResults(AliasAnalysis &AA, AssumptionCache &AC,
>                             const TargetLibraryInfo &TLI,
> -                          DominatorTree &DT)
> -      : AA(AA), AC(AC), TLI(TLI), DT(DT) {}
> +                          DominatorTree &DT, PhiValues &PV)
> +      : AA(AA), AC(AC), TLI(TLI), DT(DT), PV(PV) {}
>   
>     /// Handle invalidation in the new PM.
>     bool invalidate(Function &F, const PreservedAnalyses &PA,
> 
> Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp?rev=338384&r1=338383&r2=338384&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp (original)
> +++ llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Tue Jul 31 07:19:29 2018
> @@ -26,6 +26,7 @@
>   #include "llvm/Analysis/MemoryLocation.h"
>   #include "llvm/Analysis/OrderedBasicBlock.h"
>   #include "llvm/Analysis/PHITransAddr.h"
> +#include "llvm/Analysis/PhiValues.h"
>   #include "llvm/Analysis/TargetLibraryInfo.h"
>   #include "llvm/Analysis/ValueTracking.h"
>   #include "llvm/IR/Attributes.h"
> @@ -1513,6 +1514,8 @@ void MemoryDependenceResults::invalidate
>     RemoveCachedNonLocalPointerDependencies(ValueIsLoadPair(Ptr, false));
>     // Flush load info for the pointer.
>     RemoveCachedNonLocalPointerDependencies(ValueIsLoadPair(Ptr, true));
> +  // Invalidate phis that use the pointer.
> +  PV.invalidateValue(Ptr);
>   }
>   
>   void MemoryDependenceResults::invalidateCachedPredecessors() {
> @@ -1671,6 +1674,9 @@ void MemoryDependenceResults::removeInst
>       }
>     }
>   
> +  // Invalidate phis that use the removed instruction.
> +  PV.invalidateValue(RemInst);
> +
>     assert(!NonLocalDeps.count(RemInst) && "RemInst got reinserted?");
>     LLVM_DEBUG(verifyRemoved(RemInst));
>   }
> @@ -1730,7 +1736,8 @@ MemoryDependenceAnalysis::run(Function &
>     auto &AC = AM.getResult<AssumptionAnalysis>(F);
>     auto &TLI = AM.getResult<TargetLibraryAnalysis>(F);
>     auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
> -  return MemoryDependenceResults(AA, AC, TLI, DT);
> +  auto &PV = AM.getResult<PhiValuesAnalysis>(F);
> +  return MemoryDependenceResults(AA, AC, TLI, DT, PV);
>   }
>   
>   char MemoryDependenceWrapperPass::ID = 0;
> @@ -1741,6 +1748,7 @@ INITIALIZE_PASS_DEPENDENCY(AssumptionCac
>   INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass)
>   INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
>   INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
> +INITIALIZE_PASS_DEPENDENCY(PhiValuesWrapperPass)
>   INITIALIZE_PASS_END(MemoryDependenceWrapperPass, "memdep",
>                       "Memory Dependence Analysis", false, true)
>   
> @@ -1758,6 +1766,7 @@ void MemoryDependenceWrapperPass::getAna
>     AU.setPreservesAll();
>     AU.addRequired<AssumptionCacheTracker>();
>     AU.addRequired<DominatorTreeWrapperPass>();
> +  AU.addRequired<PhiValuesWrapperPass>();
>     AU.addRequiredTransitive<AAResultsWrapperPass>();
>     AU.addRequiredTransitive<TargetLibraryInfoWrapperPass>();
>   }
> @@ -1773,7 +1782,8 @@ bool MemoryDependenceResults::invalidate
>     // Check whether the analyses we depend on became invalid for any reason.
>     if (Inv.invalidate<AAManager>(F, PA) ||
>         Inv.invalidate<AssumptionAnalysis>(F, PA) ||
> -      Inv.invalidate<DominatorTreeAnalysis>(F, PA))
> +      Inv.invalidate<DominatorTreeAnalysis>(F, PA) ||
> +      Inv.invalidate<PhiValuesAnalysis>(F, PA))
>       return true;
>   
>     // Otherwise this analysis result remains valid.
> @@ -1789,6 +1799,7 @@ bool MemoryDependenceWrapperPass::runOnF
>     auto &AC = getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
>     auto &TLI = getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
>     auto &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
> -  MemDep.emplace(AA, AC, TLI, DT);
> +  auto &PV = getAnalysis<PhiValuesWrapperPass>().getResult();
> +  MemDep.emplace(AA, AC, TLI, DT, PV);
>     return false;
>   }
> 
> Modified: llvm/trunk/test/Other/new-pm-defaults.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/new-pm-defaults.ll?rev=338384&r1=338383&r2=338384&view=diff
> ==============================================================================
> --- llvm/trunk/test/Other/new-pm-defaults.ll (original)
> +++ llvm/trunk/test/Other/new-pm-defaults.ll Tue Jul 31 07:19:29 2018
> @@ -170,17 +170,22 @@
>   ; CHECK-Os-NEXT: Running pass: MergedLoadStoreMotionPass
>   ; CHECK-Os-NEXT: Running pass: GVN
>   ; CHECK-Os-NEXT: Running analysis: MemoryDependenceAnalysis
> +; CHECK-Os-NEXT: Running analysis: PhiValuesAnalysis
>   ; CHECK-Oz-NEXT: Running pass: MergedLoadStoreMotionPass
>   ; CHECK-Oz-NEXT: Running pass: GVN
>   ; CHECK-Oz-NEXT: Running analysis: MemoryDependenceAnalysis
> +; CHECK-Oz-NEXT: Running analysis: PhiValuesAnalysis
>   ; CHECK-O2-NEXT: Running pass: MergedLoadStoreMotionPass
>   ; CHECK-O2-NEXT: Running pass: GVN
>   ; CHECK-O2-NEXT: Running analysis: MemoryDependenceAnalysis
> +; CHECK-O2-NEXT: Running analysis: PhiValuesAnalysis
>   ; CHECK-O3-NEXT: Running pass: MergedLoadStoreMotionPass
>   ; CHECK-O3-NEXT: Running pass: GVN
>   ; CHECK-O3-NEXT: Running analysis: MemoryDependenceAnalysis
> +; CHECK-O3-NEXT: Running analysis: PhiValuesAnalysis
>   ; CHECK-O-NEXT: Running pass: MemCpyOptPass
>   ; CHECK-O1-NEXT: Running analysis: MemoryDependenceAnalysis
> +; CHECK-O1-NEXT: Running analysis: PhiValuesAnalysis
>   ; CHECK-O-NEXT: Running pass: SCCPPass
>   ; CHECK-O-NEXT: Running pass: BDCEPass
>   ; CHECK-O-NEXT: Running analysis: DemandedBitsAnalysis
> 
> Modified: llvm/trunk/test/Other/new-pm-lto-defaults.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/new-pm-lto-defaults.ll?rev=338384&r1=338383&r2=338384&view=diff
> ==============================================================================
> --- llvm/trunk/test/Other/new-pm-lto-defaults.ll (original)
> +++ llvm/trunk/test/Other/new-pm-lto-defaults.ll Tue Jul 31 07:19:29 2018
> @@ -81,6 +81,7 @@
>   ; CHECK-O2-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdaptor<{{.*}}PostOrderFunctionAttrsPass>
>   ; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}>
>   ; CHECK-O2-NEXT: Running analysis: MemoryDependenceAnalysis
> +; CHECK-O2-NEXT: Running analysis: PhiValuesAnalysis
>   ; CHECK-O2-NEXT: Running analysis: DemandedBitsAnalysis
>   ; CHECK-O2-NEXT: Running pass: CrossDSOCFIPass
>   ; CHECK-O2-NEXT: Running pass: LowerTypeTestsPass
> 
> Modified: llvm/trunk/test/Other/new-pm-thinlto-defaults.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/new-pm-thinlto-defaults.ll?rev=338384&r1=338383&r2=338384&view=diff
> ==============================================================================
> --- llvm/trunk/test/Other/new-pm-thinlto-defaults.ll (original)
> +++ llvm/trunk/test/Other/new-pm-thinlto-defaults.ll Tue Jul 31 07:19:29 2018
> @@ -152,17 +152,22 @@
>   ; CHECK-Os-NEXT: Running pass: MergedLoadStoreMotionPass
>   ; CHECK-Os-NEXT: Running pass: GVN
>   ; CHECK-Os-NEXT: Running analysis: MemoryDependenceAnalysis
> +; CHECK-Os-NEXT: Running analysis: PhiValuesAnalysis
>   ; CHECK-Oz-NEXT: Running pass: MergedLoadStoreMotionPass
>   ; CHECK-Oz-NEXT: Running pass: GVN
>   ; CHECK-Oz-NEXT: Running analysis: MemoryDependenceAnalysis
> +; CHECK-Oz-NEXT: Running analysis: PhiValuesAnalysis
>   ; CHECK-O2-NEXT: Running pass: MergedLoadStoreMotionPass
>   ; CHECK-O2-NEXT: Running pass: GVN
>   ; CHECK-O2-NEXT: Running analysis: MemoryDependenceAnalysis
> +; CHECK-O2-NEXT: Running analysis: PhiValuesAnalysis
>   ; CHECK-O3-NEXT: Running pass: MergedLoadStoreMotionPass
>   ; CHECK-O3-NEXT: Running pass: GVN
>   ; CHECK-O3-NEXT: Running analysis: MemoryDependenceAnalysis
> +; CHECK-O3-NEXT: Running analysis: PhiValuesAnalysis
>   ; CHECK-O-NEXT: Running pass: MemCpyOptPass
>   ; CHECK-O1-NEXT: Running analysis: MemoryDependenceAnalysis
> +; CHECK-O1-NEXT: Running analysis: PhiValuesAnalysis
>   ; CHECK-O-NEXT: Running pass: SCCPPass
>   ; CHECK-O-NEXT: Running pass: BDCEPass
>   ; CHECK-O-NEXT: Running analysis: DemandedBitsAnalysis
> 
> Modified: llvm/trunk/test/Other/opt-O2-pipeline.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/opt-O2-pipeline.ll?rev=338384&r1=338383&r2=338384&view=diff
> ==============================================================================
> --- llvm/trunk/test/Other/opt-O2-pipeline.ll (original)
> +++ llvm/trunk/test/Other/opt-O2-pipeline.ll Tue Jul 31 07:19:29 2018
> @@ -121,6 +121,7 @@
>   ; CHECK-NEXT:           Delete dead loops
>   ; CHECK-NEXT:           Unroll loops
>   ; CHECK-NEXT:         MergedLoadStoreMotion
> +; CHECK-NEXT:         Phi Values Analysis
>   ; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
>   ; CHECK-NEXT:         Function Alias Analysis Results
>   ; CHECK-NEXT:         Memory Dependence Analysis
> @@ -128,6 +129,7 @@
>   ; CHECK-NEXT:         Lazy Block Frequency Analysis
>   ; CHECK-NEXT:         Optimization Remark Emitter
>   ; CHECK-NEXT:         Global Value Numbering
> +; CHECK-NEXT:         Phi Values Analysis
>   ; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
>   ; CHECK-NEXT:         Function Alias Analysis Results
>   ; CHECK-NEXT:         Memory Dependence Analysis
> @@ -147,6 +149,7 @@
>   ; CHECK-NEXT:         Value Propagation
>   ; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
>   ; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Phi Values Analysis
>   ; CHECK-NEXT:         Memory Dependence Analysis
>   ; CHECK-NEXT:         Dead Store Elimination
>   ; CHECK-NEXT:         Natural Loop Information
> 
> Modified: llvm/trunk/test/Other/opt-O3-pipeline.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/opt-O3-pipeline.ll?rev=338384&r1=338383&r2=338384&view=diff
> ==============================================================================
> --- llvm/trunk/test/Other/opt-O3-pipeline.ll (original)
> +++ llvm/trunk/test/Other/opt-O3-pipeline.ll Tue Jul 31 07:19:29 2018
> @@ -125,6 +125,7 @@
>   ; CHECK-NEXT:           Delete dead loops
>   ; CHECK-NEXT:           Unroll loops
>   ; CHECK-NEXT:         MergedLoadStoreMotion
> +; CHECK-NEXT:         Phi Values Analysis
>   ; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
>   ; CHECK-NEXT:         Function Alias Analysis Results
>   ; CHECK-NEXT:         Memory Dependence Analysis
> @@ -132,6 +133,7 @@
>   ; CHECK-NEXT:         Lazy Block Frequency Analysis
>   ; CHECK-NEXT:         Optimization Remark Emitter
>   ; CHECK-NEXT:         Global Value Numbering
> +; CHECK-NEXT:         Phi Values Analysis
>   ; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
>   ; CHECK-NEXT:         Function Alias Analysis Results
>   ; CHECK-NEXT:         Memory Dependence Analysis
> @@ -151,6 +153,7 @@
>   ; CHECK-NEXT:         Value Propagation
>   ; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
>   ; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Phi Values Analysis
>   ; CHECK-NEXT:         Memory Dependence Analysis
>   ; CHECK-NEXT:         Dead Store Elimination
>   ; CHECK-NEXT:         Natural Loop Information
> 
> Modified: llvm/trunk/test/Other/opt-Os-pipeline.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/opt-Os-pipeline.ll?rev=338384&r1=338383&r2=338384&view=diff
> ==============================================================================
> --- llvm/trunk/test/Other/opt-Os-pipeline.ll (original)
> +++ llvm/trunk/test/Other/opt-Os-pipeline.ll Tue Jul 31 07:19:29 2018
> @@ -108,6 +108,7 @@
>   ; CHECK-NEXT:           Delete dead loops
>   ; CHECK-NEXT:           Unroll loops
>   ; CHECK-NEXT:         MergedLoadStoreMotion
> +; CHECK-NEXT:         Phi Values Analysis
>   ; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
>   ; CHECK-NEXT:         Function Alias Analysis Results
>   ; CHECK-NEXT:         Memory Dependence Analysis
> @@ -115,6 +116,7 @@
>   ; CHECK-NEXT:         Lazy Block Frequency Analysis
>   ; CHECK-NEXT:         Optimization Remark Emitter
>   ; CHECK-NEXT:         Global Value Numbering
> +; CHECK-NEXT:         Phi Values Analysis
>   ; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
>   ; CHECK-NEXT:         Function Alias Analysis Results
>   ; CHECK-NEXT:         Memory Dependence Analysis
> @@ -134,6 +136,7 @@
>   ; CHECK-NEXT:         Value Propagation
>   ; CHECK-NEXT:         Basic Alias Analysis (stateless AA impl)
>   ; CHECK-NEXT:         Function Alias Analysis Results
> +; CHECK-NEXT:         Phi Values Analysis
>   ; CHECK-NEXT:         Memory Dependence Analysis
>   ; CHECK-NEXT:         Dead Store Elimination
>   ; CHECK-NEXT:         Natural Loop Information
> 
> Modified: llvm/trunk/test/Transforms/GVN/PRE/pre-after-rle.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVN/PRE/pre-after-rle.ll?rev=338384&r1=338383&r2=338384&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/GVN/PRE/pre-after-rle.ll (original)
> +++ llvm/trunk/test/Transforms/GVN/PRE/pre-after-rle.ll Tue Jul 31 07:19:29 2018
> @@ -63,10 +63,12 @@ preheader:
>     %cmp = icmp slt i32 1, %h
>     br i1 %cmp, label %body, label %exit
>   
> -; Alias analysis currently can't figure out %width doesn't alias %s, so just
> -; check that the redundant load has been removed.
> +; CHECK-LABEL: preheader.body_crit_edge:
> +; CHECK: load i32, i32* %width, align 8
> +
>   ; CHECK-LABEL: body:
>   ; CHECK-NOT: load i32*, i32** %start, align 8
> +; CHECK-NOT: load i32, i32* %width, align 8
>   body:
>     %j = phi i32 [ 0, %preheader ], [ %j.next, %body ]
>     %s = load i32*, i32** %start, align 8
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> 
-------------- next part --------------
target datalayout = "p:8:8-n8"
target triple = "x86_64-unknown-linux-gnu"

@c = external global i8*, align 1

define void @main() {
entry:
  %a = alloca i8, align 1
  %0 = load i8*, i8** @c, align 1
  %1 = bitcast i8* %0 to i8**
  br label %for.cond

for.cond:                                         ; preds = %for.body, %entry
  %d.0 = phi i8** [ %1, %entry ], [ null, %for.body ]
  br i1 undef, label %for.body, label %for.cond.cleanup

for.body:                                         ; preds = %for.cond
  store volatile i8 undef, i8* %a, align 1
  br label %for.cond

for.cond.cleanup:                                 ; preds = %for.cond
  call void @llvm.lifetime.end.p0i8(i64 1, i8* %a)
  %2 = load i8*, i8** %d.0, align 1
  store i8* %2, i8** @c, align 1
  ret void
}

declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)


More information about the llvm-commits mailing list