[llvm-bugs] [Bug 34177] New: AVX512 miscompile during type legalization of v4i1 = setcc v4i64, v4i64

via llvm-bugs llvm-bugs at lists.llvm.org
Sun Aug 13 06:07:30 PDT 2017


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

            Bug ID: 34177
           Summary: AVX512 miscompile during type legalization of  v4i1 =
                    setcc  v4i64, v4i64
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Backend: X86
          Assignee: unassignedbugs at nondot.org
          Reporter: elad2.cohen at intel.com
                CC: llvm-bugs at lists.llvm.org

$ cat /tmp/tst.ll

target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define void @test() local_unnamed_addr {
  %1 = icmp eq <4 x i64> <i64 0, i64 1, i64 2, i64 3>, undef
  %2 = select <4 x i1> %1, <4 x x86_fp80> <x86_fp80 0xK3FFF8000000000000000,
x86_fp80 0xK3FFF8000000000000000, x86_fp80 0xK3FFF8000000000000000, x86_fp80
0xK3FFF8000000000000000>, <4 x x86_fp80> zeroinitializer
  %3 = fadd <4 x x86_fp80> undef, %2
  %4 = shufflevector <4 x x86_fp80> %3, <4 x x86_fp80> undef, <8 x i32> <i32 0,
i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
  store <8 x x86_fp80> %4, <8 x x86_fp80>* undef, align 16
  unreachable
}


This was minimized from a miscompile in the Eigen test-suite
(test/matrix_power.cpp). (similar to
https://bugs.llvm.org/show_bug.cgi?id=33349)

llc -mcpu=haswell does not crash.

llc -mcpu=skx hits an assertion:

ScalarizeVectorOperand Op #0: t47: v1i1 = setcc t44, undef:v1i64, seteq:ch

Do not know how to scalarize this operator's operand!
UNREACHABLE executed at
../lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp:464!
#0 0x00007f04b9064f89 llvm::sys::PrintStackTrace(llvm::raw_ostream&)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/Support/Unix/Signals.inc:398:11
#1 0x00007f04b9065139 PrintStackTraceSignalHandler(void*)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/Support/Unix/Signals.inc:462:1
#2 0x00007f04b90637a3 llvm::sys::RunSignalHandlers()
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/Support/Signals.cpp:0:5
#3 0x00007f04b9065494 SignalHandler(int)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/Support/Unix/Signals.inc:252:1
#4 0x00007f04b80c3100 __restore_rt (/lib64/libpthread.so.0+0xf100)
#5 0x00007f04b75075f7 __GI_raise (/lib64/libc.so.6+0x355f7)
#6 0x00007f04b7508ce8 __GI_abort (/lib64/libc.so.6+0x36ce8)
#7 0x00007f04b8f82a60 LLVMInstallFatalErrorHandler
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/Support/ErrorHandling.cpp:204:0
#8 0x00007f04b9508945
llvm::DAGTypeLegalizer::ScalarizeVectorOperand(llvm::SDNode*, unsigned int)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp:466:36
#9 0x00007f04b94e8519 llvm::DAGTypeLegalizer::run()
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/CodeGen/SelectionDAG/LegalizeTypes.cpp:314:26
#10 0x00007f04b94edb6e llvm::SelectionDAG::LegalizeTypes()
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/CodeGen/SelectionDAG/LegalizeTypes.cpp:1171:34
#11 0x00007f04b9648b14 llvm::SelectionDAGISel::CodeGenAndEmitDAG()
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:759:23
#12 0x00007f04b9648210
llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction,
true, false, void>, false, true>,
llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true,
false, void>, false, true>, bool&)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:666:1
#13 0x00007f04b9647f15
llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:0:7
#14 0x00007f04b96451f9
llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:467:22
#15 0x00007f04be19ab7b (anonymous
namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/Target/X86/X86ISelDAGToDAG.cpp:177:25
#16 0x00007f04bb77d801
llvm::MachineFunctionPass::runOnFunction(llvm::Function&)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/CodeGen/MachineFunctionPass.cpp:62:8
#17 0x00007f04bade8ddf llvm::FPPassManager::runOnFunction(llvm::Function&)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/IR/LegacyPassManager.cpp:1514:27
#18 0x00007f04bade90f5 llvm::FPPassManager::runOnModule(llvm::Module&)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/IR/LegacyPassManager.cpp:1535:16
#19 0x00007f04bade988a (anonymous
namespace)::MPPassManager::runOnModule(llvm::Module&)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/IR/LegacyPassManager.cpp:1591:27
#20 0x00007f04bade93b6 llvm::legacy::PassManagerImpl::run(llvm::Module&)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/IR/LegacyPassManager.cpp:1694:16
#21 0x00007f04bade9da1 llvm::legacy::PassManager::run(llvm::Module&)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../lib/IR/LegacyPassManager.cpp:1725:3
#22 0x000000000041e977 compileModule(char**, llvm::LLVMContext&)
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../tools/llc/llc.cpp:567:42
#23 0x000000000041cedc main
/export/iusers/cohenela/git_workspaces/playground/llvm/build/../tools/llc/llc.cpp:342:13
#24 0x00007f04b74f3b15 __libc_start_main (/lib64/libc.so.6+0x21b15)
#25 0x000000000041c6d5 _start (./bin/llc+0x41c6d5)
Stack dump:
0.      Program arguments: ./bin/llc -mcpu=skx /tmp/tst.ll 
1.      Running pass 'Function Pass Manager' on module '/tmp/tst.ll'.
2.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@test'


Essentially, IIUC what seems to be happening is that a "v4i1 setcc v4i64 v4i64"
is being scalarized and broken down until it reaches "v1i1 setcc v1i64 v1i64" -
at this point the result of this value is not being scalarized since v1i1 is
legal on AVX512 - but the legalizer tries to scalarize the operands where it
fails since there is no scalarizeVecOp_SETCC.

-- 
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/20170813/4aed43ea/attachment.html>


More information about the llvm-bugs mailing list