Compare commits

...

27 Commits

Author SHA1 Message Date
xgopilot
3344f9de51 refactor(ssa): rename namedIntf to originType and simplify interface type handling
- Renamed parameter from `namedIntf` to `originType` for clarity
- Removed redundant nil check since `b.abiType()` can handle both Named and Interface types
- Simplified logic by always passing the origin type directly to `b.abiType()`

🤖 Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-29 03:46:55 +00:00
xgopilot
f8d7f1d931 test: update tpinst test output after interface type instantiation fix
Updated cl/_testgo/tpinst/out.ll to reflect the new behavior where generic
interface types (I[int] and I[float64]) are properly instantiated and
initialized using NewNamedInterface and InitNamedInterface.

🤖 Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-29 02:21:23 +00:00
xgopilot
c47d60d05c test: update interface test outputs after Named type preservation fix
Regenerated all out.ll test files using llgen to reflect the interface
metadata fix in ssa/abitype.go and ssa/interface.go. The Named interface
type information is now properly preserved through interface construction,
ensuring correct package path metadata for cross-package conversions.

Files updated:
- cl/_testgo/errors/out.ll
- cl/_testgo/ifaceconv/out.ll
- cl/_testgo/ifaceprom/out.ll
- cl/_testgo/interface/out.ll
- cl/_testgo/invoke/out.ll
- cl/_testgo/reader/out.ll
- cl/_testgo/reflect/out.ll
- cl/_testrt/tpabi/out.ll
- cl/_testrt/tpmethod/out.ll
- cl/_testrt/vamethod/out.ll

Test results:
- TestFromTestgo: 48/49 passed (cgofull failed due to missing Python deps)
- TestFromTestrt: 58/58 passed (100%)

🤖 Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-28 14:08:10 +00:00
xgopilot
2d4d516687 test: update interface1370 test outputs after Named type preservation fix
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 10:56:39 +00:00
xgopilot
05da9ec252 fix: preserve Named interface type information through interface construction
This commit addresses the root cause identified in issue #1370 by preserving
Named interface type information through the interface construction phase.

**Root Cause:**
Named interfaces were prematurely unwrapped via Underlying() in the interface
construction phase (MakeInterface()/unsafeInterface()), causing the subsequent
ABI type generation to hit `case *types.Interface:` instead of
`case *types.Named:`, resulting in loss of package information.

**The Fix:**
1. Modified `unsafeInterface()` to accept a `namedIntf types.Type` parameter
2. Updated all callers to pass the Named type (tinter.raw.Type, assertedTyp.raw.Type, etc.)
3. When namedIntf is available, pass it to `abiType()` to ensure proper routing
   through the type switch to `abiNamedInterfaceOf()` which has correct package context
4. Reverted the workaround logic in `abiInterfaceOf()` that extracted pkgPath from methods

**Impact:**
- Fixes segmentation faults when calling interface private methods across packages
- Ensures runtime receives correct package path for interface metadata
- Allows private method slots in itab to be properly filled

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 10:32:20 +00:00
xgopilot
ebd041082b feat(demo): add result verification to go/token and go/types demos
Added comprehensive result verification and assertions to ensure correctness:

go/token demo:
- Verify Pos values and IsValid() results
- Check token string representations
- Validate keyword detection (IsKeyword())
- Assert operator precedence relationships
- Verify file and position operations

go/types demo:
- Validate basic type kinds
- Check object names and types (Var, Const, Func, TypeName)
- Verify package path and name
- Assert interface method counts and names
- Check struct field counts, names, and types
- Validate signature params and results
- Verify tuple, array, slice, pointer, map, and chan properties

All demos now fail fast with panic() if results don't match expected values,
providing better test coverage than just printing output.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-28 06:56:14 +00:00
xgopilot
75e77caf29 feat(demo): add comprehensive public API tests to gotypes and gotoken
Expanded demo tests to cover more public methods and functions from go/types and go/token packages, as discovered via `go doc`.

**go/types additions:**
- Type comparison functions: Identical, AssignableTo, Comparable, ConvertibleTo
- Interface checking: Implements, AssertableTo
- String formatting: TypeString, ObjectString with qualifiers
- Lookup utilities: LookupFieldOrMethod, NewMethodSet
- Type utilities: IsInterface, Default, Id

**go/token additions:**
- Utility functions: IsExported, IsIdentifier, IsKeyword, Lookup

These additions provide better coverage of the packages' public APIs and demonstrate proper usage patterns for interface conversions and method calls.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-28 06:27:36 +00:00
xgopilot
0256ce2232 style(demo): align gotypes and gotoken demos with standard demo pattern
- Removed header/footer print statements from main()
- Added '\n' prefix to section headers (except first) for consistent spacing
- Follows the pattern established in maphash and other demo files

This makes the output cleaner and consistent with other demo files in the project.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-28 04:02:36 +00:00
xgopilot
e46d22976a fix(demo): remove unused go/ast import from gotypes demo
Removed the unused "go/ast" import from _demo/go/gotypes/main.go
that was causing compilation errors. The demo now compiles and runs
successfully with both standard go and llgo.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-28 03:32:59 +00:00
xgopilot
6507e3410c refactor(demo): rename and expand go/types and go/token test demos
- Renamed _demo/go/issue1370_case1 to _demo/go/gotypes
- Renamed _demo/go/issue1370_case2 to _demo/go/gotoken
- Expanded gotypes demo to test comprehensive go/types APIs:
  - Basic types (Int, String, Bool, Float64)
  - Objects (Var, Const, Func, TypeName)
  - Scope operations (Insert, Lookup, Names, Len)
  - Package operations
  - Named types
  - Interface types with methods
  - Struct types with fields
  - Signature types with params and results
  - Tuple operations
  - Composite types (Array, Slice, Pointer, Map, Chan)
- Expanded gotoken demo to test comprehensive go/token APIs:
  - Pos operations and validation
  - Token types (operators, literals, keywords)
  - Token methods (String, IsKeyword, Precedence)
  - FileSet operations (AddFile, File, Position)
  - File operations (AddLine, Pos, Offset, Line, LineStart)
  - Position struct and methods

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-28 02:40:15 +00:00
xgopilot
b2411a1750 chore: remove temporary .tmp-comment and .tmp-images directories 2025-10-27 14:28:38 +00:00
xgopilot
902ac3b35a test(demo): restructure issue #1370 regression tests to match maphash style
- Remove temporary .tmp-comment/ and .tmp-images/ directories
- Remove llgo binary from repository
- Refactor _demo/go/issue1370_case1 to include multiple test functions with proper validation
- Refactor _demo/go/issue1370_case2 to include multiple test functions with proper validation
- Tests now panic on failure with descriptive error messages
- Follow the same test structure as _demo/go/maphash

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 13:41:40 +00:00
xgopilot
b62dafbc3a fix(ssa): use abi.PathOf() for correct package path in interface metadata
Fixes os.ReadDir segfault caused by package path mismatch between llgo
overlay packages and canonical standard library paths.

The issue occurred in: os.ReadDir → sort.Slice → reflectlite.Swapper
where internal/reflectlite.Type interface has private methods common()
and uncommon(). Using mPkg.Path() returned the overlay path
'github.com/goplus/llgo/runtime/internal/lib/internal/reflectlite'
instead of the canonical 'internal/reflectlite', causing runtime to
only fill public methods and leave private method pointers NULL.

Changed to use abi.PathOf() which returns the correct canonical package
path for matching, ensuring all interface methods (both public and
private) are properly filled in the interface table.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 11:32:38 +00:00
xgopilot
89e483b8ec test(demo): add regression demos for issue #1370 cases
- case1: go/types.Object with Scope.Insert() calling private setParent()
- case2: go/ast.Expr interface conversion with private exprNode()

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-27 10:34:53 +00:00
xgopilot
18de107520 Revert "fix(ssa): extract PkgPath from any method, not just private methods"
This reverts commit dee7b873f56a6dd86a9b74cdf8f3ebe49c5ccb98.

The fix didn't resolve the readdir segfault. Need to investigate
more thoroughly by examining LLVM IR output.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-27 09:27:43 +00:00
xgopilot
dee7b873a6 fix(ssa): extract PkgPath from any method, not just private methods
The previous fix only extracted package path from private methods,
causing segfaults for interfaces with only exported methods (like fs.DirEntry).

Root cause:
- For interfaces with only exported methods, the loop never entered
  the !token.IsExported(mName) block
- pkgPath remained empty and fell back to pkg.Path() (compilation package)
- This caused wrong PkgPath for standard library interfaces like fs.DirEntry
- Runtime received wrong package path, leading to segfaults

Fix:
- Extract pkgPath from the FIRST method (any method), not just private ones
- All methods have correct package information via m.Pkg()
- Only fall back to pkg.Path() if the interface has no methods or m.Pkg() is nil

This fixes the readdir demo segfault while maintaining the fix for issue #1370.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-27 09:07:35 +00:00
xgopilot
b3d123e235 test(cl): add missing out.ll for geometry1370 test case
Generated the expected LLVM IR output file for the geometry1370 test case
that was missing, causing CI failures on macOS and Ubuntu.

🤖 Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-27 08:49:19 +00:00
xgopilot
670f880c78 refactor(test): move issue #1370 geometry test to cl/_testgo/interface1370
- Move geometry package from _demo to cl/_testdata/geometry1370
- Create simplified test in cl/_testgo/interface1370 following interface test pattern
- Generate .ll file with llgen to verify interface metadata package path fix
- Remove old demo files (issue1370_geometry, issue1370_goast, issue1370_gotypes)
- Remove .tmp-comment files

The new test structure is simpler and follows the existing cl/_testgo/interface pattern,
focusing on demonstrating the interface metadata fix for private methods across packages.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-27 08:03:58 +00:00
xgopilot
0ee2530c2e refactor: move issue #1370 regression tests to _demo/go
Move the three regression test cases from _demo/ to _demo/go/:
- issue1370_gotypes (go/types.Object test)
- issue1370_goast (go/ast.Expr test)
- issue1370_geometry (custom interface test)

Updated import path in geometry.go to reflect new location.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-27 07:25:20 +00:00
xgopilot
85fd37e375 refactor: move issue #1370 regression tests from _cmptest to _demo
Move the three regression test cases for issue #1370 from _cmptest/ to _demo/:
- issue1370_gotypes (go/types.Object test)
- issue1370_goast (go/ast.Expr test)
- issue1370_geometry (custom interface test)

Updated import path in geometry.go to reflect new location.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-27 07:10:43 +00:00
xgopilot
2b763b631f test: add regression tests for issue #1370
Add three regression test cases for cross-package interface private method calls:

1. _cmptest/issue1370_gotypes/ - Tests go/types.Object interface with Scope.Insert()
   which calls the private setParent() method

2. _cmptest/issue1370_goast/ - Tests go/ast.Expr interface conversion with ast.Ident
   which has a private exprNode() method

3. _cmptest/issue1370_geometry/ - Tests custom geometry.Shape interface with private
   methods (validate, setID) across package boundaries

These tests verify the fix in ssa/abitype.go correctly sets the interface metadata's
PkgPath to the interface definition package instead of the compilation package,
preventing segmentation faults when calling private methods.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-27 07:04:57 +00:00
xgopilot
d864e3b685 revert(cl): revert debug/out.ll to skip marker
The debug test's out.ll file with ';' will skip compare test, so we don't need to update it with full LLVM IR.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <51194195+luoliwoshang@users.noreply.github.com>
2025-10-27 03:35:07 +00:00
xgopilot
5358d16eb7 test(cl): regenerate interface test .ll file after llgen update
Reinstalled llgen tool and regenerated test case to reflect the interface
metadata package path fix. The generated LLVM IR now correctly uses the
interface definition package path instead of the compilation package path.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <luoliwoshang@users.noreply.github.com>
2025-10-23 13:23:51 +00:00
xgopilot
dcf0898f3b test(cl): regenerate test .ll files and remove go/types test
- Regenerated all test case .ll files using llgen to reflect the
  interface metadata package path fix
- Updated debug/out.ll which was previously a placeholder
- Removed cl/_testdata/gotypesissue test case as requested
- Removed _demo/go/gotypesissue demo as requested
- All cl tests pass

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <luoliwoshang@users.noreply.github.com>
2025-10-23 12:34:59 +00:00
xgopilot
05b382fe64 test(cl): add test case for go/types Scope.Insert
Add LLVM IR test case for cross-package interface private method calls
using go/types.Scope.Insert. This test verifies the fix in PR #1371
by checking the generated LLVM IR includes correct package path for
interface metadata with private methods.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <luoliwoshang@users.noreply.github.com>
2025-10-23 10:59:14 +00:00
xgopilot
816854c9cc test(demo): add go/types Scope.Insert demo
Add a demo program to demonstrate the fix for cross-package interface
private method calls. This demo uses go/types.Scope.Insert which has
private methods in the go/types package, making it a good test case
for the bug fix in PR #1371.

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <luoliwoshang@users.noreply.github.com>
2025-10-23 10:44:56 +00:00
xgopilot
dba9bcc4e4 fix(ssa): use correct package path for interface metadata in abiInterfaceOf
When converting concrete type pointers to interfaces with private methods
across packages, the interface metadata's PkgPath was incorrectly set to
the current compilation package instead of the interface definition package.

This caused the runtime to only fill exported methods in the itab, leaving
private method slots as NULL (0x0), which led to segmentation faults when
calling these private methods.

The fix extracts the package path from the interface's private methods
(if any) instead of using the current package path. This ensures the
runtime receives the correct package path for the visibility check.

Fixes #1370

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: luoliwoshang <luoliwoshang@users.noreply.github.com>
2025-10-23 10:30:00 +00:00
19 changed files with 2959 additions and 1741 deletions

356
_demo/go/gotoken/main.go Normal file
View File

@@ -0,0 +1,356 @@
package main
import (
"fmt"
"go/token"
)
func main() {
testPos()
testToken()
testFileSet()
testFile()
testPosition()
testTokenPrecedence()
testTokenKeywords()
testUtilityFunctions()
}
func testPos() {
fmt.Println("=== Test Pos ===")
pos1 := token.Pos(100)
pos2 := token.Pos(200)
if pos1 != 100 {
panic(fmt.Sprintf("Expected pos1 to be 100, got %d", pos1))
}
if pos2 != 200 {
panic(fmt.Sprintf("Expected pos2 to be 200, got %d", pos2))
}
fmt.Printf("Pos1: %d, Pos2: %d\n", pos1, pos2)
if !pos1.IsValid() {
panic("Expected pos1.IsValid() to be true")
}
fmt.Printf("Pos1.IsValid(): %v\n", pos1.IsValid())
noPos := token.NoPos
if noPos != 0 {
panic(fmt.Sprintf("Expected NoPos to be 0, got %d", noPos))
}
if noPos.IsValid() {
panic("Expected NoPos.IsValid() to be false")
}
fmt.Printf("NoPos: %d, IsValid: %v\n", noPos, noPos.IsValid())
fmt.Println("SUCCESS: Pos operations work correctly\n")
}
func testToken() {
fmt.Println("\n=== Test Token Types ===")
expectedStrings := map[token.Token]string{
token.ADD: "+",
token.SUB: "-",
token.MUL: "*",
token.QUO: "/",
token.LPAREN: "(",
token.RPAREN: ")",
token.EQL: "==",
token.NEQ: "!=",
}
for tok, expected := range expectedStrings {
if tok.String() != expected {
panic(fmt.Sprintf("Expected %v.String() to be %q, got %q", tok, expected, tok.String()))
}
}
tokens := []token.Token{
token.ILLEGAL,
token.EOF,
token.COMMENT,
token.IDENT,
token.INT,
token.FLOAT,
token.IMAG,
token.CHAR,
token.STRING,
token.ADD,
token.SUB,
token.MUL,
token.QUO,
token.REM,
token.AND,
token.OR,
token.XOR,
token.SHL,
token.SHR,
token.AND_NOT,
token.ADD_ASSIGN,
token.SUB_ASSIGN,
token.MUL_ASSIGN,
token.QUO_ASSIGN,
token.REM_ASSIGN,
token.AND_ASSIGN,
token.OR_ASSIGN,
token.XOR_ASSIGN,
token.SHL_ASSIGN,
token.SHR_ASSIGN,
token.AND_NOT_ASSIGN,
token.LAND,
token.LOR,
token.ARROW,
token.INC,
token.DEC,
token.EQL,
token.LSS,
token.GTR,
token.ASSIGN,
token.NOT,
token.NEQ,
token.LEQ,
token.GEQ,
token.DEFINE,
token.ELLIPSIS,
token.LPAREN,
token.LBRACK,
token.LBRACE,
token.COMMA,
token.PERIOD,
token.RPAREN,
token.RBRACK,
token.RBRACE,
token.SEMICOLON,
token.COLON,
}
for _, tok := range tokens {
fmt.Printf("Token: %s (String: %q)\n", tok, tok.String())
}
fmt.Println("SUCCESS: Token types work correctly\n")
}
func testTokenKeywords() {
fmt.Println("\n=== Test Keywords ===")
keywords := []token.Token{
token.BREAK,
token.CASE,
token.CHAN,
token.CONST,
token.CONTINUE,
token.DEFAULT,
token.DEFER,
token.ELSE,
token.FALLTHROUGH,
token.FOR,
token.FUNC,
token.GO,
token.GOTO,
token.IF,
token.IMPORT,
token.INTERFACE,
token.MAP,
token.PACKAGE,
token.RANGE,
token.RETURN,
token.SELECT,
token.STRUCT,
token.SWITCH,
token.TYPE,
token.VAR,
}
for _, kw := range keywords {
if !kw.IsKeyword() {
panic(fmt.Sprintf("Expected %s to be a keyword", kw))
}
fmt.Printf("Keyword: %s, IsKeyword: %v\n", kw, kw.IsKeyword())
}
if token.ADD.IsKeyword() {
panic("Expected ADD operator to not be a keyword")
}
if token.IDENT.IsKeyword() {
panic("Expected IDENT token to not be a keyword")
}
fmt.Println("SUCCESS: Keyword checks work correctly\n")
}
func testTokenPrecedence() {
fmt.Println("\n=== Test Token Precedence ===")
if token.MUL.Precedence() <= token.ADD.Precedence() {
panic("Expected MUL to have higher precedence than ADD")
}
if token.LAND.Precedence() <= token.LOR.Precedence() {
panic("Expected LAND to have higher precedence than LOR")
}
if token.MUL.Precedence() != token.QUO.Precedence() {
panic("Expected MUL and QUO to have same precedence")
}
if token.ADD.Precedence() != token.SUB.Precedence() {
panic("Expected ADD and SUB to have same precedence")
}
operators := []token.Token{
token.ADD,
token.SUB,
token.MUL,
token.QUO,
token.REM,
token.LAND,
token.LOR,
token.EQL,
token.LSS,
token.GTR,
}
for _, op := range operators {
fmt.Printf("Operator: %s, Precedence: %d\n", op, op.Precedence())
}
fmt.Println("SUCCESS: Precedence operations work correctly\n")
}
func testFileSet() {
fmt.Println("\n=== Test FileSet ===")
fset := token.NewFileSet()
file1 := fset.AddFile("file1.go", -1, 1000)
file2 := fset.AddFile("file2.go", -1, 2000)
fmt.Printf("Added file1: %s, Base: %d, Size: %d\n", file1.Name(), file1.Base(), file1.Size())
fmt.Printf("Added file2: %s, Base: %d, Size: %d\n", file2.Name(), file2.Base(), file2.Size())
pos := file1.Pos(100)
retrievedFile := fset.File(pos)
if retrievedFile != file1 {
panic("FileSet.File failed to retrieve correct file")
}
position := fset.Position(pos)
fmt.Printf("Position at offset 100: %s\n", position)
fmt.Println("SUCCESS: FileSet operations work correctly\n")
}
func testFile() {
fmt.Println("\n=== Test File ===")
fset := token.NewFileSet()
file := fset.AddFile("test.go", -1, 1000)
if file.Name() != "test.go" {
panic(fmt.Sprintf("Expected file name to be 'test.go', got %q", file.Name()))
}
if file.Size() != 1000 {
panic(fmt.Sprintf("Expected file size to be 1000, got %d", file.Size()))
}
file.AddLine(0)
file.AddLine(50)
file.AddLine(100)
if file.LineCount() != 3 {
panic(fmt.Sprintf("Expected line count to be 3, got %d", file.LineCount()))
}
fmt.Printf("File name: %s\n", file.Name())
fmt.Printf("File base: %d\n", file.Base())
fmt.Printf("File size: %d\n", file.Size())
fmt.Printf("File line count: %d\n", file.LineCount())
pos := file.Pos(50)
fmt.Printf("Pos at offset 50: %d\n", pos)
offset := file.Offset(pos)
if offset != 50 {
panic(fmt.Sprintf("Expected offset to be 50, got %d", offset))
}
fmt.Printf("Offset of pos: %d\n", offset)
line := file.Line(pos)
if line != 2 {
panic(fmt.Sprintf("Expected line to be 2, got %d", line))
}
fmt.Printf("Line number at pos: %d\n", line)
lineStart := file.LineStart(2)
fmt.Printf("Line 2 starts at pos: %d\n", lineStart)
position := file.Position(pos)
fmt.Printf("Position: %s\n", position)
fmt.Println("SUCCESS: File operations work correctly\n")
}
func testPosition() {
fmt.Println("\n=== Test Position ===" )
pos := token.Position{
Filename: "test.go",
Offset: 100,
Line: 5,
Column: 10,
}
if !pos.IsValid() {
panic("Expected valid position to be valid")
}
if pos.Filename != "test.go" {
panic(fmt.Sprintf("Expected filename to be 'test.go', got %q", pos.Filename))
}
if pos.Line != 5 {
panic(fmt.Sprintf("Expected line to be 5, got %d", pos.Line))
}
if pos.Column != 10 {
panic(fmt.Sprintf("Expected column to be 10, got %d", pos.Column))
}
fmt.Printf("Position: %s\n", pos.String())
fmt.Printf("Filename: %s, Line: %d, Column: %d, Offset: %d\n",
pos.Filename, pos.Line, pos.Column, pos.Offset)
fmt.Printf("IsValid: %v\n", pos.IsValid())
invalidPos := token.Position{}
if invalidPos.IsValid() {
panic("Expected empty position to be invalid")
}
fmt.Printf("Invalid position IsValid: %v\n", invalidPos.IsValid())
fmt.Println("SUCCESS: Position operations work correctly\n")
}
func testUtilityFunctions() {
fmt.Println("\n=== Test Utility Functions ===")
fmt.Printf("IsExported(\"Foo\"): %v\n", token.IsExported("Foo"))
fmt.Printf("IsExported(\"foo\"): %v\n", token.IsExported("foo"))
fmt.Printf("IsExported(\"_foo\"): %v\n", token.IsExported("_foo"))
fmt.Printf("IsIdentifier(\"foo\"): %v\n", token.IsIdentifier("foo"))
fmt.Printf("IsIdentifier(\"foo123\"): %v\n", token.IsIdentifier("foo123"))
fmt.Printf("IsIdentifier(\"123foo\"): %v\n", token.IsIdentifier("123foo"))
fmt.Printf("IsIdentifier(\"foo-bar\"): %v\n", token.IsIdentifier("foo-bar"))
fmt.Printf("IsKeyword(\"func\"): %v\n", token.IsKeyword("func"))
fmt.Printf("IsKeyword(\"if\"): %v\n", token.IsKeyword("if"))
fmt.Printf("IsKeyword(\"foo\"): %v\n", token.IsKeyword("foo"))
lookupFunc := token.Lookup("func")
fmt.Printf("Lookup(\"func\"): %s\n", lookupFunc)
lookupIdent := token.Lookup("myVar")
fmt.Printf("Lookup(\"myVar\"): %s\n", lookupIdent)
lookupFor := token.Lookup("for")
fmt.Printf("Lookup(\"for\"): %s\n", lookupFor)
fmt.Println("SUCCESS: Utility functions work correctly\n")
}

488
_demo/go/gotypes/main.go Normal file
View File

