[llvm] r222039 - Reapply r221924: "[GVN] Perform Scalar PRE on gep indices that feed loads before
Hao Liu
Hao.Liu at arm.com
Thu Nov 20 02:49:00 PST 2014
Hi Manman,
I tried your steps on the same revision as yours: r222239 at trunk. But failed to reproduce it. Is it related to libc++ version? If so, what revision is used in your test.
I tired libc++ reversion of r222425 and r222425 and followed your steps.
But it had build failures on 1st step:
llvm[2]: Linking Release+Asserts executable FileCheck (without symbols)
build/utils/FileCheck/Release+Asserts/FileCheck.o:llvm/utils/FileCheck/FileCheck.cpp:function llvm::cl::list<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, llvm::cl::parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::~list(): error: undefined reference to 'operator delete(void*)'
…
Also I tried to configure without “--enable-libcpp”, both steps were finished. But can not reproduce the failures on fixxfti.c and fixunsxfti.c. So I think libc++ is necessary.
Thanks,
-Hao
From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-bounces at cs.uiuc.edu] On Behalf Of Manman Ren
Sent: Thursday, November 20, 2014 8:29 AM
To: Balaram Makam
Cc: llvm-commits at cs.uiuc.edu
Subject: Re: [llvm] r222039 - Reapply r221924: "[GVN] Perform Scalar PRE on gep indices that feed loads before
On Nov 19, 2014, at 3:46 PM, Balaram Makam <bmakam at codeaurora.org> wrote:
Hi Manman,
I have a patch with a potential fix to the problem, but I cannot reproduce the original failure with the preprocessed source files you provided.
Hi Balaram,
You need to build a lto selfhost to reproduce.
1> make a release+assert build with your patch (install the compiler to a directory clang-install for example).
create directory clang-build and clang-install under llvm
under clang-build, do:
./llvm/configure --enable-assertions --enable-optimized --disable-bindings --enable-targets=x86,x86_64 --enable-libcpp --prefix=Users/manmanren/llvm/clang-install
make -j 12 VERBOSE=1 CLANG_REPOSITORY_STRING=clang-stage1-configure-RA_build SVN_REVISION=222059
make install-clang -j 4
2> use clang-install binary and library to build the same repo with lto.
create directory selfhost, under selfhost, do:
../llvm/configure --disable-assertions --with-extra-options="-flto -gline-tables-only” --enable-optimized --disable-bindings --enable-targets=x86,x86_64 --enable-libcpp CC=/Users/manmanren/llvm/clang-install/bin/clang CXX=/Users/manmanren/gmail/clang-install/llvm/clang++
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/
The whole process takes a few hours to run.You can also commit the patch if you are confident enough and then watch the bot (phase 2 lto).
Manman
Could you please test this patch (attached) and let me know if it works?
Thanks,
Balaram
-----Original Message-----
From: Chad Rosier [ <mailto:mcrosier at codeaurora.org> mailto:mcrosier at codeaurora.org]
Sent: Tuesday, November 18, 2014 9:09 PM
To: Manman Ren
Cc: <mailto:mcrosier at codeaurora.org> mcrosier at codeaurora.org; <mailto:llvm-commits at cs.uiuc.edu> llvm-commits at cs.uiuc.edu; Balaram Makam; James Molloy
Subject: Re: [llvm] r222039 - Reapply r221924: "[GVN] Perform Scalar PRE on gep indices that feed loads before
Thanks, Manman. Balaram or another one of our team members will investigate.
Chad
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
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/f
loatdidf.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/D
eveloper/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/f
loatdisf.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/D
eveloper/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/f
loatdisf.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/D
eveloper/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/f
loatdidf.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/floattid
f.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/D
eveloper/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/D
eveloper/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/D
eveloper/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/D
eveloper/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/floattis
f.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/D
eveloper/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/floattis
f.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/D
eveloper/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/popcount
ti2.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/D
eveloper/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/D
eveloper/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/D
eveloper/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 .â€,
1> 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 <http://llvm.org/viewvc/llvm-project?rev=222039&view=rev> &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-m
ismatch.ll
Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp
URL:
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scala
r/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-m
ismatch.ll
URL:
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/TypeBa
sedAliasAnalysis/gvn-nonlocal-type-mismatch.ll?rev=222039&r1=222038
&r2=222039&view=diff
===================================================================
===========
---
llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/gvn-nonlocal-type-m
ismatch.ll
(original)
+++
llvm/trunk/test/Analysis/TypeBasedAliasAnalysis/gvn-nonlocal-type-m
ismatch.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
<0001-Reapply-r221924-GVN-Perform-Scalar-PRE-on-gep-indice.patch>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141120/cd524943/attachment.html>
More information about the llvm-commits
mailing list