<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 - opt crashes with ../lib/IR/Constants.cpp:1905: static llvm::Constant *llvm::ConstantExpr::getCompare(unsigned short, llvm::Constant *, llvm::Constant *, bool): Assertion `C1->getType() == C2->getType() && "Op types should be identical!"' failed."
href="https://bugs.llvm.org/show_bug.cgi?id=38500">38500</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>opt crashes with ../lib/IR/Constants.cpp:1905: static llvm::Constant *llvm::ConstantExpr::getCompare(unsigned short, llvm::Constant *, llvm::Constant *, bool): Assertion `C1->getType() == C2->getType() && "Op types should be identical!"' failed.
</td>
</tr>
<tr>
<th>Product</th>
<td>new-bugs
</td>
</tr>
<tr>
<th>Version</th>
<td>unspecified
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>Linux
</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>new bugs
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>mikael.holmen@ericsson.com
</td>
</tr>
<tr>
<th>CC</th>
<td>llvm-bugs@lists.llvm.org
</td>
</tr></table>
<p>
<div>
<pre>Running
opt -inline -S -o - bbi-16745.ll
yields
opt: ../lib/IR/Constants.cpp:1905: static llvm::Constant
*llvm::ConstantExpr::getCompare(unsigned short, llvm::Constant *,
llvm::Constant *, bool): Assertion `C1->getType() == C2->getType() && "Op types
should be identical!"' failed.
Stack dump:
0. Program arguments: /data/repo/llvm-patch/build-all/bin/opt -verify
-inline -S -o - bbi-16745.ll
1. Running pass 'CallGraph Pass Manager' on module 'bbi-16745.ll'.
#0 0x0000000002086db4 PrintStackTraceSignalHandler(void*)
(/data/repo/llvm-patch/build-all/bin/opt+0x2086db4)
#1 0x0000000002084f10 llvm::sys::RunSignalHandlers()
(/data/repo/llvm-patch/build-all/bin/opt+0x2084f10)
#2 0x0000000002087118 SignalHandler(int)
(/data/repo/llvm-patch/build-all/bin/opt+0x2087118)
#3 0x00007f2ec1966330 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x10330)
#4 0x00007f2ec0555c37 gsignal
/build/eglibc-ripdx6/eglibc-2.19/signal/../nptl/sysdeps/unix/sysv/linux/raise.c:56:0
#5 0x00007f2ec0559028 abort
/build/eglibc-ripdx6/eglibc-2.19/stdlib/abort.c:91:0
#6 0x00007f2ec054ebf6 __assert_fail_base
/build/eglibc-ripdx6/eglibc-2.19/assert/assert.c:92:0
#7 0x00007f2ec054eca2 (/lib/x86_64-linux-gnu/libc.so.6+0x2fca2)
#8 0x0000000001a3dc7a llvm::ConstantExpr::getCompare(unsigned short,
llvm::Constant*, llvm::Constant*, bool)
(/data/repo/llvm-patch/build-all/bin/opt+0x1a3dc7a)
#9 0x00000000015359d0 (anonymous
namespace)::CallAnalyzer::visitCmpInst(llvm::CmpInst&)
(/data/repo/llvm-patch/build-all/bin/opt+0x15359d0)
#10 0x000000000152f643 llvm::InstVisitor<(anonymous namespace)::CallAnalyzer,
bool>::visit(llvm::Instruction&)
(/data/repo/llvm-patch/build-all/bin/opt+0x152f643)
#11 0x000000000152c2ad (anonymous
namespace)::CallAnalyzer::analyzeCall(llvm::CallSite)
(/data/repo/llvm-patch/build-all/bin/opt+0x152c2ad)
#12 0x000000000152a966 llvm::getInlineCost(llvm::CallSite, llvm::Function*,
llvm::InlineParams const&, llvm::TargetTransformInfo&,
std::function<llvm::AssumptionCache& (llvm::Function&)>&,
llvm::Optional<llvm::function_ref<llvm::BlockFrequencyInfo& (llvm::Function&)>
<span class="quote">>, llvm::ProfileSummaryInfo*, llvm::OptimizationRemarkEmitter*)</span >
(/data/repo/llvm-patch/build-all/bin/opt+0x152a966)
#13 0x000000000152a38e llvm::getInlineCost(llvm::CallSite, llvm::InlineParams
const&, llvm::TargetTransformInfo&, std::function<llvm::AssumptionCache&
(llvm::Function&)>&,
llvm::Optional<llvm::function_ref<llvm::BlockFrequencyInfo& (llvm::Function&)>
<span class="quote">>, llvm::ProfileSummaryInfo*, llvm::OptimizationRemarkEmitter*)</span >
(/data/repo/llvm-patch/build-all/bin/opt+0x152a38e)
#14 0x0000000001bcd01a (anonymous
namespace)::SimpleInliner::getInlineCost(llvm::CallSite)
(/data/repo/llvm-patch/build-all/bin/opt+0x1bcd01a)
#15 0x0000000001bd4bbd shouldInline(llvm::CallSite,
llvm::function_ref<llvm::InlineCost (llvm::CallSite)>,
llvm::OptimizationRemarkEmitter&)
(/data/repo/llvm-patch/build-all/bin/opt+0x1bd4bbd)
#16 0x0000000001bce49c
llvm::LegacyInlinerBase::inlineCalls(llvm::CallGraphSCC&)
(/data/repo/llvm-patch/build-all/bin/opt+0x1bce49c)
#17 0x0000000001bcd412 llvm::LegacyInlinerBase::runOnSCC(llvm::CallGraphSCC&)
(/data/repo/llvm-patch/build-all/bin/opt+0x1bcd412)
#18 0x00000000014d9614 (anonymous
namespace)::CGPassManager::runOnModule(llvm::Module&)
(/data/repo/llvm-patch/build-all/bin/opt+0x14d9614)
#19 0x0000000001af927a llvm::legacy::PassManagerImpl::run(llvm::Module&)
(/data/repo/llvm-patch/build-all/bin/opt+0x1af927a)
#20 0x00000000007553b4 main (/data/repo/llvm-patch/build-all/bin/opt+0x7553b4)
#21 0x00007f2ec0540f45 __libc_start_main
/build/eglibc-ripdx6/eglibc-2.19/csu/libc-start.c:321:0
#22 0x000000000073dafd _start
(/data/repo/llvm-patch/build-all/bin/opt+0x73dafd)
Abort
Problem seems to be that when the
%cmp = icmp eq i32 %sub.ptr.sub, 0
is analyzed by
bool CallAnalyzer::visitCmpInst(CmpInst &I) {
Value *LHS = I.getOperand(0), *RHS = I.getOperand(1);
// First try to handle simplified comparisons.
if (simplifyInstruction(I, [&](SmallVectorImpl<Constant *> &COps) {
return ConstantExpr::getCompare(I.getPredicate(), COps[0], COps[1]);
}))
return true;
we call simplifyInstruction above:
template <typename Callable>
bool CallAnalyzer::simplifyInstruction(Instruction &I, Callable Evaluate) {
SmallVector<Constant *, 2> COps;
for (Value *Op : I.operands()) {
Constant *COp = dyn_cast<Constant>(Op);
if (!COp)
COp = SimplifiedValues.lookup(Op);
if (!COp)
return false;
COps.push_back(COp);
}
auto *C = Evaluate(COps);
if (!C)
return false;
SimplifiedValues[&I] = C;
return true;
}
The loop in simplifyInstruction finds
i16 0
and
i32 0
in SimplifiedValues, and then ConstantExpr::getCompare pukes because the two
values have different types.
Found at current trunk, r339288 and the problem seems to be old.</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>