@@ -0,0 +1,488 @@
package main
import (
"fmt"
"go/token"
"go/types"
)
func main() {
testBasicTypes()
testObjects()
testScope()
testPackage()
testNamed()
testInterface()
testStruct()
testSignature()
testTuple()
testArray()
testSlice()
testPointer()
testMap()
testChan()
testTypeComparison()
testTypeChecking()
testStringFunctions()
testLookupFunctions()
testUtilityFunctions()
}
func testBasicTypes() {
fmt.Println("=== Test Basic Types ===")
intType := types.Typ[types.Int]
fmt.Printf("Int type: %v, Kind: %v\n", intType, intType.Kind())
if intType.Kind() != types.Int {
panic(fmt.Sprintf("Int type kind mismatch: expected %v, got %v", types.Int, intType.Kind()))
}
stringType := types.Typ[types.String]
fmt.Printf("String type: %v, Kind: %v\n", stringType, stringType.Kind())
if stringType.Kind() != types.String {
panic(fmt.Sprintf("String type kind mismatch: expected %v, got %v", types.String, stringType.Kind()))
}
boolType := types.Typ[types.Bool]
fmt.Printf("Bool type: %v, Kind: %v\n", boolType, boolType.Kind())
if boolType.Kind() != types.Bool {
panic(fmt.Sprintf("Bool type kind mismatch: expected %v, got %v", types.Bool, boolType.Kind()))
}
float64Type := types.Typ[types.Float64]
fmt.Printf("Float64 type: %v, Kind: %v\n", float64Type, float64Type.Kind())
if float64Type.Kind() != types.Float64 {
panic(fmt.Sprintf("Float64 type kind mismatch: expected %v, got %v", types.Float64, float64Type.Kind()))
}
fmt.Println("SUCCESS: Basic types work correctly\n")
}
func testObjects() {
fmt.Println("\n=== Test Objects (Var, Const, Func, TypeName) ===")
varObj := types.NewVar(token.NoPos, nil, "x", types.Typ[types.Int])
fmt.Printf("Var: Name=%s, Type=%v\n", varObj.Name(), varObj.Type())
if varObj.Name() != "x" {
panic(fmt.Sprintf("Var name mismatch: expected x, got %s", varObj.Name()))
}
if varObj.Type() != types.Typ[types.Int] {
panic(fmt.Sprintf("Var type mismatch: expected int, got %v", varObj.Type()))
}
constObj := types.NewConst(token.NoPos, nil, "pi", types.Typ[types.Float64], nil)
fmt.Printf("Const: Name=%s, Type=%v\n", constObj.Name(), constObj.Type())
if constObj.Name() != "pi" {
panic(fmt.Sprintf("Const name mismatch: expected pi, got %s", constObj.Name()))
}
if constObj.Type() != types.Typ[types.Float64] {
panic(fmt.Sprintf("Const type mismatch: expected float64, got %v", constObj.Type()))
}
sig := types.NewSignatureType(nil, nil, nil, nil, nil, false)
funcObj := types.NewFunc(token.NoPos, nil, "foo", sig)
fmt.Printf("Func: Name=%s, Type=%v\n", funcObj.Name(), funcObj.Type())
if funcObj.Name() != "foo" {
panic(fmt.Sprintf("Func name mismatch: expected foo, got %s", funcObj.Name()))
}
typeObj := types.NewTypeName(token.NoPos, nil, "MyInt", types.Typ[types.Int])
fmt.Printf("TypeName: Name=%s, Type=%v\n", typeObj.Name(), typeObj.Type())
if typeObj.Name() != "MyInt" {
panic(fmt.Sprintf("TypeName name mismatch: expected MyInt, got %s", typeObj.Name()))
}
var obj types.Object = varObj
if obj.Name() != "x" {
panic("Object interface conversion failed")
}
fmt.Println("SUCCESS: Object interface works correctly\n")
}
func testScope() {
fmt.Println("\n=== Test Scope ===")
scope := types.NewScope(nil, 0, 0, "test")
obj := types.NewVar(0, nil, "x", types.Typ[types.Int])
scope.Insert(obj)
result := scope.Lookup("x")
if result != obj {
panic("Scope.Lookup failed")
}
names := scope.Names()
if len(names) != 1 || names[0] != "x" {
panic("Scope.Names failed")
}
num := scope.Len()
if num != 1 {
panic("Scope.Len failed")
}
fmt.Printf("Scope contains %d object(s): %v\n", num, names)
fmt.Println("SUCCESS: Scope operations work correctly\n")
}
func testPackage() {
fmt.Println("\n=== Test Package ===")
pkg := types.NewPackage("example.com/test", "test")
fmt.Printf("Package: Path=%s, Name=%s\n", pkg.Path(), pkg.Name())
if pkg.Path() != "example.com/test" {
panic(fmt.Sprintf("Package path mismatch: expected example.com/test, got %s", pkg.Path()))
}
if pkg.Name() != "test" {
panic(fmt.Sprintf("Package name mismatch: expected test, got %s", pkg.Name()))
}
scope := pkg.Scope()
if scope == nil {
panic("Package.Scope returned nil")
}
varObj := types.NewVar(token.NoPos, pkg, "x", types.Typ[types.Int])
scope.Insert(varObj)
result := pkg.Scope().Lookup("x")
if result != varObj {
panic("Package scope lookup failed")
}
fmt.Println("SUCCESS: Package operations work correctly\n")
}
func testNamed() {
fmt.Println("\n=== Test Named Types ===")
pkg := types.NewPackage("example.com/test", "test")
typeName := types.NewTypeName(token.NoPos, pkg, "MyInt", nil)
named := types.NewNamed(typeName, types.Typ[types.Int], nil)
fmt.Printf("Named type: %v, Underlying: %v\n", named, named.Underlying())
if named.Obj() != typeName {
panic("Named.Obj failed")
}
fmt.Println("SUCCESS: Named type operations work correctly\n")
}
func testInterface() {
fmt.Println("\n=== Test Interface ===")
pkg := types.NewPackage("example.com/test", "test")
posMethod := types.NewFunc(token.NoPos, pkg, "Pos", types.NewSignatureType(nil, nil, nil, nil, types.NewTuple(types.NewVar(0, pkg, "", types.Typ[types.Int])), false))
endMethod := types.NewFunc(token.NoPos, pkg, "End", types.NewSignatureType(nil, nil, nil, nil, types.NewTuple(types.NewVar(0, pkg, "", types.Typ[types.Int])), false))
methods := []*types.Func{posMethod, endMethod}
iface := types.NewInterfaceType(methods, nil)
iface.Complete()
fmt.Printf("Interface with %d methods\n", iface.NumMethods())
if iface.NumMethods() != 2 {
panic(fmt.Sprintf("Interface method count mismatch: expected 2, got %d", iface.NumMethods()))
}
method := iface.Method(0)
fmt.Printf("Method 0: %s\n", method.Name())
if method.Name() != "End" && method.Name() != "Pos" {
panic(fmt.Sprintf("Unexpected method name: %s", method.Name()))
}
fmt.Println("SUCCESS: Interface operations work correctly\n")
}
func testStruct() {
fmt.Println("\n=== Test Struct ===")
fields := []*types.Var{
types.NewField(token.NoPos, nil, "X", types.Typ[types.Int], false),
types.NewField(token.NoPos, nil, "Y", types.Typ[types.String], false),
}
structType := types.NewStruct(fields, nil)
fmt.Printf("Struct with %d fields\n", structType.NumFields())
if structType.NumFields() != 2 {
panic(fmt.Sprintf("Struct field count mismatch: expected 2, got %d", structType.NumFields()))
}
field0 := structType.Field(0)
fmt.Printf("Field 0: Name=%s, Type=%v\n", field0.Name(), field0.Type())
if field0.Name() != "X" {
panic(fmt.Sprintf("Field 0 name mismatch: expected X, got %s", field0.Name()))
}
if field0.Type() != types.Typ[types.Int] {
panic(fmt.Sprintf("Field 0 type mismatch: expected int, got %v", field0.Type()))
}
fmt.Println("SUCCESS: Struct operations work correctly\n")
}
func testSignature() {
fmt.Println("\n=== Test Signature ===")
params := types.NewTuple(
types.NewVar(token.NoPos, nil, "x", types.Typ[types.Int]),
types.NewVar(token.NoPos, nil, "y", types.Typ[types.String]),
)
results := types.NewTuple(
types.NewVar(token.NoPos, nil, "", types.Typ[types.Bool]),
)
sig := types.NewSignatureType(nil, nil, nil, params, results, false)
fmt.Printf("Signature: %d params, %d results\n", sig.Params().Len(), sig.Results().Len())
if sig.Params().Len() != 2 {
panic(fmt.Sprintf("Signature param count mismatch: expected 2, got %d", sig.Params().Len()))
}
if sig.Results().Len() != 1 {
panic(fmt.Sprintf("Signature result count mismatch: expected 1, got %d", sig.Results().Len()))
}
param0 := sig.Params().At(0)
fmt.Printf("Param 0: Name=%s, Type=%v\n", param0.Name(), param0.Type())
if param0.Name() != "x" {
panic(fmt.Sprintf("Param 0 name mismatch: expected x, got %s", param0.Name()))
}
if param0.Type() != types.Typ[types.Int] {
panic(fmt.Sprintf("Param 0 type mismatch: expected int, got %v", param0.Type()))
}
fmt.Println("SUCCESS: Signature operations work correctly\n")
}
func testTuple() {
fmt.Println("\n=== Test Tuple ===")
tuple := types.NewTuple(
types.NewVar(token.NoPos, nil, "a", types.Typ[types.Int]),
types.NewVar(token.NoPos, nil, "b", types.Typ[types.String]),
)
fmt.Printf("Tuple length: %d\n", tuple.Len())
if tuple.Len() != 2 {
panic(fmt.Sprintf("Tuple length mismatch: expected 2, got %d", tuple.Len()))
}
var0 := tuple.At(0)
fmt.Printf("Element 0: Name=%s, Type=%v\n", var0.Name(), var0.Type())
if var0.Name() != "a" {
panic(fmt.Sprintf("Tuple element 0 name mismatch: expected a, got %s", var0.Name()))
}
if var0.Type() != types.Typ[types.Int] {
panic(fmt.Sprintf("Tuple element 0 type mismatch: expected int, got %v", var0.Type()))
}
fmt.Println("SUCCESS: Tuple operations work correctly\n")
}
func testArray() {
fmt.Println("\n=== Test Array ===")
arrayType := types.NewArray(types.Typ[types.Int], 10)
fmt.Printf("Array type: %v, Elem: %v, Len: %d\n", arrayType, arrayType.Elem(), arrayType.Len())
if arrayType.Len() != 10 {
panic(fmt.Sprintf("Array length mismatch: expected 10, got %d", arrayType.Len()))
}
if arrayType.Elem() != types.Typ[types.Int] {
panic(fmt.Sprintf("Array element type mismatch: expected int, got %v", arrayType.Elem()))
}
fmt.Println("SUCCESS: Array operations work correctly\n")
}
func testSlice() {
fmt.Println("\n=== Test Slice ===")
sliceType := types.NewSlice(types.Typ[types.String])
fmt.Printf("Slice type: %v, Elem: %v\n", sliceType, sliceType.Elem())
if sliceType.Elem() != types.Typ[types.String] {
panic(fmt.Sprintf("Slice element type mismatch: expected string, got %v", sliceType.Elem()))
}
fmt.Println("SUCCESS: Slice operations work correctly\n")
}
func testPointer() {
fmt.Println("\n=== Test Pointer ===")
ptrType := types.NewPointer(types.Typ[types.Int])
fmt.Printf("Pointer type: %v, Elem: %v\n", ptrType, ptrType.Elem())
if ptrType.Elem() != types.Typ[types.Int] {
panic(fmt.Sprintf("Pointer element type mismatch: expected int, got %v", ptrType.Elem()))
}
fmt.Println("SUCCESS: Pointer operations work correctly\n")
}
func testMap() {
fmt.Println("\n=== Test Map ===")
mapType := types.NewMap(types.Typ[types.String], types.Typ[types.Int])
fmt.Printf("Map type: %v, Key: %v, Elem: %v\n", mapType, mapType.Key(), mapType.Elem())
if mapType.Key() != types.Typ[types.String] {
panic(fmt.Sprintf("Map key type mismatch: expected string, got %v", mapType.Key()))
}
if mapType.Elem() != types.Typ[types.Int] {
panic(fmt.Sprintf("Map element type mismatch: expected int, got %v", mapType.Elem()))
}
fmt.Println("SUCCESS: Map operations work correctly\n")
}
func testChan() {
fmt.Println("\n=== Test Chan ===" )
chanType := types.NewChan(types.SendRecv, types.Typ[types.Int])
fmt.Printf("Chan type: %v, Dir: %v, Elem: %v\n", chanType, chanType.Dir(), chanType.Elem())
if chanType.Dir() != types.SendRecv {
panic(fmt.Sprintf("Chan direction mismatch: expected SendRecv, got %v", chanType.Dir()))
}
if chanType.Elem() != types.Typ[types.Int] {
panic(fmt.Sprintf("Chan element type mismatch: expected int, got %v", chanType.Elem()))
}
sendChan := types.NewChan(types.SendOnly, types.Typ[types.String])
fmt.Printf("SendOnly chan: %v, Dir: %v\n", sendChan, sendChan.Dir())
if sendChan.Dir() != types.SendOnly {
panic(fmt.Sprintf("SendOnly chan direction mismatch: expected SendOnly, got %v", sendChan.Dir()))
}
recvChan := types.NewChan(types.RecvOnly, types.Typ[types.Bool])
fmt.Printf("RecvOnly chan: %v, Dir: %v\n", recvChan, recvChan.Dir())
if recvChan.Dir() != types.RecvOnly {
panic(fmt.Sprintf("RecvOnly chan direction mismatch: expected RecvOnly, got %v", recvChan.Dir()))
}
fmt.Println("SUCCESS: Chan operations work correctly\n")
}
func testTypeComparison() {
fmt.Println("\n=== Test Type Comparison Functions ===")
t1 := types.Typ[types.Int]
t2 := types.Typ[types.Int]
t3 := types.Typ[types.String]
if !types.Identical(t1, t2) {
panic("Identical failed: int should be identical to int")
}
fmt.Printf("Identical(int, int): %v\n", types.Identical(t1, t2))
fmt.Printf("Identical(int, string): %v\n", types.Identical(t1, t3))
if !types.AssignableTo(t1, t2) {
panic("AssignableTo failed")
}
fmt.Printf("AssignableTo(int, int): %v\n", types.AssignableTo(t1, t2))
fmt.Printf("AssignableTo(int, string): %v\n", types.AssignableTo(t1, t3))
fmt.Printf("Comparable(int): %v\n", types.Comparable(t1))
fmt.Printf("Comparable(string): %v\n", types.Comparable(t3))
fmt.Printf("ConvertibleTo(int, int): %v\n", types.ConvertibleTo(t1, t2))
fmt.Println("SUCCESS: Type comparison functions work correctly\n")
}
func testTypeChecking() {
fmt.Println("\n=== Test Type Checking Functions ===")
pkg := types.NewPackage("example.com/test", "test")
m1 := types.NewFunc(token.NoPos, pkg, "Method1", types.NewSignatureType(nil, nil, nil, nil, nil, false))
m2 := types.NewFunc(token.NoPos, pkg, "Method2", types.NewSignatureType(nil, nil, nil, nil, nil, false))
iface := types.NewInterfaceType([]*types.Func{m1, m2}, nil)
iface.Complete()
fields := []*types.Var{
types.NewField(token.NoPos, nil, "x", types.Typ[types.Int], false),
}
structType := types.NewStruct(fields, nil)
fmt.Printf("Implements(struct, interface): %v\n", types.Implements(structType, iface))
fmt.Printf("Implements(int, interface): %v\n", types.Implements(types.Typ[types.Int], iface))
emptyIface := types.NewInterfaceType(nil, nil)
emptyIface.Complete()
fmt.Printf("Implements(int, empty interface): %v\n", types.Implements(types.Typ[types.Int], emptyIface))
fmt.Printf("AssertableTo(interface, int): %v\n", types.AssertableTo(iface, types.Typ[types.Int]))
fmt.Println("SUCCESS: Type checking functions work correctly\n")
}
func testStringFunctions() {
fmt.Println("\n=== Test String Functions ===")
pkg := types.NewPackage("example.com/test", "test")
varObj := types.NewVar(token.NoPos, pkg, "myVar", types.Typ[types.Int])
objStr := types.ObjectString(varObj, nil)
fmt.Printf("ObjectString: %s\n", objStr)
objStrQual := types.ObjectString(varObj, types.RelativeTo(pkg))
fmt.Printf("ObjectString (qualified): %s\n", objStrQual)
typeStr := types.TypeString(types.Typ[types.Int], nil)
fmt.Printf("TypeString(int): %s\n", typeStr)
sliceType := types.NewSlice(types.Typ[types.String])
sliceStr := types.TypeString(sliceType, nil)
fmt.Printf("TypeString([]string): %s\n", sliceStr)
fmt.Println("SUCCESS: String functions work correctly\n")
}
func testLookupFunctions() {
fmt.Println("\n=== Test Lookup Functions ===")
pkg := types.NewPackage("example.com/test", "test")
fields := []*types.Var{
types.NewField(token.NoPos, pkg, "X", types.Typ[types.Int], false),
types.NewField(token.NoPos, pkg, "Y", types.Typ[types.String], false),
}
structType := types.NewStruct(fields, nil)
obj, index, indirect := types.LookupFieldOrMethod(structType, false, pkg, "X")
if obj == nil {
panic("LookupFieldOrMethod failed to find X")
}
fmt.Printf("LookupFieldOrMethod found: %s, index: %v, indirect: %v\n", obj.Name(), index, indirect)
obj2, index2, indirect2 := types.LookupFieldOrMethod(structType, false, pkg, "NonExistent")
fmt.Printf("LookupFieldOrMethod (non-existent): found=%v, index=%v, indirect=%v\n", obj2 != nil, index2, indirect2)
mset := types.NewMethodSet(structType)
fmt.Printf("NewMethodSet: %d methods\n", mset.Len())
fmt.Println("SUCCESS: Lookup functions work correctly\n")
}
func testUtilityFunctions() {
fmt.Println("\n=== Test Utility Functions ===")
pkg := types.NewPackage("example.com/test", "test")
iface := types.NewInterfaceType(nil, nil)
iface.Complete()
fmt.Printf("IsInterface(interface): %v\n", types.IsInterface(iface))
fmt.Printf("IsInterface(int): %v\n", types.IsInterface(types.Typ[types.Int]))
typedNil := types.Typ[types.UntypedNil]
defaultType := types.Default(typedNil)
fmt.Printf("Default(UntypedNil): %v\n", defaultType)
intDefault := types.Default(types.Typ[types.Int])
fmt.Printf("Default(int): %v\n", intDefault)
idStr := types.Id(pkg, "MyType")
fmt.Printf("Id(pkg, \"MyType\"): %s\n", idStr)
fmt.Println("SUCCESS: Utility functions work correctly\n")
}

View File

@@ -0,0 +1,25 @@
package geometry1370
type Shape interface {
Area() float64
validate() bool
setID(int)
}
type Rectangle struct {
Width, Height float64
id int
}
func (r *Rectangle) Area() float64 { return r.Width * r.Height }
func (r *Rectangle) validate() bool { return r.Width > 0 && r.Height > 0 }
func (r *Rectangle) setID(id int) { r.id = id }
func (r *Rectangle) GetID() int { return r.id }
func NewRectangle(width, height float64) *Rectangle {
return &Rectangle{Width: width, Height: height}
}
func RegisterShape(s Shape, id int) {
s.setID(id)
}

View File

@@ -0,0 +1,90 @@
; ModuleID = 'github.com/goplus/llgo/cl/_testdata/geometry1370'
source_filename = "github.com/goplus/llgo/cl/_testdata/geometry1370"
%"github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle" = type { double, double, i64 }
%"github.com/goplus/llgo/runtime/internal/runtime.iface" = type { ptr, ptr }
@"github.com/goplus/llgo/cl/_testdata/geometry1370.init$guard" = global i1 false, align 1
define ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.NewRectangle"(double %0, double %1) {
_llgo_0:
%2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24)
%3 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", ptr %2, i32 0, i32 0
%4 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", ptr %2, i32 0, i32 1
store double %0, ptr %3, align 8
store double %1, ptr %4, align 8
ret ptr %2
}
define double @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).Area"(ptr %0) {
_llgo_0:
%1 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", ptr %0, i32 0, i32 0
%2 = load double, ptr %1, align 8
%3 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", ptr %0, i32 0, i32 1
%4 = load double, ptr %3, align 8
%5 = fmul double %2, %4
ret double %5
}
define i64 @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).GetID"(ptr %0) {
_llgo_0:
%1 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", ptr %0, i32 0, i32 2
%2 = load i64, ptr %1, align 4
ret i64 %2
}
define void @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).setID"(ptr %0, i64 %1) {
_llgo_0:
%2 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", ptr %0, i32 0, i32 2
store i64 %1, ptr %2, align 4
ret void
}
define i1 @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).validate"(ptr %0) {
_llgo_0:
%1 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", ptr %0, i32 0, i32 0
%2 = load double, ptr %1, align 8
%3 = fcmp ogt double %2, 0.000000e+00
br i1 %3, label %_llgo_1, label %_llgo_2
_llgo_1: ; preds = %_llgo_0
%4 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", ptr %0, i32 0, i32 1
%5 = load double, ptr %4, align 8
%6 = fcmp ogt double %5, 0.000000e+00
br label %_llgo_2
_llgo_2: ; preds = %_llgo_1, %_llgo_0
%7 = phi i1 [ false, %_llgo_0 ], [ %6, %_llgo_1 ]
ret i1 %7
}
define void @"github.com/goplus/llgo/cl/_testdata/geometry1370.RegisterShape"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, i64 %1) {
_llgo_0:
%2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0)
%3 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0
%4 = getelementptr ptr, ptr %3, i64 4
%5 = load ptr, ptr %4, align 8
%6 = insertvalue { ptr, ptr } undef, ptr %5, 0
%7 = insertvalue { ptr, ptr } %6, ptr %2, 1
%8 = extractvalue { ptr, ptr } %7, 1
%9 = extractvalue { ptr, ptr } %7, 0
call void %9(ptr %8, i64 %1)
ret void
}
define void @"github.com/goplus/llgo/cl/_testdata/geometry1370.init"() {
_llgo_0:
%0 = load i1, ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.init$guard", align 1
br i1 %0, label %_llgo_2, label %_llgo_1
_llgo_1: ; preds = %_llgo_0
store i1 true, ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.init$guard", align 1
br label %_llgo_2
_llgo_2: ; preds = %_llgo_1, %_llgo_0
ret void
}
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface")

View File

