Hi,
Compiling the simple following function with llv (LLVM 2.8) :
define <4 x i32> @foo(<4 x i32> %a, <4 x i32> %b) {
%res = select <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4
x i32> %a, <4 x i32> %b ;
ret <4 x i32> %res
}
gives :
UNREACHABLE executed!
0 llc 0x0000000100927422 std::_Rb_tree<llvm::sys::Path,
llvm::sys::Path, std::_Identity<llvm::sys::Path>,
std::less<llvm::sys::Path>, std::allocator<llvm::sys::Path>
>::_M_erase(std::_Rb_tree_node<llvm::sys::Path>*) + 11730
1 llc 0x0000000100927f43 std::_Rb_tree<llvm::sys::Path,
llvm::sys::Path, std::_Identity<llvm::sys::Path>,
std::less<llvm::sys::Path>, std::allocator<llvm::sys::Path>
>::_M_erase(std::_Rb_tree_node<llvm::sys::Path>*) + 14579
2 libSystem.B.dylib 0x00007fff832c735a _sigtramp + 26
3 libSystem.B.dylib 0x0000000100e28800 _sigtramp + 2109084864
4 llc 0x00000001009273e6 std::_Rb_tree<llvm::sys::Path,
llvm::sys::Path, std::_Identity<llvm::sys::Path>,
std::less<llvm::sys::Path>, std::allocator<llvm::sys::Path>
>::_M_erase(std::_Rb_tree_node<llvm::sys::Path>*) + 11670
5 llc 0x0000000100905c1d llvm::APInt::ugt(llvm::APInt const&)
const + 9661
6 llc 0x00000001004424cd llvm::DenseMap<llvm::SDValue,
llvm::SDValue, llvm::DenseMapInfo<llvm::SDValue>,
llvm::DenseMapInfo<llvm::SDValue> >::insert(std::pair<llvm::SDValue,
llvm::SDValue> const&) + 54509
7 llc 0x0000000100429633
llvm::TargetLowering::getRegisterType(llvm::LLVMContext&, llvm::EVT) const +
208419
8 llc 0x000000010042aab6
llvm::TargetLowering::getRegisterType(llvm::LLVMContext&, llvm::EVT) const +
213670
9 llc 0x00000001004f9474
llvm::TargetLowering::getNumRegisters(llvm::LLVMContext&, llvm::EVT) const +
13556
10 llc 0x00000001004face4
llvm::TargetLowering::getNumRegisters(llvm::LLVMContext&, llvm::EVT) const +
19812
11 llc 0x00000001004fb2e2
llvm::TargetLowering::getNumRegisters(llvm::LLVMContext&, llvm::EVT) const +
21346
12 llc 0x00000001004fbba8
llvm::TargetLowering::getNumRegisters(llvm::LLVMContext&, llvm::EVT) const +
23592
13 llc 0x00000001005c53bd
std::vector<llvm::MachineJumpTableEntry,
std::allocator<llvm::MachineJumpTableEntry>
>::_M_insert_aux(__gnu_cxx::__normal_iterator<llvm::MachineJumpTableEntry*,
std::vector<llvm::MachineJumpTableEntry,
std::allocator<llvm::MachineJumpTableEntry> > >,
llvm::MachineJumpTableEntry const&) + 2237
14 llc 0x00000001008710b0 llvm::BasicBlockPass::~BasicBlockPass()
+ 28256
15 llc 0x000000010087116b llvm::BasicBlockPass::~BasicBlockPass()
+ 28443
16 llc 0x0000000100872822 llvm::BasicBlockPass::~BasicBlockPass()
+ 34258
17 llc 0x0000000100872b23 llvm::BasicBlockPass::~BasicBlockPass()
+ 35027
18 llc 0x0000000100872bbd llvm::BasicBlockPass::~BasicBlockPass()
+ 35181
19 llc 0x000000010002300a std::_Rb_tree<void const*,
std::pair<void const* const, llvm::PassInfo const*>,
std::_Select1st<std::pair<void const* const, llvm::PassInfo const*>
>, std::less<void const*>, std::allocator<std::pair<void const*
const, llvm::PassInfo const*> > >::_M_insert_unique(std::pair<void
const* const, llvm::PassInfo const*> const&) + 10170
20 llc 0x0000000100021bc8 std::_Rb_tree<void const*,
std::pair<void const* const, llvm::PassInfo const*>,
std::_Select1st<std::pair<void const* const, llvm::PassInfo const*>
>, std::less<void const*>, std::allocator<std::pair<void const*
const, llvm::PassInfo const*> > >::_M_insert_unique(std::pair<void
const* const, llvm::PassInfo const*> const&) + 4984
21 llc 0x0000000000000002 std::_Rb_tree<void const*,
std::pair<void const* const, llvm::PassInfo const*>,
std::_Select1st<std::pair<void const* const, llvm::PassInfo const*>
>, std::less<void const*>, std::allocator<std::pair<void const*
const, llvm::PassInfo const*> > >::_M_insert_unique(std::pair<void
const* const, llvm::PassInfo const*> const&) + 4294834098
Stack dump:
0. Program arguments: llc vector.ll
1. Running pass 'Function Pass Manager' on module 'vector.ll'.
2. Running pass 'X86 DAG->DAG Instruction Selection' on function
'@foo3'
Illegal instruction
Is it a known problem?
Thanks
Stephane Letz