<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/56308>56308</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Crash when optimising llvm assembly
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          therealviklo
      </td>
    </tr>
</table>

<pre>
    `opt` told me to report this crash backtrace:

```
Stack dump:
0.      Program arguments: opt -S --O3 -o testopt.ll test.ll
 #0 0x00007f7e05197fda (/usr/lib/libLLVM-13.so+0xb97fda)
 #1 0x00007f7e0519565f llvm::sys::RunSignalHandlers() (/usr/lib/libLLVM-13.so+0xb9565f)
 #2 0x00007f7e051957ad (/usr/lib/libLLVM-13.so+0xb957ad)
 #3 0x00007f7e03e3e8e0 (/usr/lib/libc.so.6+0x3e8e0)
 #4 0x00007f7e06176431 (/usr/lib/libLLVM-13.so+0x1b76431)
 #5 0x00007f7e06181e35 (/usr/lib/libLLVM-13.so+0x1b81e35)
 #6 0x00007f7e0611f4e6 (/usr/lib/libLLVM-13.so+0x1b1f4e6)
 #7 0x00007f7e06121a4b (/usr/lib/libLLVM-13.so+0x1b21a4b)
 #8 0x00007f7e061228f1 llvm::InstCombinePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/lib/libLLVM-13.so+0x1b228f1)
 #9 0x00007f7e086079b6 (/usr/lib/libLLVM-13.so+0x40079b6)
#10 0x00007f7e075837c5 (/usr/lib/libLLVM-13.so+0x2f837c5)
#11 0x00007f7e053406e8 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/lib/libLLVM-13.so+0xd406e8)
#12 0x00007f7e07575166 (/usr/lib/libLLVM-13.so+0x2f75166)
#13 0x00007f7e053424a4 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/lib/libLLVM-13.so+0xd424a4)
#14 0x0000563287104088 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::StringRef>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool) (/usr/bin/opt+0x32088)
#15 0x00005632870f47af main (/usr/bin/opt+0x227af)
#16 0x00007f7e03e29290 (/usr/lib/libc.so.6+0x29290)
#17 0x00007f7e03e2934a __libc_start_main (/usr/lib/libc.so.6+0x2934a)
#18 0x00005632870f6965 _start (/usr/bin/opt+0x24965)
Segmenteringsfel (minnesutskrift skapad)
```

Also, here is test.ll:
```
; ModuleID = 'test.ll'
source_filename = "test.ll"
target triple = "x86_64-pc-linux-gnu"

@0 = private unnamed_addr constant [6 x i8] c"%lli\0A\00", align 1

define void @T(ptr %0, i64 %1) {
entry:
  %2 = getelementptr { i64 }, ptr %0, i32 0, i32 0
  %3 = mul i64 %1, 2
  store i64 %3, ptr %2, align 4
  ret void
}

define void @"T$const"(ptr %0, i64 %1) {
entry:
  %2 = getelementptr { i64 }, ptr %0, i32 0, i32 0
  %3 = mul i64 %1, 3
  store i64 %3, ptr %2, align 4
  ret void
}

define i64 @"T$getX"(ptr %0) {
entry:
  %1 = getelementptr { i64 }, ptr %0, i32 0, i32 0
  %2 = getelementptr { i64 }, ptr %0, i32 0, i32 0
  %3 = load i64, ptr %2, align 4
  %4 = add i64 %3, 1
  store i64 %4, ptr %1, align 4
  %5 = getelementptr { i64 }, ptr %0, i32 0, i32 0
  %6 = load i64, ptr %5, align 4
  ret i64 %6
}

define ptr @copystr(ptr %0) {
entry:
  %1 = alloca ptr, align 8
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = call i64 @strlen(ptr %0)
  %5 = add i64 %4, 1
  %6 = call ptr @malloc(i64 %5)
  store ptr %6, ptr %3, align 8
  store ptr %0, ptr %2, align 8
  %7 = load ptr, ptr %3, align 8
  store ptr %7, ptr %1, align 8
  br label %8

8:                                                ; preds = %12, %entry
  %9 = load ptr, ptr %2, align 8
  %10 = load i8, ptr %9, align 1
  %11 = icmp ne i8 %10, 0
  br i1 %11, label %12, label %20

12:                                               ; preds = %8
  %13 = load ptr, ptr %1, align 8
  %14 = load ptr, ptr %2, align 8
  %15 = load i8, ptr %14, align 1
  store i8 %15, ptr %13, align 1
  %16 = load ptr, ptr %2, align 8
  %17 = getelementptr i8, ptr %16, i8 1
  store ptr %17, ptr %2, align 8
  %18 = load ptr, ptr %1, align 8
  %19 = getelementptr i8, ptr %18, i8 1
  store ptr %19, ptr %1, align 8
  br label %8

20:                                               ; preds = %8
  %21 = load ptr, ptr %1, align 8
  store i8 0, ptr %21, align 1
  %22 = load ptr, ptr %3, align 8
  ret ptr %22
}

define i64 @strlen(ptr %0) {
entry:
  %1 = alloca ptr, align 8
  %2 = alloca i64, align 8
  %3 = bitcast i64* %2 to ptr
  store i64 0, ptr %3, align 4
  store ptr %0, ptr %1, align 8
  br label %4

4:                                                ; preds = %8, %entry
  %5 = load ptr, ptr %1, align 8
  %6 = load i8, ptr %5, align 1
  %7 = icmp ne i8 %6, 0
  br i1 %7, label %8, label %13

8:                                                ; preds = %4
  %9 = load i64, ptr %3, align 4
  %10 = add i64 %9, 1
  store i64 %10, ptr %3, align 4
  %11 = load ptr, ptr %1, align 8
  %12 = getelementptr i8, ptr %11, i8 1
  store ptr %12, ptr %1, align 8
  br label %4

13:                                               ; preds = %4
  %14 = load i64, ptr %3, align 4
  ret i64 %14
}

declare ptr @malloc(i64)

declare void @free(ptr)

define i32 @main(i32 %0, ptr %1) {
entry:
  %2 = alloca { i64 }, align 8
  %3 = alloca { i64 }, align 8
  %4 = bitcast { i64 }* %3 to ptr
  %5 = bitcast { i64 }* %2 to ptr
  call void @T(ptr %5, i64 3)
  %6 = load { i64 }, ptr %5, align 4
  store { i64 } %6, ptr %4, align 4
  %7 = call i64 @"T$getX"(ptr %4)
  %8 = call i32 (ptr, ...) @printf(ptr bitcast ([6 x i8]* @0 to ptr), i64 %7)
  ret i32 0
}

declare i32 @printf(ptr, ...)

declare i32 @puts(ptr)

declare i32 @scanf(ptr, ...)

define i1 @strcmp(ptr %0, ptr %1) {
entry:
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8
  store ptr %1, ptr %2, align 8
  br label %4

4:                                                ; preds = %16, %entry
  %5 = load ptr, ptr %3, align 8
  %6 = load i8, ptr %5, align 1
  %7 = load ptr, ptr %2, align 8
  %8 = load i8, ptr %7, align 1
  %9 = icmp eq i8 %6, %8
  br i1 %9, label %10, label %21

10:                                               ; preds = %4
  %11 = load ptr, ptr %3, align 8
  %12 = load i8, ptr %11, align 1
  %13 = icmp ne i8 %12, 0
  %14 = xor i1 %13, true
  br i1 %14, label %15, label %16

15:                                               ; preds = %10
  ret i1 true

16:                                               ; preds = %10
  %17 = load ptr, ptr %3, align 8
  %18 = getelementptr i8, ptr %17, i8 1
  store ptr %18, ptr %3, align 8
  %19 = load ptr, ptr %2, align 8
  %20 = getelementptr i8, ptr %19, i8 1
  store ptr %20, ptr %2, align 8
  br label %4

21:                                               ; preds = %4
  ret i1 false
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNWl1zo7gS_TXOi8ouSXw_-MHJbOpO3Znaqc3U1r6lZBA2dzBwhZhN_v22BAbJBtvMeGs3lWADraPu063uFmRbJu_rhY_LSsIRyTJP0IHDJxK8KoVEcp_VKBas3qMti79JwWK-cDYL_GGBj0cfd7_69EWCHEqaQ9XL4dUCR19EuRPsgJjYNQdeyBpuI5gXLV_Qcvmrg5YlkryWcGmV5_orfLYAaEEdjPAbhp8gDTj2SBSkCYPr4YI-N7WAY55t2-OnT79_XhJnVZcL-ojftlp0QaMBi5xgeb6Xojz_flAqO5v6vW6__NYUL9muYPl_WJHkXNR6vujGaRWqNS09nTZgya1YIGphOSaWwx0ecjyOFQPKytc4WsqCcU0YnwS-C-TcohLZalkLzLPBQsLh0m1gWtYC820wkrrcvxFMy1pggQ1GCXO3N4JpWQssPAGjYUqM6PlY1PKpPGyzgn9hdRdJoilgukHouSlimZVwERR9MkZvINre66z-zAq242LhPI0Mcn7R424LRDBBaWiZEJkmhD4Oou1t5LpYy_ZgajFZKzPwQieIb3M7TbWsBWYvTcfFPg8Nej6XSZPzr-WRCsXwJmGVLMU40e2AWTR3Q2aRnGhFLUuoTUvgEf82jmmqZS0w54QW6jLXMEfRcMGU-aYjZf4_S6gy0eLgmKs836FhQLCLQzM0QFFFw5es4jmsPUvpFymyYvcbT22lJ2z5CjWKy88s3muczdjdT9lWMPH-sUjLj4cqP5cqy_zXRlaNfM7yEZCfuj1hzkYI9q6umuQPsop_Uxwq7auEidqzdrr_ZkVySep3LrI04-Iot1V3rn7aLofMCEfVcuiaRMGNlp89y884dQOWogPLigsolIKQheLbBZJGNLpeILWUBROcwjguQ6-vathrLZmQr2eajQPDOAs4PLHSj3wPtZCX7HRBrMd54TvVSnHl4TrluRp4yIqC142sv4GnJKq_scpoHU6atfa4ydWie0J7LjiCfu_YeznjHd7CeUTtyvn4AfIE_NHgOIQGrUxdNiLmrylEb8Ggo2zFaC9GWzGp1xKCEK3yXugt9F99d1nFS1jHzdtyVzT9gO4IZUhLVyL7ziRHTaFmSV5ZkggUl1CBWQE0eo8-ekNZuPA-oFhhUC_Ps4X3BBBwwPrSE2I5NHmImDMkPIW1j76XGXRoLv4KxFZSgHYeViMy31XfiQ7t4LEdA54Q7z1pSAlQrSWYyHOuPKUxgsd2fPBBQVmwqkUcvgw4jsY5NLkx8xOiRwnompXn2luOgWqY5x6FBRCu7OrMBS2m7QaCwHRXM6rJ-hey4PxtLGiongTQ_49TDi7bTe5k9335y0vYdcDQKwTBZVfLw5qySCWjfJtwZBzOu5MZ_pQZ3oSfOxX9S77WEC6Oy-q9lmK2k1melzFTKIMO4ZkLr0k5N0m1bolB7BihoDHkWVvpM-INP7qWH3tKNWRHxEFrAZDdEGNz1jm-m8s3HOCMKGwJ4_GgM60LBu92DNwKHoyHYC-8FShnW10lvdAMgVA9ipj5o4pgJXhSd1XLI9oe-NLGyGBQNGXQBAEEG_EdGvLRWa1q5dsIzOJDhVTSClsQJYwN0zPSCuvu7khDq3R_Sq22AG7O5uWMFssyZ4qKMXepy-5c7rwJ7og7Ql6XwFrCPFPamaDan6tPMJLzbMX0-gEdyGhMk-CGScK5tEZXtQovaxX96FKDCLtvTFEyx_je41YiIuPepnROKlKF5gh4bFYvdRVjOfvehaYrj1OFZpvJmNWyFdu0o2Wpsc9KPB433x2NDzwjPFyTIvcemTicSMTezGXiT-QSbzxcgpE07I9n4cDKuqGdkp27lyazCTOqkd08jTl1qEZG8xBNN4HkWpQM5WpGthprf-1sRS5nK_qj4Qi--PlsZRnvzqHf6F2JO5FS4pyJvns1m7Zhy29JHnd2qeC8TT5ngm2WgqZbI6rHD6E-O1vXt-z6ukx00udfaX2vSrtW_rLENy2ancf61T895DT16WZ4ZP_vHXe-jt1kG9lifFMztjtp49SQP-2o3fFFFJxtAaY2qa6tZWgM1D4NuzW4Wq20Q11ciayQaYfQ80VD82mK5kw9hOk4o5HxPCAwptQhPOzfJsK3CzZz5kGnSwMaWU8EsSVXx6y4gtsGPekqMyTxk2cdPxT1P7PRmyyoV_dB5ErL-PdW37ahnVN-xwz60fJ7e2seTsAH4_DRUN35_83qbvajfYGP7JKO7V2W9aSR3KMjvq3AThBN6AQVZKIx7vZxJztOavU6Q7F7K_vNp1ZAioaf70tdmzHPPvUtxrw7MEZ6TXWKIoZa3Sz-XWcZNoMzHBNe7XyCy51PeMMkc59PUHxVq-iiVvTaU6DJBAUr545rpXN8yvL66Pm-PB3feDwkayeJnIg9yEzmfP2k_xXmzz0v1P-uZIeszoqdfluGWF3zwzZ_f2hEvt5LWelX__QZfneZ3DfbVVwe1Ish9Wqt_VhWovwfjyWcZnXdcChmz57v4PBhv8ZegDmL4yQkqUd9yghlOHEc7GDm-R590BTVayjLUJAfsjXFlGIYTBxg1Vv5HgsxcxhJCPfj2IXCxqGby1dq4lUpdg9irXXYNrsabuZZLevhJlgDPuH8iM8auS_FWqp3RCz_nn3Lywet81or_Bfp3XOm">