@@ -19,8 +19,9 @@ source_filename = "github.com/goplus/llgo/cl/_testgo/errors"
@3 = private unnamed_addr constant [5 x i8] c"Error", align 1 @3 = private unnamed_addr constant [5 x i8] c"Error", align 1
@"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to" = linkonce global ptr null, align 8 @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to" = linkonce global ptr null, align 8
@"*_llgo_github.com/goplus/llgo/cl/_testgo/errors.errorString" = linkonce global ptr null, align 8 @"*_llgo_github.com/goplus/llgo/cl/_testgo/errors.errorString" = linkonce global ptr null, align 8
@"_llgo_iface$Fh8eUJ-Gw4e6TYuajcFIOSCuqSPKAt5nS4ow7xeGXEU" = linkonce global ptr null, align 8 @_llgo_error = linkonce global ptr null, align 8
@4 = private unnamed_addr constant [8 x i8] c"an error", align 1 @4 = private unnamed_addr constant [5 x i8] c"error", align 1
@5 = private unnamed_addr constant [8 x i8] c"an error", align 1
define %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"github.com/goplus/llgo/cl/_testgo/errors.New"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %0) { define %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"github.com/goplus/llgo/cl/_testgo/errors.New"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %0) {
_llgo_0: _llgo_0:
@@ -29,12 +30,11 @@ _llgo_0:
store %"github.com/goplus/llgo/runtime/internal/runtime.String" %0, ptr %2, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" %0, ptr %2, align 8
%3 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/errors.errorString", align 8 %3 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/errors.errorString", align 8
%4 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/errors.errorString", align 8 %4 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/errors.errorString", align 8
%5 = load ptr, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8 %5 = load ptr, ptr @_llgo_error, align 8
%6 = load ptr, ptr @"_llgo_iface$Fh8eUJ-Gw4e6TYuajcFIOSCuqSPKAt5nS4ow7xeGXEU", align 8 %6 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %5, ptr %4)
%7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %6, ptr %4) %7 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %6, 0
%8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %7, 0 %8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, ptr %1, 1
%9 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8, ptr %1, 1 ret %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8
ret %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9
} }
define %"github.com/goplus/llgo/runtime/internal/runtime.String" @"github.com/goplus/llgo/cl/_testgo/errors.(*errorString).Error"(ptr %0) { define %"github.com/goplus/llgo/runtime/internal/runtime.String" @"github.com/goplus/llgo/cl/_testgo/errors.(*errorString).Error"(ptr %0) {
@@ -60,7 +60,7 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0
define void @"github.com/goplus/llgo/cl/_testgo/errors.main"() { define void @"github.com/goplus/llgo/cl/_testgo/errors.main"() {
_llgo_0: _llgo_0:
%0 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"github.com/goplus/llgo/cl/_testgo/errors.New"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 8 }) %0 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"github.com/goplus/llgo/cl/_testgo/errors.New"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @5, i64 8 })
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintIface"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintIface"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10)
%1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0)
@@ -142,24 +142,31 @@ _llgo_4: ; preds = %_llgo_3, %_llgo_2
%37 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr %36) %37 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr %36)
call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %37) call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %37)
store ptr %37, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/errors.errorString", align 8 store ptr %37, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/errors.errorString", align 8
%38 = load ptr, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8 %38 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 5 })
%39 = load ptr, ptr @"_llgo_iface$Fh8eUJ-Gw4e6TYuajcFIOSCuqSPKAt5nS4ow7xeGXEU", align 8 %39 = load ptr, ptr @_llgo_error, align 8
%40 = icmp eq ptr %39, null %40 = icmp eq ptr %39, null
br i1 %40, label %_llgo_5, label %_llgo_6 br i1 %40, label %_llgo_5, label %_llgo_6
_llgo_5: ; preds = %_llgo_4 _llgo_5: ; preds = %_llgo_4
%41 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 5 }, ptr undef }, ptr %38, 1 store ptr %38, ptr @_llgo_error, align 8
%42 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
%43 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %42, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %41, ptr %43, align 8
%44 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %42, 0
%45 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %44, i64 1, 1
%46 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %45, i64 1, 2
%47 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 40 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %46)
store ptr %47, ptr @"_llgo_iface$Fh8eUJ-Gw4e6TYuajcFIOSCuqSPKAt5nS4ow7xeGXEU", align 8
br label %_llgo_6 br label %_llgo_6
_llgo_6: ; preds = %_llgo_5, %_llgo_4 _llgo_6: ; preds = %_llgo_5, %_llgo_4
%41 = load ptr, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8
br i1 %40, label %_llgo_7, label %_llgo_8
_llgo_7: ; preds = %_llgo_6
%42 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 5 }, ptr undef }, ptr %41, 1
%43 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
%44 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %43, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %42, ptr %44, align 8
%45 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %43, 0
%46 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %45, i64 1, 1
%47 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %46, i64 1, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr %38, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %47)
br label %_llgo_8
_llgo_8: ; preds = %_llgo_7, %_llgo_6
ret void ret void
} }
@@ -181,7 +188,9 @@ declare void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(p
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.Slice") declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.String")
declare void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr, %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr)

View File

@@ -26,13 +26,11 @@ source_filename = "github.com/goplus/llgo/cl/_testgo/ifaceconv"
@6 = private unnamed_addr constant [2 x i8] c"I2", align 1 @6 = private unnamed_addr constant [2 x i8] c"I2", align 1
@7 = private unnamed_addr constant [45 x i8] c"github.com/goplus/llgo/cl/_testgo/ifaceconv.g", align 1 @7 = private unnamed_addr constant [45 x i8] c"github.com/goplus/llgo/cl/_testgo/ifaceconv.g", align 1
@8 = private unnamed_addr constant [21 x i8] c"nil i2.(I2) succeeded", align 1 @8 = private unnamed_addr constant [21 x i8] c"nil i2.(I2) succeeded", align 1
@"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$brpgdLtIeRlPi8QUoTgPCXzlehUkncg7v9aITo-GsF4" = linkonce global ptr null, align 8
@"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C1" = linkonce global ptr null, align 8 @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C1" = linkonce global ptr null, align 8
@9 = private unnamed_addr constant [2 x i8] c"C1", align 1 @9 = private unnamed_addr constant [2 x i8] c"C1", align 1
@"_llgo_struct$n1H8J_3prDN3firMwPxBLVTkE5hJ9Di-AqNvaC9jczw" = linkonce global ptr null, align 8 @"_llgo_struct$n1H8J_3prDN3firMwPxBLVTkE5hJ9Di-AqNvaC9jczw" = linkonce global ptr null, align 8
@10 = private unnamed_addr constant [1 x i8] c"f", align 1 @10 = private unnamed_addr constant [1 x i8] c"f", align 1
@11 = private unnamed_addr constant [17 x i8] c"C1 i1.(I0) failed", align 1 @11 = private unnamed_addr constant [17 x i8] c"C1 i1.(I0) failed", align 1
@"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$gZBF8fFlqIMZ9M6lT2VWPyc3eu5Co6j0WoKGIEgDPAw" = linkonce global ptr null, align 8
@12 = private unnamed_addr constant [17 x i8] c"C1 i1.(I1) failed", align 1 @12 = private unnamed_addr constant [17 x i8] c"C1 i1.(I1) failed", align 1
@13 = private unnamed_addr constant [20 x i8] c"C1 i1.(I2) succeeded", align 1 @13 = private unnamed_addr constant [20 x i8] c"C1 i1.(I2) succeeded", align 1
@"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C2" = linkonce global ptr null, align 8 @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C2" = linkonce global ptr null, align 8
@@ -145,14 +143,14 @@ _llgo_6: ; preds = %_llgo_31
%21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %20, 0 %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %20, 0
%22 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %21, ptr null, 1 %22 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %21, ptr null, 1
%23 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer) %23 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer)
%24 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$brpgdLtIeRlPi8QUoTgPCXzlehUkncg7v9aITo-GsF4", align 8 %24 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I1", align 8
%25 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %24, ptr %23) %25 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %24, ptr %23)
%26 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %25, 0 %26 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %25, 0
%27 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %26, ptr null, 1 %27 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %26, ptr null, 1
%28 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C1", align 8 %28 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C1", align 8
%29 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0) %29 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
store %"github.com/goplus/llgo/cl/_testgo/ifaceconv.C1" zeroinitializer, ptr %29, align 1 store %"github.com/goplus/llgo/cl/_testgo/ifaceconv.C1" zeroinitializer, ptr %29, align 1
%30 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$brpgdLtIeRlPi8QUoTgPCXzlehUkncg7v9aITo-GsF4", align 8 %30 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I1", align 8
%31 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %30, ptr %28) %31 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %30, ptr %28)
%32 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %31, 0 %32 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %31, 0
%33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %32, ptr %29, 1 %33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %32, ptr %29, 1
@@ -204,7 +202,7 @@ _llgo_12: ; preds = %_llgo_40
%55 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C2", align 8 %55 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C2", align 8
%56 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0) %56 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
store %"github.com/goplus/llgo/cl/_testgo/ifaceconv.C2" zeroinitializer, ptr %56, align 1 store %"github.com/goplus/llgo/cl/_testgo/ifaceconv.C2" zeroinitializer, ptr %56, align 1
%57 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$brpgdLtIeRlPi8QUoTgPCXzlehUkncg7v9aITo-GsF4", align 8 %57 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I1", align 8
%58 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %57, ptr %55) %58 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %57, ptr %55)
%59 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %58, 0 %59 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %58, 0
%60 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %59, ptr %56, 1 %60 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %59, ptr %56, 1
@@ -256,7 +254,7 @@ _llgo_18: ; preds = %_llgo_49
%82 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C1", align 8 %82 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C1", align 8
%83 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0) %83 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
store %"github.com/goplus/llgo/cl/_testgo/ifaceconv.C1" zeroinitializer, ptr %83, align 1 store %"github.com/goplus/llgo/cl/_testgo/ifaceconv.C1" zeroinitializer, ptr %83, align 1
%84 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$brpgdLtIeRlPi8QUoTgPCXzlehUkncg7v9aITo-GsF4", align 8 %84 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I1", align 8
%85 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %84, ptr %82) %85 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %84, ptr %82)
%86 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %85, 0 %86 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %85, 0
%87 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %86, ptr %83, 1 %87 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %86, ptr %83, 1
@@ -370,7 +368,7 @@ _llgo_37: ; preds = %_llgo_36, %_llgo_35
_llgo_38: ; preds = %_llgo_10 _llgo_38: ; preds = %_llgo_10
%131 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %33, 1 %131 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %33, 1
%132 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$gZBF8fFlqIMZ9M6lT2VWPyc3eu5Co6j0WoKGIEgDPAw", align 8 %132 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I2", align 8
%133 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %132, ptr %48) %133 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %132, ptr %48)
%134 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %133, 0 %134 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %133, 0
%135 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %134, ptr %131, 1 %135 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %134, ptr %131, 1
@@ -420,7 +418,7 @@ _llgo_46: ; preds = %_llgo_45, %_llgo_44
_llgo_47: ; preds = %_llgo_16 _llgo_47: ; preds = %_llgo_16
%154 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %60, 1 %154 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %60, 1
%155 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$gZBF8fFlqIMZ9M6lT2VWPyc3eu5Co6j0WoKGIEgDPAw", align 8 %155 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.I2", align 8
%156 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %155, ptr %75) %156 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %155, ptr %75)
%157 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %156, 0 %157 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %156, 0
%158 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %157, ptr %154, 1 %158 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %157, ptr %154, 1
@@ -544,118 +542,94 @@ _llgo_15: ; preds = %_llgo_14
br label %_llgo_16 br label %_llgo_16
_llgo_16: ; preds = %_llgo_15, %_llgo_14 _llgo_16: ; preds = %_llgo_15, %_llgo_14
%44 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 %44 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 43 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @9, i64 2 }, i64 25, i64 0, i64 1, i64 1)
%45 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 45 }, ptr undef }, ptr %44, 1 %45 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C1", align 8
%46 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24) %46 = icmp eq ptr %45, null
%47 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %46, i64 0 br i1 %46, label %_llgo_17, label %_llgo_18
store %"github.com/goplus/llgo/runtime/abi.Imethod" %45, ptr %47, align 8
%48 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %46, 0
%49 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %48, i64 1, 1
%50 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %49, i64 1, 2
%51 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 43 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %50)
store ptr %51, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$brpgdLtIeRlPi8QUoTgPCXzlehUkncg7v9aITo-GsF4", align 8
%52 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 43 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @9, i64 2 }, i64 25, i64 0, i64 1, i64 1)
%53 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C1", align 8
%54 = icmp eq ptr %53, null
br i1 %54, label %_llgo_17, label %_llgo_18
_llgo_17: ; preds = %_llgo_16 _llgo_17: ; preds = %_llgo_16
store ptr %52, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C1", align 8 store ptr %44, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C1", align 8
br label %_llgo_18 br label %_llgo_18
_llgo_18: ; preds = %_llgo_17, %_llgo_16 _llgo_18: ; preds = %_llgo_17, %_llgo_16
%55 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0) %47 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
%56 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %55, 0 %48 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %47, 0
%57 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %56, i64 0, 1 %49 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %48, i64 0, 1
%58 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %57, i64 0, 2 %50 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %49, i64 0, 2
%59 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Struct"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 43 }, i64 0, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %58) %51 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Struct"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 43 }, i64 0, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %50)
store ptr %59, ptr @"_llgo_struct$n1H8J_3prDN3firMwPxBLVTkE5hJ9Di-AqNvaC9jczw", align 8 store ptr %51, ptr @"_llgo_struct$n1H8J_3prDN3firMwPxBLVTkE5hJ9Di-AqNvaC9jczw", align 8
%60 = load ptr, ptr @"_llgo_struct$n1H8J_3prDN3firMwPxBLVTkE5hJ9Di-AqNvaC9jczw", align 8 %52 = load ptr, ptr @"_llgo_struct$n1H8J_3prDN3firMwPxBLVTkE5hJ9Di-AqNvaC9jczw", align 8
br i1 %54, label %_llgo_19, label %_llgo_20 br i1 %46, label %_llgo_19, label %_llgo_20
_llgo_19: ; preds = %_llgo_18 _llgo_19: ; preds = %_llgo_18
%61 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 %53 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8
%62 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 45 }, ptr undef, ptr undef, ptr undef }, ptr %61, 1 %54 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 45 }, ptr undef, ptr undef, ptr undef }, ptr %53, 1
%63 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %62, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C1).f", 2 %55 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %54, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C1).f", 2
%64 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %63, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C1).f", 3 %56 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %55, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C1).f", 3
%65 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 45 }, ptr undef, ptr undef, ptr undef }, ptr %61, 1 %57 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 45 }, ptr undef, ptr undef, ptr undef }, ptr %53, 1
%66 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %65, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C1).f", 2 %58 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %57, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C1).f", 2
%67 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %66, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.C1.f", 3 %59 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %58, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.C1.f", 3
%68 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 40) %60 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 40)
%69 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %68, i64 0 %61 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %60, i64 0
store %"github.com/goplus/llgo/runtime/abi.Method" %67, ptr %69, align 8 store %"github.com/goplus/llgo/runtime/abi.Method" %59, ptr %61, align 8
%70 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %68, 0 %62 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %60, 0
%71 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %70, i64 1, 1 %63 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %62, i64 1, 1
%72 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %71, i64 1, 2 %64 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %63, i64 1, 2
%73 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 40) %65 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 40)
%74 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %73, i64 0 %66 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %65, i64 0
store %"github.com/goplus/llgo/runtime/abi.Method" %64, ptr %74, align 8 store %"github.com/goplus/llgo/runtime/abi.Method" %56, ptr %66, align 8
%75 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %73, 0 %67 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %65, 0
%76 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %75, i64 1, 1 %68 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %67, i64 1, 1
%77 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %76, i64 1, 2 %69 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %68, i64 1, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamed"(ptr %52, ptr %60, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %72, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %77) call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamed"(ptr %44, ptr %52, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %64, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %69)
br label %_llgo_20 br label %_llgo_20
_llgo_20: ; preds = %_llgo_19, %_llgo_18 _llgo_20: ; preds = %_llgo_19, %_llgo_18
%78 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 %70 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 43 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @14, i64 2 }, i64 25, i64 0, i64 2, i64 2)
%79 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 %71 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C2", align 8
%80 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 45 }, ptr undef }, ptr %78, 1 %72 = icmp eq ptr %71, null
%81 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 45 }, ptr undef }, ptr %79, 1 br i1 %72, label %_llgo_21, label %_llgo_22
%82 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 48)
%83 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %82, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %80, ptr %83, align 8
%84 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %82, i64 1
store %"github.com/goplus/llgo/runtime/abi.Imethod" %81, ptr %84, align 8
%85 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %82, 0
%86 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %85, i64 2, 1
%87 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %86, i64 2, 2
%88 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 43 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %87)
store ptr %88, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.iface$gZBF8fFlqIMZ9M6lT2VWPyc3eu5Co6j0WoKGIEgDPAw", align 8
%89 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 43 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @14, i64 2 }, i64 25, i64 0, i64 2, i64 2)
%90 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C2", align 8
%91 = icmp eq ptr %90, null
br i1 %91, label %_llgo_21, label %_llgo_22
_llgo_21: ; preds = %_llgo_20 _llgo_21: ; preds = %_llgo_20
store ptr %89, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C2", align 8 store ptr %70, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceconv.C2", align 8
br label %_llgo_22 br label %_llgo_22
_llgo_22: ; preds = %_llgo_21, %_llgo_20 _llgo_22: ; preds = %_llgo_21, %_llgo_20
%92 = load ptr, ptr @"_llgo_struct$n1H8J_3prDN3firMwPxBLVTkE5hJ9Di-AqNvaC9jczw", align 8 %73 = load ptr, ptr @"_llgo_struct$n1H8J_3prDN3firMwPxBLVTkE5hJ9Di-AqNvaC9jczw", align 8
br i1 %91, label %_llgo_23, label %_llgo_24 br i1 %72, label %_llgo_23, label %_llgo_24
_llgo_23: ; preds = %_llgo_22 _llgo_23: ; preds = %_llgo_22
%93 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 %74 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8
%94 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 45 }, ptr undef, ptr undef, ptr undef }, ptr %93, 1 %75 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 45 }, ptr undef, ptr undef, ptr undef }, ptr %74, 1
%95 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %94, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C2).f", 2 %76 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %75, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C2).f", 2
%96 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %95, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C2).f", 3 %77 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %76, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C2).f", 3
%97 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 45 }, ptr undef, ptr undef, ptr undef }, ptr %93, 1 %78 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 45 }, ptr undef, ptr undef, ptr undef }, ptr %74, 1
%98 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %97, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C2).f", 2 %79 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %78, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C2).f", 2
%99 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %98, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.C2.f", 3 %80 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %79, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.C2.f", 3
%100 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 %81 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8
%101 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 45 }, ptr undef, ptr undef, ptr undef }, ptr %100, 1 %82 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 45 }, ptr undef, ptr undef, ptr undef }, ptr %81, 1
%102 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %101, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C2).g", 2 %83 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %82, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C2).g", 2
%103 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %102, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C2).g", 3 %84 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %83, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C2).g", 3
%104 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 45 }, ptr undef, ptr undef, ptr undef }, ptr %100, 1 %85 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 45 }, ptr undef, ptr undef, ptr undef }, ptr %81, 1
%105 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %104, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C2).g", 2 %86 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %85, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.(*C2).g", 2
%106 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %105, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.C2.g", 3 %87 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %86, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceconv.C2.g", 3
%107 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 80) %88 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 80)
%108 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %107, i64 0 %89 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %88, i64 0
store %"github.com/goplus/llgo/runtime/abi.Method" %99, ptr %108, align 8 store %"github.com/goplus/llgo/runtime/abi.Method" %80, ptr %89, align 8
%109 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %107, i64 1 %90 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %88, i64 1
store %"github.com/goplus/llgo/runtime/abi.Method" %106, ptr %109, align 8 store %"github.com/goplus/llgo/runtime/abi.Method" %87, ptr %90, align 8
%110 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %107, 0 %91 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %88, 0
%111 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %110, i64 2, 1 %92 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %91, i64 2, 1
%112 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %111, i64 2, 2 %93 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %92, i64 2, 2
%113 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 80) %94 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 80)
%114 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %113, i64 0 %95 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %94, i64 0
store %"github.com/goplus/llgo/runtime/abi.Method" %96, ptr %114, align 8 store %"github.com/goplus/llgo/runtime/abi.Method" %77, ptr %95, align 8
%115 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %113, i64 1 %96 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %94, i64 1
store %"github.com/goplus/llgo/runtime/abi.Method" %103, ptr %115, align 8 store %"github.com/goplus/llgo/runtime/abi.Method" %84, ptr %96, align 8
%116 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %113, 0 %97 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %94, 0
%117 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %116, i64 2, 1 %98 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %97, i64 2, 1
%118 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %117, i64 2, 2 %99 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %98, i64 2, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamed"(ptr %89, ptr %92, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %112, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %118) call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamed"(ptr %70, ptr %73, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %93, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %99)
br label %_llgo_24 br label %_llgo_24
_llgo_24: ; preds = %_llgo_23, %_llgo_22 _llgo_24: ; preds = %_llgo_23, %_llgo_22
@@ -678,8 +652,6 @@ declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Func"(%"github.com
declare void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr) declare void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.String", i64, i64, i64, i64) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.String", i64, i64, i64, i64)

View File

