Bump LDC-LLVM to v21.1.8#4990
Conversation
|
Any updates on this #4943? We'd love to get it merged with llvm21 if possible! |
|
Any help in #4943 would be appreciated, in case you e.g. have the ability to test it locally - it would e.g. be good to know whether the test failures are legit, or specific to the GHA runner container environment. Troubleshooting via CI is a huge PITA and incredibly time-consuming with the poor feedback times. |
|
I am not sure how to test it local, I try to build get this error on x86: Incorrect number of arguments passed to called function!
call void @llvm.lifetime.start.p0(ptr immarg %5) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.start.p0(ptr immarg %6) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.end.p0(ptr immarg %6) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.end.p0(ptr immarg %5) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.start.p0(ptr immarg %5) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.start.p0(ptr immarg %6) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.end.p0(ptr immarg %6) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.end.p0(ptr immarg %5) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.start.p0(ptr immarg %7) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.end.p0(ptr immarg %7) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.start.p0(ptr immarg %10) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.start.p0(ptr immarg %11) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.end.p0(ptr immarg %11) #2
Incorrect number of arguments passed to called function!
call void @llvm.lifetime.end.p0(ptr immarg %10) #2
LLVM ERROR: Broken module found, compilation aborted!
Aborted (core dumped)
ninja: subcommands failedwill update aarch64 late. |
|
@calvin2021y: I meant testing on Alpine AArch64, using a supported LLVM version < 21. |
|
Oof, pretty discouraging first test results for CI. |
Thanks for the tips. I try build the tests on aarch64. find a problem: use '-DCMAKE_EXE_LINKER_FLAGS="-static-libstdc++ -fuse-ld=lld"` will blocked by: ldmd2 -linkonce-templates -O -defaultlib=phobos2-ldc,druntime-ldc -wi -O -inline -release -of/opt/projects/ldc/bin/timetrace2txt /opt/projects/ldc/obj/timetrace2txt.o -gcc=/usr/lib/llvm20/bin/clang++ "-Xcc=-static-libstdc++ -fuse-ld=lld" -Xcc=-static -Xcc=-fuse-ld=lld
clang++: error: unknown argument: '-static-libstdc++ -fuse-ld=lld''-static-libstdc++ -fuse-ld=lld' should be 2 arguments here. |
Use |
|
This fixes a few Lit test suite failures |
|
For the record https://github.com/llvm/llvm-project/blob/main/clang/lib/CodeGen/CGDecl.cpp#L1375 has just |
Yep, but that's LLVM 22, not 21: llvm/llvm-project@c23b4fb |
|
Okay, looking much better now; the problem was a GC2Stack regression introduced in a recent prepare-for-LLVM-21 PR. - Basically just a |
| /* How the arg is passed by value is ABI-specific, but the pointer must be aligned. | ||
| * When the argument is passed as a byte array and copied into a stack alloc, that stack alloca must be aligned. */ | ||
| // CHECK: {{(align 32 %arg|%arg = alloca %align.Outer, align 32)}} | ||
| // CHECK: {{(align 32 %arg|%arg = alloca %align.Outer, align 32|call void @llvm.memcpy.* %.sret_arg,.* %arg)}} |
There was a problem hiding this comment.
If the memcpy got the correct alignments (instead of 1), we could check them in the regex directly. But currently:
define void @_D5align23passAndReturnOuterByValFSQBh5OuterZQl(ptr noalias sret(%align.Outer) align 32 %.sret_arg, ptr noalias align 32 captures(none) %arg) #0 {
call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.sret_arg, ptr align 1 %arg, i64 32, i1 false)
ret void
}| // CHECK: define{{.*}} void @{{.*}}_D5align23passAndReturnInnerByValFSQBh5InnerZQl | ||
| // CHECK-SAME: ptr {{noalias sret.*|inreg noalias}} align 32 %.sret_arg | ||
| // CHECK: {{(align 32 %arg|%arg = alloca %align.Inner, align 32)}} | ||
| // CHECK: {{(align 32 %arg|%arg = alloca %align.Inner, align 32|call void @llvm.memcpy.* %.sret_arg,.* %arg)}} |
6b86038 to
ed20514
Compare
|
The import std.json;
void main()
{
JSONValue j;
j["rating"] = 42;
}The problem seems to be that the Unoptimized surrounding IR: else: ; preds = %andandend
store ptr null, ptr %aa, align 8
%56 = call signext i8 @_D3std4json9JSONValue4typeMxFNaNbNdNiNfZEQBnQBm8JSONType(ptr nonnull %.this_arg) #3 ; [#uses = 1]
%57 = sext i8 %56 to i32 ; [#uses = 1]
%58 = icmp eq i32 %57, 6 ; [#uses = 1]
br i1 %58, label %if15, label %endif16
if15: ; preds = %else
%59 = call ptr @_D3std4json9JSONValue11objectNoRefMNgFNaNdNeZNgHAyaSQByQBxQBv(ptr nonnull %.this_arg) #3 ; [#uses = 1]
store ptr %59, ptr %aa, align 8
br label %endif16
endif16: ; preds = %if15, %elseOptimized: else: ; preds = %_D3std9exception__T7enforceHTCQBc4json13JSONExceptionZ__TQBmTbZQBsFNaNfbLAxaAyamZb.exit, %andand
store ptr null, ptr %aa, align 8
%26 = tail call signext i8 @_D3std4json9JSONValue4typeMxFNaNbNdNiNfZEQBnQBm8JSONType(ptr nonnull %.this_arg) #3 ; [#uses = 1]
%27 = icmp eq i8 %26, 6 ; [#uses = 1]
tail call void @llvm.assume(i1 %27) ; <<<<< WTF
%28 = tail call ptr @_D3std4json9JSONValue11objectNoRefMNgFNaNdNeZNgHAyaSQByQBxQBv(ptr nonnull %.this_arg) #3 ; [#uses = 3]
store ptr %28, ptr %aa, align 8godbolt with LLVM 20 keeps the icmp+branch: else:
store ptr null, ptr %aa, align 8, !dbg !68
%24 = tail call signext i8 @const pure nothrow @property @nogc @safe std.json.JSONType std.json.JSONValue.type()(ptr nonnull %.this_arg) #3, !dbg !71
%25 = icmp eq i8 %24, 6, !dbg !71
br i1 %25, label %if11, label %endif12
if11:
%26 = tail call ptr @inout pure @property @trusted inout(std.json.JSONValue[immutable(char)[]]) std.json.JSONValue.objectNoRef()(ptr nonnull %.this_arg) #3, !dbg !73
store ptr %26, ptr %aa, align 8, !dbg !73
br label %endif12
endif12: |
|
FWIW, this regression seems to have been fixed in LLVM22. |
Don't just use Homebrew clang 21 for macOS arm64, but x86_64 too, as LDC-LLVM uses it consistently too now. Also bump the macOS x86_64 image from macos-13 to macos-15-intel (while using macos-15 for macOS arm64). The Homebrew clang 21 apparently needs 2 tweaks: * use in combination with the Command Line Tools, not Xcode * remove the bundled libc++ headers, using the macOS ones instead (matching the *linked* libc++)
dc913e3 to
1e4d66e
Compare
|
Hmm, |
No description provided.