[llvm] r222039 - Reapply r221924: "[GVN] Perform Scalar PRE on gep indices that feed loads before
Manman Ren
mren at apple.com
Tue Nov 18 16:19:25 PST 2014
Hi Chad,
I reverted the commit in r222287.
The lto self host of r222239 without this commit succeeded.
And I have finished the lto self host of r222239 including this commit, it failed. If you need any more files, let me know.
Thanks,
Manman
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fixxfti-868934.c
Type: application/octet-stream
Size: 60672 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141118/fceee8fb/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fixxfti-868934.sh
Type: application/octet-stream
Size: 923 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141118/fceee8fb/attachment-0001.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fixunsxfti-33f776.c
Type: application/octet-stream
Size: 60733 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141118/fceee8fb/attachment-0002.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fixunsxfti-33f776.sh
Type: application/octet-stream
Size: 929 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141118/fceee8fb/attachment-0003.obj>
-------------- next part --------------
clang(59539,0x7fff7c035300) malloc: *** error for object 0x7fa438648450: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
COMPILE: clang_darwin/cc_kext/x86_64: /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/fixxfti.c
COMPILE: clang_darwin/cc_kext/x86_64: /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/x86_64/floatdidf.c
/Users/manmanren/gmail/selfhost/Release/bin/clang -fPIC -I/Users/manmanren/gmail/llvm/projects/compiler-rt/lib -I/Users/manmanren/gmail/llvm/projects/compiler-rt/include -arch x86_64 -fvisibility=hidden -DVISIBILITY_HIDDEN -mkernel -DKERNEL_USE -Wall -Werror -O3 -fomit-frame-pointer -mmacosx-version-min=10.4 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -c -o /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins/fixxfti.o /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/fixxfti.c
COMPILE: clang_darwin/cc_kext/x86_64: /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/x86_64/floatdisf.c
/Users/manmanren/gmail/selfhost/Release/bin/clang -fPIC -I/Users/manmanren/gmail/llvm/projects/compiler-rt/lib -I/Users/manmanren/gmail/llvm/projects/compiler-rt/include -arch x86_64 -fvisibility=hidden -DVISIBILITY_HIDDEN -mkernel -DKERNEL_USE -Wall -Werror -O3 -fomit-frame-pointer -mmacosx-version-min=10.4 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -c -o /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins__x86_64/floatdisf.o /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/x86_64/floatdisf.c
/Users/manmanren/gmail/selfhost/Release/bin/clang -fPIC -I/Users/manmanren/gmail/llvm/projects/compiler-rt/lib -I/Users/manmanren/gmail/llvm/projects/compiler-rt/include -arch x86_64 -fvisibility=hidden -DVISIBILITY_HIDDEN -mkernel -DKERNEL_USE -Wall -Werror -O3 -fomit-frame-pointer -mmacosx-version-min=10.4 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -c -o /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins__x86_64/floatdidf.o /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/x86_64/floatdidf.c
clang(59547,0x7fff7c035300) malloc: *** error for object 0x7f9410f1c0d0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
0 clang 0x000000010c15d259 llvm::sys::PrintStackTrace(__sFILE*) + 57
1 clang 0x000000010c15ddab SignalHandler(int) + 347
2 libsystem_platform.dylib 0x00007fff980faf1a _sigtramp + 26
3 libsystem_platform.dylib 0xffffffffffffffff _sigtramp + 1743802623
4 libsystem_c.dylib 0x00007fff982ccb73 abort + 129
5 libsystem_malloc.dylib 0x00007fff98e7b937 nano_size + 0
6 clang 0x000000010b7b77b9 (anonymous namespace)::X86TTI::getIntImmCost(llvm::APInt const&, llvm::Type*) const + 601
7 clang 0x000000010b7b6cd8 non-virtual thunk to (anonymous namespace)::X86TTI::getIntImmCost(unsigned int, unsigned int, llvm::APInt const&, llvm::Type*) const + 216
8 clang 0x000000010bb73333 (anonymous namespace)::ConstantHoisting::collectConstantCandidates(llvm::DenseMap<llvm::ConstantInt*, unsigned int, llvm::DenseMapInfo<llvm::ConstantInt*> >&, llvm::Instruction*, unsigned int, llvm::ConstantInt*) + 211
COMPILE: clang_darwin/cc_kext/x86_64: /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/x86_64/floatdixf.c
9 clang 0x000000010bb6ecf4 (anonymous namespace)::ConstantHoisting::runOnFunction(llvm::Function&) + 516
COMPILE: clang_darwin/cc_kext/x86_64: /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/floattidf.c
/Users/manmanren/gmail/selfhost/Release/bin/clang -fPIC -I/Users/manmanren/gmail/llvm/projects/compiler-rt/lib -I/Users/manmanren/gmail/llvm/projects/compiler-rt/include -arch x86_64 -fvisibility=hidden -DVISIBILITY_HIDDEN -mkernel -DKERNEL_USE -Wall -Werror -O3 -fomit-frame-pointer -mmacosx-version-min=10.4 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -c -o /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins__x86_64/floatdixf.o /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/x86_64/floatdixf.c
10 clang 0x000000010c0e3a25 llvm::FPPassManager::runOnFunction(llvm::Function&) + 549
11 clang 0x000000010c0e3c9b llvm::FPPassManager::runOnModule(llvm::Module&) + 43
12 clang 0x000000010c0e412a llvm::legacy::PassManagerImpl::run(llvm::Module&) + 922
13 clang 0x000000010a445430 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::raw_ostream*) + 12208
0 clang 0x00000001059d5259 llvm::sys::PrintStackTrace(__sFILE*) + 57
14 clang 0x000000010a5cda44 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 516
/Users/manmanren/gmail/selfhost/Release/bin/clang -fPIC -I/Users/manmanren/gmail/llvm/projects/compiler-rt/lib -I/Users/manmanren/gmail/llvm/projects/compiler-rt/include -arch x86_64 -fvisibility=hidden -DVISIBILITY_HIDDEN -mkernel -DKERNEL_USE -Wall -Werror -O3 -fomit-frame-pointer -mmacosx-version-min=10.4 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -c -o /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins/floattidf.o /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/floattidf.c
1 clang 0x00000001059d5dab SignalHandler(int) + 347
2 libsystem_platform.dylib 0x00007fff980faf1a _sigtramp + 26
3 libsystem_platform.dylib 0xffffffffffffffff _sigtramp + 1743802623
15 clang 0x000000010a6864c5 4 libsystem_c.dylib 0x00007fff982ccb73 clang::ParseAST(clang::Sema&, bool, bool)abort + 661 + 129
5 libsystem_malloc.dylib 0x00007fff98e7b937 nano_size + 0
16 clang 0x000000010a1f2b7e clang::FrontendAction::Execute() + 62
6 clang 0x000000010502f7b9 (anonymous namespace)::X86TTI::getIntImmCost(llvm::APInt const&, llvm::Type*) const + 601
17 clang 0x000000010a1ba8d3 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 915
7 clang 0x000000010502ecd8 non-virtual thunk to (anonymous namespace)::X86TTI::getIntImmCost(unsigned int, unsigned int, llvm::APInt const&, llvm::Type*) const + 216
18 clang 0x000000010a16a3fa clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 2890
8 clang 0x00000001053eb333 (anonymous namespace)::ConstantHoisting::collectConstantCandidates(llvm::DenseMap<llvm::ConstantInt*, unsigned int, llvm::DenseMapInfo<llvm::ConstantInt*> >&, llvm::Instruction*, unsigned int, llvm::ConstantInt*) + 211
19 clang 0x000000010a16000c cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 1836
9 clang 0x00000001053e6cf4 (anonymous namespace)::ConstantHoisting::runOnFunction(llvm::Function&) + 516
20 clang 0x000000010a168b21 main + 13745
21 libdyld.dylib 0x00007fff8b4215c9 start + 1
22 libdyld.dylib 0x0000000000000045 start + 1958603389
10 clang 0x000000010595ba25 llvm::FPPassManager::runOnFunction(llvm::Function&) + 549
Stack dump:
0. Program arguments: /Users/manmanren/gmail/selfhost/Release/bin/clang -cc1 -triple x86_64-apple-macosx10.4.0 -emit-obj -disable-free -disable-llvm-verifier -main-file-name fixunsxfti.c -static-define -mrelocation-model static -mthread-model posix -masm-verbose -fforbid-guard-variables -target-cpu core2 -disable-red-zone -no-implicit-float -target-linker-version 242 -dwarf-column-info -coverage-file /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins/fixunsxfti.o -resource-dir /Users/manmanren/gmail/selfhost/Release/bin/../lib/clang/3.6.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -D VISIBILITY_HIDDEN -D KERNEL_USE -I /Users/manmanren/gmail/llvm/projects/compiler-rt/lib -I /Users/manmanren/gmail/llvm/projects/compiler-rt/include -O3 -Wall -Werror -fdebug-compilation-dir /Users/manmanren/gmail/llvm/projects/compiler-rt -ferror-limit 19 -fmessage-length 164 -fvisibility hidden -ffreestanding -mstackrealign -fno-builtin -fblocks -fblocks-runtime-optional -fno-rtti -fno-use-cxa-atexit -fobjc-runtime=macosx-10.4.0 -fobjc-dispatch-method=non-legacy -fencode-extended-block-signature -fmax-type-align=16 -fno-common -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -vectorize-slp -o /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins/fixunsxfti.o -x c /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/fixunsxfti.c
1. <eof> parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module '/Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/fixunsxfti.c'.
4. Running pass 'Constant Hoisting' on function '@__fixunsxfti'
11 clang 0x000000010595bc9b llvm::FPPassManager::runOnModule(llvm::Module&) + 43
12 clang 0x000000010595c12a llvm::legacy::PassManagerImpl::run(llvm::Module&) + 922
13 clang 0x0000000103cbd430 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::raw_ostream*) + 12208
14 clang 0x0000000103e45a44 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 516
15 clang 0x0000000103efe4c5 clang::ParseAST(clang::Sema&, bool, bool) + 661
16 clang 0x0000000103a6ab7e clang::FrontendAction::Execute() + 62
17 clang 0x0000000103a328d3 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 915
18 clang 0x00000001039e23fa clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 2890
19 clang 0x00000001039d800c cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 1836
20 clang 0x00000001039e0b21 main + 13745
21 libdyld.dylib 0x00007fff8b4215c9 start + 1
22 libdyld.dylib 0x0000000000000045 start + 1958603389
Stack dump:
0. Program arguments: /Users/manmanren/gmail/selfhost/Release/bin/clang -cc1 -triple x86_64-apple-macosx10.4.0 -emit-obj -disable-free -disable-llvm-verifier -main-file-name fixxfti.c -static-define -mrelocation-model static -mthread-model posix -masm-verbose -fforbid-guard-variables -target-cpu core2 -disable-red-zone -no-implicit-float -target-linker-version 242 -dwarf-column-info -coverage-file /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins/fixxfti.o -resource-dir /Users/manmanren/gmail/selfhost/Release/bin/../lib/clang/3.6.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -D VISIBILITY_HIDDEN -D KERNEL_USE -I /Users/manmanren/gmail/llvm/projects/compiler-rt/lib -I /Users/manmanren/gmail/llvm/projects/compiler-rt/include -O3 -Wall -Werror -fdebug-compilation-dir /Users/manmanren/gmail/llvm/projects/compiler-rt -ferror-limit 19 -fmessage-length 164 -fvisibility hidden -ffreestanding -mstackrealign -fno-builtin -fblocks -fblocks-runtime-optional -fno-rtti -fno-use-cxa-atexit -fobjc-runtime=macosx-10.4.0 -fobjc-dispatch-method=non-legacy -fencode-extended-block-signature -fmax-type-align=16 -fno-common -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -vectorize-slp -o /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins/fixxfti.o -x c /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/fixxfti.c
1. <eof> parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module '/Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/fixxfti.c'.
4. Running pass 'Constant Hoisting' on function '@__fixxfti'
COMPILE: clang_darwin/cc_kext/x86_64: /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/floattisf.c
/Users/manmanren/gmail/selfhost/Release/bin/clang -fPIC -I/Users/manmanren/gmail/llvm/projects/compiler-rt/lib -I/Users/manmanren/gmail/llvm/projects/compiler-rt/include -arch x86_64 -fvisibility=hidden -DVISIBILITY_HIDDEN -mkernel -DKERNEL_USE -Wall -Werror -O3 -fomit-frame-pointer -mmacosx-version-min=10.4 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -c -o /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins/floattisf.o /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/floattisf.c
COMPILE: clang_darwin/cc_kext/x86_64: /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/powidf2.c
/Users/manmanren/gmail/selfhost/Release/bin/clang -fPIC -I/Users/manmanren/gmail/llvm/projects/compiler-rt/lib -I/Users/manmanren/gmail/llvm/projects/compiler-rt/include -arch x86_64 -fvisibility=hidden -DVISIBILITY_HIDDEN -mkernel -DKERNEL_USE -Wall -Werror -O3 -fomit-frame-pointer -mmacosx-version-min=10.4 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -c -o /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins/popcountti2.o /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/popcountti2.c
/Users/manmanren/gmail/selfhost/Release/bin/clang -fPIC -I/Users/manmanren/gmail/llvm/projects/compiler-rt/lib -I/Users/manmanren/gmail/llvm/projects/compiler-rt/include -arch x86_64 -fvisibility=hidden -DVISIBILITY_HIDDEN -mkernel -DKERNEL_USE -Wall -Werror -O3 -fomit-frame-pointer -mmacosx-version-min=10.4 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -c -o /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins/powidf2.o /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/powidf2.c
clang: error: unable to execute command: Abort trap: 6
clang: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 3.6.0 (clang-Rlto_master_build 222059) (llvm/trunk 222239)
Target: x86_64-apple-darwin14.0.0
Thread model: posix
clang: note: diagnostic msg: PLEASE submit a bug report to http://llvm.org/bugs/ and include the crash backtrace, preprocessed source, and associated run script.
COMPILE: clang_darwin/cc_kext/x86_64: /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/powisf2.c
/Users/manmanren/gmail/selfhost/Release/bin/clang -fPIC -I/Users/manmanren/gmail/llvm/projects/compiler-rt/lib -I/Users/manmanren/gmail/llvm/projects/compiler-rt/include -arch x86_64 -fvisibility=hidden -DVISIBILITY_HIDDEN -mkernel -DKERNEL_USE -Wall -Werror -O3 -fomit-frame-pointer -mmacosx-version-min=10.4 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -c -o /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins/powisf2.o /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/powisf2.c
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: /var/folders/8d/mksp0c9x6yngd578zj_s72ym0000gn/T/fixxfti-868934.c
clang: note: diagnostic msg: /var/folders/8d/mksp0c9x6yngd578zj_s72ym0000gn/T/fixxfti-868934.sh
clang: note: diagnostic msg:
********************
COMPILE: clang_darwin/cc_kext/x86_64: /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/powixf2.c
make[5]: *** [/Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins/fixxfti.o] Error 254
make[5]: *** Waiting for unfinished jobs....
/Users/manmanren/gmail/selfhost/Release/bin/clang -fPIC -I/Users/manmanren/gmail/llvm/projects/compiler-rt/lib -I/Users/manmanren/gmail/llvm/projects/compiler-rt/include -arch x86_64 -fvisibility=hidden -DVISIBILITY_HIDDEN -mkernel -DKERNEL_USE -Wall -Werror -O3 -fomit-frame-pointer -mmacosx-version-min=10.4 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -c -o /Users/manmanren/gmail/selfhost/tools/clang/runtime/compiler-rt/clang_darwin/cc_kext/x86_64/SubDir.lib__builtins/powixf2.o /Users/manmanren/gmail/llvm/projects/compiler-rt/lib/builtins/powixf2.c
clang: error: unable to execute command: Abort trap: 6
clang: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 3.6.0 (clang-Rlto_master_build 222059) (llvm/trunk 222239)
Target: x86_64-apple-darwin14.0.0
Thread model: posix
clang: note: diagnostic msg: PLEASE submit a bug report to http://llvm.org/bugs/ 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: /var/folders/8d/mksp0c9x6yngd578zj_s72ym0000gn/T/fixunsxfti-33f776.c
clang: note: diagnostic msg: /var/folders/8d/mksp0c9x6yngd578zj_s72ym0000gn/T/fixunsxfti-33f776.sh
clang: note: diagnostic msg:
********************
> On Nov 18, 2014, at 2:53 PM, Chad Rosier <mcrosier at codeaurora.org> wrote:
>
> Hi Manman,
> Feel free to revert the patch if you're convinced this is the problem.
> Please keep Balaram, James, and I updated on the progress. This is a
> performance critical fix, so we need to make sure it doesn't get lost in
> the mix.
>
> Chad
>
>> Hi Chad,
>>
>> About the buildbot phase 2 failure, I now think this commit is the root
>> cause.
>>
>> What I did was:
>> 1> update the repo to r222239, then "svn merge -c -r222039 .â, made a
>> release+assert build (installed to clang-install).
>> 2> use clang-install binary and library to build the same repo with lto.
>> make -j 4 VERBOSE=1 CLANG_REPOSITORY_STRING=clang-Rlto_master_build
>> SVN_REVISION=222059
>> DYLD_LIBRARY_PATH=/Users/manmanren/llvm_gmail/clang-install/lib/
>> 3> the build completed
>> make[1]: Nothing to be done for `all'.
>> make[1]: Nothing to be done for `all'.
>> llvm[0]: ***** Completed Release Build
>>
>> Is it okay for us to revert this commit and watch the bot? If the bot is
>> still red, we can re-submit it.
>>
>> If you want me to do more testing (maybe a lto self host with r22239), let
>> me know,
>>
>> Thanks,
>> Manman (The build czar)
>>
>>> On Nov 14, 2014, at 1:09 PM, Chad Rosier <mcrosier at codeaurora.org>
>>> wrote:
>>>
>>> Author: mcrosier
>>> Date: Fri Nov 14 15:09:13 2014
>>> New Revision: 222039
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=222039&view=rev
>>> Log:
>>> Reapply r221924: "[GVN] Perform Scalar PRE on gep indices that feed
>>> loads before
>>> doing Load PRE"
>>>
>>> This commit updates the failing test in
>>> Analysis/TypeBasedAliasAnalysis/gvn-nonlocal-type-mismatch.ll
>>>
>>> The failing test is sensitive to the order in which we process loads.
>>> This
>>> version turns on the RPO traversal instead of the while DT traversal in
>>> GVN.
>>> The new test code is functionally same just the order of loads that are
>>> eliminated is swapped.
>>>
>>> This new version also fixes an issue where GVN splits a critical edge
>>> and
>>> potentially invalidate the RPO/DT iterator.
>>>
>>> Added:
>>> llvm/trunk/test/Transforms/GVN/pre-gep-load.ll
>>> Modified:
>>> llvm/trunk/lib/Transforms/Scalar/GVN.cpp
>>> llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/gvn-nonlocal-type-mismatch.ll
>>>
>>> Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=222039&r1=222038&r2=222039&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)
>>> +++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Fri Nov 14 15:09:13 2014
>>> @@ -20,6 +20,7 @@
>>> #include "llvm/ADT/DepthFirstIterator.h"
>>> #include "llvm/ADT/Hashing.h"
>>> #include "llvm/ADT/MapVector.h"
>>> +#include "llvm/ADT/PostOrderIterator.h"
>>> #include "llvm/ADT/SetVector.h"
>>> #include "llvm/ADT/SmallPtrSet.h"
>>> #include "llvm/ADT/Statistic.h"
>>> @@ -709,6 +710,7 @@ namespace {
>>> void dump(DenseMap<uint32_t, Value*> &d);
>>> bool iterateOnFunction(Function &F);
>>> bool performPRE(Function &F);
>>> + bool performScalarPRE(Instruction *I);
>>> Value *findLeader(const BasicBlock *BB, uint32_t num);
>>> void cleanupGlobalSets();
>>> void verifyRemoved(const Instruction *I) const;
>>> @@ -1729,6 +1731,15 @@ bool GVN::processNonLocalLoad(LoadInst *
>>> return false;
>>> }
>>>
>>> + // If this load follows a GEP, see if we can PRE the indices before
>>> analyzing.
>>> + if (GetElementPtrInst *GEP =
>>> dyn_cast<GetElementPtrInst>(LI->getOperand(0))) {
>>> + for (GetElementPtrInst::op_iterator OI = GEP->idx_begin(),
>>> + OE = GEP->idx_end();
>>> + OI != OE; ++OI)
>>> + if (Instruction *I = dyn_cast<Instruction>(OI->get()))
>>> + performScalarPRE(I);
>>> + }
>>> +
>>> // Step 2: Analyze the availability of the load
>>> AvailValInBlkVect ValuesPerBlock;
>>> UnavailBlkVect UnavailableBlocks;
>>> @@ -2431,175 +2442,182 @@ bool GVN::processBlock(BasicBlock *BB) {
>>> return ChangedFunction;
>>> }
>>>
>>> -/// performPRE - Perform a purely local form of PRE that looks for
>>> diamond
>>> -/// control flow patterns and attempts to perform simple PRE at the
>>> join point.
>>> -bool GVN::performPRE(Function &F) {
>>> - bool Changed = false;
>>> +bool GVN::performScalarPRE(Instruction *CurInst) {
>>> SmallVector<std::pair<Value*, BasicBlock*>, 8> predMap;
>>> - for (BasicBlock *CurrentBlock : depth_first(&F.getEntryBlock())) {
>>> - // Nothing to PRE in the entry block.
>>> - if (CurrentBlock == &F.getEntryBlock()) continue;
>>>
>>> - // Don't perform PRE on a landing pad.
>>> - if (CurrentBlock->isLandingPad()) continue;
>>> + if (isa<AllocaInst>(CurInst) || isa<TerminatorInst>(CurInst) ||
>>> + isa<PHINode>(CurInst) || CurInst->getType()->isVoidTy() ||
>>> + CurInst->mayReadFromMemory() || CurInst->mayHaveSideEffects() ||
>>> + isa<DbgInfoIntrinsic>(CurInst))
>>> + return false;
>>>
>>> - for (BasicBlock::iterator BI = CurrentBlock->begin(),
>>> - BE = CurrentBlock->end(); BI != BE; ) {
>>> - Instruction *CurInst = BI++;
>>> + // Don't do PRE on compares. The PHI would prevent CodeGenPrepare
>>> from
>>> + // sinking the compare again, and it would force the code generator
>>> to
>>> + // move the i1 from processor flags or predicate registers into a
>>> general
>>> + // purpose register.
>>> + if (isa<CmpInst>(CurInst))
>>> + return false;
>>>
>>> - if (isa<AllocaInst>(CurInst) ||
>>> - isa<TerminatorInst>(CurInst) || isa<PHINode>(CurInst) ||
>>> - CurInst->getType()->isVoidTy() ||
>>> - CurInst->mayReadFromMemory() || CurInst->mayHaveSideEffects()
>>> ||
>>> - isa<DbgInfoIntrinsic>(CurInst))
>>> - continue;
>>> + // We don't currently value number ANY inline asm calls.
>>> + if (CallInst *CallI = dyn_cast<CallInst>(CurInst))
>>> + if (CallI->isInlineAsm())
>>> + return false;
>>>
>>> - // Don't do PRE on compares. The PHI would prevent CodeGenPrepare
>>> from
>>> - // sinking the compare again, and it would force the code
>>> generator to
>>> - // move the i1 from processor flags or predicate registers into a
>>> general
>>> - // purpose register.
>>> - if (isa<CmpInst>(CurInst))
>>> - continue;
>>> + uint32_t ValNo = VN.lookup(CurInst);
>>>
>>> - // We don't currently value number ANY inline asm calls.
>>> - if (CallInst *CallI = dyn_cast<CallInst>(CurInst))
>>> - if (CallI->isInlineAsm())
>>> - continue;
>>> + // Look for the predecessors for PRE opportunities. We're
>>> + // only trying to solve the basic diamond case, where
>>> + // a value is computed in the successor and one predecessor,
>>> + // but not the other. We also explicitly disallow cases
>>> + // where the successor is its own predecessor, because they're
>>> + // more complicated to get right.
>>> + unsigned NumWith = 0;
>>> + unsigned NumWithout = 0;
>>> + BasicBlock *PREPred = nullptr;
>>> + BasicBlock *CurrentBlock = CurInst->getParent();
>>> + predMap.clear();
>>> +
>>> + for (pred_iterator PI = pred_begin(CurrentBlock), PE =
>>> pred_end(CurrentBlock);
>>> + PI != PE; ++PI) {
>>> + BasicBlock *P = *PI;
>>> + // We're not interested in PRE where the block is its
>>> + // own predecessor, or in blocks with predecessors
>>> + // that are not reachable.
>>> + if (P == CurrentBlock) {
>>> + NumWithout = 2;
>>> + break;
>>> + } else if (!DT->isReachableFromEntry(P)) {
>>> + NumWithout = 2;
>>> + break;
>>> + }
>>>
>>> - uint32_t ValNo = VN.lookup(CurInst);
>>> + Value *predV = findLeader(P, ValNo);
>>> + if (!predV) {
>>> + predMap.push_back(std::make_pair(static_cast<Value *>(nullptr),
>>> P));
>>> + PREPred = P;
>>> + ++NumWithout;
>>> + } else if (predV == CurInst) {
>>> + /* CurInst dominates this predecessor. */
>>> + NumWithout = 2;
>>> + break;
>>> + } else {
>>> + predMap.push_back(std::make_pair(predV, P));
>>> + ++NumWith;
>>> + }
>>> + }
>>>
>>> - // Look for the predecessors for PRE opportunities. We're
>>> - // only trying to solve the basic diamond case, where
>>> - // a value is computed in the successor and one predecessor,
>>> - // but not the other. We also explicitly disallow cases
>>> - // where the successor is its own predecessor, because they're
>>> - // more complicated to get right.
>>> - unsigned NumWith = 0;
>>> - unsigned NumWithout = 0;
>>> - BasicBlock *PREPred = nullptr;
>>> - predMap.clear();
>>> -
>>> - for (pred_iterator PI = pred_begin(CurrentBlock),
>>> - PE = pred_end(CurrentBlock); PI != PE; ++PI) {
>>> - BasicBlock *P = *PI;
>>> - // We're not interested in PRE where the block is its
>>> - // own predecessor, or in blocks with predecessors
>>> - // that are not reachable.
>>> - if (P == CurrentBlock) {
>>> - NumWithout = 2;
>>> - break;
>>> - } else if (!DT->isReachableFromEntry(P)) {
>>> - NumWithout = 2;
>>> - break;
>>> - }
>>> + // Don't do PRE when it might increase code size, i.e. when
>>> + // we would need to insert instructions in more than one pred.
>>> + if (NumWithout != 1 || NumWith == 0)
>>> + return false;
>>>
>>> - Value* predV = findLeader(P, ValNo);
>>> - if (!predV) {
>>> - predMap.push_back(std::make_pair(static_cast<Value
>>> *>(nullptr), P));
>>> - PREPred = P;
>>> - ++NumWithout;
>>> - } else if (predV == CurInst) {
>>> - /* CurInst dominates this predecessor. */
>>> - NumWithout = 2;
>>> - break;
>>> - } else {
>>> - predMap.push_back(std::make_pair(predV, P));
>>> - ++NumWith;
>>> - }
>>> - }
>>> + // Don't do PRE across indirect branch.
>>> + if (isa<IndirectBrInst>(PREPred->getTerminator()))
>>> + return false;
>>>
>>> - // Don't do PRE when it might increase code size, i.e. when
>>> - // we would need to insert instructions in more than one pred.
>>> - if (NumWithout != 1 || NumWith == 0)
>>> - continue;
>>> + // We can't do PRE safely on a critical edge, so instead we schedule
>>> + // the edge to be split and perform the PRE the next time we iterate
>>> + // on the function.
>>> + unsigned SuccNum = GetSuccessorNumber(PREPred, CurrentBlock);
>>> + if (isCriticalEdge(PREPred->getTerminator(), SuccNum)) {
>>> + toSplit.push_back(std::make_pair(PREPred->getTerminator(),
>>> SuccNum));
>>> + return false;
>>> + }
>>>
>>> - // Don't do PRE across indirect branch.
>>> - if (isa<IndirectBrInst>(PREPred->getTerminator()))
>>> - continue;
>>> + // Instantiate the expression in the predecessor that lacked it.
>>> + // Because we are going top-down through the block, all value numbers
>>> + // will be available in the predecessor by the time we need them.
>>> Any
>>> + // that weren't originally present will have been instantiated
>>> earlier
>>> + // in this loop.
>>> + Instruction *PREInstr = CurInst->clone();
>>> + bool success = true;
>>> + for (unsigned i = 0, e = CurInst->getNumOperands(); i != e; ++i) {
>>> + Value *Op = PREInstr->getOperand(i);
>>> + if (isa<Argument>(Op) || isa<Constant>(Op) || isa<GlobalValue>(Op))
>>> + continue;
>>>
>>> - // We can't do PRE safely on a critical edge, so instead we
>>> schedule
>>> - // the edge to be split and perform the PRE the next time we
>>> iterate
>>> - // on the function.
>>> - unsigned SuccNum = GetSuccessorNumber(PREPred, CurrentBlock);
>>> - if (isCriticalEdge(PREPred->getTerminator(), SuccNum)) {
>>> - toSplit.push_back(std::make_pair(PREPred->getTerminator(),
>>> SuccNum));
>>> - continue;
>>> - }
>>> + if (Value *V = findLeader(PREPred, VN.lookup(Op))) {
>>> + PREInstr->setOperand(i, V);
>>> + } else {
>>> + success = false;
>>> + break;
>>> + }
>>> + }
>>>
>>> - // Instantiate the expression in the predecessor that lacked it.
>>> - // Because we are going top-down through the block, all value
>>> numbers
>>> - // will be available in the predecessor by the time we need them.
>>> Any
>>> - // that weren't originally present will have been instantiated
>>> earlier
>>> - // in this loop.
>>> - Instruction *PREInstr = CurInst->clone();
>>> - bool success = true;
>>> - for (unsigned i = 0, e = CurInst->getNumOperands(); i != e; ++i)
>>> {
>>> - Value *Op = PREInstr->getOperand(i);
>>> - if (isa<Argument>(Op) || isa<Constant>(Op) ||
>>> isa<GlobalValue>(Op))
>>> - continue;
>>> + // Fail out if we encounter an operand that is not available in
>>> + // the PRE predecessor. This is typically because of loads which
>>> + // are not value numbered precisely.
>>> + if (!success) {
>>> + DEBUG(verifyRemoved(PREInstr));
>>> + delete PREInstr;
>>> + return false;
>>> + }
>>>
>>> - if (Value *V = findLeader(PREPred, VN.lookup(Op))) {
>>> - PREInstr->setOperand(i, V);
>>> - } else {
>>> - success = false;
>>> - break;
>>> - }
>>> - }
>>> + PREInstr->insertBefore(PREPred->getTerminator());
>>> + PREInstr->setName(CurInst->getName() + ".pre");
>>> + PREInstr->setDebugLoc(CurInst->getDebugLoc());
>>> + VN.add(PREInstr, ValNo);
>>> + ++NumGVNPRE;
>>> +
>>> + // Update the availability map to include the new instruction.
>>> + addToLeaderTable(ValNo, PREInstr, PREPred);
>>> +
>>> + // Create a PHI to make the value available in this block.
>>> + PHINode *Phi =
>>> + PHINode::Create(CurInst->getType(), predMap.size(),
>>> + CurInst->getName() + ".pre-phi",
>>> CurrentBlock->begin());
>>> + for (unsigned i = 0, e = predMap.size(); i != e; ++i) {
>>> + if (Value *V = predMap[i].first)
>>> + Phi->addIncoming(V, predMap[i].second);
>>> + else
>>> + Phi->addIncoming(PREInstr, PREPred);
>>> + }
>>>
>>> - // Fail out if we encounter an operand that is not available in
>>> - // the PRE predecessor. This is typically because of loads which
>>> - // are not value numbered precisely.
>>> - if (!success) {
>>> - DEBUG(verifyRemoved(PREInstr));
>>> - delete PREInstr;
>>> - continue;
>>> - }
>>> + VN.add(Phi, ValNo);
>>> + addToLeaderTable(ValNo, Phi, CurrentBlock);
>>> + Phi->setDebugLoc(CurInst->getDebugLoc());
>>> + CurInst->replaceAllUsesWith(Phi);
>>> + if (Phi->getType()->getScalarType()->isPointerTy()) {
>>> + // Because we have added a PHI-use of the pointer value, it has now
>>> + // "escaped" from alias analysis' perspective. We need to inform
>>> + // AA of this.
>>> + for (unsigned ii = 0, ee = Phi->getNumIncomingValues(); ii != ee;
>>> ++ii) {
>>> + unsigned jj = PHINode::getOperandNumForIncomingValue(ii);
>>> + VN.getAliasAnalysis()->addEscapingUse(Phi->getOperandUse(jj));
>>> + }
>>>
>>> - PREInstr->insertBefore(PREPred->getTerminator());
>>> - PREInstr->setName(CurInst->getName() + ".pre");
>>> - PREInstr->setDebugLoc(CurInst->getDebugLoc());
>>> - VN.add(PREInstr, ValNo);
>>> - ++NumGVNPRE;
>>> -
>>> - // Update the availability map to include the new instruction.
>>> - addToLeaderTable(ValNo, PREInstr, PREPred);
>>> -
>>> - // Create a PHI to make the value available in this block.
>>> - PHINode* Phi = PHINode::Create(CurInst->getType(),
>>> predMap.size(),
>>> - CurInst->getName() + ".pre-phi",
>>> - CurrentBlock->begin());
>>> - for (unsigned i = 0, e = predMap.size(); i != e; ++i) {
>>> - if (Value *V = predMap[i].first)
>>> - Phi->addIncoming(V, predMap[i].second);
>>> - else
>>> - Phi->addIncoming(PREInstr, PREPred);
>>> - }
>>> -
>>> - VN.add(Phi, ValNo);
>>> - addToLeaderTable(ValNo, Phi, CurrentBlock);
>>> - Phi->setDebugLoc(CurInst->getDebugLoc());
>>> - CurInst->replaceAllUsesWith(Phi);
>>> - if (Phi->getType()->getScalarType()->isPointerTy()) {
>>> - // Because we have added a PHI-use of the pointer value, it has
>>> now
>>> - // "escaped" from alias analysis' perspective. We need to
>>> inform
>>> - // AA of this.
>>> - for (unsigned ii = 0, ee = Phi->getNumIncomingValues(); ii !=
>>> ee;
>>> - ++ii) {
>>> - unsigned jj = PHINode::getOperandNumForIncomingValue(ii);
>>> -
>>> VN.getAliasAnalysis()->addEscapingUse(Phi->getOperandUse(jj));
>>> - }
>>> + if (MD)
>>> + MD->invalidateCachedPointerInfo(Phi);
>>> + }
>>> + VN.erase(CurInst);
>>> + removeFromLeaderTable(ValNo, CurInst, CurrentBlock);
>>>
>>> - if (MD)
>>> - MD->invalidateCachedPointerInfo(Phi);
>>> - }
>>> - VN.erase(CurInst);
>>> - removeFromLeaderTable(ValNo, CurInst, CurrentBlock);
>>> + DEBUG(dbgs() << "GVN PRE removed: " << *CurInst << '\n');
>>> + if (MD)
>>> + MD->removeInstruction(CurInst);
>>> + DEBUG(verifyRemoved(CurInst));
>>> + CurInst->eraseFromParent();
>>> + return true;
>>> +}
>>> +
>>> +/// performPRE - Perform a purely local form of PRE that looks for
>>> diamond
>>> +/// control flow patterns and attempts to perform simple PRE at the
>>> join point.
>>> +bool GVN::performPRE(Function &F) {
>>> + bool Changed = false;
>>> + for (BasicBlock *CurrentBlock : depth_first(&F.getEntryBlock())) {
>>> + // Nothing to PRE in the entry block.
>>> + if (CurrentBlock == &F.getEntryBlock())
>>> + continue;
>>>
>>> - DEBUG(dbgs() << "GVN PRE removed: " << *CurInst << '\n');
>>> - if (MD) MD->removeInstruction(CurInst);
>>> - DEBUG(verifyRemoved(CurInst));
>>> - CurInst->eraseFromParent();
>>> - Changed = true;
>>> + // Don't perform PRE on a landing pad.
>>> + if (CurrentBlock->isLandingPad())
>>> + continue;
>>> +
>>> + for (BasicBlock::iterator BI = CurrentBlock->begin(),
>>> + BE = CurrentBlock->end();
>>> + BI != BE;) {
>>> + Instruction *CurInst = BI++;
>>> + Changed = performScalarPRE(CurInst);
>>> }
>>> }
>>>
>>> @@ -2637,25 +2655,21 @@ bool GVN::iterateOnFunction(Function &F)
>>>
>>> // Top-down walk of the dominator tree
>>> bool Changed = false;
>>> -#if 0
>>> - // Needed for value numbering with phi construction to work.
>>> - ReversePostOrderTraversal<Function*> RPOT(&F);
>>> - for (ReversePostOrderTraversal<Function*>::rpo_iterator RI =
>>> RPOT.begin(),
>>> - RE = RPOT.end(); RI != RE; ++RI)
>>> - Changed |= processBlock(*RI);
>>> -#else
>>> // Save the blocks this function have before transformation begins.
>>> GVN may
>>> // split critical edge, and hence may invalidate the RPO/DT iterator.
>>> //
>>> std::vector<BasicBlock *> BBVect;
>>> BBVect.reserve(256);
>>> - for (DomTreeNode *X : depth_first(DT->getRootNode()))
>>> - BBVect.push_back(X->getBlock());
>>> + // Needed for value numbering with phi construction to work.
>>> + ReversePostOrderTraversal<Function *> RPOT(&F);
>>> + for (ReversePostOrderTraversal<Function *>::rpo_iterator RI =
>>> RPOT.begin(),
>>> + RE =
>>> RPOT.end();
>>> + RI != RE; ++RI)
>>> + BBVect.push_back(*RI);
>>>
>>> for (std::vector<BasicBlock *>::iterator I = BBVect.begin(), E =
>>> BBVect.end();
>>> I != E; I++)
>>> Changed |= processBlock(*I);
>>> -#endif
>>>
>>> return Changed;
>>> }
>>>
>>> Modified:
>>> llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/gvn-nonlocal-type-mismatch.ll
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/gvn-nonlocal-type-mismatch.ll?rev=222039&r1=222038&r2=222039&view=diff
>>> ==============================================================================
>>> ---
>>> llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/gvn-nonlocal-type-mismatch.ll
>>> (original)
>>> +++
>>> llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/gvn-nonlocal-type-mismatch.ll
>>> Fri Nov 14 15:09:13 2014
>>> @@ -46,12 +46,12 @@ entry:
>>> br i1 %c, label %if.else, label %if.then
>>>
>>> if.then:
>>> - %t = load i32* %p, !tbaa !4
>>> + %t = load i32* %p, !tbaa !3
>>> store i32 %t, i32* %q
>>> ret void
>>>
>>> if.else:
>>> - %u = load i32* %p, !tbaa !3
>>> + %u = load i32* %p, !tbaa !4
>>> store i32 %u, i32* %q
>>> ret void
>>> }
>>> @@ -61,11 +61,11 @@ if.else:
>>>
>>> ; CHECK: @watch_out_for_another_type_change
>>> ; CHECK: if.then:
>>> -; CHECK: %t = load i32* %p
>>> -; CHECK: store i32 %t, i32* %q
>>> +; CHECK: store i32 0, i32* %q
>>> ; CHECK: ret void
>>> ; CHECK: if.else:
>>> -; CHECK: store i32 0, i32* %q
>>> +; CHECK: %u = load i32* %p
>>> +; CHECK: store i32 %u, i32* %q
>>>
>>> define void @watch_out_for_another_type_change(i1 %c, i32* %p, i32* %p1,
>>> i32* %q) nounwind {
>>> entry:
>>> @@ -74,12 +74,12 @@ entry:
>>> br i1 %c, label %if.else, label %if.then
>>>
>>> if.then:
>>> - %t = load i32* %p, !tbaa !3
>>> + %t = load i32* %p, !tbaa !4
>>> store i32 %t, i32* %q
>>> ret void
>>>
>>> if.else:
>>> - %u = load i32* %p, !tbaa !4
>>> + %u = load i32* %p, !tbaa !3
>>> store i32 %u, i32* %q
>>> ret void
>>> }
>>>
>>> Added: llvm/trunk/test/Transforms/GVN/pre-gep-load.ll
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVN/pre-gep-load.ll?rev=222039&view=auto
>>> ==============================================================================
>>> --- llvm/trunk/test/Transforms/GVN/pre-gep-load.ll (added)
>>> +++ llvm/trunk/test/Transforms/GVN/pre-gep-load.ll Fri Nov 14 15:09:13
>>> 2014
>>> @@ -0,0 +1,49 @@
>>> +; RUN: opt < %s -basicaa -gvn -enable-load-pre -S | FileCheck %s
>>> +target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
>>> +target triple = "aarch64--linux-gnu"
>>> +
>>> +define double @foo(i32 %stat, i32 %i, double** %p) {
>>> +; CHECK-LABEL: @foo(
>>> +entry:
>>> + switch i32 %stat, label %sw.default [
>>> + i32 0, label %sw.bb
>>> + i32 1, label %sw.bb
>>> + i32 2, label %sw.bb2
>>> + ]
>>> +
>>> +sw.bb: ; preds = %entry,
>>> %entry
>>> + %idxprom = sext i32 %i to i64
>>> + %arrayidx = getelementptr inbounds double** %p, i64 0
>>> + %0 = load double** %arrayidx, align 8
>>> + %arrayidx1 = getelementptr inbounds double* %0, i64 %idxprom
>>> + %1 = load double* %arrayidx1, align 8
>>> + %sub = fsub double %1, 1.000000e+00
>>> + %cmp = fcmp olt double %sub, 0.000000e+00
>>> + br i1 %cmp, label %if.then, label %if.end
>>> +
>>> +if.then: ; preds = %sw.bb
>>> + br label %return
>>> +
>>> +if.end: ; preds = %sw.bb
>>> + br label %sw.bb2
>>> +
>>> +sw.bb2: ; preds = %if.end,
>>> %entry
>>> + %idxprom3 = sext i32 %i to i64
>>> + %arrayidx4 = getelementptr inbounds double** %p, i64 0
>>> + %2 = load double** %arrayidx4, align 8
>>> + %arrayidx5 = getelementptr inbounds double* %2, i64 %idxprom3
>>> + %3 = load double* %arrayidx5, align 8
>>> +; CHECK: sw.bb2:
>>> +; CHECK-NEXT-NOT: sext
>>> +; CHECK-NEXT: phi double [
>>> +; CHECK-NOT: load
>>> + %sub6 = fsub double 3.000000e+00, %3
>>> + br label %return
>>> +
>>> +sw.default: ; preds = %entry
>>> + br label %return
>>> +
>>> +return: ; preds =
>>> %sw.default, %sw.bb2, %if.then
>>> + %retval.0 = phi double [ 0.000000e+00, %sw.default ], [ %sub6,
>>> %sw.bb2 ], [ %sub, %if.then ]
>>> + ret double %retval.0
>>> +}
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>>
>
>
More information about the llvm-commits
mailing list