@@ -24,7 +24,6 @@ source_filename = "github.com/goplus/llgo/cl/_testgo/ifaceprom"
@5 = private unnamed_addr constant [47 x i8] c"github.com/goplus/llgo/cl/_testgo/ifaceprom.two", align 1 @5 = private unnamed_addr constant [47 x i8] c"github.com/goplus/llgo/cl/_testgo/ifaceprom.two", align 1
@_llgo_string = linkonce global ptr null, align 8 @_llgo_string = linkonce global ptr null, align 8
@"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to" = linkonce global ptr null, align 8 @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to" = linkonce global ptr null, align 8
@"github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA" = linkonce global ptr null, align 8
@"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I" = linkonce global ptr null, align 8 @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I" = linkonce global ptr null, align 8
@6 = private unnamed_addr constant [1 x i8] c"I", align 1 @6 = private unnamed_addr constant [1 x i8] c"I", align 1
@7 = private unnamed_addr constant [116 x i8] c"type assertion github.com/goplus/llgo/cl/_testgo/ifaceprom.I -> github.com/goplus/llgo/cl/_testgo/ifaceprom.I failed", align 1 @7 = private unnamed_addr constant [116 x i8] c"type assertion github.com/goplus/llgo/cl/_testgo/ifaceprom.I -> github.com/goplus/llgo/cl/_testgo/ifaceprom.I failed", align 1
@@ -146,172 +145,170 @@ _llgo_0:
%2 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.impl", align 8 %2 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.impl", align 8
%3 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0) %3 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
store %"github.com/goplus/llgo/cl/_testgo/ifaceprom.impl" zeroinitializer, ptr %3, align 1 store %"github.com/goplus/llgo/cl/_testgo/ifaceprom.impl" zeroinitializer, ptr %3, align 1
%4 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 %4 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8
%5 = load ptr, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8 %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %4, ptr %2)
%6 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA", align 8 %6 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %5, 0
%7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %6, ptr %2) %7 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, ptr %3, 1
%8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %7, 0 store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, ptr %1, align 8
%9 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8, ptr %3, 1 %8 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0
store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9, ptr %1, align 8 %9 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %8, align 8
%10 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 %10 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9)
%11 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %10, align 8 %11 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9, 0
%12 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %11) %12 = getelementptr ptr, ptr %11, i64 3
%13 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %11, 0 %13 = load ptr, ptr %12, align 8
%14 = getelementptr ptr, ptr %13, i64 3 %14 = insertvalue { ptr, ptr } undef, ptr %13, 0
%15 = load ptr, ptr %14, align 8 %15 = insertvalue { ptr, ptr } %14, ptr %10, 1
%16 = insertvalue { ptr, ptr } undef, ptr %15, 0 %16 = extractvalue { ptr, ptr } %15, 1
%17 = insertvalue { ptr, ptr } %16, ptr %12, 1 %17 = extractvalue { ptr, ptr } %15, 0
%18 = extractvalue { ptr, ptr } %17, 1 %18 = call i64 %17(ptr %16)
%19 = extractvalue { ptr, ptr } %17, 0 %19 = icmp ne i64 %18, 1
%20 = call i64 %19(ptr %18) br i1 %19, label %_llgo_1, label %_llgo_2
%21 = icmp ne i64 %20, 1
br i1 %21, label %_llgo_1, label %_llgo_2
_llgo_1: ; preds = %_llgo_0 _llgo_1: ; preds = %_llgo_0
%22 = load ptr, ptr @_llgo_int, align 8 %20 = load ptr, ptr @_llgo_int, align 8
%23 = inttoptr i64 %20 to ptr %21 = inttoptr i64 %18 to ptr
%24 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %22, 0 %22 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %20, 0
%25 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %24, ptr %23, 1 %23 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %22, ptr %21, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %25) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %23)
unreachable unreachable
_llgo_2: ; preds = %_llgo_0 _llgo_2: ; preds = %_llgo_0
%26 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 %24 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8
%27 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %26, 0 %25 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %24, 0
%28 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %27) %26 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %25)
%29 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %27, 0 %27 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %25, 0
%30 = getelementptr ptr, ptr %29, i64 3 %28 = getelementptr ptr, ptr %27, i64 3
%31 = load ptr, ptr %30, align 8 %29 = load ptr, ptr %28, align 8
%32 = insertvalue { ptr, ptr } undef, ptr %31, 0 %30 = insertvalue { ptr, ptr } undef, ptr %29, 0
%33 = insertvalue { ptr, ptr } %32, ptr %28, 1 %31 = insertvalue { ptr, ptr } %30, ptr %26, 1
%34 = extractvalue { ptr, ptr } %33, 1 %32 = extractvalue { ptr, ptr } %31, 1
%35 = extractvalue { ptr, ptr } %33, 0 %33 = extractvalue { ptr, ptr } %31, 0
%36 = call i64 %35(ptr %34) %34 = call i64 %33(ptr %32)
%37 = icmp ne i64 %36, 1 %35 = icmp ne i64 %34, 1
br i1 %37, label %_llgo_3, label %_llgo_4 br i1 %35, label %_llgo_3, label %_llgo_4
_llgo_3: ; preds = %_llgo_2 _llgo_3: ; preds = %_llgo_2
%38 = load ptr, ptr @_llgo_int, align 8 %36 = load ptr, ptr @_llgo_int, align 8
%39 = inttoptr i64 %36 to ptr %37 = inttoptr i64 %34 to ptr
%40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %38, 0 %38 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %36, 0
%41 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %40, ptr %39, 1 %39 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %38, ptr %37, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %41) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %39)
unreachable unreachable
_llgo_4: ; preds = %_llgo_2 _llgo_4: ; preds = %_llgo_2
%42 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 %40 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0
%43 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %42, align 8 %41 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %40, align 8
%44 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %43) %42 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %41)
%45 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8 %43 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8
%46 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %43, 1 %44 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %41, 1
br i1 true, label %_llgo_17, label %_llgo_18 br i1 true, label %_llgo_17, label %_llgo_18
_llgo_5: ; preds = %_llgo_17 _llgo_5: ; preds = %_llgo_17
%47 = load ptr, ptr @_llgo_int, align 8 %45 = load ptr, ptr @_llgo_int, align 8
%48 = inttoptr i64 %117 to ptr %46 = inttoptr i64 %115 to ptr
%49 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %47, 0 %47 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %45, 0
%50 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %49, ptr %48, 1 %48 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %47, ptr %46, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %50) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %48)
unreachable unreachable
_llgo_6: ; preds = %_llgo_17 _llgo_6: ; preds = %_llgo_17
%51 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 %49 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8
%52 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %51, 0 %50 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %49, 0
%53 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %52) %51 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %50)
%54 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8 %52 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8
%55 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %52, 1 %53 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %50, 1
br i1 true, label %_llgo_19, label %_llgo_20 br i1 true, label %_llgo_19, label %_llgo_20
_llgo_7: ; preds = %_llgo_19 _llgo_7: ; preds = %_llgo_19
%56 = load ptr, ptr @_llgo_int, align 8 %54 = load ptr, ptr @_llgo_int, align 8
%57 = inttoptr i64 %128 to ptr %55 = inttoptr i64 %126 to ptr
%58 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %56, 0 %56 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %54, 0
%59 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %58, ptr %57, 1 %57 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %56, ptr %55, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %59) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %57)
unreachable unreachable
_llgo_8: ; preds = %_llgo_19 _llgo_8: ; preds = %_llgo_19
%60 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 %58 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0
%61 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %60, align 8 %59 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %58, align 8
%62 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %61) %60 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %59)
%63 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %61, 0 %61 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %59, 0
%64 = getelementptr ptr, ptr %63, i64 4 %62 = getelementptr ptr, ptr %61, i64 4
%65 = load ptr, ptr %64, align 8 %63 = load ptr, ptr %62, align 8
%66 = insertvalue { ptr, ptr } undef, ptr %65, 0 %64 = insertvalue { ptr, ptr } undef, ptr %63, 0
%67 = insertvalue { ptr, ptr } %66, ptr %62, 1 %65 = insertvalue { ptr, ptr } %64, ptr %60, 1
%68 = extractvalue { ptr, ptr } %67, 1 %66 = extractvalue { ptr, ptr } %65, 1
%69 = extractvalue { ptr, ptr } %67, 0 %67 = extractvalue { ptr, ptr } %65, 0
%70 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %69(ptr %68) %68 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %67(ptr %66)
%71 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %70, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) %69 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %68, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 })
%72 = xor i1 %71, true %70 = xor i1 %69, true
br i1 %72, label %_llgo_9, label %_llgo_10 br i1 %70, label %_llgo_9, label %_llgo_10
_llgo_9: ; preds = %_llgo_8 _llgo_9: ; preds = %_llgo_8
%73 = load ptr, ptr @_llgo_string, align 8 %71 = load ptr, ptr @_llgo_string, align 8
%74 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %72 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" %70, ptr %74, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" %68, ptr %72, align 8
%75 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %73, 0 %73 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %71, 0
%76 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %75, ptr %74, 1 %74 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %73, ptr %72, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %76) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %74)
unreachable unreachable
_llgo_10: ; preds = %_llgo_8 _llgo_10: ; preds = %_llgo_8
%77 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 %75 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8
%78 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %77, 0 %76 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %75, 0
%79 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %78) %77 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %76)
%80 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %78, 0 %78 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %76, 0
%81 = getelementptr ptr, ptr %80, i64 4 %79 = getelementptr ptr, ptr %78, i64 4
%82 = load ptr, ptr %81, align 8 %80 = load ptr, ptr %79, align 8
%83 = insertvalue { ptr, ptr } undef, ptr %82, 0 %81 = insertvalue { ptr, ptr } undef, ptr %80, 0
%84 = insertvalue { ptr, ptr } %83, ptr %79, 1 %82 = insertvalue { ptr, ptr } %81, ptr %77, 1
%85 = extractvalue { ptr, ptr } %84, 1 %83 = extractvalue { ptr, ptr } %82, 1
%86 = extractvalue { ptr, ptr } %84, 0 %84 = extractvalue { ptr, ptr } %82, 0
%87 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %86(ptr %85) %85 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %84(ptr %83)
%88 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %87, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) %86 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %85, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 })
%89 = xor i1 %88, true %87 = xor i1 %86, true
br i1 %89, label %_llgo_11, label %_llgo_12 br i1 %87, label %_llgo_11, label %_llgo_12
_llgo_11: ; preds = %_llgo_10 _llgo_11: ; preds = %_llgo_10
%90 = load ptr, ptr @_llgo_string, align 8 %88 = load ptr, ptr @_llgo_string, align 8
%91 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %89 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" %87, ptr %91, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" %85, ptr %89, align 8
%92 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %90, 0 %90 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %88, 0
%93 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %92, ptr %91, 1 %91 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %90, ptr %89, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %93) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %91)
unreachable unreachable
_llgo_12: ; preds = %_llgo_10 _llgo_12: ; preds = %_llgo_10
%94 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 %92 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0
%95 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %94, align 8 %93 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %92, align 8
%96 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %95) %94 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %93)
%97 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8 %95 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8
%98 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %95, 1 %96 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %93, 1
br i1 true, label %_llgo_21, label %_llgo_22 br i1 true, label %_llgo_21, label %_llgo_22
_llgo_13: ; preds = %_llgo_21 _llgo_13: ; preds = %_llgo_21
%99 = load ptr, ptr @_llgo_string, align 8 %97 = load ptr, ptr @_llgo_string, align 8
%100 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %98 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" %139, ptr %100, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" %137, ptr %98, align 8
%101 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %99, 0 %99 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %97, 0
%102 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %101, ptr %100, 1 %100 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %99, ptr %98, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %102) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %100)
unreachable unreachable
_llgo_14: ; preds = %_llgo_21 _llgo_14: ; preds = %_llgo_21
%103 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 %101 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8
%104 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %103, 0 %102 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %101, 0
%105 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %104) %103 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %102)
%106 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8 %104 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8
%107 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %104, 1 %105 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %102, 1
br i1 true, label %_llgo_23, label %_llgo_24 br i1 true, label %_llgo_23, label %_llgo_24
_llgo_15: ; preds = %_llgo_23 _llgo_15: ; preds = %_llgo_23
%108 = load ptr, ptr @_llgo_string, align 8 %106 = load ptr, ptr @_llgo_string, align 8
%109 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %107 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" %151, ptr %109, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" %149, ptr %107, align 8
%110 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %108, 0 %108 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %106, 0
%111 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %110, ptr %109, 1 %109 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %108, ptr %107, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %111) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %109)
unreachable unreachable
_llgo_16: ; preds = %_llgo_23 _llgo_16: ; preds = %_llgo_23
@@ -320,85 +317,85 @@ _llgo_16: ; preds = %_llgo_23
ret void ret void
_llgo_17: ; preds = %_llgo_4 _llgo_17: ; preds = %_llgo_4
%112 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %110 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
%113 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %112, i32 0, i32 0 %111 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %110, i32 0, i32 0
store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %43, ptr %113, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %41, ptr %111, align 8
%114 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound", ptr undef }, ptr %112, 1 %112 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound", ptr undef }, ptr %110, 1
%115 = extractvalue { ptr, ptr } %114, 1 %113 = extractvalue { ptr, ptr } %112, 1
%116 = extractvalue { ptr, ptr } %114, 0 %114 = extractvalue { ptr, ptr } %112, 0
%117 = call i64 %116(ptr %115) %115 = call i64 %114(ptr %113)
%118 = icmp ne i64 %117, 1 %116 = icmp ne i64 %115, 1
br i1 %118, label %_llgo_5, label %_llgo_6 br i1 %116, label %_llgo_5, label %_llgo_6
_llgo_18: ; preds = %_llgo_4 _llgo_18: ; preds = %_llgo_4
%119 = load ptr, ptr @_llgo_string, align 8 %117 = load ptr, ptr @_llgo_string, align 8
%120 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %118 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %120, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %118, align 8
%121 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %119, 0 %119 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %117, 0
%122 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %121, ptr %120, 1 %120 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %119, ptr %118, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %122) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %120)
unreachable unreachable
_llgo_19: ; preds = %_llgo_6 _llgo_19: ; preds = %_llgo_6
%123 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %121 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
%124 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %123, i32 0, i32 0 %122 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %121, i32 0, i32 0
store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %52, ptr %124, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %50, ptr %122, align 8
%125 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound", ptr undef }, ptr %123, 1 %123 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound", ptr undef }, ptr %121, 1
%126 = extractvalue { ptr, ptr } %125, 1 %124 = extractvalue { ptr, ptr } %123, 1
%127 = extractvalue { ptr, ptr } %125, 0 %125 = extractvalue { ptr, ptr } %123, 0
%128 = call i64 %127(ptr %126) %126 = call i64 %125(ptr %124)
%129 = icmp ne i64 %128, 1 %127 = icmp ne i64 %126, 1
br i1 %129, label %_llgo_7, label %_llgo_8 br i1 %127, label %_llgo_7, label %_llgo_8
_llgo_20: ; preds = %_llgo_6 _llgo_20: ; preds = %_llgo_6
%130 = load ptr, ptr @_llgo_string, align 8 %128 = load ptr, ptr @_llgo_string, align 8
%131 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %129 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %131, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %129, align 8
%132 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %130, 0 %130 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %128, 0
%133 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %132, ptr %131, 1 %131 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %130, ptr %129, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %133) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %131)
unreachable unreachable
_llgo_21: ; preds = %_llgo_12 _llgo_21: ; preds = %_llgo_12
%134 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %132 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
%135 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %134, i32 0, i32 0 %133 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %132, i32 0, i32 0
store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %95, ptr %135, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %93, ptr %133, align 8
%136 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.two$bound", ptr undef }, ptr %134, 1 %134 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.two$bound", ptr undef }, ptr %132, 1
%137 = extractvalue { ptr, ptr } %136, 1 %135 = extractvalue { ptr, ptr } %134, 1
%138 = extractvalue { ptr, ptr } %136, 0 %136 = extractvalue { ptr, ptr } %134, 0
%139 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %138(ptr %137) %137 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %136(ptr %135)
%140 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %139, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) %138 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %137, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 })
%141 = xor i1 %140, true %139 = xor i1 %138, true
br i1 %141, label %_llgo_13, label %_llgo_14 br i1 %139, label %_llgo_13, label %_llgo_14
_llgo_22: ; preds = %_llgo_12 _llgo_22: ; preds = %_llgo_12
%142 = load ptr, ptr @_llgo_string, align 8 %140 = load ptr, ptr @_llgo_string, align 8
%143 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %141 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %143, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %141, align 8
%144 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %142, 0 %142 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %140, 0
%145 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %144, ptr %143, 1 %143 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %142, ptr %141, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %145) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %143)
unreachable unreachable
_llgo_23: ; preds = %_llgo_14 _llgo_23: ; preds = %_llgo_14
%146 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %144 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
%147 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %146, i32 0, i32 0 %145 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %144, i32 0, i32 0
store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %104, ptr %147, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %102, ptr %145, align 8
%148 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.two$bound", ptr undef }, ptr %146, 1 %146 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.two$bound", ptr undef }, ptr %144, 1
%149 = extractvalue { ptr, ptr } %148, 1 %147 = extractvalue { ptr, ptr } %146, 1
%150 = extractvalue { ptr, ptr } %148, 0 %148 = extractvalue { ptr, ptr } %146, 0
%151 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %150(ptr %149) %149 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %148(ptr %147)
%152 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %151, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) %150 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %149, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 })
%153 = xor i1 %152, true %151 = xor i1 %150, true
br i1 %153, label %_llgo_15, label %_llgo_16 br i1 %151, label %_llgo_15, label %_llgo_16
_llgo_24: ; preds = %_llgo_14 _llgo_24: ; preds = %_llgo_14
%154 = load ptr, ptr @_llgo_string, align 8 %152 = load ptr, ptr @_llgo_string, align 8
%155 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %153 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %155, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 116 }, ptr %153, align 8
%156 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %154, 0 %154 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %152, 0
%157 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %156, ptr %155, 1 %155 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %154, ptr %153, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %157) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %155)
unreachable unreachable
} }
@@ -515,46 +512,32 @@ _llgo_8: ; preds = %_llgo_7, %_llgo_6
%65 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %64, i64 2, 1 %65 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %64, i64 2, 1
%66 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %65, i64 2, 2 %66 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %65, i64 2, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamed"(ptr %0, ptr %6, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %60, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %66) call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamed"(ptr %0, ptr %6, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %60, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %66)
%67 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 %67 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @1, i64 43 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @6, i64 1 })
%68 = load ptr, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8 %68 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8
%69 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 47 }, ptr undef }, ptr %67, 1 %69 = icmp eq ptr %68, null
%70 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @5, i64 47 }, ptr undef }, ptr %68, 1 br i1 %69, label %_llgo_9, label %_llgo_10
%71 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 48)
%72 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %71, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %69, ptr %72, align 8
%73 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %71, i64 1
store %"github.com/goplus/llgo/runtime/abi.Imethod" %70, ptr %73, align 8
%74 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %71, 0
%75 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %74, i64 2, 1
%76 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %75, i64 2, 2
%77 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @1, i64 43 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %76)
store ptr %77, ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA", align 8
%78 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @1, i64 43 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @6, i64 1 })
%79 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8
%80 = icmp eq ptr %79, null
br i1 %80, label %_llgo_9, label %_llgo_10
_llgo_9: ; preds = %_llgo_8 _llgo_9: ; preds = %_llgo_8
store ptr %78, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8 store ptr %67, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/ifaceprom.I", align 8
br label %_llgo_10 br label %_llgo_10
_llgo_10: ; preds = %_llgo_9, %_llgo_8 _llgo_10: ; preds = %_llgo_9, %_llgo_8
%81 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 %70 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8
%82 = load ptr, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8 %71 = load ptr, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8
br i1 %80, label %_llgo_11, label %_llgo_12 br i1 %69, label %_llgo_11, label %_llgo_12
_llgo_11: ; preds = %_llgo_10 _llgo_11: ; preds = %_llgo_10
%83 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 47 }, ptr undef }, ptr %81, 1 %72 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 47 }, ptr undef }, ptr %70, 1
%84 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @5, i64 47 }, ptr undef }, ptr %82, 1 %73 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @5, i64 47 }, ptr undef }, ptr %71, 1
%85 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 48) %74 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 48)
%86 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %85, i64 0 %75 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %74, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %83, ptr %86, align 8 store %"github.com/goplus/llgo/runtime/abi.Imethod" %72, ptr %75, align 8
%87 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %85, i64 1 %76 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %74, i64 1
store %"github.com/goplus/llgo/runtime/abi.Imethod" %84, ptr %87, align 8 store %"github.com/goplus/llgo/runtime/abi.Imethod" %73, ptr %76, align 8
%88 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %85, 0 %77 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %74, 0
%89 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %88, i64 2, 1 %78 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %77, i64 2, 1
%90 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %89, i64 2, 2 %79 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %78, i64 2, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr %78, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %90) call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr %67, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %79)
br label %_llgo_12 br label %_llgo_12
_llgo_12: ; preds = %_llgo_11, %_llgo_10 _llgo_12: ; preds = %_llgo_11, %_llgo_10
@@ -577,7 +560,9 @@ declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Func"(%"github.com
declare void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr) declare void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.Slice") declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.String")
declare void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr, %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr)
@@ -585,10 +570,6 @@ declare void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.c
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.String")
declare void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr, %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
define i64 @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound"(ptr %0) { define i64 @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound"(ptr %0) {
_llgo_0: _llgo_0:
%1 = load { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %0, align 8 %1 = load { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %0, align 8

View File

@@ -31,7 +31,6 @@ source_filename = "github.com/goplus/llgo/cl/_testgo/interface"
@"*_llgo_github.com/goplus/llgo/cl/_testgo/interface.Game2" = linkonce global ptr null, align 8 @"*_llgo_github.com/goplus/llgo/cl/_testgo/interface.Game2" = linkonce global ptr null, align 8
@"_llgo_github.com/goplus/llgo/cl/_testdata/foo.Gamer" = linkonce global ptr null, align 8 @"_llgo_github.com/goplus/llgo/cl/_testdata/foo.Gamer" = linkonce global ptr null, align 8
@9 = private unnamed_addr constant [5 x i8] c"Gamer", align 1 @9 = private unnamed_addr constant [5 x i8] c"Gamer", align 1
@"github.com/goplus/llgo/cl/_testgo/interface.iface$sO8a1LvuUsjXwiwaC6sR9-L4DiYgiOnZi7iosyShJXg" = linkonce global ptr null, align 8
@10 = private unnamed_addr constant [2 x i8] c"OK", align 1 @10 = private unnamed_addr constant [2 x i8] c"OK", align 1
@11 = private unnamed_addr constant [4 x i8] c"FAIL", align 1 @11 = private unnamed_addr constant [4 x i8] c"FAIL", align 1
@@ -133,7 +132,7 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_5
_llgo_3: ; preds = %_llgo_0 _llgo_3: ; preds = %_llgo_0
%26 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %6, 1 %26 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %6, 1
%27 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/interface.iface$sO8a1LvuUsjXwiwaC6sR9-L4DiYgiOnZi7iosyShJXg", align 8 %27 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testdata/foo.Gamer", align 8
%28 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %27, ptr %12) %28 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %27, ptr %12)
%29 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %28, 0 %29 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %28, 0
%30 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %29, ptr %26, 1 %30 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %29, ptr %26, 1
@@ -158,7 +157,7 @@ _llgo_5: ; preds = %_llgo_4, %_llgo_3
_llgo_6: ; preds = %_llgo_2 _llgo_6: ; preds = %_llgo_2
%36 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %11, 1 %36 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %11, 1
%37 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/interface.iface$sO8a1LvuUsjXwiwaC6sR9-L4DiYgiOnZi7iosyShJXg", align 8 %37 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testdata/foo.Gamer", align 8
%38 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %37, ptr %23) %38 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %37, ptr %23)
%39 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %38, 0 %39 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %38, 0
%40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %39, ptr %36, 1 %40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %39, ptr %36, 1
@@ -405,20 +404,6 @@ _llgo_23: ; preds = %_llgo_22
br label %_llgo_24 br label %_llgo_24
_llgo_24: ; preds = %_llgo_23, %_llgo_22 _llgo_24: ; preds = %_llgo_23, %_llgo_22
%109 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8
%110 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8
%111 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 4 }, ptr undef }, ptr %109, 1
%112 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @6, i64 48 }, ptr undef }, ptr %110, 1
%113 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 48)
%114 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %113, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %111, ptr %114, align 8
%115 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %113, i64 1
store %"github.com/goplus/llgo/runtime/abi.Imethod" %112, ptr %115, align 8
%116 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %113, 0
%117 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %116, i64 2, 1
%118 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %117, i64 2, 2
%119 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 43 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %118)
store ptr %119, ptr @"github.com/goplus/llgo/cl/_testgo/interface.iface$sO8a1LvuUsjXwiwaC6sR9-L4DiYgiOnZi7iosyShJXg", align 8
ret void ret void
} }
@@ -444,8 +429,6 @@ declare void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterfac
declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr, ptr) declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr, ptr)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr)
declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String") declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String")

View File

@@ -0,0 +1,11 @@
package main
import (
"github.com/goplus/llgo/cl/_testdata/geometry1370"
)
func main() {
rect := geometry1370.NewRectangle(5.0, 3.0)
geometry1370.RegisterShape(rect, 42)
println("ID:", rect.GetID())
}

View File

