Skip to content

[RISCV] make _Complex {integer} consistent with GCC - #216404

Merged
folkertdev merged 3 commits into
llvm:mainfrom
folkertdev:riscv-fix-complex-int-abi
Aug 15, 2026
Merged

[RISCV] make _Complex {integer} consistent with GCC#216404
folkertdev merged 3 commits into
llvm:mainfrom
folkertdev:riscv-fix-complex-int-abi

Conversation

@folkertdev

Copy link
Copy Markdown
Contributor

The Loongarch fix from #215222 but for riscv, which hits the same issue.

Clang appears to pass _Complex short and _Complex char like a struct with two short/char fields, taking up 2 registers. GCC instead packs the values together into a single register.

https://godbolt.org/z/dKhPToqcd

struct S { _Complex unsigned short c; };

void callee(struct S s);

void caller(void) {
    struct S s;
    __real__ s.c = 0xC1C0;
    __imag__ s.c = 0xD1D0;
    callee(s);
}

Clang uses both a0 and a1:

caller:
        lui     a0, 12
        lui     a1, 13
        addi    a0, a0, 448
        addi    a1, a1, 464
        tail    callee

GCC bitpacks everything into a0:

caller:
        addi    sp,sp,-16
        sd      ra,8(sp)
        li      a0,-774848512
        addiw   a0,a0,448
        call    callee@plt
        ld      ra,8(sp)
        addi    sp,sp,16
        jr      ra

Complex integers are a GNU extension, so clang behavior should match GCC.

Complex integers should not be passed via FPRs.
@llvmorg-github-actions llvmorg-github-actions Bot added clang Clang issues not falling into any other category backend:RISC-V clang:codegen IR generation bugs: mangling, exceptions, etc. labels Aug 14, 2026
@llvmorg-github-actions

llvmorg-github-actions Bot commented Aug 14, 2026

Copy link
Copy Markdown

@llvm/pr-subscribers-backend-risc-v
@llvm/pr-subscribers-clang-codegen

@llvm/pr-subscribers-clang

Author: Folkert de Vries (folkertdev)

Changes

The Loongarch fix from #215222 but for riscv, which hits the same issue.

Clang appears to pass _Complex short and _Complex char like a struct with two short/char fields, taking up 2 registers. GCC instead packs the values together into a single register.

https://godbolt.org/z/dKhPToqcd

struct S { _Complex unsigned short c; };

void callee(struct S s);

void caller(void) {
    struct S s;
    __real__ s.c = 0xC1C0;
    __imag__ s.c = 0xD1D0;
    callee(s);
}

Clang uses both a0 and a1:

caller:
        lui     a0, 12
        lui     a1, 13
        addi    a0, a0, 448
        addi    a1, a1, 464
        tail    callee

GCC bitpacks everything into a0:

caller:
        addi    sp,sp,-16
        sd      ra,8(sp)
        li      a0,-774848512
        addiw   a0,a0,448
        call    callee@<!-- -->plt
        ld      ra,8(sp)
        addi    sp,sp,16
        jr      ra

Complex integers are a GNU extension, so clang behavior should match GCC.


Full diff: https://github.com/llvm/llvm-project/pull/216404.diff

3 Files Affected:

  • (modified) clang/lib/CodeGen/Targets/RISCV.cpp (+6)
  • (modified) clang/test/CodeGen/RISCV/riscv32-abi.c (+9-14)
  • (modified) clang/test/CodeGen/RISCV/riscv64-abi.c (+9-14)
