[llvm-bugs] [Bug 38375] New: Assertion in GVN trying to coerce non-integral pointer

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Jul 30 13:00:29 PDT 2018


https://bugs.llvm.org/show_bug.cgi?id=38375

            Bug ID: 38375
           Summary: Assertion in GVN trying to coerce non-integral pointer
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Scalar Optimizations
          Assignee: unassignedbugs at nondot.org
          Reporter: keno at alumni.harvard.edu
                CC: llvm-bugs at lists.llvm.org, v.churavy at gmail.com

Consider the following bugpoint-reduced test case of
https://github.com/JuliaLang/julia/issues/28360:

```
; 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>
>(llvm::Value*, llvm::Type*, llvm::IRBuilder<llvm::ConstantFolder,
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
```

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20180730/ae2f28d8/attachment.html>


More information about the llvm-bugs mailing list