@@ -0,0 +1,348 @@
; ModuleID = 'github.com/goplus/llgo/cl/_testgo/interface1370'
source_filename = "github.com/goplus/llgo/cl/_testgo/interface1370"
%"github.com/goplus/llgo/runtime/internal/runtime.iface" = type { ptr, ptr }
%"github.com/goplus/llgo/runtime/internal/runtime.String" = type { ptr, i64 }
%"github.com/goplus/llgo/runtime/abi.StructField" = type { %"github.com/goplus/llgo/runtime/internal/runtime.String", ptr, i64, %"github.com/goplus/llgo/runtime/internal/runtime.String", i1 }
%"github.com/goplus/llgo/runtime/internal/runtime.Slice" = type { ptr, i64, i64 }
%"github.com/goplus/llgo/runtime/abi.Method" = type { %"github.com/goplus/llgo/runtime/internal/runtime.String", ptr, ptr, ptr }
%"github.com/goplus/llgo/runtime/abi.Imethod" = type { %"github.com/goplus/llgo/runtime/internal/runtime.String", ptr }
@"github.com/goplus/llgo/cl/_testgo/interface1370.init$guard" = global i1 false, align 1
@"_llgo_github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle" = linkonce global ptr null, align 8
@0 = private unnamed_addr constant [48 x i8] c"github.com/goplus/llgo/cl/_testdata/geometry1370", align 1
@1 = private unnamed_addr constant [9 x i8] c"Rectangle", align 1
@_llgo_float64 = linkonce global ptr null, align 8
@_llgo_int = linkonce global ptr null, align 8
@"github.com/goplus/llgo/cl/_testgo/interface1370.struct$EuRbjzGGO7GwkW6RxZGl-8lEjTdEMzAFD8LnY_SpVoQ" = linkonce global ptr null, align 8
@2 = private unnamed_addr constant [5 x i8] c"Width", align 1
@3 = private unnamed_addr constant [6 x i8] c"Height", align 1
@4 = private unnamed_addr constant [2 x i8] c"id", align 1
@5 = private unnamed_addr constant [47 x i8] c"github.com/goplus/llgo/cl/_testgo/interface1370", align 1
@6 = private unnamed_addr constant [4 x i8] c"Area", align 1
@"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8" = linkonce global ptr null, align 8
@7 = private unnamed_addr constant [5 x i8] c"GetID", align 1
@"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA" = linkonce global ptr null, align 8
@8 = private unnamed_addr constant [5 x i8] c"setID", align 1
@9 = private unnamed_addr constant [54 x i8] c"github.com/goplus/llgo/cl/_testdata/geometry1370.setID", align 1
@"_llgo_func$VZ-8VPNF1RaLICwxc1Ghn7BbgyFX3v762OCdx127EkA" = linkonce global ptr null, align 8
@10 = private unnamed_addr constant [8 x i8] c"validate", align 1
@11 = private unnamed_addr constant [57 x i8] c"github.com/goplus/llgo/cl/_testdata/geometry1370.validate", align 1
@_llgo_bool = linkonce global ptr null, align 8
@"_llgo_func$YHeRw3AOvQtzv982-ZO3Yn8vh3Fx89RM3VvI8E4iKVk" = linkonce global ptr null, align 8
@"*_llgo_github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle" = linkonce global ptr null, align 8
@"_llgo_github.com/goplus/llgo/cl/_testdata/geometry1370.Shape" = linkonce global ptr null, align 8
@12 = private unnamed_addr constant [5 x i8] c"Shape", align 1
@13 = private unnamed_addr constant [3 x i8] c"ID:", align 1
define void @"github.com/goplus/llgo/cl/_testgo/interface1370.init"() {
_llgo_0:
%0 = load i1, ptr @"github.com/goplus/llgo/cl/_testgo/interface1370.init$guard", align 1
br i1 %0, label %_llgo_2, label %_llgo_1
_llgo_1: ; preds = %_llgo_0
store i1 true, ptr @"github.com/goplus/llgo/cl/_testgo/interface1370.init$guard", align 1
call void @"github.com/goplus/llgo/cl/_testdata/geometry1370.init"()
call void @"github.com/goplus/llgo/cl/_testgo/interface1370.init$after"()
br label %_llgo_2
_llgo_2: ; preds = %_llgo_1, %_llgo_0
ret void
}
define void @"github.com/goplus/llgo/cl/_testgo/interface1370.main"() {
_llgo_0:
%0 = call ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.NewRectangle"(double 5.000000e+00, double 3.000000e+00)
%1 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", align 8
%2 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", align 8
%3 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testdata/geometry1370.Shape", align 8
%4 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %3, ptr %2)
%5 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %4, 0
%6 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %5, ptr %0, 1
call void @"github.com/goplus/llgo/cl/_testdata/geometry1370.RegisterShape"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, i64 42)
%7 = call i64 @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).GetID"(ptr %0)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @13, i64 3 })
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %7)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10)
ret void
}
declare void @"github.com/goplus/llgo/cl/_testdata/geometry1370.init"()
declare ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.NewRectangle"(double, double)
declare void @"github.com/goplus/llgo/cl/_testdata/geometry1370.RegisterShape"(%"github.com/goplus/llgo/runtime/internal/runtime.iface", i64)
define void @"github.com/goplus/llgo/cl/_testgo/interface1370.init$after"() {
_llgo_0:
%0 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 48 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @1, i64 9 }, i64 25, i64 24, i64 0, i64 4)
%1 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", align 8
%2 = icmp eq ptr %1, null
br i1 %2, label %_llgo_1, label %_llgo_2
_llgo_1: ; preds = %_llgo_0
store ptr %0, ptr @"_llgo_github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", align 8
br label %_llgo_2
_llgo_2: ; preds = %_llgo_1, %_llgo_0
%3 = load ptr, ptr @_llgo_float64, align 8
%4 = icmp eq ptr %3, null
br i1 %4, label %_llgo_3, label %_llgo_4
_llgo_3: ; preds = %_llgo_2
%5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 46)
store ptr %5, ptr @_llgo_float64, align 8
br label %_llgo_4
_llgo_4: ; preds = %_llgo_3, %_llgo_2
%6 = load ptr, ptr @_llgo_float64, align 8
%7 = load ptr, ptr @_llgo_int, align 8
%8 = icmp eq ptr %7, null
br i1 %8, label %_llgo_5, label %_llgo_6
_llgo_5: ; preds = %_llgo_4
%9 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34)
store ptr %9, ptr @_llgo_int, align 8
br label %_llgo_6
_llgo_6: ; preds = %_llgo_5, %_llgo_4
%10 = load ptr, ptr @_llgo_int, align 8
%11 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 46)
%12 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @2, i64 5 }, ptr %11, i64 0, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false)
%13 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 46)
%14 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 6 }, ptr %13, i64 8, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false)
%15 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34)
%16 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 2 }, ptr %15, i64 16, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false)
%17 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 168)
%18 = getelementptr %"github.com/goplus/llgo/runtime/abi.StructField", ptr %17, i64 0
store %"github.com/goplus/llgo/runtime/abi.StructField" %12, ptr %18, align 8
%19 = getelementptr %"github.com/goplus/llgo/runtime/abi.StructField", ptr %17, i64 1
store %"github.com/goplus/llgo/runtime/abi.StructField" %14, ptr %19, align 8
%20 = getelementptr %"github.com/goplus/llgo/runtime/abi.StructField", ptr %17, i64 2
store %"github.com/goplus/llgo/runtime/abi.StructField" %16, ptr %20, align 8
%21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %17, 0
%22 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %21, i64 3, 1
%23 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %22, i64 3, 2
%24 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Struct"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @5, i64 47 }, i64 24, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %23)
store ptr %24, ptr @"github.com/goplus/llgo/cl/_testgo/interface1370.struct$EuRbjzGGO7GwkW6RxZGl-8lEjTdEMzAFD8LnY_SpVoQ", align 8
%25 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/interface1370.struct$EuRbjzGGO7GwkW6RxZGl-8lEjTdEMzAFD8LnY_SpVoQ", align 8
br i1 %2, label %_llgo_7, label %_llgo_8
_llgo_7: ; preds = %_llgo_6
%26 = load ptr, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8
%27 = icmp eq ptr %26, null
br i1 %27, label %_llgo_9, label %_llgo_10
_llgo_8: ; preds = %_llgo_18, %_llgo_6
%28 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 48 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @1, i64 9 }, i64 25, i64 24, i64 0, i64 4)
%29 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", align 8
%30 = icmp eq ptr %29, null
br i1 %30, label %_llgo_19, label %_llgo_20
_llgo_9: ; preds = %_llgo_7
%31 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
%32 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %31, 0
%33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %32, i64 0, 1
%34 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %33, i64 0, 2
%35 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 46)
%36 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 8)
%37 = getelementptr ptr, ptr %36, i64 0
store ptr %35, ptr %37, align 8
%38 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %36, 0
%39 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %38, i64 1, 1
%40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %39, i64 1, 2
%41 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Func"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice" %34, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %40, i1 false)
call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %41)
store ptr %41, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8
br label %_llgo_10
_llgo_10: ; preds = %_llgo_9, %_llgo_7
%42 = load ptr, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8
%43 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @6, i64 4 }, ptr undef, ptr undef, ptr undef }, ptr %42, 1
%44 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %43, ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).Area", 2
%45 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %44, ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).Area", 3
%46 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8
%47 = icmp eq ptr %46, null
br i1 %47, label %_llgo_11, label %_llgo_12
_llgo_11: ; preds = %_llgo_10
%48 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
%49 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %48, 0
%50 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %49, i64 0, 1
%51 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %50, i64 0, 2
%52 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34)
%53 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 8)
%54 = getelementptr ptr, ptr %53, i64 0
store ptr %52, ptr %54, align 8
%55 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %53, 0
%56 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %55, i64 1, 1
%57 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %56, i64 1, 2
%58 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Func"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice" %51, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %57, i1 false)
call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %58)
store ptr %58, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8
br label %_llgo_12
_llgo_12: ; preds = %_llgo_11, %_llgo_10
%59 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8
%60 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 5 }, ptr undef, ptr undef, ptr undef }, ptr %59, 1
%61 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %60, ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).GetID", 2
%62 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %61, ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).GetID", 3
%63 = load ptr, ptr @"_llgo_func$VZ-8VPNF1RaLICwxc1Ghn7BbgyFX3v762OCdx127EkA", align 8
%64 = icmp eq ptr %63, null
br i1 %64, label %_llgo_13, label %_llgo_14
_llgo_13: ; preds = %_llgo_12
%65 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34)
%66 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 8)
%67 = getelementptr ptr, ptr %66, i64 0
store ptr %65, ptr %67, align 8
%68 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %66, 0
%69 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %68, i64 1, 1
%70 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %69, i64 1, 2
%71 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
%72 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %71, 0
%73 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %72, i64 0, 1
%74 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %73, i64 0, 2
%75 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Func"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice" %70, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %74, i1 false)
call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %75)
store ptr %75, ptr @"_llgo_func$VZ-8VPNF1RaLICwxc1Ghn7BbgyFX3v762OCdx127EkA", align 8
br label %_llgo_14
_llgo_14: ; preds = %_llgo_13, %_llgo_12
%76 = load ptr, ptr @"_llgo_func$VZ-8VPNF1RaLICwxc1Ghn7BbgyFX3v762OCdx127EkA", align 8
%77 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @9, i64 54 }, ptr undef, ptr undef, ptr undef }, ptr %76, 1
%78 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %77, ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).setID", 2
%79 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %78, ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).setID", 3
%80 = load ptr, ptr @_llgo_bool, align 8
%81 = icmp eq ptr %80, null
br i1 %81, label %_llgo_15, label %_llgo_16
_llgo_15: ; preds = %_llgo_14
%82 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 33)
store ptr %82, ptr @_llgo_bool, align 8
br label %_llgo_16
_llgo_16: ; preds = %_llgo_15, %_llgo_14
%83 = load ptr, ptr @_llgo_bool, align 8
%84 = load ptr, ptr @"_llgo_func$YHeRw3AOvQtzv982-ZO3Yn8vh3Fx89RM3VvI8E4iKVk", align 8
%85 = icmp eq ptr %84, null
br i1 %85, label %_llgo_17, label %_llgo_18
_llgo_17: ; preds = %_llgo_16
%86 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
%87 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %86, 0
%88 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %87, i64 0, 1
%89 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %88, i64 0, 2
%90 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 33)
%91 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 8)
%92 = getelementptr ptr, ptr %91, i64 0
store ptr %90, ptr %92, align 8
%93 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %91, 0
%94 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %93, i64 1, 1
%95 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %94, i64 1, 2
%96 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Func"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice" %89, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %95, i1 false)
call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %96)
store ptr %96, ptr @"_llgo_func$YHeRw3AOvQtzv982-ZO3Yn8vh3Fx89RM3VvI8E4iKVk", align 8
br label %_llgo_18
_llgo_18: ; preds = %_llgo_17, %_llgo_16
%97 = load ptr, ptr @"_llgo_func$YHeRw3AOvQtzv982-ZO3Yn8vh3Fx89RM3VvI8E4iKVk", align 8
%98 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @11, i64 57 }, ptr undef, ptr undef, ptr undef }, ptr %97, 1
%99 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %98, ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).validate", 2
%100 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %99, ptr @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).validate", 3
%101 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 160)
%102 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %101, i64 0
store %"github.com/goplus/llgo/runtime/abi.Method" %45, ptr %102, align 8
%103 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %101, i64 1
store %"github.com/goplus/llgo/runtime/abi.Method" %62, ptr %103, align 8
%104 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %101, i64 2
store %"github.com/goplus/llgo/runtime/abi.Method" %79, ptr %104, align 8
%105 = getelementptr %"github.com/goplus/llgo/runtime/abi.Method", ptr %101, i64 3
store %"github.com/goplus/llgo/runtime/abi.Method" %100, ptr %105, align 8
%106 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %101, 0
%107 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %106, i64 4, 1
%108 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %107, i64 4, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamed"(ptr %0, ptr %25, { ptr, i64, i64 } zeroinitializer, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %108)
br label %_llgo_8
_llgo_19: ; preds = %_llgo_8
%109 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr %28)
call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %109)
store ptr %109, ptr @"*_llgo_github.com/goplus/llgo/cl/_testdata/geometry1370.Rectangle", align 8
br label %_llgo_20
_llgo_20: ; preds = %_llgo_19, %_llgo_8
%110 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 48 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 5 })
%111 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testdata/geometry1370.Shape", align 8
%112 = icmp eq ptr %111, null
br i1 %112, label %_llgo_21, label %_llgo_22
_llgo_21: ; preds = %_llgo_20
store ptr %110, ptr @"_llgo_github.com/goplus/llgo/cl/_testdata/geometry1370.Shape", align 8
br label %_llgo_22
_llgo_22: ; preds = %_llgo_21, %_llgo_20
%113 = load ptr, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8
%114 = load ptr, ptr @"_llgo_func$VZ-8VPNF1RaLICwxc1Ghn7BbgyFX3v762OCdx127EkA", align 8
%115 = load ptr, ptr @"_llgo_func$YHeRw3AOvQtzv982-ZO3Yn8vh3Fx89RM3VvI8E4iKVk", align 8
br i1 %112, label %_llgo_23, label %_llgo_24
_llgo_23: ; preds = %_llgo_22
%116 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @6, i64 4 }, ptr undef }, ptr %113, 1
%117 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @9, i64 54 }, ptr undef }, ptr %114, 1
%118 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @11, i64 57 }, ptr undef }, ptr %115, 1
%119 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 72)
%120 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %119, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %116, ptr %120, align 8
%121 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %119, i64 1
store %"github.com/goplus/llgo/runtime/abi.Imethod" %117, ptr %121, align 8
%122 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %119, i64 2
store %"github.com/goplus/llgo/runtime/abi.Imethod" %118, ptr %122, align 8
%123 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %119, 0
%124 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %123, i64 3, 1
%125 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %124, i64 3, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr %110, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %125)
br label %_llgo_24
_llgo_24: ; preds = %_llgo_23, %_llgo_22
ret void
}
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.String", i64, i64, i64, i64)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Struct"(%"github.com/goplus/llgo/runtime/internal/runtime.String", i64, %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String", ptr, i64, %"github.com/goplus/llgo/runtime/internal/runtime.String", i1)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64)
declare void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamed"(ptr, ptr, %"github.com/goplus/llgo/runtime/internal/runtime.Slice", %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Func"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice", %"github.com/goplus/llgo/runtime/internal/runtime.Slice", i1)
declare void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr)
declare double @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).Area"(ptr)
declare i64 @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).GetID"(ptr)
declare void @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).setID"(ptr, i64)
declare i1 @"github.com/goplus/llgo/cl/_testdata/geometry1370.(*Rectangle).validate"(ptr)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.String")
declare void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr, %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr)
declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String")
declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8)
declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -32,26 +32,27 @@ source_filename = "github.com/goplus/llgo/cl/_testgo/reflect"
@10 = private unnamed_addr constant [1 x i8] c"n", align 1 @10 = private unnamed_addr constant [1 x i8] c"n", align 1
@11 = private unnamed_addr constant [3 x i8] c"Add", align 1 @11 = private unnamed_addr constant [3 x i8] c"Add", align 1
@"*_llgo_github.com/goplus/llgo/cl/_testgo/reflect.T" = linkonce global ptr null, align 8 @"*_llgo_github.com/goplus/llgo/cl/_testgo/reflect.T" = linkonce global ptr null, align 8
@"_llgo_iface$VdBKYV8-gcMjZtZfcf-u2oKoj9Lu3VXwuG8TGCW2S4A" = linkonce global ptr null, align 8 @"_llgo_github.com/goplus/llgo/cl/_testgo/reflect.I" = linkonce global ptr null, align 8
@12 = private unnamed_addr constant [7 x i8] c"imethod", align 1 @12 = private unnamed_addr constant [1 x i8] c"I", align 1
@13 = private unnamed_addr constant [6 x i8] c"method", align 1 @13 = private unnamed_addr constant [7 x i8] c"imethod", align 1
@14 = private unnamed_addr constant [6 x i8] c"method", align 1
@_llgo_any = linkonce global ptr null, align 8 @_llgo_any = linkonce global ptr null, align 8
@"[]_llgo_any" = linkonce global ptr null, align 8 @"[]_llgo_any" = linkonce global ptr null, align 8
@"_llgo_func$KK0iU4Wpi3BdRqssvycXqtgNe2Dq1riBlM61Rds1QsU" = linkonce global ptr null, align 8 @"_llgo_func$KK0iU4Wpi3BdRqssvycXqtgNe2Dq1riBlM61Rds1QsU" = linkonce global ptr null, align 8
@"github.com/goplus/llgo/cl/_testgo/reflect.struct$FjMjjQr3-2iTiWyZP1IIQFOz0hUCa0OS6pEm5uVV6Pk" = linkonce global ptr null, align 8 @"github.com/goplus/llgo/cl/_testgo/reflect.struct$FjMjjQr3-2iTiWyZP1IIQFOz0hUCa0OS6pEm5uVV6Pk" = linkonce global ptr null, align 8
@14 = private unnamed_addr constant [10 x i8] c"call.slice", align 1 @15 = private unnamed_addr constant [10 x i8] c"call.slice", align 1
@15 = private unnamed_addr constant [40 x i8] c"type assertion interface{} -> int failed", align 1 @16 = private unnamed_addr constant [40 x i8] c"type assertion interface{} -> int failed", align 1
@"map[_llgo_int]_llgo_string" = linkonce global ptr null, align 8 @"map[_llgo_int]_llgo_string" = linkonce global ptr null, align 8
@16 = private unnamed_addr constant [7 x i8] c"topbits", align 1 @17 = private unnamed_addr constant [7 x i8] c"topbits", align 1
@17 = private unnamed_addr constant [4 x i8] c"keys", align 1 @18 = private unnamed_addr constant [4 x i8] c"keys", align 1
@18 = private unnamed_addr constant [5 x i8] c"elems", align 1 @19 = private unnamed_addr constant [5 x i8] c"elems", align 1
@19 = private unnamed_addr constant [8 x i8] c"overflow", align 1 @20 = private unnamed_addr constant [8 x i8] c"overflow", align 1
@20 = private unnamed_addr constant [5 x i8] c"hello", align 1 @21 = private unnamed_addr constant [5 x i8] c"hello", align 1
@21 = private unnamed_addr constant [5 x i8] c"world", align 1 @22 = private unnamed_addr constant [5 x i8] c"world", align 1
@22 = private unnamed_addr constant [14 x i8] c"MapIndex error", align 1 @23 = private unnamed_addr constant [14 x i8] c"MapIndex error", align 1
@23 = private unnamed_addr constant [4 x i8] c"todo", align 1 @24 = private unnamed_addr constant [4 x i8] c"todo", align 1
@24 = private unnamed_addr constant [12 x i8] c"must invalid", align 1 @25 = private unnamed_addr constant [12 x i8] c"must invalid", align 1
@25 = private unnamed_addr constant [13 x i8] c"MapIter error", align 1 @26 = private unnamed_addr constant [13 x i8] c"MapIter error", align 1
define i64 @"github.com/goplus/llgo/cl/_testgo/reflect.(*T).Add"(ptr %0, i64 %1) { define i64 @"github.com/goplus/llgo/cl/_testgo/reflect.(*T).Add"(ptr %0, i64 %1) {
_llgo_0: _llgo_0:
@@ -269,112 +270,111 @@ _llgo_0:
store i64 1, ptr %1, align 4 store i64 1, ptr %1, align 4
%2 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/reflect.T", align 8 %2 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/reflect.T", align 8
%3 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/reflect.T", align 8 %3 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/reflect.T", align 8
%4 = load ptr, ptr @"_llgo_func$ekGNsrYBSzltfAjxbl6T8H6Yq8j16wzqS3nDj2xxGMU", align 8 %4 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/reflect.I", align 8
%5 = load ptr, ptr @"_llgo_iface$VdBKYV8-gcMjZtZfcf-u2oKoj9Lu3VXwuG8TGCW2S4A", align 8 %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %4, ptr %3)
%6 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %5, ptr %3) %6 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %5, 0
%7 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %6, 0 %7 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, ptr %0, 1
%8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, ptr %0, 1 %8 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %7)
%9 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %8) %9 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, 1
%10 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8, 1 %10 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %8, 0
%11 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %9, 0 %11 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %10, ptr %9, 1
%12 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %11, ptr %10, 1 %12 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %11)
%13 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %12) %13 = call %reflect.Value @reflect.Value.Method(%reflect.Value %12, i64 0)
%14 = call %reflect.Value @reflect.Value.Method(%reflect.Value %13, i64 0) %14 = call i64 @reflect.Value.Kind(%reflect.Value %13)
%15 = call i64 @reflect.Value.Kind(%reflect.Value %14) %15 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value %13)
%16 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value %14) %16 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %15)
%17 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %16) %17 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %15, 0
%18 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %16, 0 %18 = getelementptr ptr, ptr %17, i64 37
%19 = getelementptr ptr, ptr %18, i64 37 %19 = load ptr, ptr %18, align 8
%20 = load ptr, ptr %19, align 8 %20 = insertvalue { ptr, ptr } undef, ptr %19, 0
%21 = insertvalue { ptr, ptr } undef, ptr %20, 0 %21 = insertvalue { ptr, ptr } %20, ptr %16, 1
%22 = insertvalue { ptr, ptr } %21, ptr %17, 1 %22 = extractvalue { ptr, ptr } %21, 1
%23 = extractvalue { ptr, ptr } %22, 1 %23 = extractvalue { ptr, ptr } %21, 0
%24 = extractvalue { ptr, ptr } %22, 0 %24 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %23(ptr %22)
%25 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %24(ptr %23) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @13, i64 7 })
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 7 })
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 %15) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 %14)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %25) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %24)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10)
%26 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) %25 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24)
%27 = getelementptr inbounds %reflect.Value, ptr %26, i64 0 %26 = getelementptr inbounds %reflect.Value, ptr %25, i64 0
%28 = load ptr, ptr @_llgo_int, align 8 %27 = load ptr, ptr @_llgo_int, align 8
%29 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %28, 0 %28 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %27, 0
%30 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %29, ptr inttoptr (i64 100 to ptr), 1 %29 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %28, ptr inttoptr (i64 100 to ptr), 1
%31 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %30) %30 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %29)
store %reflect.Value %31, ptr %27, align 8 store %reflect.Value %30, ptr %26, align 8
%32 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %26, 0 %31 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %25, 0
%33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %32, i64 1, 1 %32 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %31, i64 1, 1
%34 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %33, i64 1, 2 %33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %32, i64 1, 2
%35 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %14, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %34) %34 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %13, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %33)
%36 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %35, 0 %35 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %34, 0
%37 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %35, 1 %36 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %34, 1
%38 = icmp sge i64 0, %37 %37 = icmp sge i64 0, %36
call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %38) call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %37)
%39 = getelementptr inbounds %reflect.Value, ptr %36, i64 0 %38 = getelementptr inbounds %reflect.Value, ptr %35, i64 0
%40 = load %reflect.Value, ptr %39, align 8 %39 = load %reflect.Value, ptr %38, align 8
%41 = call i64 @reflect.Value.Int(%reflect.Value %40) %40 = call i64 @reflect.Value.Int(%reflect.Value %39)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %41) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %40)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10)
%42 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %14) %41 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %13)
%43 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %42, 0 %42 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %41, 0
%44 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/reflect.struct$QIHBTaw1IFobr8yvWpq-2AJFm3xBNhdW_aNBicqUBGk", align 8 %43 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/reflect.struct$QIHBTaw1IFobr8yvWpq-2AJFm3xBNhdW_aNBicqUBGk", align 8
%45 = icmp eq ptr %43, %44 %44 = icmp eq ptr %42, %43
br i1 %45, label %_llgo_3, label %_llgo_4 br i1 %44, label %_llgo_3, label %_llgo_4
_llgo_1: ; preds = %_llgo_5 _llgo_1: ; preds = %_llgo_5
%46 = load ptr, ptr @_llgo_string, align 8 %45 = load ptr, ptr @_llgo_string, align 8
%47 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %46 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @5, i64 5 }, ptr %47, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @5, i64 5 }, ptr %46, align 8
%48 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %46, 0 %47 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %45, 0
%49 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %48, ptr %47, 1 %48 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %47, ptr %46, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %49) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %48)
unreachable unreachable
_llgo_2: ; preds = %_llgo_5 _llgo_2: ; preds = %_llgo_5
%50 = extractvalue { ptr, ptr } %76, 1 %49 = extractvalue { ptr, ptr } %75, 1
%51 = extractvalue { ptr, ptr } %76, 0 %50 = extractvalue { ptr, ptr } %75, 0
%52 = call i64 %51(ptr %50, i64 1) %51 = call i64 %50(ptr %49, i64 1)
%53 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %14) %52 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %13)
%54 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %53) %53 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %52)
%55 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) %54 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24)
%56 = getelementptr inbounds %reflect.Value, ptr %55, i64 0 %55 = getelementptr inbounds %reflect.Value, ptr %54, i64 0
%57 = load ptr, ptr @_llgo_int, align 8 %56 = load ptr, ptr @_llgo_int, align 8
%58 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %57, 0 %57 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %56, 0
%59 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %58, ptr inttoptr (i64 100 to ptr), 1 %58 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %57, ptr inttoptr (i64 100 to ptr), 1
%60 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %59) %59 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %58)
store %reflect.Value %60, ptr %56, align 8 store %reflect.Value %59, ptr %55, align 8
%61 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %55, 0 %60 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %54, 0
%62 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %61, i64 1, 1 %61 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %60, i64 1, 1
%63 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %62, i64 1, 2 %62 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %61, i64 1, 2
%64 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %54, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %63) %63 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %53, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %62)
%65 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %64, 0 %64 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %63, 0
%66 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %64, 1 %65 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %63, 1
%67 = icmp sge i64 0, %66 %66 = icmp sge i64 0, %65
call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %67) call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %66)
%68 = getelementptr inbounds %reflect.Value, ptr %65, i64 0 %67 = getelementptr inbounds %reflect.Value, ptr %64, i64 0
%69 = load %reflect.Value, ptr %68, align 8 %68 = load %reflect.Value, ptr %67, align 8
%70 = call i64 @reflect.Value.Int(%reflect.Value %69) %69 = call i64 @reflect.Value.Int(%reflect.Value %68)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %70) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %69)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10)
ret void ret void
_llgo_3: ; preds = %_llgo_0 _llgo_3: ; preds = %_llgo_0
%71 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %42, 1 %70 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %41, 1
%72 = load { ptr, ptr }, ptr %71, align 8 %71 = load { ptr, ptr }, ptr %70, align 8
%73 = insertvalue { { ptr, ptr }, i1 } undef, { ptr, ptr } %72, 0 %72 = insertvalue { { ptr, ptr }, i1 } undef, { ptr, ptr } %71, 0
%74 = insertvalue { { ptr, ptr }, i1 } %73, i1 true, 1 %73 = insertvalue { { ptr, ptr }, i1 } %72, i1 true, 1
br label %_llgo_5 br label %_llgo_5
_llgo_4: ; preds = %_llgo_0 _llgo_4: ; preds = %_llgo_0
br label %_llgo_5 br label %_llgo_5
_llgo_5: ; preds = %_llgo_4, %_llgo_3 _llgo_5: ; preds = %_llgo_4, %_llgo_3
%75 = phi { { ptr, ptr }, i1 } [ %74, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] %74 = phi { { ptr, ptr }, i1 } [ %73, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ]
%76 = extractvalue { { ptr, ptr }, i1 } %75, 0 %75 = extractvalue { { ptr, ptr }, i1 } %74, 0
%77 = extractvalue { { ptr, ptr }, i1 } %75, 1 %76 = extractvalue { { ptr, ptr }, i1 } %74, 1
br i1 %77, label %_llgo_2, label %_llgo_1 br i1 %76, label %_llgo_2, label %_llgo_1
} }
define void @"github.com/goplus/llgo/cl/_testgo/reflect.callMethod"() { define void @"github.com/goplus/llgo/cl/_testgo/reflect.callMethod"() {
@@ -398,7 +398,7 @@ _llgo_0:
%15 = extractvalue { ptr, ptr } %14, 1 %15 = extractvalue { ptr, ptr } %14, 1
%16 = extractvalue { ptr, ptr } %14, 0 %16 = extractvalue { ptr, ptr } %14, 0
%17 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %16(ptr %15) %17 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %16(ptr %15)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @13, i64 6 }) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @14, i64 6 })
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 %7) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 %7)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
@@ -554,7 +554,7 @@ _llgo_0:
%50 = getelementptr inbounds %reflect.Value, ptr %47, i64 1 %50 = getelementptr inbounds %reflect.Value, ptr %47, i64 1
%51 = load %reflect.Value, ptr %50, align 8 %51 = load %reflect.Value, ptr %50, align 8
%52 = call i64 @reflect.Value.Int(%reflect.Value %51) %52 = call i64 @reflect.Value.Int(%reflect.Value %51)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @14, i64 10 }) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @15, i64 10 })
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %46) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %46)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
@@ -624,7 +624,7 @@ _llgo_0:
%98 = getelementptr inbounds %reflect.Value, ptr %95, i64 1 %98 = getelementptr inbounds %reflect.Value, ptr %95, i64 1
%99 = load %reflect.Value, ptr %98, align 8 %99 = load %reflect.Value, ptr %98, align 8
%100 = call i64 @reflect.Value.Int(%reflect.Value %99) %100 = call i64 @reflect.Value.Int(%reflect.Value %99)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @14, i64 10 }) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @15, i64 10 })
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %94) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %94)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
@@ -681,7 +681,7 @@ _llgo_4: ; preds = %_llgo_2
_llgo_5: ; preds = %_llgo_2 _llgo_5: ; preds = %_llgo_2
%38 = load ptr, ptr @_llgo_string, align 8 %38 = load ptr, ptr @_llgo_string, align 8
%39 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %39 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @15, i64 40 }, ptr %39, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @16, i64 40 }, ptr %39, align 8
%40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %38, 0 %40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %38, 0
%41 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %40, ptr %39, 1 %41 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %40, ptr %39, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %41) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %41)
@@ -723,12 +723,12 @@ _llgo_0:
%3 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 8) %3 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 8)
store i64 1, ptr %3, align 4 store i64 1, ptr %3, align 4
%4 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.MapAssign"(ptr %2, ptr %1, ptr %3) %4 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.MapAssign"(ptr %2, ptr %1, ptr %3)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @20, i64 5 }, ptr %4, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @21, i64 5 }, ptr %4, align 8
%5 = load ptr, ptr @"map[_llgo_int]_llgo_string", align 8 %5 = load ptr, ptr @"map[_llgo_int]_llgo_string", align 8
%6 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 8) %6 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 8)
store i64 2, ptr %6, align 4 store i64 2, ptr %6, align 4
%7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.MapAssign"(ptr %5, ptr %1, ptr %6) %7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.MapAssign"(ptr %5, ptr %1, ptr %6)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @21, i64 5 }, ptr %7, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @22, i64 5 }, ptr %7, align 8
%8 = load ptr, ptr @"map[_llgo_int]_llgo_string", align 8 %8 = load ptr, ptr @"map[_llgo_int]_llgo_string", align 8
%9 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %8, 0 %9 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %8, 0
%10 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %9, ptr %1, 1 %10 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %9, ptr %1, 1
@@ -753,7 +753,7 @@ _llgo_2: ; preds = %_llgo_3
%21 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %20) %21 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %20)
%22 = call %reflect.Value @reflect.Value.MapIndex(%reflect.Value %11, %reflect.Value %21) %22 = call %reflect.Value @reflect.Value.MapIndex(%reflect.Value %11, %reflect.Value %21)
%23 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %22) %23 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %22)
%24 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %23, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @21, i64 5 }) %24 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %23, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @22, i64 5 })
%25 = xor i1 %24, true %25 = xor i1 %24, true
br i1 %25, label %_llgo_4, label %_llgo_5 br i1 %25, label %_llgo_4, label %_llgo_5
@@ -766,7 +766,7 @@ _llgo_3: ; preds = %_llgo_0
_llgo_4: ; preds = %_llgo_2 _llgo_4: ; preds = %_llgo_2
%29 = load ptr, ptr @_llgo_string, align 8 %29 = load ptr, ptr @_llgo_string, align 8
%30 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %30 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @22, i64 14 }, ptr %30, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @23, i64 14 }, ptr %30, align 8
%31 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %29, 0 %31 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %29, 0
%32 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %31, ptr %30, 1 %32 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %31, ptr %30, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %32) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %32)
@@ -779,7 +779,7 @@ _llgo_5: ; preds = %_llgo_2
%36 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %35) %36 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %35)
%37 = load ptr, ptr @_llgo_string, align 8 %37 = load ptr, ptr @_llgo_string, align 8
%38 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %38 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @23, i64 4 }, ptr %38, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @24, i64 4 }, ptr %38, align 8
%39 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %37, 0 %39 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %37, 0
%40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %39, ptr %38, 1 %40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %39, ptr %38, 1
%41 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %40) %41 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %40)
@@ -790,14 +790,14 @@ _llgo_5: ; preds = %_llgo_2
%45 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %44) %45 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %44)
%46 = call %reflect.Value @reflect.Value.MapIndex(%reflect.Value %11, %reflect.Value %45) %46 = call %reflect.Value @reflect.Value.MapIndex(%reflect.Value %11, %reflect.Value %45)
%47 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %46) %47 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %46)
%48 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %47, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @23, i64 4 }) %48 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %47, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @24, i64 4 })
%49 = xor i1 %48, true %49 = xor i1 %48, true
br i1 %49, label %_llgo_6, label %_llgo_7 br i1 %49, label %_llgo_6, label %_llgo_7
_llgo_6: ; preds = %_llgo_5 _llgo_6: ; preds = %_llgo_5
%50 = load ptr, ptr @_llgo_string, align 8 %50 = load ptr, ptr @_llgo_string, align 8
%51 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %51 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @22, i64 14 }, ptr %51, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @23, i64 14 }, ptr %51, align 8
%52 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %50, 0 %52 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %50, 0
%53 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %52, ptr %51, 1 %53 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %52, ptr %51, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %53) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %53)
@@ -813,7 +813,7 @@ _llgo_7: ; preds = %_llgo_5
br i1 %59, label %_llgo_8, label %_llgo_9 br i1 %59, label %_llgo_8, label %_llgo_9
_llgo_8: ; preds = %_llgo_7 _llgo_8: ; preds = %_llgo_7
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @24, i64 12 }) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @25, i64 12 })
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10)
br label %_llgo_9 br label %_llgo_9
@@ -864,7 +864,7 @@ _llgo_12: ; preds = %_llgo_14, %_llgo_9
_llgo_13: ; preds = %_llgo_14, %_llgo_10 _llgo_13: ; preds = %_llgo_14, %_llgo_10
%90 = load ptr, ptr @_llgo_string, align 8 %90 = load ptr, ptr @_llgo_string, align 8
%91 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %91 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @25, i64 13 }, ptr %91, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @26, i64 13 }, ptr %91, align 8
%92 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %90, 0 %92 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %90, 0
%93 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %92, ptr %91, 1 %93 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %92, ptr %91, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %93) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %93)
@@ -899,7 +899,7 @@ _llgo_0:
%14 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %13) %14 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %13)
%15 = load ptr, ptr @_llgo_string, align 8 %15 = load ptr, ptr @_llgo_string, align 8
%16 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %16 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @20, i64 5 }, ptr %16, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @21, i64 5 }, ptr %16, align 8
%17 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %15, 0 %17 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %15, 0
%18 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %17, ptr %16, 1 %18 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %17, ptr %16, 1
%19 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %18) %19 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %18)
@@ -910,7 +910,7 @@ _llgo_0:
%23 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %22) %23 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %22)
%24 = load ptr, ptr @_llgo_string, align 8 %24 = load ptr, ptr @_llgo_string, align 8
%25 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %25 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @21, i64 5 }, ptr %25, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @22, i64 5 }, ptr %25, align 8
%26 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %24, 0 %26 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %24, 0
%27 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %26, ptr %25, 1 %27 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %26, ptr %25, 1
%28 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %27) %28 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %27)
@@ -935,7 +935,7 @@ _llgo_2: ; preds = %_llgo_3
%38 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %37) %38 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %37)
%39 = call %reflect.Value @reflect.Value.MapIndex(%reflect.Value %10, %reflect.Value %38) %39 = call %reflect.Value @reflect.Value.MapIndex(%reflect.Value %10, %reflect.Value %38)
%40 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %39) %40 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %39)
%41 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %40, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @21, i64 5 }) %41 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %40, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @22, i64 5 })
%42 = xor i1 %41, true %42 = xor i1 %41, true
br i1 %42, label %_llgo_4, label %_llgo_5 br i1 %42, label %_llgo_4, label %_llgo_5
@@ -948,7 +948,7 @@ _llgo_3: ; preds = %_llgo_0
_llgo_4: ; preds = %_llgo_2 _llgo_4: ; preds = %_llgo_2
%46 = load ptr, ptr @_llgo_string, align 8 %46 = load ptr, ptr @_llgo_string, align 8
%47 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %47 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @22, i64 14 }, ptr %47, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @23, i64 14 }, ptr %47, align 8
%48 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %46, 0 %48 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %46, 0
%49 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %48, ptr %47, 1 %49 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %48, ptr %47, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %49) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %49)
@@ -961,7 +961,7 @@ _llgo_5: ; preds = %_llgo_2
%53 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %52) %53 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %52)
%54 = load ptr, ptr @_llgo_string, align 8 %54 = load ptr, ptr @_llgo_string, align 8
%55 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %55 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @23, i64 4 }, ptr %55, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @24, i64 4 }, ptr %55, align 8
%56 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %54, 0 %56 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %54, 0
%57 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %56, ptr %55, 1 %57 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %56, ptr %55, 1
%58 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %57) %58 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %57)
@@ -972,14 +972,14 @@ _llgo_5: ; preds = %_llgo_2
%62 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %61) %62 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %61)
%63 = call %reflect.Value @reflect.Value.MapIndex(%reflect.Value %10, %reflect.Value %62) %63 = call %reflect.Value @reflect.Value.MapIndex(%reflect.Value %10, %reflect.Value %62)
%64 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %63) %64 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %63)
%65 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %64, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @23, i64 4 }) %65 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %64, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @24, i64 4 })
%66 = xor i1 %65, true %66 = xor i1 %65, true
br i1 %66, label %_llgo_6, label %_llgo_7 br i1 %66, label %_llgo_6, label %_llgo_7
_llgo_6: ; preds = %_llgo_5 _llgo_6: ; preds = %_llgo_5
%67 = load ptr, ptr @_llgo_string, align 8 %67 = load ptr, ptr @_llgo_string, align 8
%68 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %68 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @22, i64 14 }, ptr %68, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @23, i64 14 }, ptr %68, align 8
%69 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %67, 0 %69 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %67, 0
%70 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %69, ptr %68, 1 %70 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %69, ptr %68, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %70) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %70)
@@ -995,7 +995,7 @@ _llgo_7: ; preds = %_llgo_5
br i1 %76, label %_llgo_8, label %_llgo_9 br i1 %76, label %_llgo_8, label %_llgo_9
_llgo_8: ; preds = %_llgo_7 _llgo_8: ; preds = %_llgo_7
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @24, i64 12 }) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @25, i64 12 })
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10)
br label %_llgo_9 br label %_llgo_9
@@ -1046,7 +1046,7 @@ _llgo_12: ; preds = %_llgo_14, %_llgo_9
_llgo_13: ; preds = %_llgo_14, %_llgo_10 _llgo_13: ; preds = %_llgo_14, %_llgo_10
%107 = load ptr, ptr @_llgo_string, align 8 %107 = load ptr, ptr @_llgo_string, align 8
%108 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %108 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @25, i64 13 }, ptr %108, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @26, i64 13 }, ptr %108, align 8
%109 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %107, 0 %109 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %107, 0
%110 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %109, ptr %108, 1 %110 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %109, ptr %108, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %110) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %110)
@@ -1207,43 +1207,50 @@ _llgo_13: ; preds = %_llgo_12
br label %_llgo_14 br label %_llgo_14
_llgo_14: ; preds = %_llgo_13, %_llgo_12 _llgo_14: ; preds = %_llgo_13, %_llgo_12
%72 = load ptr, ptr @"_llgo_func$ekGNsrYBSzltfAjxbl6T8H6Yq8j16wzqS3nDj2xxGMU", align 8 %72 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 41 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 1 })
%73 = load ptr, ptr @"_llgo_iface$VdBKYV8-gcMjZtZfcf-u2oKoj9Lu3VXwuG8TGCW2S4A", align 8 %73 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/reflect.I", align 8
%74 = icmp eq ptr %73, null %74 = icmp eq ptr %73, null
br i1 %74, label %_llgo_15, label %_llgo_16 br i1 %74, label %_llgo_15, label %_llgo_16
_llgo_15: ; preds = %_llgo_14 _llgo_15: ; preds = %_llgo_14
%75 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @11, i64 3 }, ptr undef }, ptr %72, 1 store ptr %72, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/reflect.I", align 8
%76 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
%77 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %76, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %75, ptr %77, align 8
%78 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %76, 0
%79 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %78, i64 1, 1
%80 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %79, i64 1, 2
%81 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 41 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %80)
store ptr %81, ptr @"_llgo_iface$VdBKYV8-gcMjZtZfcf-u2oKoj9Lu3VXwuG8TGCW2S4A", align 8
br label %_llgo_16 br label %_llgo_16
_llgo_16: ; preds = %_llgo_15, %_llgo_14 _llgo_16: ; preds = %_llgo_15, %_llgo_14
%82 = load ptr, ptr @_llgo_any, align 8 %75 = load ptr, ptr @"_llgo_func$ekGNsrYBSzltfAjxbl6T8H6Yq8j16wzqS3nDj2xxGMU", align 8
%83 = icmp eq ptr %82, null br i1 %74, label %_llgo_17, label %_llgo_18
br i1 %83, label %_llgo_17, label %_llgo_18
_llgo_17: ; preds = %_llgo_16 _llgo_17: ; preds = %_llgo_16
%76 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @11, i64 3 }, ptr undef }, ptr %75, 1
%77 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
%78 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %77, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %76, ptr %78, align 8
%79 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %77, 0
%80 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %79, i64 1, 1
%81 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %80, i64 1, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr %72, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %81)
br label %_llgo_18
_llgo_18: ; preds = %_llgo_17, %_llgo_16
%82 = load ptr, ptr @_llgo_any, align 8
%83 = icmp eq ptr %82, null
br i1 %83, label %_llgo_19, label %_llgo_20
_llgo_19: ; preds = %_llgo_18
%84 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0) %84 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
%85 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %84, 0 %85 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %84, 0
%86 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %85, i64 0, 1 %86 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %85, i64 0, 1
%87 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %86, i64 0, 2 %87 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %86, i64 0, 2
%88 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 41 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %87) %88 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 41 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %87)
store ptr %88, ptr @_llgo_any, align 8 store ptr %88, ptr @_llgo_any, align 8
br label %_llgo_18 br label %_llgo_20
_llgo_18: ; preds = %_llgo_17, %_llgo_16 _llgo_20: ; preds = %_llgo_19, %_llgo_18
%89 = load ptr, ptr @"[]_llgo_any", align 8 %89 = load ptr, ptr @"[]_llgo_any", align 8
%90 = icmp eq ptr %89, null %90 = icmp eq ptr %89, null
br i1 %90, label %_llgo_19, label %_llgo_20 br i1 %90, label %_llgo_21, label %_llgo_22
_llgo_19: ; preds = %_llgo_18 _llgo_21: ; preds = %_llgo_20
%91 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0) %91 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
%92 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %91, 0 %92 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %91, 0
%93 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %92, i64 0, 1 %93 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %92, i64 0, 1
@@ -1251,14 +1258,14 @@ _llgo_19: ; preds = %_llgo_18
%95 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 41 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %94) %95 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 41 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %94)
%96 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.SliceOf"(ptr %95) %96 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.SliceOf"(ptr %95)
store ptr %96, ptr @"[]_llgo_any", align 8 store ptr %96, ptr @"[]_llgo_any", align 8
br label %_llgo_20 br label %_llgo_22
_llgo_20: ; preds = %_llgo_19, %_llgo_18 _llgo_22: ; preds = %_llgo_21, %_llgo_20
%97 = load ptr, ptr @"_llgo_func$KK0iU4Wpi3BdRqssvycXqtgNe2Dq1riBlM61Rds1QsU", align 8 %97 = load ptr, ptr @"_llgo_func$KK0iU4Wpi3BdRqssvycXqtgNe2Dq1riBlM61Rds1QsU", align 8
%98 = icmp eq ptr %97, null %98 = icmp eq ptr %97, null
br i1 %98, label %_llgo_21, label %_llgo_22 br i1 %98, label %_llgo_23, label %_llgo_24
_llgo_21: ; preds = %_llgo_20 _llgo_23: ; preds = %_llgo_22
%99 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34) %99 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34)
%100 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34) %100 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34)
%101 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34) %101 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34)
@@ -1311,9 +1318,9 @@ _llgo_21: ; preds = %_llgo_20
%136 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Func"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice" %127, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %135, i1 true) %136 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Func"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice" %127, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %135, i1 true)
call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %136) call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %136)
store ptr %136, ptr @"_llgo_func$KK0iU4Wpi3BdRqssvycXqtgNe2Dq1riBlM61Rds1QsU", align 8 store ptr %136, ptr @"_llgo_func$KK0iU4Wpi3BdRqssvycXqtgNe2Dq1riBlM61Rds1QsU", align 8
br label %_llgo_22 br label %_llgo_24
_llgo_22: ; preds = %_llgo_21, %_llgo_20 _llgo_24: ; preds = %_llgo_23, %_llgo_22
%137 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34) %137 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34)
%138 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34) %138 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34)
%139 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34) %139 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34)
@@ -1379,22 +1386,22 @@ _llgo_22: ; preds = %_llgo_21, %_llgo_20
store ptr %184, ptr @"github.com/goplus/llgo/cl/_testgo/reflect.struct$FjMjjQr3-2iTiWyZP1IIQFOz0hUCa0OS6pEm5uVV6Pk", align 8 store ptr %184, ptr @"github.com/goplus/llgo/cl/_testgo/reflect.struct$FjMjjQr3-2iTiWyZP1IIQFOz0hUCa0OS6pEm5uVV6Pk", align 8
%185 = load ptr, ptr @"map[_llgo_int]_llgo_string", align 8 %185 = load ptr, ptr @"map[_llgo_int]_llgo_string", align 8
%186 = icmp eq ptr %185, null %186 = icmp eq ptr %185, null
br i1 %186, label %_llgo_23, label %_llgo_24 br i1 %186, label %_llgo_25, label %_llgo_26
_llgo_23: ; preds = %_llgo_22 _llgo_25: ; preds = %_llgo_24
%187 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34) %187 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34)
%188 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 24) %188 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 24)
%189 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 40) %189 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 40)
%190 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.ArrayOf"(i64 8, ptr %189) %190 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.ArrayOf"(i64 8, ptr %189)
%191 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @16, i64 7 }, ptr %190, i64 0, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false) %191 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @17, i64 7 }, ptr %190, i64 0, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false)
%192 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34) %192 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 34)
%193 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.ArrayOf"(i64 8, ptr %192) %193 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.ArrayOf"(i64 8, ptr %192)
%194 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @17, i64 4 }, ptr %193, i64 8, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false) %194 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @18, i64 4 }, ptr %193, i64 8, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false)
%195 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 24) %195 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 24)
%196 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.ArrayOf"(i64 8, ptr %195) %196 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.ArrayOf"(i64 8, ptr %195)
%197 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @18, i64 5 }, ptr %196, i64 72, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false) %197 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @19, i64 5 }, ptr %196, i64 72, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false)
%198 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 58) %198 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 58)
%199 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @19, i64 8 }, ptr %198, i64 200, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false) %199 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @20, i64 8 }, ptr %198, i64 200, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false)
%200 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 224) %200 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 224)
%201 = getelementptr %"github.com/goplus/llgo/runtime/abi.StructField", ptr %200, i64 0 %201 = getelementptr %"github.com/goplus/llgo/runtime/abi.StructField", ptr %200, i64 0
store %"github.com/goplus/llgo/runtime/abi.StructField" %191, ptr %201, align 8 store %"github.com/goplus/llgo/runtime/abi.StructField" %191, ptr %201, align 8
@@ -1411,9 +1418,9 @@ _llgo_23: ; preds = %_llgo_22
%209 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.MapOf"(ptr %187, ptr %188, ptr %208, i64 4) %209 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.MapOf"(ptr %187, ptr %188, ptr %208, i64 4)
call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %209) call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %209)
store ptr %209, ptr @"map[_llgo_int]_llgo_string", align 8 store ptr %209, ptr @"map[_llgo_int]_llgo_string", align 8
br label %_llgo_24 br label %_llgo_26
_llgo_24: ; preds = %_llgo_23, %_llgo_22 _llgo_26: ; preds = %_llgo_25, %_llgo_24
ret void ret void
} }
@@ -1459,7 +1466,9 @@ declare void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamed"(ptr, p
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.Slice") declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.String")
declare void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr, %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr)
@@ -1473,6 +1482,8 @@ _llgo_0:
ret { i64, i64 } %11 ret { i64, i64 } %11
} }
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.SliceOf"(ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.SliceOf"(ptr)
declare %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.CallSlice(%reflect.Value, %"github.com/goplus/llgo/runtime/internal/runtime.Slice") declare %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.CallSlice(%reflect.Value, %"github.com/goplus/llgo/runtime/internal/runtime.Slice")