diff --git a/clang/lib/CodeGen/Targets/RISCV.cpp b/clang/lib/CodeGen/Targets/RISCV.cpp
index ce2352ca76284..4bac5711a2dd6 100644
--- a/clang/lib/CodeGen/Targets/RISCV.cpp
+++ b/clang/lib/CodeGen/Targets/RISCV.cpp
@@ -225,6 +225,12 @@ bool RISCVABIInfo::detectFPCCEligibleStructHelper(QualType Ty, CharUnits CurOff,
     if (Field1Ty)
       return false;
     QualType EltTy = CTy->getElementType();
+    // Only floating-point complex types (e.g. _Complex float/double) are
+    // eligible to be passed in floating-point argument registers. Complex
+    // integer types (a GNU extension) should be treated like a normal
+    // aggregate and packed into GPRs instead.
+    if (!EltTy->isRealFloatingType())
+      return false;
     if (getContext().getTypeSize(EltTy) > FLen)
       return false;
     Field1Ty = CGT.ConvertType(EltTy);
diff --git a/clang/test/CodeGen/RISCV/riscv32-abi.c b/clang/test/CodeGen/RISCV/riscv32-abi.c
index e9f7e6c26a0dc..9fa34a9a75cf2 100644
--- a/clang/test/CodeGen/RISCV/riscv32-abi.c
+++ b/clang/test/CodeGen/RISCV/riscv32-abi.c
@@ -1888,6 +1888,9 @@ struct float16complex_s f_ret_float16complex_s(void) {
   return (struct float16complex_s){1.0};
 }
 
+// Complex integer values or structs containing a single complex
+// integer value should be passed as if it were an int+int struct.
+
 // CHECK-LABEL: define{{.*}} i64 @f_ucharcomplex(i64 %x.coerce)
 // ILP32-ILP32F-ILP32D-LABEL: define dso_local i16 @f_ucharcomplex
 // ILP32-ILP32F-ILP32D-SAME: (i16 noundef [[X_COERCE:%.*]]) #[[ATTR0]] {
@@ -1906,13 +1909,9 @@ struct ucharcomplex_s {
   unsigned char __complex__ c;
 };
 // CHECK-LABEL: define{{.*}} i64 @f_ucharcomplex_s(i64 %x.coerce)
-// ILP32-LABEL: define dso_local i16 @f_ucharcomplex_s
-// ILP32-SAME: (i16 [[X_COERCE:%.*]]) #[[ATTR0]] {
-// ILP32:  entry:
-//
-// ILP32F-ILP32D-LABEL: define dso_local { i8, i8 } @f_ucharcomplex_s
-// ILP32F-ILP32D-SAME: (i8 [[TMP0:%.*]], i8 [[TMP1:%.*]]) #[[ATTR0]] {
-// ILP32F-ILP32D:  entry:
+// ILP32-ILP32F-ILP32D-LABEL: define dso_local i16 @f_ucharcomplex_s
+// ILP32-ILP32F-ILP32D-SAME: (i16 [[X_COERCE:%.*]]) #[[ATTR0]] {
+// ILP32-ILP32F-ILP32D:  entry:
 //
 struct ucharcomplex_s f_ucharcomplex_s(struct ucharcomplex_s x) {
   return x;
@@ -1922,13 +1921,9 @@ struct ushortcomplex_s {
   unsigned short __complex__ c;
 };
 // CHECK-LABEL: define{{.*}} i64 @f_ushortcomplex_s(i64 %x.coerce)
-// ILP32-LABEL: define dso_local i32 @f_ushortcomplex_s
-// ILP32-SAME: (i32 [[X_COERCE:%.*]]) #[[ATTR0]] {
-// ILP32:  entry:
-//
-// ILP32F-ILP32D-LABEL: define dso_local { i16, i16 } @f_ushortcomplex_s
-// ILP32F-ILP32D-SAME: (i16 [[TMP0:%.*]], i16 [[TMP1:%.*]]) #[[ATTR0]] {
-// ILP32F-ILP32D:  entry:
+// ILP32-ILP32F-ILP32D-LABEL: define dso_local i32 @f_ushortcomplex_s
+// ILP32-ILP32F-ILP32D-SAME: (i32 [[X_COERCE:%.*]]) #[[ATTR0]] {
+// ILP32-ILP32F-ILP32D:  entry:
 //
 struct ushortcomplex_s f_ushortcomplex_s(struct ushortcomplex_s x) {
   return x;
diff --git a/clang/test/CodeGen/RISCV/riscv64-abi.c b/clang/test/CodeGen/RISCV/riscv64-abi.c
index ac5524720ee31..4a2f89e9ec6b1 100644
--- a/clang/test/CodeGen/RISCV/riscv64-abi.c
+++ b/clang/test/CodeGen/RISCV/riscv64-abi.c
@@ -709,6 +709,9 @@ struct floatcomplex_s f_ret_floatcomplex_s(void) {
   return (struct floatcomplex_s){1.0};
 }
 
+// Complex integer values or structs containing a single complex
+// integer value should be passed as if it were an int+int struct.
+
 // CHECK-LABEL: define{{.*}} i64 @f_ucharcomplex(i64 %x.coerce)
 // LP64-LP64F-LP64D-LABEL: define dso_local i16 @f_ucharcomplex
 // LP64-LP64F-LP64D-SAME: (i16 noundef [[X_COERCE:%.*]]) #[[ATTR0]] {
@@ -727,13 +730,9 @@ struct ucharcomplex_s {
   unsigned char __complex__ c;
 };
 // CHECK-LABEL: define{{.*}} i64 @f_ucharcomplex_s(i64 %x.coerce)
-// LP64-LABEL: define dso_local i16 @f_ucharcomplex_s
-// LP64-SAME: (i16 [[X_COERCE:%.*]]) #[[ATTR0]] {
-// LP64:  entry:
-//
-// LP64F-LP64D-LABEL: define dso_local { i8, i8 } @f_ucharcomplex_s
-// LP64F-LP64D-SAME: (i8 [[TMP0:%.*]], i8 [[TMP1:%.*]]) #[[ATTR0]] {
-// LP64F-LP64D:  entry:
+// LP64-LP64F-LP64D-LABEL: define dso_local i16 @f_ucharcomplex_s
+// LP64-LP64F-LP64D-SAME: (i16 [[X_COERCE:%.*]]) #[[ATTR0]] {
+// LP64-LP64F-LP64D:  entry:
 //
 struct ucharcomplex_s f_ucharcomplex_s(struct ucharcomplex_s x) {
   return x;
@@ -743,13 +742,9 @@ struct ushortcomplex_s {
   unsigned short __complex__ c;
 };
 // CHECK-LABEL: define{{.*}} i64 @f_ushortcomplex_s(i64 %x.coerce)
-// LP64-LABEL: define dso_local i32 @f_ushortcomplex_s
-// LP64-SAME: (i32 [[X_COERCE:%.*]]) #[[ATTR0]] {
-// LP64:  entry:
-//
-// LP64F-LP64D-LABEL: define dso_local { i16, i16 } @f_ushortcomplex_s
-// LP64F-LP64D-SAME: (i16 [[TMP0:%.*]], i16 [[TMP1:%.*]]) #[[ATTR0]] {
-// LP64F-LP64D:  entry:
+// LP64-LP64F-LP64D-LABEL: define dso_local i32 @f_ushortcomplex_s
+// LP64-LP64F-LP64D-SAME: (i32 [[X_COERCE:%.*]]) #[[ATTR0]] {
+// LP64-LP64F-LP64D:  entry:
 //
 struct ushortcomplex_s f_ushortcomplex_s(struct ushortcomplex_s x) {
   return x;

@folkertdev
folkertdev requested review from arsenm and topperc August 14, 2026 21:35
@topperc
topperc requested a review from lenary August 14, 2026 21:52
Comment thread clang/test/CodeGen/RISCV/riscv64-abi.c Outdated
@@ -727,13 +730,9 @@ struct ucharcomplex_s {
unsigned char __complex__ c;
};
// CHECK-LABEL: define{{.*}} i64 @f_ucharcomplex_s(i64 %x.coerce)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see a RUN line with "CHECK" as a prefix". Is this an unused line?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, those didn't get removed when running the update script. fixed.

@topperc topperc left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@lenary

lenary commented Aug 14, 2026

Copy link
Copy Markdown
Member

From the psABI (which covers C99 standard _Complex but not GCC's extensions):

_Complex types have the same layout as a struct containing two fields of the corresponding real type (float, double, or long double), with the first member holding the real part and the second member holding the imaginary part.

-- §4.4 "C/C++ Type Representations"

Aggregates whose total size is no more than 2×XLEN bits are passed in a pair of registers.

-- §2.1 "Integer Calling Convention"

I think there are a few different choices here:

  • We declare these types not part of the ABI. This is pretty bad for users.
  • we write up the ABI for these that either follows _Complex <floating point> (which clang does), or that follows what gcc does, with reasoning.

@folkertdev

Copy link
Copy Markdown
Contributor Author

Given that it's a GNU extension, GCC is the reference implementation right?

Most targets do already match GCC (usually by just treating _Complex T as { T, T } for integer types, like proposed here). Fixes to this end have now been merged to loongarch, mips, and sparc, with powerpc being the only other remaining target (that I can test) that doesn't match GCC (it also miscompiles complex float libcalls... #208917).

@lenary

lenary commented Aug 14, 2026

Copy link
Copy Markdown
Member

Sorry the part from §2.1 i quoted only applies to _Complex int on rv32, or _Complex long on rv64.

For _Complex char, _Complex short (and _Complex int on rv64), this applies:

Aggregates whose total size is no more than XLEN bits are passed in a register, with the fields laid out as though they were passed in memory.

(earlier in §2.1)

So this is correct, sorry for the confusion.

@lenary lenary left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@github-actions

github-actions Bot commented Aug 14, 2026

Copy link
Copy Markdown

🐧 Linux x64 Test Results

  • 56651 tests passed
  • 1280 tests skipped

All executed tests passed, but another part of the build failed. Click on a failure below to see the details.

libcxx/src/CMakeFiles/cxx_shared.dir/algorithm.cpp.o
FAILED: libcxx/src/CMakeFiles/cxx_shared.dir/algorithm.cpp.o
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/./bin/clang++ --target=x86_64-unknown-linux-gnu -DLIBCXX_BUILDING_LIBCXXABI -DLIBC_NAMESPACE=__llvm_libc_common_utils -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_LIBCPP_AVAILABILITY_MINIMUM_HEADER_VERSION=2 -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -D_LIBCPP_LINK_PTHREAD_LIB -D_LIBCPP_LINK_RT_LIB -D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/src -I/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include/x86_64-unknown-linux-gnu/c++/v1 -I/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include/c++/v1 -I/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxxabi/include -isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/cmake/Modules/../../libc -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wno-pass-failed -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Xclang -fno-pch-timestamp -O3 -DNDEBUG -fPIC -UNDEBUG -std=c++26 -faligned-allocation -nostdinc++ -fvisibility-inlines-hidden -fvisibility=hidden -fsized-deallocation -Wall -Wextra -Wnewline-eof -Wshadow -Wwrite-strings -Wno-unused-parameter -Wno-long-long -Werror=return-type -Wextra-semi -Wundef -Wunused-template -Wformat-nonliteral -Wzero-length-array -Wdeprecated-redundant-constexpr-static-def -Wno-nullability-completeness -Wmissing-prototypes -Wno-user-defined-literals -Wno-covered-switch-default -Wno-suggest-override -Wno-error -fdebug-prefix-map=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include/c++/v1=/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/include -MD -MT libcxx/src/CMakeFiles/cxx_shared.dir/algorithm.cpp.o -MF libcxx/src/CMakeFiles/cxx_shared.dir/algorithm.cpp.o.d -o libcxx/src/CMakeFiles/cxx_shared.dir/algorithm.cpp.o -c /home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/src/algorithm.cpp
clang++: /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:4116: int llvm::slpvectorizer::BoUpSLP::ScheduleData::incrementUnscheduledDeps(int): Assertion `UnscheduledDeps >= 0 && "Expected valid number of unscheduled deps"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and dumped files.
Stack dump:
0.	Program arguments: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/./bin/clang++ --target=x86_64-unknown-linux-gnu -DLIBCXX_BUILDING_LIBCXXABI -DLIBC_NAMESPACE=__llvm_libc_common_utils -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_LIBCPP_AVAILABILITY_MINIMUM_HEADER_VERSION=2 -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -D_LIBCPP_LINK_PTHREAD_LIB -D_LIBCPP_LINK_RT_LIB -D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/src -I/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include/x86_64-unknown-linux-gnu/c++/v1 -I/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include/c++/v1 -I/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxxabi/include -isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/cmake/Modules/../../libc -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wno-pass-failed -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Xclang -fno-pch-timestamp -O3 -DNDEBUG -fPIC -UNDEBUG -std=c++26 -faligned-allocation -nostdinc++ -fvisibility-inlines-hidden -fvisibility=hidden -fsized-deallocation -Wall -Wextra -Wnewline-eof -Wshadow -Wwrite-strings -Wno-unused-parameter -Wno-long-long -Werror=return-type -Wextra-semi -Wundef -Wunused-template -Wformat-nonliteral -Wzero-length-array -Wdeprecated-redundant-constexpr-static-def -Wno-nullability-completeness -Wmissing-prototypes -Wno-user-defined-literals -Wno-covered-switch-default -Wno-suggest-override -Wno-error -fdebug-prefix-map=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include/c++/v1=/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/include -MD -MT libcxx/src/CMakeFiles/cxx_shared.dir/algorithm.cpp.o -MF libcxx/src/CMakeFiles/cxx_shared.dir/algorithm.cpp.o.d -o libcxx/src/CMakeFiles/cxx_shared.dir/algorithm.cpp.o -c /home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/src/algorithm.cpp
1.	<eof> parser at end of file
2.	Optimizer
3.	Running pass "function<eager-inv>(drop-unnecessary-assumes,float2int,lower-constant-intrinsics,chr,loop(loop-rotate<header-duplication;no-prepare-for-lto;check-exit-count>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,drop-unnecessary-assumes<drop-deref>,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-arithmetic;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;aggregate-to-vector>,infer-alignment,instcombine<max-iterations=1;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,mergeicmps,expand-memcmp,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;switch-to-arithmetic;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 "/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/src/algorithm.cpp"
4.	Running pass "slp-vectorizer" on function "_ZNSt3__127__insertion_sort_incompleteB9sqe240000INS_17_ClassicAlgPolicyENS_6ranges4lessEPwEEbT1_S5_T0_"
#0 0x00000000094366cb llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/Unix/Signals.inc:931:13
#1 0x0000000009433591 llvm::sys::RunSignalHandlers() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/Signals.cpp:109:18
#2 0x0000000009435243 llvm::sys::CleanupOnSignal(unsigned long) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/Unix/Signals.inc:0:3
#3 0x00000000093931a6 HandleCrash /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:76:5
#4 0x00000000093931a6 CrashRecoverySignalHandler(int) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:396:51
#5 0x00007f9cb378c330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#6 0x00007f9cb37e5b2c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x9eb2c)
#7 0x00007f9cb378c27e raise (/lib/x86_64-linux-gnu/libc.so.6+0x4527e)
#8 0x00007f9cb376f8ff abort (/lib/x86_64-linux-gnu/libc.so.6+0x288ff)
#9 0x00007f9cb376f81b (/lib/x86_64-linux-gnu/libc.so.6+0x2881b)
#10 0x00007f9cb3782517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x000000000abccf22 auto void llvm::slpvectorizer::BoUpSLP::BlockScheduling::schedule<llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>>(llvm::slpvectorizer::BoUpSLP const&, llvm::slpvectorizer::InstructionsState const&, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>&)::'lambda'(llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::ArrayRef<llvm::slpvectorizer::BoUpSLP::ScheduleBundle*>)::operator()(llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::ArrayRef<llvm::slpvectorizer::BoUpSLP::ScheduleBundle*>) const::'lambda'(llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>*, bool)::operator()<llvm::slpvectorizer::BoUpSLP::ScheduleData>(llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>*, bool) const /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:4878:13
#12 0x000000000abcd4ce void llvm::slpvectorizer::BoUpSLP::BlockScheduling::schedule<llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>>(llvm::slpvectorizer::BoUpSLP const&, llvm::slpvectorizer::InstructionsState const&, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>&)::'lambda'(llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::ArrayRef<llvm::slpvectorizer::BoUpSLP::ScheduleBundle*>)::operator()(llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::ArrayRef<llvm::slpvectorizer::BoUpSLP::ScheduleBundle*>) const::'lambda'(llvm::Instruction*, unsigned int, llvm::Instruction*)::operator()(llvm::Instruction*, unsigned int, llvm::Instruction*) const /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:4909:9
#13 0x000000000abcb670 void llvm::slpvectorizer::BoUpSLP::BlockScheduling::schedule<llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>>(llvm::slpvectorizer::BoUpSLP const&, llvm::slpvectorizer::InstructionsState const&, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>&)::'lambda'(llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::ArrayRef<llvm::slpvectorizer::BoUpSLP::ScheduleBundle*>)::operator()(llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::ArrayRef<llvm::slpvectorizer::BoUpSLP::ScheduleBundle*>) const /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:0:15
#14 0x000000000abca6fb begin /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallVector.h:276:45
#15 0x000000000abca6fb end /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallVector.h:278:27
#16 0x000000000abca6fb ~SmallVector /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallVector.h:1242:46
#17 0x000000000abca6fb void llvm::slpvectorizer::BoUpSLP::BlockScheduling::schedule<llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>>(llvm::slpvectorizer::BoUpSLP const&, llvm::slpvectorizer::InstructionsState const&, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:5222:7
#18 0x000000000ab78601 llvm::slpvectorizer::BoUpSLP::BlockScheduling::tryScheduleBundle(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP*, llvm::slpvectorizer::InstructionsState const&, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&)::$_11::operator()(bool, llvm::slpvectorizer::BoUpSLP::ScheduleBundle&) const /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:0:7
#19 0x000000000ab10fcc isReady /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:4283:7
#20 0x000000000ab10fcc llvm::slpvectorizer::BoUpSLP::BlockScheduling::tryScheduleBundle(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP*, llvm::slpvectorizer::InstructionsState const&, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:26728:15
#21 0x000000000aaf533d llvm::slpvectorizer::BoUpSLP::buildTreeRec(llvm::ArrayRef<llvm::Value*>, unsigned int, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, unsigned int) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:12767:18
#22 0x000000000aafda68 llvm::slpvectorizer::BoUpSLP::tryToVectorizeGatheredLoads(llvm::SmallMapVector<std::tuple<llvm::BasicBlock*, llvm::Value*, llvm::Type*>, llvm::SmallVector<llvm::SmallVector<std::pair<llvm::LoadInst*, long>, 3u>, 1u>, 8u> const&)::$_4::operator()(llvm::ArrayRef<llvm::SmallVector<std::pair<llvm::LoadInst*, long>, 3u>>, bool) const /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:0:17
#23 0x000000000aaf92ea empty /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallVector.h:86:46
#24 0x000000000aaf92ea llvm::slpvectorizer::BoUpSLP::tryToVectorizeGatheredLoads(llvm::SmallMapVector<std::tuple<llvm::BasicBlock*, llvm::Value*, llvm::Type*>, llvm::SmallVector<llvm::SmallVector<std::pair<llvm::LoadInst*, long>, 3u>, 1u>, 8u> const&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:9676:14
#25 0x000000000ab26605 llvm::slpvectorizer::BoUpSLP::transformNodes() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:0:5
#26 0x000000000ab89faf llvm::SLPVectorizerPass::vectorizeStoreChainImpl(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, unsigned int, unsigned int, unsigned int&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:28728:5
#27 0x000000000ab89651 llvm::SLPVectorizerPass::vectorizeStoreChain(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, unsigned int, unsigned int, unsigned int&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:28591:3
#28 0x000000000ab8c34b operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:29452:28
#29 0x000000000ab8c34b callback_fn<(lambda at /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:29450:19)> /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#30 0x000000000ab8c34b operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#31 0x000000000ab8c34b vectorizeOneVF /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:29190:11
#32 0x000000000ab8c34b operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:29448:24
#33 0x000000000ab8c34b llvm::SLPVectorizerPass::vectorizeStores(llvm::ArrayRef<llvm::StoreInst*>, llvm::slpvectorizer::BoUpSLP&, llvm::DenseSet<std::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, unsigned int>, llvm::DenseMapInfo<std::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, unsigned int>, void>>&, bool) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:29542:3
#34 0x000000000ab85289 operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:0:18
#35 0x000000000ab85289 callback_fn<(lambda at /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:34269:9)> /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#36 0x000000000ab85289 operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#37 0x000000000ab85289 tryToVectorizeSequence<llvm::StoreInst> /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:32984:11
#38 0x000000000ab85289 llvm::SLPVectorizerPass::vectorizeStoreChains(llvm::slpvectorizer::BoUpSLP&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:34267:16
#39 0x000000000ab82f4d llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:0:18
#40 0x000000000ab82809 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:28467:18
#41 0x0000000008dde3e3 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/IR/PassManagerImpl.h:80:8
#42 0x0000000008de2078 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/IR/PassManager.cpp:132:23
#43 0x0000000008ddd7cd llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/IR/PassManagerImpl.h:80:8
#44 0x0000000009daab27 ~SmallPtrSetImplBase /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallPtrSet.h:89:9
#45 0x0000000009daab27 ~PreservedAnalyses /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/IR/Analysis.h:112:7
#46 0x0000000009daab27 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&, clang::BackendConsumer*) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1226:5
#47 0x0000000009d9f3dd emitAssembly /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1362:23
#48 0x0000000009d9f3dd clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1548:13
#49 0x0000000009db6044 ~unique_ptr /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unique_ptr.h:403:6
#50 0x0000000009db6044 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:322:3
#51 0x000000000b83b2e9 clang::ParseAST(clang::Sema&, bool, bool) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Parse/ParseAST.cpp:0:13
#52 0x000000000a33cb16 clang::FrontendAction::Execute() /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1350:10
#53 0x000000000a2ac769 getPtr /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/Support/Error.h:278:42
#54 0x000000000a2ac769 operator bool /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/Support/Error.h:241:16
#55 0x000000000a2ac769 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1035:23
#56 0x000000000a403fc8 get /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/shared_ptr_base.h:1666:16
#57 0x000000000a403fc8 _M_get /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/shared_ptr_base.h:1363:66
#58 0x000000000a403fc8 operator-> /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/shared_ptr_base.h:1357:9
#59 0x000000000a403fc8 getFrontendOpts /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/include/clang/Frontend/CompilerInstance.h:314:12
#60 0x000000000a403fc8 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:332:14
#61 0x00000000064b6dec cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/tools/driver/cc1_main.cpp:296:13
#62 0x00000000064b2b23 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/tools/driver/driver.cpp:229:12
#63 0x00000000064b517d operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/tools/driver/driver.cpp:0:12
#64 0x00000000064b517d int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(long, llvm::SmallVectorImpl<char const*>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#65 0x000000000a0ebd39 operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Driver/Job.cpp:442:30
#66 0x000000000a0ebd39 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0>(long) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#67 0x0000000009392ebe operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:0:12
#68 0x0000000009392ebe llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:440:3
#69 0x000000000a0eb2e4 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Driver/Job.cpp:442:7
#70 0x000000000a09f0cc clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Driver/Compilation.cpp:202:15
#71 0x000000000a09fe08 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Driver/Compilation.cpp:397:13
#72 0x000000000a0c3888 empty /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallVector.h:86:46
#73 0x000000000a0c3888 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Driver/Driver.cpp:2419:23
#74 0x00000000064b231d clang_main(int, char**, llvm::ToolContext const&) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/tools/driver/driver.cpp:419:21
#75 0x00000000064c2ffd main /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/tools/driver/clang-driver.cpp:17:10
#76 0x00007f9cb37711ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
#77 0x00007f9cb377128b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
#78 0x00000000064b04a5 _start (/home/gha/actions-runner/_work/llvm-project/llvm-project/build/./bin/clang+++0x64b04a5)
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 24.0.0git (https://github.com/llvm/llvm-project 9a058fe8edb24458941ee47258df5d8387ef4802)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin
Build config: +assertions
clang++: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT:
clang++: note: diagnostic msg: /home/gha/actions-runner/_work/llvm-project/llvm-project/artifacts/reproducers/algorithm-6752ba.cpp
clang++: note: diagnostic msg: /home/gha/actions-runner/_work/llvm-project/llvm-project/artifacts/reproducers/algorithm-6752ba.sh
clang++: note: diagnostic msg:

********************
Aborted
libcxx/src/CMakeFiles/cxx_static.dir/algorithm.cpp.o
FAILED: libcxx/src/CMakeFiles/cxx_static.dir/algorithm.cpp.o
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/./bin/clang++ --target=x86_64-unknown-linux-gnu -DLIBCXX_BUILDING_LIBCXXABI -DLIBC_NAMESPACE=__llvm_libc_common_utils -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_LIBCPP_AVAILABILITY_MINIMUM_HEADER_VERSION=2 -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -D_LIBCPP_LINK_PTHREAD_LIB -D_LIBCPP_LINK_RT_LIB -D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/src -I/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include/x86_64-unknown-linux-gnu/c++/v1 -I/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include/c++/v1 -I/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxxabi/include -isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/cmake/Modules/../../libc -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wno-pass-failed -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Xclang -fno-pch-timestamp -O3 -DNDEBUG -UNDEBUG -std=c++26 -faligned-allocation -nostdinc++ -fvisibility-inlines-hidden -fvisibility=hidden -fsized-deallocation -Wall -Wextra -Wnewline-eof -Wshadow -Wwrite-strings -Wno-unused-parameter -Wno-long-long -Werror=return-type -Wextra-semi -Wundef -Wunused-template -Wformat-nonliteral -Wzero-length-array -Wdeprecated-redundant-constexpr-static-def -Wno-nullability-completeness -Wmissing-prototypes -Wno-user-defined-literals -Wno-covered-switch-default -Wno-suggest-override -Wno-error -fdebug-prefix-map=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include/c++/v1=/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/include -MD -MT libcxx/src/CMakeFiles/cxx_static.dir/algorithm.cpp.o -MF libcxx/src/CMakeFiles/cxx_static.dir/algorithm.cpp.o.d -o libcxx/src/CMakeFiles/cxx_static.dir/algorithm.cpp.o -c /home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/src/algorithm.cpp
clang++: /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:4116: int llvm::slpvectorizer::BoUpSLP::ScheduleData::incrementUnscheduledDeps(int): Assertion `UnscheduledDeps >= 0 && "Expected valid number of unscheduled deps"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and dumped files.
Stack dump:
0.	Program arguments: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/./bin/clang++ --target=x86_64-unknown-linux-gnu -DLIBCXX_BUILDING_LIBCXXABI -DLIBC_NAMESPACE=__llvm_libc_common_utils -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_LIBCPP_AVAILABILITY_MINIMUM_HEADER_VERSION=2 -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -D_LIBCPP_LINK_PTHREAD_LIB -D_LIBCPP_LINK_RT_LIB -D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/src -I/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include/x86_64-unknown-linux-gnu/c++/v1 -I/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include/c++/v1 -I/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxxabi/include -isystem /home/gha/actions-runner/_work/llvm-project/llvm-project/cmake/Modules/../../libc -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wno-pass-failed -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Xclang -fno-pch-timestamp -O3 -DNDEBUG -UNDEBUG -std=c++26 -faligned-allocation -nostdinc++ -fvisibility-inlines-hidden -fvisibility=hidden -fsized-deallocation -Wall -Wextra -Wnewline-eof -Wshadow -Wwrite-strings -Wno-unused-parameter -Wno-long-long -Werror=return-type -Wextra-semi -Wundef -Wunused-template -Wformat-nonliteral -Wzero-length-array -Wdeprecated-redundant-constexpr-static-def -Wno-nullability-completeness -Wmissing-prototypes -Wno-user-defined-literals -Wno-covered-switch-default -Wno-suggest-override -Wno-error -fdebug-prefix-map=/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include/c++/v1=/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/include -MD -MT libcxx/src/CMakeFiles/cxx_static.dir/algorithm.cpp.o -MF libcxx/src/CMakeFiles/cxx_static.dir/algorithm.cpp.o.d -o libcxx/src/CMakeFiles/cxx_static.dir/algorithm.cpp.o -c /home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/src/algorithm.cpp
1.	<eof> parser at end of file
2.	Optimizer
3.	Running pass "function<eager-inv>(drop-unnecessary-assumes,float2int,lower-constant-intrinsics,chr,loop(loop-rotate<header-duplication;no-prepare-for-lto;check-exit-count>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,drop-unnecessary-assumes<drop-deref>,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-arithmetic;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;aggregate-to-vector>,infer-alignment,instcombine<max-iterations=1;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,mergeicmps,expand-memcmp,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;switch-to-arithmetic;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 "/home/gha/actions-runner/_work/llvm-project/llvm-project/libcxx/src/algorithm.cpp"
4.	Running pass "slp-vectorizer" on function "_ZNSt3__127__insertion_sort_incompleteB9sqe240000INS_17_ClassicAlgPolicyENS_6ranges4lessEPwEEbT1_S5_T0_"
#0 0x00000000094366cb llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/Unix/Signals.inc:931:13
#1 0x0000000009433591 llvm::sys::RunSignalHandlers() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/Signals.cpp:109:18
#2 0x0000000009435243 llvm::sys::CleanupOnSignal(unsigned long) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/Unix/Signals.inc:0:3
#3 0x00000000093931a6 HandleCrash /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:76:5
#4 0x00000000093931a6 CrashRecoverySignalHandler(int) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:396:51
#5 0x00007a829f519330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#6 0x00007a829f572b2c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x9eb2c)
#7 0x00007a829f51927e raise (/lib/x86_64-linux-gnu/libc.so.6+0x4527e)
#8 0x00007a829f4fc8ff abort (/lib/x86_64-linux-gnu/libc.so.6+0x288ff)
#9 0x00007a829f4fc81b (/lib/x86_64-linux-gnu/libc.so.6+0x2881b)
#10 0x00007a829f50f517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x000000000abccf22 auto void llvm::slpvectorizer::BoUpSLP::BlockScheduling::schedule<llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>>(llvm::slpvectorizer::BoUpSLP const&, llvm::slpvectorizer::InstructionsState const&, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>&)::'lambda'(llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::ArrayRef<llvm::slpvectorizer::BoUpSLP::ScheduleBundle*>)::operator()(llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::ArrayRef<llvm::slpvectorizer::BoUpSLP::ScheduleBundle*>) const::'lambda'(llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>*, bool)::operator()<llvm::slpvectorizer::BoUpSLP::ScheduleData>(llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>*, bool) const /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:4878:13
#12 0x000000000abcd4ce void llvm::slpvectorizer::BoUpSLP::BlockScheduling::schedule<llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>>(llvm::slpvectorizer::BoUpSLP const&, llvm::slpvectorizer::InstructionsState const&, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>&)::'lambda'(llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::ArrayRef<llvm::slpvectorizer::BoUpSLP::ScheduleBundle*>)::operator()(llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::ArrayRef<llvm::slpvectorizer::BoUpSLP::ScheduleBundle*>) const::'lambda'(llvm::Instruction*, unsigned int, llvm::Instruction*)::operator()(llvm::Instruction*, unsigned int, llvm::Instruction*) const /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:4909:9
#13 0x000000000abcb670 void llvm::slpvectorizer::BoUpSLP::BlockScheduling::schedule<llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>>(llvm::slpvectorizer::BoUpSLP const&, llvm::slpvectorizer::InstructionsState const&, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>&)::'lambda'(llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::ArrayRef<llvm::slpvectorizer::BoUpSLP::ScheduleBundle*>)::operator()(llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::ArrayRef<llvm::slpvectorizer::BoUpSLP::ScheduleBundle*>) const /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:0:15
#14 0x000000000abca6fb begin /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallVector.h:276:45
#15 0x000000000abca6fb end /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallVector.h:278:27
#16 0x000000000abca6fb ~SmallVector /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallVector.h:1242:46
#17 0x000000000abca6fb void llvm::slpvectorizer::BoUpSLP::BlockScheduling::schedule<llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>>(llvm::slpvectorizer::BoUpSLP const&, llvm::slpvectorizer::InstructionsState const&, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SetVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::SmallVector<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, 0u>, llvm::DenseSet<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, llvm::DenseMapInfo<llvm::slpvectorizer::BoUpSLP::ScheduleEntity*, void>>, 0u>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:5222:7
#18 0x000000000ab78601 llvm::slpvectorizer::BoUpSLP::BlockScheduling::tryScheduleBundle(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP*, llvm::slpvectorizer::InstructionsState const&, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&)::$_11::operator()(bool, llvm::slpvectorizer::BoUpSLP::ScheduleBundle&) const /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:0:7
#19 0x000000000ab10fcc isReady /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:4283:7
#20 0x000000000ab10fcc llvm::slpvectorizer::BoUpSLP::BlockScheduling::tryScheduleBundle(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP*, llvm::slpvectorizer::InstructionsState const&, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:26728:15
#21 0x000000000aaf533d llvm::slpvectorizer::BoUpSLP::buildTreeRec(llvm::ArrayRef<llvm::Value*>, unsigned int, llvm::slpvectorizer::BoUpSLP::EdgeInfo const&, unsigned int) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:12767:18
#22 0x000000000aafda68 llvm::slpvectorizer::BoUpSLP::tryToVectorizeGatheredLoads(llvm::SmallMapVector<std::tuple<llvm::BasicBlock*, llvm::Value*, llvm::Type*>, llvm::SmallVector<llvm::SmallVector<std::pair<llvm::LoadInst*, long>, 3u>, 1u>, 8u> const&)::$_4::operator()(llvm::ArrayRef<llvm::SmallVector<std::pair<llvm::LoadInst*, long>, 3u>>, bool) const /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:0:17
#23 0x000000000aaf92ea empty /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallVector.h:86:46
#24 0x000000000aaf92ea llvm::slpvectorizer::BoUpSLP::tryToVectorizeGatheredLoads(llvm::SmallMapVector<std::tuple<llvm::BasicBlock*, llvm::Value*, llvm::Type*>, llvm::SmallVector<llvm::SmallVector<std::pair<llvm::LoadInst*, long>, 3u>, 1u>, 8u> const&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:9676:14
#25 0x000000000ab26605 llvm::slpvectorizer::BoUpSLP::transformNodes() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:0:5
#26 0x000000000ab89faf llvm::SLPVectorizerPass::vectorizeStoreChainImpl(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, unsigned int, unsigned int, unsigned int&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:28728:5
#27 0x000000000ab89651 llvm::SLPVectorizerPass::vectorizeStoreChain(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, unsigned int, unsigned int, unsigned int&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:28591:3
#28 0x000000000ab8c34b operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:29452:28
#29 0x000000000ab8c34b callback_fn<(lambda at /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:29450:19)> /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#30 0x000000000ab8c34b operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#31 0x000000000ab8c34b vectorizeOneVF /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:29190:11
#32 0x000000000ab8c34b operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:29448:24
#33 0x000000000ab8c34b llvm::SLPVectorizerPass::vectorizeStores(llvm::ArrayRef<llvm::StoreInst*>, llvm::slpvectorizer::BoUpSLP&, llvm::DenseSet<std::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, unsigned int>, llvm::DenseMapInfo<std::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, unsigned int>, void>>&, bool) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:29542:3
#34 0x000000000ab85289 operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:0:18
#35 0x000000000ab85289 callback_fn<(lambda at /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:34269:9)> /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#36 0x000000000ab85289 operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#37 0x000000000ab85289 tryToVectorizeSequence<llvm::StoreInst> /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:32984:11
#38 0x000000000ab85289 llvm::SLPVectorizerPass::vectorizeStoreChains(llvm::slpvectorizer::BoUpSLP&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:34267:16
#39 0x000000000ab82f4d llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:0:18
#40 0x000000000ab82809 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:28467:18
#41 0x0000000008dde3e3 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/IR/PassManagerImpl.h:80:8
#42 0x0000000008de2078 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/IR/PassManager.cpp:132:23
#43 0x0000000008ddd7cd llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/IR/PassManagerImpl.h:80:8
#44 0x0000000009daab27 ~SmallPtrSetImplBase /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallPtrSet.h:89:9
#45 0x0000000009daab27 ~PreservedAnalyses /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/IR/Analysis.h:112:7
#46 0x0000000009daab27 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&, clang::BackendConsumer*) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1226:5
#47 0x0000000009d9f3dd emitAssembly /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1362:23
#48 0x0000000009d9f3dd clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1548:13
#49 0x0000000009db6044 ~unique_ptr /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unique_ptr.h:403:6
#50 0x0000000009db6044 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:322:3
#51 0x000000000b83b2e9 clang::ParseAST(clang::Sema&, bool, bool) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Parse/ParseAST.cpp:0:13
#52 0x000000000a33cb16 clang::FrontendAction::Execute() /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1350:10
#53 0x000000000a2ac769 getPtr /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/Support/Error.h:278:42
#54 0x000000000a2ac769 operator bool /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/Support/Error.h:241:16
#55 0x000000000a2ac769 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1035:23
#56 0x000000000a403fc8 get /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/shared_ptr_base.h:1666:16
#57 0x000000000a403fc8 _M_get /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/shared_ptr_base.h:1363:66
#58 0x000000000a403fc8 operator-> /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/shared_ptr_base.h:1357:9
#59 0x000000000a403fc8 getFrontendOpts /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/include/clang/Frontend/CompilerInstance.h:314:12
#60 0x000000000a403fc8 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:332:14
#61 0x00000000064b6dec cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/tools/driver/cc1_main.cpp:296:13
#62 0x00000000064b2b23 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/tools/driver/driver.cpp:229:12
#63 0x00000000064b517d operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/tools/driver/driver.cpp:0:12
#64 0x00000000064b517d int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(long, llvm::SmallVectorImpl<char const*>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#65 0x000000000a0ebd39 operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Driver/Job.cpp:442:30
#66 0x000000000a0ebd39 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0>(long) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#67 0x0000000009392ebe operator() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:0:12
#68 0x0000000009392ebe llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:440:3
#69 0x000000000a0eb2e4 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Driver/Job.cpp:442:7
#70 0x000000000a09f0cc clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Driver/Compilation.cpp:202:15
#71 0x000000000a09fe08 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Driver/Compilation.cpp:397:13
#72 0x000000000a0c3888 empty /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallVector.h:86:46
#73 0x000000000a0c3888 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/lib/Driver/Driver.cpp:2419:23
#74 0x00000000064b231d clang_main(int, char**, llvm::ToolContext const&) /home/gha/actions-runner/_work/llvm-project/llvm-project/clang/tools/driver/driver.cpp:419:21
#75 0x00000000064c2ffd main /home/gha/actions-runner/_work/llvm-project/llvm-project/build/tools/clang/tools/driver/clang-driver.cpp:17:10
#76 0x00007a829f4fe1ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
#77 0x00007a829f4fe28b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
#78 0x00000000064b04a5 _start (/home/gha/actions-runner/_work/llvm-project/llvm-project/build/./bin/clang+++0x64b04a5)
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 24.0.0git (https://github.com/llvm/llvm-project 9a058fe8edb24458941ee47258df5d8387ef4802)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin
Build config: +assertions
clang++: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT:
clang++: note: diagnostic msg: /home/gha/actions-runner/_work/llvm-project/llvm-project/artifacts/reproducers/algorithm-0c178a.cpp
clang++: note: diagnostic msg: /home/gha/actions-runner/_work/llvm-project/llvm-project/artifacts/reproducers/algorithm-0c178a.sh
clang++: note: diagnostic msg:

********************
Aborted

If these failures are unrelated to your changes (for example tests are broken or flaky at HEAD), please open an issue at https://github.com/llvm/llvm-project/issues and add the infrastructure label.

@folkertdev
folkertdev enabled auto-merge (squash) August 15, 2026 12:55
@folkertdev
folkertdev merged commit 246ee06 into llvm:main Aug 15, 2026
11 of 12 checks passed
zhangweize9-cyber pushed a commit to zhangweize9-cyber/llvm-project that referenced this pull request Aug 16, 2026
The Loongarch fix from llvm#215222
but for riscv, which hits the same issue.

Clang appears to pass `_Complex short` and `_Complex char` like a struct
with two `short`/`char` fields, taking up 2 registers. GCC instead packs
the values together into a single register.

https://godbolt.org/z/dKhPToqcd

```c
struct S { _Complex unsigned short c; };

void callee(struct S s);

void caller(void) {
    struct S s;
    __real__ s.c = 0xC1C0;
    __imag__ s.c = 0xD1D0;
    callee(s);
}
```

Clang uses both `a0` and `a1`:

```asm
caller:
        lui     a0, 12
        lui     a1, 13
        addi    a0, a0, 448
        addi    a1, a1, 464
        tail    callee
```

GCC bitpacks everything into `a0`:

```asm
caller:
        addi    sp,sp,-16
        sd      ra,8(sp)
        li      a0,-774848512
        addiw   a0,a0,448
        call    callee@plt
        ld      ra,8(sp)
        addi    sp,sp,16
        jr      ra
```

Complex integers are a GNU extension, so clang behavior should match
GCC.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend:RISC-V clang:codegen IR generation bugs: mangling, exceptions, etc. clang Clang issues not falling into any other category

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants