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

    <tr>
        <th>Summary</th>
        <td>
            SLPVectorizer crash with hardened libc++
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            libc++
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            alexey-bataev
      </td>
    </tr>

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

<pre>
    Clang built with hardened libc++ (`-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG`) crashes on a number of inputs in our codebase. 

Input reduced from https://github.com/unicode-org/icu/blob/main/icu4c/source/i18n/gregocal.cpp:
```
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define void @_ZN6icu_7717GregorianCalendar19handleComputeFieldsEiR10UErrorCode(i32 %julianDay, i1 %cmp) {
entry:
  br i1 %cmp, label %if.then2, label %if.end33

if.then2:                                         ; preds = %entry
  %call3 = call i32 @_ZNK6icu_778Calendar17getGregorianMonthEv()
 %call4 = call i32 @_ZNK6icu_778Calendar22getGregorianDayOfMonthEv()
  %call5 = call i32 @_ZNK6icu_778Calendar21getGregorianDayOfYearEv()
  br label %if.end33

if.end33:                                         ; preds = %if.then2, %entry
  %month.0 = phi i32 [ %call3, %if.then2 ], [ 0, %entry ]
  %dayOfMonth.0 = phi i32 [ %call4, %if.then2 ], [ %julianDay, %entry ]
 %dayOfYear.0 = phi i32 [ %call5, %if.then2 ], [ 0, %entry ]
  store volatile i32 %month.0, ptr null, align 4
  store volatile i32 %dayOfMonth.0, ptr null, align 4
  store volatile i32 %dayOfYear.0, ptr null, align 4
  ret void
}

define i32 @_ZNK6icu_778Calendar17getGregorianMonthEv() {
entry:
  %0 = load i8, ptr inttoptr (i64 168 to ptr), align 8
  %conv = sext i8 %0 to i32
  ret i32 %conv
}

define i32 @_ZNK6icu_778Calendar22getGregorianDayOfMonthEv() {
entry:
  %0 = load i8, ptr inttoptr (i64 169 to ptr), align 1
  %conv = sext i8 %0 to i32
  ret i32 %conv
}

define i32 @_ZNK6icu_778Calendar21getGregorianDayOfYearEv() {
entry:
  %0 = load i16, ptr inttoptr (i64 170 to ptr), align 2
  %conv = sext i16 %0 to i32
  ret i32 %conv
}
```
(also [on compiler explorer](https://gcc.godbolt.org/z/n8j5jEEns) for convenience, but there's no crash, since libc++ assertions are necessary to reproduce this)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8Vltv2zgT_TX0y0CGRF39oAf51q_4ekOLLrD7YlDSSGKWJgWScuP--gUlxXXTxJu2wAaBTM5wDucccahhxvBWIuYkXhNKmcB7PHslswxPhFISbxdssJ3SuXM13aJU9TnfCCZbKAcuLHzhtoOO6Rol1iB4WRG6JnQNhGYk8b3t4c3r9ebDh8P_io_b3bvX714d3r7f7kj4jOOw3a0_vyKJT-gKKs1MhwaUBAZyOJaoQTXAZT9YA1yCGjRUqsaSGVwC8QviF6-dFzTWQ4U1NFodobO2NyQsCN0Tum-57YZyWakjoftBcgfgKd0SuufVQOi-FKokdH9kXE62qCJ0b9SgK3SGIHP2VmOrKiaWVd87bL9wWU__fmGZbtFCzSwT7KwGCyTcAqEUvSMJC_R6mvokLEI6Ptw0-H7qRkk0Pjx-GQQ0I2ER0MxrMn8eydGUPIQnkffJLaP0Wx5W817gQw73WXJIIm-Qf0v1RXqCy-Hea-UwhRC_qLHhEuGkeA0k8g9_vUt4NRzSNEhfOdqaM7lhAmXNdLDqmKwFbtSxHyzuOYra7PjHwP-801rpjaqR0IyHFAiN7wbBmdyyM6Eb4IEzVcfevWySrolfoLT6PMkJUOrrJRsQrETh5rxZ2g4lfWxEWYfhROGyJCzgpX8kXEOvsTazUPGUjUvFJcGECEePG8FIaNTm_7M42UWStEV7EeqtkrbbnVxB0JUDm7GiF2FReo21Zef3zQ-AD4jxyxCDHxD_RKa_Ayz1DV2n2e_oev3-Hst8dOyW_ri07_jEJF5f3sAc8wABJN6OpngN_jXe6Jgx64tszwNHN4AfH9zHezxs4XR8fof4p1M3VmlXhoJZLhDmGpoVchG91SAHIdyYCd5KiG4EXsvwi9ETw1vBGu14cbjjkm6_u09-rWSeuhkIjSeZhWI18OwhIS6tVW7gbpwkgiDJwCrncif7kml2qRolTyOOwXsLPJuArXKpXtjM_N3anyP1b7X7e8xWTzEL_iNmt--QFxALkmeZpf5TzOgzzILk5dSuPtCEZkwY5YpPSajUsecCNeB9L5RGPZZm9qhxqKplq-pSCbuc-oWvhO5ldhff7XbSON6Ncg2JPKHkKF23sIFysGA71EhoakCqqatxHsNlhdc9EzMGteVKGmAaQWKFxjB9dtw09lq5ngZsx91eizoP61W4YgvMgzSKo1Wc0GzR5VlchjTKmtKPmzheJSs_SKI0xJSGcdmkzYLn1KexH9EoCOIwypYYNWHp06rBeJX5TUgiH4-Mi6UQp6OjuuDGDJgHYRok0WL8Mpi5Z_yW_tww6txFeeXQGhL5ghtrvuFYbgXmn958-AMrqzT_inrS49lGcjFokd9o4Bz0_OP1Wt1hZV2P5vI1hO7nlE85_ScAAP__S9A2yA">