Handle SpecificImplFunction in GetCallee (#6487)

I need this in a forthcoming PR, to reliably get the `Function` that was
originally used to build a `Call` inst, but even as a stand-alone
change, it seems to nicely improve the textual SemIR.
This commit is contained in:
Geoff Romer
2025-12-11 01:06:16 +00:00
committed by GitHub
parent ff8ce31e1b
commit a0d1e4b809
36 changed files with 370 additions and 366 deletions
@@ -76,11 +76,11 @@ fn Run() {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc37_20.1.temp = alloca i1, align 1, !dbg !23
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc37_20.1.temp), !dbg !23
// CHECK:STDOUT: %.loc37_20.2 = call i1 @"_CF.X.Main:I.Main"(), !dbg !23
// CHECK:STDOUT: %.loc37_20.3 = zext i1 %.loc37_20.2 to i8, !dbg !23
// CHECK:STDOUT: store i8 %.loc37_20.3, ptr %.loc37_20.1.temp, align 1, !dbg !23
// CHECK:STDOUT: %.loc37_20.4 = load i8, ptr %.loc37_20.1.temp, align 1, !dbg !23
// CHECK:STDOUT: %.loc37_20.41 = trunc i8 %.loc37_20.4 to i1, !dbg !23
// CHECK:STDOUT: %I.F.call = call i1 @"_CF.X.Main:I.Main"(), !dbg !23
// CHECK:STDOUT: %.loc37_20.2 = zext i1 %I.F.call to i8, !dbg !23
// CHECK:STDOUT: store i8 %.loc37_20.2, ptr %.loc37_20.1.temp, align 1, !dbg !23
// CHECK:STDOUT: %.loc37_20.3 = load i8, ptr %.loc37_20.1.temp, align 1, !dbg !23
// CHECK:STDOUT: %.loc37_20.31 = trunc i8 %.loc37_20.3 to i1, !dbg !23
// CHECK:STDOUT: ret void, !dbg !24
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -89,9 +89,9 @@ fn Run() {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc37_20.1.temp = alloca i32, align 4, !dbg !26
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc37_20.1.temp), !dbg !26
// CHECK:STDOUT: %.loc37_20.2 = call i32 @"_CF.Y.Main:I.Main"(), !dbg !26
// CHECK:STDOUT: store i32 %.loc37_20.2, ptr %.loc37_20.1.temp, align 4, !dbg !26
// CHECK:STDOUT: %.loc37_20.4 = load i32, ptr %.loc37_20.1.temp, align 4, !dbg !26
// CHECK:STDOUT: %I.F.call = call i32 @"_CF.Y.Main:I.Main"(), !dbg !26
// CHECK:STDOUT: store i32 %I.F.call, ptr %.loc37_20.1.temp, align 4, !dbg !26
// CHECK:STDOUT: %.loc37_20.3 = load i32, ptr %.loc37_20.1.temp, align 4, !dbg !26
// CHECK:STDOUT: ret void, !dbg !27
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -63,8 +63,8 @@ fn G() {
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr i32 @_CCallGenericMethod.Main.dc54e41cb8a9bf68(i32 %x) #0 !dbg !17 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc36_15 = call i32 @"_CF.ImplsSomeInterface.Main:SomeInterface.Main"(i32 %x), !dbg !20
// CHECK:STDOUT: ret i32 %.loc36_15, !dbg !21
// CHECK:STDOUT: %SomeInterface.F.call = call i32 @"_CF.ImplsSomeInterface.Main:SomeInterface.Main"(i32 %x), !dbg !20
// CHECK:STDOUT: ret i32 %SomeInterface.F.call, !dbg !21
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: attributes #0 = { nounwind }
@@ -171,10 +171,10 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %v.var = alloca i32, align 4, !dbg !63
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %v.var), !dbg !63
// CHECK:STDOUT: %.loc18_26 = call i32 @"_COp.Int.Core:Copy.Main"(i32 %a), !dbg !64
// CHECK:STDOUT: store i32 %.loc18_26, ptr %v.var, align 4, !dbg !63
// CHECK:STDOUT: %.loc19 = call i32 @"_COp.Int.Core:Copy.Main"(i32 %a), !dbg !65
// CHECK:STDOUT: ret i32 %.loc19, !dbg !66
// CHECK:STDOUT: %Copy.Op.call.loc18 = call i32 @"_COp.Int.Core:Copy.Main"(i32 %a), !dbg !64
// CHECK:STDOUT: store i32 %Copy.Op.call.loc18, ptr %v.var, align 4, !dbg !63
// CHECK:STDOUT: %Copy.Op.call.loc19 = call i32 @"_COp.Int.Core:Copy.Main"(i32 %a), !dbg !65
// CHECK:STDOUT: ret i32 %Copy.Op.call.loc19, !dbg !66
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind