<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: sans-serif; font-size: 11pt; color: black; ">
The SSA value %4 is defined in each loop with different types. They cannot be in the same function.<br>
<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: sans-serif; font-size: 11pt; color: black; ">
<span id="OutlookSignature">
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: sans-serif; font-size: 11pt; color: black; ">
--<br>
</div>
<div dir="auto" style="direction: ltr; margin: 0; padding: 0; font-family: sans-serif; font-size: 11pt; color: black; ">
written from my phone</div>
</span><br>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Chatterjee, Bodhisatwa <bxc583@psu.edu><br>
<b>Sent:</b> Monday, August 5, 2019 2:55:53 PM<br>
<b>To:</b> Doerfert, Johannes <jdoerfert@anl.gov><br>
<b>Subject:</b> Re: LLVM crashing while trying to build SPEC with Clang</font>
<div> </div>
</div>
<div>
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p style="margin-top:0;margin-bottom:0">Hello Johannes,</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0">Thank you for your reply.</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0">They should be in the same function, as I invoked the build_dependencies() <span style="font-size: 12pt;">inside the runOnFunction(). According to my print statements, these loops are in the same function called '</span><span style="font-size: 12pt;"><span style="color: rgb(255, 0, 0);">check_su3</span>'</span></p>
<p style="margin-top:0;margin-bottom:0"></p>
<div><br>
</div>
<div>You can also check the code of my pass, as I have attached it here.</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Bodhisatwa</div>
<p></p>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Doerfert, Johannes <jdoerfert@anl.gov><br>
<b>Sent:</b> Monday, August 5, 2019 2:49:20 PM<br>
<b>To:</b> Chatterjee, Bodhisatwa <bxc583@psu.edu><br>
<b>Subject:</b> Re: LLVM crashing while trying to build SPEC with Clang</font>
<div> </div>
</div>
<style type="text/css" style="display:none">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
</style>
<div dir="ltr">
<div dir="auto" style="direction:ltr; margin:0; padding:0; font-family:sans-serif; font-size:11pt; color:black">
These two loops are not in the same function. That is the problem.<br>
<br>
</div>
<div dir="auto" style="direction:ltr; margin:0; padding:0; font-family:sans-serif; font-size:11pt; color:black">
<span id="x_OutlookSignature">
<div dir="auto" style="direction:ltr; margin:0; padding:0; font-family:sans-serif; font-size:11pt; color:black">
--<br>
</div>
<div dir="auto" style="direction:ltr; margin:0; padding:0; font-family:sans-serif; font-size:11pt; color:black">
written from my phone</div>
</span><br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Chatterjee, Bodhisatwa <bxc583@psu.edu><br>
<b>Sent:</b> Monday, August 5, 2019 2:39:44 PM<br>
<b>To:</b> Doerfert, Johannes <jdoerfert@anl.gov><br>
<b>Subject:</b> Re: LLVM crashing while trying to build SPEC with Clang</font>
<div> </div>
</div>
<div>
<div id="x_divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Helvetica,sans-serif">
Hello Johannes,
<div><br>
</div>
<div>Thank you for your reply. Since I had errs() statement in my pass, so I know exactly where llvm crashes. It crashed while I was checking dependencies between two particular loops in the same function.</div>
<div><br>
</div>
<div>While constructing the dependence pointers between memory instructions in these loops, can I somehow check for 'interprocedural queries' and avoid them(since they caused the crash)?</div>
<div><br>
</div>
<div>Also, speaking of caching, do you mean that I should invoke a separate pass which would use the Instruction Pointers from all the previous function passes and then check the dependencies?</div>
<div><br>
</div>
<div><br>
</div>
<div><span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:16px">The memory instructions for these loops are given below</span><span style="font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size:16px">:</span><br>
</div>
<div>
<div><span style="color:rgb(255,0,0)">For Loop No. 7</span></div>
<div>  %1 = load %struct.su3_matrix*, %struct.su3_matrix** %c.addr, align 8</div>
<div>  %2 = load i32, i32* %i, align 4</div>
<div>  %3 = load double, double* %real, align 8</div>
<div>  %4 = load %struct.su3_matrix*, %struct.su3_matrix** %c.addr, align 8</div>
<div>  %5 = load i32, i32* %i, align 4</div>
<div>  %6 = load double, double* %real6, align 8</div>
<div>  %7 = load %struct.su3_matrix*, %struct.su3_matrix** %c.addr, align 8</div>
<div>  %8 = load i32, i32* %i, align 4</div>
<div>  %9 = load double, double* %imag, align 8</div>
<div>  %10 = load %struct.su3_matrix*, %struct.su3_matrix** %c.addr, align 8</div>
<div>  %11 = load i32, i32* %i, align 4</div>
<div>  %12 = load double, double* %imag15, align 8</div>
<div>  %13 = load %struct.su3_matrix*, %struct.su3_matrix** %c.addr, align 8</div>
<div>  %14 = load i32, i32* %i, align 4</div>
<div>  %15 = load double, double* %real21, align 8</div>
<div>  %16 = load %struct.su3_matrix*, %struct.su3_matrix** %c.addr, align 8</div>
<div>  %17 = load i32, i32* %i, align 4</div>
<div>  %18 = load double, double* %real26, align 8</div>
<div>  %19 = load %struct.su3_matrix*, %struct.su3_matrix** %c.addr, align 8</div>
<div>  %20 = load i32, i32* %i, align 4</div>
<div>  %21 = load double, double* %imag33, align 8</div>
<div>  %22 = load %struct.su3_matrix*, %struct.su3_matrix** %c.addr, align 8</div>
<div>  %23 = load i32, i32* %i, align 4</div>
<div>  %24 = load double, double* %imag38, align 8</div>
<div>  %25 = load %struct.su3_matrix*, %struct.su3_matrix** %c.addr, align 8</div>
<div>  %26 = load i32, i32* %i, align 4</div>
<div>  %27 = load double, double* %real45, align 8</div>
<div>  %28 = load %struct.su3_matrix*, %struct.su3_matrix** %c.addr, align 8</div>
<div>  %29 = load i32, i32* %i, align 4</div>
<div>  %30 = load double, double* %real50, align 8</div>
<div>  %31 = load %struct.su3_matrix*, %struct.su3_matrix** %c.addr, align 8</div>
<div>  %32 = load i32, i32* %i, align 4</div>
<div>  %33 = load double, double* %imag57, align 8</div>
<div>  %34 = load %struct.su3_matrix*, %struct.su3_matrix** %c.addr, align 8</div>
<div>  %35 = load i32, i32* %i, align 4</div>
<div>  %36 = load double, double* %imag62, align 8</div>
<div>  store double %add64, double* %ar, align 8</div>
<div>  %37 = load double, double* %ar, align 8</div>
<div>  %call = call double @sqrt(double %37) #4</div>
<div>  store double %38, double* %ar, align 8</div>
<div>  %39 = load double, double* %max, align 8</div>
<div>  %40 = load double, double* %ar, align 8</div>
<div>  %41 = load double, double* %ar, align 8</div>
<div>  store double %41, double* %max, align 8</div>
<div><br>
</div>
<div><span style="color:rgb(255,0,0)">For Loop No. 2</span></div>
<div>  %4 = load %struct.site*, %struct.site** %s, align 8</div>
<div>  %5 = load i32, i32* %dir, align 4</div>
<div>  store %struct.su3_matrix* %arrayidx, %struct.su3_matrix** %mat, align 8</div>
<div>  %6 = load %struct.su3_matrix*, %struct.su3_matrix** %mat, align 8</div>
<div>  %call = call double @check_su3(%struct.su3_matrix* %6)</div>
<div>  store double %call, double* %deviation, align 8</div>
<div>  %7 = load double, double* %deviation, align 8</div>
<div>  %call5 = call i32 (...) @mynode()</div>
<div>  %8 = load i32, i32* %i, align 4</div>
<div>  %9 = load i32, i32* %dir, align 4</div>
<div>  %10 = load double, double* %deviation, align 8</div>
<div>  %call6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str, i64 0, i64 0), i32 %call5, i32 %8, i32 %9, double %10)</div>
<div>  %call7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))</div>
<div>  store i32 0, i32* %ii, align 4</div>
<div>  %call29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.4, i64 0, i64 0))</div>
<div>  store i32 0, i32* %ii, align 4</div>
<div>  %call59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))</div>
<div>  %37 = load %struct._IO_FILE*, %struct._IO_FILE** @stdout, align 8</div>
<div>  %call60 = call i32 @fflush(%struct._IO_FILE* %37)</div>
<div>  call void @terminate(i32 1)</div>
<div>  %38 = load double, double* %max_deviation, align 8</div>
<div>  %39 = load double, double* %deviation, align 8</div>
<div>  %40 = load double, double* %deviation, align 8</div>
<div>  store double %40, double* %max_deviation, align 8</div>
<div>  %41 = load double, double* %deviation, align 8</div>
<div>  %42 = load double, double* %deviation, align 8</div>
<div>  %43 = load double, double* %av_deviation, align 8</div>
<div>  store double %add, double* %av_deviation, align 8</div>
<div><br>
</div>
<div><br>
</div>
<div>Thanks a lot,</div>
<div>Bodhisatwa</div>
<div><br>
</div>
<br>
</div>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Doerfert, Johannes <jdoerfert@anl.gov><br>
<b>Sent:</b> Monday, August 5, 2019 2:07:34 PM<br>
<b>To:</b> llvm-dev@lists.llvm.org <llvm-dev@lists.llvm.org>; Chatterjee, Bodhisatwa <bxc583@psu.edu><br>
<b>Subject:</b> Re: LLVM crashing while trying to build SPEC with Clang</font>
<div> </div>
</div>
<div class="x_BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="x_PlainText">It seems that your pass is somehow passing pointers defined in different functions to the alias interface, maybe you cache them in one run invocation and use them in the next?<br>
<br>
The assertion text: BasicAliasAnalysis doesn't support interprocedural queries.<br>
The assertion is in /media/kiit/3E9AF7519AF703E5/llvm-project/llvm/lib/Analysis/BasicAliasAnalysis.cpp line 823<br>
The function is llvm::AliasResult llvm::BasicAAResult::alias(const llvm::MemoryLocation&, const llvm::MemoryLocation&, llvm::AAQueryInfo&)<br>
To get a better idea where in your code the invocation is build it in debug mode.<br>
<br>
Cheers,<br>
  Johannes<br>
<br>
________________________________________<br>
From: llvm-dev <llvm-dev-bounces@lists.llvm.org> on behalf of Chatterjee, Bodhisatwa via llvm-dev <llvm-dev@lists.llvm.org><br>
Sent: Monday, August 5, 2019 13:57<br>
To: llvm-dev@lists.llvm.org<br>
Subject: [llvm-dev] LLVM crashing while trying to build SPEC with Clang<br>
<br>
Hello,<br>
<br>
<br>
I am building the SPEC 2006 Benchmark with Clang as the compiler. I have written a function pass in LLVM and I am trying to run that for SPEC by invoking the pass in the build options of SPEC. The build options of SPEC are in a *.cfg config file, which allows
 us to specify the choice of compiler while building SPEC. (<a href="https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.spec.org%2Fcpu2006%2FDocs%2Finstall-guide-unix.html&data=02%7C01%7Cbxc583%40psu.edu%7Cb698195e72ba451cb24408d719de065e%7C7cf48d453ddb4389a9c1c115526eb52e%7C0%7C0%7C637006313691359515&sdata=SXU%2BUxLasnPSQ%2FJe6H9povq6rf7OsLQ7QNl3%2FtdA8Sw%3D&reserved=0" originalsrc="https://www.spec.org/cpu2006/Docs/install-guide-unix.html" shash="GOHzB5k8m0l8lYBtdBvTPfuCHg8HRbPjqtI9iYUEvVSUdl299gKmfAkDn9bMS7w+ejyEv0O0siZ83eLUXGz0NZZlecBNx0r6Ml/Xo4nLB5tPQTASxsqUzo3mP9ulgkZPJ46eaO++EDvtTSagjjir2GUZ4VL+EaS5HFQ7dtSoC5c=">https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.spec.org%2Fcpu2006%2FDocs%2Finstall-guide-unix.html&amp;data=02%7C01%7Cbxc583%40psu.edu%7C09f9e3dad2a64b4a7f8808d719d82fe7%7C7cf48d453ddb4389a9c1c115526eb52e%7C0%7C0%7C637006288616822487&amp;sdata=lhwNligtKVUezS4O%2BvIFB6c9qJ9hNeWcoszQuxHvOZE%3D&amp;reserved=0</a>)<br>
