@@ -29,63 +29,56 @@ declare void @func1Uint8(i8, i8*, i8*)
29
29
30
30
declare void @func2Uint8 (i8 , i8* , i8* )
31
31
32
- ; Call a function of which only one function with this signature is used as a
33
- ; function value. This means that lowering it to IR is trivial: simply check
34
- ; whether the func value is nil, and if not, call that one function directly.
35
32
define void @runFunc1 (i8* , i32 , i8 , i8* %context , i8* %parentHandle ) {
36
33
entry:
37
34
%3 = icmp eq i32 %1 , 0
38
35
%4 = select i1 %3 , void (i8 , i8* , i8* )* null , void (i8 , i8* , i8* )* @funcInt8
39
36
%5 = icmp eq void (i8 , i8* , i8* )* %4 , null
40
37
br i1 %5 , label %fpcall.nil , label %fpcall.next
41
38
42
- fpcall.nil:
39
+ fpcall.nil: ; preds = %entry
43
40
call void @runtime.nilPanic (i8* undef , i8* null )
44
41
unreachable
45
42
46
- fpcall.next:
43
+ fpcall.next: ; preds = %entry
47
44
call void %4 (i8 %2 , i8* %0 , i8* undef )
48
45
ret void
49
46
}
50
47
51
- ; There are two functions with this signature used in a func value. That means
52
- ; that we'll have to check at runtime which of the two it is (or whether the
53
- ; func value is nil). This call will thus be lowered to a switch statement.
54
48
define void @runFunc2 (i8* , i32 , i8 , i8* %context , i8* %parentHandle ) {
55
49
entry:
56
50
br i1 false , label %fpcall.nil , label %fpcall.next
57
51
58
- fpcall.nil:
52
+ fpcall.nil: ; preds = %entry
59
53
call void @runtime.nilPanic (i8* undef , i8* null )
60
54
unreachable
61
55
62
- fpcall.next:
56
+ fpcall.next: ; preds = %entry
63
57
switch i32 %1 , label %func.default [
64
58
i32 0 , label %func.nil
65
59
i32 1 , label %func.call1
66
60
i32 2 , label %func.call2
67
61
]
68
62
69
- func.nil:
63
+ func.nil: ; preds = %fpcall.next
70
64
call void @runtime.nilPanic (i8* undef , i8* null )
71
65
unreachable
72
66
73
- func.call1:
67
+ func.call1: ; preds = %fpcall.next
74
68
call void @func1Uint8 (i8 %2 , i8* %0 , i8* undef )
75
69
br label %func.next
76
70
77
- func.call2:
71
+ func.call2: ; preds = %fpcall.next
78
72
call void @func2Uint8 (i8 %2 , i8* %0 , i8* undef )
79
73
br label %func.next
80
74
81
- func.next:
75
+ func.next: ; preds = %func.call2, %func.call1
82
76
ret void
83
77
84
- func.default:
78
+ func.default: ; preds = %fpcall.next
85
79
unreachable
86
80
}
87
81
88
- ; Special case for runtime.makeGoroutine.
89
82
define void @sleepFuncValue (i8* , i32 , i8* nocapture readnone %context , i8* nocapture readnone %parentHandle ) {
90
83
entry:
91
84
switch i32 %1 , label %func.default [
@@ -94,21 +87,21 @@ entry:
94
87
i32 2 , label %func.call2
95
88
]
96
89
97
- func.nil:
90
+ func.nil: ; preds = %entry
98
91
call void @runtime.nilPanic (i8* undef , i8* null )
99
92
unreachable
100
93
101
- func.call1:
94
+ func.call1: ; preds = %entry
102
95
call void @"internal/task.start" (i32 ptrtoint (void (i32 , i8* , i8* )* @"main$1" to i32 ), i8* null , i8* undef , i8* null )
103
96
br label %func.next
104
97
105
- func.call2:
98
+ func.call2: ; preds = %entry
106
99
call void @"internal/task.start" (i32 ptrtoint (void (i32 , i8* , i8* )* @"main$2" to i32 ), i8* null , i8* undef , i8* null )
107
100
br label %func.next
108
101
109
- func.next:
102
+ func.next: ; preds = %func.call2, %func.call1
110
103
ret void
111
104
112
- func.default:
105
+ func.default: ; preds = %entry
113
106
unreachable
114
107
}
0 commit comments