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

Reply via email to