<html>
<head>
<base href="https://bugs.llvm.org/">
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - Assertion in GVN trying to coerce non-integral pointer"
href="https://bugs.llvm.org/show_bug.cgi?id=38375">38375</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Assertion in GVN trying to coerce non-integral pointer
</td>
</tr>
<tr>
<th>Product</th>
<td>libraries
</td>
</tr>
<tr>
<th>Version</th>
<td>trunk
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>All
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>enhancement
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>Scalar Optimizations
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>keno@alumni.harvard.edu
</td>
</tr>
<tr>
<th>CC</th>
<td>llvm-bugs@lists.llvm.org, v.churavy@gmail.com
</td>
</tr></table>
<p>
<div>
<pre>Consider the following bugpoint-reduced test case of
<a href="https://github.com/JuliaLang/julia/issues/28360">https://github.com/JuliaLang/julia/issues/28360</a>:
```
; ModuleID = 'bugpoint-reduced-named-md.bc'
source_filename = "bugpoint-output-a15dbfc.bc"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:10:11:12:13"
target triple = "x86_64-unknown-linux-gnu"
%jl_value_t = type opaque
%jl_array_t = type { i8 addrspace(13)*, i64, i16, i16, i32 }
; Function Attrs: sspstrong
define nonnull %jl_value_t addrspace(10)* @japi1_p41_33537(%jl_value_t
addrspace(10)*, %jl_value_t addrspace(10)**, i32) #0 {
top:
%3 = call cc36 nonnull %jl_value_t addrspace(10)* bitcast (%jl_value_t
addrspace(10)* (%jl_value_t addrspace(10)**, i32)* @jl_apply_generic to
%jl_value_t addrspace(10)* (%jl_value_t addrspace(10)*, %jl_value_t
addrspace(10)*, %jl_value_t addrspace(10)*, %jl_value_t
addrspace(10)*)*)(%jl_value_t addrspace(10)* addrspacecast (%jl_value_t*
inttoptr (i64 140288708052544 to %jl_value_t*) to %jl_value_t addrspace(10)*),
%jl_value_t addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64
140288562137072 to %jl_value_t*) to %jl_value_t addrspace(10)*), %jl_value_t
addrspace(10)* undef, %jl_value_t addrspace(10)* undef)
%4 = addrspacecast %jl_value_t addrspace(10)* %3 to %jl_value_t
addrspace(11)*
%5 = bitcast %jl_value_t addrspace(11)* %4 to %jl_value_t addrspace(10)*
addrspace(11)*
%6 = load %jl_value_t addrspace(10)*, %jl_value_t addrspace(10)*
addrspace(11)* %5, !tbaa !1, !nonnull !5, !dereferenceable !6, !align !7
%7 = addrspacecast %jl_value_t addrspace(10)* %6 to %jl_value_t
addrspace(11)*
%8 = bitcast %jl_value_t addrspace(11)* %7 to %jl_value_t addrspace(10)*
addrspace(11)*
%9 = getelementptr inbounds %jl_value_t addrspace(10)*, %jl_value_t
addrspace(10)* addrspace(11)* %8, i32 3
%10 = bitcast %jl_value_t addrspace(10)* addrspace(11)* %9 to i64
addrspace(11)*
%11 = load i64, i64 addrspace(11)* %10, !tbaa !8, !invariant.load !5
%12 = call %jl_value_t addrspace(10)* inttoptr (i64 140288860781814 to
%jl_value_t addrspace(10)* (%jl_value_t addrspace(10)*, i64, i64)*)(%jl_value_t
addrspace(10)* addrspacecast (%jl_value_t* inttoptr (i64 140288651696512 to
%jl_value_t*) to %jl_value_t addrspace(10)*), i64 %11, i64 1) [ "jl_roots"(i64
%11) ]
%13 = addrspacecast %jl_value_t addrspace(10)* %3 to %jl_value_t
addrspace(11)*
%14 = bitcast %jl_value_t addrspace(11)* %13 to %jl_array_t addrspace(11)*
%15 = getelementptr inbounds %jl_array_t, %jl_array_t addrspace(11)* %14, i32
0, i32 0
%16 = load i8 addrspace(13)*, i8 addrspace(13)* addrspace(11)* %15, !tbaa !8,
!invariant.load !5, !nonnull !5
%17 = bitcast i8 addrspace(13)* %16 to i64 addrspace(13)*
%18 = getelementptr inbounds i64, i64 addrspace(13)* %17, i64 undef
%19 = load i64, i64 addrspace(13)* %18, align 8, !tbaa !10
%20 = call %jl_value_t addrspace(10)* @jl_box_int64(i64 signext %19)
unreachable
}
declare nonnull %jl_value_t addrspace(10)* @jl_apply_generic(%jl_value_t
addrspace(10)**, i32) #1
declare %jl_value_t addrspace(10)* @jl_box_int64(i64 signext)
attributes #0 = { sspstrong "thunk" }
attributes #1 = { "thunk" }
!llvm.module.flags = !{!0}
!0 = !{i32 1, !"Debug Info Version", i32 3}
!1 = !{!2, !2, i64 0}
!2 = !{!"jtbaa_value", !3, i64 0}
!3 = !{!"jtbaa_data", !4, i64 0}
!4 = !{!"jtbaa"}
!5 = !{}
!6 = !{i64 40}
!7 = !{i64 16}
!8 = !{!9, !9, i64 0, i64 1}
!9 = !{!"jtbaa_const", !4, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"jtbaa_arraybuf", !3, i64 0}
```
Running `opt -gvn bug.ll` results in:
```
opt:
/home/keno/julia/deps/srccache/llvm-6.0.0/lib/Transforms/Utils/VNCoercion.cpp:40:
T* llvm::VNCoercion::coerceAvailableValueToLoadTypeHelper(T*, llvm::Type*,
HelperClass&, const llvm::DataLayout&) [with T = llvm::Value; HelperClass =
llvm::IRBuilder<>]: Assertion `canCoerceMustAliasedValueToLoad(StoredVal,
LoadedTy, DL) && "precondition violation - materialization can't fail"' failed.
LLVMSymbolizer: error reading file: No such file or directory
#0 0x00007fcb3a722a8a llvm::sys::PrintStackTrace(llvm::raw_ostream&)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x76ba8a)
#1 0x00007fcb3a720426 llvm::sys::RunSignalHandlers()
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x769426)
#2 0x00007fcb3a7207c5 SignalHandler(int)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x7697c5)
#3 0x00007fcb39671140 (/lib/x86_64-linux-gnu/libc.so.6+0x37140)
#4 0x00007fcb396710bb gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x370bb)
#5 0x00007fcb39672f5d abort (/lib/x86_64-linux-gnu/libc.so.6+0x38f5d)
#6 0x00007fcb39668f17 (/lib/x86_64-linux-gnu/libc.so.6+0x2ef17)
#7 0x00007fcb39668fc2 (/lib/x86_64-linux-gnu/libc.so.6+0x2efc2)
#8 0x00007fcb3b0e6ac2 llvm::Value*
llvm::VNCoercion::coerceAvailableValueToLoadTypeHelper<llvm::Value,
llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>
<span class="quote">>(llvm::Value*, llvm::Type*, llvm::IRBuilder<llvm::ConstantFolder,</span >
llvm::IRBuilderDefaultInserter>&, llvm::DataLayout const&)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x112fac2)
#9 0x00007fcb3b0e6d01 llvm::VNCoercion::getStoreValueForLoad(llvm::Value*,
unsigned int, llvm::Type*, llvm::Instruction*, llvm::DataLayout const&)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x112fd01)
#10 0x00007fcb3b0e7d9a llvm::VNCoercion::getLoadValueForLoad(llvm::LoadInst*,
unsigned int, llvm::Type*, llvm::Instruction*, llvm::DataLayout const&)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x1130d9a)
#11 0x00007fcb3b259e35
llvm::gvn::AvailableValue::MaterializeAdjustedValue(llvm::LoadInst*,
llvm::Instruction*, llvm::GVN&) const
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x12a2e35)
#12 0x00007fcb3b262275 llvm::GVN::processLoad(llvm::LoadInst*)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x12ab275)
#13 0x00007fcb3b265487 llvm::GVN::processInstruction(llvm::Instruction*) [clone
.part.792] (/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x12ae487)
#14 0x00007fcb3b265e8f llvm::GVN::processBlock(llvm::BasicBlock*)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x12aee8f)
#15 0x00007fcb3b26649f llvm::GVN::iterateOnFunction(llvm::Function&)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x12af49f)
#16 0x00007fcb3b266667 llvm::GVN::runImpl(llvm::Function&,
llvm::AssumptionCache&, llvm::DominatorTree&, llvm::TargetLibraryInfo const&,
llvm::AAResults&, llvm::MemoryDependenceResults*, llvm::LoopInfo*,
llvm::OptimizationRemarkEmitter*)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x12af667)
#17 0x00007fcb3b266d7e llvm::gvn::GVNLegacyPass::runOnFunction(llvm::Function&)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x12afd7e)
#18 0x00007fcb3a82e4d9 llvm::FPPassManager::runOnFunction(llvm::Function&)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x8774d9)
#19 0x00007fcb3a82e549 llvm::FPPassManager::runOnModule(llvm::Module&)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x877549)
#20 0x00007fcb3a82dbd1 llvm::legacy::PassManagerImpl::run(llvm::Module&)
(/home/keno/julia/usr/tools/../lib/libLLVM-6.0.so+0x876bd1)
#21 0x000055b54baabe10 (opt+0x1be10)
#22 0x00007fcb3965b1c1 __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x211c1)
#23 0x000055b54baac5aa (opt+0x1c5aa)
Stack dump:
0. Program arguments: opt -gvn bug.ll
1. Running pass 'Function Pass Manager' on module 'bug.ll'.
2. Running pass 'Global Value Numbering' on function '@japi1_p41_33537'
Aborted
```</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>