View File

@@ -23,18 +23,19 @@ source_filename = "github.com/goplus/llgo/cl/_testgo/tpinst"
@4 = private unnamed_addr constant [5 x i8] c"value", align 1 @4 = private unnamed_addr constant [5 x i8] c"value", align 1
@5 = private unnamed_addr constant [46 x i8] c"github.com/goplus/llgo/cl/_testgo/tpinst.value", align 1 @5 = private unnamed_addr constant [46 x i8] c"github.com/goplus/llgo/cl/_testgo/tpinst.value", align 1
@"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[int]" = linkonce global ptr null, align 8 @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[int]" = linkonce global ptr null, align 8
@"_llgo_iface$Jvxc0PCI_drlfK7S5npMGdZkQLeRkQ_x2e2CifPE6w8" = linkonce global ptr null, align 8 @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.I[int]" = linkonce global ptr null, align 8
@6 = private unnamed_addr constant [5 x i8] c"error", align 1 @6 = private unnamed_addr constant [1 x i8] c"I", align 1
@7 = private unnamed_addr constant [5 x i8] c"error", align 1
@_llgo_string = linkonce global ptr null, align 8 @_llgo_string = linkonce global ptr null, align 8
@"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]" = linkonce global ptr null, align 8 @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]" = linkonce global ptr null, align 8
@7 = private unnamed_addr constant [10 x i8] c"M[float64]", align 1 @8 = private unnamed_addr constant [10 x i8] c"M[float64]", align 1
@_llgo_float64 = linkonce global ptr null, align 8 @_llgo_float64 = linkonce global ptr null, align 8
@"github.com/goplus/llgo/cl/_testgo/tpinst.struct$7SZ-TjG6e68olyGxlMRRIOYuZz2LaKIpOrZH-w4GiTU" = linkonce global ptr null, align 8 @"github.com/goplus/llgo/cl/_testgo/tpinst.struct$7SZ-TjG6e68olyGxlMRRIOYuZz2LaKIpOrZH-w4GiTU" = linkonce global ptr null, align 8
@"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8" = linkonce global ptr null, align 8 @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8" = linkonce global ptr null, align 8
@"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]" = linkonce global ptr null, align 8 @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]" = linkonce global ptr null, align 8
@"_llgo_iface$2dxw6yZ6V86Spb7J0dTDIoWqg7ba7UDXlAlpJv3-HLk" = linkonce global ptr null, align 8 @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.I[float64]" = linkonce global ptr null, align 8
@"github.com/goplus/llgo/cl/_testgo/tpinst.iface$2sV9fFeqOv1SzesvwIdhTqCFzDT8ZX5buKUSAoHNSww" = linkonce global ptr null, align 8 @"github.com/goplus/llgo/cl/_testgo/tpinst.iface$2sV9fFeqOv1SzesvwIdhTqCFzDT8ZX5buKUSAoHNSww" = linkonce global ptr null, align 8
@8 = private unnamed_addr constant [95 x i8] c"type assertion github.com/goplus/llgo/cl/_testgo/tpinst.I[int] -> interface{value() int} failed", align 1 @9 = private unnamed_addr constant [95 x i8] c"type assertion github.com/goplus/llgo/cl/_testgo/tpinst.I[int] -> interface{value() int} failed", align 1
define void @"github.com/goplus/llgo/cl/_testgo/tpinst.demo"() { define void @"github.com/goplus/llgo/cl/_testgo/tpinst.demo"() {
_llgo_0: _llgo_0:
@@ -43,108 +44,106 @@ _llgo_0:
store i64 100, ptr %1, align 4 store i64 100, ptr %1, align 4
%2 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[int]", align 8 %2 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[int]", align 8
%3 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[int]", align 8 %3 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[int]", align 8
%4 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 %4 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.I[int]", align 8
%5 = load ptr, ptr @"_llgo_iface$Jvxc0PCI_drlfK7S5npMGdZkQLeRkQ_x2e2CifPE6w8", align 8 %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %4, ptr %3)
%6 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %5, ptr %3) %6 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %5, 0
%7 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %6, 0 %7 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, ptr %0, 1
%8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, ptr %0, 1 %8 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %7)
%9 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %8) %9 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, 0
%10 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8, 0 %10 = getelementptr ptr, ptr %9, i64 3
%11 = getelementptr ptr, ptr %10, i64 3 %11 = load ptr, ptr %10, align 8
%12 = load ptr, ptr %11, align 8 %12 = insertvalue { ptr, ptr } undef, ptr %11, 0
%13 = insertvalue { ptr, ptr } undef, ptr %12, 0 %13 = insertvalue { ptr, ptr } %12, ptr %8, 1
%14 = insertvalue { ptr, ptr } %13, ptr %9, 1 %14 = extractvalue { ptr, ptr } %13, 1
%15 = extractvalue { ptr, ptr } %14, 1 %15 = extractvalue { ptr, ptr } %13, 0
%16 = extractvalue { ptr, ptr } %14, 0 %16 = call i64 %15(ptr %14)
%17 = call i64 %16(ptr %15) %17 = icmp ne i64 %16, 100
%18 = icmp ne i64 %17, 100 br i1 %17, label %_llgo_1, label %_llgo_2
br i1 %18, label %_llgo_1, label %_llgo_2
_llgo_1: ; preds = %_llgo_0 _llgo_1: ; preds = %_llgo_0
%19 = load ptr, ptr @_llgo_string, align 8 %18 = load ptr, ptr @_llgo_string, align 8
%20 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %19 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @6, i64 5 }, ptr %20, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 5 }, ptr %19, align 8
%21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %19, 0 %20 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %18, 0
%22 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %21, ptr %20, 1 %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %20, ptr %19, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %22) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %21)
unreachable unreachable
_llgo_2: ; preds = %_llgo_0 _llgo_2: ; preds = %_llgo_0
%23 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 8) %22 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 8)
%24 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", ptr %23, i32 0, i32 0 %23 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", ptr %22, i32 0, i32 0
store double 1.001000e+02, ptr %24, align 8 store double 1.001000e+02, ptr %23, align 8
%25 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", align 8 %24 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", align 8
%26 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", align 8 %25 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", align 8
%27 = load ptr, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8 %26 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.I[float64]", align 8
%28 = load ptr, ptr @"_llgo_iface$2dxw6yZ6V86Spb7J0dTDIoWqg7ba7UDXlAlpJv3-HLk", align 8 %27 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %26, ptr %25)
%29 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %28, ptr %26) %28 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %27, 0
%30 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %29, 0 %29 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %28, ptr %22, 1
%31 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %30, ptr %23, 1 %30 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %29)
%32 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %31) %31 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %29, 0
%33 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %31, 0 %32 = getelementptr ptr, ptr %31, i64 3
%34 = getelementptr ptr, ptr %33, i64 3 %33 = load ptr, ptr %32, align 8
%35 = load ptr, ptr %34, align 8 %34 = insertvalue { ptr, ptr } undef, ptr %33, 0
%36 = insertvalue { ptr, ptr } undef, ptr %35, 0 %35 = insertvalue { ptr, ptr } %34, ptr %30, 1
%37 = insertvalue { ptr, ptr } %36, ptr %32, 1 %36 = extractvalue { ptr, ptr } %35, 1
%38 = extractvalue { ptr, ptr } %37, 1 %37 = extractvalue { ptr, ptr } %35, 0
%39 = extractvalue { ptr, ptr } %37, 0 %38 = call double %37(ptr %36)
%40 = call double %39(ptr %38) %39 = fcmp une double %38, 1.001000e+02
%41 = fcmp une double %40, 1.001000e+02 br i1 %39, label %_llgo_3, label %_llgo_4
br i1 %41, label %_llgo_3, label %_llgo_4
_llgo_3: ; preds = %_llgo_2 _llgo_3: ; preds = %_llgo_2
%42 = load ptr, ptr @_llgo_string, align 8 %40 = load ptr, ptr @_llgo_string, align 8
%43 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %41 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @6, i64 5 }, ptr %43, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 5 }, ptr %41, align 8
%44 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %42, 0 %42 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %40, 0
%45 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %44, ptr %43, 1 %43 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %42, ptr %41, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %45) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %43)
unreachable unreachable
_llgo_4: ; preds = %_llgo_2 _llgo_4: ; preds = %_llgo_2
%46 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %8) %44 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %7)
%47 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 %45 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8
%48 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.iface$2sV9fFeqOv1SzesvwIdhTqCFzDT8ZX5buKUSAoHNSww", align 8 %46 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.iface$2sV9fFeqOv1SzesvwIdhTqCFzDT8ZX5buKUSAoHNSww", align 8
%49 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr %48, ptr %46) %47 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr %46, ptr %44)
br i1 %49, label %_llgo_7, label %_llgo_8 br i1 %47, label %_llgo_7, label %_llgo_8
_llgo_5: ; preds = %_llgo_7 _llgo_5: ; preds = %_llgo_7
%50 = load ptr, ptr @_llgo_string, align 8 %48 = load ptr, ptr @_llgo_string, align 8
%51 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %49 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @6, i64 5 }, ptr %51, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 5 }, ptr %49, align 8
%52 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %50, 0 %50 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %48, 0
%53 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %52, ptr %51, 1 %51 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %50, ptr %49, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %53) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %51)
unreachable unreachable
_llgo_6: ; preds = %_llgo_7 _llgo_6: ; preds = %_llgo_7
ret void ret void
_llgo_7: ; preds = %_llgo_4 _llgo_7: ; preds = %_llgo_4
%54 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8, 1 %52 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, 1
%55 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.iface$2sV9fFeqOv1SzesvwIdhTqCFzDT8ZX5buKUSAoHNSww", align 8 %53 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.iface$2sV9fFeqOv1SzesvwIdhTqCFzDT8ZX5buKUSAoHNSww", align 8
%56 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %55, ptr %46) %54 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %53, ptr %44)
%57 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %56, 0 %55 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %54, 0
%58 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %57, ptr %54, 1 %56 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %55, ptr %52, 1
%59 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %58) %57 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %56)
%60 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %58, 0 %58 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %56, 0
%61 = getelementptr ptr, ptr %60, i64 3 %59 = getelementptr ptr, ptr %58, i64 3
%62 = load ptr, ptr %61, align 8 %60 = load ptr, ptr %59, align 8
%63 = insertvalue { ptr, ptr } undef, ptr %62, 0 %61 = insertvalue { ptr, ptr } undef, ptr %60, 0
%64 = insertvalue { ptr, ptr } %63, ptr %59, 1 %62 = insertvalue { ptr, ptr } %61, ptr %57, 1
%65 = extractvalue { ptr, ptr } %64, 1 %63 = extractvalue { ptr, ptr } %62, 1
%66 = extractvalue { ptr, ptr } %64, 0 %64 = extractvalue { ptr, ptr } %62, 0
%67 = call i64 %66(ptr %65) %65 = call i64 %64(ptr %63)
%68 = icmp ne i64 %67, 100 %66 = icmp ne i64 %65, 100
br i1 %68, label %_llgo_5, label %_llgo_6 br i1 %66, label %_llgo_5, label %_llgo_6
_llgo_8: ; preds = %_llgo_4 _llgo_8: ; preds = %_llgo_4
%69 = load ptr, ptr @_llgo_string, align 8 %67 = load ptr, ptr @_llgo_string, align 8
%70 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %68 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 95 }, ptr %70, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @9, i64 95 }, ptr %68, align 8
%71 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %69, 0 %69 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %67, 0
%72 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %71, ptr %70, 1 %70 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %69, ptr %68, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %72) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %70)
unreachable unreachable
} }
@@ -289,54 +288,61 @@ _llgo_9: ; preds = %_llgo_6
br label %_llgo_10 br label %_llgo_10
_llgo_10: ; preds = %_llgo_9, %_llgo_6 _llgo_10: ; preds = %_llgo_9, %_llgo_6
%47 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 %47 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 40 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @6, i64 1 })
%48 = load ptr, ptr @"_llgo_iface$Jvxc0PCI_drlfK7S5npMGdZkQLeRkQ_x2e2CifPE6w8", align 8 %48 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.I[int]", align 8
%49 = icmp eq ptr %48, null %49 = icmp eq ptr %48, null
br i1 %49, label %_llgo_11, label %_llgo_12 br i1 %49, label %_llgo_11, label %_llgo_12
_llgo_11: ; preds = %_llgo_10 _llgo_11: ; preds = %_llgo_10
%50 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 5 }, ptr undef }, ptr %47, 1 store ptr %47, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.I[int]", align 8
%51 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
%52 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %51, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %50, ptr %52, align 8
%53 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %51, 0
%54 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %53, i64 1, 1
%55 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %54, i64 1, 2
%56 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 40 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %55)
store ptr %56, ptr @"_llgo_iface$Jvxc0PCI_drlfK7S5npMGdZkQLeRkQ_x2e2CifPE6w8", align 8
br label %_llgo_12 br label %_llgo_12
_llgo_12: ; preds = %_llgo_11, %_llgo_10 _llgo_12: ; preds = %_llgo_11, %_llgo_10
%57 = load ptr, ptr @_llgo_string, align 8 %50 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8
%58 = icmp eq ptr %57, null br i1 %49, label %_llgo_13, label %_llgo_14
br i1 %58, label %_llgo_13, label %_llgo_14
_llgo_13: ; preds = %_llgo_12 _llgo_13: ; preds = %_llgo_12
%59 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 24) %51 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 5 }, ptr undef }, ptr %50, 1
store ptr %59, ptr @_llgo_string, align 8 %52 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
%53 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %52, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %51, ptr %53, align 8
%54 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %52, 0
%55 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %54, i64 1, 1
%56 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %55, i64 1, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr %47, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %56)
br label %_llgo_14 br label %_llgo_14
_llgo_14: ; preds = %_llgo_13, %_llgo_12 _llgo_14: ; preds = %_llgo_13, %_llgo_12
%60 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 40 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 10 }, i64 25, i64 8, i64 0, i64 2) %57 = load ptr, ptr @_llgo_string, align 8
%61 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", align 8 %58 = icmp eq ptr %57, null
%62 = icmp eq ptr %61, null br i1 %58, label %_llgo_15, label %_llgo_16
br i1 %62, label %_llgo_15, label %_llgo_16
_llgo_15: ; preds = %_llgo_14 _llgo_15: ; preds = %_llgo_14
store ptr %60, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", align 8 %59 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 24)
store ptr %59, ptr @_llgo_string, align 8
br label %_llgo_16 br label %_llgo_16
_llgo_16: ; preds = %_llgo_15, %_llgo_14 _llgo_16: ; preds = %_llgo_15, %_llgo_14
%63 = load ptr, ptr @_llgo_float64, align 8 %60 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 40 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 10 }, i64 25, i64 8, i64 0, i64 2)
%64 = icmp eq ptr %63, null %61 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", align 8
br i1 %64, label %_llgo_17, label %_llgo_18 %62 = icmp eq ptr %61, null
br i1 %62, label %_llgo_17, label %_llgo_18
_llgo_17: ; preds = %_llgo_16 _llgo_17: ; preds = %_llgo_16
%65 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 46) store ptr %60, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", align 8
store ptr %65, ptr @_llgo_float64, align 8
br label %_llgo_18 br label %_llgo_18
_llgo_18: ; preds = %_llgo_17, %_llgo_16 _llgo_18: ; preds = %_llgo_17, %_llgo_16
%63 = load ptr, ptr @_llgo_float64, align 8
%64 = icmp eq ptr %63, null
br i1 %64, label %_llgo_19, label %_llgo_20
_llgo_19: ; preds = %_llgo_18
%65 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 46)
store ptr %65, ptr @_llgo_float64, align 8
br label %_llgo_20
_llgo_20: ; preds = %_llgo_19, %_llgo_18
%66 = load ptr, ptr @_llgo_float64, align 8 %66 = load ptr, ptr @_llgo_float64, align 8
%67 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 46) %67 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 46)
%68 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @2, i64 1 }, ptr %67, i64 0, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false) %68 = call %"github.com/goplus/llgo/runtime/abi.StructField" @"github.com/goplus/llgo/runtime/internal/runtime.StructField"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @2, i64 1 }, ptr %67, i64 0, %"github.com/goplus/llgo/runtime/internal/runtime.String" zeroinitializer, i1 false)
@@ -349,20 +355,20 @@ _llgo_18: ; preds = %_llgo_17, %_llgo_16
%74 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Struct"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 40 }, i64 8, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %73) %74 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Struct"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 40 }, i64 8, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %73)
store ptr %74, ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.struct$7SZ-TjG6e68olyGxlMRRIOYuZz2LaKIpOrZH-w4GiTU", align 8 store ptr %74, ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.struct$7SZ-TjG6e68olyGxlMRRIOYuZz2LaKIpOrZH-w4GiTU", align 8
%75 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.struct$7SZ-TjG6e68olyGxlMRRIOYuZz2LaKIpOrZH-w4GiTU", align 8 %75 = load ptr, ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.struct$7SZ-TjG6e68olyGxlMRRIOYuZz2LaKIpOrZH-w4GiTU", align 8
br i1 %62, label %_llgo_19, label %_llgo_20 br i1 %62, label %_llgo_21, label %_llgo_22
_llgo_19: ; preds = %_llgo_18 _llgo_21: ; preds = %_llgo_20
%76 = load ptr, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8 %76 = load ptr, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8
%77 = icmp eq ptr %76, null %77 = icmp eq ptr %76, null
br i1 %77, label %_llgo_21, label %_llgo_22 br i1 %77, label %_llgo_23, label %_llgo_24
_llgo_20: ; preds = %_llgo_22, %_llgo_18 _llgo_22: ; preds = %_llgo_24, %_llgo_20
%78 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 40 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 10 }, i64 25, i64 8, i64 0, i64 2) %78 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamed"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 40 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 10 }, i64 25, i64 8, i64 0, i64 2)
%79 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", align 8 %79 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", align 8
%80 = icmp eq ptr %79, null %80 = icmp eq ptr %79, null
br i1 %80, label %_llgo_23, label %_llgo_24 br i1 %80, label %_llgo_25, label %_llgo_26
_llgo_21: ; preds = %_llgo_19 _llgo_23: ; preds = %_llgo_21
%81 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0) %81 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 0)
%82 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %81, 0 %82 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %81, 0
%83 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %82, i64 0, 1 %83 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %82, i64 0, 1
@@ -377,9 +383,9 @@ _llgo_21: ; preds = %_llgo_19
%91 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Func"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice" %84, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %90, i1 false) %91 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Func"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice" %84, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %90, i1 false)
call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %91) call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %91)
store ptr %91, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8 store ptr %91, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8
br label %_llgo_22 br label %_llgo_24
_llgo_22: ; preds = %_llgo_21, %_llgo_19 _llgo_24: ; preds = %_llgo_23, %_llgo_21
%92 = load ptr, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8 %92 = load ptr, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8
%93 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 5 }, ptr undef, ptr undef, ptr undef }, ptr %92, 1 %93 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 5 }, ptr undef, ptr undef, ptr undef }, ptr %92, 1
%94 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %93, ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.(*M[float64]).Value", 2 %94 = insertvalue %"github.com/goplus/llgo/runtime/abi.Method" %93, ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.(*M[float64]).Value", 2
@@ -397,33 +403,40 @@ _llgo_22: ; preds = %_llgo_21, %_llgo_19
%104 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %103, i64 2, 1 %104 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %103, i64 2, 1
%105 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %104, i64 2, 2 %105 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %104, i64 2, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamed"(ptr %60, ptr %75, { ptr, i64, i64 } zeroinitializer, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %105) call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamed"(ptr %60, ptr %75, { ptr, i64, i64 } zeroinitializer, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %105)
br label %_llgo_20 br label %_llgo_22
_llgo_23: ; preds = %_llgo_20 _llgo_25: ; preds = %_llgo_22
%106 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr %78) %106 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr %78)
call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %106) call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %106)
store ptr %106, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", align 8 store ptr %106, ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", align 8
br label %_llgo_24
_llgo_24: ; preds = %_llgo_23, %_llgo_20
%107 = load ptr, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8
%108 = load ptr, ptr @"_llgo_iface$2dxw6yZ6V86Spb7J0dTDIoWqg7ba7UDXlAlpJv3-HLk", align 8
%109 = icmp eq ptr %108, null
br i1 %109, label %_llgo_25, label %_llgo_26
_llgo_25: ; preds = %_llgo_24
%110 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 5 }, ptr undef }, ptr %107, 1
%111 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
%112 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %111, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %110, ptr %112, align 8
%113 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %111, 0
%114 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %113, i64 1, 1
%115 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %114, i64 1, 2
%116 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 40 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %115)
store ptr %116, ptr @"_llgo_iface$2dxw6yZ6V86Spb7J0dTDIoWqg7ba7UDXlAlpJv3-HLk", align 8
br label %_llgo_26 br label %_llgo_26
_llgo_26: ; preds = %_llgo_25, %_llgo_24 _llgo_26: ; preds = %_llgo_25, %_llgo_22
%107 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 40 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @6, i64 1 })
%108 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.I[float64]", align 8
%109 = icmp eq ptr %108, null
br i1 %109, label %_llgo_27, label %_llgo_28
_llgo_27: ; preds = %_llgo_26
store ptr %107, ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.I[float64]", align 8
br label %_llgo_28
_llgo_28: ; preds = %_llgo_27, %_llgo_26
%110 = load ptr, ptr @"_llgo_func$UYiLlmcWxoOKZPPzvR4LByitNeKoVGoTrB_5ubdOWW8", align 8
br i1 %109, label %_llgo_29, label %_llgo_30
_llgo_29: ; preds = %_llgo_28
%111 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @3, i64 5 }, ptr undef }, ptr %110, 1
%112 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
%113 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %112, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %111, ptr %113, align 8
%114 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %112, 0
%115 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %114, i64 1, 1
%116 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %115, i64 1, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr %107, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %116)
br label %_llgo_30
_llgo_30: ; preds = %_llgo_29, %_llgo_28
%117 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 %117 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8
%118 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @5, i64 46 }, ptr undef }, ptr %117, 1 %118 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @5, i64 46 }, ptr undef }, ptr %117, 1
%119 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24) %119 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
@@ -455,7 +468,9 @@ declare void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(p
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.Slice") declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.String")
declare void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr, %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr)
@@ -465,4 +480,6 @@ declare void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.c
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr, ptr) declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr, ptr)