<br>
<br>
The pass runs for several functions, but llvm crashes at a certain point. I am checking dependencies between various loops in a function in that pass.<br>
<br>
<br>
The crash message and stack dump is:<br>
<br>
<br>
clang-9: /media/kiit/3E9AF7519AF703E5/llvm-project/llvm/lib/Analysis/BasicAliasAnalysis.cpp:823: llvm::AliasResult llvm::BasicAAResult::alias(const llvm::MemoryLocation&, const llvm::MemoryLocation&, llvm::AAQueryInfo&): Assertion `notDifferentParent(LocA.Ptr,
 LocB.Ptr) && "BasicAliasAnalysis doesn't support interprocedural queries."' failed.<br>
Stack dump:<br>
0. Program arguments: /media/kiit/3E9AF7519AF703E5/llvm/bin/clang-9 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -main-file-name check_unitarity.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose
 -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -coverage-notes-file /media/kiit/3E9AF7519AF703E5/New_Spec/cpu2006/benchspec/CPU2006/433.milc/run/build_base_amd64-m64-gcc42-nn.0006/check_unitarity.gcno
 -resource-dir /media/kiit/3E9AF7519AF703E5/llvm/lib/clang/9.0.0 -D SPEC_CPU -D NDEBUG -I . -D FN -D FAST -D CONGRAD_TMP_VECTORS -D DSLASH_TMP_LINKS -D SPEC_CPU_LP64 -I/opt/intel/compilers_and_libraries_2019.2.187/linux/ipp/include -I/opt/intel/compilers_and_libraries_2019.2.187/linux/mkl/include
 -I/opt/intel/compilers_and_libraries_2019.2.187/linux/pstl/include -I/opt/intel/compilers_and_libraries_2019.2.187/linux/tbb/include -I/opt/intel/compilers_and_libraries_2019.2.187/linux/tbb/include -I/opt/intel/compilers_and_libraries_2019.2.187/linux/daal/include
 -I/opt/intel/compilers_and_libraries_2019.2.187/linux/ipp/include -I/opt/intel/compilers_and_libraries_2019.2.187/linux/mkl/include -I/opt/intel/compilers_and_libraries_2019.2.187/linux/pstl/include -I/opt/intel/compilers_and_libraries_2019.2.187/linux/tbb/include
 -I/opt/intel/compilers_and_libraries_2019.2.187/linux/tbb/include -I/opt/intel/compilers_and_libraries_2019.2.187/linux/daal/include -internal-isystem /usr/local/include -internal-isystem /media/kiit/3E9AF7519AF703E5/llvm/lib/clang/9.0.0/include -internal-externc-isystem
 /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir /media/kiit/3E9AF7519AF703E5/New_Spec/cpu2006/benchspec/CPU2006/433.milc/run/build_base_amd64-m64-gcc42-nn.0006 -ferror-limit 19
 -fmessage-length 0 -fobjc-runtime=gcc -fdiagnostics-show-option -load /media/kiit/3E9AF7519AF703E5/llvm-pass-skeleton/build/skeleton/libSkeletonPass.so -o check_unitarity.o -x c check_unitarity.c -faddrsig<br>
1. <eof> parser at end of file<br>
2. Per-function optimization<br>
3. Running pass 'Unnamed pass: implement Pass::getPassName()' on function '@check_su3'<br>
 #0 0x0000000004f2a60f llvm::sys::PrintStackTrace(llvm::raw_ostream&) /media/kiit/3E9AF7519AF703E5/llvm-project/llvm/lib/Support/Unix/Signals.inc:494:0<br>
<br>
I have included my function pass and the SPEC Config file(*.cfg) here.<br>
<br>
Thanks,<br>
Bodhisatwa<br>
<br>
<br>
<br>
<br>
</div>
</span></font></div>
</div>
</div>
</div>
</body>
</html>