Issue 83775
Summary llvm-mca hits sanitizer error in cycleEnd
Labels tools:llvm-mca, crash-on-valid
Assignees
Reporter arsenm
    f0484e08bdcf64106592808e3ca80404937b4657 was reverted in 31295bbe83c3ea9d8a3372efe34342a299d1018a due to breaking the sanitizer bot. 

Reduced testcase:

```
# RUN: llvm-mca -mtriple=amdgcn -mcpu=gfx940 --timeline --iterations=1 --timeline-max-cycles=0 < %s | FileCheck %s

# CHECK: Iterations: 1
# CHECK: Instructions:      71
# CHECK: Total Cycles:      562
# CHECK: Total uOps:        77

# CHECK: Resources:
# CHECK: [0]   - HWBranch
# CHECK: [1]   - HWExport
# CHECK: [2]   - HWLGKM
# CHECK: [3]   - HWSALU
# CHECK: [4]   - HWVALU
# CHECK: [5]   - HWVMEM
# CHECK: [6]   - HWXDL


v_pk_mov_b32 v[0:1], v[2:3], v[4:5]
v_pk_add_f32 v[0:1], v[0:1], v[0:1]
v_pk_mul_f32 v[0:1], v[0:1], v[0:1]
v_add_co_u32 v5, s[0:1], v1, v2
v_sub_co_u32 v5, s[0:1], v1, v2
v_add_u32 v5, v1, v2
v_sub_u32 v5, v1, v2


# CHECK: [0]    [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
# CHECK-NEXT: -      -      -      -     1.00    -      -     v_pk_mov_b32 v[0:1], v[2:3], v[4:5]
# CHECK-NEXT: -      -      -      -     1.00    - -     v_pk_add_f32 v[0:1], v[0:1], v[0:1]
# CHECK-NEXT: -      - -      -     1.00    -      -     v_pk_mul_f32 v[0:1], v[0:1], v[0:1]
# CHECK-NEXT: -      -      -     1.00   1.00    -      -     v_add_co_u32_e64 v5, s[0:1], v1, v2
# CHECK-NEXT: -      -      -     1.00   1.00    - -     v_sub_co_u32_e64 v5, s[0:1], v1, v2
# CHECK-NEXT: -      -      - -     1.00    -      -     v_add_u32_e32 v5, v1, v2
# CHECK-NEXT: - -      -      -     1.00    -      -     v_sub_u32_e32 v5, v1, v2
```


```
=================================================================
==28215==ERROR: AddressSanitizer: heap-use-after-free on address 0x000107d0149c at pc 0x000100e8afe8 bp 0x00016f97ade0 sp 0x00016f97add8
READ of size 1 at 0x000107d0149c thread T0
    #0 0x100e8afe4 in llvm::mca::InOrderIssueStage::updateCarriedOver() InOrderIssueStage.cpp:327
    #1 0x100e8b458 in llvm::mca::InOrderIssueStage::cycleStart() InOrderIssueStage.cpp:395
 #2 0x100e7b194 in llvm::mca::Pipeline::runCycle() Pipeline.cpp:60
    #3 0x100e7a84c in llvm::mca::Pipeline::run() Pipeline.cpp:43
    #4 0x100492730 in runPipeline(llvm::mca::Pipeline&) llvm-mca.cpp:308
    #5 0x10048afe0 in main llvm-mca.cpp:750
    #6 0x185c6d0dc  (<unknown module>)

0x000107d0149c is located 540 bytes inside of 608-byte region [0x000107d01280,0x000107d014e0)
freed by thread T0 here:
    #0 0x1056e952c in wrap__ZdlPv+0x74 (libclang_rt.asan_osx_dynamic.dylib:arm64e+0x6152c)
    #1 0x100e7f89c in llvm::SmallVectorImpl<std::__1::unique_ptr<llvm::mca::Instruction, std::__1::default_delete<llvm::mca::Instruction>>>::erase(std::__1::unique_ptr<llvm::mca::Instruction, std::__1::default_delete<llvm::mca::Instruction>> const*, std::__1::unique_ptr<llvm::mca::Instruction, std::__1::default_delete<llvm::mca::Instruction>> const*) SmallVector.h:775
    #2 0x100e7f66c in llvm::mca::EntryStage::cycleEnd() EntryStage.cpp:78
    #3 0x100e7b420 in llvm::mca::Pipeline::runCycle() Pipeline.cpp:78
    #4 0x100e7a84c in llvm::mca::Pipeline::run() Pipeline.cpp:43
    #5 0x100492730 in runPipeline(llvm::mca::Pipeline&) llvm-mca.cpp:308
    #6 0x10048afe0 in main llvm-mca.cpp:750
    #7 0x185c6d0dc  (<unknown module>)

previously allocated by thread T0 here:
    #0 0x1056e90ec in wrap__Znwm+0x74 (libclang_rt.asan_osx_dynamic.dylib:arm64e+0x610ec)
    #1 0x100e7ed88 in llvm::mca::EntryStage::getNextInstruction() EntryStage.cpp:40
    #2 0x100e7b2f8 in llvm::mca::Pipeline::runCycle() Pipeline.cpp:69
    #3 0x100e7a84c in llvm::mca::Pipeline::run() Pipeline.cpp:43
    #4 0x100492730 in runPipeline(llvm::mca::Pipeline&) llvm-mca.cpp:308
    #5 0x10048afe0 in main llvm-mca.cpp:750
    #6 0x185c6d0dc  (<unknown module>)

SUMMARY: AddressSanitizer: heap-use-after-free InOrderIssueStage.cpp:327 in llvm::mca::InOrderIssueStage::updateCarriedOver()
Shadow bytes around the buggy address:
  0x000107d01200: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x000107d01280: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x000107d01300: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
 0x000107d01380: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
 0x000107d01400: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
=>0x000107d01480: fd fd fd[fd]fd fd fd fd fd fd fd fd fa fa fa fa
 0x000107d01500: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
 0x000107d01580: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
 0x000107d01600: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
 0x000107d01680: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
 0x000107d01700: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
 Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope: f8
  Global redzone:          f9
  Global init order:       f6
 Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal: fe
  Left alloca redzone:     ca
  Right alloca redzone: cb
==28215==ABORTING

```


cycleEnd is erasing a subset of the Instructions vector, but that vector is later read in updateCarriedOver
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to