[polly] r360454 - [ZoneAlgo] Fix PHI inconsistency in invalid contexts.

Eli Friedman via llvm-commits llvm-commits at lists.llvm.org
Tue May 21 12:29:46 PDT 2019


I usually try to reduce testcases a little bit more by hand, then I clean up the instruction names names using "opt -strip -instnamer".

I've been considering trying to automate some of the changes I find myself making by repeatedly (in particular, stripping certain metadata, replacing an instruction with one of its operands, and replacing an instruction with a function argument), but I haven't written a patch yet.

-Eli

> -----Original Message-----
> From: Michael Kruse <llvm at meinersbur.de>
> Sent: Tuesday, May 21, 2019 12:18 PM
> To: Eli Friedman <efriedma at quicinc.com>
> Cc: Michael Kruse <llvm at meinersbur.de>; llvm-commits <llvm-
> commits at lists.llvm.org>
> Subject: [EXT] Re: [polly] r360454 - [ZoneAlgo] Fix PHI inconsistency in invalid
> contexts.
> 
> Should be fixed in r361290. Thank you for your reproducer.
> 
> Your reproducers are amazingly clean. Do you use an improved version
> of bugpoint?
> 
> Michael
> 
> Am Di., 21. Mai 2019 um 13:33 Uhr schrieb Eli Friedman
> <efriedma at quicinc.com>:
> >
> > Attached reproducer; crashes with "opt -polly-delicm -polly-process-
> unprofitable".
> >
> > -Eli
> >
> > > -----Original Message-----
> > > From: Michael Kruse <llvm at meinersbur.de>
> > > Sent: Tuesday, May 21, 2019 9:02 AM
> > > To: Michael Kruse <llvm at meinersbur.de>
> > > Cc: Eli Friedman <efriedma at quicinc.com>; llvm-commits <llvm-
> > > commits at lists.llvm.org>
> > > Subject: [EXT] Re: [polly] r360454 - [ZoneAlgo] Fix PHI inconsistency in invalid
> > > contexts.
> > >
> > > Hi,
> > >
> > > the buildbot still seems to fail at another problem. Excerpt from the
> > > log below. The error is typical for when the result of an operation is
> > > empty, so instead of calling isl_map_from_union_map, polly::singleton
> > > should be used. I cannot find where in collapseScalarsToStore it is
> > > used, probably in something that is inlined. Can you send me a
> > > reproducer?
> > >
> > > Michael
> > >
> > >
> > > FAILED:
> > >
> out/target/product/angler/obj_arm/SHARED_LIBRARIES/libopus_intermediates/
> > > silk/fixed/burg_modified_FIX.o
> > > /bin/bash -c "PWD=/proc/self/cwd ulimit -t 240;
> > > llvm.inst/bin/clang -I external/libopus/include -I
> > > external/libopus/src -I external/libopus/silk -I external/libopus/celt
> > > -I external/libopus/silk/fixed -I external/libogg/include -I
> > > external/libopus -I
> > >
> out/target/product/angler/obj_arm/SHARED_LIBRARIES/libopus_intermediates
> > > -I out/target/product/angler/gen/SHARED_LIBRARIES/libopus_intermediates
> > > -I libnativehelper/include/nativehelper \$(cat
> > >
> out/target/product/angler/obj_arm/SHARED_LIBRARIES/libopus_intermediates/
> > > import_includes)
> > >  -I system/core/include -I system/media/audio/include -I
> > > hardware/libhardware/include -I hardware/libhardware_legacy/include -I
> > > hardware/ril/include -I libnativehelper/include -I
> > > frameworks/native/include -I frameworks/native/opengl/include -isystem
> > > frameworks/av/include -isystem out/target/product/angler/obj/include
> > > -isystem device/huawei/angler/kernel-headers -isystem
> > > hardware/qcom/msm8994/kernel-headers -isystem
> > > bionic/libc/arch-arm/include -isystem bionic/libc/include -isystem
> > > bionic/libc/kernel/uapi -isystem bionic/libc/kernel/uapi/asm-arm
> > > -isystem bionic/libc/kernel/android/uapi -c  -fno-exceptions
> > > -Wno-multichar -ffunction-sections -fdata-sections -funwind-tables
> > > -fstack-protector-strong -Wa,--noexecstack -Werror=format-security
> > > -D_FORTIFY_SOURCE=2 -fno-short-enums -no-canonical-prefixes -
> DNDEBUG
> > > -g -Wstrict-aliasing=2 -DANDROID -fmessage-length=0 -W -Wall
> > > -Wno-unused -Winit-self -Wpointer-arith -DNDEBUG -UDEBUG
> > > -fdebug-prefix-map=/proc/self/cwd=
> > > -D__compiler_offsetof=__builtin_offsetof -Werror=int-conversion
> > > -Wno-reserved-id-macro -Wno-format-pedantic
> > > -Wno-unused-command-line-argument -fcolor-diagnostics
> > > -Wno-expansion-to-defined -Werror=return-type -Werror=non-virtual-dtor
> > > -Werror=address -Werror=sequence-point -Werror=date-time -nostdlibinc
> > > -msoft-float -mfloat-abi=softfp -mfpu=neon -mcpu=cortex-a7
> > > -D__ARM_FEATURE_LPAE=1 -target arm-linux-androideabi
> > > -Bprebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/arm-linux-
> > > androideabi/bin
> > >   -std=gnu99 -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing
> > > -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -
> > > D_LARGEFILE_SOURCE=1
> > > -D_FILE_OFFSET_BITS=64 -Drestrict='' -D__EMX__ -
> DOPUS_BUILD
> > > -DFIXED_POINT -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -O2
> > > -fno-math-errno -fPIC -DOPUS_ARM_ASM -DOPUS_ARM_INLINE_ASM
> > > -DOPUS_ARM_MAY_HAVE_EDSP -DOPUS_ARM_INLINE_EDSP
> > > -DOPUS_ARM_MAY_HAVE_MEDIA -DOPUS_ARM_INLINE_MEDIA -
> > > DOPUS_HAVE_RTCD
> > > -DOPUS_ARM_MAY_HAVE_NEON -DOPUS_ARM_MAY_HAVE_NEON_INTR
> > > -DOPUS_ARM_PRESUME_NEON -DOPUS_ARM_INLINE_NEON -
> > > D_USING_LIBCXX
> > > -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast
> > > -Werror=address-of-temporary -Werror=return-type -Wno-error -O3 -mllvm
> > > -polly -mllvm -polly-position=before-vectorizer -mllvm
> > > -polly-process-unprofitable -MD -MF
> > >
> out/target/product/angler/obj_arm/SHARED_LIBRARIES/libopus_intermediates/
> > > silk/fixed/burg_modified_FIX.d
> > > -o
> > >
> out/target/product/angler/obj_arm/SHARED_LIBRARIES/libopus_intermediates/
> > > silk/fixed/burg_modified_FIX.o
> > > external/libopus/silk/fixed/burg_modified_FIX.c"
> > > /var/lib/buildbot/slaves/hexagon-build-
> > > 03/aosp/llvm.src/tools/polly/lib/External/isl/isl_union_map.c:622:
> > > union map needs to contain elements in exactly one space
> > > Stack dump:
> > > 0. Program arguments: llvm.inst/bin/clang -cc1 -triple
> > > thumbv7-unknown-linux-android -emit-obj -mnoexecstack -disable-free
> > > -main-file-name burg_modified_FIX.c -mrelocation-model pic -pic-level
> > > 2 -mthread-model posix -relaxed-aliasing -masm-verbose
> > > -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu
> > > cortex-a7 -target-feature +soft-float-abi -target-feature -crc
> > > -target-feature +dsp -target-feature -fp16fml -target-feature -ras
> > > -target-feature -dotprod -target-feature +hwdiv-arm -target-feature
> > > +hwdiv -target-feature -fp-only-sp -target-feature -d16
> > > -target-feature +vfp3 -target-feature -fp16 -target-feature -vfp4
> > > -target-feature -fp-armv8 -target-feature +neon -target-feature
> > > -crypto -target-abi aapcs-linux -mfloat-abi soft
> > > -fallow-half-arguments-and-returns -dwarf-column-info
> > > -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb
> > > -ffunction-sections -fdata-sections -coverage-notes-file
> > > /var/lib/buildbot/slaves/hexagon-build-
> > >
> 03/aosp/out/target/product/angler/obj_arm/SHARED_LIBRARIES/libopus_inter
> > > mediates/silk/fixed/burg_modified_FIX.gcno
> > > -nostdsysteminc -resource-dir llvm.inst/lib/clang/9.0.0
> > > -dependency-file
> > >
> out/target/product/angler/obj_arm/SHARED_LIBRARIES/libopus_intermediates/
> > > silk/fixed/burg_modified_FIX.d
> > > -MT
> > >
> out/target/product/angler/obj_arm/SHARED_LIBRARIES/libopus_intermediates/
> > > silk/fixed/burg_modified_FIX.o
> > > -sys-header-deps -isystem frameworks/av/include -isystem
> > > out/target/product/angler/obj/include -isystem
> > > device/huawei/angler/kernel-headers -isystem
> > > hardware/qcom/msm8994/kernel-headers -isystem
> > > bionic/libc/arch-arm/include -isystem bionic/libc/include -isystem
> > > bionic/libc/kernel/uapi -isystem bionic/libc/kernel/uapi/asm-arm
> > > -isystem bionic/libc/kernel/android/uapi -I external/libopus/include
> > > -I external/libopus/src -I external/libopus/silk -I
> > > external/libopus/celt -I external/libopus/silk/fixed -I
> > > external/libogg/include -I external/libopus -I
> > >
> out/target/product/angler/obj_arm/SHARED_LIBRARIES/libopus_intermediates
> > > -I out/target/product/angler/gen/SHARED_LIBRARIES/libopus_intermediates
> > > -I libnativehelper/include/nativehelper -I external/libcxx/include -I
> > > external/libcxxabi/i</span><span class="stdout">nclude -I
> > > system/core/include -I system/media/audio/include -I
> > > hardware/libhardware/include -I hardware/libhardware_legacy/include -I
> > > hardware/ril/include -I libnativehelper/include -I
> > > frameworks/native/include -I frameworks/native/opengl/include -D
> > > _FORTIFY_SOURCE=2 -D NDEBUG -D ANDROID -D NDEBUG -U DEBUG -D
> > > __compiler_offsetof=__builtin_offsetof -D __ARM_FEATURE_LPAE=1 -D
> > > NULL=0 -D SOCKLEN_T=socklen_t -D LOCALE_NOT_USED -D
> > > _LARGEFILE_SOURCE=1 -D _FILE_OFFSET_BITS=64 -D restrict= -D __EMX__ -
> D
> > > OPUS_BUILD -D FIXED_POINT -D USE_ALLOCA -D HAVE_LRINT -D
> HAVE_LRINTF
> > > -D OPUS_ARM_ASM -D OPUS_ARM_INLINE_ASM -D
> > > OPUS_ARM_MAY_HAVE_EDSP -D
> > > OPUS_ARM_INLINE_EDSP -D OPUS_ARM_MAY_HAVE_MEDIA -D
> > > OPUS_ARM_INLINE_MEDIA -D OPUS_HAVE_RTCD -D
> > > OPUS_ARM_MAY_HAVE_NEON -D
> > > OPUS_ARM_MAY_HAVE_NEON_INTR -D OPUS_ARM_PRESUME_NEON -D
> > > OPUS_ARM_INLINE_NEON -D _USING_LIBCXX -internal-isystem
> > > llvm.inst/lib/clang/9.0.0/include -O3 -Wno-multichar
> > > -Werror=format-security -Wstrict-aliasing=2 -W -Wall -Wno-unused
> > > -Winit-self -Wpointer-arith -Werror=int-conversion
> > > -Wno-reserved-id-macro -Wno-format-pedantic
> > > -Wno-unused-command-line-argument -Wno-expansion-to-defined
> > > -Werror=return-type -Werror=non-virtual-dtor -Werror=address
> > > -Werror=sequence-point -Werror=date-time -Werror=int-to-pointer-cast
> > > -Werror=pointer-to-int-cast -Werror=address-of-temporary
> > > -Werror=return-type -Wno-error -std=gnu99 -fdebug-compilation-dir
> > > /var/lib/buildbot/slaves/hexagon-build-03/aosp
> > > -fdebug-prefix-map=/proc/self/cwd= -ferror-limit 19 -fmessage-length 0
> > > -stack-protector 2 -fno-signed-char -fobjc-runtime=gcc
> > > -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops
> > > -vectorize-slp -mllvm -polly -mllvm -polly-position=before-vectorizer
> > > -mllvm -polly-process-unprofitable -o
> > >
> out/target/product/angler/obj_arm/SHARED_LIBRARIES/libopus_intermediates/
> > > silk/fixed/burg_modified_FIX.o
> > > -x c external/libopus/silk/fixed/burg_modified_FIX.c
> > > 1. <eof> parser at end of file
> > > 2. Per-module optimization passes
> > > 3. Running pass 'Function Pass Manager' on module
> > > 'external/libopus/silk/fixed/burg_modified_FIX.c'.
> > > 4. Running pass 'Region Pass Manager' on function
> > > '@silk_burg_modified_c'
> > > 5. Running pass 'Polly - DeLICM/DePRE' on basic block
> > > '%for.body107'
> > >  #0 0x000000000184a2e4 PrintStackTraceSignalHandler(void*)
> > > (llvm.inst/bin/clang+0x184a2e4)
> > >  #1 0x0000000001847e8e llvm::sys::RunSignalHandlers()
> > > (llvm.inst/bin/clang+0x1847e8e)
> > >  #2 0x000000000184a708 SignalHandler(int) (llvm.inst/bin/clang+0x184a708)
> > >  #3 0x00007f0d4c500d10 __restore_rt
> > > (/lib/x86_64-linux-gnu/libpthread.so.0+0x10d10)
> > >  #4 0x00007f0d4b3ed267 raise
> > > /build/buildd/glibc-2.21/signal/../sysdeps/unix/sysv/linux/raise.c:55:0
> > >  #5 0x00007f0d4b3eeeca abort /build/buildd/glibc-2.21/stdlib/abort.c:91:0
> > >  #6 0x0000000003ccd75c (llvm.inst/bin/clang+0x3ccd75c)
> > >  #7 0x0000000003d95037 isl_map_from_union_map
> > > (llvm.inst/bin/clang+0x3d95037)
> > >  #8 0x0000000002147d48 (anonymous
> > > namespace)::DeLICMImpl::collapseScalarsToStore(polly::MemoryAccess*)
> > > (llvm.inst/bin/clang+0x2147d48)
> > >  #9 0x0000000002144c08 (anonymous
> > > namespace)::DeLICM::runOnScop(polly::Scop&)
> > > (llvm.inst/bin/clang+0x2144c08)
> > > #10 0x0000000000d98fbb
> > > llvm::RGPassManager::runOnFunction(llvm::Function&)
> > > (llvm.inst/bin/clang+0xd98fbb)
> > > #11 0x000000000131a2fe
> > > llvm::FPPassManager::runOnFunction(llvm::Function&)
> > > (llvm.inst/bin/clang+0x131a2fe)
> > > #12 0x000000000131a6c3
> > > llvm::FPPassManager::runOnModule(llvm::Module&)
> > > (llvm.inst/bin/clang+0x131a6c3)
> > > #13 0x000000000131aba4
> > > llvm::legacy::PassManagerImpl::run(llvm::Module&)
> > > (llvm.inst/bin/clang+0x131aba4)
> > > #14 0x0000000001a11a3c
> > > clang::EmitBackendOutput(clang::DiagnosticsEngine&,
> > > clang::HeaderSearchOptions const&, clang::CodeGenOptions
> > > const&, clang::TargetOptions const&, clang::LangOptions
> > > const&, llvm::DataLayout const&, llvm::Module*,
> > > clang::BackendAction, std::__1::unique_ptr<llvm::raw_pwrite_stream,
> > > std::__1::default_delete<llvm::raw_pwrite_stream> >)
> > > (llvm.inst/bin/clang+0x1a11a3c)
> > > #15 0x00000000025ab4f0
> > > clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&)
> > > (llvm.inst/bin/clang+0x25ab4f0)
> > > #16 0x0000000002b73263 clang::ParseAST(clang::Sema&, bool, bool)
> > > (llvm.inst/bin/clang+0x2b73263)
> > > #17 0x0000000001f0df84 clang::FrontendAction::Execute()
> > > (llvm.inst/bin/clang+0x1f0df84)
> > > #18 0x0000000001eb4701
> > > clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
> > > (llvm.inst/bin/clang+0x1eb4701)
> > > #19 0x0000000001fab21e
> > > clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
> > > (llvm.inst/bin/clang+0x1fab21e)
> > > #20 0x00000000008e2787 cc1_main(llvm::ArrayRef<char const*>,
> > > char const*, void*) (llvm.inst/bin/clang+0x8e2787)
> > > #21 0x00000000008e0420 main (llvm.inst/bin/clang+0x8e0420)
> > > #22 0x00007f0d4b3d8a40 __libc_start_main
> > > /build/buildd/glibc-2.21/csu/libc-start.c:323:0
> > > #23 0x00000000008dd5c9 _start (llvm.inst/bin/clang+0x8dd5c9)
> > > clang: error: unable to execute command: Aborted (core dumped)
> > > clang: error: clang frontend command failed due to signal (use -v to
> > > see invocation)
> > > clang version 9.0.0 (trunk 361211)
> > > Target: arm-unknown-linux-android
> > > Thread model: posix
> > > InstalledDir: llvm.inst/bin
> > > clang: note: diagnostic msg: PLEASE submit a bug report to
> > > https://bugs.llvm.org/ and include the crash backtrace, preprocessed
> > > source, and associated run script.
> > > clang: note: diagnostic msg:
> > > ********************
> > >
> > > PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
> > > Preprocessed source(s) and associated run script(s) are located at:
> > > clang: note: diagnostic msg: /tmp/burg_modified_FIX-5112db.c
> > > clang: note: diagnostic msg: /tmp/burg_modified_FIX-5112db.sh
> > > clang: note: diagnostic msg:
> > >
> > > ********************
> > >
> > > Am Mo., 20. Mai 2019 um 17:31 Uhr schrieb Michael Kruse
> > > <llvm at meinersbur.de>:
> > > >
> > > > Sorry for taking so long.
> > > >
> > > > Looks like a bug in RegionGenerator. Assumes some wrong control flow.
> > > > The bug existed before this commit, i.e. DeLICM now can apply a
> > > > mapping that it did not before.
> > > >
> > > > Fixed in r361204. Thanks for reporting! If this does not fix the aosp
> > > > buildbot, I'd be happy to get another reduced testcase.
> > > >
> > > > Michael
> > > >
> > > >
> > > >
> > > > Am Do., 16. Mai 2019 um 18:01 Uhr schrieb Eli Friedman
> > > <efriedma at quicinc.com>:
> > > > >
> > > > > This is causing a bunch of crashes on the polly AOSP buildbot
> > > (http://lab.llvm.org:8011/builders/aosp-O3-polly-before-vectorizer-
> unprofitable
> > > ).  I'm seeing an IR verifier failure: "PHINode should have one entry for each
> > > predecessor of its parent basic block".
> > > > >
> > > > > Testcase attached.  Reproduce with "opt -polly-delicm -polly-codegen -
> polly-
> > > process-unprofitable"
> > > > >
> > > > > -Eli
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: llvm-commits <llvm-commits-bounces at lists.llvm.org> On Behalf
> Of
> > > > > > Michael Kruse via llvm-commits
> > > > > > Sent: Friday, May 10, 2019 11:38 AM
> > > > > > To: llvm-commits at lists.llvm.org
> > > > > > Subject: [EXT] [polly] r360454 - [ZoneAlgo] Fix PHI inconsistency in
> invalid
> > > > > > contexts.
> > > > > >
> > > > > > Author: meinersbur
> > > > > > Date: Fri May 10 11:38:13 2019
> > > > > > New Revision: 360454
> > > > > >
> > > > > > URL: http://llvm.org/viewvc/llvm-project?rev=360454&view=rev
> > > > > > Log:
> > > > > > [ZoneAlgo] Fix PHI inconsistency in invalid contexts.
> > > > > >
> > > > > > PHI nodes (reads) could point to multiple instances of predecessor
> > > > > > blocks (PHI writes) when in an invalid context. Fix by removing PHI
> > > > > > instances that are in an invalid or ouside assumed context.
> > > > > >
> > > > > > This fixes llvm.org/PR41656.
> > > > > >
> > > > > > Added:
> > > > > >     polly/trunk/test/DeLICM/pr41656.ll
> > > > > > Modified:
> > > > > >     polly/trunk/include/polly/Support/ISLTools.h
> > > > > >     polly/trunk/lib/Support/ISLTools.cpp
> > > > > >     polly/trunk/lib/Transform/ZoneAlgo.cpp
> > > > > >     polly/trunk/test/DeLICM/reduction_looprotate_hoisted.ll
> > > > > >     polly/trunk/test/ScopInfo/stmt_with_read_but_without_sideffect.ll
> > > > > >
> > > > > > Modified: polly/trunk/include/polly/Support/ISLTools.h
> > > > > > URL: http://llvm.org/viewvc/llvm-
> > > > > >
> > >
> project/polly/trunk/include/polly/Support/ISLTools.h?rev=360454&r1=360453&r
> > > > > > 2=360454&view=diff
> > > > > >
> > >
> =================================================================
> > > > > > =============
> > > > > > --- polly/trunk/include/polly/Support/ISLTools.h (original)
> > > > > > +++ polly/trunk/include/polly/Support/ISLTools.h Fri May 10 11:38:13
> 2019
> > > > > > @@ -463,6 +463,21 @@ isl::union_map applyDomainRange(isl::uni
> > > > > >  /// @return { Domain[] -> Range[] }
> > > > > >  isl::map intersectRange(isl::map Map, isl::union_set Range);
> > > > > >
> > > > > > +/// Subtract the parameter space @p Params from @p Map.
> > > > > > +/// This is akin to isl::map::intersect_params.
> > > > > > +///
> > > > > > +/// Example:
> > > > > > +///   subtractParams(
> > > > > > +///     { [i] -> [i] },
> > > > > > +///     [x] -> { : x < 0 }
> > > > > > +///   ) = [x] -> { [i] -> [i] : x >= 0 }
> > > > > > +///
> > > > > > +/// @param Map    Remove the conditions of @p Params from this
> map.
> > > > > > +/// @param Params Parameter set to subtract.
> > > > > > +///
> > > > > > +/// @param The map with the parameter conditions removed.
> > > > > > +isl::map subtractParams(isl::map Map, isl::set Params);
> > > > > > +
> > > > > >  /// If @p PwAff maps to a constant, return said constant. If @p
> Max/@p
> > > Min, it
> > > > > >  /// can also be a piecewise constant and it would return the
> > > > > > minimum/maximum
> > > > > >  /// value. Otherwise, return NaN.
> > > > > >
> > > > > > Modified: polly/trunk/lib/Support/ISLTools.cpp
> > > > > > URL: http://llvm.org/viewvc/llvm-
> > > > > >
> > >
> project/polly/trunk/lib/Support/ISLTools.cpp?rev=360454&r1=360453&r2=3604
> > > > > > 54&view=diff
> > > > > >
> > >
> =================================================================
> > > > > > =============
> > > > > > --- polly/trunk/lib/Support/ISLTools.cpp (original)
> > > > > > +++ polly/trunk/lib/Support/ISLTools.cpp Fri May 10 11:38:13 2019
> > > > > > @@ -507,6 +507,12 @@ isl::map polly::intersectRange(isl::map
> > > > > >    return Map.intersect_range(RangeSet);
> > > > > >  }
> > > > > >
> > > > > > +isl::map polly::subtractParams(isl::map Map, isl::set Params) {
> > > > > > +  auto MapSpace = Map.get_space();
> > > > > > +  auto ParamsMap =
> > > isl::map::universe(MapSpace).intersect_params(Params);
> > > > > > +  return Map.subtract(ParamsMap);
> > > > > > +}
> > > > > > +
> > > > > >  isl::val polly::getConstant(isl::pw_aff PwAff, bool Max, bool Min) {
> > > > > >    assert(!Max || !Min); // Cannot return min and max at the same time.
> > > > > >    isl::val Result;
> > > > > >
> > > > > > Modified: polly/trunk/lib/Transform/ZoneAlgo.cpp
> > > > > > URL: http://llvm.org/viewvc/llvm-
> > > > > >
> > >
> project/polly/trunk/lib/Transform/ZoneAlgo.cpp?rev=360454&r1=360453&r2=3
> > > > > > 60454&view=diff
> > > > > >
> > >
> =================================================================
> > > > > > =============
> > > > > > --- polly/trunk/lib/Transform/ZoneAlgo.cpp (original)
> > > > > > +++ polly/trunk/lib/Transform/ZoneAlgo.cpp Fri May 10 11:38:13 2019
> > > > > > @@ -563,6 +563,11 @@ isl::union_map ZoneAlgorithm::computePer
> > > > > >
> > > > > >    // { DomainPHIRead[] -> Scatter[] }
> > > > > >    isl::map PHIWriteTimes = BeforeRead.intersect_range(WriteTimes);
> > > > > > +
> > > > > > +  // Remove instances outside the context.
> > > > > > +  PHIWriteTimes = PHIWriteTimes.intersect_params(S-
> > > >getAssumedContext());
> > > > > > +  PHIWriteTimes = subtractParams(PHIWriteTimes, S-
> > > >getInvalidContext());
> > > > > > +
> > > > > >    isl::map LastPerPHIWrites = PHIWriteTimes.lexmax();
> > > > > >
> > > > > >    // { DomainPHIRead[] -> DomainPHIWrite[] }
> > > > > >
> > > > > > Added: polly/trunk/test/DeLICM/pr41656.ll
> > > > > > URL: http://llvm.org/viewvc/llvm-
> > > > > > project/polly/trunk/test/DeLICM/pr41656.ll?rev=360454&view=auto
> > > > > >
> > >
> =================================================================
> > > > > > =============
> > > > > > --- polly/trunk/test/DeLICM/pr41656.ll (added)
> > > > > > +++ polly/trunk/test/DeLICM/pr41656.ll Fri May 10 11:38:13 2019
> > > > > > @@ -0,0 +1,89 @@
> > > > > > +; RUN: opt %loadPolly -polly-delicm -analyze < %s | FileCheck %s
> > > > > > +;
> > > > > > +; llvm.org/PR41656
> > > > > > +;
> > > > > > +; This test case has an InvalidContext such that part of the
> predecessors
> > > > > > +; of for.body.us.i lie within the invalid context. This causes a
> > > > > > +; consistency check withing the invalid context of PR41656 to fail.
> > > > > > +;
> > > > > > +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
> > > > > > +
> > > > > > +define dso_local void @main() local_unnamed_addr #0 {
> > > > > > +entry:
> > > > > > +  %call24 = tail call i32 @av_get_channel_layout_nb_channels() #2
> > > > > > +  br label %if.end30
> > > > > > +
> > > > > > +if.end30:                                         ; preds = %entry
> > > > > > +  br i1 undef, label %if.then40, label %do.body.preheader
> > > > > > +
> > > > > > +do.body.preheader:                                ; preds = %if.end30
> > > > > > +  %idx.ext.i = sext i32 %call24 to i64
> > > > > > +  %wide.trip.count.i = zext i32 %call24 to i64
> > > > > > +  %0 = load double*, double** undef, align 8, !tbaa !1
> > > > > > +  br label %for.body.us.preheader.i
> > > > > > +
> > > > > > +if.then40:                                        ; preds = %if.end30
> > > > > > +  unreachable
> > > > > > +
> > > > > > +for.body.us.preheader.i:                          ; preds = %do.body.preheader
> > > > > > +  br i1 false, label %for.body.us.i.us, label %for.body.us.i
> > > > > > +
> > > > > > +for.body.us.i.us:                                 ; preds = %for.body.us.preheader.i
> > > > > > +  br label %fill_samples.exit
> > > > > > +
> > > > > > +for.body.us.i:                                    ; preds =
> > > %for.cond2.for.end_crit_edge.us.i,
> > > > > > %for.body.us.preheader.i
> > > > > > +  %t.1 = phi double [ undef, %for.cond2.for.end_crit_edge.us.i ], [
> > > > > > 0.000000e+00, %for.body.us.preheader.i ]
> > > > > > +  %i.05.us.i = phi i32 [ %inc8.us.i, %for.cond2.for.end_crit_edge.us.i ],
> [ 0,
> > > > > > %for.body.us.preheader.i ]
> > > > > > +  %dstp.03.us.i = phi double* [ %add.ptr.us.i,
> > > %for.cond2.for.end_crit_edge.us.i
> > > > > > ], [ %0, %for.body.us.preheader.i ]
> > > > > > +  %mul.us.i = fmul nsz double %t.1, 0x40A59933FC6A96C1
> > > > > > +  %1 = call nsz double @llvm.sin.f64(double %mul.us.i) #2
> > > > > > +  store double %1, double* %dstp.03.us.i, align 8, !tbaa !5
> > > > > > +  %2 = bitcast double* %dstp.03.us.i to i64*
> > > > > > +  br label %for.body5.us.for.body5.us_crit_edge.i
> > > > > > +
> > > > > > +for.body5.us.for.body5.us_crit_edge.i:            ; preds =
> > > > > >
> > >
> %for.body5.us.for.body5.us_crit_edge.i.for.body5.us.for.body5.us_crit_edge.i_
> > > > > > crit_edge, %for.body.us.i
> > > > > > +  %indvars.iv.next.i66 = phi i64 [ 2, %for.body.us.i ], [
> %indvars.iv.next.i,
> > > > > >
> > >
> %for.body5.us.for.body5.us_crit_edge.i.for.body5.us.for.body5.us_crit_edge.i_
> > > > > > crit_edge ]
> > > > > > +  %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.next.i66, 1
> > > > > > +  %exitcond.i = icmp eq i64 %indvars.iv.next.i, %wide.trip.count.i
> > > > > > +  br i1 %exitcond.i, label %for.cond2.for.end_crit_edge.us.i, label
> > > > > >
> > >
> %for.body5.us.for.body5.us_crit_edge.i.for.body5.us.for.body5.us_crit_edge.i_
> > > > > > crit_edge
> > > > > > +
> > > > > >
> > >
> +for.body5.us.for.body5.us_crit_edge.i.for.body5.us.for.body5.us_crit_edge.i_c
> > > > > > rit_edge: ; preds = %for.body5.us.for.body5.us_crit_edge.i
> > > > > > +  %.pre10.i.pre = load i64, i64* %2, align 8, !tbaa !5
> > > > > > +  br label %for.body5.us.for.body5.us_crit_edge.i
> > > > > > +
> > > > > > +for.cond2.for.end_crit_edge.us.i:                 ; preds =
> > > > > > %for.body5.us.for.body5.us_crit_edge.i
> > > > > > +  %add.ptr.us.i = getelementptr inbounds double, double*
> %dstp.03.us.i,
> > > i64
> > > > > > %idx.ext.i
> > > > > > +  %inc8.us.i = add nuw nsw i32 %i.05.us.i, 1
> > > > > > +  %exitcond7.i = icmp eq i32 %inc8.us.i, 1024
> > > > > > +  br i1 %exitcond7.i, label %fill_samples.exit, label %for.body.us.i
> > > > > > +
> > > > > > +fill_samples.exit:                                ; preds =
> > > %for.cond2.for.end_crit_edge.us.i,
> > > > > > %for.body.us.i.us
> > > > > > +  ret void
> > > > > > +}
> > > > > > +
> > > > > > +declare dso_local i32 @av_get_channel_layout_nb_channels()
> > > > > > local_unnamed_addr #0
> > > > > > +
> > > > > > +; Function Attrs: nounwind readnone speculatable
> > > > > > +declare double @llvm.sin.f64(double) #1
> > > > > > +
> > > > > > +attributes #0 = { "use-soft-float"="false" }
> > > > > > +attributes #1 = { nounwind readnone speculatable }
> > > > > > +attributes #2 = { nounwind }
> > > > > > +
> > > > > > +!llvm.ident = !{!0}
> > > > > > +
> > > > > > +!0 = !{!"clang version 9.0.0 (https://github.com/llvm/llvm-project.git
> > > > > > 2436237895b70ed44cf256f67eb2f74e147eb559)"}
> > > > > > +!1 = !{!2, !2, i64 0}
> > > > > > +!2 = !{!"any pointer", !3, i64 0}
> > > > > > +!3 = !{!"omnipotent char", !4, i64 0}
> > > > > > +!4 = !{!"Simple C/C++ TBAA"}
> > > > > > +!5 = !{!6, !6, i64 0}
> > > > > > +!6 = !{!"double", !3, i64 0}
> > > > > > +
> > > > > > +
> > > > > > +; Only write to scalar if call24 >= 3 (i.e. not in invalid context)
> > > > > > +; Since it should be never executed otherwise, the condition is not
> strictly
> > > > > > necessary.
> > > > > > +; CHECK:          Stmt_for_body_us_preheader_i
> > > > > > +; CHECK-NEXT:            MustWriteAccess :=  [Reduction Type: NONE]
> > > [Scalar: 1]
> > > > > > +; CHECK-NEXT:                 [call24] -> { Stmt_for_body_us_preheader_i[]
> ->
> > > > > > MemRef_t_1__phi[] };
> > > > > > +; CHECK-NEXT:            new: [call24] -> {
> Stmt_for_body_us_preheader_i[] -
> > > >
> > > > > > MemRef1[0, 0] : call24 >= 3 };
> > > > > >
> > > > > > Modified: polly/trunk/test/DeLICM/reduction_looprotate_hoisted.ll
> > > > > > URL: http://llvm.org/viewvc/llvm-
> > > > > >
> > >
> project/polly/trunk/test/DeLICM/reduction_looprotate_hoisted.ll?rev=360454&
> > > > > > r1=360453&r2=360454&view=diff
> > > > > >
> > >
> =================================================================
> > > > > > =============
> > > > > > --- polly/trunk/test/DeLICM/reduction_looprotate_hoisted.ll (original)
> > > > > > +++ polly/trunk/test/DeLICM/reduction_looprotate_hoisted.ll Fri May
> 10
> > > > > > 11:38:13 2019
> > > > > > @@ -70,7 +70,7 @@ return:
> > > > > >  ; CHECK-NEXT:     Stmt_reduction_preheader
> > > > > >  ; CHECK-NEXT:             MustWriteAccess :=  [Reduction Type: NONE]
> > > [Scalar: 1]
> > > > > >  ; CHECK-NEXT:                 [Start] -> { Stmt_reduction_preheader[i0] ->
> > > > > > MemRef_phi__phi[] };
> > > > > > -; CHECK-NEXT:            new: [Start] -> { Stmt_reduction_preheader[i0] ->
> > > > > > MemRef_A[i0] };
> > > > > > +; CHECK-NEXT:            new: [Start] -> { Stmt_reduction_preheader[i0] -
> >
> > > > > > MemRef_A[i0] : Start >= 2147483648 or Start <= 2147483646 };
> > > > > >  ; CHECK-NEXT:     Stmt_reduction_for
> > > > > >  ; CHECK-NEXT:             ReadAccess :=    [Reduction Type: NONE] [Scalar:
> 1]
> > > > > >  ; CHECK-NEXT:                 [Start] -> { Stmt_reduction_for[i0, i1] ->
> > > > > > MemRef_phi__phi[] };
> > > > > >
> > > > > > Modified:
> > > polly/trunk/test/ScopInfo/stmt_with_read_but_without_sideffect.ll
> > > > > > URL: http://llvm.org/viewvc/llvm-
> > > > > >
> > >
> project/polly/trunk/test/ScopInfo/stmt_with_read_but_without_sideffect.ll?rev
> > > > > > =360454&r1=360453&r2=360454&view=diff
> > > > > >
> > >
> =================================================================
> > > > > > =============
> > > > > > --- polly/trunk/test/ScopInfo/stmt_with_read_but_without_sideffect.ll
> > > (original)
> > > > > > +++
> polly/trunk/test/ScopInfo/stmt_with_read_but_without_sideffect.ll Fri
> > > May
> > > > > > 10 11:38:13 2019
> > > > > > @@ -86,7 +86,7 @@ for.inc.1:
> > > > > >  ; CHECK-NEXT:     Stmt_if_else_1_last
> > > > > >  ; CHECK-NEXT:             MustWriteAccess :=  [Reduction Type: NONE]
> > > [Scalar: 1]
> > > > > >  ; CHECK-NEXT:                 [p_0] -> { Stmt_if_else_1_last[i0] ->
> > > > > > MemRef_min_1_1__phi[] };
> > > > > > -; CHECK-NEXT:            new: [p_0] -> { Stmt_if_else_1_last[i0] ->
> > > MemRef_ath[i0]
> > > > > > };
> > > > > > +; CHECK-NEXT:            new: [p_0] -> { Stmt_if_else_1_last[i0] ->
> > > > > > MemRef_ath[i0] : p_0 <= 576460752303423487 };
> > > > > >  ; CHECK-NEXT:     Stmt_for_inc_1
> > > > > >  ; CHECK-NEXT:             ReadAccess :=       [Reduction Type: NONE]
> [Scalar:
> > > 1]
> > > > > >  ; CHECK-NEXT:                 [p_0] -> { Stmt_for_inc_1[i0] ->
> > > > > > MemRef_min_1_1__phi[] };
> > > > > >
> > > > > >
> > > > > > _______________________________________________
> > > > > > 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