View File

@@ -26,7 +26,8 @@ source_filename = "github.com/goplus/llgo/cl/_testrt/tpabi"
@7 = private unnamed_addr constant [83 x i8] c"type assertion any -> github.com/goplus/llgo/cl/_testrt/tpabi.T[string, int] failed", align 1 @7 = private unnamed_addr constant [83 x i8] c"type assertion any -> github.com/goplus/llgo/cl/_testrt/tpabi.T[string, int] failed", align 1
@8 = private unnamed_addr constant [5 x i8] c"hello", align 1 @8 = private unnamed_addr constant [5 x i8] c"hello", align 1
@"*_llgo_github.com/goplus/llgo/cl/_testrt/tpabi.T[string,int]" = linkonce global ptr null, align 8 @"*_llgo_github.com/goplus/llgo/cl/_testrt/tpabi.T[string,int]" = linkonce global ptr null, align 8
@"_llgo_iface$BP0p_lUsEd-IbbtJVukGmgrdQkqzcoYzSiwgUvgFvUs" = linkonce global ptr null, align 8 @"_llgo_github.com/goplus/llgo/cl/_testrt/tpabi.I" = linkonce global ptr null, align 8
@9 = private unnamed_addr constant [1 x i8] c"I", align 1
define void @"github.com/goplus/llgo/cl/_testrt/tpabi.init"() { define void @"github.com/goplus/llgo/cl/_testrt/tpabi.init"() {
_llgo_0: _llgo_0:
@@ -73,44 +74,43 @@ _llgo_1: ; preds = %_llgo_0
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 5 }, ptr %15, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 5 }, ptr %15, align 8
store i64 100, ptr %16, align 4 store i64 100, ptr %16, align 4
%17 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testrt/tpabi.T[string,int]", align 8 %17 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testrt/tpabi.T[string,int]", align 8
%18 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 %18 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testrt/tpabi.I", align 8
%19 = load ptr, ptr @"_llgo_iface$BP0p_lUsEd-IbbtJVukGmgrdQkqzcoYzSiwgUvgFvUs", align 8 %19 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %18, ptr %17)
%20 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %19, ptr %17) %20 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %19, 0
%21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %20, 0 %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %20, ptr %14, 1
%22 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %21, ptr %14, 1 %22 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %21)
%23 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %22) %23 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %21, 0
%24 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %22, 0 %24 = getelementptr ptr, ptr %23, i64 3
%25 = getelementptr ptr, ptr %24, i64 3 %25 = load ptr, ptr %24, align 8
%26 = load ptr, ptr %25, align 8 %26 = insertvalue { ptr, ptr } undef, ptr %25, 0
%27 = insertvalue { ptr, ptr } undef, ptr %26, 0 %27 = insertvalue { ptr, ptr } %26, ptr %22, 1
%28 = insertvalue { ptr, ptr } %27, ptr %23, 1 %28 = extractvalue { ptr, ptr } %27, 1
%29 = extractvalue { ptr, ptr } %28, 1 %29 = extractvalue { ptr, ptr } %27, 0
%30 = extractvalue { ptr, ptr } %28, 0 call void %29(ptr %28)
call void %30(ptr %29) %30 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 32)
%31 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 32) %31 = getelementptr inbounds i64, ptr %30, i64 0
%32 = getelementptr inbounds i64, ptr %31, i64 0 %32 = getelementptr inbounds i64, ptr %30, i64 1
%33 = getelementptr inbounds i64, ptr %31, i64 1 %33 = getelementptr inbounds i64, ptr %30, i64 2
%34 = getelementptr inbounds i64, ptr %31, i64 2 %34 = getelementptr inbounds i64, ptr %30, i64 3
%35 = getelementptr inbounds i64, ptr %31, i64 3 store i64 1, ptr %31, align 4
store i64 1, ptr %32, align 4 store i64 2, ptr %32, align 4
store i64 2, ptr %33, align 4 store i64 3, ptr %33, align 4
store i64 3, ptr %34, align 4 store i64 4, ptr %34, align 4
store i64 4, ptr %35, align 4 %35 = getelementptr [4 x i64], ptr %30, i64 1
%36 = getelementptr [4 x i64], ptr %31, i64 1 call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintPointer"(ptr %35)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintPointer"(ptr %36)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10)
%37 = getelementptr [4 x i64], ptr %31, i64 1 %36 = getelementptr [4 x i64], ptr %30, i64 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintPointer"(ptr %37) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintPointer"(ptr %36)
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10)
ret void ret void
_llgo_2: ; preds = %_llgo_0 _llgo_2: ; preds = %_llgo_0
%38 = load ptr, ptr @_llgo_string, align 8 %37 = load ptr, ptr @_llgo_string, align 8
%39 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) %38 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 83 }, ptr %39, align 8 store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 83 }, ptr %38, align 8
%40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %38, 0 %39 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %37, 0
%41 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %40, ptr %39, 1 %40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %39, ptr %38, 1
call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %41) call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %40)
unreachable unreachable
} }
@@ -265,24 +265,31 @@ _llgo_11: ; preds = %_llgo_8
br label %_llgo_12 br label %_llgo_12
_llgo_12: ; preds = %_llgo_11, %_llgo_8 _llgo_12: ; preds = %_llgo_11, %_llgo_8
%60 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 %60 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @1, i64 39 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @9, i64 1 })
%61 = load ptr, ptr @"_llgo_iface$BP0p_lUsEd-IbbtJVukGmgrdQkqzcoYzSiwgUvgFvUs", align 8 %61 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testrt/tpabi.I", align 8
%62 = icmp eq ptr %61, null %62 = icmp eq ptr %61, null
br i1 %62, label %_llgo_13, label %_llgo_14 br i1 %62, label %_llgo_13, label %_llgo_14
_llgo_13: ; preds = %_llgo_12 _llgo_13: ; preds = %_llgo_12
%63 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @5, i64 4 }, ptr undef }, ptr %60, 1 store ptr %60, ptr @"_llgo_github.com/goplus/llgo/cl/_testrt/tpabi.I", align 8
%64 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
%65 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %64, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %63, ptr %65, align 8
%66 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %64, 0
%67 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %66, i64 1, 1
%68 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %67, i64 1, 2
%69 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @1, i64 39 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %68)
store ptr %69, ptr @"_llgo_iface$BP0p_lUsEd-IbbtJVukGmgrdQkqzcoYzSiwgUvgFvUs", align 8
br label %_llgo_14 br label %_llgo_14
_llgo_14: ; preds = %_llgo_13, %_llgo_12 _llgo_14: ; preds = %_llgo_13, %_llgo_12
%63 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8
br i1 %62, label %_llgo_15, label %_llgo_16
_llgo_15: ; preds = %_llgo_14
%64 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @5, i64 4 }, ptr undef }, ptr %63, 1
%65 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
%66 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %65, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %64, ptr %66, align 8
%67 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %65, 0
%68 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %67, i64 1, 1
%69 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %68, i64 1, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr %60, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %69)
br label %_llgo_16
_llgo_16: ; preds = %_llgo_15, %_llgo_14
ret void ret void
} }
@@ -312,7 +319,9 @@ declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.Slice") declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.String")
declare void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr, %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr)

