Issue 56050
Summary HexagonExpandCondsets does not preserve LiveIntervals
Labels backend:Hexagon
Assignees
Reporter jayfoad
    See https://reviews.llvm.org/D127731 WIP: [MachineVerifier] Try harder to verify analyses

If I apply just the MachineVerifier part of this patch then I get see a couple of Hexagon CodeGen tests failing with `Bad machine code: Multiple connected components in live interval`:
```
FAIL: LLVM :: CodeGen/Hexagon/expand-condsets-same-inputs.mir (1247 of 1248)
******************** TEST 'LLVM :: CodeGen/Hexagon/expand-condsets-same-inputs.mir' FAILED ********************
Script:
--
: 'RUN: at line 1';   /home/jayfoad2/llvm-release/bin/llc -march=hexagon -run-pass expand-condsets -expand-condsets-coa-limit=0 -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-same-inputs.mir -verify-machineinstrs | /home/jayfoad2/llvm-release/bin/FileCheck /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-same-inputs.mir
--
Exit Code: 2

Command Output (stderr):
--
+ : 'RUN: at line 1'
+ /home/jayfoad2/llvm-release/bin/llc -march=hexagon -run-pass expand-condsets -expand-condsets-coa-limit=0 -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-same-inputs.mir -verify-machineinstrs
+ /home/jayfoad2/llvm-release/bin/FileCheck /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-same-inputs.mir

# After Hexagon Expand Condsets
********** INTERVALS **********
R0 [0B,0d:0)[96r,96d:1) 0@0B-phi 1@96r
R1 [0B,48r:0) 0@0B-phi
R2 [0B,0d:0) 0@0B-phi
P0~P3_0 [0B,0d:0) 0@0B-phi
%0 [16r,16d:1)[32r,32d:0) 0@32r 1@16r  weight:0.000000e+00
%1 [48r,64r:0) 0@48r  weight:0.000000e+00
%2 [64r,80r:0) 0@64r  weight:0.000000e+00
%3 [80r,96r:0) 0@80r  weight:0.000000e+00
RegMasks:
********** MACHINEINSTRS **********
# Machine code for function fred: NoPHIs, TracksLiveness

0B	bb.0:
	  liveins: $r0, $r1, $r2, $p0
16B	  dead %0:predregs = COPY $p0
32B	  dead %0:predregs = COPY $p0
48B	  %1:intregs = COPY $r1
64B	  %2:intregs = A2_addi %1:intregs, 1
80B	  %3:intregs = COPY killed %2:intregs
96B	  $r0 = COPY killed %3:intregs

# End machine code for function fred.

*** Bad machine code: Multiple connected components in live interval ***
- function:    fred
- interval:    %0 [16r,16d:1)[32r,32d:0) 0@32r 1@16r  weight:0.000000e+00
0: valnos 0
1: valnos 1
LLVM ERROR: Found 1 machine code errors.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0.	Program arguments: /home/jayfoad2/llvm-release/bin/llc -march=hexagon -run-pass expand-condsets -expand-condsets-coa-limit=0 -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-same-inputs.mir -verify-machineinstrs
1.	Running pass 'Function Pass Manager' on module '/home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-same-inputs.mir'.
2.	Running pass 'Verify generated machine code' on function '@fred'
 #0 0x0000000005682ed3 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/jayfoad2/llvm-release/bin/llc+0x5682ed3)
 #1 0x0000000005680bfe llvm::sys::RunSignalHandlers() (/home/jayfoad2/llvm-release/bin/llc+0x5680bfe)
 #2 0x000000000568325f SignalHandler(int) Signals.cpp:0:0
 #3 0x00007fa744fd9420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007fa744a6c00b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007fa744a4b859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00000000055e9b63 llvm::report_fatal_error(llvm::Twine const&, bool) (/home/jayfoad2/llvm-release/bin/llc+0x55e9b63)
 #7 0x0000000004a1fdef (/home/jayfoad2/llvm-release/bin/llc+0x4a1fdef)
 #8 0x0000000004959c5e llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/home/jayfoad2/llvm-release/bin/llc+0x4959c5e)
 #9 0x0000000004dd5b38 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/jayfoad2/llvm-release/bin/llc+0x4dd5b38)
#10 0x0000000004ddc378 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/jayfoad2/llvm-release/bin/llc+0x4ddc378)
#11 0x0000000004dd61e7 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/jayfoad2/llvm-release/bin/llc+0x4dd61e7)
#12 0x000000000311d3de main (/home/jayfoad2/llvm-release/bin/llc+0x311d3de)
#13 0x00007fa744a4d083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#14 0x000000000311a96e _start (/home/jayfoad2/llvm-release/bin/llc+0x311a96e)
FileCheck error: '<stdin>' is empty.
FileCheck command line:  /home/jayfoad2/llvm-release/bin/FileCheck /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-same-inputs.mir

--

********************
FAIL: LLVM :: CodeGen/Hexagon/expand-condsets-def-undef.mir (1248 of 1248)
******************** TEST 'LLVM :: CodeGen/Hexagon/expand-condsets-def-undef.mir' FAILED ********************
Script:
--
: 'RUN: at line 1';   /home/jayfoad2/llvm-release/bin/llc -march=hexagon -run-pass expand-condsets -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-def-undef.mir -verify-machineinstrs | /home/jayfoad2/llvm-release/bin/FileCheck /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-def-undef.mir
--
Exit Code: 2

Command Output (stderr):
--
+ : 'RUN: at line 1'
+ /home/jayfoad2/llvm-release/bin/llc -march=hexagon -run-pass expand-condsets -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-def-undef.mir -verify-machineinstrs
+ /home/jayfoad2/llvm-release/bin/FileCheck /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-def-undef.mir

# After Hexagon Expand Condsets
********** INTERVALS **********
R0 [0B,48r:0) 0@0B-phi
R1 [0B,48r:0) 0@0B-phi
P0~P3_0 [0B,0d:0) 0@0B-phi
%0 [16r,88r:0) 0@16r  weight:0.000000e+00
%1 [32r,76r:0) 0@32r  weight:0.000000e+00
%2 [48r,64r:1)[76r,84r:0)[84r,88r:3)[88r,88d:2) 0@76r 1@48r 2@88r 3@84r  L0000000000000002 [48r,48d:1)[76r,76d:0) 0@76r 1@48r  L0000000000000001 [48r,64r:2)[84r,88r:1)[88r,88d:0) 0@88r 1@84r 2@48r  weight:0.000000e+00
%3 [64r,84r:0) 0@64r  weight:0.000000e+00
RegMasks:
********** MACHINEINSTRS **********
# Machine code for function fred: NoPHIs, TracksLiveness
Function Live Ins: $p0 in %0, $r0 in %1, $d0 in %2

0B	bb.0:
	  liveins: $r0, $d0, $p0
16B	  %0:predregs = COPY $p0
32B	  %1:intregs = COPY $r0
48B	  %2:doubleregs = COPY $d0
64B	  %3:intregs = A2_addi %2.isub_hi:doubleregs, 1
76B	  dead undef %2.isub_lo:doubleregs = A2_tfrf %0:predregs, killed %1:intregs
84B	  %2.isub_hi:doubleregs = A2_tfrt %0:predregs, killed %3:intregs
88B	  dead %2.isub_hi:doubleregs = C2_cmoveif killed %0:predregs, 0, implicit %2.isub_hi:doubleregs(tied-def 0)

# End machine code for function fred.

*** Bad machine code: Multiple connected components in live interval ***
- function:    fred
- interval:    %2 [48r,64r:1)[76r,84r:0)[84r,88r:3)[88r,88d:2) 0@76r 1@48r 2@88r 3@84r  L0000000000000002 [48r,48d:1)[76r,76d:0) 0@76r 1@48r  L0000000000000001 [48r,64r:2)[84r,88r:1)[88r,88d:0) 0@88r 1@84r 2@48r  weight:0.000000e+00
0: valnos 0 2 3
1: valnos 1
LLVM ERROR: Found 1 machine code errors.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0.	Program arguments: /home/jayfoad2/llvm-release/bin/llc -march=hexagon -run-pass expand-condsets -o - /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-def-undef.mir -verify-machineinstrs
1.	Running pass 'Function Pass Manager' on module '/home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-def-undef.mir'.
2.	Running pass 'Verify generated machine code' on function '@fred'
 #0 0x0000000005682ed3 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/jayfoad2/llvm-release/bin/llc+0x5682ed3)
 #1 0x0000000005680bfe llvm::sys::RunSignalHandlers() (/home/jayfoad2/llvm-release/bin/llc+0x5680bfe)
 #2 0x000000000568325f SignalHandler(int) Signals.cpp:0:0
 #3 0x00007f0e95827420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007f0e952ba00b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007f0e95299859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00000000055e9b63 llvm::report_fatal_error(llvm::Twine const&, bool) (/home/jayfoad2/llvm-release/bin/llc+0x55e9b63)
 #7 0x0000000004a1fdef (/home/jayfoad2/llvm-release/bin/llc+0x4a1fdef)
 #8 0x0000000004959c5e llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/home/jayfoad2/llvm-release/bin/llc+0x4959c5e)
 #9 0x0000000004dd5b38 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/jayfoad2/llvm-release/bin/llc+0x4dd5b38)
#10 0x0000000004ddc378 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/jayfoad2/llvm-release/bin/llc+0x4ddc378)
#11 0x0000000004dd61e7 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/jayfoad2/llvm-release/bin/llc+0x4dd61e7)
#12 0x000000000311d3de main (/home/jayfoad2/llvm-release/bin/llc+0x311d3de)
#13 0x00007f0e9529b083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#14 0x000000000311a96e _start (/home/jayfoad2/llvm-release/bin/llc+0x311a96e)
FileCheck error: '<stdin>' is empty.
FileCheck command line:  /home/jayfoad2/llvm-release/bin/FileCheck /home/jayfoad2/git/llvm-project/llvm/test/CodeGen/Hexagon/expand-condsets-def-undef.mir

--

********************
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to