Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions cl/_testdata/vargs/in.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,7 @@ func test(a ...any) {
// assertion-to-C-varargs data flow. Bounds-loop details are owned elsewhere.
// CHECK-LABEL: define void @main.main(){{.*}} {
// CHECK: [[ARGS:%[0-9]+]] = call ptr @"{{.*}}AllocZ"(i64 48)
// CHECK: [[BOX:%[0-9]+]] = call ptr @"{{.*}}AllocU"(i64 8)
// CHECK-NEXT: store i64 1, ptr [[BOX]]
// CHECK-NEXT: [[EFACE:%[0-9]+]] = insertvalue %"{{.*}}eface" { ptr @_llgo_int, ptr undef }, ptr [[BOX]], 1
// CHECK: store %"{{.*}}eface" { ptr @_llgo_int, ptr @"_llgo_ifacebox${{.*}}" }, ptr {{%[0-9]+}}
// CHECK: [[SLICE_LEN:%[0-9]+]] = insertvalue %"{{.*}}Slice" {{.*}}, i64 3, 1
// CHECK-NEXT: [[SLICE:%[0-9]+]] = insertvalue %"{{.*}}Slice" [[SLICE_LEN]], i64 3, 2
// CHECK-NEXT: call void @main.test(%"{{.*}}Slice" [[SLICE]])
Expand Down
56 changes: 14 additions & 42 deletions cl/_testgo/abimethod/in.go
Original file line number Diff line number Diff line change
Expand Up @@ -232,9 +232,7 @@ type I2 interface {

// Pointer-to-anonymous-struct embedding *T: form I, dispatch Demo1, and test its result.
// CHECK-LABEL: define void @main.testAnonymous1(){{.*}} {
// CHECK: [[A1_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @"*{{.*}}/abimethod.struct${{[-A-Za-z0-9_]+}}")
// CHECK: [[A1_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[A1_ITAB]], 0
// CHECK: [[A1_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[A1_I0]], ptr %{{[0-9]+}}, 1
// CHECK: [[A1_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr %{{[0-9]+}}, 1
// CHECK: [[A1_DATA:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[A1_IFACE]])
// CHECK: [[A1_TABLE:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[A1_IFACE]], 0
// CHECK-NEXT: [[A1_SLOT:%[0-9]+]] = getelementptr ptr, ptr [[A1_TABLE]], i64 3
Expand All @@ -249,9 +247,7 @@ type I2 interface {

// Value anonymous struct embedding *T uses the value descriptor, but the same promoted method.
// CHECK-LABEL: define void @main.testAnonymous2(){{.*}} {
// CHECK: [[A2_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @"{{.*}}/abimethod.struct${{[-A-Za-z0-9_]+}}")
// CHECK-NEXT: [[A2_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[A2_ITAB]], 0
// CHECK-NEXT: [[A2_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[A2_I0]], ptr %{{[0-9]+}}, 1
// CHECK: [[A2_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr %{{[0-9]+}}, 1
// CHECK-NEXT: [[A2_DATA:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[A2_IFACE]])
// CHECK-NEXT: [[A2_TABLE:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[A2_IFACE]], 0
// CHECK-NEXT: [[A2_SLOT:%[0-9]+]] = getelementptr ptr, ptr [[A2_TABLE]], i64 3
Expand All @@ -266,9 +262,7 @@ type I2 interface {

// Value and pointer anonymous structs embedding T select distinct concrete descriptors.
// CHECK-LABEL: define void @main.testAnonymous3(){{.*}} {
// CHECK: [[A3_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @"{{.*}}/abimethod.struct${{[-A-Za-z0-9_]+}}")
// CHECK-NEXT: [[A3_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[A3_ITAB]], 0
// CHECK-NEXT: [[A3_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[A3_I0]], ptr %{{[0-9]+}}, 1
// CHECK: [[A3_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr %{{[0-9]+}}, 1
// CHECK-NEXT: [[A3_DATA:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[A3_IFACE]])
// CHECK-NEXT: [[A3_TABLE:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[A3_IFACE]], 0
// CHECK-NEXT: [[A3_SLOT:%[0-9]+]] = getelementptr ptr, ptr [[A3_TABLE]], i64 3
Expand All @@ -282,9 +276,7 @@ type I2 interface {
// CHECK-NEXT: br i1 [[A3_BAD]],

// CHECK-LABEL: define void @main.testAnonymous4(){{.*}} {
// CHECK: [[A4_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @"*{{.*}}/abimethod.struct${{[-A-Za-z0-9_]+}}")
// CHECK-NEXT: [[A4_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[A4_ITAB]], 0
// CHECK-NEXT: [[A4_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[A4_I0]], ptr %{{[0-9]+}}, 1
// CHECK: [[A4_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr %{{[0-9]+}}, 1
// CHECK-NEXT: [[A4_DATA:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[A4_IFACE]])
// CHECK-NEXT: [[A4_TABLE:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[A4_IFACE]], 0
// CHECK-NEXT: [[A4_SLOT:%[0-9]+]] = getelementptr ptr, ptr [[A4_TABLE]], i64 3
Expand All @@ -299,9 +291,7 @@ type I2 interface {

// Demo2 requires the pointer method set, for both embedding T and embedding *T.
// CHECK-LABEL: define void @main.testAnonymous5(){{.*}} {
// CHECK: [[A5_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @"*{{.*}}/abimethod.struct${{[-A-Za-z0-9_]+}}")
// CHECK-NEXT: [[A5_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[A5_ITAB]], 0
// CHECK-NEXT: [[A5_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[A5_I0]], ptr %{{[0-9]+}}, 1
// CHECK: [[A5_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr %{{[0-9]+}}, 1
// CHECK-NEXT: [[A5_DATA:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[A5_IFACE]])
// CHECK-NEXT: [[A5_TABLE:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[A5_IFACE]], 0
// CHECK-NEXT: [[A5_SLOT:%[0-9]+]] = getelementptr ptr, ptr [[A5_TABLE]], i64 3
Expand All @@ -315,9 +305,7 @@ type I2 interface {
// CHECK-NEXT: br i1 [[A5_BAD]],

// CHECK-LABEL: define void @main.testAnonymous6(){{.*}} {
// CHECK: [[A6_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @"{{.*}}/abimethod.struct${{[-A-Za-z0-9_]+}}")
// CHECK-NEXT: [[A6_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[A6_ITAB]], 0
// CHECK-NEXT: [[A6_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[A6_I0]], ptr %{{[0-9]+}}, 1
// CHECK: [[A6_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr %{{[0-9]+}}, 1
// CHECK-NEXT: [[A6_DATA:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[A6_IFACE]])
// CHECK-NEXT: [[A6_TABLE:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[A6_IFACE]], 0
// CHECK-NEXT: [[A6_SLOT:%[0-9]+]] = getelementptr ptr, ptr [[A6_TABLE]], i64 3
Expand All @@ -332,9 +320,7 @@ type I2 interface {

// A two-method anonymous interface must dispatch two different itab slots on one interface value.
// CHECK-LABEL: define void @main.testAnonymous7(){{.*}} {
// CHECK: [[A7_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @"{{.*}}/abimethod.struct${{[-A-Za-z0-9_]+}}")
// CHECK-NEXT: [[A7_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[A7_ITAB]], 0
// CHECK-NEXT: [[A7_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[A7_I0]], ptr %{{[0-9]+}}, 1
// CHECK: [[A7_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr %{{[0-9]+}}, 1
// CHECK-NEXT: [[A7_DATA1:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[A7_IFACE]])
// CHECK-NEXT: [[A7_TAB1:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[A7_IFACE]], 0
// CHECK-NEXT: [[A7_SLOT1:%[0-9]+]] = getelementptr ptr, ptr [[A7_TAB1]], i64 3
Expand All @@ -360,9 +346,7 @@ type I2 interface {

// The package-local interface adds the unexported demo3 slot after Demo1 and Demo2.
// CHECK-LABEL: define void @main.testAnonymous8(){{.*}} {
// CHECK: [[A8_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"{{.*}}/abimethod.iface${{[-A-Za-z0-9_]+}}", ptr @"{{.*}}/abimethod.struct${{[-A-Za-z0-9_]+}}")
// CHECK-NEXT: [[A8_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[A8_ITAB]], 0
// CHECK-NEXT: [[A8_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[A8_I0]], ptr %{{[0-9]+}}, 1
// CHECK: [[A8_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr %{{[0-9]+}}, 1
// CHECK-NEXT: [[A8_DATA1:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[A8_IFACE]])
// CHECK-NEXT: [[A8_TAB1:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[A8_IFACE]], 0
// CHECK-NEXT: [[A8_SLOT1:%[0-9]+]] = getelementptr ptr, ptr [[A8_TAB1]], i64 3
Expand Down Expand Up @@ -403,9 +387,7 @@ type I2 interface {
// CHECK: [[BUF_FIELD:%[0-9]+]] = getelementptr inbounds nuw { i64, ptr }, ptr [[BUF_OWNER]], i32 0, i32 1
// CHECK-NEXT: [[BUF:%[0-9]+]] = call ptr @bytes.NewBufferString(
// CHECK: store ptr [[BUF]], ptr [[BUF_FIELD]]
// CHECK-NEXT: [[BUF_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @"*{{.*}}/abimethod.struct${{[-A-Za-z0-9_]+}}")
// CHECK-NEXT: [[BUF_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[BUF_ITAB]], 0
// CHECK-NEXT: [[BUF_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[BUF_I0]], ptr [[BUF_OWNER]], 1
// CHECK-NEXT: [[BUF_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr [[BUF_OWNER]], 1
// CHECK-NEXT: [[BUF_DATA:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[BUF_IFACE]])
// CHECK-NEXT: [[BUF_TABLE:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[BUF_IFACE]], 0
// CHECK-NEXT: [[BUF_SLOT:%[0-9]+]] = getelementptr ptr, ptr [[BUF_TABLE]], i64 3
Expand All @@ -422,9 +404,7 @@ type I2 interface {
// IP.Store and IP.Load must operate on the same Pointer[any] interface value.
// CHECK-LABEL: define void @main.testGeneric(){{.*}} {
// CHECK: [[P_OBJECT:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.AllocZ"(i64 8)
// CHECK-NEXT: [[P_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @"*_llgo_main.Pointer{{\[.*\]}}")
// CHECK: [[P_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[P_ITAB]], 0
// CHECK-NEXT: [[P_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[P_I0]], ptr [[P_OBJECT]], 1
// CHECK-NEXT: [[P_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr [[P_OBJECT]], 1
// CHECK: [[P_VALUE:%[0-9]+]] = call ptr @"main.testGeneric$1"()
// CHECK-NEXT: [[P_SDATA:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[P_IFACE]])
// CHECK-NEXT: [[P_STAB:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[P_IFACE]], 0
Expand Down Expand Up @@ -453,19 +433,15 @@ type I2 interface {
// CHECK: [[P_BAD:%[0-9]+]] = icmp ne i64 [[P_INT]], 100

// CHECK-LABEL: define ptr @"main.testGeneric$1"(){{.*}} {
// CHECK: store i64 100, ptr [[P_BOX:%[0-9]+]]
// CHECK: [[P_EFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr undef }, ptr [[P_BOX]], 1
// CHECK: store %"{{.*}}/runtime/internal/runtime.eface" [[P_EFACE]], ptr [[P_RESULT:%[0-9]+]]
// CHECK: store %"{{.*}}/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr @"_llgo_ifacebox${{.*}}" }, ptr [[P_RESULT:%[0-9]+]]
// CHECK: ret ptr [[P_RESULT]]

// Named T and *T select the proper descriptor and dispatch through the requested interface method.
// CHECK-LABEL: define void @main.testNamed1(){{.*}} {
// CHECK: [[N1_OBJECT:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.AllocZ"(i64 8)
// CHECK: [[N1_FIELD:%[0-9]+]] = getelementptr inbounds nuw %main.T, ptr [[N1_OBJECT]], i32 0, i32 0
// CHECK-NEXT: store i64 100, ptr [[N1_FIELD]]
// CHECK-NEXT: [[N1_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @"*_llgo_main.T")
// CHECK-NEXT: [[N1_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[N1_ITAB]], 0
// CHECK-NEXT: [[N1_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[N1_I0]], ptr [[N1_OBJECT]], 1
// CHECK-NEXT: [[N1_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr [[N1_OBJECT]], 1
// CHECK-NEXT: [[N1_DATA:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[N1_IFACE]])
// CHECK-NEXT: [[N1_TABLE:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[N1_IFACE]], 0
// CHECK-NEXT: [[N1_SLOT:%[0-9]+]] = getelementptr ptr, ptr [[N1_TABLE]], i64 3
Expand All @@ -482,9 +458,7 @@ type I2 interface {
// CHECK: [[N2_VALUE:%[0-9]+]] = load %main.T, ptr %{{[0-9]+}}
// CHECK-NEXT: [[N2_OBJECT:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.AllocU"(i64 8)
// CHECK-NEXT: store %main.T [[N2_VALUE]], ptr [[N2_OBJECT]]
// CHECK-NEXT: [[N2_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @_llgo_main.T)
// CHECK-NEXT: [[N2_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[N2_ITAB]], 0
// CHECK-NEXT: [[N2_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[N2_I0]], ptr [[N2_OBJECT]], 1
// CHECK-NEXT: [[N2_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr [[N2_OBJECT]], 1
// CHECK-NEXT: [[N2_DATA:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[N2_IFACE]])
// CHECK-NEXT: [[N2_TABLE:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[N2_IFACE]], 0
// CHECK-NEXT: [[N2_SLOT:%[0-9]+]] = getelementptr ptr, ptr [[N2_TABLE]], i64 3
Expand All @@ -501,9 +475,7 @@ type I2 interface {
// CHECK: [[N3_OBJECT:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.AllocZ"(i64 8)
// CHECK: [[N3_FIELD:%[0-9]+]] = getelementptr inbounds nuw %main.T, ptr [[N3_OBJECT]], i32 0, i32 0
// CHECK-NEXT: store i64 100, ptr [[N3_FIELD]]
// CHECK-NEXT: [[N3_ITAB:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface${{[-A-Za-z0-9_]+}}", ptr @"*_llgo_main.T")
// CHECK-NEXT: [[N3_I0:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" undef, ptr [[N3_ITAB]], 0
// CHECK-NEXT: [[N3_IFACE:%[0-9]+]] = insertvalue %"{{.*}}/runtime/internal/runtime.iface" [[N3_I0]], ptr [[N3_OBJECT]], 1
// CHECK-NEXT: [[N3_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr [[N3_OBJECT]], 1
// CHECK-NEXT: [[N3_DATA:%[0-9]+]] = call ptr @"{{.*}}/runtime/internal/runtime.IfacePtrData"(%"{{.*}}/runtime/internal/runtime.iface" [[N3_IFACE]])
// CHECK-NEXT: [[N3_TABLE:%[0-9]+]] = extractvalue %"{{.*}}/runtime/internal/runtime.iface" [[N3_IFACE]], 0
// CHECK-NEXT: [[N3_SLOT:%[0-9]+]] = getelementptr ptr, ptr [[N3_TABLE]], i64 3
Expand Down
3 changes: 1 addition & 2 deletions cl/_testgo/cgocfiles/cgocfiles.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ var checkErrno = func(error) {}
// CHECK: [[HAS_ERR:%[0-9]+]] = icmp ne i32 [[ERRNO]], 0
// CHECK: [[ERRNO_VALUE:%[0-9]+]] = sext i32 [[ERRNO]] to i64
// CHECK: store i64 [[ERRNO_VALUE]], ptr [[ERRNO_BOX:%[0-9]+]]
// CHECK: [[ERRNO_ITAB:%[0-9]+]] = call ptr @"{{.*}}NewItab"(ptr {{.*}}, ptr @_llgo_syscall.Errno)
// CHECK: [[ERR_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" {{.*}}, ptr [[ERRNO_BOX]], 1
// CHECK: [[ERR_IFACE:%[0-9]+]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr [[ERRNO_BOX]], 1
// CHECK: br i1 [[HAS_ERR]], label %[[ERR_BLOCK:[^, ]+]], label %[[OK_BLOCK:[^, ]+]]
// CHECK: [[ERR_PAIR:%[0-9]+]] = insertvalue { i32, %"{{.*}}iface" } {{.*}}, %"{{.*}}iface" [[ERR_IFACE]], 1
// CHECK-NEXT: ret { i32, %"{{.*}}iface" } [[ERR_PAIR]]
Expand Down
4 changes: 1 addition & 3 deletions cl/_testgo/closureall/in.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,7 @@ func makeWithFree(base int) Fn {
// A method expression uses the receiver as an ordinary first argument.
// CHECK: call i64 @"main.(*S).Add$thunk"(ptr [[S]], i64 8)
// The interface method value keeps the same interface payload and checks it is non-nil.
// CHECK: [[ITAB:%.*]] = call ptr @"{{.*}}/runtime/internal/runtime.NewItab"(ptr {{.*}}, ptr @"*_llgo_main.S")
// CHECK: [[IFACE_ITAB:%.*]] = insertvalue %"{{.*}}iface" undef, ptr [[ITAB]], 0
// CHECK: [[IFACE:%.*]] = insertvalue %"{{.*}}iface" [[IFACE_ITAB]], ptr [[S]], 1
// CHECK: [[IFACE:%.*]] = insertvalue %"{{.*}}iface" { ptr @"_llgo_itab${{.*}}", ptr undef }, ptr [[S]], 1
// CHECK: [[IFACE_TYPE:%.*]] = call ptr @"{{.*}}/runtime/internal/runtime.IfaceType"(%"{{.*}}iface" [[IFACE]])
// CHECK: [[IFACE_OK:%.*]] = icmp ne ptr [[IFACE_TYPE]], null
// CHECK: br i1 [[IFACE_OK]], label %{{.*}}, label %{{.*}}
Expand Down
4 changes: 1 addition & 3 deletions cl/_testgo/defer3/in.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ package main
// CHECK: store ptr [[D3_FAIL_OLD_HEAD]], ptr %{{[0-9]+}}
// CHECK: store %"{{.*}}String" { ptr @[[D3_BYE]], i64 3 }, ptr %{{[0-9]+}}
// CHECK-NEXT: store ptr [[D3_FAIL_NODE]], ptr [[D3_FAIL_HEAD]]
// CHECK: store %"{{.*}}String" { ptr @[[D3_PANIC]], i64 13 }, ptr [[D3_PANIC_BOX:%[0-9]+]]
// CHECK-NEXT: [[D3_PANIC_EFACE:%[0-9]+]] = insertvalue %"{{.*}}eface" { ptr @_llgo_string, ptr undef }, ptr [[D3_PANIC_BOX]], 1
// CHECK-NEXT: call void @"{{.*}}Panic"(%"{{.*}}eface" [[D3_PANIC_EFACE]])
// CHECK: call void @"{{.*}}Panic"(%"{{.*}}eface" { ptr @_llgo_string, ptr @"_llgo_ifacebox${{.*}}" })
// CHECK: [[D3_RUN_NODE:%[0-9]+]] = load ptr, ptr [[D3_FAIL_HEAD]]
// CHECK: [[D3_RUN_PAYLOAD:%[0-9]+]] = extractvalue { ptr, i64, %"{{.*}}String" } %{{[0-9]+}}, 2
// CHECK-NEXT: call void @"{{.*}}FreeDeferNode"(ptr [[D3_RUN_NODE]])
Expand Down
4 changes: 1 addition & 3 deletions cl/_testgo/defer4/in.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,7 @@ package main
// CHECK: store ptr [[D4_FAIL_OLD_HEAD]], ptr %{{[0-9]+}}
// CHECK: store %"{{.*}}String" { ptr @[[D4_BYE]], i64 3 }, ptr %{{[0-9]+}}
// CHECK-NEXT: store ptr [[D4_FAIL_NODE]], ptr [[D4_FAIL_HEAD]]
// CHECK: store %"{{.*}}String" { ptr @[[D4_PANIC]], i64 13 }, ptr [[D4_PANIC_BOX:%[0-9]+]]
// CHECK-NEXT: [[D4_PANIC_EFACE:%[0-9]+]] = insertvalue %"{{.*}}eface" { ptr @_llgo_string, ptr undef }, ptr [[D4_PANIC_BOX]], 1
// CHECK-NEXT: call void @"{{.*}}Panic"(%"{{.*}}eface" [[D4_PANIC_EFACE]])
// CHECK: call void @"{{.*}}Panic"(%"{{.*}}eface" { ptr @_llgo_string, ptr @"_llgo_ifacebox${{.*}}" })
// CHECK: [[D4_PENDING_NODE:%[0-9]+]] = load ptr, ptr [[D4_FAIL_HEAD]]
// CHECK-NEXT: [[D4_HAS_NODE:%[0-9]+]] = icmp ne ptr [[D4_PENDING_NODE]], null
// CHECK-NEXT: br i1 [[D4_HAS_NODE]], label %{{.*}}, label %{{.*}}
Expand Down
Loading
Loading