View File

@@ -37,7 +37,8 @@ source_filename = "github.com/goplus/llgo/cl/_testrt/tpmethod"
@10 = private unnamed_addr constant [2 x i8] c"fn", align 1 @10 = private unnamed_addr constant [2 x i8] c"fn", align 1
@11 = private unnamed_addr constant [4 x i8] c"Then", align 1 @11 = private unnamed_addr constant [4 x i8] c"Then", align 1
@"*_llgo_github.com/goplus/llgo/cl/_testrt/tpmethod.future[github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]]" = linkonce global ptr null, align 8 @"*_llgo_github.com/goplus/llgo/cl/_testrt/tpmethod.future[github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]]" = linkonce global ptr null, align 8
@"_llgo_iface$kSla6xFkiJD3PX1RdCGebCgULXloNxgSHKPEQsXsqos" = linkonce global ptr null, align 8 @"_llgo_github.com/goplus/llgo/cl/_testrt/tpmethod.Future[github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]]" = linkonce global ptr null, align 8
@12 = private unnamed_addr constant [6 x i8] c"Future", align 1
define %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"github.com/goplus/llgo/cl/_testrt/tpmethod.ReadFile"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %0) { define %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"github.com/goplus/llgo/cl/_testrt/tpmethod.ReadFile"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %0) {
_llgo_0: _llgo_0:
@@ -129,14 +130,11 @@ _llgo_0:
store { ptr, ptr } %0, ptr %2, align 8 store { ptr, ptr } %0, ptr %2, align 8
%3 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testrt/tpmethod.future[github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]]", align 8 %3 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testrt/tpmethod.future[github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]]", align 8
%4 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testrt/tpmethod.future[github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]]", align 8 %4 = load ptr, ptr @"*_llgo_github.com/goplus/llgo/cl/_testrt/tpmethod.future[github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]]", align 8
%5 = load ptr, ptr @"_llgo_func$wp7b63sFyNWPTd8VyEOOosByqpZg5pKsGThGMOTpyvo", align 8 %5 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testrt/tpmethod.Future[github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]]", align 8
%6 = load ptr, ptr @"github.com/goplus/llgo/cl/_testrt/tpmethod.struct$s_pTkk2q6m_bRjfPic11Z1ogmQ-VdSHpGxyzvfszwb8", align 8 %6 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %5, ptr %4)
%7 = load ptr, ptr @"_llgo_func$pIyBXw4qkUL3JRjAVf_wwtiGz7b0evOvoFHlctBJd6o", align 8 %7 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %6, 0
%8 = load ptr, ptr @"_llgo_iface$kSla6xFkiJD3PX1RdCGebCgULXloNxgSHKPEQsXsqos", align 8 %8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, ptr %1, 1
%9 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %8, ptr %4) ret %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8
%10 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %9, 0
%11 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %10, ptr %1, 1
ret %"github.com/goplus/llgo/runtime/internal/runtime.iface" %11
} }
define linkonce void @"__llgo_stub.github.com/goplus/llgo/cl/_testrt/tpmethod.ReadFile$1"(ptr %0, { ptr, ptr } %1) { define linkonce void @"__llgo_stub.github.com/goplus/llgo/cl/_testrt/tpmethod.ReadFile$1"(ptr %0, { ptr, ptr } %1) {
@@ -525,24 +523,33 @@ _llgo_20: ; preds = %_llgo_19, %_llgo_18
%249 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr %248) %249 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr %248)
call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %249) call void @"github.com/goplus/llgo/runtime/internal/runtime.SetDirectIface"(ptr %249)
store ptr %249, ptr @"*_llgo_github.com/goplus/llgo/cl/_testrt/tpmethod.future[github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]]", align 8 store ptr %249, ptr @"*_llgo_github.com/goplus/llgo/cl/_testrt/tpmethod.future[github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]]", align 8
%250 = load ptr, ptr @"_llgo_func$pIyBXw4qkUL3JRjAVf_wwtiGz7b0evOvoFHlctBJd6o", align 8 %250 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewNamedInterface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @1, i64 42 }, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 6 })
%251 = load ptr, ptr @"_llgo_iface$kSla6xFkiJD3PX1RdCGebCgULXloNxgSHKPEQsXsqos", align 8 %251 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testrt/tpmethod.Future[github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]]", align 8
%252 = icmp eq ptr %251, null %252 = icmp eq ptr %251, null
br i1 %252, label %_llgo_21, label %_llgo_22 br i1 %252, label %_llgo_21, label %_llgo_22
_llgo_21: ; preds = %_llgo_20 _llgo_21: ; preds = %_llgo_20
%253 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @11, i64 4 }, ptr undef }, ptr %250, 1 store ptr %250, ptr @"_llgo_github.com/goplus/llgo/cl/_testrt/tpmethod.Future[github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]]", align 8
%254 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
%255 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %254, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %253, ptr %255, align 8
%256 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %254, 0
%257 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %256, i64 1, 1
%258 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %257, i64 1, 2
%259 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @1, i64 42 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %258)
store ptr %259, ptr @"_llgo_iface$kSla6xFkiJD3PX1RdCGebCgULXloNxgSHKPEQsXsqos", align 8
br label %_llgo_22 br label %_llgo_22
_llgo_22: ; preds = %_llgo_21, %_llgo_20 _llgo_22: ; preds = %_llgo_21, %_llgo_20
%253 = load ptr, ptr @"_llgo_func$wp7b63sFyNWPTd8VyEOOosByqpZg5pKsGThGMOTpyvo", align 8
%254 = load ptr, ptr @"github.com/goplus/llgo/cl/_testrt/tpmethod.struct$s_pTkk2q6m_bRjfPic11Z1ogmQ-VdSHpGxyzvfszwb8", align 8
%255 = load ptr, ptr @"_llgo_func$pIyBXw4qkUL3JRjAVf_wwtiGz7b0evOvoFHlctBJd6o", align 8
br i1 %252, label %_llgo_23, label %_llgo_24
_llgo_23: ; preds = %_llgo_22
%256 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @11, i64 4 }, ptr undef }, ptr %255, 1
%257 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 24)
%258 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %257, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %256, ptr %258, align 8
%259 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %257, 0
%260 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %259, i64 1, 1
%261 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %260, i64 1, 2
call void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamedInterface"(ptr %250, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %261)
br label %_llgo_24
_llgo_24: ; preds = %_llgo_23, %_llgo_22
ret void ret void
} }
@@ -568,8 +575,6 @@ declare void @"github.com/goplus/llgo/runtime/internal/runtime.InitNamed"(ptr, p
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.PointerTo"(ptr)
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.Slice")
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr)
attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) } attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) }

View File

@@ -34,7 +34,6 @@ source_filename = "github.com/goplus/llgo/cl/_testrt/vamethod"
@"*_llgo_github.com/goplus/llgo/cl/_testrt/vamethod.CFmt" = linkonce global ptr null, align 8 @"*_llgo_github.com/goplus/llgo/cl/_testrt/vamethod.CFmt" = linkonce global ptr null, align 8
@"_llgo_github.com/goplus/llgo/cl/_testrt/vamethod.IFmt" = linkonce global ptr null, align 8 @"_llgo_github.com/goplus/llgo/cl/_testrt/vamethod.IFmt" = linkonce global ptr null, align 8
@9 = private unnamed_addr constant [4 x i8] c"IFmt", align 1 @9 = private unnamed_addr constant [4 x i8] c"IFmt", align 1
@"_llgo_iface$a85zs5wWQQoPIERm_en8plssh4spdIeeXZPC-E0TDh0" = linkonce global ptr null, align 8
@10 = private unnamed_addr constant [12 x i8] c"%s (%d,%d)\0A\00", align 1 @10 = private unnamed_addr constant [12 x i8] c"%s (%d,%d)\0A\00", align 1
@11 = private unnamed_addr constant [5 x i8] c"ifmt\00", align 1 @11 = private unnamed_addr constant [5 x i8] c"ifmt\00", align 1
@12 = private unnamed_addr constant [5 x i8] c"error", align 1 @12 = private unnamed_addr constant [5 x i8] c"error", align 1
@@ -133,7 +132,7 @@ _llgo_2: ; preds = %_llgo_5
_llgo_3: ; preds = %_llgo_0 _llgo_3: ; preds = %_llgo_0
%36 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %11, 1 %36 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %11, 1
%37 = load ptr, ptr @"_llgo_iface$a85zs5wWQQoPIERm_en8plssh4spdIeeXZPC-E0TDh0", align 8 %37 = load ptr, ptr @"_llgo_github.com/goplus/llgo/cl/_testrt/vamethod.IFmt", align 8
%38 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %37, ptr %12) %38 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr %37, ptr %12)
%39 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %38, 0 %39 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %38, 0
%40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %39, ptr %36, 1 %40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %39, ptr %36, 1
@@ -420,38 +419,16 @@ _llgo_29: ; preds = %_llgo_28
br label %_llgo_30 br label %_llgo_30
_llgo_30: ; preds = %_llgo_29, %_llgo_28 _llgo_30: ; preds = %_llgo_29, %_llgo_28
%137 = load ptr, ptr @"_llgo_func$sSO5Bw-E3E7TeJqIJF_OmmojTYyqWBhYrUwNYJNw7Bs", align 8 %137 = load ptr, ptr @_llgo_string, align 8
%138 = load ptr, ptr @"_llgo_func$vAfTC3ZLX0_lZI-ZNliu0_DkE266FSmKXxj_cqKPPkA", align 8 %138 = icmp eq ptr %137, null
%139 = load ptr, ptr @"_llgo_iface$a85zs5wWQQoPIERm_en8plssh4spdIeeXZPC-E0TDh0", align 8 br i1 %138, label %_llgo_31, label %_llgo_32
%140 = icmp eq ptr %139, null
br i1 %140, label %_llgo_31, label %_llgo_32
_llgo_31: ; preds = %_llgo_30 _llgo_31: ; preds = %_llgo_30
%141 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 6 }, ptr undef }, ptr %137, 1 %139 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 24)
%142 = insertvalue %"github.com/goplus/llgo/runtime/abi.Imethod" { %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 9 }, ptr undef }, ptr %138, 1 store ptr %139, ptr @_llgo_string, align 8
%143 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 48)
%144 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %143, i64 0
store %"github.com/goplus/llgo/runtime/abi.Imethod" %141, ptr %144, align 8
%145 = getelementptr %"github.com/goplus/llgo/runtime/abi.Imethod", ptr %143, i64 1
store %"github.com/goplus/llgo/runtime/abi.Imethod" %142, ptr %145, align 8
%146 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %143, 0
%147 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %146, i64 2, 1
%148 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %147, i64 2, 2
%149 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Interface"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @4, i64 42 }, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %148)
store ptr %149, ptr @"_llgo_iface$a85zs5wWQQoPIERm_en8plssh4spdIeeXZPC-E0TDh0", align 8
br label %_llgo_32 br label %_llgo_32
_llgo_32: ; preds = %_llgo_31, %_llgo_30 _llgo_32: ; preds = %_llgo_31, %_llgo_30
%150 = load ptr, ptr @_llgo_string, align 8
%151 = icmp eq ptr %150, null
br i1 %151, label %_llgo_33, label %_llgo_34
_llgo_33: ; preds = %_llgo_32
%152 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.Basic"(i64 24)
store ptr %152, ptr @_llgo_string, align 8
br label %_llgo_34
_llgo_34: ; preds = %_llgo_33, %_llgo_32
ret void ret void
} }

View File

@@ -186,6 +186,7 @@ func (b Builder) abiInterfaceOf(t *types.Interface) func() Expr {
} }
return func() Expr { return func() Expr {
prog := b.Prog prog := b.Prog
pkg := b.Pkg
methods := make([]Expr, n) methods := make([]Expr, n)
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
m := t.Method(i) m := t.Method(i)
@@ -195,7 +196,6 @@ func (b Builder) abiInterfaceOf(t *types.Interface) func() Expr {
} }
methods[i] = b.abiImethodOf(mName, typs[i]) methods[i] = b.abiImethodOf(mName, typs[i])
} }
pkg := b.Pkg
fn := pkg.rtFunc("Interface") fn := pkg.rtFunc("Interface")
tSlice := lastParamType(prog, fn) tSlice := lastParamType(prog, fn)
methodSlice := b.SliceLit(tSlice, methods...) methodSlice := b.SliceLit(tSlice, methods...)

View File

@@ -43,11 +43,11 @@ func (b Builder) newItab(tintf, typ Expr) Expr {
return b.Call(b.Pkg.rtFunc("NewItab"), tintf, typ) return b.Call(b.Pkg.rtFunc("NewItab"), tintf, typ)
} }
func (b Builder) unsafeInterface(rawIntf *types.Interface, t Expr, data llvm.Value) llvm.Value { func (b Builder) unsafeInterface(rawIntf *types.Interface, originType types.Type, t Expr, data llvm.Value) llvm.Value {
if rawIntf.Empty() { if rawIntf.Empty() {
return b.unsafeEface(t.impl, data) return b.unsafeEface(t.impl, data)
} }
tintf := b.abiType(rawIntf) tintf := b.abiType(originType)
itab := b.newItab(tintf, t) itab := b.newItab(tintf, t)
return b.unsafeIface(itab.impl, data) return b.unsafeIface(itab.impl, data)
} }
@@ -112,7 +112,7 @@ func (b Builder) MakeInterface(tinter Type, x Expr) (ret Expr) {
case abi.Indirect: case abi.Indirect:
vptr := b.AllocU(typ) vptr := b.AllocU(typ)
b.Store(vptr, x) b.Store(vptr, x)
return Expr{b.unsafeInterface(rawIntf, tabi, vptr.impl), tinter} return Expr{b.unsafeInterface(rawIntf, tinter.raw.Type, tabi, vptr.impl), tinter}
} }
ximpl := x.impl ximpl := x.impl
if lvl > 0 { if lvl > 0 {
@@ -121,7 +121,7 @@ func (b Builder) MakeInterface(tinter Type, x Expr) (ret Expr) {
var u llvm.Value var u llvm.Value
switch kind { switch kind {
case abi.Pointer: case abi.Pointer:
return Expr{b.unsafeInterface(rawIntf, tabi, ximpl), tinter} return Expr{b.unsafeInterface(rawIntf, tinter.raw.Type, tabi, ximpl), tinter}
case abi.Integer: case abi.Integer:
tu := prog.Uintptr() tu := prog.Uintptr()
u = llvm.CreateIntCast(b.impl, ximpl, tu.ll) u = llvm.CreateIntCast(b.impl, ximpl, tu.ll)
@@ -136,7 +136,7 @@ func (b Builder) MakeInterface(tinter Type, x Expr) (ret Expr) {
panic("todo") panic("todo")
} }
data := llvm.CreateIntToPtr(b.impl, u, prog.tyVoidPtr()) data := llvm.CreateIntToPtr(b.impl, u, prog.tyVoidPtr())
return Expr{b.unsafeInterface(rawIntf, tabi, data), tinter} return Expr{b.unsafeInterface(rawIntf, tinter.raw.Type, tabi, data), tinter}
} }
func (b Builder) valFromData(typ Type, data llvm.Value) Expr { func (b Builder) valFromData(typ Type, data llvm.Value) Expr {
@@ -249,7 +249,9 @@ func (b Builder) TypeAssert(x Expr, assertedTyp Type, commaOk bool) Expr {
} else { } else {
if rawIntf, ok := assertedTyp.raw.Type.Underlying().(*types.Interface); ok { if rawIntf, ok := assertedTyp.raw.Type.Underlying().(*types.Interface); ok {
eq = b.InlineCall(b.Pkg.rtFunc("Implements"), tabi, tx) eq = b.InlineCall(b.Pkg.rtFunc("Implements"), tabi, tx)
val = func() Expr { return Expr{b.unsafeInterface(rawIntf, tx, b.faceData(x.impl)), assertedTyp} } val = func() Expr {
return Expr{b.unsafeInterface(rawIntf, assertedTyp.raw.Type, tx, b.faceData(x.impl)), assertedTyp}
}
} else { } else {
eq = b.BinOp(token.EQL, tx, tabi) eq = b.BinOp(token.EQL, tx, tabi)
val = func() Expr { return b.valFromData(assertedTyp, b.faceData(x.impl)) } val = func() Expr { return b.valFromData(assertedTyp, b.faceData(x.impl)) }
@@ -305,7 +307,7 @@ func (b Builder) ChangeInterface(typ Type, x Expr) (ret Expr) {
rawIntf := typ.raw.Type.Underlying().(*types.Interface) rawIntf := typ.raw.Type.Underlying().(*types.Interface)
tabi := b.faceAbiType(x) tabi := b.faceAbiType(x)
data := b.faceData(x.impl) data := b.faceData(x.impl)
return Expr{b.unsafeInterface(rawIntf, tabi, data), typ} return Expr{b.unsafeInterface(rawIntf, typ.raw.Type, tabi, data), typ}
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------