[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