[PATCH] D75964: [GC] Remove buggy untested optimization from statepoint lowering

Serguei Katkov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 10 21:34:01 PDT 2020


skatkov added a comment.

without this patch I get the following crash (which disappears with it):

  # After Instruction Selection
  # Machine code for function test: IsSSA, TracksLiveness
  
  bb.0.entry:
    successors: %bb.1(0x80000000); %bb.1(100.00%)
  
    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
    STATEPOINT 0, 0, 0, @func, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, <regmask $bh $bl $bp $bph $bpl $bx $ebp $ebx $hbp $hbx $rbp $rbx $r12 $r13 $r14 $r15 $r12b $r13b $r14b $r15b $r12bh $r13bh $r14bh $r15bh $r12d $r13d $r14d $r15d $r12w $r13w $r14w $r15w $r12wh and 3 more...>, implicit-def $rsp, implicit-def $ssp
    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
    STATEPOINT 0, 0, 0, @func, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, <regmask $bh $bl $bp $bph $bpl $bx $ebp $ebx $hbp $hbx $rbp $rbx $r12 $r13 $r14 $r15 $r12b $r13b $r14b $r15b $r12bh $r13bh $r14bh $r15bh $r12d $r13d $r14d $r15d $r12w $r13w $r14w $r15w $r12wh and 3 more...>, implicit-def $rsp, implicit-def $ssp
    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
    %1:gr32 = MOV32r0 implicit-def dead $eflags
    %0:gr64 = SUBREG_TO_REG 0, killed %1:gr32, %subreg.sub_32bit
  
  bb.1.next:
  ; predecessors: %bb.0
  
    TEST64rr %2:gr64, %2:gr64, implicit-def $eflags
    %3:gr8 = SETCCr 4, implicit $eflags
    $al = COPY %3:gr8
    RET 0, $al
  
  # End machine code for function test.
  
  *** Bad machine code: Reading virtual register without a def ***
  - function:    test
  - basic block: %bb.1 next (0x1dc1350)
  - instruction: TEST64rr %2:gr64, %2:gr64, implicit-def $eflags
  - operand 0:   %2:gr64
  
  *** Bad machine code: Reading virtual register without a def ***
  - function:    test
  - basic block: %bb.1 next (0x1dc1350)
  - instruction: TEST64rr %2:gr64, %2:gr64, implicit-def $eflags
  - operand 1:   %2:gr64
  LLVM ERROR: Found 2 machine code errors.
  Stack dump:
  0.      Program arguments: /localhome/skatkov/work/llvm/build/buildDA/bin/llc -verify-machineinstrs
  1.      Running pass 'Function Pass Manager' on module '<stdin>'.
  2.      Running pass 'Verify generated machine code' on function '@test'
   #0 0x00007fb96b956360 llvm::sys::PrintStackTrace(llvm::raw_ostream&) /localhome/skatkov/work/llvm/src/llvm/lib/Support/Unix/Signals.inc:564:0
   #1 0x00007fb96b9563f3 PrintStackTraceSignalHandler(void*) /localhome/skatkov/work/llvm/src/llvm/lib/Support/Unix/Signals.inc:625:0
   #2 0x00007fb96b954484 llvm::sys::RunSignalHandlers() /localhome/skatkov/work/llvm/src/llvm/lib/Support/Signals.cpp:68:0
   #3 0x00007fb96b955d9f SignalHandler(int) /localhome/skatkov/work/llvm/src/llvm/lib/Support/Unix/Signals.inc:406:0
   #4 0x00007fb968cc25d0 __restore_rt (/lib64/libpthread.so.0+0xf5d0)
   #5 0x00007fb96806b2c7 raise (/lib64/libc.so.6+0x362c7)
   #6 0x00007fb96806c9b8 abort (/lib64/libc.so.6+0x379b8)
   #7 0x00007fb96b80f9ea llvm::install_bad_alloc_error_handler(void (*)(void*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool), void*) /localhome/skatkov/work/llvm/src/llvm/lib/Support/ErrorHandling.cpp:130:0
   #8 0x00007fb96bffe29d (anonymous namespace)::MachineVerifierPass::runOnMachineFunction(llvm::MachineFunction&) /localhome/skatkov/work/llvm/src/llvm/lib/CodeGen/MachineVerifier.cpp:294:0


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75964/new/

https://reviews.llvm.org/D75964





More information about the llvm-commits mailing list