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

    <tr>
        <th>Summary</th>
        <td>
            [SLP] Assertion `OpTE1.isSame [...]` hit in SLP after #128907
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:SLPVectorizer
      </td>
    </tr>

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

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

<pre>
    After https://github.com/llvm/llvm-project/commit/7de895ff1146c17ec78877900c01c09f4140e692, I am seeing a crash in SLP when compiling Fortran code with flang.

Note that the crash is still observed after https://github.com/llvm/llvm-project/issues/130743 fix. Assertion must be enabled (otherwise, opt succeeds).

I cannot share the Fortran source, but below is reproducer obtained with llvm-reduce that fails for me on X86-64 with `opt -O3`:

```
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 @zot(ptr %arg, ptr %arg1, ptr %arg2, ptr %arg3, i64 %arg4, double %arg5) {
bb:
  br label %bb6

bb6:                                              ; preds = %bb20, %bb
  %phi = phi double [ 0.000000e+00, %bb ], [ %phi22, %bb20 ]
  %phi7 = phi i64 [ 0, %bb ], [ %add, %bb20 ]
  %phi8 = phi double [ 0.000000e+00, %bb ], [ %phi24, %bb20 ]
  %phi9 = phi double [ 0.000000e+00, %bb ], [ %phi25, %bb20 ]
  %load = load i32, ptr %arg, align 4
  %icmp = icmp eq i32 %load, 0
  %add = add i64 %phi7, 1
  br i1 %icmp, label %bb20, label %bb10

bb10:                                             ; preds = %bb6
 %load11 = load double, ptr %arg, align 8
  %fmul = fmul double %load11, 0.000000e+00
  %fsub = fsub double 0.000000e+00, %fmul
  store double 0.000000e+00, ptr %arg, align 8
  %fadd = fadd double %phi9, 1.000000e+00
 %fadd12 = fadd double %phi8, 0.000000e+00
  %fadd13 = fadd double %fadd, 1.000000e+00
  %fadd14 = fadd double %fadd12, 1.000000e+00
  %fadd15 = fadd double 1.000000e+00, %fadd13
  %fadd16 = fadd double %arg5, %fadd14
 %fadd17 = fadd double 1.000000e+00, %fadd15
  %fadd18 = fadd double %arg5, %fadd16
  %fsub19 = fsub double 0.000000e+00, %load11
  br label %bb20

bb20:                                             ; preds = %bb10, %bb6
  %phi21 = phi double [ %fadd17, %bb10 ], [ 0.000000e+00, %bb6 ]
 %phi22 = phi double [ %fadd18, %bb10 ], [ 0.000000e+00, %bb6 ]
  %phi23 = phi double [ %fsub, %bb10 ], [ 0.000000e+00, %bb6 ]
  %phi24 = phi double [ %fadd18, %bb10 ], [ 1.000000e+00, %bb6 ]
  %phi25 = phi double [ %fadd17, %bb10 ], [ 1.000000e+00, %bb6 ]
  %phi26 = phi double [ %fsub19, %bb10 ], [ 0.000000e+00, %bb6 ]
  %icmp27 = icmp eq i64 %phi7, %arg4
  br i1 %icmp27, label %bb28, label %bb6

bb28: ; preds = %bb20
  store double %phi23, ptr %arg, align 8
  store double %phi21, ptr %arg3, align 8
  store double %phi, ptr %arg2, align 8
  store double %phi26, ptr %arg1, align 8
  ret void
}
```

The crash is:
```
opt: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:16235: llvm::Value* llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*): Assertion `OpTE1.isSame( ArrayRef(E->Scalars).take_front(OpTE1.getVectorFactor())) && "Expected same first part of scalars."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: opt -O3 reduced.ll -o optimized.ll
1.      Running pass "function<eager-inv>(float2int,lower-constant-intrinsics,chr,loop(loop-rotate<header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O3>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>)" on module "reduced.ll"
2.      Running pass "slp-vectorizer" on function "zot"
 #0 0x00005643bfe583ab llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (opt+0x1a683ab)
 #1 0x00005643bfe55584 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #2 0x00007f472e842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x00007f472e8969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #4 0x00007f472e8969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #5 0x00007f472e8969fc pthread_kill ./nptl/pthread_kill.c:89:10
 #6 0x00007f472e842476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #7 0x00007f472e8287f3 abort ./stdlib/abort.c:81:7
 #8 0x00007f472e82871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
 #9 0x00007f472e839e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#10 0x00005643c2078a46 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (opt+0x3c88a46)
#11 0x00005643c207238e llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int) (opt+0x3c8238e)
#12 0x00005643c2075322 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (opt+0x3c85322)
#13 0x00005643c20933d4 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::SmallDenseSet<llvm::Value*, 4u, llvm::DenseMapInfo<llvm::Value*, void>> const&, llvm::Instruction*, llvm::ArrayRef<std::tuple<llvm::Value*, unsigned int, bool>>) (opt+0x3ca33d4)
#14 0x00005643c2097152 llvm::slpvectorizer::BoUpSLP::vectorizeTree() (opt+0x3ca7152)
#15 0x00005643c20ac54d llvm::SLPVectorizerPass::tryToVectorizeList(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, bool) (opt+0x3cbc54d)
#16 0x00005643c20b1576 bool tryToVectorizeSequence<llvm::Value>(llvm::SmallVectorImpl<llvm::Value*>&, llvm::function_ref<bool (llvm::Value*, llvm::Value*)>, llvm::function_ref<bool (llvm::Value*, llvm::Value*)>, llvm::function_ref<bool (llvm::ArrayRef<llvm::Value*>, bool)>, bool, llvm::slpvectorizer::BoUpSLP&) (.constprop.0) SLPVectorizer.cpp:0:0
#17 0x00005643c20b3021 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (opt+0x3cc3021)
#18 0x00005643c20bb066 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (.part.0) SLPVectorizer.cpp:0:0
#19 0x00005643c20bbc2b llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (opt+0x3ccbc2b)
#20 0x00005643c19f4bf2 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#21 0x00005643c00c80d9 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (opt+0x1cd80d9)
#22 0x00005643c11c0252 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) NVPTXTargetMachine.cpp:0:0
#23 0x00005643c00c6942 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (opt+0x1cd6942)
#24 0x00005643c11c01b2 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) NVPTXTargetMachine.cpp:0:0
#25 0x00005643c00c6361 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (opt+0x1cd6361)
#26 0x00005643c181b6a9 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (opt+0x342b6a9)
#27 0x00005643bfe31ef4 optMain (opt+0x1a41ef4)
#28 0x00007f472e829d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#29 0x00007f472e829e40 call_init ./csu/../csu/libc-start.c:128:20
#30 0x00007f472e829e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#31 0x00005643bfe2512e _start (opt+0x1a3512e)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMWltz46i2_jXkhZJLAl0f8uA4SZ2u0707Ncnp2m8uJCGbHQTagHKZX38KkGzLltNJp6dmutKJuKz7x2KBRLRmG0HpJUiuQHJ9QXqzleryP5SIO6oYVRelrF8vl42hCm6N6TTAS4BuAbrdMLPty0UlW4BuOX8a_wSdkv-hlQHotpJty-xDVtO8SJomiuK0ijJaZXmeZUUYVmFUhUUTR3FI0wIBtIJfIGmhppSJDSSwUkRvIRPw_usdfN5SASvZdozb0VupjCK2p6bwmZktbDgRmwUIlyBc_ksaCs2WGGi2dOSjoTaMcyhLTdUTrSH5NcuY1j3VAN1GOMxiDBv2soBLrakyTArY9trAkkIqSMlpDQHKpdlS9cw0tTbKzkDdVxWltQaoGDT-AisihDRQb4miTu3RRC17VTnSsrecuXy2xijaKVn3FVVQloYwQWvvCKeuonbI-6AhjGvYSAVbCqWA_87TII39ZJCGVqHgOwZpaL3gtLHP_idcGqI21MCaGMLJq-wNBPgaAoRo0AK8pEGHMkuJkftlm9G0aZ_S2P0K2O4hQjnAywjlQZOHw5NwXelInsbBvZ2G0F4Po1jH6ajDS56u0zjoxaOQzyLgTPQvwUb0ngSEy5o2TFD4JFkNQRz-KQ1AeWcUBCghamO9um9F0yaaNrFtsjQemrFt1rIvrTauJwGogCC7AuGyLL0vISwV5KSk3M4py9RrZR_wEn7oH8BXsFO01oPtSVmi0OrgHp0sgJJuy9y4_Tsql1zBcBG6fxSgq3BPBUFy7RrJ1UCM0G4QhW54zzjbcXZesGzPcSJ1fZ5P_jkN4_Oci89xTs5w5pLUjrN7YPgIGLZFONsIGI8UrGo7R-Ee6H8t0cjJTg_HiaT2nO3fAVvW03ZONOKHRSNL232AJh__g44oHPEVhR8F2Ay-LFpHraNo7wHv3HNOyEfbmrbnjsg97JeKZ-fcMA3NSKf70tPZh4FuNoqWsaPSRip6furbao4xcA97NS2eXBxOlByIInSGLH_DNkuH5-iaYc2citvRxefoIvQTyuSEMpr1p9NuQpnOyfTJbk8SH3ol-4CsZCIrf4-s9BAmUfE-oAyQO03IaLdi0O9YMdE-v6QHeQlFc4lp57AdTRQeZqUziSsdU9OYsd_inf8i75E5Psdc9-UnWce_ovcslGaYJ7_i8PcyT99wSlR8wi02x6NsunFMN4Wx9jjZGlB2vDnkRx272sMVXmfqiZNkOuLg7TQ6RxLNlE8_oZmpv34mJZ0p4Q5pFDWu-rPGZ9dHtS0Ilw8HB4Sh_j2YIDtjfTUeBFgJ0O2DIkI3UrX2DPCDVkYq9icF6Pb-692uqRZV17liFuFkxwIvAV7-ILynAB12ad497Sh915X8v-7-651v7AYfFKUA5e-ntAQ3wqhXgJYAFVaT_VEFpOH37uEmWjB9T1rLGC6VIq9_0Aag_CYA-Oa-Ipwod1Ax5JGuGyWFLaE93YYab_Etsb-BxVzhfyCwoUltkX7z0tHK0Bpq0lLYMKUN7IgyUDZQe_4LW7CjzB1VaG3PRHdfb5b3N1D3ZcsMJLDsN_bII5WBRn7i0AaJqCETFe9renA6LEn1aBSpqJV9b0j1COu-7TwiwgUIizslN4q0kKhN31JhrHg4nJ2gP27VC85hIG0va9mfrg3CZWTJ_-iFsAfXjmhtndL0orJBAHhFyYaqgIkngG8AyhsuiUHMunnF5TNVQSWFNkSYgAmjmNCs0gCtqq1yM2RnESFlFyhpiKEAr7aU1FQFdd9xVhEv5krIoFO0I4oGjVQBN9LJcxyCmnLq5tngDV1MG8XK3thKjwnryMBwFrSk65jY6HHeDn8Ar4S0OlLFKXlyYipaB1LwVy9_N_VoyCvCRENV4BavdfDI3-7dAeWsdVO0qWRbMmGlteQlYIYqZ6EG-DoaxSjWvAYNe-mk9aPjrlnbcda8Vs0G4FUpRa8Dyy4wW0X1VvJ6YNBI9UxUHehnZqqtdX4N8NXQUkRsaGBk4MrxXbeRAZfyse-8Ao-UWr2lxejVVjJtgkq2rRROovaTfL-1Tgcus-nAHsmdwKAhPTdMbKwIJh6PyXVHq54TQ4OSy-rRdQ32efpSEVFtvaD95F7YjM8qQ0pO9eAXfhBCiyjfCEY3f8rpLoC9UJJzgFffse81YwYNnomyq8KqoSQBeNUp6m5nAhemeVR8Vp9Wa2KXDKtagFeEc_k8usitlBu_CHYig0bJNiBa923nhQyMbGQGfUbvA7Sq2VOgaBt0hNnEuTKE8YpwPkD43TgUMvgQFG2kT9E4geIOdUdwei8UrYhPofFNKBYAISgFbGXduw0e7dOqv9BBc5n0GMCOx5he7QR36YN8xYxDGL7YMixJY1w2NMkxKQ934lftH-4UE8ZtBA92W5hsuoo8r6U2ipIW-ALEZevC3fV1xhZ4LxFJLWtrlRccHQlOkjyG92wjCP8fImpuVc991oeabZho5Nq4XXvlCxi3gQ8UeigvQvffC0CDgKyJM0TzGCUohG5LHgqX4bLs4JLMDlQLLRep09mR7DXGU4ZFWjQVXK87C1RSrx8Z52sbZmoXiVs7cAHQregMB-j2cNqiAngZxwAvs-FOAcfvYW63EkH4m2wzd2c4OiGZY3tI8yavvDjklR47NM5SuNEuAI6NfwToduFar7qmna0xOqnZC0C3ijBNHWOUAbwcTc-mfFGeNRiS0pY2jo-pfbxcl9crsoYO5PkJeVTCteBru37XtWwJ84Fgwllpu1u9qYjnFUWZVWYMcjHlhgtapB9DjSPxqLEwP1xgFQqznMTp31HqHi5GXOVWjb2S0ZGSCOf0V5T83lFFRP0JPVewF-49TD2TRHCVW832eqMjvROM0D_AuVaNvZJ4qmSBcR3_FiXvW8L5NRWa3lMD8Or0TGX9Gffu4LsbcwTfSPdFNPIskcuw-AbgG-iq7SGv7yd_Edqo3pfsnmQ_tjs04ZU2te8zfcfpWXHTmK9gKSX34k-cS6z79s6Nj5ybRclnEHAqzjLci0um4kiVxPWBuMmR947oYfM06vVB7ga-MuvPfNZfM-5xhdr7TPJBcs47tqO0mu7tSKd2lFGSpY4QTnW9p__tqajmIucOZ0dg9HRf2o6ft-UISGNlslbOAU6HCeNDnMz1Fice-jtYvieGQ2AmrQ9E1kV04ZZjp2S3CF39M3PJMlZBNtDZUaBxiKKfA3anxmpLmNBfxJUtZCcGXxHNqqF7-XE79sisrEp7ZOZHCpdhmv5cYdULh7pDDW_HK4VjyPlLnJsnyfvZ_PXgXq3u7rVcopyf85WViqjX2RnL5R9U99zok5GvUnazJNeyZYIYqXw2Oma4O3GtSLU9Hb-mLRE1ra_YjMzv_g7GlaV_0Jaox5uWGWOr7HEDW3REmfehqjgOUoXKdwXpfQFaCsJfNdPfiCAbC6HVDNGQS47RZFXZoQlNqq-oaOKyOdweampPo8MJh2j9TdaUz4ubIujEwF_S3_78hY6xil31jNdzMUSTmi8MqzysiwNRzh1vifknWnx44Kxqa9EeCpNaMYqqECW_Awp_mZ_-if7914-7h3_71PeNVFsm6Ayw8BGw0iI-dPQ3d53xIEfu1oHLmnRGqnndPcGHNB9IzuDCKrTHRXyMi6j8GC5G_VbvNPIXrDgX1t_gmneFNDkOKU6jd6yBOc_87QYfYQGn--IDTcriKI_KlBzmRNW7QN6xjnJ3F3xY_xrFxMa9KjoFwonCE4f_vLjwtc3xLCn59950vbllfIbJp4bPmDNb5jqf8H7DxGnemjkKHrzq8d-hHbrxYM_y8ZrLhrIza-OOiK60cVb8LxP1W7N-UMUaRtU4byy_P_Z3Wm3EyAJkD59seqeJI9rEUHbmG2Fiehka26E94fEdVlEXIVyvOSurtTZEmXVFOF_vrrIq3Z9esw23eHNEiy3Ay2T4mtCLLI5F0jiEjoAJZo6l-EfLOnCs_dWZe3OOhiSxu0qecJwYMaf_LGecFVbhgfHRVTFKIkShZzn1KrYjg1fHt9YX9SWuC1yQC3oZZXGUFVEYxxfbyyhqyjgMG0rDJqnDDKd5VsVRXOZRSAltLtglClES4ghFcRLG8QKRvCA0q-MIJzXBNYhD2hLGFxZzC6k2F-616mWEwyJDF-5bA-0-J0ZogOWkcAQIgeT6Ql26l7Nlv9EgDjnTRu85Gma4-yTZnp6S6_NvqyFIrhaLBUiuQRrCLTPjl8L-s153W5YXYXbRK375qY98rW1Pl-j_AwAA__-EyHu9">