| Issue |
166868
|
| Summary |
[DFAJumpThread] Causes LLD Test Failure in arm-thunk-arm-thumb-reuse.s
|
| Labels |
lld
|
| Assignees |
|
| Reporter |
gulfemsavrun
|
We have started seeing a test failure in `lld :: ELF/arm-thunk-arm-thumb-reuse.s` after landing https://github.com/llvm/llvm-project/pull/157646 that enables `DFAJumpThread` by default.
```
FAIL: lld :: ELF/arm-thunk-arm-thumb-reuse.s (833 of 3156)
******************** TEST 'lld :: ELF/arm-thunk-arm-thumb-reuse.s' FAILED ********************
Exit Code: 1
Command Output (stdout):
--
# RUN: at line 2
split-file /b/s/w/ir/x/w/llvm-llvm-project/lld/test/ELF/arm-thunk-arm-thumb-reuse.s /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp
# executed command: split-file /b/s/w/ir/x/w/llvm-llvm-project/lld/test/ELF/arm-thunk-arm-thumb-reuse.s /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp
# RUN: at line 3
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/llvm-mc -arm-add-build-attributes -filetype=obj -triple=thumbv7a-none-linux-gnueabi /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp/test.s -o /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp.o
# executed command: /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/llvm-mc -arm-add-build-attributes -filetype=obj -triple=thumbv7a-none-linux-gnueabi /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp/test.s -o /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp.o
# RUN: at line 4
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/ld.lld --script /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp/script /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp.o -o /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2
# executed command: /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/ld.lld --script /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp/script /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp.o -o /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2
# RUN: at line 5
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/llvm-objdump --no-print-imm-hex --no-show-raw-insn -d /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2 | /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/FileCheck /b/s/w/ir/x/w/llvm-llvm-project/lld/test/ELF/arm-thunk-arm-thumb-reuse.s
# executed command: /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/llvm-objdump --no-print-imm-hex --no-show-raw-insn -d /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2
# executed command: /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/FileCheck /b/s/w/ir/x/w/llvm-llvm-project/lld/test/ELF/arm-thunk-arm-thumb-reuse.s
# RUN: at line 7
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/llvm-mc -arm-add-build-attributes -filetype=obj -triple=thumbv7aeb-none-linux-gnueabi -mcpu=cortex-a8 /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp/test.s -o /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp.o
# executed command: /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/llvm-mc -arm-add-build-attributes -filetype=obj -triple=thumbv7aeb-none-linux-gnueabi -mcpu=cortex-a8 /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp/test.s -o /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp.o
# RUN: at line 8
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/ld.lld --script /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp/script /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp.o -o /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2
# executed command: /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/ld.lld --script /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp/script /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp.o -o /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2
# RUN: at line 9
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/llvm-objdump --no-print-imm-hex --no-show-raw-insn -d /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2 | /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/FileCheck /b/s/w/ir/x/w/llvm-llvm-project/lld/test/ELF/arm-thunk-arm-thumb-reuse.s
# executed command: /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/llvm-objdump --no-print-imm-hex --no-show-raw-insn -d /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2
# executed command: /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/FileCheck /b/s/w/ir/x/w/llvm-llvm-project/lld/test/ELF/arm-thunk-arm-thumb-reuse.s
# RUN: at line 10
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/ld.lld --be8 --script /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp/script /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp.o -o /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2
# executed command: /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/ld.lld --be8 --script /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp/script /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp.o -o /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2
# RUN: at line 11
/b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/llvm-objdump --no-print-imm-hex --no-show-raw-insn -d /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2 | /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/FileCheck /b/s/w/ir/x/w/llvm-llvm-project/lld/test/ELF/arm-thunk-arm-thumb-reuse.s
# executed command: /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/llvm-objdump --no-print-imm-hex --no-show-raw-insn -d /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2
# executed command: /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/bin/FileCheck /b/s/w/ir/x/w/llvm-llvm-project/lld/test/ELF/arm-thunk-arm-thumb-reuse.s
# .---command stderr------------
# | /b/s/w/ir/x/w/llvm-llvm-project/lld/test/ELF/arm-thunk-arm-thumb-reuse.s:38:16: error: CHECK-NEXT: expected string not found in input
# | // CHECK-NEXT: 10000: bl 0x10010 <__ARMv7ABSLongThunk_far>
# | ^
# | <stdin>:6:19: note: scanning from here
# | 00010000 <_start>:
# | ^
# | <stdin>:12:1: note: possible intended match here
# | 00010010 <__ARMv7ABSLongThunk_far>:
# | ^
# |
# | Input file: <stdin>
# | Check file: /b/s/w/ir/x/w/llvm-llvm-project/lld/test/ELF/arm-thunk-arm-thumb-reuse.s
# |
# | -dump-input=help explains the following input dump.
# |
# | Input was:
# | <<<<<<
# | 1:
# | 2: /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-instrumented-bins/tools/clang/stage2-bins/tools/lld/test/ELF/Output/arm-thunk-arm-thumb-reuse.s.tmp2: file format elf32-bigarm
# | 3:
# | 4: Disassembly of section .text:
# | 5:
# | 6: 00010000 <_start>:
# | next:38'0 X error: no match found
# | 7: 10000: andeq lr, r0, #0, #22
# | next:38'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 8: 10004: <unknown>
# | next:38'0 ~~~~~~~~~~~~~~~~~~
# | 9: 10008: <unknown>
# | next:38'0 ~~~~~~~~~~~~~~~~~~
# | 10: 1000c: <unknown>
# | next:38'0 ~~~~~~~~~~~~~~~~~~
# | 11:
# | next:38'0 ~
# | 12: 00010010 <__ARMv7ABSLongThunk_far>:
# | next:38'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | next:38'1 ? possible intended match
# | 13: 10010: sbceq lr, r0, r0, lsl #6
# | next:38'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 14: 10014: sbceq lr, r0, r1, asr #6
# | next:38'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 15: 10018: ldclne p1, c14, [pc], #188
# | next:38'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 16:
# | next:38'0 ~
# | 17: 0001001c <__Thumbv7ABSLongThunk_far2>:
# | next:38'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | .
# | .
# | .
# | >>>>>>
# `-----------------------------
# error: command failed with exit status: 1
--
********************
```
https://luci-milo.appspot.com/ui/p/fuchsia/builders/prod/clang-linux-x64/b8699130233180762193/overview
We confirmed that reverting this patch resolves the issue. For context, the failure only reproduces in builders configured to run a two-stage build with PGO enabled. The issue is tied to the `--be8 big-endian` mode in LLD, specifically triggered by the following lines:
```
// RUN: ld.lld --be8 --script %t/script %t.o -o %t2
// RUN: llvm-objdump --no-print-imm-hex --no-show-raw-insn -d %t2 | FileCheck %s
```
**Before this change**
```
Disassembly of section .text:
00010000 <_start>:
10000: bl 0x10010 <__ARMv7ABSLongThunk_far> @ imm = #8
10004: blx 0x10010 <__ARMv7ABSLongThunk_far> @ imm = #8
10008: bl 0x1001c <__Thumbv7ABSLongThunk_far2> @ imm = #16
1000c: blx 0x1001c <__Thumbv7ABSLongThunk_far2> @ imm = #8
00010010 <__ARMv7ABSLongThunk_far>:
10010: movw r12, #0
10014: movt r12, #4096
10018: bx r12
0001001c <__Thumbv7ABSLongThunk_far2>:
1001c: movw r12, #4
10020: movt r12, #4096
10024: bx r12
Disassembly of section .text.far:
10000000 <far>:
10000000: bx lr
10000004 <far2>:
10000004: bx lr
```
**After this change**
```
Disassembly of section .text:
00010000 <_start>:
10000: andeq lr, r0, #0, #22
10004: <unknown>
10008: <unknown>
1000c: <unknown>
00010010 <__ARMv7ABSLongThunk_far>:
10010: sbceq lr, r0, r0, lsl #6
10014: sbceq lr, r0, r1, asr #6
10018: ldclne p1, c14, [pc], #188
0001001c <__Thumbv7ABSLongThunk_far2>:
1001c: movw r12, #4
10020: movt r12, #4096
10024: bx r12
Disassembly of section .text.far:
10000000 <far>:
10000000: bx lr
10000004 <far2>:
10000004: bx lr
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs